Hi,
Python's build system (at least for 2.6.6) is not 32/64-bit aware in the
sense that it always uses "lib" as the default lib/modules/config path.
This patch handles this "problem" through the libdir configure variable.
For example:
--libdir=\${prefix}/lib64
--libdir=\${prefix}/lib
This also changes the builtin paths that Python uses to look for
lib/modules depending on what's set in the build.
Index: Python-2.6.6/Makefile.pre.in
===================================================================
--- Python-2.6.6.orig/Makefile.pre.in
+++ Python-2.6.6/Makefile.pre.in
@@ -91,7 +91,8 @@ LIBDIR= @libdir@
MANDIR= @mandir@
INCLUDEDIR= @includedir@
CONFINCLUDEDIR= $(exec_prefix)/include
-SCRIPTDIR= $(prefix)/lib
+SCRIPTDIR= @libdir@
+LIB= $(shell echo $(LIBDIR) | egrep -o "\/lib$$|\/lib64$$" | sed "s/\///g")
# Detailed destination directories
BINLIBDEST= $(LIBDIR)/python$(VERSION)
@@ -419,7 +420,7 @@ libpython$(VERSION).so: $(LIBRARY_OBJS)
fi
libpython$(VERSION).dylib: $(LIBRARY_OBJS)
- $(CC) -dynamiclib -Wl,-single_module $(LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(VERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
+ $(CC) -dynamiclib -Wl,-single_module $(LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(LIBDIR)/libpython$(VERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
libpython$(VERSION).sl: $(LIBRARY_OBJS)
@@ -507,6 +508,7 @@ Modules/getpath.o: $(srcdir)/Modules/get
$(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \
-DPREFIX='"$(prefix)"' \
-DEXEC_PREFIX='"$(exec_prefix)"' \
+ -DLIBDIR='"$(LIB)"' \
-DVERSION='"$(VERSION)"' \
-DVPATH='"$(VPATH)"' \
-o $@ $(srcdir)/Modules/getpath.c
@@ -514,7 +516,6 @@ Modules/getpath.o: $(srcdir)/Modules/get
Modules/python.o: $(srcdir)/Modules/python.c
$(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
-
$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-...@$(INSTALL) -d Include
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
@@ -1050,8 +1051,8 @@ frameworkinstallstructure: $(LDLIBRARY)
# Install a number of symlinks to keep software that expects a normal unix
# install (which includes python-config) happy.
frameworkinstallmaclib:
- ln -fs "../../../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(prefix)/lib/python$(VERSION)/config/libpython$(VERSION).a"
- ln -fs "../../../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(prefix)/lib/python$(VERSION)/config/libpython$(VERSION).dylib"
+ ln -fs "../../../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(LIBDIR)/python$(VERSION)/config/libpython$(VERSION).a"
+ ln -fs "../../../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(LIBDIR)/python$(VERSION)/config/libpython$(VERSION).dylib"
cd Mac && $(MAKE) installmacsubtree DESTDIR="$(DESTDIR)"
# This installs the IDE, the Launcher and other apps into /Applications
Index: Python-2.6.6/Modules/getpath.c
===================================================================
--- Python-2.6.6.orig/Modules/getpath.c
+++ Python-2.6.6/Modules/getpath.c
@@ -116,9 +116,13 @@
#define EXEC_PREFIX PREFIX
#endif
+#ifndef LIBDIR
+#define LIBDIR lib
+#endif
+
#ifndef PYTHONPATH
-#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \
- EXEC_PREFIX "/lib/python" VERSION "/lib-dynload"
+#define PYTHONPATH PREFIX "/" LIBDIR "/python" VERSION ":" \
+ EXEC_PREFIX "/" LIBDIR "/python" VERSION "/lib-dynload"
#endif
#ifndef LANDMARK
@@ -129,7 +133,7 @@ static char prefix[MAXPATHLEN+1];
static char exec_prefix[MAXPATHLEN+1];
static char progpath[MAXPATHLEN+1];
static char *module_search_path = NULL;
-static char lib_python[] = "lib/python" VERSION;
+static char lib_python[] = LIBDIR "/python" VERSION;
static void
reduce(char *dir)
@@ -524,7 +528,7 @@ calculate_path(void)
}
else
strncpy(zip_path, PREFIX, MAXPATHLEN);
- joinpath(zip_path, "lib/python00.zip");
+ joinpath(zip_path, LIBDIR "/python00.zip");
bufsz = strlen(zip_path); /* Replace "00" with version */
zip_path[bufsz - 6] = VERSION[0];
zip_path[bufsz - 5] = VERSION[2];
Index: Python-2.6.6/Lib/distutils/command/build_ext.py
===================================================================
--- Python-2.6.6.orig/Lib/distutils/command/build_ext.py
+++ Python-2.6.6/Lib/distutils/command/build_ext.py
@@ -225,7 +225,8 @@ class build_ext (Command):
if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos':
if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")):
# building third party extensions
- self.library_dirs.append(os.path.join(sys.prefix, "lib",
+ self.library_dirs.append(os.path.join(sys.prefix,
+ sysconfig.get_config_var("LIBDIR")[len(sys.prefix)+1:],
"python" + get_python_version(),
"config"))
else:
@@ -268,7 +269,7 @@ class build_ext (Command):
# Finally add the user include and library directories if requested
if self.user:
user_include = os.path.join(USER_BASE, "include")
- user_lib = os.path.join(USER_BASE, "lib")
+ user_lib = os.path.join(USER_BASE, sysconfig.get_config_var("LIBDIR")[len(sys.prefix)+1:])
if os.path.isdir(user_include):
self.include_dirs.append(user_include)
if os.path.isdir(user_lib):
Index: Python-2.6.6/Lib/distutils/sysconfig.py
===================================================================
--- Python-2.6.6.orig/Lib/distutils/sysconfig.py
+++ Python-2.6.6/Lib/distutils/sysconfig.py
@@ -119,8 +119,10 @@ def get_python_lib(plat_specific=0, stan
prefix = plat_specific and EXEC_PREFIX or PREFIX
if os.name == "posix":
- libpython = os.path.join(prefix,
- "lib", "python" + get_python_version())
+# libpython = os.path.join(prefix,
+# get_config_var("LIBDIR")[len(sys.prefix)+1:],
+# "python" + get_python_version())
+ libpython = os.path.join(sys.path[1][:len(sys.path[1])-13],"python" + get_python_version())
if standard_lib:
return libpython
else:
Index: Python-2.6.6/Lib/pydoc.py
===================================================================
--- Python-2.6.6.orig/Lib/pydoc.py
+++ Python-2.6.6/Lib/pydoc.py
@@ -341,6 +341,7 @@ class Doc:
def getdocloc(self, object):
"""Return the location of module docs or None"""
+ from distutils.sysconfig import get_config_var
try:
file = inspect.getabsfile(object)
@@ -349,7 +350,7 @@ class Doc:
docloc = os.environ.get("PYTHONDOCS",
"http://docs.python.org/library")
- basedir = os.path.join(sys.exec_prefix, "lib",
+ basedir = os.path.join(sys.exec_prefix, get_config_var("LIBDIR")[len(sys.prefix)+1:],
"python"+sys.version[0:3])
if (isinstance(object, type(os)) and
(object.__name__ in ('errno', 'exceptions', 'gc', 'imp',
Index: Python-2.6.6/Lib/site.py
===================================================================
--- Python-2.6.6.orig/Lib/site.py
+++ Python-2.6.6/Lib/site.py
@@ -235,6 +235,9 @@ def addusersitepackages(known_paths):
# # Don't know what to put here
# USER_BASE = ''
# USER_SITE = ''
+
+ from distutils.sysconfig import get_config_var
+
if os.name == "nt":
base = os.environ.get("APPDATA") or "~"
USER_BASE = env_base if env_base else joinuser(base, "Python")
@@ -243,7 +246,7 @@ def addusersitepackages(known_paths):
"site-packages")
else:
USER_BASE = env_base if env_base else joinuser("~", ".local")
- USER_SITE = os.path.join(USER_BASE, "lib",
+ USER_SITE = os.path.join(USER_BASE, get_config_var("LIBDIR")[len(sys.prefix)+1:],
"python" + sys.version[:3],
"site-packages")
@@ -254,6 +257,8 @@ def addusersitepackages(known_paths):
def addsitepackages(known_paths):
"""Add site-packages (and possibly site-python) to sys.path"""
+ from distutils.sysconfig import get_config_var
+
sitedirs = []
seen = []
@@ -265,13 +270,13 @@ def addsitepackages(known_paths):
if sys.platform in ('os2emx', 'riscos'):
sitedirs.append(os.path.join(prefix, "Lib", "site-packages"))
elif os.sep == '/':
- sitedirs.append(os.path.join(prefix, "lib",
+ sitedirs.append(os.path.join(prefix, get_config_var("LIBDIR")[len(sys.prefix)+1:],
"python" + sys.version[:3],
"site-packages"))
- sitedirs.append(os.path.join(prefix, "lib", "site-python"))
+ sitedirs.append(os.path.join(prefix, get_config_var("LIBDIR")[len(sys.prefix)+1:], "site-python"))
else:
sitedirs.append(prefix)
- sitedirs.append(os.path.join(prefix, "lib", "site-packages"))
+ sitedirs.append(os.path.join(prefix, get_config_var("LIBDIR")[len(sys.prefix)+1:], "site-packages"))
if sys.platform == "darwin":
# for framework builds *only* we add the standard Apple
Index: Python-2.6.6/Lib/trace.py
===================================================================
--- Python-2.6.6.orig/Lib/trace.py
+++ Python-2.6.6/Lib/trace.py
@@ -663,6 +663,7 @@ def _err_exit(msg):
def main(argv=None):
import getopt
+ from distutils.sysconfig import get_config_var
if argv is None:
argv = sys.argv
@@ -759,10 +760,10 @@ def main(argv=None):
# should I also call expanduser? (after all, could use $HOME)
s = s.replace("$prefix",
- os.path.join(sys.prefix, "lib",
+ os.path.join(sys.prefix, get_config_var("LIBDIR")[len(sys.prefix)+1:],
"python" + sys.version[:3]))
s = s.replace("$exec_prefix",
- os.path.join(sys.exec_prefix, "lib",
+ os.path.join(sys.exec_prefix, get_config_var("LIBDIR")[len(sys.prefix)+1:],
"python" + sys.version[:3]))
s = os.path.normpath(s)
ignore_dirs.append(s)
_______________________________________________
Patches mailing list
[email protected]
http://mail.python.org/mailman/listinfo/patches