pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: GCC and as



On 05/19/18 14:58, Jason Bacon wrote:
On 05/19/18 09:41, Jason Bacon wrote:
On 05/17/18 15:10, Joerg Sonnenberger wrote:
On Thu, May 17, 2018 at 12:43:56PM -0500, Jason Bacon wrote:
/sharedapps/pkg-2018Q1/bin/gld: warning: libdl.so.2, needed by /home/sharedapps/pkgsrc-2018Q1/fonts/harfbuzz/work/.buildlink/lib/libicuuc.so,
not found (try using -rpath or -rpath-link)
This is the core issue. Find the library, figure out why it not in the
default search path and/or what rpath is missing. From the name, it
should be.

Joerg

Yeah, the first thing I tried was locating where libdl.so.2 was installed, but apparently I botched my first attempt at

find /lib* -name libdl\*

Second try showed it in /lib64.

The problem seems to be a hard-coded path in binutils/Makefile:

CONFIGURE_ARGS+=    --with-lib-path='/lib:/usr/lib'

After adding '/lib64:/usr/lib64:', I'm able to build a test package successfully.

New problem, though.  For verification, I reversed the patch, rebuilt and reinstalled binutils, and my test package still builds even though it should not.  :-/

Starting with a fresh tree again, which will take a while as I have to build gcc5 from source.

OK, simple problem: wrong test package.

I've now verified the patches below in a pristine pkgsrc tree using net/wget to test for the libdl issue.  There may be a tidier way to append things to LIB_PATH.

Of course, we'll need the same patch for other gcc packages.  I confirmed that the code generator going back to at least GCC 4.9 is incompatible with CentOS 6 as.

As it stands, this will cause an unnecessary binutils dep for at least some gcc packages on CentOS 7, which has a binutils new enough for at least gcc5.  We could add a check for the RHEL version as well and limit the patch to RHEL/CentOS 6 for now.  I suspect the problem will show up in RHEL/CentOS 7 at some point, though, and pkgsrc gcc packages will move forward and /usr/bin/as will not.  A binutils dep seems to me like a small price to ensure that this issue doesn't return.

Looking at Lewis's suggestion of testing the binutils version rather than OS_VARIANT in the gcc5 patch, I'm not sure exactly how to safely implement it.  Do we assume that the "base" binutils is first in the default PATH?  Trusting PATH could pick up pkgsrc binutils, disabling the dependency during gcc build and allowing binutils to be deinstalled without warning, which would break future package builds.  If we don't trust path, what absolute path names do we check for?  Can we assume that "as" and "ld" are in /usr/bin on all Linux distros?

Suggestions welcome...

cvs diff: Diffing .
Index: Makefile
===================================================================
RCS file: /cvsroot/pkgsrc/devel/binutils/Makefile,v
retrieving revision 1.76
diff -r1.76 Makefile
34d33
< CONFIGURE_ARGS+=    --with-lib-path='/lib:/usr/lib'
35a35,44
> .if exists(/lib64)
> . if exists(/usr/lib64)
> LIB_PATH=    '/lib64:/usr/lib64:/lib:/usr/lib'
> . else
> LIB_PATH=    '/lib64:/lib:/usr/lib'
> . endif
> .else
> LIB_PATH=    '/lib:/usr/lib'
> .endif
> CONFIGURE_ARGS+=    --with-lib-path=${LIB_PATH}
cvs diff: Diffing patches

cvs diff: Diffing .
Index: Makefile
===================================================================
RCS file: /cvsroot/pkgsrc/lang/gcc5/Makefile,v
retrieving revision 1.27
diff -r1.27 Makefile
133a134,140
> .if ${OS_VARIANT} == "redhat"
> CONFIGURE_ARGS+=    --with-gnu-as --with-as=${PREFIX}/bin/gas
> CONFIGURE_ARGS+=    --with-gnu-ld --with-ld=${PREFIX}/bin/gld
> .  include "../../devel/binutils/buildlink3.mk"
> BUILDLINK_DEPMETHOD.binutils=    full
> .endif
>
cvs diff: Diffing patches

I think this is a little less confusing for the binutils patch:

Index: Makefile
===================================================================
RCS file: /cvsroot/pkgsrc/devel/binutils/Makefile,v
retrieving revision 1.76
diff -r1.76 Makefile
34c34,41
< CONFIGURE_ARGS+=    --with-lib-path='/lib:/usr/lib'
---
> LIB_PATH=       /lib:/usr/lib
> .if exists(/usr/lib64)
> LIB_PATH:=    /usr/lib64:${LIB_PATH}
> .endif
> .if exists(/lib64)
> LIB_PATH:=    /lib64:${LIB_PATH}
> .endif
> CONFIGURE_ARGS+=        --with-lib-path=${LIB_PATH}



Home | Main Index | Thread Index | Old Index