This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC] python-config.py --ldflags should return relocated path to libpython


This is the fix that I alluded to in my earlier email:
http://www.sourceware.org/ml/gdb-patches/2010-07/msg00167.html.

There are currently 2 issues, I think, with python-config --ldflags:

  1. When python is configured with --enable-shared:
     -L<prefix>/lib is missing.  This is a problem if python was
     installed in a non-standard location.

  2. When Python is configured without --enable-shared:
     The path to the libpython archive is provided in the command output,
     but the path that gets returned is the path used at configure time.
     If the Python install was copied over to a different machine and
     then installed at a different location, then the path in -L<path>
     is incorrect (by comparison, python-config --cflags returns
     the location with the correct prefix).

I think that one might be able to work around the situation by adding
the missing -L option to LDFLAGS either during make or configure...
I will also admit that the situation is a little unorthodox, in the fact
that Python is installed at a different prefix than the one that was
used when configuring the build...

But the thing is it's been really useful on platforms where it's a pain
to build it (think Windows, for instance). 

This patch should fix both situations.  I will also send the patch
upstream to the Python developers, to see what they say.

gdb/ChangeLog:

        * python/python-config.py: When --ldflags is specified, make sure
        that the paths printed are relative to the run-time prefix.
        Always provide the path to libpython, even when the python
        install provides a shared version of libpython.

Tested on x86_64-linux, with 2.5 and 2.6. Briefly tested with 2.7,
but only by running python-config.py and visually verifying the output.

---
 gdb/python/python-config.py |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/gdb/python/python-config.py b/gdb/python/python-config.py
index 0230eb4..aa4aea3 100644
--- a/gdb/python/python-config.py
+++ b/gdb/python/python-config.py
@@ -50,8 +50,21 @@ for opt in opt_flags:
         # add the prefix/lib/pythonX.Y/config dir, but only if there is no
         # shared library in prefix/lib/.
         if opt == '--ldflags':
+            # Provide the location where the Python library is installed.
+            # We always provide it, because Python may have been installed
+            # at a non-standard location.
             if not getvar('Py_ENABLE_SHARED'):
-                libs.insert(0, '-L' + getvar('LIBPL'))
+                # There is no shared library in prefix/lib.  The static
+                # library is in prefix/lib/pythonX.Y/config.
+                #
+                # Note that we cannot use getvar('LIBPL') like we used to,
+                # because it provides the location at build time, which might
+                # be different from the actual location at runtime.
+                libdir = sysconfig.get_python_lib(standard_lib=True) + '/config'
+            else:
+                # The Python shared library is installed in prefix/lib.
+                libdir = sysconfig.PREFIX + '/lib'
+            libs.insert(0, '-L' + libdir)
             libs.extend(getvar('LINKFORSHARED').split())
         print ' '.join(libs)
 
-- 
1.7.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]