bump(sys-devel/gcc-config): sync with upstream

This commit is contained in:
David Michael 2018-10-09 14:27:02 +00:00
parent b9caeaa975
commit e5ac11a7d9
38 changed files with 192 additions and 4855 deletions

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=Utility to change the gcc compiler being used
EAPI=0
HOMEPAGE=https://www.gentoo.org/
KEYWORDS=alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc ~sparc-fbsd x86 ~x86-fbsd
LICENSE=GPL-2
RDEPEND=!app-admin/eselect-compiler
SLOT=0
_eclasses_=desktop b1d22ac8bdd4679ab79c71aca235009d epatch a1bf4756dba418a7238f3be0cb010c54 estack 43ddf5aaffa7a8d0482df54d25a66a1f eutils 6e6c2737b59a4b982de6fb3ecefd87f8 flag-o-matic 55aaa148741116aa54ad0d80e361818e ltprune 08f9e1d9ee0af8f5d9a7854efbcd8c0e multilib b2f01ad412baf81650c23fcf0975fa33 preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs f164325a2cdb5b3ea39311d483988861 vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf
_md5_=1eb7779e7bef05e5211bad16977f75de

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=Utility to change the gcc compiler being used
EAPI=0
HOMEPAGE=https://www.gentoo.org/
KEYWORDS=~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 -sparc-fbsd -x86-fbsd
LICENSE=GPL-2
RDEPEND=!app-admin/eselect-compiler
SLOT=0
_eclasses_=desktop b1d22ac8bdd4679ab79c71aca235009d epatch a1bf4756dba418a7238f3be0cb010c54 estack 43ddf5aaffa7a8d0482df54d25a66a1f eutils 6e6c2737b59a4b982de6fb3ecefd87f8 flag-o-matic 55aaa148741116aa54ad0d80e361818e ltprune 08f9e1d9ee0af8f5d9a7854efbcd8c0e multilib b2f01ad412baf81650c23fcf0975fa33 preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs f164325a2cdb5b3ea39311d483988861 vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf
_md5_=b2a0e373169a24fba5d06dc2c49d151b

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=Utility to change the gcc compiler being used
EAPI=0
HOMEPAGE=https://www.gentoo.org/
KEYWORDS=alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
RDEPEND=!app-admin/eselect-compiler
SLOT=0
_eclasses_=desktop b1d22ac8bdd4679ab79c71aca235009d epatch a1bf4756dba418a7238f3be0cb010c54 estack 43ddf5aaffa7a8d0482df54d25a66a1f eutils 6e6c2737b59a4b982de6fb3ecefd87f8 flag-o-matic 55aaa148741116aa54ad0d80e361818e ltprune 08f9e1d9ee0af8f5d9a7854efbcd8c0e multilib b2f01ad412baf81650c23fcf0975fa33 preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs f164325a2cdb5b3ea39311d483988861 vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf
_md5_=4bdbadee2dbb7fda2ad21569f1c85a39

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=Utility to change the gcc compiler being used
EAPI=0
HOMEPAGE=https://www.gentoo.org/
KEYWORDS=~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
RDEPEND=!app-admin/eselect-compiler
SLOT=0
_eclasses_=desktop b1d22ac8bdd4679ab79c71aca235009d epatch a1bf4756dba418a7238f3be0cb010c54 estack 43ddf5aaffa7a8d0482df54d25a66a1f eutils 6e6c2737b59a4b982de6fb3ecefd87f8 flag-o-matic 55aaa148741116aa54ad0d80e361818e ltprune 08f9e1d9ee0af8f5d9a7854efbcd8c0e multilib b2f01ad412baf81650c23fcf0975fa33 preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs f164325a2cdb5b3ea39311d483988861 vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf
_md5_=2fd7172e8c572554e049ec60c6d78569

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=Utility to change the gcc compiler being used
EAPI=0
HOMEPAGE=https://www.gentoo.org/
KEYWORDS=~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
RDEPEND=!app-admin/eselect-compiler
SLOT=0
_eclasses_=desktop b1d22ac8bdd4679ab79c71aca235009d epatch a1bf4756dba418a7238f3be0cb010c54 estack 43ddf5aaffa7a8d0482df54d25a66a1f eutils 6e6c2737b59a4b982de6fb3ecefd87f8 flag-o-matic 55aaa148741116aa54ad0d80e361818e ltprune 08f9e1d9ee0af8f5d9a7854efbcd8c0e multilib b2f01ad412baf81650c23fcf0975fa33 preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs f164325a2cdb5b3ea39311d483988861 vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf
_md5_=2fd7172e8c572554e049ec60c6d78569

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=utility to manage compilers
EAPI=0
HOMEPAGE=https://cgit.gentoo.org/proj/gcc-config.git
KEYWORDS=alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.6.tar.xz https://dev.gentoo.org/~vapier/dist/gcc-config-1.6.tar.xz
_eclasses_=multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861 unpacker ee2f5086cd7e7b747b061f58db14d89e
_md5_=efa38742d1a5b7ef68760b190fb88176

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=utility to manage compilers
EAPI=0
HOMEPAGE=https://cgit.gentoo.org/proj/gcc-config.git
KEYWORDS=~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.7.tar.xz https://dev.gentoo.org/~vapier/dist/gcc-config-1.7.tar.xz
_eclasses_=multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861 unpacker ee2f5086cd7e7b747b061f58db14d89e
_md5_=e74659340140c988dd3b59eb8e132a37

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=utility to manage compilers
EAPI=0
HOMEPAGE=https://cgit.gentoo.org/proj/gcc-config.git
KEYWORDS=~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.7.1.tar.xz https://dev.gentoo.org/~vapier/dist/gcc-config-1.7.1.tar.xz
_eclasses_=multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861 unpacker ee2f5086cd7e7b747b061f58db14d89e
_md5_=e74659340140c988dd3b59eb8e132a37

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=utility to manage compilers
EAPI=0
HOMEPAGE=https://cgit.gentoo.org/proj/gcc-config.git
KEYWORDS=~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.7.2.tar.xz https://dev.gentoo.org/~vapier/dist/gcc-config-1.7.2.tar.xz
_eclasses_=multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861 unpacker ee2f5086cd7e7b747b061f58db14d89e
_md5_=e74659340140c988dd3b59eb8e132a37

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=utility to manage compilers
EAPI=0
HOMEPAGE=https://gitweb.gentoo.org/proj/gcc-config.git/
KEYWORDS=alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.7.3.tar.xz https://dev.gentoo.org/~vapier/dist/gcc-config-1.7.3.tar.xz
_eclasses_=multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861 unpacker ee2f5086cd7e7b747b061f58db14d89e
_md5_=744d7f3e937bf484199db99e2ea796a0

View File

@ -1,10 +0,0 @@
DEFINED_PHASES=compile install postinst unpack
DESCRIPTION=utility to manage compilers
EAPI=0
HOMEPAGE=https://gitweb.gentoo.org/proj/gcc-config.git/
KEYWORDS=~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd
LICENSE=GPL-2
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.8.tar.xz https://dev.gentoo.org/~vapier/dist/gcc-config-1.8.tar.xz
_eclasses_=multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861 unpacker ee2f5086cd7e7b747b061f58db14d89e
_md5_=a7777fb3378b50250d02012456ab594d

View File

@ -2,10 +2,10 @@ DEFINED_PHASES=compile install postinst prepare unpack
DESCRIPTION=utility to manage compilers DESCRIPTION=utility to manage compilers
EAPI=5 EAPI=5
HOMEPAGE=https://gitweb.gentoo.org/proj/gcc-config.git/ HOMEPAGE=https://gitweb.gentoo.org/proj/gcc-config.git/
KEYWORDS=~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd KEYWORDS=alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~x86-fbsd
LICENSE=GPL-2 LICENSE=GPL-2
RDEPEND=>=sys-apps/gentoo-functions-0.10 RDEPEND=>=sys-apps/gentoo-functions-0.10
SLOT=0 SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.8.tar.xz https://dev.gentoo.org/~vapier/dist/gcc-config-1.8.tar.xz SRC_URI=mirror://gentoo/gcc-config-1.8.tar.xz https://dev.gentoo.org/~vapier/dist/gcc-config-1.8.tar.xz
_eclasses_=desktop b1d22ac8bdd4679ab79c71aca235009d epatch a1bf4756dba418a7238f3be0cb010c54 estack 43ddf5aaffa7a8d0482df54d25a66a1f eutils 6e6c2737b59a4b982de6fb3ecefd87f8 ltprune 08f9e1d9ee0af8f5d9a7854efbcd8c0e multilib b2f01ad412baf81650c23fcf0975fa33 preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs f164325a2cdb5b3ea39311d483988861 unpacker ee2f5086cd7e7b747b061f58db14d89e vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf _eclasses_=desktop b1d22ac8bdd4679ab79c71aca235009d epatch a1bf4756dba418a7238f3be0cb010c54 estack 43ddf5aaffa7a8d0482df54d25a66a1f eutils 6e6c2737b59a4b982de6fb3ecefd87f8 ltprune 08f9e1d9ee0af8f5d9a7854efbcd8c0e multilib b2f01ad412baf81650c23fcf0975fa33 preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs f164325a2cdb5b3ea39311d483988861 unpacker ee2f5086cd7e7b747b061f58db14d89e vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf
_md5_=11f92d1aef4719fb830d0310b4cc8d32 _md5_=f6d2084dc99bff7f3d53d2e39bfeedaa

View File

@ -0,0 +1,11 @@
DEFINED_PHASES=compile install postinst
DESCRIPTION=Utility to manage compilers
EAPI=6
HOMEPAGE=https://gitweb.gentoo.org/proj/gcc-config.git/
KEYWORDS=~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd
LICENSE=GPL-2
RDEPEND=>=sys-apps/gentoo-functions-0.10
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.9.0.tar.xz https://dev.gentoo.org/~dilfridge/distfiles/gcc-config-1.9.0.tar.xz
_eclasses_=desktop b1d22ac8bdd4679ab79c71aca235009d epatch a1bf4756dba418a7238f3be0cb010c54 estack 43ddf5aaffa7a8d0482df54d25a66a1f eutils 6e6c2737b59a4b982de6fb3ecefd87f8 ltprune 08f9e1d9ee0af8f5d9a7854efbcd8c0e multilib b2f01ad412baf81650c23fcf0975fa33 preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs f164325a2cdb5b3ea39311d483988861 vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf
_md5_=edd9d685da1b0dee6db26c875c0c0b77

View File

@ -0,0 +1,11 @@
DEFINED_PHASES=compile install postinst
DESCRIPTION=Utility to manage compilers
EAPI=6
HOMEPAGE=https://gitweb.gentoo.org/proj/gcc-config.git/
KEYWORDS=~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd
LICENSE=GPL-2
RDEPEND=>=sys-apps/gentoo-functions-0.10
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-1.9.1.tar.xz https://dev.gentoo.org/~dilfridge/distfiles/gcc-config-1.9.1.tar.xz
_eclasses_=multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861
_md5_=fa16f4e1ccc7f37fd2e7063f4a12d654

View File

@ -0,0 +1,11 @@
DEFINED_PHASES=compile install postinst
DESCRIPTION=Utility to manage compilers
EAPI=6
HOMEPAGE=https://gitweb.gentoo.org/proj/gcc-config.git/
KEYWORDS=~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd
LICENSE=GPL-2
RDEPEND=>=sys-apps/gentoo-functions-0.10
SLOT=0
SRC_URI=mirror://gentoo/gcc-config-2.0.tar.xz https://dev.gentoo.org/~slyfox/distfiles/gcc-config-2.0.tar.xz
_eclasses_=multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861
_md5_=0ca874c879077f18335b1c87187b77b1

View File

@ -0,0 +1,10 @@
DEFINED_PHASES=compile install postinst unpack
DEPEND=>=dev-vcs/git-1.8.2.1[curl]
DESCRIPTION=Utility to manage compilers
EAPI=6
HOMEPAGE=https://gitweb.gentoo.org/proj/gcc-config.git/
LICENSE=GPL-2
RDEPEND=>=sys-apps/gentoo-functions-0.10
SLOT=0
_eclasses_=git-r3 0d4635eeb5a96cd5315597a47eba25c9 multilib b2f01ad412baf81650c23fcf0975fa33 toolchain-funcs f164325a2cdb5b3ea39311d483988861
_md5_=fa16f4e1ccc7f37fd2e7063f4a12d654

View File

@ -1,103 +0,0 @@
# ChangeLog for sys-devel/gcc-config
# Copyright 1999-2016 Gentoo Foundation; Distributed under the GPL v2
# (auto-generated from git log)
*gcc-config-1.8-r1 (09 Aug 2015)
*gcc-config-1.8 (09 Aug 2015)
*gcc-config-1.7.3 (09 Aug 2015)
*gcc-config-1.7.2 (09 Aug 2015)
*gcc-config-1.7.1 (09 Aug 2015)
*gcc-config-1.7 (09 Aug 2015)
*gcc-config-1.6 (09 Aug 2015)
*gcc-config-1.5.1-r1 (09 Aug 2015)
*gcc-config-1.5.1 (09 Aug 2015)
*gcc-config-1.5-r2 (09 Aug 2015)
*gcc-config-1.5-r1 (09 Aug 2015)
*gcc-config-1.4.1-r1 (09 Aug 2015)
09 Aug 2015; Robin H. Johnson <robbat2@gentoo.org> +files/gcc-config-1.4.1,
+files/gcc-config-1.5, +files/gcc-config-1.5.1,
+files/gcc-config-1.8-dont_source_functions_sh_from_etc_initd.patch,
+files/wrapper-1.5.1.c, +files/wrapper-1.5.2.c, +gcc-config-1.4.1-r1.ebuild,
+gcc-config-1.5-r1.ebuild, +gcc-config-1.5-r2.ebuild,
+gcc-config-1.5.1.ebuild, +gcc-config-1.5.1-r1.ebuild,
+gcc-config-1.6.ebuild, +gcc-config-1.7.ebuild, +gcc-config-1.7.1.ebuild,
+gcc-config-1.7.2.ebuild, +gcc-config-1.7.3.ebuild, +gcc-config-1.8.ebuild,
+gcc-config-1.8-r1.ebuild, +metadata.xml:
proj/gentoo: Initial commit
This commit represents a new era for Gentoo:
Storing the gentoo-x86 tree in Git, as converted from CVS.
This commit is the start of the NEW history.
Any historical data is intended to be grafted onto this point.
Creation process:
1. Take final CVS checkout snapshot
2. Remove ALL ChangeLog* files
3. Transform all Manifests to thin
4. Remove empty Manifests
5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
5.1. Do not touch files with -kb/-ko keyword flags.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration
tests
X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this
project
X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo
developer, wrote Git features for the migration
X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve
cvs2svn
X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014
work in migration
X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
X-Thanks: All of other Gentoo developers - many ideas and lots of paint on
the bikeshed
09 Aug 2015; Ulrich Müller <ulm@gentoo.org> files/gcc-config-1.5,
files/gcc-config-1.5.1:
[QA] Remove executable bit from files, bug 550434.
24 Aug 2015; Justin Lecher <jlec@gentoo.org> gcc-config-1.4.1-r1.ebuild,
gcc-config-1.5-r1.ebuild, gcc-config-1.5-r2.ebuild, gcc-config-1.5.1.ebuild,
gcc-config-1.5.1-r1.ebuild, gcc-config-1.6.ebuild, gcc-config-1.7.ebuild,
gcc-config-1.7.1.ebuild, gcc-config-1.7.2.ebuild, gcc-config-1.7.3.ebuild,
gcc-config-1.8.ebuild, gcc-config-1.8-r1.ebuild, metadata.xml:
Use https by default
Convert all URLs for sites supporting encrypted connections from http to
https
Signed-off-by: Justin Lecher <jlec@gentoo.org>
24 Aug 2015; Justin Lecher <jlec@gentoo.org> gcc-config-1.6.ebuild,
gcc-config-1.7.ebuild, gcc-config-1.7.1.ebuild, gcc-config-1.7.2.ebuild:
Use https by default
Convert all URLs for sites supporting encrypted connections from http to
https
Signed-off-by: Justin Lecher <jlec@gentoo.org>
24 Aug 2015; Mike Gilbert <floppym@gentoo.org> metadata.xml:
Revert DOCTYPE SYSTEM https changes in metadata.xml
repoman does not yet accept the https version.
This partially reverts eaaface92ee81f30a6ac66fe7acbcc42c00dc450.
Bug: https://bugs.gentoo.org/552720
24 Jan 2016; Michał Górny <mgorny@gentoo.org> metadata.xml:
Replace all herds with appropriate projects (GLEP 67)
Replace all uses of herd with appropriate project maintainers, or no
maintainers in case of herds requested to be disbanded.
24 Jan 2016; Michał Górny <mgorny@gentoo.org> metadata.xml:
Set appropriate maintainer types in metadata.xml (GLEP 67)
28 Jan 2016; Michał Górny <mgorny@gentoo.org> gcc-config-1.8-r1.ebuild:
Add appropriate gentoo-functions dep

View File

@ -1,27 +1,4 @@
AUX gcc-config-1.4.1 21603 SHA256 ae73b49f2389d8fd728ec1b6f9a3f91ba919aa4c38dabe7c50ef532c1d6bc479 SHA512 7e0d76e4dcad83ec9315e909b98377142148c9e7f000c4ad3fb3d23dea150db5e287d4aa360f836f67a072edc11a317e14c4ac51542b0a4267095c08658d57fd WHIRLPOOL 93b33db3e8f5e81cd84b53d51cc25ba206f2b3ee317e521f2422530657e48f0c9f383cc49c4f5ff85f838afabb04820a2f49cbea0e032d8504a8544fdf162a05 DIST gcc-config-1.8.tar.xz 15020 BLAKE2B 97debbef946b0c14b4ecc0bc5b2217566b43f21318970b235b2919bd1e1ea41aff66aebb0ed73db2382f8312268327eb6844139bdeae7aba75771c699a5043df SHA512 3b84af2d961a0527834759e047330dbab7bac0ff3d6aae103f14fca2d44bd612bd4a1005649e8b4198036231ed8a8319fb13326b4d2c40474826cf53f7bc0826
AUX gcc-config-1.5 19976 SHA256 319fdb23f723d8156c7aaf98cee2dd064e621a26a546839df03cf19174017654 SHA512 abd08b9a61d902eae7864d1972505d6952674e8b429e3637da8637e85993808d0a9591100aa394aa6dfbdbb7a319d86dec63608e478b265b9828f88dced3564e WHIRLPOOL d80bfda142727596e99b2621e678022f3a14b4bbf714ceb7efa6bad01e70035a41ea4f0e45aa3f6fbc4813ee41e8020adee0ab988b4917b757199bda2e7c70d3 DIST gcc-config-1.9.0.tar.xz 17468 BLAKE2B 3e0b6faff3ac582fc0fed921958ff849ba8b1be5b0c25609790cd56400c05371e47ecd955b7bc79362179a559def94463a3667858a70d6edd283d2c064ff0734 SHA512 658c8ce26fdddd6f3e519310001cdf0f8fb01226df2d575fec81b39c083613ef0675024b79b285fab89a930c4ada7a1aef04433eb21947b4e9c0a9cb12f8fabc
AUX gcc-config-1.5.1 20907 SHA256 495e8a6919a519ce08f20d7e34bac4a1237bde68f9fe0c43f47ac2c8450b0a60 SHA512 9bfb06825816bbc4927bd5e9cb267cd028a77ce095089352f6b26d8b771e122354c94dba3f1e00cc8c4e37e321e54e965a3dda82467b3214c5a144fff39f6e23 WHIRLPOOL 566d472a78b8b87c57023886373915c96f46d08c5971059c152970acfc02517cd8ada43818539f5f1c142df0a50d577810b1ea4a09f24e627ab7f9cd18b79391 DIST gcc-config-1.9.1.tar.xz 17628 BLAKE2B 8fce87038d9aed625d833327a7e335c311aeb04d44a07a7738def235333a9428664314ddd4da3a1d59d030136734377a838f25ff411b249aba25ea22a88460ee SHA512 6c518c266698277a1ad00a1624fc1ada15ed7096d05a520700c60a27180885169bd2051fb6869e6a958503c8eebc1cd6c211098501c5fe258ee11d96c6a0b069
AUX gcc-config-1.8-dont_source_functions_sh_from_etc_initd.patch 1427 SHA256 2c09499fd1f9425d8b4c903cdc716ff22d6ea4049bfb5b6e497de01f4c148d5b SHA512 f9ba9341aebbeabfd8fa283b9bf30ad6907398c44a2d6ff113a47b2599a90f5cb0da1947675c0a27881bf1ba8138979b0f4918cbc175c64d6e6f754d6e7d6b9c WHIRLPOOL 79273ee0281ffb6c79c4dd77da3c016b9f867657dd879eb35502ecc393d0bc2d66677b48010ac297c11cccfb4654471c71c82e7ba26c49b4e2794a5b10536cb8 DIST gcc-config-2.0.tar.xz 15344 BLAKE2B 323b1e791b831ee610a375fc03532ab89e31b1f74586742c1d37dcea9c7853cf4ebfef875fc2bfa273cfc1555a33b9f04a1e58c850133cddee765dd769bdb189 SHA512 67c8cfc7e031d4a88191c04495c97f46e90e2d3fce4cd1afc29f142fad9414218768d3c6de4bd8bb7d9baa39a20b17bb28a503b0d05d6db2003b767546317a30
AUX wrapper-1.5.1.c 9678 SHA256 419844bda0107e92e4d5375500757324c127a3aae738a0f2e3868829887127af SHA512 5fdcfe992580b374c7b9e3cf118dc1895ed980f73643aea70fdfc23ad16176d624de2e3d110b37d39d93c21fd6a772baa73c9705ccec58375ffc61479cdf7949 WHIRLPOOL 5176e6e1320ee7d530e714dc50d04780646d602e4954b8c51d0ff0e088b090bb7c22a56c74187f62f44c83d4ce81ebe8e83f0964e71529f6c61d8189eb7f9388
AUX wrapper-1.5.2.c 7911 SHA256 2d4b1562cd8d228d4efa06a5ce5f1dd5503a623d2406565d52432642bba5db4b SHA512 818523f40968f381317c26453368534c7b7534bf4ca40dd6c6c287435d772c03a83af01f5fde4ffe5003be649f1d1fae82f319ed2f7983f0b99b7336ee7462da WHIRLPOOL 6b7aaba1bcd20194e8ba86a97d0ca45739b5947bde0ecb96a4fbd9e861cc8904d2d7e27d1daa8c5c0a4269540ac3d58c3babb6a23f8f078cf6ef612d9196559b
DIST gcc-config-1.6.tar.xz 14232 SHA256 ca6a94d685a60e9ae5b8ff32c3173929848455a123233709ca791e72b640bf77 SHA512 d44256f67ed398c997cd8ce7f0b6e9bf5e602ee214deef3f7d53affd27693230526645627f00126e8b3492e5b1c7360d771b6138fb7cbc8145467c3a7ba0839d WHIRLPOOL 1a612ee1f652b0b73b4110e956c1559a56083fb4d4813f63ab374c6bba071954a13710555ffa93eec3dee94257d8891baa86989a41c0b72f3aef0edfe43f2f02
DIST gcc-config-1.7.1.tar.xz 14708 SHA256 5d69148957bc48db2bf107558724d8c40701f8d27d1cfc7636f02353e9c2f79a SHA512 ed4f8c188679969c3428409813c1e78ca9fbf86f81f9a3e42489eecffc5857352b7d1fc90433679890b7c89da458ff1e2607e7a6f3578c6f65d1beaf71194d00 WHIRLPOOL 5f96a64dad21ae755270000adc1933dc5d2ccd28f5e49ecd96c36da266b2d64cbf3772045e529ffe6fc15381de26757c7ef742093262593a05608d52f8a97a78
DIST gcc-config-1.7.2.tar.xz 15004 SHA256 2d235dfc1ff749b46ae8342dc3d30d5628f22eecd1ea665d16f90e82da88e899 SHA512 3bc2964fa9ede507a778787434e3aa64ef691616063d7d55020878eab9a8bf08ed5a6530dd36e15348927db9ce2b7fe22fa2aeb0039549a6e69ca895c087169b WHIRLPOOL 2692bd8289ae224a3011fbef94e45e7b903138cfa11dad4e27eca7a239f67a682def5563745bdebdfe05359d909d3f49142b23bc13141d4fa8528085c3a19299
DIST gcc-config-1.7.3.tar.xz 15088 SHA256 2c6cca69a028f157dc54e19ea10efc240e0d26824cd223b22c294c003ce9325e SHA512 88b585787b5ad79017b27e68dbca6b5de96784582ee657d18562b1994bc1c27a6609b3dfcbf30f39a02b0b2886a289a1ddc955281fc60fe974436d13aa685908 WHIRLPOOL a9a45b489e34756da66e4597ba9f4fa061b5431a82310317237293a0c519c72906d14d3c72b76483c1c674bf779ac606cf85f22a5e4a4065dd92b1b91215461a
DIST gcc-config-1.7.tar.xz 14584 SHA256 b704cb3b98c7a8f478dcc932ae7e4ac4f4f8a847bebe35f97dc45fa7a29268ee SHA512 4ab78c662feab59bc55e40b9dc63b967c1551b6d084638e2a16866488510e7c34e0b30a0bedaeae9dd806c77f79d1e31ccb834c6112794e7fbb557756f59c43d WHIRLPOOL 50415916834dc9d097e78afbc09a32a023e3542dd6ebcf60cd6c12d0e8fc484a6d63f821c9d3acf958fdaf5ce209976521bf22d3adcd5d20fa522f1f2fd38bdb
DIST gcc-config-1.8.tar.xz 15020 SHA256 2453e2a07521b12267ca62b9b860eb2d2bc606cad0f29bf42a1c9543673f5a1b SHA512 3b84af2d961a0527834759e047330dbab7bac0ff3d6aae103f14fca2d44bd612bd4a1005649e8b4198036231ed8a8319fb13326b4d2c40474826cf53f7bc0826 WHIRLPOOL 4899bc1da43a158cc486022f68661e5318db7e4e83afdb5d892fc7ce5098a4bdb059dbab3c50e632901e577cd8760b2386da3ee24f5e944db12d3e246d9c26b6
EBUILD gcc-config-1.4.1-r1.ebuild 1530 SHA256 6f2a971007c8ff200489be4966c5c959f7f975b24c92aec28560bfb7b4cd228a SHA512 096a2f45cdca30f5602f29da20e90e7f38bf1823a2917a117ca2147552ad7f65eec37bd3ee1df162f04e631ae32bf8da91bd7455bebad579046854e49493bc9a WHIRLPOOL 2b120b2ad5f78d2d77576be4cc2410af63f283c69392773aaaddfb755efb5be78e57b44707aa408874af3c6f807110ae8ca1f42682c4c32e915fb2065dd225ad
EBUILD gcc-config-1.5-r1.ebuild 1533 SHA256 76c2b3065bdd8e791faadb2a57c226c6d6dd18042d44749d2a22516249df374a SHA512 0c8652628a5956c5b035b422b8424c842f4754a2533e69bb7b858ad51bbdb723b189f05b54a9b9c98749c9e7053a7c43a7fe22ad543ce27cdf2c2cdd5518e9e7 WHIRLPOOL d09f38bba8bfdf43ad1e59c02bbd7f7b229a9224a2b861fdc95e67c98ca06063a7f6e95e2bba02c3dc8357cd3e99a670b8bf1793cd6d8b652b024881346e12b1
EBUILD gcc-config-1.5-r2.ebuild 1521 SHA256 1e5a811da6ae3c75423a7539f7b34637172056d901bb74bb2255e7efd99f3bc5 SHA512 ac4c3a13714388d0de093ad52d88635a715b0f0b151952f38119a638da768d4fbb11426c625190e07c3104754bc4cc3c53cb04ef416f800a27166584a2d6f882 WHIRLPOOL c669aec1b42239202990f04c59e4fa87eb863fd08c22256de02f658f6bad6fbcc6d2bc77a9f09a4466879ba5fda971663439a0b4fa5cb18be5bd3e7fb19d44a8
EBUILD gcc-config-1.5.1-r1.ebuild 1533 SHA256 ffd3bdb00b909fcc29b742110cd330966877e56c365a756cae8613adca0b536a SHA512 b7582ef8a962b820ce775b04fec0ebaabfb315fc516e831eb6c7e561b4dbbdd5076f68e188e34402fe524adad5133346b58723fd2973ba085a9bfb988e1adc57 WHIRLPOOL a5851c6cacee5c4a0be5f049576a15cdb8fc551760268ab036e7b53d0980a6b82c9673a15a24ae6224d35db00a33143b5a21c3c7653a2e67dcc565fbe656efd6
EBUILD gcc-config-1.5.1.ebuild 1533 SHA256 ffd3bdb00b909fcc29b742110cd330966877e56c365a756cae8613adca0b536a SHA512 b7582ef8a962b820ce775b04fec0ebaabfb315fc516e831eb6c7e561b4dbbdd5076f68e188e34402fe524adad5133346b58723fd2973ba085a9bfb988e1adc57 WHIRLPOOL a5851c6cacee5c4a0be5f049576a15cdb8fc551760268ab036e7b53d0980a6b82c9673a15a24ae6224d35db00a33143b5a21c3c7653a2e67dcc565fbe656efd6
EBUILD gcc-config-1.6.ebuild 1092 SHA256 230732c778c1e3b85d6237f2926e80054743cb0a2e6372030043e8c68c513999 SHA512 8e738e006989b458fb40f1df25fed730dd9c687fe6b19f37f146e102a258c261ef7111488bffa9572c8758130384c7e603058c061ff0c4c850809f438770e3fc WHIRLPOOL 32dfa5ca0b79e41adcd64c1d4714660fb923d1372e4e40d5e1818b62058554c7ec2cf6d0ee01643bed340d9af420750b30e7c59dfead9b4d96c9104881acb0d5
EBUILD gcc-config-1.7.1.ebuild 1116 SHA256 a93d4f99add60e1c8334ea5f4e8e19c2c720c0acee2cafe5bc5a398449bf74de SHA512 9144dfa5c4ea0bc625cc94df309c67557e1aa78826071391c449751602a9f3ffd22a65690603113a017af05d81350e7e44aa43a4daad9c35b950b3115e2559d6 WHIRLPOOL 1f5577dae12aad31cd613ecc72e2253f1dfb9fbe6d80540234b98357840bc0ab2849923d5d6e661880478bcae8f3847938b50700ef07549cb92aac7d70bf7f28
EBUILD gcc-config-1.7.2.ebuild 1116 SHA256 a93d4f99add60e1c8334ea5f4e8e19c2c720c0acee2cafe5bc5a398449bf74de SHA512 9144dfa5c4ea0bc625cc94df309c67557e1aa78826071391c449751602a9f3ffd22a65690603113a017af05d81350e7e44aa43a4daad9c35b950b3115e2559d6 WHIRLPOOL 1f5577dae12aad31cd613ecc72e2253f1dfb9fbe6d80540234b98357840bc0ab2849923d5d6e661880478bcae8f3847938b50700ef07549cb92aac7d70bf7f28
EBUILD gcc-config-1.7.3.ebuild 1113 SHA256 0e4020fbb4be8eacc0e855ec9915730356ad18da8dc863da3841617141559abc SHA512 aca2196cfa959810287029a9259e57cb651bce569e09389516ec8b50f9e8be79a13baad5956eb3ae9c0abaf37153309bfccbb8f16d0a67fbefa8028494c32d2a WHIRLPOOL bf8f5868d65b1cc41bdb6232e611df6d9c0053a05733b227a6eaba03fc027bf96959005532f5d1ae72fd16161d382998b52b8133d081e086642076f26cee067b
EBUILD gcc-config-1.7.ebuild 1116 SHA256 a93d4f99add60e1c8334ea5f4e8e19c2c720c0acee2cafe5bc5a398449bf74de SHA512 9144dfa5c4ea0bc625cc94df309c67557e1aa78826071391c449751602a9f3ffd22a65690603113a017af05d81350e7e44aa43a4daad9c35b950b3115e2559d6 WHIRLPOOL 1f5577dae12aad31cd613ecc72e2253f1dfb9fbe6d80540234b98357840bc0ab2849923d5d6e661880478bcae8f3847938b50700ef07549cb92aac7d70bf7f28
EBUILD gcc-config-1.8-r1.ebuild 1277 SHA256 01f51695409c53a8b1ca4e638a4a085a113c66887c9df319f3fe18bd2ef132e7 SHA512 89b8e3c6730832fd2356895c5c07754df8b7e1ea80b93bc77224cff2fbd9c7e8bdb797726c8bd12ca1b62368833a81274e29edabf5c2ac6e74328e476c77ae3a WHIRLPOOL 6c546972a2d71a31f7495a9fb254bc5834b8ea05b827a9a8514b37cb7d96b22680bb2244d8d06a337f6cef5875d5c93cebd3bad8317f8aab5e638f061fea42fe
EBUILD gcc-config-1.8.ebuild 1126 SHA256 d56cffb7d259928bdbe8aa733de3eb480c4550bd52e36366eec58b84957b108e SHA512 eeffb1d0dafeda47bc819849085e47fdaf686d4ffa7d45c6b0c22141f759f2a91ed8732be45a8109a4756c8d8d8e93a1beee8fe08a1d4a8d4ef62a4217a7f83d WHIRLPOOL d4cdb2a605fe012436fbab83a839d84d7a9a2a5b199aba3167b738bc89811e2353328dc75e486c9072cff1abf1ece28065457699b517fb89f023e71df1e2cee7
MISC ChangeLog 4164 SHA256 05110b92cb3a6873444eeb2558665720b9e7c6f8db8b56b4957f438358eb58ae SHA512 6cbde214b24d042d8f03ac46e9742de18cf829a0cfdc11e957ae4ec1e12c751a72f876a7fc16345e0b92c5769adcb06ab3497677a8623c2b5ef55c0474c69265 WHIRLPOOL 9425d14b020b646ae71321d700b606d5b575360d4ac73ea9ef63eaab6bf80bda438a93ff7b2dbeed3c70c66aa52d9a51b22f94be27dce81b488c79e509810e6e
MISC ChangeLog-2015 40131 SHA256 d3bbaa19b1403c570fe5de4115ed77500e7c8d4c9ae6652b164985bdf6cee282 SHA512 9942910698fb69efd3c2e0e4ec3ca7ed6468e04010c5718b6e01a43d8e215f56327ed5d66a63df870ba56651e3166db2b417dad73f94f47b94b3f54ca1066d69 WHIRLPOOL 7487235f32eca293af3914e34575945fe6c8b87d371eef1c474231dbc27b768cb867decd7877f489cd072ecc909cb0c93a4c98a358243f34cd9e64b5dd0dbdab
MISC metadata.xml 257 SHA256 fcb691c3299a07a5fe4f936baa5aa146b8aa3cb9491ba88fd12547cb540b02c2 SHA512 fd85d9cf15f6b7db96e4d184e32ae6f1503a5b70cb4cb1ce930ba13a1d5d4c4b24971781e95b7f3f9ead58b31760f84c368bc6fa2a793b4b5baf78259b047ff1 WHIRLPOOL 62b62e3e5489b8983ddd7bfc6017411d5e02f9710763206baa84b826388c8685fe7bdc0bb6a76c029e73ae4c160e9af6c8544406dc70a203c7c3d65d4aa15400

View File

@ -1,801 +0,0 @@
#!/bin/bash
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
trap ":" INT QUIT TSTP
argv0=${0##*/}
source /etc/init.d/functions.sh || {
echo "${argv0}: Could not source /etc/init.d/functions.sh!"
exit 1
}
esyslog() { :; }
umask 022
# *BSD are plain stupid ... copy a GNU extension but don't just copy it,
# change it so it works differently. Wish Darwin did selective evolution
# on software developers.
SED=$(type -P gsed)
SED=${SED:-$(type -P sed)}
GENTOO_LIBDIR="@GENTOO_LIBDIR@"
[[ ${GENTOO_LIBDIR} == @*@ ]] && GENTOO_LIBDIR="lib"
usage() {
cat << "USAGE_END"
Usage: gcc-config [options] [CC Profile]
Change the current cc/gcc profile, or give info about profiles.
Options:
-C, --nocolor Disable color output
-O, --use-old Use the old profile if one was selected.
-f, --force Make sure all config files are regenerated.
-P, --use-portage-chost Only set to given profile if its CHOST is the
same as that set for portage in /etc/make.conf
(or one of other portage config files...).
-c, --get-current-profile Print current used gcc profile.
-l, --list-profiles Print a list of available profiles.
-S, --split-profile Split profiles into their components
-E, --print-environ Print environment that can be used to setup the
current gcc profile, or a specified one.
-B, --get-bin-path Print path where binaries of the given/current
profile are located.
-L, --get-lib-path Print path where libraries of the given/current
profile are located.
-X, --get-stdcxx-incdir Print path where g++ include files of the
given/current profile are located.
Profile names are of the form: <CHOST>-<gcc version>
For example: i686-pc-linux-gnu-3.2.1
USAGE_END
exit $1
}
[[ $# -lt 1 ]] && usage 1
try_real_hard_to_find_CHOST() {
#
# First we read make.conf
#
local varname=${1:-CHOST}
local conf=${ROOT}/etc/make.conf
local ret=$(source "${conf}" 2>/dev/null ; echo ${!varname})
if [[ -z ${ret} ]] ; then
# newer portage supports spaces between the var and =
# CHOST = "this-is-retarded"
ret=$(eval $(
sed -n \
-e 's:[[:space:]]::g' \
-e "/^${varname}=/p" \
"${conf}"
) ; echo ${!varname}
)
fi
if [[ -n ${ret} ]] ; then
echo ${ret}
return 0
fi
#
# Then we try /etc/env.d/gcc/config-${CTARGET}
#
if [[ -s ${ROOT}/etc/env.d/gcc/config-${CTARGET} ]] ; then
ret=$(split_gcc_ver $(eval $(<"${ROOT}"/etc/env.d/gcc/config-${CTARGET}) ; echo ${CURRENT}))
echo ${ret% *}
fi
}
get_real_chost() {
[[ -n ${REAL_CHOST} ]] && return 0
# shortcut for switching compilers in a cross chroot
if [[ -n ${CHOST} && ${ROOT} != "/" ]] ; then
REAL_CHOST=${CHOST}
return 0
fi
# make sure portage isnt broken
if python -V &>/dev/null ; then
export REAL_CHOST=$(env -i portageq envvar CHOST 2>/dev/null)
else
ewarn "Python seems to be broken, attempting to locate CHOST ourselves ..."
export REAL_CHOST=$(try_real_hard_to_find_CHOST)
fi
if [[ -z ${REAL_CHOST} ]] ; then
eerror "${argv0}: Could not get portage CHOST!"
eerror "${argv0}: You should verify that CHOST is set in one of these places:"
eerror "${argv0}: - ${ROOT}/etc/make.conf"
eerror "${argv0}: - active environment"
exit 1
fi
}
is_cross_compiler() {
get_real_chost
[[ ${CC_COMP/${REAL_CHOST}} == ${CC_COMP} ]]
}
# bool files_exists(search_path, files)
# Return shell true if the specified files exist.
# Files with relative paths are searched for in search_path.
# Both lists are : delimited.
files_exist() {
local p f ret old_IFS
local paths=$1 files=$2
old_IFS=${IFS}
export IFS=":"
ret=0
for f in ${files} ; do
if [[ ${f} == /* ]] ; then
[[ ! -f ${f} ]] && ret=1 && break
else
# make sure the file exists in at least
# one of the specified paths
ret=1
for p in ${paths} ; do
[[ -f ${p}/${f} ]] && ret=0 && break
done
[[ ${ret} == 1 ]] && break
fi
done
export IFS=${old_IFS}
if [[ ${ret} == 1 ]] ; then
ewarn "Could not locate '${f}' in '${paths}'"
fi
return ${ret}
}
switch_profile() {
local MY_LDPATH=
local GCC_PROFILES=
local OLD_CC_COMP=
local GCC_PATH=
if [[ $(id -u) != "0" ]] ; then
eerror "${argv0}: Must be root."
exit 1
fi
if is_cross_compiler ; then
ebegin "Switching cross-compiler to ${CC_COMP}"
else
ebegin "Switching native-compiler to ${CC_COMP}"
fi
if ! is_cross_compiler ; then
# Order our profiles to have the default first ...
# We do this so that we can have them ordered with default
# first in /etc/ld.so.conf, as the logical is that all
# compilers for default CHOST will be used to compile stuff,
# and thus we want all their lib paths in /etc/ld.so.conf ...
get_real_chost
GCC_PROFILES=$(LC_ALL="C" ls -r ${GCC_ENV_D}/${REAL_CHOST}-*)
GCC_PROFILES="${GCC_ENV_D}/${CC_COMP} ${GCC_PROFILES}"
# Extract all LDPATH's for our CHOST
MY_LDPATH=""
for x in ${GCC_PROFILES} ; do
if [[ -f ${x} ]] ; then
LDPATH=$(source "${x}"; echo ${LDPATH})
# Handle LDPATH's that have multiple directories
local old_IFS=${IFS}
export IFS=":"
local sub_ldpath=
for sub_ldpath in ${LDPATH} ; do
if [[ -d ${sub_ldpath} ]] ; then
if [[ ${MY_LDPATH/:${sub_ldpath}} == ${MY_LDPATH} ]] ; then
MY_LDPATH="${MY_LDPATH}:${sub_ldpath}"
fi
fi
done
export IFS=${old_IFS}
fi
done
MY_LDPATH="${MY_LDPATH:1}" # trim leading :
fi
# Translate old PATH/ROOTPATH to GCC_PATH
cp -p "${GCC_ENV_D}/${CC_COMP}" "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" || return 1
GCC_PATH=$(
unset GCC_PATH PATH ROOTPATH
source "${GCC_ENV_D}/${CC_COMP}"
echo ${GCC_PATH:-${PATH:-${ROOTPATH}}}
)
${SED} -i \
-e '/^PATH=/d' \
-e '/^ROOTPATH=/d' \
-e '/^GCC_PATH=/d' \
"${GCC_ENV_D}/${CC_COMP}" || return 1
echo "GCC_PATH=\"${GCC_PATH}\"" >> "${GCC_ENV_D}/${CC_COMP}" || return 1
touch -r "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" "${GCC_ENV_D}/${CC_COMP}" || return 1
rm -f "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" || return 1
# Setup things properly again for this profile
unset GCC_SPECS LDPATH
source "${GCC_ENV_D}/${CC_COMP}"
OLD_CC_COMP=$(get_current_profile)
# What kind of env.d entry are we going to generate ?
if is_cross_compiler ; then
echo "PATH=\"${GCC_PATH}\"" > "${ENV_D}/05gcc-${CTARGET}"
echo "ROOTPATH=\"${GCC_PATH}\"" >> "${ENV_D}/05gcc-${CTARGET}"
echo "CURRENT=${CC_COMP}" > "${GCC_ENV_D}/config-${CTARGET}"
else
# Pass all by default
awk '!/^(STDCXX_INCDIR|LDPATH|CC|CXX|CTARGET|GCCBITS|GCC_SPECS|GCC_PATH)=/ {print $0}' \
"${GCC_ENV_D}/${CC_COMP}" > "${ENV_D}/05gcc-${CTARGET}"
echo "LDPATH=\"${MY_LDPATH}\"" >> "${ENV_D}/05gcc-${CTARGET}"
echo "PATH=\"${GCC_PATH}\"" >> "${ENV_D}/05gcc-${CTARGET}"
echo "ROOTPATH=\"${GCC_PATH}\"" >> "${ENV_D}/05gcc-${CTARGET}"
if [[ -n ${GCC_SPECS} ]] ; then
if files_exist ${MY_LDPATH} ${GCC_SPECS} ; then
echo "GCC_SPECS=\"${GCC_SPECS}\"" >> "${ENV_D}/05gcc-${CTARGET}"
else
echo
ewarn "Your GCC spec configurations are broken."
ewarn "Please re-emerge gcc."
echo
fi
else
# People need to rebuild their gcc or setting GCC_SPECS to
# "" will cause issues again :(
if [[ ${ROOT} != "/" ]] ; then
echo "GCC_SPECS=\"\"" >> "${ENV_D}/05gcc-${CTARGET}"
else
if ! GCC_SPECS="" /usr/bin/gcc -v &>/dev/null ; then
echo
ewarn "Your gcc has a bug with GCC_SPECS."
ewarn "Please re-emerge gcc."
ewarn "http://bugs.gentoo.org/68395"
echo
else
echo "GCC_SPECS=\"\"" >> "${ENV_D}/05gcc-${CTARGET}"
fi
fi
fi
echo "CURRENT=${CC_COMP}" > "${GCC_ENV_D}/config-${CTARGET}"
# Help out the gcc wrapper
rm -f "${GCC_ENV_D}/NATIVE" "${GCC_ENV_D}/.NATIVE"
ln -sf ${CC_COMP} "${GCC_ENV_D}/.NATIVE"
# Punt old files
rm -f "${ENV_D}/05gcc"
rm -f "${ENV_D}/05gcc-${CTARGET}"-*
rm -f "${GCC_ENV_D}/config"
rm -f "${GCC_ENV_D}/config-${CTARGET}"-*
fi
# Find the bin wrapper
local wrapper
for wrapper in ${GENTOO_LIBDIR} lib lib64 lib32 lib ; do
wrapper="${ROOT}usr/${wrapper}/misc/gcc-config"
[[ -e ${wrapper} ]] && break
done
# Update the wrappers for this profile
for x in {,${CTARGET}-}{cpp,cc,gcc,c++,g++,f77,g77,gcj,gcjh,gcov,gdc,gdmd,gfortran} ; do
# Obviously don't want to touch native stuff for cross-compilers
[[ ${x} != ${CTARGET}-* ]] && is_cross_compiler && continue
# Make sure we have no stale wrappers
rm -f "${ROOT}/usr/bin/${x}"
[[ ${x:${#x}-3} == "gcc" || ${x:${#x}-3} == "g++" ]] \
&& rm -f "${ROOT}/usr/bin/${x}"{32,64}
# Only install a wrapper if the binary exists ...
# We want to figure out the 'reference file' for each
# wrapper (the binary we're 'wrapping') so that we can
# sync mtimes together. This makes things like ccache
# happy. See Bug #70548 for more info.
local ref
case ${x} in
cc) ref=${ROOT}/${GCC_PATH}/gcc;;
f77) ref=${ROOT}/${GCC_PATH}/g77;;
*) ref=${ROOT}/${GCC_PATH}/${x};;
esac
if [[ -x ${ref} ]] ; then
cp -f "${wrapper}" "${ROOT}/usr/bin/${x}"
touch -r "${ref}" "${ROOT}/usr/bin/${x}"
# Install 32bit and 64bit wrappers if need be
# This should probably get folded back into the wrapper ...
if [[ ${x:${#x}-3} == "gcc" ]] || [[ ${x:${#x}-3} == "g++" ]] ; then
for bits in ${GCCBITS} ; do
cp -f "${wrapper}" "${ROOT}/usr/bin/${x}${bits}"
done
fi
fi
done
# legacy cruft, make sure we dont leave it laying around #143205
rm -f "${ROOT}/usr/bin/${CTARGET}-cc"
# Only install cpp if switching to a native one
if ! is_cross_compiler && [[ ${CTARGET} != *-solaris* ]] ; then
rm -f "${ROOT}/lib/cpp"
cp -f "${wrapper}" "${ROOT}/lib/cpp"
fi
# Relocate random crap
if ! is_cross_compiler ; then
if [[ -e ${ROOT}/usr/${GENTOO_LIBDIR}/pkgconfig/libgcj-${CC_COMP_VERSION}.pc ]] ; then
local mver=${CC_COMP_VERSION:0:3}
for x in "" "-${mver}" ; do
x="${ROOT}/usr/lib/pkgconfig/libgcj${x}.pc"
rm -f "${x}"
ln -s libgcj-${CC_COMP_VERSION}.pc "${x}"
done
fi
fi
# We need to make sure that libgcc_s.so / libunwind.so make it into /lib.
# On many systems (x86/amd64/etc...), this will probably never matter,
# but on other systems (arm/mips/etc...), this is quite critical.
# http://bugs.gentoo.org/60190
#
# The funky move magic is required for proper updating of in-use files.
if ! is_cross_compiler ; then
# Need to cut out extra paths in multilib case and pray the first path
# is the "root" multilib path ... maybe some day change this to use
# `gcc -print-file-name` ...
LDPATH=${LDPATH%%:*}
for multilib in $("${ROOT}/${GCC_PATH}"/gcc -print-multi-lib); do
multiarg=${multilib#*;}
multiarg=${multiarg/@/-}
multilibdir=${multilib%;*}
libdir="lib/"$("${ROOT}/${GCC_PATH}"/gcc ${multiarg} -print-multi-os-directory)
if mkdir -p "${ROOT}/${libdir}"/.gcc.config.new ; then
for gcclib in gcc_s unwind ; do
if [[ -n $(ls "${ROOT}/${LDPATH}/${multilibdir}"/lib${gcclib}.so.* 2>/dev/null) ]]; then
cp -pP "${ROOT}/${LDPATH}/${multilibdir}"/lib${gcclib}.so.* "${ROOT}/${libdir}"/.gcc.config.new/
# no need to sanity remove this as the `mv` should take
# care of it. we also need this step to be completly atomic
# for systems that have even `mv` linked against libgcc_s.so.
# http://bugs.gentoo.org/150257
#rm -f "${ROOT}/${libdir}"/lib${gcclib}.so*
mv -f "${ROOT}/${libdir}"/.gcc.config.new/* "${ROOT}/${libdir}"/
fi
done
rmdir "${ROOT}/${libdir}"/.gcc.config.new
fi
done
unset multilib
unset multilibdir
unset multiarg
unset libdir
fi
if [[ ${ROOT} == "/" ]] && [[ ${OLD_CC_COMP} != ${CC_COMP} || ${FORCE} == "yes" ]] ; then
# in case python is broken ...
if ! env-update ; then
echo ""
ewarn "env-update failed to work properly; making sure ld.so.conf paths"
ewarn "are setup properly. Please rerun gcc-config with the -f option."
echo ""
grep -h ^LDPATH= "${ROOT}"/etc/env.d/05gcc-${CTARGET} \
| sed -e 's:^LDPATH=::' -e 's:"::g' -e 's|:|\n|g' \
>> /etc/ld.so.conf
ldconfig
fi
fi
eend 0
if [[ ${ROOT} == "/" ]] && [[ ${OLD_CC_COMP} != ${CC_COMP} ]] ; then
echo
ewarn "If you intend to use the gcc from the new profile in an already"
ewarn "running shell, please remember to do:"
echo
ewarn " . /etc/profile"
echo
fi
return 0
}
get_current_profile() {
local conf="${GCC_ENV_D}/config"
if [[ ! -f ${conf} ]] ; then
conf="${GCC_ENV_D}/config-${CTARGET}"
elif [[ -n ${CC_COMP} ]] && is_cross_compiler ; then
conf="${conf}-${CC_COMP}"
fi
if [[ ! -f ${conf} ]] ; then
eerror "${argv0}: No gcc profile is active!"
return 1
fi
CURRENT=$(source "${conf}"; echo ${CURRENT})
if [[ -z ${CURRENT} ]] ; then
eerror "${argv0}: No gcc profile is active!"
return 1
elif [[ ! -f ${GCC_ENV_D}/${CURRENT} ]] ; then
eerror "${argv0}: Active gcc profile is invalid!"
return 1
fi
echo "${CURRENT}"
return 0
}
list_profiles() {
local i=0
local filter=
if [[ ${ROOT} != "/" ]] ; then
echo "Using gcc-config info in ${ROOT}"
fi
if [[ ! -f ${GCC_ENV_D}/config-${CTARGET} ]] ; then
if ! is_cross_compiler && [[ -e ${GCC_ENV_D}/config ]] ; then
[[ -w ${GCC_ENV_D}/config ]] && mv ${GCC_ENV_D}/config ${GCC_ENV_D}/config-${CTARGET}
else
eerror "${argv0}: No gcc profile is active; please select one!"
filter=${CTARGET}
fi
fi
eval $(grep -s ^CURRENT= "${GCC_ENV_D}"/config-${CTARGET})
CURRENT_NATIVE=${CURRENT}
local target=
for x in "${GCC_ENV_D}"/* ; do
if [[ -f ${x} ]] && [[ ${x/\/config} == ${x} ]] ; then
CTARGET=$(unset CTARGET; source "${x}"; echo ${CTARGET})
((++i))
[[ -n ${filter} ]] && [[ ${filter} != ${CTARGET:-${REAL_CHOST}} ]] && continue
if [[ ${target} != ${CTARGET} ]] ; then
[[ -n ${target} ]] && echo
target=${CTARGET}
CTARGET=""
fi
x=${x##*/}
if [[ ${x} == ${CURRENT_NATIVE} ]] ; then
x="${x} ${GOOD}*${NORMAL}"
elif [[ -e ${GCC_ENV_D}/config-${target} ]] ; then
source "${GCC_ENV_D}/config-${target}"
[[ ${x} == ${CURRENT} ]] && x="${x} ${HILITE}*${NORMAL}"
fi
echo " [${i}] ${x}"
fi
done
}
print_environ() {
local GCC_PATH=
local ENV_CMD=
local SET_ELEMENT=
GCC_PATH=$(source "${GCC_ENV_D}/${CC_COMP}"; echo ${GCC_PATH:-${PATH}})
case ${SHELL} in
*/csh|*/tcsh)
ENV_CMD="setenv"
SET_ELEMENT=" "
;;
*)
ENV_CMD="export"
SET_ELEMENT="="
;;
esac
(
PATH=${GCC_PATH}:${PATH}
for var in PATH GCC_SPECS ; do
echo "${ENV_CMD} ${var}${SET_ELEMENT}\"${!var}\""
done
)
}
get_bin_path() {
if [[ -e ${GCC_ENV_D}/${CC_COMP} ]] ; then
(
unset PATH GCC_PATH
source "${GCC_ENV_D}/${CC_COMP}"
echo "${GCC_PATH:-${PATH}}"
)
else
echo "no-config"
echo "${GCC_ENV_D}/${CC_COMP} doesnt exist" 1>&2
fi
return 0
}
get_lib_path() {
if [[ -e ${GCC_ENV_D}/${CC_COMP} ]] ; then
(
unset LDPATH
source "${GCC_ENV_D}/${CC_COMP}"
echo "${LDPATH}"
)
else
echo "no-config"
echo "${GCC_ENV_D}/${CC_COMP} doesnt exist" 1>&2
fi
return 0
}
get_stdcxx_incdir() {
# XXX: we should prob scrub this ...
if [[ -e ${GCC_ENV_D}/${CC_COMP} ]] ; then
(
unset LDPATH STDCXX_INCDIR
source "${GCC_ENV_D}/${CC_COMP}"
echo "${LDPATH}/include/${STDCXX_INCDIR}"
)
else
echo "no-config"
echo "${GCC_ENV_D}/${CC_COMP} doesnt exist" 1>&2
fi
return 0
}
split_gcc_ver() {
# Split up the gcc profile into components:
# TARGET-VER[-specs] -> TARGET VER [specs]
# arm-linux-3.3.6 -> arm-linux 3.3.6
# x86_64-linux-4.0.1-pre1234 -> x86_64-linux 4.0.1-pre1234
# sh-linux-3.4.4-hardened -> sh-linux 3.4.4 hardened
#
# So below we will start at the end and run a small state machine ...
# specs [3]
# accept everything
# specs -> version transition [3->2]
# when we find a version component
# version [2]
# accept only version components (see the regex)
# version -> target transition [2->1]
# when we hit a non version component
# target [1]
# accept everything we have left
#
echo "$@" | awk -F- '
function pushit(onme, pushee) {
return (onme == "" ? pushee : pushee"-"onme);
}
{
state=3
targ=""
ver=""
spec=""
for (i=NF; i > 0; --i) {
if (state >= 2) {
if ($i ~ /^(alpha|beta|pre|rc|p)?[[:digit:].]+$/) {
ver=pushit(ver, $i)
state=2
} else if (state == 3)
spec=pushit(spec, $i)
else
state=1
}
if (state == 1)
targ = pushit(targ, $i)
}
if (targ == "") {
if (ver == "") {
ver=spec
spec=""
}
targ=ver
ver=""
}
print targ " " ver (spec != "" ? " " spec : "")
}'
}
chop_gcc_ver_spec() {
local splitTED=$(split_gcc_ver $@) # target ver spec
splitTED=${splitTED#* } # ver spec
echo ${splitTED/ /-} # ver-spec
}
SET_X=false
NEED_ACTION="yes"
DOIT="switch_profile"
CHECK_CHOST="no"
FORCE="no"
CC_COMP=
[[ -z ${ROOT} ]] && ROOT="/"
[[ ${ROOT:0-1} != "/" ]] && ROOT="${ROOT}/"
ENV_D="${ROOT}etc/env.d"
GCC_ENV_D="${ENV_D}/gcc"
for x in "$@" ; do
case "${x}" in
# Only use specified compiler if one is not already selected.
-O|--use-old)
CTARGET=${CTARGET:-$(try_real_hard_to_find_CHOST)}
if get_current_profile &>/dev/null ; then
CC_COMP=$(get_current_profile)
else
eerror "No profile selected, unable to utilize --use-old"
exit 1
fi
;;
-f|--force)
FORCE="yes"
;;
-P|--use-portage-chost)
CHECK_CHOST="yes"
;;
-c|--get-current-profile)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_current_profile"
fi
;;
-l|--list-profiles)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="list_profiles"
fi
;;
-S|--split-profile)
if [[ ( $1 != "-S" && $1 != "--split-profile" ) || $# -eq 1 ]] ; then
usage 1
fi
shift # push -S out
for x in "$@" ; do
split_gcc_ver ${x}
done
exit 0
;;
-E|--print-environ)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="print_environ"
fi
;;
-B|--get-bin-path)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_bin_path"
fi
;;
-L|--get-lib-path)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_lib_path"
fi
;;
-X|--get-stdcxx-incdir)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_stdcxx_incdir"
fi
;;
-x|--debug)
SET_X=true
;;
-C|--nocolor)
# nothing to do; functions.sh parsed this for us
;;
-h|--help)
usage 0
;;
-V|--version)
rcsfile="$RCSfile: gcc-config-1.4.1,v $"
rcsfile=${rcsfile#: }
rcsfile=${rcsfile%,v*}
cvsrev="$Revision: 1.12 $"
cvsrev=${cvsrev#: }
cvsdate="$Date: 2011/12/07 05:42:19 $"
cvsdate=${cvsdate#: }
echo "${rcsfile} (r${cvsrev% *} @ ${cvsdate% *})"
exit 0
;;
-*)
eerror "${argv0}: Invalid switch! Run ${argv0} without parameters for help."
exit 1
;;
*)
${SET_X} && set -x
if [[ -z ${CC_COMP} ]] ; then
if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
# User gave us a # representing the profile
i=1
for y in "${GCC_ENV_D}"/* ; do
[[ -f ${y} ]] || continue
[[ ${y/\/config} != ${y} ]] && continue
if [[ -f ${y} ]] && [[ ${x} == ${i} ]] ; then
CC_COMP=${y##*/}
break
fi
((++i))
done
else
# User gave us a full HOST-gccver
x=${x##*/}
if [[ ${DOIT} == "get_current_profile" && -z $(ls "${GCC_ENV_D}"/${x}-* 2>/dev/null) ]] || \
[[ ${DOIT} != "get_current_profile" && ! -f ${GCC_ENV_D}/${x} ]]
then
# Maybe they just gave us a gccver ...
get_real_chost
if [[ -f ${GCC_ENV_D}/${REAL_CHOST}-${x} ]] ; then
x=${REAL_CHOST}-${x}
else
eerror "${argv0}: Could not locate '$x' in '${GCC_ENV_D}/' !"
exit 1
fi
fi
CC_COMP=${x}
fi
else
eerror "${argv0}: Too many arguments! Run ${argv0} without parameters for help."
exit 1
fi
;;
esac
done
${SET_X} && set -x
get_real_chost
[[ ${DOIT} == "get_current_profile" ]] \
&& CTARGET=${CTARGET:-${CC_COMP:-${REAL_CHOST}}} \
|| CTARGET=${CTARGET:-${REAL_CHOST}}
if [[ ${DOIT} == "switch_profile" ]] && [[ -z ${CC_COMP} ]] ; then
usage 1
fi
if [[ -z ${CC_COMP} ]] ; then
CC_COMP=$(get_current_profile)
if [[ $? -ne 0 ]] ; then
echo "${CC_COMP}"
list_profiles
exit 1
fi
fi
if [[ ${DOIT} != "get_current_profile" ]] ; then
GCC_LIB=$(
LDPATH=$(source "${GCC_ENV_D}/${CC_COMP}"; echo ${LDPATH})
echo ${LDPATH} | awk -F/ '{ print "/"$2"/"$3"/"$4"/" }'
)
CC_COMP_VERSION=$(chop_gcc_ver_spec ${CC_COMP})
CC_COMP_TARGET=${CC_COMP%-${CC_COMP_VERSION}*}
if [[ ! -d ${ROOT}/${GCC_LIB}/${CC_COMP_TARGET}/${CC_COMP_VERSION} ]]; then
CC_COMP_VERSION=${CC_COMP_VERSION%-*}
fi
if [[ ! -d ${ROOT}/${GCC_LIB}/${CC_COMP_TARGET}/${CC_COMP_VERSION} ]] || \
[[ ! -f ${GCC_ENV_D}/${CC_COMP} ]]
then
eerror "${argv0}: Profile does not exist or invalid setting for ${GCC_ENV_D}/${CC_COMP}" 1>&2
#exit 1
fi
fi
if [[ ${CHECK_CHOST} == "yes" ]] ; then
# Chosen CHOST are not the same as the real CHOST according to
# make.conf, and --use-portage-chost option was given, so do nothing
get_real_chost
CC_COMP_VERSION=$(chop_gcc_ver_spec ${CC_COMP})
CC_COMP_TARGET=${CC_COMP:0:${#CC_COMP}-${#CC_COMP_VERSION}-1}
[[ ${CC_COMP_TARGET} != ${REAL_CHOST} ]] && exit 0
fi
eval ${DOIT}
# vim:ts=4

View File

@ -1,740 +0,0 @@
#!/bin/bash
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
# Format of /etc/env.d/gcc/:
# config-TARGET: CURRENT=version for TARGET
# TARGET-VER: has a TARGET and VER variable
: ${ROOT:=/}
[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
[[ ${ROOT} != /* ]] && ROOT="${PWD}${ROOT}"
cd /
trap ":" INT QUIT TSTP
argv0=${0##*/}
source /etc/init.d/functions.sh || {
echo "${argv0}: Could not source /etc/init.d/functions.sh!" 1>&2
exit 1
}
esyslog() { :; }
umask 022
die_eerror() {
eerror "${argv0}: $*"
exit 1
}
# *BSD are plain stupid ... copy a GNU extension but don't just copy it,
# change it so it works differently. Wish Darwin did selective evolution
# on software developers.
SED=$(type -P gsed)
: ${SED:=$(type -P sed)}
# Further pain: `tac` is not available everywhere #390179
if ! type -P tac >/dev/null ; then
tac() { ${SED} -e '1!G;h;$!d' "$@" ; }
fi
GENTOO_LIBDIR="@GENTOO_LIBDIR@"
[[ ${GENTOO_LIBDIR} == @*@ ]] && GENTOO_LIBDIR="lib"
usage() {
cat << "USAGE_END"
Usage: gcc-config [options] [CC Profile]
Change the current cc/gcc profile, or give info about profiles.
Options:
-C, --nocolor Disable color output
-O, --use-old Use the old profile if one was selected.
-f, --force Make sure all config files are regenerated.
-P, --use-portage-chost Only set to given profile if its CHOST is the
same as that set in /etc/portage/make.conf
(or one of other portage config files...).
-c, --get-current-profile Print current used gcc profile.
-l, --list-profiles Print a list of available profiles.
-S, --split-profile Split profiles into their components
-E, --print-environ Print environment that can be used to setup the
current gcc profile, or a specified one.
-B, --get-bin-path Print path where binaries of the given/current
profile are located.
-L, --get-lib-path Print path where libraries of the given/current
profile are located.
Profile names are of the form: <CHOST>-<gcc version>
For example: i686-pc-linux-gnu-3.2.1
USAGE_END
exit ${1:-1}
}
[[ $# -lt 1 ]] && usage 1
# Usage: source_var <var> <file> [default value]
source_var() {
unset $1
local val=$(source "$2"; echo ${!1})
: ${val:=$3}
eval $1=\"${val}\"
}
show_var() {
source_var "$@"
echo "${!1}"
}
try_real_hard_to_find_CHOST() {
#
# First we read make.conf
#
local varname=${1:-CHOST}
local conf=${ROOT}/etc/portage/make.conf
if [[ ! -e ${conf} && -e ${ROOT}/etc/make.conf ]] ; then
conf=${ROOT}/etc/make.conf
fi
local ret=$(source "${conf}" 2>/dev/null ; echo ${!varname})
if [[ -z ${ret} ]] ; then
# newer portage supports spaces between the var and =
# CHOST = "this-is-retarded"
ret=$(eval $(
sed -n \
-e 's:[[:space:]]::g' \
-e "/^${varname}=/p" \
"${conf}"
) ; echo ${!varname}
)
fi
if [[ -n ${ret} ]] ; then
echo ${ret}
return 0
fi
#
# Then we try /etc/env.d/gcc/config-${CTARGET}
#
if [[ -s ${ROOT}/etc/env.d/gcc/config-${CTARGET} ]] ; then
ret=$(split_gcc_ver $(show_var CURRENT "${ROOT}"/etc/env.d/gcc/config-${CTARGET}))
echo ${ret% *}
fi
}
get_real_chost() {
[[ -n ${REAL_CHOST} ]] && return 0
# shortcut for switching compilers in a cross chroot
if [[ -n ${CHOST} && ${ROOT} != "/" ]] ; then
REAL_CHOST=${CHOST}
return 0
fi
# make sure portage isnt broken
if python -V &>/dev/null ; then
export REAL_CHOST=$(env -i portageq envvar CHOST 2>/dev/null)
else
ewarn "Python seems to be broken, attempting to locate CHOST ourselves ..."
export REAL_CHOST=$(try_real_hard_to_find_CHOST)
fi
if [[ -z ${REAL_CHOST} ]] ; then
eerror "${argv0}: Could not get portage CHOST!"
eerror "${argv0}: You should verify that CHOST is set in one of these places:"
eerror "${argv0}: - ${ROOT}/etc/portage/make.conf"
eerror "${argv0}: - active environment"
exit 1
fi
}
is_cross_compiler() {
get_real_chost
[[ ${CC_COMP/${REAL_CHOST}} == ${CC_COMP} ]]
}
convert_profile_paths() {
# Older gcc's used PATH= and ROOTPATH= in the env.d files.
# Newer one's only use GCC_PATH=. Convert old to new here.
cp -p "${GCC_ENV_D}/${CC_COMP}" "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" || return 1
GCC_PATH=$(
unset GCC_PATH PATH ROOTPATH
source "${GCC_ENV_D}/${CC_COMP}"
echo ${GCC_PATH:-${PATH:-${ROOTPATH}}}
)
${SED} -i \
-e '/^PATH=/d' \
-e '/^ROOTPATH=/d' \
-e '/^GCC_PATH=/d' \
"${GCC_ENV_D}/${CC_COMP}" || return 1
echo "GCC_PATH=\"${GCC_PATH}\"" >> "${GCC_ENV_D}/${CC_COMP}" || return 1
touch -r "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" "${GCC_ENV_D}/${CC_COMP}" || return 1
rm -f "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" || return 1
return 0
}
update_wrappers() {
local CTARGET=$1
# Find the bin wrapper
local wrapper
for wrapper in ${GENTOO_LIBDIR} lib lib64 lib32 lib ; do
wrapper="${ROOT}usr/${wrapper}/misc/gcc-config"
[[ -e ${wrapper} ]] && break
done
# Update the wrappers for this profile. We maintain this list
# by hand as the tools that are available can come & go if the
# user re-emerges gcc with dif USE flags. We need to clean out
# the old wrappers if the functionality no longer exists.
# XXX: Future work: save the list of wrappers we generated in
# the generated env.d file so we can scrub things better.
# After that, we can use a dynamic list based on what tools are
# actually available in ${GCC_PATH}/.
for x in {,${CTARGET}-}{cpp,cc,gcc,c++,g++,f77,g77,gcj,gcjh,gcov,gdc,gdmd,gfortran,gccgo} ; do
# Obviously don't want to touch native stuff for cross-compilers
[[ ${x} != ${CTARGET}-* ]] && is_cross_compiler && continue
# Make sure we have no stale wrappers
rm -f "${ROOT}/usr/bin/${x}"
[[ ${x:${#x}-3} == "gcc" || ${x:${#x}-3} == "g++" ]] \
&& rm -f "${ROOT}/usr/bin/${x}"{32,64}
# Only install a wrapper if the binary exists ...
# We want to figure out the 'reference file' for each
# wrapper (the binary we're 'wrapping') so that we can
# sync mtimes together. This makes things like ccache
# happy. See Bug #70548 for more info.
local ref
case ${x} in
cc) ref=gcc;;
f77) ref=g77;;
*) ref=${x};;
esac
ref="${ROOT}/${GCC_PATH}/${ref}"
if [[ -x ${ref} ]] ; then
cp -f "${wrapper}" "${ROOT}/usr/bin/${x}"
touch -r "${ref}" "${ROOT}/usr/bin/${x}"
fi
done
# legacy cruft, make sure we dont leave it laying around #143205
rm -f "${ROOT}/usr/bin/${CTARGET}-cc"
# install the canonical cpp wrapper
[[ ${CTARGET} == *-solaris* ]] && return 0
if ! is_cross_compiler ; then
cp -f "${wrapper}" "${ROOT}/lib/cpp"
touch -r "${ROOT}/usr/bin/${CTARGET}-cpp" "${ROOT}/lib/cpp"
fi
}
mv_if_diff() {
if cmp -s "$1" "$2" ; then
rm -f "$1"
return 0
else
mv -f "$1" "$2"
return 1
fi
}
switch_profile() {
local MY_LDPATH=
local GCC_PROFILES=
local OLD_CC_COMP=
local GCC_PATH=
[[ $(id -u) != "0" ]] && die_eerror "Must be root"
if is_cross_compiler ; then
ebegin "Switching cross-compiler to ${CC_COMP}"
else
ebegin "Switching native-compiler to ${CC_COMP}"
fi
if egrep -q '^(PATH|ROOTPATH)=' "${GCC_ENV_D}/${CC_COMP}" ; then
convert_profile_paths "${GCC_ENV_D}/${CC_COMP}" || return 1
fi
source_var GCC_PATH "${GCC_ENV_D}/${CC_COMP}"
# Setup things properly again for this profile
unset GCC_SPECS LDPATH
source "${GCC_ENV_D}/${CC_COMP}"
# Ignore active profile errors here since we're switching away
OLD_CC_COMP=$(get_current_profile 2>/dev/null)
# GCC_SPECS have long been stable, and people messing with
# them know better than to install bad paths, so don't bother
# with sanity checks.
local envd="${ENV_D}/05gcc-${CTARGET}"
cat <<-EOF > "${envd}.tmp"
PATH="${GCC_PATH}"
ROOTPATH="${GCC_PATH}"
GCC_SPECS="${GCC_SPECS}"
EOF
echo "CURRENT=${CC_COMP}" > "${GCC_ENV_D}/config-${CTARGET}"
if ! is_cross_compiler ; then
# Order our profiles to have the default first ...
# We do this so that we can have them ordered with default
# first in /etc/ld.so.conf, as the logical is that all
# compilers for default CHOST will be used to compile stuff,
# and thus we want all their lib paths in /etc/ld.so.conf ...
get_real_chost
MY_LDPATH=$(${SED} -n \
-e '/^LDPATH=/{s|LDPATH=||;s|"||g;s|:|\n|g;p}' \
"${GCC_ENV_D}"/${REAL_CHOST}-* \
"${GCC_ENV_D}"/${CC_COMP} | tac
)
# Pass all by default
awk '!/^(STDCXX_INCDIR|LDPATH|CC|CXX|CTARGET|GCCBITS|GCC_SPECS|GCC_PATH)=/ {print $0}' \
"${GCC_ENV_D}/${CC_COMP}" >> "${envd}.tmp"
if [[ -d ${ROOT}/etc/ld.so.conf.d ]] ; then
echo "${MY_LDPATH}" > "${ROOT}"/etc/ld.so.conf.d/05gcc-${CTARGET}.conf
else
echo "LDPATH=\"${MY_LDPATH}\"" >> "${envd}.tmp"
fi
# Punt old files; maybe globs too much, but oh well
rm -f \
"${GCC_ENV_D}/NATIVE" "${GCC_ENV_D}/.NATIVE" \
"${ENV_D}/05gcc" "${GCC_ENV_D}/config" \
"${ENV_D}/05gcc-${CTARGET}"-* "${GCC_ENV_D}/config-${CTARGET}"-*
# Help out the gcc wrapper
ln -sf ${CC_COMP} "${GCC_ENV_D}/.NATIVE"
# Relocate random crap
if [[ -e ${ROOT}/usr/${GENTOO_LIBDIR}/pkgconfig/libgcj-${CC_COMP_VERSION}.pc ]] ; then
local mver=${CC_COMP_VERSION:0:3}
for x in "" "-${mver}" ; do
x="${ROOT}/usr/lib/pkgconfig/libgcj${x}.pc"
rm -f "${x}"
ln -s libgcj-${CC_COMP_VERSION}.pc "${x}"
done
fi
# We need to make sure that libgcc_s.so / libunwind.so make it into /lib.
# On many systems (x86/amd64/etc...), this will probably never matter,
# but on other systems (arm/mips/etc...), this is quite critical.
# http://bugs.gentoo.org/60190
#
# The funky move magic is required for proper updating of in-use files.
#
# Need to cut out extra paths in multilib case and pray the first path
# is the "root" multilib path ... maybe some day change this to use
# `gcc -print-file-name` ...
LDPATH=${LDPATH%%:*}
for multilib in $("${ROOT}/${GCC_PATH}"/gcc -print-multi-lib); do
multiarg=${multilib#*;}
multiarg=${multiarg/@/-}
multilibdir=${multilib%;*}
libdir="lib/"$("${ROOT}/${GCC_PATH}"/gcc ${multiarg} -print-multi-os-directory)
if mkdir -p "${ROOT}/${libdir}"/.gcc.config.new ; then
for gcclib in gcc_s unwind ; do
if [[ -n $(ls "${ROOT}/${LDPATH}/${multilibdir}"/lib${gcclib}.so.* 2>/dev/null) ]]; then
cp -pP "${ROOT}/${LDPATH}/${multilibdir}"/lib${gcclib}.so.* "${ROOT}/${libdir}"/.gcc.config.new/
# no need to sanity remove this as the `mv` should take
# care of it. we also need this step to be completly atomic
# for systems that have even `mv` linked against libgcc_s.so.
# http://bugs.gentoo.org/150257
#rm -f "${ROOT}/${libdir}"/lib${gcclib}.so*
mv -f "${ROOT}/${libdir}"/.gcc.config.new/* "${ROOT}/${libdir}"/
fi
done
rmdir "${ROOT}/${libdir}"/.gcc.config.new
fi
done
unset multilib
unset multilibdir
unset multiarg
unset libdir
fi
mv_if_diff "${envd}.tmp" "${envd}"
local envd_changed=$?
update_wrappers ${CTARGET}
if [[ ${ROOT} == "/" ]] && \
[[ ${OLD_CC_COMP} != ${CC_COMP} || ${FORCE} == "yes" ]] && \
[[ ${envd_changed} -eq 1 ]]
then
# in case python is broken ...
if ! env-update ; then
echo ""
ewarn "env-update failed to work properly; making sure ld.so.conf paths"
ewarn "are setup properly. Please rerun gcc-config with the -f option."
echo ""
if [[ ! -d /etc/ld.so.conf.d ]] ; then
show_var LDPATH "${ROOT}"/etc/env.d/05gcc-${CTARGET} \
| sed -e 's|:|\n|g' >> /etc/ld.so.conf
fi
ldconfig
fi
else
envd_changed=0
fi
eend 0
if [[ ${envd_changed} -ne 0 ]] ; then
echo
ewarn "If you intend to use the gcc from the new profile in an already"
ewarn "running shell, please remember to do:"
echo
ewarn " . /etc/profile"
echo
fi
return 0
}
get_current_profile() {
local conf="${GCC_ENV_D}/config-${CTARGET}"
if [[ ! -f ${conf} ]] ; then
conf="${GCC_ENV_D}/config" # old name
elif [[ -n ${CC_COMP} ]] && is_cross_compiler ; then
conf="${conf}-${CC_COMP}"
fi
if [[ ! -f ${conf} ]] ; then
eerror "${argv0}: No gcc profile is active!"
return 1
fi
source_var CURRENT "${conf}"
if [[ -z ${CURRENT} ]] ; then
eerror "${argv0}: No gcc profile is active!"
return 1
elif [[ ! -f ${GCC_ENV_D}/${CURRENT} ]] ; then
eerror "${argv0}: Active gcc profile is invalid!"
return 1
fi
echo "${CURRENT}"
return 0
}
list_profiles() {
local i=0
local filter=
if [[ ${ROOT} != "/" ]] ; then
echo "Using gcc-config info in ${ROOT}"
fi
if [[ ! -f ${GCC_ENV_D}/config-${CTARGET} ]] ; then
if ! is_cross_compiler && [[ -e ${GCC_ENV_D}/config ]] ; then
[[ -w ${GCC_ENV_D}/config ]] && mv ${GCC_ENV_D}/config ${GCC_ENV_D}/config-${CTARGET}
else
# get_current_profile already warns
#eerror "${argv0}: No gcc profile is active; please select one!"
filter=${CTARGET}
fi
fi
source_var CURRENT "${GCC_ENV_D}"/config-${CTARGET}
CURRENT_NATIVE=${CURRENT}
local target=
for x in "${GCC_ENV_D}"/* ; do
[[ -f ${x} ]] || continue
[[ ${x} == */config* ]] && continue
source_var CTARGET "${x}"
((++i))
[[ -n ${filter} ]] && [[ ${filter} != ${CTARGET} ]] && continue
if [[ ${target} != ${CTARGET} ]] ; then
[[ ${i} -gt 1 ]] && echo
target=${CTARGET}
CTARGET=""
fi
x=${x##*/}
if [[ ${x} == ${CURRENT_NATIVE} ]] ; then
x="${x} ${GOOD}*${NORMAL}"
elif [[ -e ${GCC_ENV_D}/config-${target} ]] ; then
source "${GCC_ENV_D}/config-${target}"
[[ ${x} == ${CURRENT} ]] && x="${x} ${HILITE}*${NORMAL}"
fi
echo " [${i}] ${x}"
done
}
print_environ() {
local GCC_PATH=
local ENV_CMD=
local SET_ELEMENT=
source_var GCC_PATH "${GCC_ENV_D}/${CC_COMP}" "${PATH}"
case ${SHELL} in
*/csh|*/tcsh)
ENV_CMD="setenv"
SET_ELEMENT=" "
;;
*)
ENV_CMD="export"
SET_ELEMENT="="
;;
esac
(
PATH=${GCC_PATH}:${PATH}
for var in PATH GCC_SPECS ; do
echo "${ENV_CMD} ${var}${SET_ELEMENT}\"${!var}\""
done
)
}
get_bin_path() { show_var GCC_PATH "${GCC_ENV_D}/${CC_COMP}" ; }
get_lib_path() { show_var LDPATH "${GCC_ENV_D}/${CC_COMP}" ; }
split_gcc_ver() {
# Split up the gcc profile into components:
# TARGET-VER[-specs] -> TARGET VER [specs]
# arm-linux-3.3.6 -> arm-linux 3.3.6
# x86_64-linux-4.0.1-pre1234 -> x86_64-linux 4.0.1-pre1234
# sh-linux-3.4.4-hardened -> sh-linux 3.4.4 hardened
#
# So below we will start at the end and run a small state machine ...
# specs [3]
# accept everything
# specs -> version transition [3->2]
# when we find a version component
# version [2]
# accept only version components (see the regex)
# version -> target transition [2->1]
# when we hit a non version component
# target [1]
# accept everything we have left
#
echo "$@" | awk -F- '
function pushit(onme, pushee) {
return (onme == "" ? pushee : pushee"-"onme);
}
{
state=3
targ=""
ver=""
spec=""
for (i=NF; i > 0; --i) {
if (state >= 2) {
if ($i ~ /^(alpha|beta|pre|rc|p)?[[:digit:].]+$/) {
ver=pushit(ver, $i)
state=2
} else if (state == 3)
spec=pushit(spec, $i)
else
state=1
}
if (state == 1)
targ = pushit(targ, $i)
}
if (targ == "") {
if (ver == "") {
ver=spec
spec=""
}
targ=ver
ver=""
}
print targ " " ver (spec != "" ? " " spec : "")
}'
}
chop_gcc_ver_spec() {
local splitTED=$(split_gcc_ver $@) # target ver spec
splitTED=${splitTED#* } # ver spec
echo ${splitTED/ /-} # ver-spec
}
SET_X=false
NEED_ACTION="yes"
DOIT="switch_profile"
CHECK_CHOST="no"
FORCE="no"
CC_COMP=
ENV_D="${ROOT}etc/env.d"
GCC_ENV_D="${ENV_D}/gcc"
for x in "$@" ; do
case "${x}" in
# Only use specified compiler if one is not already selected.
-O|--use-old)
: ${CTARGET:=$(try_real_hard_to_find_CHOST)}
if get_current_profile &>/dev/null ; then
CC_COMP=$(get_current_profile)
else
die_eerror "No profile selected, unable to utilize --use-old"
fi
;;
-f|--force)
FORCE="yes"
;;
-P|--use-portage-chost)
CHECK_CHOST="yes"
;;
-c|--get-current-profile)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_current_profile"
fi
;;
-l|--list-profiles)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="list_profiles"
fi
;;
-S|--split-profile)
if [[ ( $1 != "-S" && $1 != "--split-profile" ) || $# -eq 1 ]] ; then
usage 1
fi
shift # push -S out
for x in "$@" ; do
split_gcc_ver ${x}
done
exit 0
;;
-E|--print-environ)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="print_environ"
fi
;;
-B|--get-bin-path)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_bin_path"
fi
;;
-L|--get-lib-path)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_lib_path"
fi
;;
-x|--debug)
SET_X=true
;;
-C|--nocolor)
# nothing to do; functions.sh parsed this for us
;;
-h|--help)
usage 0
;;
-V|--version)
unset RCSfile Revision Date
rcsfile="$RCSfile: gcc-config-1.5,v $"
rcsfile=${rcsfile#: }
rcsfile=${rcsfile%,v*}
cvsrev="$Revision: 1.7 $"
cvsrev=${cvsrev#: }
cvsdate="$Date: 2011/12/07 05:42:19 $"
cvsdate=${cvsdate#: }
echo "${rcsfile} (r${cvsrev% *} @ ${cvsdate% *})"
exit 0
;;
-*)
die_eerror "Invalid switch! Run ${argv0} without parameters for help."
;;
*)
${SET_X} && set -x
if [[ -z ${CC_COMP} ]] ; then
if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
# User gave us a # representing the profile
i=1
for y in "${GCC_ENV_D}"/* ; do
[[ -f ${y} ]] || continue
[[ ${y} == */config* ]] && continue
if [[ -f ${y} ]] && [[ ${x} == ${i} ]] ; then
CC_COMP=${y##*/}
break
fi
((++i))
done
if [[ -z ${CC_COMP} ]] ; then
die_eerror "Could not locate profile #$x !"
fi
else
# User gave us a full HOST-gccver
x=${x##*/}
if [[ ${DOIT} == "get_current_profile" && -z $(ls "${GCC_ENV_D}"/${x}-* 2>/dev/null) ]] || \
[[ ${DOIT} != "get_current_profile" && ! -f ${GCC_ENV_D}/${x} ]]
then
# Maybe they just gave us a gccver ...
get_real_chost
if [[ -f ${GCC_ENV_D}/${REAL_CHOST}-${x} ]] ; then
x=${REAL_CHOST}-${x}
else
die_eerror "Could not locate '$x' in '${GCC_ENV_D}/' !"
fi
fi
CC_COMP=${x}
fi
else
die_eerror "Too many arguments! Run ${argv0} without parameters for help."
fi
;;
esac
done
${SET_X} && set -x
if [[ ${DOIT} == "switch_profile" ]] && [[ -z ${CC_COMP} ]] ; then
usage 1
fi
get_real_chost
[[ ${DOIT} == "get_current_profile" ]] \
&& : ${CTARGET:=${CC_COMP:-${REAL_CHOST}}} \
|| : ${CTARGET:=${REAL_CHOST}}
if [[ -z ${CC_COMP} ]] ; then
CC_COMP=$(get_current_profile)
if [[ $? -ne 0 ]] ; then
echo "${CC_COMP}"
list_profiles
exit 1
fi
fi
if [[ ${DOIT} != "get_current_profile" ]] ; then
GCC_LIB=$(
show_var LDPATH "${GCC_ENV_D}/${CC_COMP}" | \
awk -F/ '{ print "/"$2"/"$3"/"$4"/" }'
)
CC_COMP_VERSION=$(chop_gcc_ver_spec ${CC_COMP})
CC_COMP_TARGET=${CC_COMP%-${CC_COMP_VERSION}*}
if [[ ! -d ${ROOT}/${GCC_LIB}/${CC_COMP_TARGET}/${CC_COMP_VERSION} ]]; then
CC_COMP_VERSION=${CC_COMP_VERSION%-*}
fi
if [[ ! -d ${ROOT}/${GCC_LIB}/${CC_COMP_TARGET}/${CC_COMP_VERSION} ]] || \
[[ ! -f ${GCC_ENV_D}/${CC_COMP} ]]
then
eerror "${argv0}: Profile does not exist or invalid setting for ${GCC_ENV_D}/${CC_COMP}" 1>&2
#exit 1
fi
fi
if [[ ${CHECK_CHOST} == "yes" ]] ; then
# Chosen CHOST are not the same as the real CHOST according to
# make.conf, and --use-portage-chost option was given, so do nothing
get_real_chost
CC_COMP_VERSION=$(chop_gcc_ver_spec ${CC_COMP})
CC_COMP_TARGET=${CC_COMP:0:${#CC_COMP}-${#CC_COMP_VERSION}-1}
[[ ${CC_COMP_TARGET} != ${REAL_CHOST} ]] && exit 0
fi
${DOIT}
# vim:ts=4

View File

@ -1,763 +0,0 @@
#!/bin/bash
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
# Format of /etc/env.d/gcc/:
# config-TARGET: CURRENT=version for TARGET
# TARGET-VER: has a TARGET and VER variable
: ${ROOT:=/}
[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
[[ ${ROOT} != /* ]] && ROOT="${PWD}${ROOT}"
cd /
trap ":" INT QUIT TSTP
argv0=${0##*/}
source /etc/init.d/functions.sh || {
echo "${argv0}: Could not source /etc/init.d/functions.sh!" 1>&2
exit 1
}
esyslog() { :; }
umask 022
die_eerror() {
eerror "${argv0}: $*"
exit 1
}
# *BSD are plain stupid ... copy a GNU extension but don't just copy it,
# change it so it works differently. Wish Darwin did selective evolution
# on software developers.
SED=$(type -P gsed)
: ${SED:=$(type -P sed)}
# Further pain: `tac` is not available everywhere #390179
if ! type -P tac >/dev/null ; then
tac() { ${SED} -e '1!G;h;$!d' "$@" ; }
fi
GENTOO_LIBDIR="@GENTOO_LIBDIR@"
[[ ${GENTOO_LIBDIR} == @*@ ]] && GENTOO_LIBDIR="lib"
usage() {
cat << "USAGE_END"
Usage: gcc-config [options] [CC Profile]
Change the current cc/gcc profile, or give info about profiles.
Options:
-C, --nocolor Disable color output
-O, --use-old Use the old profile if one was selected.
-f, --force Make sure all config files are regenerated.
-P, --use-portage-chost Only set to given profile if its CHOST is the
same as that set in /etc/portage/make.conf
(or one of other portage config files...).
-c, --get-current-profile Print current used gcc profile.
-l, --list-profiles Print a list of available profiles.
-S, --split-profile Split profiles into their components
-E, --print-environ Print environment that can be used to setup the
current gcc profile, or a specified one.
-B, --get-bin-path Print path where binaries of the given/current
profile are located.
-L, --get-lib-path Print path where libraries of the given/current
profile are located.
Profile names are of the form: <CHOST>-<gcc version>
For example: i686-pc-linux-gnu-3.2.1
USAGE_END
exit ${1:-1}
}
[[ $# -lt 1 ]] && usage 1
# Usage: source_var <var> <file> [default value]
source_var() {
unset $1
local val=$(source "$2"; echo "${!1}")
: ${val:=$3}
eval $1=\"${val}\"
}
show_var() {
source_var "$@"
echo "${!1}"
}
try_real_hard_to_find_CHOST() {
#
# First we read make.conf
#
local varname=${1:-CHOST}
local conf=${ROOT}/etc/portage/make.conf
if [[ ! -e ${conf} && -e ${ROOT}/etc/make.conf ]] ; then
conf=${ROOT}/etc/make.conf
fi
local ret=$(source "${conf}" 2>/dev/null ; echo ${!varname})
if [[ -z ${ret} ]] ; then
# newer portage supports spaces between the var and =
# CHOST = "this-is-retarded"
ret=$(eval $(
sed -n \
-e 's:[[:space:]]::g' \
-e "/^${varname}=/p" \
"${conf}"
) ; echo ${!varname}
)
fi
if [[ -n ${ret} ]] ; then
echo ${ret}
return 0
fi
#
# Then we try /etc/env.d/gcc/config-${CTARGET}
#
if [[ -s ${ROOT}/etc/env.d/gcc/config-${CTARGET} ]] ; then
ret=$(split_gcc_ver $(show_var CURRENT "${ROOT}"/etc/env.d/gcc/config-${CTARGET}))
echo ${ret% *}
fi
}
get_real_chost() {
[[ -n ${REAL_CHOST} ]] && return 0
# shortcut for switching compilers in a cross chroot
if [[ -n ${CHOST} && ${ROOT} != "/" ]] ; then
REAL_CHOST=${CHOST}
return 0
fi
# make sure portage isnt broken
if python -V &>/dev/null ; then
export REAL_CHOST=$(env -i portageq envvar CHOST 2>/dev/null)
else
ewarn "Python seems to be broken, attempting to locate CHOST ourselves ..."
export REAL_CHOST=$(try_real_hard_to_find_CHOST)
fi
if [[ -z ${REAL_CHOST} ]] ; then
eerror "${argv0}: Could not get portage CHOST!"
eerror "${argv0}: You should verify that CHOST is set in one of these places:"
eerror "${argv0}: - ${ROOT}/etc/portage/make.conf"
eerror "${argv0}: - active environment"
exit 1
fi
}
is_cross_compiler() {
get_real_chost
[[ ${CC_COMP/${REAL_CHOST}} == ${CC_COMP} ]]
}
convert_profile_paths() {
# Older gcc's used PATH= and ROOTPATH= in the env.d files.
# Newer one's only use GCC_PATH=. Convert old to new here.
cp -p "${GCC_ENV_D}/${CC_COMP}" "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" || return 1
GCC_PATH=$(
unset GCC_PATH PATH ROOTPATH
source "${GCC_ENV_D}/${CC_COMP}"
echo ${GCC_PATH:-${PATH:-${ROOTPATH}}}
)
${SED} -i \
-e '/^PATH=/d' \
-e '/^ROOTPATH=/d' \
-e '/^GCC_PATH=/d' \
"${GCC_ENV_D}/${CC_COMP}" || return 1
echo "GCC_PATH=\"${GCC_PATH}\"" >> "${GCC_ENV_D}/${CC_COMP}" || return 1
touch -r "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" "${GCC_ENV_D}/${CC_COMP}" || return 1
rm -f "${GCC_ENV_D}/${CC_COMP}.gcc-config-ref" || return 1
return 0
}
update_wrappers() {
local CTARGET=$1
# Find the bin wrapper
local wrapper
for wrapper in ${GENTOO_LIBDIR} lib lib64 lib32 lib ; do
wrapper="${ROOT}usr/${wrapper}/misc/gcc-config"
[[ -e ${wrapper} ]] && break
done
# Update the wrappers for this profile. We maintain this list
# by hand as the tools that are available can come & go if the
# user re-emerges gcc with dif USE flags. We need to clean out
# the old wrappers if the functionality no longer exists.
# XXX: Future work: save the list of wrappers we generated in
# the generated env.d file so we can scrub things better.
# After that, we can use a dynamic list based on what tools are
# actually available in ${GCC_PATH}/.
for x in {,${CTARGET}-}{cpp,cc,gcc,c++,g++,f77,g77,gcj,gcjh,gcov,gdc,gdmd,gfortran,gccgo} ; do
# Obviously don't want to touch native stuff for cross-compilers
[[ ${x} != ${CTARGET}-* ]] && is_cross_compiler && continue
# Make sure we have no stale wrappers
rm -f "${ROOT}/usr/bin/${x}"
[[ ${x:${#x}-3} == "gcc" || ${x:${#x}-3} == "g++" ]] \
&& rm -f "${ROOT}/usr/bin/${x}"{32,64}
# Only install a wrapper if the binary exists ...
# We want to figure out the 'reference file' for each
# wrapper (the binary we're 'wrapping') so that we can
# sync mtimes together. This makes things like ccache
# happy. See Bug #70548 for more info.
local ref
case ${x} in
cc) ref=gcc;;
f77) ref=g77;;
*) ref=${x};;
esac
ref="${ROOT}/${GCC_PATH}/${ref}"
if [[ -x ${ref} ]] ; then
cp -f "${wrapper}" "${ROOT}/usr/bin/${x}"
touch -r "${ref}" "${ROOT}/usr/bin/${x}"
fi
done
# legacy cruft, make sure we dont leave it laying around #143205
rm -f "${ROOT}/usr/bin/${CTARGET}-cc"
# install the canonical cpp wrapper
[[ ${CTARGET} == *-solaris* ]] && return 0
if ! is_cross_compiler ; then
cp -f "${wrapper}" "${ROOT}/lib/cpp"
touch -r "${ROOT}/usr/bin/${CTARGET}-cpp" "${ROOT}/lib/cpp"
fi
}
mv_if_diff() {
if cmp -s "$1" "$2" ; then
rm -f "$1"
return 0
else
mv -f "$1" "$2"
return 1
fi
}
switch_profile() {
local GCC_PROFILES=
local OLD_CC_COMP=
local GCC_PATH=
[[ $(id -u) != "0" ]] && die_eerror "Must be root"
if is_cross_compiler ; then
ebegin "Switching cross-compiler to ${CC_COMP}"
else
ebegin "Switching native-compiler to ${CC_COMP}"
fi
if egrep -q '^(PATH|ROOTPATH)=' "${GCC_ENV_D}/${CC_COMP}" ; then
convert_profile_paths "${GCC_ENV_D}/${CC_COMP}" || return 1
fi
source_var GCC_PATH "${GCC_ENV_D}/${CC_COMP}"
# Setup things properly again for this profile
unset GCC_SPECS LDPATH
source "${GCC_ENV_D}/${CC_COMP}"
# Ignore active profile errors here since we're switching away
OLD_CC_COMP=$(get_current_profile 2>/dev/null)
# GCC_SPECS have long been stable, and people messing with
# them know better than to install bad paths, so don't bother
# with sanity checks.
local envd="${ENV_D}/05gcc-${CTARGET}"
cat <<-EOF > "${envd}.tmp"
PATH="${GCC_PATH}"
ROOTPATH="${GCC_PATH}"
GCC_SPECS="${GCC_SPECS}"
EOF
echo "CURRENT=${CC_COMP}" > "${GCC_ENV_D}/config-${CTARGET}"
if ! is_cross_compiler ; then
# Regardless of the profile selected, keep the runtime lookup
# paths stable. Otherwise, all the apps that were built with
# a new compiler will start trying to use older versions of
# the libs, and life gets sad. We work off the assumption
# that every shared library gcc ships is ABI compatible (as
# is the point of SONAMEs). We don't have to worry about
# static libraries here as gcc itself will take care of
# linking against its own internal paths first. #297685
local MY_LDPATH
get_real_chost
MY_LDPATH=$(${SED} -n \
-e '/^LDPATH=/{s|LDPATH=||;s|"||g;s|:|\n|g;p}' \
"${GCC_ENV_D}"/${REAL_CHOST}-* | tac
)
# Pass all by default
awk '!/^(STDCXX_INCDIR|LDPATH|CC|CXX|CTARGET|GCCBITS|GCC_SPECS|GCC_PATH)=/ {print $0}' \
"${GCC_ENV_D}/${CC_COMP}" >> "${envd}.tmp"
if [[ -d ${ROOT}/etc/ld.so.conf.d ]] ; then
echo "${MY_LDPATH}" > "${ROOT}"/etc/ld.so.conf.d/05gcc-${CTARGET}.conf
else
echo "LDPATH=\"${MY_LDPATH}\"" >> "${envd}.tmp"
fi
# Punt old files; maybe globs too much, but oh well
rm -f \
"${GCC_ENV_D}/NATIVE" "${GCC_ENV_D}/.NATIVE" \
"${ENV_D}/05gcc" "${GCC_ENV_D}/config" \
"${ENV_D}/05gcc-${CTARGET}"-* "${GCC_ENV_D}/config-${CTARGET}"-*
# Help out the gcc wrapper
ln -sf ${CC_COMP} "${GCC_ENV_D}/.NATIVE"
# Relocate random crap
if [[ -e ${ROOT}/usr/${GENTOO_LIBDIR}/pkgconfig/libgcj-${CC_COMP_VERSION}.pc ]] ; then
local mver=${CC_COMP_VERSION:0:3}
for x in "" "-${mver}" ; do
x="${ROOT}/usr/lib/pkgconfig/libgcj${x}.pc"
rm -f "${x}"
ln -s libgcj-${CC_COMP_VERSION}.pc "${x}"
done
fi
# We need to make sure that libgcc_s.so / libunwind.so make it into /lib.
# On many systems (x86/amd64/etc...), this will probably never matter,
# but on other systems (arm/mips/etc...), this is quite critical.
# http://bugs.gentoo.org/60190
#
# The funky move magic is required for proper updating of in-use files.
#
# XXX: This fails when configuring the native target in a cross-compiled
# ROOT. Only way around that is to store the multilib configuration
# in the gcc profile when we compiled it and then read that instead
# of executing the gcc. Some day.
#
# We use the same ordering logic as mentioned in the MY_LDPATH setup.
# We get the libs from the latest version available.
local LATEST_GCC_PATH gcc LATEST_GCC_LDPATH
LATEST_GCC_PATH=$(gawk -F= '
$1 == "GCC_PATH" {
p = gensub("\"","","g",$2)
}
END { print p }
' "${GCC_ENV_D}"/${REAL_CHOST}-*
)
gcc="${ROOT}${LATEST_GCC_PATH}/gcc"
local multilib
for multilib in $("${gcc}" -print-multi-lib); do
local multiarg=${multilib#*;}
multiarg=${multiarg/@/-}
local multilibdir=${multilib%;*}
local libdir="${ROOT}lib/"$("${gcc}" ${multiarg} -print-multi-os-directory)
mkdir -p "${libdir}"/.gcc.config.new || continue # !?!?!
local gcclib
for gcclib in gcc_s unwind ; do
# This assumes that we always have the .so symlink,
# but for now, that should be safe ...
gcclib=$("${gcc}" -print-file-name="lib${gcclib}.so")
if [[ ${gcclib} == */* ]] ; then
cp -pP "${ROOT}${gcclib}".* "${libdir}"/.gcc.config.new/
# no need to sanity remove this as the `mv` should take
# care of it. we also need this step to be completly atomic
# for systems that have even `mv` linked against libgcc_s.so.
# http://bugs.gentoo.org/150257
#rm -f "${libdir}"/lib${gcclib}.so*
mv -f "${libdir}"/.gcc.config.new/* "${libdir}"/
fi
done
rmdir "${libdir}"/.gcc.config.new
done
fi
mv_if_diff "${envd}.tmp" "${envd}"
local envd_changed=$?
update_wrappers ${CTARGET}
if [[ ${ROOT} == "/" ]] && \
[[ ${OLD_CC_COMP} != ${CC_COMP} || ${FORCE} == "yes" ]] && \
[[ ${envd_changed} -eq 1 ]]
then
# in case python is broken ...
if ! env-update ; then
echo ""
ewarn "env-update failed to work properly; making sure ld.so.conf paths"
ewarn "are setup properly. Please rerun gcc-config with the -f option."
echo ""
if [[ ! -d /etc/ld.so.conf.d ]] ; then
show_var LDPATH "${ROOT}"/etc/env.d/05gcc-${CTARGET} \
| sed -e 's|:|\n|g' >> /etc/ld.so.conf
fi
ldconfig
fi
else
envd_changed=0
fi
eend 0
if [[ ${envd_changed} -ne 0 ]] ; then
echo
ewarn "If you intend to use the gcc from the new profile in an already"
ewarn "running shell, please remember to do:"
echo
ewarn " . /etc/profile"
echo
fi
return 0
}
get_current_profile() {
local conf="${GCC_ENV_D}/config-${CTARGET}"
if [[ ! -f ${conf} ]] ; then
conf="${GCC_ENV_D}/config" # old name
elif [[ -n ${CC_COMP} ]] && is_cross_compiler ; then
conf="${conf}-${CC_COMP}"
fi
if [[ ! -f ${conf} ]] ; then
eerror "${argv0}: No gcc profile is active!"
return 1
fi
source_var CURRENT "${conf}"
if [[ -z ${CURRENT} ]] ; then
eerror "${argv0}: No gcc profile is active!"
return 1
elif [[ ! -f ${GCC_ENV_D}/${CURRENT} ]] ; then
eerror "${argv0}: Active gcc profile is invalid!"
return 1
fi
echo "${CURRENT}"
return 0
}
list_profiles() {
local i=0
local filter=
if [[ ${ROOT} != "/" ]] ; then
echo "Using gcc-config info in ${ROOT}"
fi
if [[ ! -f ${GCC_ENV_D}/config-${CTARGET} ]] ; then
if ! is_cross_compiler && [[ -e ${GCC_ENV_D}/config ]] ; then
[[ -w ${GCC_ENV_D}/config ]] && mv ${GCC_ENV_D}/config ${GCC_ENV_D}/config-${CTARGET}
else
# get_current_profile already warns
#eerror "${argv0}: No gcc profile is active; please select one!"
filter=${CTARGET}
fi
fi
source_var CURRENT "${GCC_ENV_D}"/config-${CTARGET}
CURRENT_NATIVE=${CURRENT}
local target=
for x in "${GCC_ENV_D}"/* ; do
[[ -f ${x} ]] || continue
[[ ${x} == */config* ]] && continue
source_var CTARGET "${x}"
((++i))
[[ -n ${filter} ]] && [[ ${filter} != ${CTARGET} ]] && continue
if [[ ${target} != ${CTARGET} ]] ; then
[[ ${i} -gt 1 ]] && echo
target=${CTARGET}
CTARGET=""
fi
x=${x##*/}
if [[ ${x} == ${CURRENT_NATIVE} ]] ; then
x="${x} ${GOOD}*${NORMAL}"
elif [[ -e ${GCC_ENV_D}/config-${target} ]] ; then
source "${GCC_ENV_D}/config-${target}"
[[ ${x} == ${CURRENT} ]] && x="${x} ${HILITE}*${NORMAL}"
fi
echo " [${i}] ${x}"
done
}
print_environ() {
local ENV_CMD SET_ELEMENT
case ${SHELL} in
*/csh|*/tcsh)
ENV_CMD="setenv"
SET_ELEMENT=" "
;;
*)
ENV_CMD="export"
SET_ELEMENT="="
;;
esac
local var
for var in GCC_SPECS GCC_PATH ; do
local ${var}
source_var ${var} "${GCC_ENV_D}/${CC_COMP}"
done
(
[[ -n ${GCC_PATH} ]] && PATH=${GCC_PATH}:${PATH}
for var in PATH GCC_SPECS ; do
echo "${ENV_CMD} ${var}${SET_ELEMENT}\"${!var}\""
done
)
}
get_bin_path() { show_var GCC_PATH "${GCC_ENV_D}/${CC_COMP}" ; }
get_lib_path() { show_var LDPATH "${GCC_ENV_D}/${CC_COMP}" ; }
split_gcc_ver() {
# Split up the gcc profile into components:
# TARGET-VER[-specs] -> TARGET VER [specs]
# arm-linux-3.3.6 -> arm-linux 3.3.6
# x86_64-linux-4.0.1-pre1234 -> x86_64-linux 4.0.1-pre1234
# sh-linux-3.4.4-hardened -> sh-linux 3.4.4 hardened
#
# So below we will start at the end and run a small state machine ...
# specs [3]
# accept everything
# specs -> version transition [3->2]
# when we find a version component
# version [2]
# accept only version components (see the regex)
# version -> target transition [2->1]
# when we hit a non version component
# target [1]
# accept everything we have left
#
echo "$@" | awk -F- '
function pushit(onme, pushee) {
return (onme == "" ? pushee : pushee"-"onme);
}
{
state=3
targ=""
ver=""
spec=""
for (i=NF; i > 0; --i) {
if (state >= 2) {
if ($i ~ /^(alpha|beta|pre|rc|p)?[[:digit:].]+$/) {
ver=pushit(ver, $i)
state=2
} else if (state == 3)
spec=pushit(spec, $i)
else
state=1
}
if (state == 1)
targ = pushit(targ, $i)
}
if (targ == "") {
if (ver == "") {
ver=spec
spec=""
}
targ=ver
ver=""
}
print targ " " ver (spec != "" ? " " spec : "")
}'
}
chop_gcc_ver_spec() {
local splitTED=$(split_gcc_ver "$@") # target ver spec
splitTED=${splitTED#* } # ver spec
echo ${splitTED/ /-} # ver-spec
}
SET_X=false
NEED_ACTION="yes"
DOIT="switch_profile"
CHECK_CHOST="no"
FORCE="no"
CC_COMP=
ENV_D="${ROOT}etc/env.d"
GCC_ENV_D="${ENV_D}/gcc"
for x in "$@" ; do
case "${x}" in
# Only use specified compiler if one is not already selected.
-O|--use-old)
: ${CTARGET:=$(try_real_hard_to_find_CHOST)}
if get_current_profile &>/dev/null ; then
CC_COMP=$(get_current_profile)
else
die_eerror "No profile selected, unable to utilize --use-old"
fi
;;
-f|--force)
FORCE="yes"
;;
-P|--use-portage-chost)
CHECK_CHOST="yes"
;;
-c|--get-current-profile)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_current_profile"
fi
;;
-l|--list-profiles)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="list_profiles"
fi
;;
-S|--split-profile)
if [[ ( $1 != "-S" && $1 != "--split-profile" ) || $# -eq 1 ]] ; then
usage 1
fi
shift # push -S out
for x in "$@" ; do
split_gcc_ver ${x}
done
exit 0
;;
-E|--print-environ)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="print_environ"
fi
;;
-B|--get-bin-path)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_bin_path"
fi
;;
-L|--get-lib-path)
if [[ ${NEED_ACTION} == "yes" ]] ; then
NEED_ACTION="no"
DOIT="get_lib_path"
fi
;;
-x|--debug)
SET_X=true
;;
-C|--nocolor)
# nothing to do; functions.sh parsed this for us
;;
-h|--help)
usage 0
;;
-V|--version)
unset RCSfile Revision Date
rcsfile="$RCSfile: gcc-config-1.5.1,v $"
rcsfile=${rcsfile#: }
rcsfile=${rcsfile%,v*}
cvsrev="$Revision: 1.2 $"
cvsrev=${cvsrev#: }
cvsdate="$Date: 2012/03/15 01:16:44 $"
cvsdate=${cvsdate#: }
echo "${rcsfile} (r${cvsrev% *} @ ${cvsdate% *})"
exit 0
;;
-*)
die_eerror "Invalid switch! Run ${argv0} without parameters for help."
;;
*)
${SET_X} && set -x
if [[ -z ${CC_COMP} ]] ; then
if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
# User gave us a # representing the profile
i=1
for y in "${GCC_ENV_D}"/* ; do
[[ -f ${y} ]] || continue
[[ ${y} == */config* ]] && continue
if [[ -f ${y} ]] && [[ ${x} == ${i} ]] ; then
CC_COMP=${y##*/}
break
fi
((++i))
done
if [[ -z ${CC_COMP} ]] ; then
die_eerror "Could not locate profile #$x !"
fi
else
# User gave us a full HOST-gccver
x=${x##*/}
if [[ ${DOIT} == "get_current_profile" && -z $(ls "${GCC_ENV_D}"/${x}-* 2>/dev/null) ]] || \
[[ ${DOIT} != "get_current_profile" && ! -f ${GCC_ENV_D}/${x} ]]
then
# Maybe they just gave us a gccver ...
get_real_chost
if [[ -f ${GCC_ENV_D}/${REAL_CHOST}-${x} ]] ; then
x=${REAL_CHOST}-${x}
else
die_eerror "Could not locate '$x' in '${GCC_ENV_D}/' !"
fi
fi
CC_COMP=${x}
fi
else
die_eerror "Too many arguments! Run ${argv0} without parameters for help."
fi
;;
esac
done
${SET_X} && set -x
if [[ ${DOIT} == "switch_profile" ]] && [[ -z ${CC_COMP} ]] ; then
usage 1
fi
get_real_chost
[[ ${DOIT} == "get_current_profile" ]] \
&& : ${CTARGET:=${CC_COMP:-${REAL_CHOST}}} \
|| : ${CTARGET:=${REAL_CHOST}}
if [[ -z ${CC_COMP} ]] ; then
CC_COMP=$(get_current_profile)
if [[ $? -ne 0 ]] ; then
echo "${CC_COMP}"
list_profiles
exit 1
fi
fi
if [[ ${DOIT} != "get_current_profile" ]] ; then
GCC_LIB=$(get_lib_path | awk -F/ '{ print "/"$2"/"$3"/"$4"/" }')
# For people who insist on using funky version strings ("4.6.x"
# rather than "4.6.2"), allow them to manually specify it.
source_var GCC_VER "${GCC_ENV_D}/${CC_COMP}"
CC_COMP_VERSION=${GCC_VER:-$(chop_gcc_ver_spec ${CC_COMP})}
CC_COMP_TARGET=$(show_var CTARGET "${GCC_ENV_D}/${CC_COMP}")
if [[ -z ${CC_COMP_TARGET} ]] ; then
# Native configs don't have CTARGET in there.
CC_COMP_TARGET=${CC_COMP%-${CC_COMP_VERSION}*}
fi
if [[ ! -d ${ROOT}/${GCC_LIB}/${CC_COMP_TARGET}/${CC_COMP_VERSION} ]]; then
CC_COMP_VERSION=${CC_COMP_VERSION%-*}
fi
if [[ ! -d ${ROOT}/${GCC_LIB}/${CC_COMP_TARGET}/${CC_COMP_VERSION} ]] || \
[[ ! -f ${GCC_ENV_D}/${CC_COMP} ]]
then
eerror "${argv0}: Profile does not exist or invalid setting for ${GCC_ENV_D}/${CC_COMP}" 1>&2
#exit 1
fi
fi
if [[ ${CHECK_CHOST} == "yes" ]] ; then
# Chosen CHOST are not the same as the real CHOST according to
# make.conf, and --use-portage-chost option was given, so do nothing
get_real_chost
CC_COMP_VERSION=$(chop_gcc_ver_spec ${CC_COMP})
CC_COMP_TARGET=${CC_COMP:0:${#CC_COMP}-${#CC_COMP_VERSION}-1}
[[ ${CC_COMP_TARGET} != ${REAL_CHOST} ]] && exit 0
fi
${DOIT}
# vim:ts=4

View File

@ -1,372 +0,0 @@
/*
* Copyright 1999-2008 Gentoo Foundation
* Distributed under the terms of the GNU General Public License v2
* $Id$
* Author: Martin Schlemmer <azarah@gentoo.org>
* az's lackey: Mike Frysinger <vapier@gentoo.org>
*/
#ifdef DEBUG
# define USE_DEBUG 1
#else
# define USE_DEBUG 0
#endif
#include <errno.h>
#include <libgen.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#define GCC_CONFIG "/usr/bin/gcc-config"
#define ENVD_BASE "/etc/env.d/05gcc"
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))
/* basename(3) is allowed to modify memory */
#undef basename
#define basename(path) \
({ \
char *__path = path; \
char *__ret = strrchr(__path, '/'); \
__ret ? __ret + 1 : __path; \
})
struct wrapper_data {
char *name, *fullname, *bin, *path;
};
static const struct {
char *alias;
char *target;
} wrapper_aliases[] = {
{ "cc", "gcc" },
{ "f77", "g77" },
};
#define wrapper_warn(fmt, ...) fprintf(stderr, "%s" fmt "\n", "gcc-config: ", ## __VA_ARGS__)
#define wrapper_err(fmt, ...) ({ wrapper_warn("%s" fmt, "error: ", ## __VA_ARGS__); exit(1); })
#define wrapper_errp(fmt, ...) wrapper_err(fmt ": %s", ## __VA_ARGS__, strerror(errno))
#define wrapper_dbg(fmt, ...) ({ if (USE_DEBUG) wrapper_warn(fmt, ## __VA_ARGS__); })
#define xmemwrap(func, proto, use) \
static void *x ## func proto \
{ \
void *ret = func use; \
if (!ret) \
wrapper_err(#func "%s", ": out of memory"); \
return ret; \
}
xmemwrap(malloc, (size_t size), (size))
xmemwrap(calloc, (size_t nemb, size_t size), (nemb, size))
xmemwrap(strdup, (const char *s), (s))
/* check_for_target checks in path for the file we are seeking
* it returns 1 if found (with data->bin setup), 0 if not and
* negative on error
*/
static int check_for_target(char *path, struct wrapper_data *data)
{
struct stat sbuf;
char str[PATH_MAX + 1];
size_t path_len = strlen(path);
size_t len = path_len + strlen(data->name) + 2;
if (sizeof(str) < len)
wrapper_warn("path too long: %s", path);
strcpy(str, path);
str[path_len] = '/';
str[path_len+1] = '\0';
strcat(str, data->name);
/* Stat possible file to check that
* 1) it exist and is a regular file, and
* 2) it is not the wrapper itself, and
* 3) it is in a /gcc-bin/ directory tree
*/
if (strcmp(str, data->fullname) != 0 &&
strstr(str, "/gcc-bin/") != NULL &&
stat(str, &sbuf) == 0 &&
(S_ISREG(sbuf.st_mode) || S_ISLNK(sbuf.st_mode)))
{
wrapper_dbg("%s: found in %s", data->name, path);
data->bin = xstrdup(str);
return 1;
}
wrapper_dbg("%s: did not find in %s", data->name, path);
return 0;
}
static int find_target_in_path(struct wrapper_data *data)
{
char *token = NULL, *state;
char *str;
if (data->path == NULL)
return 0;
/* Make a copy since strtok_r will modify path */
str = xstrdup(data->path);
/* Find the first file with suitable name in PATH. The idea here is
* that we do not want to bind ourselfs to something static like the
* default profile, or some odd environment variable, but want to be
* able to build something with a non default gcc by just tweaking
* the PATH ... */
token = strtok_r(str, ":", &state);
while (token != NULL) {
if (check_for_target(token, data))
return 1;
token = strtok_r(NULL, ":", &state);
}
wrapper_dbg("%s: did not find in PATH", data->name);
return 0;
}
/* find_target_in_envd parses /etc/env.d/05gcc, and tries to
* extract PATH, which is set to the current profile's bin
* directory ...
*/
static int find_target_in_envd(struct wrapper_data *data, int cross_compile)
{
FILE *envfile = NULL;
char *token = NULL, *state;
char str[PATH_MAX + 1];
char *strp = str;
char envd_file[PATH_MAX + 1];
if (!cross_compile) {
/* for the sake of speed, we'll keep a symlink around for
* the native compiler. #190260
*/
snprintf(envd_file, sizeof(envd_file)-1, "/etc/env.d/gcc/.NATIVE");
} else {
char *ctarget, *end = strrchr(data->name, '-');
if (end == NULL)
return 0;
ctarget = xstrdup(data->name);
ctarget[end - data->name] = '\0';
snprintf(envd_file, PATH_MAX, "%s-%s", ENVD_BASE, ctarget);
free(ctarget);
}
envfile = fopen(envd_file, "r");
if (envfile == NULL)
return 0;
while (fgets(strp, PATH_MAX, envfile) != NULL) {
/* Keep reading ENVD_FILE until we get a line that
* starts with 'GCC_PATH=' ... keep 'PATH=' around
* for older gcc versions.
*/
if (strncmp(strp, "GCC_PATH=", strlen("GCC_PATH=")) &&
strncmp(strp, "PATH=", strlen("PATH=")))
continue;
token = strtok_r(strp, "=", &state);
if ((token != NULL) && token[0])
/* The second token should be the value of PATH .. */
token = strtok_r(NULL, "=", &state);
else
goto bail;
if ((token != NULL) && token[0]) {
strp = token;
/* A bash variable may be unquoted, quoted with " or
* quoted with ', so extract the value without those ..
*/
token = strtok(strp, "\n\"\'");
while (token != NULL) {
if (check_for_target(token, data)) {
fclose(envfile);
return 1;
}
token = strtok(NULL, "\n\"\'");
}
}
strp = str;
}
bail:
fclose(envfile);
return (cross_compile ? 0 : find_target_in_envd(data, 1));
}
static void find_wrapper_target(struct wrapper_data *data)
{
if (find_target_in_path(data))
return;
if (find_target_in_envd(data, 0))
return;
/* Only our wrapper is in PATH, so get the CC path using
* gcc-config and execute the real binary in there ...
*/
FILE *inpipe = popen(GCC_CONFIG " --get-bin-path", "r");
if (inpipe == NULL)
wrapper_errp("could not open pipe");
char str[PATH_MAX + 1];
if (fgets(str, PATH_MAX, inpipe) == 0)
wrapper_errp("could not get compiler binary path");
/* chomp! */
size_t plen = strlen(str);
if (str[plen-1] == '\n')
str[plen-1] = '\0';
data->bin = xmalloc(plen + 1 + strlen(data->name) + 1);
sprintf(data->bin, "%s/%s", str, data->name);
pclose(inpipe);
}
/* This function modifies PATH to have gcc's bin path appended */
static void modify_path(struct wrapper_data *data)
{
char *newpath = NULL, *token = NULL, *state;
char dname_data[PATH_MAX + 1], str[PATH_MAX + 1];
char *str2 = dname_data, *dname = dname_data;
size_t len = 0;
if (data->bin == NULL)
return;
if (data->path == NULL)
return;
snprintf(str2, PATH_MAX + 1, "%s", data->bin);
if ((dname = dirname(str2)) == NULL)
return;
/* Make a copy since strtok_r will modify path */
snprintf(str, PATH_MAX + 1, "%s", data->path);
token = strtok_r(str, ":", &state);
/* Check if we already appended our bin location to PATH */
if ((token != NULL) && token[0])
if (!strcmp(token, dname))
return;
len = strlen(dname) + strlen(data->path) + 2 + strlen("PATH") + 1;
newpath = xmalloc(len);
memset(newpath, 0, len);
snprintf(newpath, len, "PATH=%s:%s", dname, data->path);
putenv(newpath);
}
static char *abi_flags[] = {
"-m32", "-m64", "-mabi",
};
static char **build_new_argv(char **argv, const char *newflags_str)
{
#define MAX_NEWFLAGS 32
char *newflags[MAX_NEWFLAGS];
char **retargv;
unsigned int argc, i;
char *state, *flags_tokenized;
retargv = argv;
/* make sure user hasn't specified any ABI flags already ...
* if they have, lets just get out of here ... this of course
* is by no means complete, it's merely a hack that works most
* of the time ...
*/
for (argc = 0; argv[argc]; ++argc)
for (i = 0; i < ARRAY_SIZE(abi_flags); ++i)
if (!strncmp(argv[argc], abi_flags[i], strlen(abi_flags[i])))
return retargv;
/* Tokenize the flag list and put it into newflags array */
flags_tokenized = xstrdup(newflags_str);
i = 0;
newflags[i] = strtok_r(flags_tokenized, " \t\n", &state);
while (newflags[i] != NULL && i < MAX_NEWFLAGS-1)
newflags[++i] = strtok_r(NULL, " \t\n", &state);
/* allocate memory for our spiffy new argv */
retargv = xcalloc(argc + i + 1, sizeof(char*));
/* start building retargv */
retargv[0] = argv[0];
/* insert the ABI flags first so cmdline always overrides ABI flags */
memcpy(retargv+1, newflags, i * sizeof(char*));
/* copy over the old argv */
if (argc > 1)
memcpy(retargv+1+i, argv+1, (argc-1) * sizeof(char*));
return retargv;
}
int main(int argc, char *argv[])
{
struct wrapper_data data;
memset(&data, 0, sizeof(data));
if (getenv("PATH"))
data.path = xstrdup(getenv("PATH"));
/* What should we find ? */
data.name = basename(argv[0]);
/* Allow for common compiler names like cc->gcc */
size_t i;
for (i = 0; i < ARRAY_SIZE(wrapper_aliases); ++i)
if (!strcmp(data.name, wrapper_aliases[i].alias))
data.name = wrapper_aliases[i].target;
/* What is the full name of our wrapper? */
data.fullname = xmalloc(strlen(data.name) + sizeof("/usr/bin/") + 1);
sprintf(data.fullname, "/usr/bin/%s", data.name);
find_wrapper_target(&data);
modify_path(&data);
free(data.path);
data.path = NULL;
/* Set argv[0] to the correct binary, else gcc can't find internal headers
* http://bugs.gentoo.org/8132
*/
argv[0] = data.bin;
/* If $ABI is in env, add appropriate env flags */
char **newargv = argv;
if (getenv("ABI")) {
char envvar[50];
/* We use CFLAGS_${ABI} for gcc, g++, g77, etc as the flags that would
* be in there are the same no matter which compiler we are using.
*/
snprintf(envvar, sizeof(envvar), "CFLAGS_%s", getenv("ABI"));
envvar[sizeof(envvar)-1] = '\0';
if (getenv(envvar))
newargv = build_new_argv(argv, getenv(envvar));
}
/* Ok, lets do it one more time ... */
execv(data.bin, newargv);
/* shouldn't have made it here if things worked ... */
wrapper_err("could not run/locate '%s'", data.name);
return 123;
}

View File

@ -1,315 +0,0 @@
/*
* Copyright 1999-2011 Gentoo Foundation
* Distributed under the terms of the GNU General Public License v2
* $Id$
* Author: Martin Schlemmer <azarah@gentoo.org>
* az's lackey: Mike Frysinger <vapier@gentoo.org>
*/
#ifdef DEBUG
# define USE_DEBUG 1
#else
# define USE_DEBUG 0
#endif
#include <errno.h>
#include <libgen.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#define GCC_CONFIG "/usr/bin/gcc-config"
#define ENVD_BASE "/etc/env.d/05gcc"
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))
/* basename(3) is allowed to modify memory */
#undef basename
#define basename(path) \
({ \
char *__path = path; \
char *__ret = strrchr(__path, '/'); \
__ret ? __ret + 1 : __path; \
})
struct wrapper_data {
const char *name;
char *fullname, *bin, *path;
};
static const struct {
const char *alias;
const char *target;
} wrapper_aliases[] = {
{ "cc", "gcc" },
{ "f77", "gfortran" },
{ "f95", "gfortran" },
};
#define wrapper_warn(fmt, ...) fprintf(stderr, "%s" fmt "\n", "gcc-config: ", ## __VA_ARGS__)
#define wrapper_err(fmt, ...) ({ wrapper_warn("%s" fmt, "error: ", ## __VA_ARGS__); exit(1); })
#define wrapper_errp(fmt, ...) wrapper_err(fmt ": %s", ## __VA_ARGS__, strerror(errno))
#define wrapper_dbg(fmt, ...) ({ if (USE_DEBUG) wrapper_warn(fmt, ## __VA_ARGS__); })
#define xmemwrap(func, proto, use) \
static void *x ## func proto \
{ \
void *ret = func use; \
if (!ret) \
wrapper_err(#func "%s", ": out of memory"); \
return ret; \
}
xmemwrap(malloc, (size_t size), (size))
xmemwrap(strdup, (const char *s), (s))
/* check_for_target checks in path for the file we are seeking
* it returns 1 if found (with data->bin setup), 0 if not and
* negative on error
*/
static int check_for_target(char *path, struct wrapper_data *data)
{
struct stat sbuf;
char str[PATH_MAX + 1];
size_t path_len = strlen(path);
size_t len = path_len + strlen(data->name) + 2;
if (sizeof(str) < len)
wrapper_warn("path too long: %s", path);
strcpy(str, path);
str[path_len] = '/';
str[path_len+1] = '\0';
strcat(str, data->name);
/* Stat possible file to check that
* 1) it exist and is a regular file, and
* 2) it is not the wrapper itself, and
* 3) it is in a /gcc-bin/ directory tree
*/
if (strcmp(str, data->fullname) != 0 &&
strstr(str, "/gcc-bin/") != NULL &&
stat(str, &sbuf) == 0 &&
(S_ISREG(sbuf.st_mode) || S_ISLNK(sbuf.st_mode)))
{
wrapper_dbg("%s: found in %s", data->name, path);
data->bin = xstrdup(str);
return 1;
}
wrapper_dbg("%s: did not find in %s", data->name, path);
return 0;
}
static int find_target_in_path(struct wrapper_data *data)
{
char *token = NULL, *state = NULL;
char *str;
if (data->path == NULL)
return 0;
/* Make a copy since strtok_r will modify path */
str = xstrdup(data->path);
/* Find the first file with suitable name in PATH. The idea here is
* that we do not want to bind ourselfs to something static like the
* default profile, or some odd environment variable, but want to be
* able to build something with a non default gcc by just tweaking
* the PATH ... */
token = strtok_r(str, ":", &state);
while (token != NULL) {
if (check_for_target(token, data))
return 1;
token = strtok_r(NULL, ":", &state);
}
wrapper_dbg("%s: did not find in PATH", data->name);
return 0;
}
/* find_target_in_envd parses /etc/env.d/05gcc, and tries to
* extract PATH, which is set to the current profile's bin
* directory ...
*/
static int find_target_in_envd(struct wrapper_data *data, int cross_compile)
{
FILE *envfile = NULL;
char *token = NULL, *state;
char str[PATH_MAX + 1];
char *strp = str;
char envd_file[PATH_MAX + 1];
if (!cross_compile) {
/* for the sake of speed, we'll keep a symlink around for
* the native compiler. #190260
*/
snprintf(envd_file, sizeof(envd_file)-1, "/etc/env.d/gcc/.NATIVE");
} else {
char *ctarget, *end = strrchr(data->name, '-');
if (end == NULL)
return 0;
ctarget = xstrdup(data->name);
ctarget[end - data->name] = '\0';
snprintf(envd_file, PATH_MAX, "%s-%s", ENVD_BASE, ctarget);
free(ctarget);
}
envfile = fopen(envd_file, "r");
if (envfile == NULL)
return 0;
while (fgets(strp, PATH_MAX, envfile) != NULL) {
/* Keep reading ENVD_FILE until we get a line that
* starts with 'GCC_PATH=' ... keep 'PATH=' around
* for older gcc versions.
*/
if (strncmp(strp, "GCC_PATH=", strlen("GCC_PATH=")) &&
strncmp(strp, "PATH=", strlen("PATH=")))
continue;
token = strtok_r(strp, "=", &state);
if ((token != NULL) && token[0])
/* The second token should be the value of PATH .. */
token = strtok_r(NULL, "=", &state);
else
goto bail;
if ((token != NULL) && token[0]) {
strp = token;
/* A bash variable may be unquoted, quoted with " or
* quoted with ', so extract the value without those ..
*/
token = strtok(strp, "\n\"\'");
while (token != NULL) {
if (check_for_target(token, data)) {
fclose(envfile);
return 1;
}
token = strtok(NULL, "\n\"\'");
}
}
strp = str;
}
bail:
fclose(envfile);
return (cross_compile ? 0 : find_target_in_envd(data, 1));
}
static void find_wrapper_target(struct wrapper_data *data)
{
if (find_target_in_path(data))
return;
if (find_target_in_envd(data, 0))
return;
/* Only our wrapper is in PATH, so get the CC path using
* gcc-config and execute the real binary in there ...
*/
FILE *inpipe = popen(GCC_CONFIG " --get-bin-path", "r");
if (inpipe == NULL)
wrapper_errp("could not open pipe");
char str[PATH_MAX + 1];
if (fgets(str, PATH_MAX, inpipe) == 0)
wrapper_errp("could not get compiler binary path");
/* chomp! */
size_t plen = strlen(str);
if (str[plen-1] == '\n')
str[plen-1] = '\0';
data->bin = xmalloc(plen + 1 + strlen(data->name) + 1);
sprintf(data->bin, "%s/%s", str, data->name);
pclose(inpipe);
}
/* This function modifies PATH to have gcc's bin path appended */
static void modify_path(struct wrapper_data *data)
{
char *newpath = NULL, *token = NULL, *state;
char dname_data[PATH_MAX + 1], str[PATH_MAX + 1];
char *str2 = dname_data, *dname = dname_data;
size_t len = 0;
if (data->bin == NULL)
return;
if (data->path == NULL)
return;
snprintf(str2, PATH_MAX + 1, "%s", data->bin);
if ((dname = dirname(str2)) == NULL)
return;
/* Make a copy since strtok_r will modify path */
snprintf(str, PATH_MAX + 1, "%s", data->path);
token = strtok_r(str, ":", &state);
/* Check if we already appended our bin location to PATH */
if ((token != NULL) && token[0])
if (!strcmp(token, dname))
return;
len = strlen(dname) + strlen(data->path) + 2 + strlen("PATH") + 1;
newpath = xmalloc(len);
memset(newpath, 0, len);
snprintf(newpath, len, "PATH=%s:%s", dname, data->path);
putenv(newpath);
}
int main(int argc, char *argv[])
{
struct wrapper_data data;
memset(&data, 0, sizeof(data));
if (getenv("PATH"))
data.path = xstrdup(getenv("PATH"));
/* What should we find ? */
data.name = basename(argv[0]);
/* Allow for common compiler names like cc->gcc */
size_t i;
for (i = 0; i < ARRAY_SIZE(wrapper_aliases); ++i)
if (!strcmp(data.name, wrapper_aliases[i].alias))
data.name = wrapper_aliases[i].target;
/* What is the full name of our wrapper? */
data.fullname = xmalloc(strlen(data.name) + sizeof("/usr/bin/") + 1);
sprintf(data.fullname, "/usr/bin/%s", data.name);
find_wrapper_target(&data);
modify_path(&data);
free(data.path);
data.path = NULL;
/* Set argv[0] to the correct binary, else gcc can't find internal headers
* http://bugs.gentoo.org/8132
*/
argv[0] = data.bin;
/* Ok, lets do it one more time ... */
execv(data.bin, argv);
/* shouldn't have made it here if things worked ... */
wrapper_err("could not run/locate '%s'", data.name);
return 123;
}

View File

@ -1,59 +0,0 @@
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit flag-o-matic toolchain-funcs multilib
# Version of .c wrapper to use
W_VER="1.5.1"
DESCRIPTION="Utility to change the gcc compiler being used"
HOMEPAGE="https://www.gentoo.org/"
SRC_URI=""
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc ~sparc-fbsd x86 ~x86-fbsd"
IUSE=""
RDEPEND="!app-admin/eselect-compiler"
S=${WORKDIR}
src_unpack() {
cp "${FILESDIR}"/wrapper-${W_VER}.c "${S}"/wrapper.c || die
}
src_compile() {
strip-flags
emake CC="$(tc-getCC)" wrapper || die "compile wrapper"
}
src_install() {
newbin "${FILESDIR}"/${PN}-${PV} ${PN} || die "install gcc-config"
sed -i \
-e "s:@GENTOO_LIBDIR@:$(get_libdir):g" \
"${D}"/usr/bin/${PN}
exeinto /usr/$(get_libdir)/misc
newexe wrapper gcc-config || die "install wrapper"
}
pkg_postinst() {
# Scrub eselect-compiler remains
if [[ -e ${ROOT}/etc/env.d/05compiler ]] ; then
rm -f "${ROOT}"/etc/env.d/05compiler
fi
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config
# Do we have a valid multi ver setup ?
if gcc-config --get-current-profile &>/dev/null ; then
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
[[ -L ${ROOT}/usr/include/g++ ]] && rm -f "${ROOT}"/usr/include/g++
[[ -L ${ROOT}/usr/include/g++-v3 ]] && rm -f "${ROOT}"/usr/include/g++-v3
gcc-config $(/usr/bin/gcc-config --get-current-profile)
fi
}

View File

@ -1,61 +0,0 @@
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit flag-o-matic toolchain-funcs multilib
# Version of .c wrapper to use
W_VER="1.5.2"
DESCRIPTION="Utility to change the gcc compiler being used"
HOMEPAGE="https://www.gentoo.org/"
SRC_URI=""
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 -sparc-fbsd -x86-fbsd"
IUSE=""
RDEPEND="!app-admin/eselect-compiler"
S=${WORKDIR}
src_unpack() {
cp "${FILESDIR}"/wrapper-${W_VER}.c "${S}"/wrapper.c || die
}
src_compile() {
strip-flags
emake CC="$(tc-getCC)" wrapper || die "compile wrapper"
}
src_install() {
newbin "${FILESDIR}"/${PN}-${PV} ${PN} || die "install gcc-config"
sed -i \
-e "s:@GENTOO_LIBDIR@:$(get_libdir):g" \
"${D}"/usr/bin/${PN}
exeinto /usr/$(get_libdir)/misc
newexe wrapper gcc-config || die "install wrapper"
}
pkg_postinst() {
# Scrub eselect-compiler remains
if [[ -e ${ROOT}/etc/env.d/05compiler ]] ; then
rm -f "${ROOT}"/etc/env.d/05compiler
fi
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
[[ -L ${ROOT}/usr/include/g++ ]] && rm -f "${ROOT}"/usr/include/g++
[[ -L ${ROOT}/usr/include/g++-v3 ]] && rm -f "${ROOT}"/usr/include/g++-v3
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
}

View File

@ -1,61 +0,0 @@
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit flag-o-matic toolchain-funcs multilib
# Version of .c wrapper to use
W_VER="1.5.2"
DESCRIPTION="Utility to change the gcc compiler being used"
HOMEPAGE="https://www.gentoo.org/"
SRC_URI=""
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd"
IUSE=""
RDEPEND="!app-admin/eselect-compiler"
S=${WORKDIR}
src_unpack() {
cp "${FILESDIR}"/wrapper-${W_VER}.c "${S}"/wrapper.c || die
}
src_compile() {
strip-flags
emake CC="$(tc-getCC)" wrapper || die "compile wrapper"
}
src_install() {
newbin "${FILESDIR}"/${PN}-${PV} ${PN} || die "install gcc-config"
sed -i \
-e "s:@GENTOO_LIBDIR@:$(get_libdir):g" \
"${D}"/usr/bin/${PN}
exeinto /usr/$(get_libdir)/misc
newexe wrapper gcc-config || die "install wrapper"
}
pkg_postinst() {
# Scrub eselect-compiler remains
if [[ -e ${ROOT}/etc/env.d/05compiler ]] ; then
rm -f "${ROOT}"/etc/env.d/05compiler
fi
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
[[ -L ${ROOT}/usr/include/g++ ]] && rm -f "${ROOT}"/usr/include/g++
[[ -L ${ROOT}/usr/include/g++-v3 ]] && rm -f "${ROOT}"/usr/include/g++-v3
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
}

View File

@ -1,61 +0,0 @@
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit flag-o-matic toolchain-funcs multilib
# Version of .c wrapper to use
W_VER="1.5.2"
DESCRIPTION="Utility to change the gcc compiler being used"
HOMEPAGE="https://www.gentoo.org/"
SRC_URI=""
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~sparc-fbsd ~x86-fbsd"
IUSE=""
RDEPEND="!app-admin/eselect-compiler"
S=${WORKDIR}
src_unpack() {
cp "${FILESDIR}"/wrapper-${W_VER}.c "${S}"/wrapper.c || die
}
src_compile() {
strip-flags
emake CC="$(tc-getCC)" wrapper || die "compile wrapper"
}
src_install() {
newbin "${FILESDIR}"/${PN}-${PV} ${PN} || die "install gcc-config"
sed -i \
-e "s:@GENTOO_LIBDIR@:$(get_libdir):g" \
"${D}"/usr/bin/${PN}
exeinto /usr/$(get_libdir)/misc
newexe wrapper gcc-config || die "install wrapper"
}
pkg_postinst() {
# Scrub eselect-compiler remains
if [[ -e ${ROOT}/etc/env.d/05compiler ]] ; then
rm -f "${ROOT}"/etc/env.d/05compiler
fi
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
[[ -L ${ROOT}/usr/include/g++ ]] && rm -f "${ROOT}"/usr/include/g++
[[ -L ${ROOT}/usr/include/g++-v3 ]] && rm -f "${ROOT}"/usr/include/g++-v3
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
}

View File

@ -1,61 +0,0 @@
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit flag-o-matic toolchain-funcs multilib
# Version of .c wrapper to use
W_VER="1.5.2"
DESCRIPTION="Utility to change the gcc compiler being used"
HOMEPAGE="https://www.gentoo.org/"
SRC_URI=""
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~sparc-fbsd ~x86-fbsd"
IUSE=""
RDEPEND="!app-admin/eselect-compiler"
S=${WORKDIR}
src_unpack() {
cp "${FILESDIR}"/wrapper-${W_VER}.c "${S}"/wrapper.c || die
}
src_compile() {
strip-flags
emake CC="$(tc-getCC)" wrapper || die "compile wrapper"
}
src_install() {
newbin "${FILESDIR}"/${PN}-${PV} ${PN} || die "install gcc-config"
sed -i \
-e "s:@GENTOO_LIBDIR@:$(get_libdir):g" \
"${D}"/usr/bin/${PN}
exeinto /usr/$(get_libdir)/misc
newexe wrapper gcc-config || die "install wrapper"
}
pkg_postinst() {
# Scrub eselect-compiler remains
if [[ -e ${ROOT}/etc/env.d/05compiler ]] ; then
rm -f "${ROOT}"/etc/env.d/05compiler
fi
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
[[ -L ${ROOT}/usr/include/g++ ]] && rm -f "${ROOT}"/usr/include/g++
[[ -L ${ROOT}/usr/include/g++-v3 ]] && rm -f "${ROOT}"/usr/include/g++-v3
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
}

View File

@ -1,47 +0,0 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit unpacker toolchain-funcs multilib
DESCRIPTION="utility to manage compilers"
HOMEPAGE="https://cgit.gentoo.org/proj/gcc-config.git"
SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~vapier/dist/${P}.tar.xz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd"
IUSE=""
src_compile() {
emake CC="$(tc-getCC)" || die
}
src_install() {
emake \
DESTDIR="${D}" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)" \
install || die
}
pkg_postinst() {
# Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler &
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config &
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} &
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
wait
}

View File

@ -1,47 +0,0 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit unpacker toolchain-funcs multilib
DESCRIPTION="utility to manage compilers"
HOMEPAGE="https://cgit.gentoo.org/proj/gcc-config.git"
SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~vapier/dist/${P}.tar.xz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
IUSE=""
src_compile() {
emake CC="$(tc-getCC)" || die
}
src_install() {
emake \
DESTDIR="${D}" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)" \
install || die
}
pkg_postinst() {
# Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler &
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config &
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} &
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
wait
}

View File

@ -1,47 +0,0 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit unpacker toolchain-funcs multilib
DESCRIPTION="utility to manage compilers"
HOMEPAGE="https://cgit.gentoo.org/proj/gcc-config.git"
SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~vapier/dist/${P}.tar.xz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
IUSE=""
src_compile() {
emake CC="$(tc-getCC)" || die
}
src_install() {
emake \
DESTDIR="${D}" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)" \
install || die
}
pkg_postinst() {
# Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler &
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config &
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} &
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
wait
}

View File

@ -1,47 +0,0 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
inherit unpacker toolchain-funcs multilib
DESCRIPTION="utility to manage compilers"
HOMEPAGE="https://cgit.gentoo.org/proj/gcc-config.git"
SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~vapier/dist/${P}.tar.xz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
IUSE=""
src_compile() {
emake CC="$(tc-getCC)" || die
}
src_install() {
emake \
DESTDIR="${D}" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)" \
install || die
}
pkg_postinst() {
# Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler &
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config &
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} &
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
wait
}

View File

@ -1,6 +1,5 @@
# Copyright 1999-2015 Gentoo Foundation # Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2 # Distributed under the terms of the GNU General Public License v2
# $Id$
EAPI=5 EAPI=5
@ -13,7 +12,7 @@ SRC_URI="mirror://gentoo/${P}.tar.xz
LICENSE="GPL-2" LICENSE="GPL-2"
SLOT="0" SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd" KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~x86-fbsd"
IUSE="" IUSE=""
RDEPEND=">=sys-apps/gentoo-functions-0.10" RDEPEND=">=sys-apps/gentoo-functions-0.10"
@ -38,9 +37,6 @@ pkg_postinst() {
# Scrub eselect-compiler remains # Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler & rm -f "${ROOT}"/etc/env.d/05compiler &
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config &
# We not longer use the /usr/include/g++-v3 hacks, as # We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ... # it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} & rm -f "${ROOT}"/usr/include/g++{,-v3} &

View File

@ -1,21 +1,26 @@
# Copyright 1999-2015 Gentoo Foundation # Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2 # Distributed under the terms of the GNU General Public License v2
# $Id$
inherit unpacker toolchain-funcs multilib EAPI=6
DESCRIPTION="utility to manage compilers" inherit eutils toolchain-funcs multilib
DESCRIPTION="Utility to manage compilers"
HOMEPAGE="https://gitweb.gentoo.org/proj/gcc-config.git/" HOMEPAGE="https://gitweb.gentoo.org/proj/gcc-config.git/"
SRC_URI="mirror://gentoo/${P}.tar.xz SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~vapier/dist/${P}.tar.xz" https://dev.gentoo.org/~dilfridge/distfiles/${P}.tar.xz"
LICENSE="GPL-2" LICENSE="GPL-2"
SLOT="0" SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd" KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd"
IUSE="" IUSE=""
RDEPEND=">=sys-apps/gentoo-functions-0.10"
src_compile() { src_compile() {
emake CC="$(tc-getCC)" || die emake CC="$(tc-getCC)" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)"
} }
src_install() { src_install() {
@ -23,16 +28,13 @@ src_install() {
DESTDIR="${D}" \ DESTDIR="${D}" \
PV="${PV}" \ PV="${PV}" \
SUBLIBDIR="$(get_libdir)" \ SUBLIBDIR="$(get_libdir)" \
install || die install
} }
pkg_postinst() { pkg_postinst() {
# Scrub eselect-compiler remains # Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler & rm -f "${ROOT}"/etc/env.d/05compiler &
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config &
# We not longer use the /usr/include/g++-v3 hacks, as # We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ... # it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} & rm -f "${ROOT}"/usr/include/g++{,-v3} &

View File

@ -0,0 +1,54 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=6
inherit toolchain-funcs
if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/gcc-config.git"
inherit git-r3
else
SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~dilfridge/distfiles/${P}.tar.xz"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd"
fi
DESCRIPTION="Utility to manage compilers"
HOMEPAGE="https://gitweb.gentoo.org/proj/gcc-config.git/"
LICENSE="GPL-2"
SLOT="0"
IUSE=""
RDEPEND=">=sys-apps/gentoo-functions-0.10"
src_compile() {
emake CC="$(tc-getCC)" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)"
}
src_install() {
emake \
DESTDIR="${D}" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)" \
install
}
pkg_postinst() {
# Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler &
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} &
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
wait
}

View File

@ -1,21 +1,31 @@
# Copyright 1999-2015 Gentoo Foundation # Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2 # Distributed under the terms of the GNU General Public License v2
# $Id$
inherit unpacker toolchain-funcs multilib EAPI=6
DESCRIPTION="utility to manage compilers" inherit toolchain-funcs
if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/gcc-config.git"
inherit git-r3
else
SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~slyfox/distfiles/${P}.tar.xz"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd"
fi
DESCRIPTION="Utility to manage compilers"
HOMEPAGE="https://gitweb.gentoo.org/proj/gcc-config.git/" HOMEPAGE="https://gitweb.gentoo.org/proj/gcc-config.git/"
SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~vapier/dist/${P}.tar.xz"
LICENSE="GPL-2" LICENSE="GPL-2"
SLOT="0" SLOT="0"
KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
IUSE="" IUSE=""
RDEPEND=">=sys-apps/gentoo-functions-0.10"
src_compile() { src_compile() {
emake CC="$(tc-getCC)" || die emake CC="$(tc-getCC)" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)"
} }
src_install() { src_install() {
@ -23,16 +33,13 @@ src_install() {
DESTDIR="${D}" \ DESTDIR="${D}" \
PV="${PV}" \ PV="${PV}" \
SUBLIBDIR="$(get_libdir)" \ SUBLIBDIR="$(get_libdir)" \
install || die install
} }
pkg_postinst() { pkg_postinst() {
# Scrub eselect-compiler remains # Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler & rm -f "${ROOT}"/etc/env.d/05compiler &
# Make sure old versions dont exist #79062
rm -f "${ROOT}"/usr/sbin/gcc-config &
# We not longer use the /usr/include/g++-v3 hacks, as # We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ... # it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} & rm -f "${ROOT}"/usr/include/g++{,-v3} &

View File

@ -0,0 +1,54 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=6
inherit toolchain-funcs
if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/gcc-config.git"
inherit git-r3
else
SRC_URI="mirror://gentoo/${P}.tar.xz
https://dev.gentoo.org/~dilfridge/distfiles/${P}.tar.xz"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd"
fi
DESCRIPTION="Utility to manage compilers"
HOMEPAGE="https://gitweb.gentoo.org/proj/gcc-config.git/"
LICENSE="GPL-2"
SLOT="0"
IUSE=""
RDEPEND=">=sys-apps/gentoo-functions-0.10"
src_compile() {
emake CC="$(tc-getCC)" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)"
}
src_install() {
emake \
DESTDIR="${D}" \
PV="${PV}" \
SUBLIBDIR="$(get_libdir)" \
install
}
pkg_postinst() {
# Scrub eselect-compiler remains
rm -f "${ROOT}"/etc/env.d/05compiler &
# We not longer use the /usr/include/g++-v3 hacks, as
# it is not needed ...
rm -f "${ROOT}"/usr/include/g++{,-v3} &
# Do we have a valid multi ver setup ?
local x
for x in $(gcc-config -C -l 2>/dev/null | awk '$NF == "*" { print $2 }') ; do
gcc-config ${x}
done
wait
}