[Python-checkins] r73895 - in python/trunk/Lib/distutils: command/build_ext.py tests/test_build_ext.py

tarek.ziade python-checkins at python.org
Thu Jul 9 00:40:52 CEST 2009


Author: tarek.ziade
Date: Thu Jul  9 00:40:51 2009
New Revision: 73895

Log:
Sets the compiler attribute to keep the old behavior for third-party packages.

Modified:
   python/trunk/Lib/distutils/command/build_ext.py
   python/trunk/Lib/distutils/tests/test_build_ext.py

Modified: python/trunk/Lib/distutils/command/build_ext.py
==============================================================================
--- python/trunk/Lib/distutils/command/build_ext.py	(original)
+++ python/trunk/Lib/distutils/command/build_ext.py	Thu Jul  9 00:40:51 2009
@@ -134,13 +134,17 @@
     def _set_compiler(self, compiler):
         if not isinstance(compiler, str) and compiler is not None:
             # we don't want to allow that anymore in the future
-            warn("'compiler' specify the compiler type in build_ext. "
+            warn("'compiler' specifies the compiler type in build_ext. "
                  "If you want to get the compiler object itself, "
                  "use 'compiler_obj'", PendingDeprecationWarning)
-
         self._compiler = compiler
 
     def _get_compiler(self):
+        if not isinstance(self._compiler, str) and self._compiler is not None:
+            # we don't want to allow that anymore in the future
+            warn("'compiler' specifies the compiler type in build_ext. "
+                 "If you want to get the compiler object itself, "
+                 "use 'compiler_obj'", PendingDeprecationWarning)
         return self._compiler
 
     compiler = property(_get_compiler, _set_compiler)
@@ -343,10 +347,22 @@
 
         # Setup the CCompiler object that we'll use to do all the
         # compiling and linking
-        self.compiler_obj = new_compiler(compiler=self.compiler,
+
+        # used to prevent the usage of an existing compiler for the
+        # compiler option when calling new_compiler()
+        # this will be removed in 3.3 and 2.8
+        if not isinstance(self._compiler, str):
+            self._compiler = None
+
+        self.compiler_obj = new_compiler(compiler=self._compiler,
                                          verbose=self.verbose,
                                          dry_run=self.dry_run,
                                          force=self.force)
+
+        # used to keep the compiler object reachable with
+        # "self.compiler". this will be removed in 3.3 and 2.8
+        self._compiler = self.compiler_obj
+
         customize_compiler(self.compiler_obj)
         # If we are cross-compiling, init the compiler now (if we are not
         # cross-compiling, init would not hurt, but people may rely on

Modified: python/trunk/Lib/distutils/tests/test_build_ext.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_build_ext.py	(original)
+++ python/trunk/Lib/distutils/tests/test_build_ext.py	Thu Jul  9 00:40:51 2009
@@ -402,12 +402,21 @@
         dist = Distribution()
         cmd = build_ext(dist)
 
+        class MyCompiler(object):
+            def do_something(self):
+                pass
+
         with check_warnings() as w:
             warnings.simplefilter("always")
-            cmd.compiler = object()
+            cmd.compiler = MyCompiler()
             self.assertEquals(len(w.warnings), 1)
             cmd.compile = 'unix'
             self.assertEquals(len(w.warnings), 1)
+            cmd.compiler = MyCompiler()
+            cmd.compiler.do_something()
+            # two more warnings genereated by the get
+            # and the set
+            self.assertEquals(len(w.warnings), 3)
 
 def test_suite():
     src = _get_source_filename()


More information about the Python-checkins mailing list