pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/46130: Partial fix/workaround for "the libpixman problem"
>Number: 46130
>Category: pkg
>Synopsis: Partial fix/workaround for "the libpixman problem"
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Fri Mar 02 22:50:01 +0000 2012
>Originator: Havard Eidnes
>Release: NetBSD 5.1
>Organization:
None
>Environment:
System: NetBSD vipe.uninett.no 5.1 NetBSD 5.1 (VIPE) #1: Mon Jan 16 10:01:42
CET 2012 he%vipe.uninett.no@localhost:/usr/obj/sys/arch/amd64/compile/VIPE amd64
Architecture: x86_64
Machine: amd64
>Description:
David Holland analyzed this problem. The start of his message
to tech-pkg%NetBSD.org@localhost of February 20 sums up the problem:
People using -5 have become all too familiar with this:
.../work/.x11-buildlink/lib/libcairo.so: undefined reference to
`pixman_image_set_destroy_function'
.../work/.x11-buildlink/lib/libcairo.so: undefined reference to
`pixman_image_composite32'
.../work/.x11-buildlink/lib/libcairo.so: undefined reference to
`pixman_image_fill_boxes'
*** Error 1
I finally got direct access to it while failing last night, and here's
what happens at least in the case I found:
(1) Something in the victim package's config logic adds
-L/usr/X11R7/lib -R/usr/X11R7/lib to LDFLAGS or LIBS.
(2) This gets added *before* the -Wl,-R/usr/pkg/lib -Wl,-R/usr/X11R7/lib
that comes from pkg-config.
(3) The wrappers remove -L/usr/X11R7/lib but leave the
-R/usr/X11R7/lib alone and print:
WARNING: [transform-gcc] passing unknown option -R/usr/X11R7/lib
(4) Thus the link line ends up with an rpath that has /usr/X11R7/lib
before /usr/pkg/lib. This is wrong, and the rest follows on a
predictable downhill path.
It is our GCC which puts -R at the front of the ld invocation.
I experienced this problem with the graphics/gnuplot package.
In that case, the -L/usr/X11R7/lib and -R/usr/X11R7/lib come
from LIBRARIES_FOR_X, which comes from X_LIBS, which again
comes from autoconf's AC_PATH_XTRA, so in a sense this isn't
really a bug in the package which experiences the problem.
>How-To-Repeat:
Try to build graphics/gnuplot from pkgsrc-current.
>Fix:
It is possible to partly work around this by converting
any -R<dir> option into -Wl,-R<dir>, which will not be
re-ordered relative to other -Wl,-R<dir> options. This
can be done by the pkgsrc wrapper system, like this:
Index: mk/wrapper/transform-gcc
===================================================================
RCS file: /cvsroot/pkgsrc/mk/wrapper/transform-gcc,v
retrieving revision 1.25
diff -u -r1.25 transform-gcc
--- mk/wrapper/transform-gcc 6 Feb 2012 13:03:55 -0000 1.25
+++ mk/wrapper/transform-gcc 2 Mar 2012 22:19:25 -0000
@@ -132,6 +132,11 @@
-fgnu-runtime |\
-fconstant-string-class=* ) transform_pass ;;
+# Old-style rpath specifier; gcc places -R args passed to gcc first in
+# the linker invocation, which messes up the search order among the
+# other -Wl,-R specifiers given to GCC
+-R* ) transform_to "-Wl,$arg" ;;
+
# Other compiler's options that have corresponding GCC options.
-Kpic |\
-kpic |\
It is confirmed that this fixes the build of gnuplot on
NetBSD 5.1.
Home |
Main Index |
Thread Index |
Old Index