]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/my_distutils.py
more docs about compiler constants
[wxWidgets.git] / wxPython / my_distutils.py
index 84edd6b547919f955cfa80a4887a7b3ca4fd2d72..f1603f4f5f6d0673f65157de73181c0cd656fb74 100644 (file)
@@ -14,6 +14,24 @@ from distutils.ccompiler import \
 
 class MyMSVCCompiler(MSVCCompiler):
 
+##     def __init__ (self,
+##                   verbose=0,
+##                   dry_run=0,
+##                   force=0):
+##         MSVCCompiler.__init__(self, verbose, dry_run, force)
+
+##         self.compile_options = [ '/nologo',
+##                                  '/Ox',
+##                                  '/MD',
+##                                  '/W3',
+##                                  '/GX',
+##                                  ]
+##         self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX',
+##                                       '/Z7', '/D_DEBUG']
+
+
+
+
     ##------------------------------------------------------------
     ## Override the entire compile method just to add flags to the
     ## RC command.  There should be an easier way to do this from
@@ -54,15 +72,15 @@ class MyMSVCCompiler(MSVCCompiler):
                 self.mkpath (os.path.dirname (obj))
 
                 if ext in self._c_extensions:
-                    input_opt = "/Tc" + os.path.abspath(src)
+                    input_opt = "/Tc" + os.path.abspath(src)    ### RPD
                 elif ext in self._cpp_extensions:
-                    input_opt = "/Tp" + os.path.abspath(src)
+                    input_opt = "/Tp" + os.path.abspath(src)    ### RPD
                 elif ext in self._rc_extensions:
                     # compile .RC to .RES file
                     input_opt = src
                     output_opt = "/fo" + obj
                     try:
-                        self.spawn ([self.rc] + pp_opts +         ### RPD changed this line only
+                        self.spawn ([self.rc] + pp_opts +         ### RPD changed this line
                                     [output_opt] + [input_opt])
                     except DistutilsExecError, msg:
                         raise CompileError, msg
@@ -349,7 +367,15 @@ class MyBCPPCompiler(BCPPCompiler):
 
 from distutils import ccompiler
 
-ccompiler.default_compiler['nt'] = 'my_msvc'
+if hasattr(ccompiler, "default_compiler"):
+    ccompiler.default_compiler['nt'] = 'my_msvc'
+elif hasattr(ccompiler, "_default_compilers"):
+    lst = list(ccompiler._default_compilers)
+    lst.remove( ('nt', 'msvc') )
+    lst.append( ('nt', 'my_msvc') )
+    ccompiler._default_compilers = tuple(lst)
+
+
 ccompiler.compiler_class['my_msvc'] = ('my_distutils',
                                        'MyMSVCCompiler',
                                        'My MSVC derived class')
@@ -364,6 +390,52 @@ import my_distutils
 sys.modules['distutils.my_distutils'] = my_distutils
 
 
+#----------------------------------------------------------------------
+# More hacking...  Distutils in Python 2.1 changed the strip_dir flag
+# passed to object_filenames to true, which causes problems for us since
+# there are a few duplicate source/object names between some of the
+# extensions in wxPython.  This hack replaces the CCompiler._prep_compile
+# method with this one.
+
+from distutils.dep_util import newer_pairwise
+
+def _prep_compile (self, sources, output_dir):
+    """Determine the list of object files corresponding to 'sources',
+    and figure out which ones really need to be recompiled.  Return a
+    list of all object files and a dictionary telling which source
+    files can be skipped.
+    """
+    # Get the list of expected output (object) files
+    objects = self.object_filenames (sources,
+                                     strip_dir=0,
+                                     output_dir=output_dir)
+
+    if self.force:
+        skip_source = {}            # rebuild everything
+        for source in sources:
+            skip_source[source] = 0
+    else:
+        # Figure out which source files we have to recompile according
+        # to a simplistic check -- we just compare the source and
+        # object file, no deep dependency checking involving header
+        # files.
+        skip_source = {}            # rebuild everything
+        for source in sources:      # no wait, rebuild nothing
+            skip_source[source] = 1
+
+        (n_sources, n_objects) = newer_pairwise (sources, objects)
+        for source in n_sources:    # no really, only rebuild what's
+            skip_source[source] = 0 # out-of-date
+
+    return (objects, skip_source)
+
+# _prep_compile ()
+
+CCompiler._prep_compile = _prep_compile
+
+
+
+
 #----------------------------------------------------------------------
 # Run SWIG the way I want it done
 
@@ -393,7 +465,7 @@ def run_swig(files, dir, gendir, package, USE_SWIG, force, swig_args, swig_deps=
                 cpp_file = string.join(string.split(cpp_file, '\\'), '/')
                 i_file = string.join(string.split(i_file, '\\'), '/')
 
-                cmd = ['swig'] + swig_args + ['-I'+dir, '-c', '-o', cpp_file, i_file]
+                cmd = ['./wxSWIG/wxswig'] + swig_args + ['-I'+dir, '-c', '-o', cpp_file, i_file]
                 spawn(cmd, verbose=1)
 
         # copy the generated python file to the package directory