]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Sets the compiler attribute to keep the old behavior for third-party packages.
authorTarek Ziadé <ziade.tarek@gmail.com>
Wed, 8 Jul 2009 22:40:51 +0000 (22:40 +0000)
committerTarek Ziadé <ziade.tarek@gmail.com>
Wed, 8 Jul 2009 22:40:51 +0000 (22:40 +0000)
Lib/distutils/command/build_ext.py
Lib/distutils/tests/test_build_ext.py

index be37313abcfd59dcef5066e68809e7ace2fb7fa8..fadd6337f7ff358b05ace86753fc0d9a80b45c13 100644 (file)
@@ -134,13 +134,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)
@@ -343,10 +347,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 afd0df32dc916d4bb1438a539f2215ac1eab65a3..9356ff806eeedb231385a99009d2c65676bb5e01 100644 (file)
@@ -402,12 +402,21 @@ class BuildExtTestCase(support.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()