]> granicus.if.org Git - python/commitdiff
Patch #1429775: Link Python modules to libpython on linux if
authorMartin v. Löwis <martin@v.loewis.de>
Mon, 10 Apr 2006 12:39:36 +0000 (12:39 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Mon, 10 Apr 2006 12:39:36 +0000 (12:39 +0000)
--enable-shared. Fixes #832799.

Lib/distutils/command/build_ext.py
Lib/distutils/sysconfig.py
Misc/NEWS

index 4191c76cefe3011aa2a76f2fadfc2b4140656d3e..fbb74768bad37e7256d6b9a8d2dad0c370568ab7 100644 (file)
@@ -185,7 +185,9 @@ class build_ext (Command):
 
         # for extensions under Cygwin and AtheOS Python's library directory must be
         # appended to library_dirs
-        if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos':
+        if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos' or \
+               (sys.platform.startswith('linux') and
+                sysconfig.get_config_var('Py_ENABLE_SHARED')):
             if string.find(sys.executable, sys.exec_prefix) != -1:
                 # building third party extensions
                 self.library_dirs.append(os.path.join(sys.prefix, "lib",
@@ -688,6 +690,13 @@ class build_ext (Command):
             # extensions, it is a reference to the original list
             return ext.libraries + [pythonlib, "m"] + extra
         else:
-            return ext.libraries
+            from distutils import sysconfig
+            if sysconfig.get_config_var('Py_ENABLE_SHARED'):
+                template = "python%d.%d"
+                pythonlib = (template %
+                             (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff))
+                return ext.libraries + [pythonlib]
+            else:
+                return ext.libraries
 
 # class build_ext
index 0feb14aa2b50bed782e393cf4632db1c7a33d673..eafd49e7afb460d3bbf39c35673cdfc4ca98a86a 100644 (file)
@@ -213,8 +213,8 @@ def parse_config_h(fp, g=None):
     """
     if g is None:
         g = {}
-    define_rx = re.compile("#define ([A-Z][A-Z0-9_]+) (.*)\n")
-    undef_rx = re.compile("/[*] #undef ([A-Z][A-Z0-9_]+) [*]/\n")
+    define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n")
+    undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n")
     #
     while 1:
         line = fp.readline()
@@ -351,6 +351,17 @@ def _init_posix():
 
         raise DistutilsPlatformError(my_msg)
 
+    # load the installed pyconfig.h:
+    try:
+        filename = get_config_h_filename()
+        parse_config_h(file(filename), g)
+    except IOError, msg:
+        my_msg = "invalid Python installation: unable to open %s" % filename
+        if hasattr(msg, "strerror"):
+            my_msg = my_msg + " (%s)" % msg.strerror
+
+        raise DistutilsPlatformError(my_msg)
+
     # On MacOSX we need to check the setting of the environment variable
     # MACOSX_DEPLOYMENT_TARGET: configure bases some choices on it so
     # it needs to be compatible.
index 1ee39f1c90bfa995edb37b3af850eb49cfdd9c15..f874a2d479a7df578e967225f1708faafeaff4b4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -33,6 +33,8 @@ Library
 Build
 -----
 
+- Patch #1429775: Link extension modules with the shared libpython.
+
 C API
 -----