]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
setup.py now uses the library directories specified in LDFLAGS (``-L``
authorBrett Cannon <bcannon@gmail.com>
Tue, 7 Dec 2004 00:42:59 +0000 (00:42 +0000)
committerBrett Cannon <bcannon@gmail.com>
Tue, 7 Dec 2004 00:42:59 +0000 (00:42 +0000)
directories) and the include directories specified in CPPFLAGS (``-I``
directories) for compiling the extension modules.

This has led to the core being compiled with the values in the shell's
CPPFLAGS.  It has also removed the need for special casing to use Fink and
DarwinPorts under darwin since the needed directories can now be specified in
LDFLAGS and CPPFLAGS (e.g., DarwinPorts users can now do
``LDFLAGS=-L/opt/local/lib; CPPFLAGS=-I/opt/local/include; ./configure`` for
everything to work properly).

Parsing the values in the environment variables is done with getopt.  While optparse
would have been a nicer solution it cannot be used because of dependency issues
at execution time; optparse uses gettext which uses struct which will not have
been compiled when the code is imported.  If optparse ever makes its
importation of gettext optional by catching ImportError and setting _() to an
identity function then it can be used.

Makefile.pre.in
Misc/NEWS
setup.py

index d1ea4e27004cc707649bf7775cce4dd36ac76c23..16cb0fa03aae6f42e208d231d3061208054421b3 100644 (file)
@@ -56,7 +56,10 @@ MAKESETUP=      $(srcdir)/Modules/makesetup
 OPT=           @OPT@
 BASECFLAGS=    @BASECFLAGS@
 CFLAGS=                $(BASECFLAGS) $(OPT)
-CPPFLAGS=      -I. -I$(srcdir)/Include
+# Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to
+# be able to build extension modules using the directories specified in the
+# environment variables
+CPPFLAGS=      -I. -I$(srcdir)/Include @CPPFLAGS@
 LDFLAGS=       @LDFLAGS@
 LDLAST=                @LDLAST@
 SGI_ABI=       @SGI_ABI@
index 784e782d40a2eb93a9d5fa481470b23033c63e1b..380bf9a972d9c0e43bacdd70056e13b41d7228ba 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -50,6 +50,15 @@ Library
 Build
 -----
 
+- setup.py now uses the directories specified in LDFLAGS using the -L option
+  and in CPPFLAGS using the -I option for adding library and include
+  directories, respectively, for compiling extension modules against.  This has
+  led to the core being compiled using the values in CPPFLAGS.  It also removes
+  the need for the special-casing of both DarwinPorts and Fink for darwin since
+  the proper directories can be specified in LDFLAGS (``-L/sw/lib`` for Fink,
+  ``-L/opt/local/lib`` for DarwinPorts) and CPPFLAGS (``-I/sw/include`` for
+  Fink, ``-I/opt/local/include`` for DarwinPorts).
+
 
 C API
 -----
index 08d951e22bbe423f912c0a377a6bedbf4bc5a155..c9f94ab1839ef90a570dfdd097bdde978326bd9d 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@
 
 __version__ = "$Revision$"
 
-import sys, os, getopt, imp, re
+import sys, os, imp, re, getopt
 
 from distutils import log
 from distutils import sysconfig
@@ -242,14 +242,23 @@ class PyBuildExt(build_ext):
         add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
         add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
 
-        # Add paths to popular package managers on OS X/darwin
-        if sys.platform == "darwin":
-            # Fink installs into /sw by default
-            add_dir_to_list(self.compiler.library_dirs, '/sw/lib')
-            add_dir_to_list(self.compiler.include_dirs, '/sw/include')
-            # DarwinPorts installs into /opt/local by default
-            add_dir_to_list(self.compiler.library_dirs, '/opt/local/lib')
-            add_dir_to_list(self.compiler.include_dirs, '/opt/local/include')
+        # Add paths specified in the environment variables LDFLAGS and
+        # CPPFLAGS.
+        # Since this file tends to be executed by ``make install`` its
+        # environment variables are those that the Makefile sets and not what
+        # the shell has.  The Makefile must keep the shell's values somewhere
+        # in order to be able to reach them at execution time.
+        for env_var, arg_name, dir_list in (
+                ('LDFLAGS', '-L', self.compiler.library_dirs),
+                ('CPPFLAGS', '-I', self.compiler.include_dirs)):
+            env_val = os.getenv(env_var)
+            if env_val:
+                # getopt is used instead of optparse because the latter imports
+                # gettext which imports struct which has not been built yet
+                # when this method is needed
+                options = getopt.getopt(env_val.split(), arg_name[1] + ':')[0]
+                for arg_option, directory in options:
+                    add_dir_to_list(dir_list, directory)
 
         if os.path.normpath(sys.prefix) != '/usr':
             add_dir_to_list(self.compiler.library_dirs,