summaryrefslogtreecommitdiffstats
path: root/setup.py
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2004-12-07 00:42:59 (GMT)
committerBrett Cannon <bcannon@gmail.com>2004-12-07 00:42:59 (GMT)
commit516592f4ff13ee39ebd115088c7429631328e2db (patch)
treeaf28df7b8f8b80cc02cb20cb61abbaba684771f7 /setup.py
parent9e635cf3ae1d912dc32d3ff2d5ebc529c92bf389 (diff)
downloadcpython-516592f4ff13ee39ebd115088c7429631328e2db.zip
cpython-516592f4ff13ee39ebd115088c7429631328e2db.tar.gz
cpython-516592f4ff13ee39ebd115088c7429631328e2db.tar.bz2
setup.py now uses the library directories specified in LDFLAGS (``-L``
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.
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py27
1 files changed, 18 insertions, 9 deletions
diff --git a/setup.py b/setup.py
index 08d951e..c9f94ab 100644
--- 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,