[Patches] [ python-Patches-1610795 ] BSD version of ctypes.util.find_library

SourceForge.net noreply at sourceforge.net
Wed Jan 17 08:09:11 CET 2007


Patches item #1610795, was opened at 2006-12-07 05:29
Message generated for change (Comment added) made by nnorwitz
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1610795&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Library (Lib)
Group: None
Status: Open
Resolution: None
Priority: 9
Private: No
Submitted By: Martin Kammerhofer (mkam)
>Assigned to: Thomas Heller (theller)
Summary: BSD version of ctypes.util.find_library 

Initial Comment:
The ctypes.util.find_library function for Posix systems is actually
tailored for Linux systems. While the _findlib_gcc function relies
only on the GNU compiler and may therefore work on any system with the
"gcc" command in PATH, the _findLib_ld function relies on the
/sbin/ldconfig command (originating from SunOS 4.0) which is not
standardized. The version from GNU libc differs in option syntax and
output format from other ldconfig programs around.

I therefore provide a patch that enables find_library to properly
communicate with the ldconfig program on FreeBSD systems. It has been
tested on FreeBSD 4.11 and 6.2. It probably works on other *BSD
systems too. (It works without this patch on FreeBSD, because after
getting an error from ldconfig it falls back to _findlib_gcc.)

While at it I also tidied up the Linux specific code: I'm escaping the
function argument before interpolating it into a regular expression (to
protect against nasty regexps) and removed the code for creation of a
temporary file that was not used in any way.


----------------------------------------------------------------------

>Comment By: Neal Norwitz (nnorwitz)
Date: 2007-01-16 23:09

Message:
Logged In: YES 
user_id=33168
Originator: NO

Thomas, I don't see any (public) API changes and this fixes a bug.  I
don't see a reason not to fix this in 2.5.1.  If you are comfortable with
fixing, apply the patch.  Also, please update Misc/NEWS.  Thanks!

----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2007-01-12 12:21

Message:
Logged In: YES 
user_id=11105
Originator: NO

Committed into trunk as revision 53402.  Thanks for the patch and the work
on it.

----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2007-01-12 12:11

Message:
Logged In: YES 
user_id=11105
Originator: NO

Neal, I think this can go into the release25-maint branch since it repairs
the ctypes.util.find_library function on BSD systems.  What do you think?

----------------------------------------------------------------------

Comment By: Martin Kammerhofer (mkam)
Date: 2007-01-10 03:58

Message:
Logged In: YES 
user_id=1656067
Originator: YES

The output looks good. The patch selects the numerically highest library
version.
NetBSD is not handled by the patch but works through _findLib_gcc (which
will also
be tried as a fallback strategy for Free/Open-BSD when ldconfig output
parsing fails.)

I think the patch is ready for commit.


----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2007-01-09 12:01

Message:
Logged In: YES 
user_id=11105
Originator: NO

mkam, I was eventually able to test out your patch.
I have virtual machines running Freebsd6.0, NetBSD3.0, and OpenBSD3.9.
The output from "print find_library('c'), find_library('m')" on these
systems is as follows:

FreeBSD6.0:  libc.so.6, libm.so.4
NetBSD3.0: libc.so.12, libm.so.0
OpenBSD3.9: libc.so.39.0, libm.so.2.1

If you think this is what is expected, I'm happy to apply the patch.  Or
is there further work needed on it?  (Do you still need the output of
"ldconfig -r" or whatever?)

----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2006-12-20 10:43

Message:
Logged In: YES 
user_id=11105
Originator: NO

Unfortunately I'm unable to review or work on this patch *this year*.  I
will definitely take a look in January.  Sorry.

----------------------------------------------------------------------

Comment By: Martin Kammerhofer (mkam)
Date: 2006-12-12 03:28

Message:
Logged In: YES 
user_id=1656067
Originator: YES

Here is the revised patch. Tested on a (virtual) OpenBSD 3.9 machine,
FreeBSD 4.11, FreeBSD 6.2 and DragonFlyBSD 1.6. Does not make assumptions
on how many version numbers are appended to a library name any more. Even
mixed length names (e.g. libfoo.so.8.9 vs. libfoo.so.10) compare in a
meaningful way. (BTW: I also tried NetBSD 2.0.2, but its ldconfig is to
different.)
File Added: ctypes-util.py.patch

----------------------------------------------------------------------

Comment By: Martin Kammerhofer (mkam)
Date: 2006-12-11 02:10

Message:
Logged In: YES 
user_id=1656067
Originator: YES

Hm, I did not know that OpenBSD is still using two version numbers for
shared library.
(I conclude that from the "libc.so.39.0" in the previous followup. Btw
FreeBSD has used
a MAJOR.MINOR[.DEWEY] scheme during the ancient days of the aout
executable format.)
Unfortunately my freebsd patch has the assumption of a single version
number built in;
more specifically the
  cmp(* map(lambda x: int(x.split('.')[-1]), (a, b)))
is supposed to sort based an the last dot separated field. I guess that
OpenBSD system
does not have another libc, at least none with a minor > 0. ;-)
Thomas, can you mail me the output of "ldconfig -r"? I will refine the
patch then,
doing a more general sort algorithm; i.e. sort by all trailing /(\.\d+)+/
fields. Said output from NetBSD welcome too. DragonflyBSD should be no
problem since it is a fork of FreeBSD 4.8, but what looks its sys.platform
like?

----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2006-12-08 12:32

Message:
Logged In: YES 
user_id=11105
Originator: NO

I have tested the patch on FreeBSD 6.0 and (after extending the check to
test for sys.platform.startswith("openbsd")) on OpenBSD 3.9 and it works
fine.

find_library("c") now returns libc.so.6 on FreeBSD 6.0, and libc.so.39.0
in OpenBSD 3.9, while it returned 'None' before on both machines.

----------------------------------------------------------------------

Comment By: David Remahl (chmod007)
Date: 2006-12-07 23:50

Message:
Logged In: YES 
user_id=2135
Originator: NO

# Does this work (without the gcc fallback) on other *BSD systems too?

I don't know, but it doesn't work on Darwin (which already has a custom
method through macholib).

----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2006-12-07 13:11

Message:
Logged In: YES 
user_id=11105
Originator: NO

Will do (although I would appreciate review from others too; I'm not
exactly a BSD expert).

----------------------------------------------------------------------

Comment By: Martin v. Löwis (loewis)
Date: 2006-12-07 11:15

Message:
Logged In: YES 
user_id=21627
Originator: NO

Thomas, can you take a look?

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1610795&group_id=5470


More information about the Patches mailing list