SVN: zpkgtools/trunk/ make zpkg install headers in package-specific locations, like is should do

"Fred L. Drake, Jr." <[email protected]>
Newsgroups gmane.comp.web.zope.public-cvs
Message-ID <[email protected]>
Log message for revision 37872:
  make zpkg install headers in package-specific locations, like is should do

Changed:
  U   zpkgtools/trunk/doc/TODO.txt
  U   zpkgtools/trunk/zpkgsetup/dist.py
  A   zpkgtools/trunk/zpkgsetup/install_headers.py

-=-
Modified: zpkgtools/trunk/doc/TODO.txt
===================================================================
--- zpkgtools/trunk/doc/TODO.txt	2005-08-11 17:55:28 UTC (rev 37871)
+++ zpkgtools/trunk/doc/TODO.txt	2005-08-11 18:11:05 UTC (rev 37872)
@@ -9,43 +9,6 @@
 - Need name + acronym to describe what gets built, not normal words
   (Jim sez).  Zope3-Dev seems to want to call them "packages".
 
-- The Python world needs a more reasonable way of associating C/C++
-  header files with a package; what's being used now is close to
-  unworkable for complex installations.
-
-  The current Python recommendation is to install headers in
-  $exec_prefix/include/pythonX.Y/pkgname/.  What pkgname means is not
-  clearly defined, but for distutils, it means the first argument to
-  setup(); examples on an Ubuntu Linux installation include numarray,
-  Numeric, pyogg, and Scientific.
-
-  This does not deal with different versions of a package installed at
-  different points along sys.path; while ideally such versions should
-  be API and ABI compatible, that's a policy decision that each
-  individual package has to make, as we want to avoid assumptions
-  about such policies in a general tool.
-
-  We also need a way to construct provide access to headers provided
-  by one component in a collection distribution from another component
-  in the same distribution.  One approach to this would be to
-  construct a temporary directory to contain headers that would be
-  installed if we install the package, similar to build/scripts-X.Y/.
-  This would need to be added to the set of include paths provided to
-  the C/C++ compilers before the path to the already-installed
-  headers.  This would follow the general disutils principal to
-  construct a temporary copy of what you would install as a build is
-  performed.  If could be implemented as a stock distutils feature,
-  though that isn't strictly necessary.  It would probably be best
-  implemented as a new command, build_headers, that would be run
-  before build_ext.  An alternate install_headers implementation is
-  required.
-
-  Such an approach should allow removal of the Dependencies/Includes/
-  directory from distributions that provide headers.
-
-  **Status:**  This is done, except for the alternate install_headers
-  command.  Additional tests need to be written.
-
 - Package assembler script and distribution runtime
 
   - It should be possible to simply embed a resoure map within a

Modified: zpkgtools/trunk/zpkgsetup/dist.py
===================================================================
--- zpkgtools/trunk/zpkgsetup/dist.py	2005-08-11 17:55:28 UTC (rev 37871)
+++ zpkgtools/trunk/zpkgsetup/dist.py	2005-08-11 18:11:05 UTC (rev 37872)
@@ -22,6 +22,7 @@
 import zpkgsetup.build
 import zpkgsetup.build_ext
 import zpkgsetup.build_headers
+import zpkgsetup.install_headers
 
 
 class ZPkgExtension(distutils.extension.Extension):
@@ -46,3 +47,5 @@
                                  zpkgsetup.build_ext.build_ext)
         self.cmdclass.setdefault('build_headers',
                                  zpkgsetup.build_headers.build_headers)
+        self.cmdclass.setdefault('install_headers',
+                                 zpkgsetup.install_headers.install_headers)

Added: zpkgtools/trunk/zpkgsetup/install_headers.py
===================================================================
--- zpkgtools/trunk/zpkgsetup/install_headers.py	2005-08-11 17:55:28 UTC (rev 37871)
+++ zpkgtools/trunk/zpkgsetup/install_headers.py	2005-08-11 18:11:05 UTC (rev 37872)
@@ -0,0 +1,46 @@
+##############################################################################
+#
+# Copyright (c) 2004 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""\
+install_headers command that installs each header into a
+Python-package specific location.
+
+This allows zpkg-based distributions to install the headers
+consistently based on the package that provides them, rather than
+installing them according to the collection package that contains the
+individual packages.
+
+"""
+
+import os
+import distutils.command.install_headers
+
+
+class install_headers(distutils.command.install_headers.install_headers):
+
+    def run(self):
+        headers = self.distribution.package_headers
+        if not headers:
+            return
+
+        # Since the top-level collection package name gets added,
+        # remove that, and replace it with the right package name for
+        # each header:
+        install_base = os.path.dirname(self.install_dir)
+        self.mkpath(install_base)
+
+        for header in headers:
+            install_dir = os.path.join(install_base, header.package)
+            self.mkpath(install_dir)
+            (out, _) = self.copy_file(header.path, install_dir)
+            self.outfiles.append(out)


Property changes on: zpkgtools/trunk/zpkgsetup/install_headers.py
___________________________________________________________________
Name: svn:mime-type
   + text/x-python
Name: svn:eol-style
   + native

_______________________________________________
Zope-CVS maillist  -  [email protected]
http://mail.zope.org/mailman/listinfo/zope-cvs

Zope CVS instructions: http://dev.zope.org/CVS
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.