ports/149955: [PATCH] bsd.port.mk: add a knob to use the devel/binutils port, rather than the base system binutils
bf
bf1783 at gmail.com
Wed Aug 25 06:00:23 UTC 2010
>Number: 149955
>Category: ports
>Synopsis: [PATCH] bsd.port.mk: add a knob to use the devel/binutils port, rather than the base system binutils
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed Aug 25 06:00:22 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: bf
>Release: 9-CURRENT amd64
>Organization:
-
>Environment:
>Description:
A growing number of ports need to use the utilities from the devel/binutils port, rather than the old base system binutils. Among them are many ports that USE_GCC=4.[456] or USE_FORTRAN. ports/136607 solved part (but not all) of this problem by hard-coding a dependence on devel/binutils in the lang/gcc4[456] ports, ensuring that these compilers would use the linker and assembler from devel/binutils implicitly. However, a number of ports still call the linker, assembler, and other utilities _explicitly_, and this was not addressed by ports/136607. This can result in a problematic mixing of different tool-chains (for example, like in math/blas, math/atlas, and math/lapack), or a hard-coded dependency on the base system binutils, when the newer binutils are desired. (This is because utilities like AR, AS, LD, OBJCOPY, OBJDUMP, and RANLIB are set in /usr/share/mk/sys.mk, ports/Mk/bsd.commands.mk, and ports/Mk/bsd.port.mk; and because the devel/binutils are usually preceded b
y the like-named base system binutils in the system path.)
To address this problem without requiring redundant code in individual port Makefiles, I propose the attached patch to bsd.port.mk. It will ensure that a choice of tool-chains is available, even in ports that do not use lang/gcc4[456]. With the patch, if USE_BINUTILS is defined in a port Makefile:
--devel/binutils is added to BUILD_DEPENDS
--the subset of utilities contained in BINUTILS (by default, all of them) is exposed to targets in port Makefiles,
--added to the CONFIGURE_ENV (if the ports uses GNU_CONFIGURE or USE_BINUTILS_CONFIGURE is defined), and
--added to the MAKE_ENV (if not contained in a blacklist BINUTILS_NO_MAKE_ENV).
The whole can be disabled for debugging purposes by defining DISABLE_BINUTILS.
The small number of ports that have devel/binutils as a run-time dependency, like lang/gcc4[456], will still need to add a RUN_DEPENDS. ports/Mk/bsd.gcc.mk can be altered to add USE_BINUTILS when USE_GCC=4.[456] or USE_FORTRAN is defined, and other ports that don't use lang/gcc[456] can add a line or two to their Makefiles, and make use of the variables provided in patching sources, if necessary.
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
Index: bsd.port.mk
===================================================================
RCS file: /home/pcvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.644
diff -u -r1.644 bsd.port.mk
--- bsd.port.mk 20 Aug 2010 12:15:02 -0000 1.644
+++ bsd.port.mk 25 Aug 2010 04:43:17 -0000
@@ -1734,6 +1734,22 @@
.include "${PORTSDIR}/Mk/bsd.gcc.mk"
.endif
+.if defined(USE_BINUTILS) && !defined(DISABLE_BINUTILS)
+BUILD_DEPENDS+= ${LOCALBASE}/bin/as:${PORTSDIR}/devel/binutils
+BINUTILS?= ADDR2LINE AR AS CPPFILT GPROF LD NM OBJCOPY OBJDUMP RANLIB \
+ READELF SIZE STRINGS
+BINUTILS_NO_MAKE_ENV?=
+. for b in ${BINUTILS}
+${b}= ${LOCALBASE}/bin/${b:C/PP/++/:L}
+. if defined(GNU_CONFIGURE) || defined(BINUTILS_CONFIGURE)
+CONFIGURE_ENV+= ${b}="${${b}}"
+. endif
+. if ${BINUTILS_NO_MAKE_ENV:M${b}} == ""
+MAKE_ENV+= ${b}="${${b}}"
+. endif
+. endfor
+.endif
+
.if defined(USE_OPENLDAP) || defined(WANT_OPENLDAP_VER)
.include "${PORTSDIR}/Mk/bsd.ldap.mk"
.endif
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list