commit:     36eba05752348258a79bbe6a9937e6e406c262e6
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Thu May 21 21:55:26 2020 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Thu May 21 21:55:26 2020 +0000
URL:        
https://gitweb.gentoo.org/proj/binutils-config.git/commit/?id=36eba057

binutils-config: add build-time and runtime switches to disable native symlinks

We have two knobs here:
1. Build-time knob USE_NATIVE_LINKS to set a default, defaults to 'yes' 
(existing behaviour)
2. Run-time --enable-native-links / --disable-native-links knobs. These are not 
persistent
   across binutils-config runs and are meant for manual testing. Undocumented 
for now.

Reported-by: Kent Fredric
Bug: https://bugs.gentoo.org/724454
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>

 Makefile            | 19 +++++++++++++++++--
 src/binutils-config | 16 ++++++++++++++--
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/Makefile b/Makefile
index 7fd7959..aee6da8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,10 @@
+# configurable options:
+# Avoid installing native symlinks like:
+#     /usr/bin/as -> ${CTARGET}-as
+# and keep only
+#     ${CTARGET}-as
+USE_NATIVE_LINKS ?= yes
+
 EPREFIX ?=
 
 PN = binutils-config
@@ -14,11 +21,19 @@ MKDIR_P = mkdir -p -m 755
 INSTALL_EXE = install -m 755
 INSTALL_DATA = install -m 644
 
-all: # no-op
+all: .binutils-config
+
+.binutils-config: src/binutils-config
+       sed \
+               -e 's:@GENTOO_EPREFIX@:$(EPREFIX):g' \
+               -e 's:@PV@:$(PV):g' \
+               -e 's:@USE_NATIVE_LINKS@:$(USE_NATIVE_LINKS):g' \
+               $< > $@
+       chmod a+rx $@
 
 install: all
        $(MKDIR_P) $(DESTDIR)$(BINDIR) $(DESTDIR)$(DOCDIR) 
$(DESTDIR)$(ESELECTDIR) $(DESTDIR)$(MANDIR)/man8
-       $(INSTALL_EXE)  src/binutils-config $(DESTDIR)$(BINDIR)
+       $(INSTALL_EXE)  .binutils-config $(DESTDIR)$(BINDIR)/binutils-config
        $(INSTALL_DATA) README $(DESTDIR)$(DOCDIR)
        $(INSTALL_DATA) src/binutils.eselect $(DESTDIR)$(ESELECTDIR)
        $(INSTALL_DATA) src/binutils-config.8 $(DESTDIR)$(MANDIR)/man8

diff --git a/src/binutils-config b/src/binutils-config
index 69ca530..e6819a8 100755
--- a/src/binutils-config
+++ b/src/binutils-config
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Copyright 1999-2019 Gentoo Authors
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # Format of /etc/env.d/binutils/:
@@ -130,8 +130,17 @@ switch_profile() {
        for x in * ; do
                atomic_ln "${BINPATH}/${x}" "${ROOT}/${BINPATH_LINKS}" "${x}"
                atomic_ln "${BINPATH_LINKS}/${x}" "${EROOT}/usr/bin" 
"${TARGET}-${x}"
-               if [[ ${TARGET} == ${HOST} ]] ; then
+               if [[ ${TARGET} == ${HOST} -a ${USE_NATIVE_LINKS} == yes ]] ; 
then
                        atomic_ln "${TARGET}-${x}" "${EROOT}/usr/bin" "${x}"
+               else
+                       # Remove native links if exist from previous
+                       # installations or set by user manually. binutils-config
+                       # owns these symlinks.
+                       #
+                       # TODO: cleanup symlinks not just known to this
+                       # release/configuration of binutils, but also list
+                       # all possible ones.
+                       rm -f "${EROOT}/usr/bin/${x}"
                fi
        done
 
@@ -357,6 +366,7 @@ DOIT="switch_profile"
 PROFILE="current"
 HOST=""
 TARGET=""
+USE_NATIVE_LINKS="@USE_NATIVE_LINKS@"
 unset UARG
 
 select_action() {
@@ -377,6 +387,8 @@ while [[ $# -gt 0 ]] ; do
                -u|--uninstall)            select_action uninstall_target ;;
                -d|--debug)                DEBUG="yes" ;;
                -h|--help)                 usage 0 ;;
+               --enable-native-links)     USE_NATIVE_LINKS="yes" ;;
+               --disable-native-links)    USE_NATIVE_LINKS="no" ;;
                -V|--version)
                        ver="@PV@"
                        echo "binutils-config-${ver/@'PV'@/git}"

Reply via email to