diff options
-rw-r--r-- | Lib/distutils/core.py | 3 | ||||
-rw-r--r-- | Lib/distutils/tests/test_core.py | 40 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
3 files changed, 46 insertions, 1 deletions
diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py index c40dd0a..640d6b5 100644 --- a/Lib/distutils/core.py +++ b/Lib/distutils/core.py @@ -210,8 +210,9 @@ def run_setup (script_name, script_args=None, stop_after="run"): _setup_stop_after = stop_after save_argv = sys.argv - g = {} + g = {'__file__': script_name} l = {} + os.chdir(os.path.dirname(script_name) or os.curdir) try: try: sys.argv[0] = script_name diff --git a/Lib/distutils/tests/test_core.py b/Lib/distutils/tests/test_core.py new file mode 100644 index 0000000..6de58d9 --- /dev/null +++ b/Lib/distutils/tests/test_core.py @@ -0,0 +1,40 @@ +"""Tests for distutils.core.""" + +import StringIO +import distutils.core +import os +import test.test_support +import unittest + + +# setup script that uses __file__ +setup_using___file__ = """\ + +__file__ + +from distutils.core import setup +setup() +""" + + +class CoreTestCase(unittest.TestCase): + + def tearDown(self): + os.remove(test.test_support.TESTFN) + + def write_setup(self, text): + return fn + + def test_run_setup_provides_file(self): + # Make sure the script can use __file__; if that's missing, the test + # setup.py script will raise NameError. + fn = test.test_support.TESTFN + open(fn, "w").write(setup_using___file__) + distutils.core.run_setup(fn) + + +def test_suite(): + return unittest.makeSuite(CoreTestCase) + +if __name__ == "__main__": + unittest.main(defaultTest="test_suite") @@ -18,6 +18,10 @@ Extensions Modules Library ------- +- Issue #2385: distutils.core.run_script() makes __file__ available, so the + controlled environment will more closely mirror the typical script + environment. This supports setup.py scripts that refer to data files. + Tests ----- |