diff --git a/mk/tests.mk b/mk/tests.mk index e9f1baa8d4ef0..48ebe4e540e3d 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -166,7 +166,7 @@ $(foreach file,$(wildcard $(S)src/doc/trpl/*.md), \ ###################################################################### # The main testing target. Tests lots of stuff. -check: cleantmptestlogs cleantestlibs all check-stage2 tidy +check: check-sanitycheck 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. @@ -193,6 +193,11 @@ check-docs: cleantestlibs cleantmptestlogs check-stage2-docs # Not run as part of the normal test suite, but tested by bors on checkin. check-secondary: check-build-compiletest check-build-lexer-verifier check-lexer check-pretty +.PHONY: check-sanitycheck + +check-sanitycheck: + $(Q)$(CFG_PYTHON) $(S)src/etc/check-sanitycheck.py + # check + check-secondary. # # Issue #17883: build check-secondary first so hidden dependencies in diff --git a/src/etc/check-sanitycheck.py b/src/etc/check-sanitycheck.py new file mode 100644 index 0000000000000..0d9c430ec3acd --- /dev/null +++ b/src/etc/check-sanitycheck.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# +# Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT +# file at the top-level directory of this distribution and at +# http://rust-lang.org/COPYRIGHT. +# +# Licensed under the Apache License, Version 2.0 or the MIT license +# , at your +# option. This file may not be copied, modified, or distributed +# except according to those terms. + +import os +import sys +import functools +import resource + +STATUS = 0 + + +def error_unless_permitted(env_var, message): + global STATUS + if not os.getenv(env_var): + sys.stderr.write(message) + STATUS = 1 + + +def only_on(platforms): + def decorator(func): + @functools.wraps(func) + def inner(): + if any(map(lambda x: sys.platform.startswith(x), platforms)): + func() + return inner + return decorator + + +@only_on(('linux', 'darwin', 'freebsd', 'openbsd')) +def check_rlimit_core(): + soft, hard = resource.getrlimit(resource.RLIMIT_CORE) + if soft > 0: + error_unless_permitted('ALLOW_NONZERO_RLIMIT_CORE', """\ +RLIMIT_CORE is set to a nonzero value (%d). During debuginfo, the test suite +will segfault many rustc's, creating many potentially large core files. +set ALLOW_NONZERO_RLIMIT_CORE to ignore this warning +""" % (soft)) + + +def main(): + check_rlimit_core() + +if __name__ == '__main__': + main() + sys.exit(STATUS)