summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/distutils/sysconfig.py95
1 files changed, 80 insertions, 15 deletions
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index 2107ffe..49e58eb 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -17,20 +17,83 @@ prefix = os.path.normpath (sys.prefix)
exec_prefix = os.path.normpath (sys.exec_prefix)
+def get_python_inc (plat_specific=0):
+ """Return the directory containing installed Python header files.
+ If 'plat_specific' is false (the default), this is the path to the
+ non-platform-specific header files, i.e. Python.h and so on;
+ otherwise, this is the path to platform-specific header files
+ (namely config.h)."""
+
+ the_prefix = (plat_specific and exec_prefix or prefix)
+ if os.name == "posix":
+ return os.path.join (the_prefix, "include", "python" + sys.version[:3])
+ elif os.name == "nt":
+ return os.path.join (the_prefix, "Include") # include or Include?
+ elif os.name == "mac":
+ return os.path.join (the_prefix, "Include")
+ else:
+ raise DistutilsPlatformError, \
+ ("I don't know where Python installs its C header files " +
+ "on platform '%s'") % os.name
+
+
+def get_python_lib (plat_specific=0, standard_lib=0):
+ """Return the directory containing the Python library (standard or
+ site additions). If 'plat_specific' is true, return the directory
+ containing platform-specific modules, i.e. any module from a
+ non-pure-Python module distribution; otherwise, return the
+ platform-shared library directory. If 'standard_lib' is true,
+ return the directory containing standard Python library modules;
+ otherwise, return the directory for site-specific modules."""
+
+ the_prefix = (plat_specific and exec_prefix or prefix)
+
+ if os.name == "posix":
+ libpython = os.path.join (the_prefix,
+ "lib", "python" + sys.version[:3])
+ if standard_lib:
+ return libpython
+ else:
+ return os.path.join (libpython, "site-packages")
+
+ elif os.name == "nt":
+ if standard_lib:
+ return os.path.join (the_prefix, "Lib")
+ else:
+ return the_prefix
+
+ elif os.name == "mac":
+ if platform_specific:
+ if standard_lib:
+ return os.path.join (exec_prefix, "Mac", "Plugins")
+ else:
+ raise DistutilsPlatformError, \
+ "OK, where DO site-specific extensions go on the Mac?"
+ else:
+ if standard_lib:
+ return os.path.join (prefix, "Lib")
+ else:
+ raise DistutilsPlatformError, \
+ "OK, where DO site-specific modules go on the Mac?"
+ else:
+ raise DistutilsPlatformError, \
+ ("I don't know where Python installs its library " +
+ "on platform '%s'") % os.name
+
+# get_python_lib ()
+
+
def get_config_h_filename():
"""Return full pathname of installed config.h file."""
- if os.name == "nt":
- return os.path.join(exec_prefix, "include", "config.h")
- else:
- return os.path.join(exec_prefix,
- "include", "python" + sys.version[:3],
- "config.h")
+ inc_dir = get_python_inc (plat_specific=1)
+ return os.path.join (inc_dir, "config.h")
+
def get_makefile_filename():
"""Return full pathname of installed Makefile from the Python build."""
- return os.path.join(exec_prefix,
- "lib", "python" + sys.version[:3],
- "config", "Makefile")
+ lib_dir = get_python_lib (plat_specific=1, standard_lib=1)
+ return os.path.join (lib_dir, "config", "Makefile")
+
def parse_config_h(fp, g=None):
"""Parse a config.h-style file. A dictionary containing name/value
@@ -143,11 +206,11 @@ def _init_nt():
# load config.h, though I don't know how useful this is
parse_config_h(open(get_config_h_filename()), g)
# set basic install directories
- g['LIBDEST'] = os.path.join(exec_prefix, "Lib")
- g['BINLIBDEST'] = os.path.join(exec_prefix, "Lib")
+ g['LIBDEST'] = get_python_lib (plat_specific=0, standard_lib=1)
+ g['BINLIBDEST'] = get_python_lib (plat_specific=1, standard_lib=1)
# XXX hmmm.. a normal install puts include files here
- g['INCLUDEPY'] = os.path.join(prefix, 'include')
+ g['INCLUDEPY'] = get_python_inc (plat_specific=0)
g['SO'] = '.pyd'
g['exec_prefix'] = exec_prefix
@@ -161,15 +224,17 @@ def _init_mac():
parse_config_h(open(
os.path.join(sys.exec_prefix, "Mac", "Include", "config.h")), g)
# set basic install directories
- g['LIBDEST']=os.path.join(sys.exec_prefix, "Lib")
- g['BINLIBDEST']= os.path.join(sys.exec_prefix, "Mac", "Plugins")
+ g['LIBDEST'] = get_python_lib (plat_specific=0, standard_lib=1)
+ g['BINLIBDEST'] = get_python_lib (plat_specific=1, standard_lib=1)
# XXX hmmm.. a normal install puts include files here
- g['INCLUDEPY'] = os.path.join (sys.prefix, 'Include' )
+ g['INCLUDEPY'] = get_python_inc (plat_specific=0)
g['SO'] = '.ppc.slb'
g['exec_prefix'] = sys.exec_prefix
print sys.prefix
+
+ # XXX are these used anywhere?
g['install_lib'] = os.path.join(sys.exec_prefix, "Lib")
g['install_platlib'] = os.path.join(sys.exec_prefix, "Mac", "Lib")