]> granicus.if.org Git - python/commitdiff
Merged revisions 73895 via svnmerge from
authorTarek Ziadé <ziade.tarek@gmail.com>
Wed, 8 Jul 2009 22:42:43 +0000 (22:42 +0000)
committerTarek Ziadé <ziade.tarek@gmail.com>
Wed, 8 Jul 2009 22:42:43 +0000 (22:42 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73895 | tarek.ziade | 2009-07-09 00:40:51 +0200 (Thu, 09 Jul 2009) | 1 line

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

Lib/distutils/command/build_ext.py
Lib/distutils/tests/test_build_ext.py

index 4a3aec2a652dfa26460360291293ce7c15f1caa0..d8bb251294662fe7ddce8ca6bc18c91bd741ad00 100644 (file)
@@ -132,13 +132,17 @@ class build_ext(Command):
     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)
@@ -341,10 +345,22 @@ class build_ext(Command):
 
         # 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
index d531293015c5fe9ef246668d40788ae816083bc9..682958374678ff3758dbb781a73fdc9e75e0fdad 100644 (file)
@@ -402,12 +402,21 @@ class BuildExtTestCase(TempdirManager,
         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()