aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2018-08-24 18:36:57 +0100
committerSergei Trofimovich <slyfox@gentoo.org>2018-08-24 19:09:17 +0100
commit9b907ef80bc421df23515afc4c306e4d96c67649 (patch)
tree2f3d5b775be75e931b3737e24d8793a372014f1d /Makefile
parentREADME: document /etc/env.d/04gcc-${CTARGET} (diff)
downloadgcc-config-9b907ef80bc421df23515afc4c306e4d96c67649.tar.gz
gcc-config-9b907ef80bc421df23515afc4c306e4d96c67649.tar.bz2
gcc-config-9b907ef80bc421df23515afc4c306e4d96c67649.zip
Convert binary wrapper to a symlink wrapper.v2.0
Before the change: /usr/bin/gcc and friends were a copy of /usr/$(libexecdir)/misc/gcc-config After the change: /usr/bin/gcc is a symlink to a real compiler binary. Examples: /usr/${CTARGET}/gcc-bin/${GCC_VER}/gcc (native) /usr/${CHOST}/${CTARGET}/gcc-bin/${GCC_VER}/gcc (cross) gcc-config is a binary wrapper that does (or did) a few things: - [removed in 2011] injects additional CFLAGS_${ABI} Removed in commit 7ac40f3eb8434961f70485247d883f5b3009dcf2 "Stop auto appending CFLAGS_<abi> from the env." - traverses PATH for real compiler binary and reexecutes it. - reads /etc/env.d/05gcc-${CTARGET} as a fallback if PATH is empty. Today binary wrapper does only PATH resolution and re-execution. This change has a few minor benefits: - PATH will not contain explicit /usr/${CHOST}/${CTARGET}/gcc-bin/${GCC_VER} entry. This will make PATH shorter for those who have mavy cross-compilers installed. - compiler switch will not require sourcing '. /etc/profile' as changes are applied as soon an symlink is switched. - ccache will see gcc binary changes directly and react accordingly. Previously in default configuration ccache cache depended on state of /usr/$(libexecdir)/misc/gcc-config See bug #640958 where ccache did not notice USE=-pie -> USE=pie switch. - Reasoning about PATH ordering is straightforward: all available binaries (as symlinks) are in /usr/bin. See bug #255695 where PATH ordering changed and bug #626606 where people get confused on what is in /usr/bin/gcc binary. Bug: https://bugs.gentoo.org/626606 Bug: https://bugs.gentoo.org/255695 Bug: https://bugs.gentoo.org/640958 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile8
1 files changed, 3 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 3cbb915..3e9e5a3 100644
--- a/Makefile
+++ b/Makefile
@@ -13,16 +13,15 @@ BINDIR = $(PREFIX)/bin
ESELECTDIR = $(PREFIX)/share/eselect/modules
SUBLIBDIR = lib
LIBDIR = $(PREFIX)/$(SUBLIBDIR)
-LIBEXECDIR = $(LIBDIR)/$(PN)
MKDIR_P = mkdir -p -m 755
INSTALL_EXE = install -m 755
INSTALL_DATA = install -m 644
-all: .gcc-config wrapper
+all: .gcc-config
clean:
- rm -f .gcc-config wrapper *.o core
+ rm -f .gcc-config
.gcc-config: gcc-config
sed \
@@ -34,8 +33,7 @@ clean:
chmod a+rx $@
install: all
- $(MKDIR_P) $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBEXECDIR) $(DESTDIR)$(ESELECTDIR)
- $(INSTALL_EXE) wrapper $(DESTDIR)$(LIBEXECDIR)/wrapper
+ $(MKDIR_P) $(DESTDIR)$(BINDIR) $(DESTDIR)$(ESELECTDIR)
$(INSTALL_EXE) .gcc-config $(DESTDIR)$(BINDIR)/gcc-config
$(INSTALL_DATA) gcc.eselect $(DESTDIR)$(ESELECTDIR)