Skip to content

Commit

Permalink
gcc*-libs: Enhance the override specs.
Browse files Browse the repository at this point in the history
With our GCC packages encoding LOCALBASE as a default search path to
help out-of-pkgsrc builds for regular users, this turns out to subvert
buildlink3 as libraries were being pulled in directly if they happened
to be installed.  The new implicit DEPENDS checks helped to expose these
problems.

To avoid this happening we now override the link flag specs to remove
LOCALBASE from the default search path.

While here remove some redundant USE_PKGSRC_GCC_RUNTIME checks, these
files are only ever included if that is already set.
  • Loading branch information
jperkin committed Nov 24, 2023
1 parent f978808 commit 83ec13f
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 43 deletions.
38 changes: 17 additions & 21 deletions gcc12-libs/buildlink3.mk
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,31 @@ BUILDLINK_TREE+= gcc12-libs
.if !defined(GCC12_LIBS_BUILDLINK3_MK)
GCC12_LIBS_BUILDLINK3_MK:=

.if ${USE_PKGSRC_GCC_RUNTIME:U:tl} == yes
BUILDLINK_API_DEPENDS.gcc12-libs+= gcc12-libs>=12.2.0
.else
BUILDLINK_API_DEPENDS.gcc12-libs+= gcc12>=12.2.0
.endif
BUILDLINK_PKGSRCDIR.gcc12-libs= ../../extra/gcc12-libs
BUILDLINK_DEPMETHOD.gcc12-libs?= full

BUILDLINK_PASSTHRU_DIRS+= ${BUILDLINK_PREFIX.gcc12-libs}/gcc12

BUILDLINK_FILES.gcc12-libs= # empty
BUILDLINK_AUTO_VARS.gcc12-libs= no

.if ${USE_PKGSRC_GCC_RUNTIME:U:tl} == yes
# Use custom specs file to ensure we link against pkgsrc libraries.
SPECS_LIBGCC= ${WRAPPER_DIR}/specs.libgcc
WRAPPER_TARGETS+= ${SPECS_LIBGCC}

${SPECS_LIBGCC}:
@${ECHO} "*link_libgcc:" >${SPECS_LIBGCC}
@${ECHO} "%D ${LINKER_RPATH_FLAG}${BUILDLINK_PREFIX.gcc12-libs}/gcc12/${MACHINE_GNU_PLATFORM}/lib/%M" >>${SPECS_LIBGCC}

_WRAP_EXTRA_ARGS.CC+= -specs=${SPECS_LIBGCC}
_WRAP_EXTRA_ARGS.CXX+= -specs=${SPECS_LIBGCC}
_WRAP_EXTRA_ARGS.FC+= -specs=${SPECS_LIBGCC}
CWRAPPERS_APPEND.cc+= -specs=${SPECS_LIBGCC}
CWRAPPERS_APPEND.cxx+= -specs=${SPECS_LIBGCC}
CWRAPPERS_APPEND.f77+= -specs=${SPECS_LIBGCC}
.endif
# Use custom specs file to ensure we link against the GCC libraries from
# this package, as well as sanitising the default library search path.
SPECS_PKGSRC= ${WRAPPER_DIR}/specs.pkgsrc
WRAPPER_TARGETS+= ${SPECS_PKGSRC}

${SPECS_PKGSRC}:
${SED} -e \
's,@LIBGCC_PREFIX@,${BUILDLINK_PREFIX.gcc12-libs}/gcc12/${MACHINE_GNU_PLATFORM},g' \
< ${BUILDLINK_PKGSRCDIR.gcc12-libs}/files/specs.pkgsrc \
> ${SPECS_PKGSRC}

_WRAP_EXTRA_ARGS.CC+= -specs=${SPECS_PKGSRC}
_WRAP_EXTRA_ARGS.CXX+= -specs=${SPECS_PKGSRC}
_WRAP_EXTRA_ARGS.FC+= -specs=${SPECS_PKGSRC}
CWRAPPERS_APPEND.cc+= -specs=${SPECS_PKGSRC}
CWRAPPERS_APPEND.cxx+= -specs=${SPECS_PKGSRC}
CWRAPPERS_APPEND.f77+= -specs=${SPECS_PKGSRC}

.include "../../mk/dlopen.buildlink3.mk"
.include "../../mk/pthread.buildlink3.mk"
Expand Down
11 changes: 11 additions & 0 deletions gcc12-libs/files/specs.pkgsrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
*link_arch32:
%{YP,*} %{R*} %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp%R/lib:%R/usr/lib} %{!p:%{!pg:-Y P,%R/lib:%R/usr/lib}}}

*link_arch64:
%{YP,*} %{R*} %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp/amd64:%R/lib/amd64:%R/usr/lib/amd64} %{!p:%{!pg:-Y P,%R/lib/amd64:%R/usr/lib/amd64}}}

*link_arch_default:
%(link_arch64)

*link_libgcc:
%D -R@LIBGCC_PREFIX@/lib/%M
40 changes: 18 additions & 22 deletions gcc13-libs/buildlink3.mk
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,31 @@ BUILDLINK_TREE+= gcc13-libs
.if !defined(GCC13_LIBS_BUILDLINK3_MK)
GCC13_LIBS_BUILDLINK3_MK:=

.if ${USE_PKGSRC_GCC_RUNTIME:U:tl} == yes
BUILDLINK_API_DEPENDS.gcc13-libs+= gcc13-libs>=13.1.0
.else
BUILDLINK_API_DEPENDS.gcc13-libs+= gcc13>=13.1.0
.endif
BUILDLINK_API_DEPENDS.gcc13-libs+= gcc13-libs>=13.2.0
BUILDLINK_PKGSRCDIR.gcc13-libs= ../../extra/gcc13-libs
BUILDLINK_DEPMETHOD.gcc13-libs?= full

BUILDLINK_PASSTHRU_DIRS+= ${BUILDLINK_PREFIX.gcc13-libs}/gcc13

BUILDLINK_FILES.gcc13-libs= # empty
BUILDLINK_AUTO_VARS.gcc13-libs= no

.if ${USE_PKGSRC_GCC_RUNTIME:U:tl} == yes
# Use custom specs file to ensure we link against pkgsrc libraries.
SPECS_LIBGCC= ${WRAPPER_DIR}/specs.libgcc
WRAPPER_TARGETS+= ${SPECS_LIBGCC}

${SPECS_LIBGCC}:
@${ECHO} "*link_libgcc:" >${SPECS_LIBGCC}
@${ECHO} "%D ${LINKER_RPATH_FLAG}${BUILDLINK_PREFIX.gcc13-libs}/gcc13/${MACHINE_GNU_PLATFORM}/lib/%M" >>${SPECS_LIBGCC}

_WRAP_EXTRA_ARGS.CC+= -specs=${SPECS_LIBGCC}
_WRAP_EXTRA_ARGS.CXX+= -specs=${SPECS_LIBGCC}
_WRAP_EXTRA_ARGS.FC+= -specs=${SPECS_LIBGCC}
CWRAPPERS_APPEND.cc+= -specs=${SPECS_LIBGCC}
CWRAPPERS_APPEND.cxx+= -specs=${SPECS_LIBGCC}
CWRAPPERS_APPEND.f77+= -specs=${SPECS_LIBGCC}
.endif
# Use custom specs file to ensure we link against the GCC libraries from
# this package, as well as sanitising the default library search path.
SPECS_PKGSRC= ${WRAPPER_DIR}/specs.pkgsrc
WRAPPER_TARGETS+= ${SPECS_PKGSRC}

${SPECS_PKGSRC}:
${SED} -e \
's,@LIBGCC_PREFIX@,${BUILDLINK_PREFIX.gcc13-libs}/gcc13/${MACHINE_GNU_PLATFORM},g' \
< ${BUILDLINK_PKGSRCDIR.gcc13-libs}/files/specs.pkgsrc \
> ${SPECS_PKGSRC}

_WRAP_EXTRA_ARGS.CC+= -specs=${SPECS_PKGSRC}
_WRAP_EXTRA_ARGS.CXX+= -specs=${SPECS_PKGSRC}
_WRAP_EXTRA_ARGS.FC+= -specs=${SPECS_PKGSRC}
CWRAPPERS_APPEND.cc+= -specs=${SPECS_PKGSRC}
CWRAPPERS_APPEND.cxx+= -specs=${SPECS_PKGSRC}
CWRAPPERS_APPEND.f77+= -specs=${SPECS_PKGSRC}

.include "../../mk/dlopen.buildlink3.mk"
.include "../../mk/pthread.buildlink3.mk"
Expand Down
11 changes: 11 additions & 0 deletions gcc13-libs/files/specs.pkgsrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
*link_arch32:
%{YP,*} %{R*} %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp%R/lib:%R/usr/lib} %{!p:%{!pg:-Y P,%R/lib:%R/usr/lib}}}

*link_arch64:
%{YP,*} %{R*} %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp/amd64:%R/lib/amd64:%R/usr/lib/amd64} %{!p:%{!pg:-Y P,%R/lib/amd64:%R/usr/lib/amd64}}}

*link_arch_default:
%(link_arch64)

*link_libgcc:
%D -R@LIBGCC_PREFIX@/lib/%M

0 comments on commit 83ec13f

Please sign in to comment.