From 1ce86651c726d20e06038f3122e60cdd84e873e1 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 24 Jan 2015 12:16:06 -0800 Subject: [PATCH 01/10] mk: Split tidy into multiple tidy rules * tidy - runs all tidy scripts * tidy-basic - tidy.rs * tidy-binaries - check-binaries.py * tidy-errors - errorck.py * tidy-features - featureck.py --- mk/tests.mk | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/mk/tests.mk b/mk/tests.mk index e28f56fffe41b..a9abc6120d864 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -260,7 +260,13 @@ ALL_HS := $(filter-out $(S)src/rt/valgrind/valgrind.h \ ,$(ALL_HS)) # Run the tidy script in multiple parts to avoid huge 'echo' commands -tidy: +.PHONY: tidy +tidy: tidy-basic tidy-binaries tidy-errors tidy-features + +endif + +.PHONY: tidy-basic +tidy-basic: @$(call E, check: formatting) $(Q)find $(S)src -name '*.r[sc]' \ -and -not -regex '^$(S)src/jemalloc.*' \ @@ -286,6 +292,10 @@ tidy: | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py $(Q)echo $(ALL_HS) \ | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py + +.PHONY: tidy-binaries +tidy-binaries: + @$(call E, check: binaries) $(Q)find $(S)src -type f -perm +a+x \ -not -name '*.rs' -and -not -name '*.py' \ -and -not -name '*.sh' \ @@ -300,11 +310,16 @@ tidy: | grep '^$(S)src/libbacktrace' -v \ | grep '^$(S)src/rust-installer' -v \ | xargs $(CFG_PYTHON) $(S)src/etc/check-binaries.py - $(Q) $(CFG_PYTHON) $(S)src/etc/errorck.py $(S)src/ - $(Q) $(CFG_PYTHON) $(S)src/etc/featureck.py $(S)src/ +.PHONY: tidy-errors +tidy-errors: + @$(call E, check: extended errors) + $(Q) $(CFG_PYTHON) $(S)src/etc/errorck.py $(S)src/ -endif +.PHONY: tidy-features +tidy-features: + @$(call E, check: feature sanity) + $(Q) $(CFG_PYTHON) $(S)src/etc/featureck.py $(S)src/ ###################################################################### From 0e16ad8c3f78cf750d12afac03a1d2cc9312651c Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 24 Jan 2015 12:23:06 -0800 Subject: [PATCH 02/10] Polish errorck and featureck UI --- src/etc/errorck.py | 6 ++++-- src/etc/featureck.py | 4 +--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/etc/errorck.py b/src/etc/errorck.py index c940359abc118..9db9ed576cbe1 100644 --- a/src/etc/errorck.py +++ b/src/etc/errorck.py @@ -54,8 +54,10 @@ print("{1}: {2}\n{3}".format(*entry)) errors = True -print("{0} error codes".format(len(errcode_map))) -print("highest error code: " + max(all_errors)) +print +print("* {0} error codes".format(len(errcode_map))) +print("* highest error code: " + max(all_errors)) +print if errors: sys.exit(1) diff --git a/src/etc/featureck.py b/src/etc/featureck.py index 064cf1d40ab36..71a145e4a6eb5 100644 --- a/src/etc/featureck.py +++ b/src/etc/featureck.py @@ -234,10 +234,8 @@ lines.sort() -print -print "Rust feature summary:" print for line in lines: - print line + print "* " + line print From 290b79c15dbbefcba6309880794fb3d677f7a202 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 24 Jan 2015 15:18:19 -0800 Subject: [PATCH 03/10] Clean up tidy scripts, coverage, performance This restructures tidy.py to walk the tree itself, and improves performance considerably by not loading entire files into buffers for licenseck. Splits build rules into 'tidy', 'tidy-basic', 'tidy-binaries', 'tidy-errors', 'tidy-features'. --- mk/tests.mk | 47 +--- src/etc/errorck.py | 4 + src/etc/featureck.py | 4 + src/etc/licenseck.py | 5 - src/etc/tidy.py | 204 +++++++++++++----- src/grammar/check.sh | 2 + src/test/run-make/c-dynamic-dylib/cfoo.c | 1 + src/test/run-make/c-dynamic-rlib/cfoo.c | 1 + src/test/run-make/c-link-to-rust-dylib/bar.c | 1 + .../run-make/c-link-to-rust-staticlib/bar.c | 1 + src/test/run-make/c-static-dylib/cfoo.c | 1 + src/test/run-make/c-static-rlib/cfoo.c | 1 + src/test/run-make/extern-fn-generic/test.c | 13 +- src/test/run-make/extern-fn-mangle/test.c | 3 +- .../extern-fn-with-packed-struct/test.c | 1 + src/test/run-make/extern-fn-with-union/test.c | 1 + .../run-make/interdependent-c-libraries/bar.c | 1 + .../run-make/interdependent-c-libraries/foo.c | 1 + src/test/run-make/issue-12446/foo.c | 1 + src/test/run-make/issue-15460/foo.c | 1 + src/test/run-make/link-path-order/correct.c | 1 + src/test/run-make/link-path-order/wrong.c | 1 + .../run-make/linkage-attr-on-static/foo.c | 1 + src/test/run-make/lto-smoke-c/bar.c | 1 + src/test/run-make/manual-link/bar.c | 1 + src/test/run-make/manual-link/foo.c | 1 + src/test/run-make/no-duplicate-libs/bar.c | 1 + src/test/run-make/no-duplicate-libs/foo.c | 1 + 28 files changed, 196 insertions(+), 106 deletions(-) diff --git a/mk/tests.mk b/mk/tests.mk index a9abc6120d864..13d12c99dc964 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -235,30 +235,10 @@ cleantestlibs: ###################################################################### ifdef CFG_NOTIDY +.PHONY: tidy tidy: else -ALL_CS := $(wildcard $(S)src/rt/*.cpp \ - $(S)src/rt/*/*.cpp \ - $(S)src/rt/*/*/*.cpp \ - $(S)src/rustllvm/*.cpp) -ALL_CS := $(filter-out $(S)src/rt/miniz.cpp \ - $(wildcard $(S)src/rt/hoedown/src/*.c) \ - $(wildcard $(S)src/rt/hoedown/bin/*.c) \ - ,$(ALL_CS)) -ALL_HS := $(wildcard $(S)src/rt/*.h \ - $(S)src/rt/*/*.h \ - $(S)src/rt/*/*/*.h \ - $(S)src/rustllvm/*.h) -ALL_HS := $(filter-out $(S)src/rt/valgrind/valgrind.h \ - $(S)src/rt/valgrind/memcheck.h \ - $(S)src/rt/msvc/typeof.h \ - $(S)src/rt/msvc/stdint.h \ - $(S)src/rt/msvc/inttypes.h \ - $(wildcard $(S)src/rt/hoedown/src/*.h) \ - $(wildcard $(S)src/rt/hoedown/bin/*.h) \ - ,$(ALL_HS)) - # Run the tidy script in multiple parts to avoid huge 'echo' commands .PHONY: tidy tidy: tidy-basic tidy-binaries tidy-errors tidy-features @@ -268,30 +248,7 @@ endif .PHONY: tidy-basic tidy-basic: @$(call E, check: formatting) - $(Q)find $(S)src -name '*.r[sc]' \ - -and -not -regex '^$(S)src/jemalloc.*' \ - -and -not -regex '^$(S)src/libuv.*' \ - -and -not -regex '^$(S)src/llvm.*' \ - -and -not -regex '^$(S)src/gyp.*' \ - -and -not -regex '^$(S)src/libbacktrace.*' \ - -print0 \ - | xargs -0 -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.py' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/doc -name '*.js' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.sh' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.pl' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.c' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)find $(S)src/etc -name '*.h' \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)echo $(ALL_CS) \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py - $(Q)echo $(ALL_HS) \ - | xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py + $(Q) $(CFG_PYTHON) $(S)src/etc/tidy.py $(S)src/ .PHONY: tidy-binaries tidy-binaries: diff --git a/src/etc/errorck.py b/src/etc/errorck.py index 9db9ed576cbe1..7b11504f3cd80 100644 --- a/src/etc/errorck.py +++ b/src/etc/errorck.py @@ -15,6 +15,10 @@ import os import re +if len(sys.argv) < 2: + print "usage: errorck.py " + sys.exit(1) + src_dir = sys.argv[1] errcode_map = {} error_re = re.compile("(E\d\d\d\d)") diff --git a/src/etc/featureck.py b/src/etc/featureck.py index 71a145e4a6eb5..df4ea998fefc2 100644 --- a/src/etc/featureck.py +++ b/src/etc/featureck.py @@ -20,6 +20,10 @@ import sys, os, re +if len(sys.argv) < 2: + print "usage: featurkck.py " + sys.exit(1) + src_dir = sys.argv[1] # Features that are allowed to exist in both the language and the library diff --git a/src/etc/licenseck.py b/src/etc/licenseck.py index f38583ee1fb37..889b2c95a7ea8 100644 --- a/src/etc/licenseck.py +++ b/src/etc/licenseck.py @@ -22,11 +22,6 @@ \\1 except according to those terms.""") exceptions = [ - "rt/rust_android_dummy.cpp", # BSD, chromium - "rt/rust_android_dummy.h", # BSD, chromium - "rt/isaac/randport.cpp", # public domain - "rt/isaac/rand.h", # public domain - "rt/isaac/standard.h", # public domain "libstd/sync/mpsc/mpsc_queue.rs", # BSD "libstd/sync/mpsc/spsc_queue.rs", # BSD "test/bench/shootout-binarytrees.rs", # BSD diff --git a/src/etc/tidy.py b/src/etc/tidy.py index f5172feb5b60f..d055576f430f3 100644 --- a/src/etc/tidy.py +++ b/src/etc/tidy.py @@ -51,78 +51,184 @@ def do_license_check(name, contents): if not check_license(name, contents): report_error_name_no(name, 1, "incorrect license") - -file_names = [s for s in sys.argv[1:] if (not s.endswith("_gen.rs")) - and (not ".#" in s)] - current_name = "" current_contents = "" check_tab = True check_cr = True check_linelength = True +if len(sys.argv) < 2: + print "usage: tidy.py " + sys.exit(1) + +src_dir = sys.argv[1] try: - for line in fileinput.input(file_names, + count_rs = 0 + count_py = 0 + count_js = 0 + count_sh = 0 + count_pl = 0 + count_c = 0 + count_h = 0 + count_other = 0 + + count_lines = 0 + count_non_blank_lines = 0 + + def update_counts(current_name): + global count_rs + global count_py + global count_js + global count_sh + global count_pl + global count_c + global count_h + global count_other + + if current_name.endswith(".rs"): + count_rs += 1 + if current_name.endswith(".py"): + count_py += 1 + if current_name.endswith(".js"): + count_js += 1 + if current_name.endswith(".sh"): + count_sh += 1 + if current_name.endswith(".pl"): + count_pl += 1 + if current_name.endswith(".c"): + count_c += 1 + if current_name.endswith(".h"): + count_h += 1 + + all_paths = set() + + for (dirpath, dirnames, filenames) in os.walk(src_dir): + + # Skip some third-party directories + if "src/jemalloc" in dirpath: continue + if "src/llvm" in dirpath: continue + if "src/gyp" in dirpath: continue + if "src/libbacktrace" in dirpath: continue + if "src/compiler-rt" in dirpath: continue + if "src/rt/hoedown" in dirpath: continue + if "src/rustllvm" in dirpath: continue + if "src/rt/valgrind" in dirpath: continue + if "src/rt/msvc" in dirpath: continue + if "src/rust-installer" in dirpath: continue + + def interesting_file(f): + if "miniz.c" in f \ + or "jquery" in f \ + or "rust_android_dummy" in f: + return False + + if f.endswith(".rs") \ + or f.endswith(".py") \ + or f.endswith(".js") \ + or f.endswith(".sh") \ + or f.endswith(".pl") \ + or f.endswith(".c") \ + or f.endswith(".h") : + return True + else: + return False + + file_names = [os.path.join(dirpath, f) for f in filenames + if interesting_file(f) + and not f.endswith("_gen.rs") + and not ".#" is f] + + if not file_names: + continue + + for line in fileinput.input(file_names, openhook=fileinput.hook_encoded("utf-8")): - if "tidy.py" not in fileinput.filename(): + filename = fileinput.filename() + + if "tidy.py" not in filename: + if "TODO" in line: + report_err("TODO is deprecated; use FIXME") + match = re.match(r'^.*/(\*|/!?)\s*XXX', line) + if match: + report_err("XXX is no longer necessary, use FIXME") + match = re.match(r'^.*//\s*(NOTE.*)$', line) + if match and "TRAVIS" not in os.environ: + m = match.group(1) + if "snap" in m.lower(): + report_warn(match.group(1)) + match = re.match(r'^.*//\s*SNAP\s+(\w+)', line) + if match: + hsh = match.group(1) + date, rev = snapshot.curr_snapshot_rev() + if not hsh.startswith(rev): + report_err("snapshot out of date (" + date + + "): " + line) + else: + if "SNAP" in line: + report_warn("unmatched SNAP line: " + line) + if cr_flag in line: check_cr = False if tab_flag in line: check_tab = False if linelength_flag in line: check_linelength = False - if "TODO" in line: - report_err("TODO is deprecated; use FIXME") - match = re.match(r'^.*/(\*|/!?)\s*XXX', line) - if match: - report_err("XXX is no longer necessary, use FIXME") - match = re.match(r'^.*//\s*(NOTE.*)$', line) - if match and "TRAVIS" not in os.environ: - m = match.group(1) - if "snap" in m.lower(): - report_warn(match.group(1)) - match = re.match(r'^.*//\s*SNAP\s+(\w+)', line) - if match: - hsh = match.group(1) - date, rev = snapshot.curr_snapshot_rev() - if not hsh.startswith(rev): - report_err("snapshot out of date (" + date - + "): " + line) - else: - if "SNAP" in line: - report_warn("unmatched SNAP line: " + line) - - if check_tab and ('\t' in line and - "Makefile" not in fileinput.filename()): - report_err("tab character") - if check_cr and not autocrlf and '\r' in line: - report_err("CR character") - if line.endswith(" \n") or line.endswith("\t\n"): - report_err("trailing whitespace") - line_len = len(line)-2 if autocrlf else len(line)-1 - - if check_linelength and line_len > cols: - report_err("line longer than %d chars" % cols) - - if fileinput.isfirstline() and current_name != "": - do_license_check(current_name, current_contents) - - if fileinput.isfirstline(): - current_name = fileinput.filename() - current_contents = "" - check_cr = True - check_tab = True - check_linelength = True - current_contents += line + if check_tab and ('\t' in line and + "Makefile" not in filename): + report_err("tab character") + if check_cr and not autocrlf and '\r' in line: + report_err("CR character") + if line.endswith(" \n") or line.endswith("\t\n"): + report_err("trailing whitespace") + line_len = len(line)-2 if autocrlf else len(line)-1 + + if check_linelength and line_len > cols: + report_err("line longer than %d chars" % cols) + + if fileinput.isfirstline(): + # This happens at the end of each file except the last. + if current_name != "": + update_counts(current_name) + assert len(current_contents) > 0 + do_license_check(current_name, current_contents) + + current_name = filename + current_contents = "" + check_cr = True + check_tab = True + check_linelength = True + + # Put a reasonable limit on the amount of header data we use for + # the licenseck + if len(current_contents) < 1000: + current_contents += line + + count_lines += 1 + if line.strip(): + count_non_blank_lines += 1 if current_name != "": + update_counts(current_name) + assert len(current_contents) > 0 do_license_check(current_name, current_contents) except UnicodeDecodeError as e: report_err("UTF-8 decoding error " + str(e)) +print +print "* linted .rs files: " + str(count_rs) +print "* linted .py files: " + str(count_py) +print "* linted .js files: " + str(count_js) +print "* linted .sh files: " + str(count_sh) +print "* linted .pl files: " + str(count_pl) +print "* linted .c files: " + str(count_c) +print "* linted .h files: " + str(count_h) +print "* other linted files: " + str(count_other) +print "* total lines of code: " + str(count_lines) +print "* total non-blank lines of code: " + str(count_non_blank_lines) +print sys.exit(err) diff --git a/src/grammar/check.sh b/src/grammar/check.sh index cb269bbdb0ade..b5be3daa13e1d 100755 --- a/src/grammar/check.sh +++ b/src/grammar/check.sh @@ -1,5 +1,7 @@ #!/bin/sh +# ignore-license + # Run the reference lexer against libsyntax and compare the tokens and spans. # If "// ignore-lexer-test" is present in the file, it will be ignored. diff --git a/src/test/run-make/c-dynamic-dylib/cfoo.c b/src/test/run-make/c-dynamic-dylib/cfoo.c index 9fe07f82f9ed1..113717a776a99 100644 --- a/src/test/run-make/c-dynamic-dylib/cfoo.c +++ b/src/test/run-make/c-dynamic-dylib/cfoo.c @@ -1 +1,2 @@ +// ignore-license int foo() { return 0; } diff --git a/src/test/run-make/c-dynamic-rlib/cfoo.c b/src/test/run-make/c-dynamic-rlib/cfoo.c index 9fe07f82f9ed1..113717a776a99 100644 --- a/src/test/run-make/c-dynamic-rlib/cfoo.c +++ b/src/test/run-make/c-dynamic-rlib/cfoo.c @@ -1 +1,2 @@ +// ignore-license int foo() { return 0; } diff --git a/src/test/run-make/c-link-to-rust-dylib/bar.c b/src/test/run-make/c-link-to-rust-dylib/bar.c index bb4036b06e13b..5729d411c5bcd 100644 --- a/src/test/run-make/c-link-to-rust-dylib/bar.c +++ b/src/test/run-make/c-link-to-rust-dylib/bar.c @@ -1,3 +1,4 @@ +// ignore-license void foo(); int main() { diff --git a/src/test/run-make/c-link-to-rust-staticlib/bar.c b/src/test/run-make/c-link-to-rust-staticlib/bar.c index bb4036b06e13b..5729d411c5bcd 100644 --- a/src/test/run-make/c-link-to-rust-staticlib/bar.c +++ b/src/test/run-make/c-link-to-rust-staticlib/bar.c @@ -1,3 +1,4 @@ +// ignore-license void foo(); int main() { diff --git a/src/test/run-make/c-static-dylib/cfoo.c b/src/test/run-make/c-static-dylib/cfoo.c index 9fe07f82f9ed1..113717a776a99 100644 --- a/src/test/run-make/c-static-dylib/cfoo.c +++ b/src/test/run-make/c-static-dylib/cfoo.c @@ -1 +1,2 @@ +// ignore-license int foo() { return 0; } diff --git a/src/test/run-make/c-static-rlib/cfoo.c b/src/test/run-make/c-static-rlib/cfoo.c index 9fe07f82f9ed1..113717a776a99 100644 --- a/src/test/run-make/c-static-rlib/cfoo.c +++ b/src/test/run-make/c-static-rlib/cfoo.c @@ -1 +1,2 @@ +// ignore-license int foo() { return 0; } diff --git a/src/test/run-make/extern-fn-generic/test.c b/src/test/run-make/extern-fn-generic/test.c index f23dd1eb1462c..f9faef64afc41 100644 --- a/src/test/run-make/extern-fn-generic/test.c +++ b/src/test/run-make/extern-fn-generic/test.c @@ -1,16 +1,17 @@ +// ignore-license #include typedef struct TestStruct { - uint8_t x; - int32_t y; + uint8_t x; + int32_t y; } TestStruct; typedef int callback(TestStruct s); uint32_t call(callback *c) { - TestStruct s; - s.x = 'a'; - s.y = 3; + TestStruct s; + s.x = 'a'; + s.y = 3; - return c(s); + return c(s); } diff --git a/src/test/run-make/extern-fn-mangle/test.c b/src/test/run-make/extern-fn-mangle/test.c index 8d93917ade03e..1a9855dedec49 100644 --- a/src/test/run-make/extern-fn-mangle/test.c +++ b/src/test/run-make/extern-fn-mangle/test.c @@ -1,8 +1,9 @@ +// ignore-license #include uint32_t foo(); uint32_t bar(); uint32_t add() { - return foo() + bar(); + return foo() + bar(); } diff --git a/src/test/run-make/extern-fn-with-packed-struct/test.c b/src/test/run-make/extern-fn-with-packed-struct/test.c index c3456a64b9bc4..121e48e84e46f 100644 --- a/src/test/run-make/extern-fn-with-packed-struct/test.c +++ b/src/test/run-make/extern-fn-with-packed-struct/test.c @@ -1,3 +1,4 @@ +// ignore-license // Pragma needed cause of gcc bug on windows: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 #pragma pack(1) struct __attribute__((packed)) Foo { diff --git a/src/test/run-make/extern-fn-with-union/test.c b/src/test/run-make/extern-fn-with-union/test.c index 86cb64537236e..8c87c230693d1 100644 --- a/src/test/run-make/extern-fn-with-union/test.c +++ b/src/test/run-make/extern-fn-with-union/test.c @@ -1,3 +1,4 @@ +// ignore-license #include #include diff --git a/src/test/run-make/interdependent-c-libraries/bar.c b/src/test/run-make/interdependent-c-libraries/bar.c index 812c975352872..c761f029effbe 100644 --- a/src/test/run-make/interdependent-c-libraries/bar.c +++ b/src/test/run-make/interdependent-c-libraries/bar.c @@ -1,3 +1,4 @@ +// ignore-license void foo(); void bar() { foo(); } diff --git a/src/test/run-make/interdependent-c-libraries/foo.c b/src/test/run-make/interdependent-c-libraries/foo.c index 85e6cd8c3909a..2895ad473bf96 100644 --- a/src/test/run-make/interdependent-c-libraries/foo.c +++ b/src/test/run-make/interdependent-c-libraries/foo.c @@ -1 +1,2 @@ +// ignore-license void foo() {} diff --git a/src/test/run-make/issue-12446/foo.c b/src/test/run-make/issue-12446/foo.c index a58cd8bb7c98f..186a0046e80ac 100644 --- a/src/test/run-make/issue-12446/foo.c +++ b/src/test/run-make/issue-12446/foo.c @@ -1 +1,2 @@ +// ignore-license void some_c_symbol() {} diff --git a/src/test/run-make/issue-15460/foo.c b/src/test/run-make/issue-15460/foo.c index 85e6cd8c3909a..2895ad473bf96 100644 --- a/src/test/run-make/issue-15460/foo.c +++ b/src/test/run-make/issue-15460/foo.c @@ -1 +1,2 @@ +// ignore-license void foo() {} diff --git a/src/test/run-make/link-path-order/correct.c b/src/test/run-make/link-path-order/correct.c index 3064af952f898..a595939f92e8c 100644 --- a/src/test/run-make/link-path-order/correct.c +++ b/src/test/run-make/link-path-order/correct.c @@ -1 +1,2 @@ +// ignore-license int should_return_one() { return 1; } diff --git a/src/test/run-make/link-path-order/wrong.c b/src/test/run-make/link-path-order/wrong.c index 64275b3ad6bb0..c53e7e3c48c05 100644 --- a/src/test/run-make/link-path-order/wrong.c +++ b/src/test/run-make/link-path-order/wrong.c @@ -1 +1,2 @@ +// ignore-license int should_return_one() { return 0; } diff --git a/src/test/run-make/linkage-attr-on-static/foo.c b/src/test/run-make/linkage-attr-on-static/foo.c index 78a6934f57f76..d7d33ea12e806 100644 --- a/src/test/run-make/linkage-attr-on-static/foo.c +++ b/src/test/run-make/linkage-attr-on-static/foo.c @@ -1,3 +1,4 @@ +// ignore-license #include extern int32_t BAZ; diff --git a/src/test/run-make/lto-smoke-c/bar.c b/src/test/run-make/lto-smoke-c/bar.c index bb4036b06e13b..5729d411c5bcd 100644 --- a/src/test/run-make/lto-smoke-c/bar.c +++ b/src/test/run-make/lto-smoke-c/bar.c @@ -1,3 +1,4 @@ +// ignore-license void foo(); int main() { diff --git a/src/test/run-make/manual-link/bar.c b/src/test/run-make/manual-link/bar.c index e42599986781f..3c167b45af98d 100644 --- a/src/test/run-make/manual-link/bar.c +++ b/src/test/run-make/manual-link/bar.c @@ -1 +1,2 @@ +// ignore-license void bar() {} diff --git a/src/test/run-make/manual-link/foo.c b/src/test/run-make/manual-link/foo.c index e42599986781f..3c167b45af98d 100644 --- a/src/test/run-make/manual-link/foo.c +++ b/src/test/run-make/manual-link/foo.c @@ -1 +1,2 @@ +// ignore-license void bar() {} diff --git a/src/test/run-make/no-duplicate-libs/bar.c b/src/test/run-make/no-duplicate-libs/bar.c index 330d914a011e2..a7b02a2f10b63 100644 --- a/src/test/run-make/no-duplicate-libs/bar.c +++ b/src/test/run-make/no-duplicate-libs/bar.c @@ -1,3 +1,4 @@ +// ignore-license extern void foo(); void bar() { foo(); } diff --git a/src/test/run-make/no-duplicate-libs/foo.c b/src/test/run-make/no-duplicate-libs/foo.c index 85e6cd8c3909a..2895ad473bf96 100644 --- a/src/test/run-make/no-duplicate-libs/foo.c +++ b/src/test/run-make/no-duplicate-libs/foo.c @@ -1 +1,2 @@ +// ignore-license void foo() {} From 29be9381365cd0862edf49fd5635ce3a400206ca Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 24 Jan 2015 15:53:11 -0800 Subject: [PATCH 04/10] mk: Remove redundant valgrind notices in build --- mk/main.mk | 1 + mk/tests.mk | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/mk/main.mk b/mk/main.mk index 0e52f168f59ed..2d93cdd1b7c5d 100644 --- a/mk/main.mk +++ b/mk/main.mk @@ -179,6 +179,7 @@ endif ifndef CFG_DISABLE_VALGRIND_RPASS $(info cfg: enabling valgrind run-pass tests (CFG_ENABLE_VALGRIND_RPASS)) + $(info cfg: valgrind-rpass command set to $(CFG_VALGRIND)) CFG_VALGRIND_RPASS :=$(CFG_VALGRIND) else CFG_VALGRIND_RPASS := diff --git a/mk/tests.mk b/mk/tests.mk index 13d12c99dc964..34513742cd4c8 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -611,7 +611,6 @@ CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ ifdef CFG_VALGRIND_RPASS ifdef GOOD_VALGRIND_$(2) -$(info cfg: valgrind-path set to $(CFG_VALGRIND_RPASS)) CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) += --valgrind-path "$(CFG_VALGRIND_RPASS)" endif endif From 62c90fc6bea9f7bef7806560dbd85220f0383b9c Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 25 Jan 2015 01:42:02 -0800 Subject: [PATCH 05/10] mk: Add tidy commands to 'make tips' --- Makefile.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile.in b/Makefile.in index 63c5742a540d4..a760155bbd91a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -59,6 +59,9 @@ # * check-stage$(stage)-$(crate) - Test a crate in a specific stage # * check-stage$(stage)-{rpass,rfail,cfail,rmake,...} - Run tests in src/test/ # * check-stage1-T-$(target)-H-$(host) - Run cross-compiled-tests +# * tidy-basic - show file / line stats +# * tidy-errors - show the highest rustc error code +# * tidy-features - show the status of language and lib features # # Then mix in some of these environment variables to harness the # ultimate power of The Rust Build System. From 4368f6161c04547210b553b041335cda40d8ea6c Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 25 Jan 2015 01:48:38 -0800 Subject: [PATCH 06/10] mk: Add version number to output. Useful for logs --- mk/main.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/mk/main.mk b/mk/main.mk index 2d93cdd1b7c5d..a6b201a2b7bdf 100644 --- a/mk/main.mk +++ b/mk/main.mk @@ -72,6 +72,7 @@ endif # numbers and dots here CFG_VERSION_WIN = $(CFG_RELEASE_NUM) +CFG_INFO := $(info cfg: version $(CFG_VERSION)) ###################################################################### # More configuration From 68ddd73257e0d09adb64ea05683ee4d21f51ea48 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 30 Jan 2015 14:57:21 -0800 Subject: [PATCH 07/10] testparser has long lines --- src/grammar/testparser.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/grammar/testparser.py b/src/grammar/testparser.py index 38e57be288b24..16babd4194e4d 100755 --- a/src/grammar/testparser.py +++ b/src/grammar/testparser.py @@ -9,6 +9,9 @@ # , at your # option. This file may not be copied, modified, or distributed # except according to those terms. + +# ignore-tidy-linelength + import sys import os From 1364919b6c0d850bda6b381de5bfff72edb2fa74 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 30 Jan 2015 14:58:02 -0800 Subject: [PATCH 08/10] mk: Print test summary after tidy when running 'make check' --- mk/tests.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mk/tests.mk b/mk/tests.mk index 34513742cd4c8..8728d81603489 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -162,7 +162,8 @@ $(foreach file,$(wildcard $(S)src/doc/trpl/*.md), \ ###################################################################### # The main testing target. Tests lots of stuff. -check: cleantmptestlogs cleantestlibs check-notidy tidy +check: cleantmptestlogs cleantestlibs all check-stage2 tidy + $(Q)$(CFG_PYTHON) $(S)src/etc/check-summary.py tmp/*.log # As above but don't bother running tidy. check-notidy: cleantmptestlogs cleantestlibs all check-stage2 From 3454c504cfde9e034753a048feee632c060db5c2 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 30 Jan 2015 15:08:46 -0800 Subject: [PATCH 09/10] Address review feedback --- src/etc/tidy.py | 90 +++++++++++++++++-------------------------------- 1 file changed, 30 insertions(+), 60 deletions(-) diff --git a/src/etc/tidy.py b/src/etc/tidy.py index d055576f430f3..03aeff1363093 100644 --- a/src/etc/tidy.py +++ b/src/etc/tidy.py @@ -64,58 +64,43 @@ def do_license_check(name, contents): src_dir = sys.argv[1] try: - count_rs = 0 - count_py = 0 - count_js = 0 - count_sh = 0 - count_pl = 0 - count_c = 0 - count_h = 0 - count_other = 0 - count_lines = 0 count_non_blank_lines = 0 + interesting_files = ['.rs', '.py', '.js', '.sh', '.c', '.h'] + + file_counts = {ext: 0 for ext in interesting_files} + file_counts['other'] = 0 + def update_counts(current_name): - global count_rs - global count_py - global count_js - global count_sh - global count_pl - global count_c - global count_h - global count_other - - if current_name.endswith(".rs"): - count_rs += 1 - if current_name.endswith(".py"): - count_py += 1 - if current_name.endswith(".js"): - count_js += 1 - if current_name.endswith(".sh"): - count_sh += 1 - if current_name.endswith(".pl"): - count_pl += 1 - if current_name.endswith(".c"): - count_c += 1 - if current_name.endswith(".h"): - count_h += 1 + global file_counts + _, ext = os.path.splitext(current_name) + + if ext in file_counts: + file_counts[ext] += 1 + else: + file_counts['other'] += 1 all_paths = set() for (dirpath, dirnames, filenames) in os.walk(src_dir): # Skip some third-party directories - if "src/jemalloc" in dirpath: continue - if "src/llvm" in dirpath: continue - if "src/gyp" in dirpath: continue - if "src/libbacktrace" in dirpath: continue - if "src/compiler-rt" in dirpath: continue - if "src/rt/hoedown" in dirpath: continue - if "src/rustllvm" in dirpath: continue - if "src/rt/valgrind" in dirpath: continue - if "src/rt/msvc" in dirpath: continue - if "src/rust-installer" in dirpath: continue + skippable_dirs = { + 'src/jemalloc', + 'src/llvm', + 'src/gyp', + 'src/libbacktrace', + 'src/compiler-rt', + 'src/rt/hoedown', + 'src/rustllvm', + 'src/rt/valgrind', + 'src/rt/msvc', + 'src/rust-installer' + } + + if any(d in dirpath for d in skippable_dirs): + continue def interesting_file(f): if "miniz.c" in f \ @@ -123,16 +108,7 @@ def interesting_file(f): or "rust_android_dummy" in f: return False - if f.endswith(".rs") \ - or f.endswith(".py") \ - or f.endswith(".js") \ - or f.endswith(".sh") \ - or f.endswith(".pl") \ - or f.endswith(".c") \ - or f.endswith(".h") : - return True - else: - return False + return any(os.path.splitext(f)[1] == ext for ext in interesting_files) file_names = [os.path.join(dirpath, f) for f in filenames if interesting_file(f) @@ -219,14 +195,8 @@ def interesting_file(f): report_err("UTF-8 decoding error " + str(e)) print -print "* linted .rs files: " + str(count_rs) -print "* linted .py files: " + str(count_py) -print "* linted .js files: " + str(count_js) -print "* linted .sh files: " + str(count_sh) -print "* linted .pl files: " + str(count_pl) -print "* linted .c files: " + str(count_c) -print "* linted .h files: " + str(count_h) -print "* other linted files: " + str(count_other) +for ext in file_counts: + print "* linted " + str(file_counts[ext]) + " " + ext + " files" print "* total lines of code: " + str(count_lines) print "* total non-blank lines of code: " + str(count_non_blank_lines) print From d0e82a68a9bf32eff2509e9f2579c5aa0fc61e92 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 5 Feb 2015 14:38:56 -0800 Subject: [PATCH 10/10] Tidy fixes --- src/etc/tidy.py | 1 + src/rt/rust_builtin.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/etc/tidy.py b/src/etc/tidy.py index 03aeff1363093..fd3309dce12cb 100644 --- a/src/etc/tidy.py +++ b/src/etc/tidy.py @@ -91,6 +91,7 @@ def update_counts(current_name): 'src/llvm', 'src/gyp', 'src/libbacktrace', + 'src/libuv', 'src/compiler-rt', 'src/rt/hoedown', 'src/rustllvm', diff --git a/src/rt/rust_builtin.c b/src/rt/rust_builtin.c index 382cbf0d5d129..6bf86f527390f 100644 --- a/src/rt/rust_builtin.c +++ b/src/rt/rust_builtin.c @@ -47,7 +47,8 @@ extern char **environ; #endif #endif -#if defined(__FreeBSD__) || defined(__linux__) || defined(__ANDROID__) || defined(__DragonFly__) || defined(__OpenBSD__) +#if defined(__FreeBSD__) || defined(__linux__) || defined(__ANDROID__) \ + || defined(__DragonFly__) || defined(__OpenBSD__) extern char **environ; #endif @@ -235,7 +236,7 @@ const char * rust_load_self() { /* get realpath if possible */ if ((argv[0] != NULL) && ((*argv[0] == '.') || (*argv[0] == '/') - || (strstr(argv[0], "/") != NULL))) + || (strstr(argv[0], "/") != NULL))) self = realpath(argv[0], NULL); else