[Zope-CVS] CVS: Packages/zpkgtools/zpkgtools - app.py:1.56 package.py:1.14 setup.py:1.18

Fred L. Drake, Jr. fred at zope.com
Wed May 5 16:55:36 EDT 2004


Update of /cvs-repository/Packages/zpkgtools/zpkgtools
In directory cvs.zope.org:/tmp/cvs-serv11251/zpkgtools

Modified Files:
	app.py package.py setup.py 
Log Message:
Packages that need to provide C headers for use by other packages need
to mark those headers in their SETUP.cfg file using the "header"
setting.

When headers are so marked, they are shared with the rest of the
packages in a distribution by copying the headers into a shared
directory within the distribution that's provided to all the
extensions.  This allows C modules within the system to share headers;
distutils doesn't have a good general approach to dealing with C-level
dependencies between packages.


=== Packages/zpkgtools/zpkgtools/app.py 1.55 => 1.56 ===
--- Packages/zpkgtools/zpkgtools/app.py:1.55	Wed May  5 14:46:33 2004
+++ Packages/zpkgtools/zpkgtools/app.py	Wed May  5 16:55:34 2004
@@ -133,6 +133,7 @@
                 component.write_setup_py()
                 component.write_setup_cfg()
                 component.write_manifest()
+                self.add_headers(component)
         if self.options.build_type == "application":
             top.write_setup_py(filename="install.py",
                                version=self.options.version)
@@ -141,6 +142,22 @@
             top.write_setup_py(version=self.options.version)
         top.write_setup_cfg()
         top.write_manifest()
+
+    def add_headers(self, component):
+        pkginfo = component.get_package_info()
+        if not pkginfo.header:
+            return
+        includes_dir = os.path.join(self.destination,
+                                    "Dependencies", "Includes")
+        if not os.path.isdir(includes_dir):
+            os.mkdir(includes_dir)
+        for src in pkginfo.header:
+            src = os.path.join(component.destination, *src.split("/"))
+            name = os.path.basename(src)
+            path = os.path.join(includes_dir, name)
+            if os.path.exists(path):
+                self.error("multiple headers with name %r" % name)
+            self.ip.copy_file(src, path)
 
     def write_application_support(self, component):
         pubinfo = component.get_publication_info()


=== Packages/zpkgtools/zpkgtools/package.py 1.13 => 1.14 ===
--- Packages/zpkgtools/zpkgtools/package.py:1.13	Tue May  4 18:04:32 2004
+++ Packages/zpkgtools/zpkgtools/package.py	Wed May  5 16:55:34 2004
@@ -149,6 +149,7 @@
         f.close()
     pkginfo.documentation = expand_globs(directory, reldir,
                                          pkginfo.documentation)
+    pkginfo.header = expand_globs(directory, reldir, pkginfo.header)
     pkginfo.script = expand_globs(directory, reldir, pkginfo.script)
     return pkginfo
 
@@ -379,7 +380,8 @@
 
 
 SCHEMA = cfgparser.Schema(
-    ({"script": path_ref, "documentation": path_ref}, ["extension"], None),
+    ({"script": path_ref, "documentation": path_ref, "header": path_ref},
+     ["extension"], None),
     {"extension": ({"source": path_ref, "depends-on": path_ref,
                     "define" : cpp_definition, "undefine": cpp_names,
                     "language": str,


=== Packages/zpkgtools/zpkgtools/setup.py 1.17 => 1.18 ===
--- Packages/zpkgtools/zpkgtools/setup.py:1.17	Tue May  4 18:54:35 2004
+++ Packages/zpkgtools/zpkgtools/setup.py	Wed May  5 16:55:34 2004
@@ -52,7 +52,7 @@
             print depnames
             print "suffix = %r" % suffix
             for name in depnames:
-                if not name.endswith(suffix):
+                if name != "Includes" and not name.endswith(suffix):
                     # an unexpected name; we didn't put this here!
                     print >>sys.stderr, \
                           "unexpected name in Dependencies/: %r" % name
@@ -67,6 +67,10 @@
                 pkgdir = os.path.join(depdir, depname)
                 reldir = posixpath.join("Dependencies", name, depname)
                 self.scan(depname, pkgdir, reldir)
+            includes_dir = os.path.join(depsdir, "Includes")
+            if os.path.isdir(includes_dir):
+                for ext in self.ext_modules:
+                    ext.include_dirs.append(includes_dir)
 
     def setup(self):
         kwargs = self.__dict__.copy()




More information about the Zope-CVS mailing list