[PyKDE] [PATCH] sipdistuils: allow .sip in depends

Giovanni Bajo rasky at develer.com
Tue Dec 19 14:20:21 GMT 2006

Hello Phil,

when working on a module made of several .sip files (with a main .sip file
with %Module, and others included through %Include), there is currently no
way to tell distutils that it needs to re-run sip whenever an %Included .sip
file changes.

With this patch, it's now possible to list the %Included .sip files in the
"depends" argument of the setup() call, and distutils will take care of
calling sip.exe when necessary.

Giovanni Bajo
-------------- next part --------------
Index: sipdistutils.py
--- sipdistutils.py	(revision 9595)
+++ sipdistutils.py	(revision 9597)
@@ -5,7 +5,7 @@
 # Based on Pyrex.Distutils, written by Graham Fawcett and Darrel Gallion.
 import distutils.command.build_ext
-from distutils.dep_util import newer
+from distutils.dep_util import newer, newer_group
 import os
 import sys
@@ -48,10 +48,18 @@
         # Add the SIP include directory to the include path
         if extension is not None:
+            depends = extension.depends
             # pre-2.4 compatibility
+            depends = []  # ?
+        # Filter dependencies list: we are interested only in .sip files,
+        # since the main .sip files can only depend on additional .sip
+        # files. For instance, if a .h changes, there is no need to
+        # run sip again.
+        depends = [f for f in depends if os.path.splitext(f)[1] == ".sip"]
         # Create the temporary directory if it does not exist already
         if not os.path.isdir(self.build_temp):
@@ -67,8 +75,8 @@
         for sip in sip_sources:
             # Use the sbf file as dependency check
             sipbasename = os.path.basename(sip)
-            sbf = os.path.join(self.build_temp, replace_suffix(sipbasename, "sbf"))
-            if newer(sip, sbf) or self.force:
+            sbf = os.path.join(self.build_temp, replace_suffix(sipbasename, ".sbf"))
+            if newer_group([sip]+depends, sbf) or self.force:
                 self._sip_compile(sip_bin, sip, sbf)
             out = self._get_sip_output_list(sbf)

More information about the PyQt mailing list