summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2020-06-19 19:15:21 +0100
committerSergei Trofimovich <slyfox@gentoo.org>2020-06-19 21:52:43 +0100
commit92e383747ffc633ff6e85a02bf8cdb856eb1bcdc (patch)
tree56e3a5747be4479254f44e7e932eab6604e47c78
parentmail-client/neomutt: Version bump to 2020-06-19 (diff)
downloadgentoo-92e383747ffc633ff6e85a02bf8cdb856eb1bcdc.tar.gz
gentoo-92e383747ffc633ff6e85a02bf8cdb856eb1bcdc.tar.bz2
gentoo-92e383747ffc633ff6e85a02bf8cdb856eb1bcdc.zip
toolchain.eclass: drop fix_libtool_files.sh
fixlafiles.awk can mangle two things in .la fils: 1. patch reference 'from .../libstdc++.la' to '-lstdc++' 2. change ${CHOST} when user switches CHOST and rebuilds the system [1.] is not relevant since gcc-4 in Gentoo where we started deleting libstdc++.la on gcc installation. Nothing should embed libstdc++.la paths anymore. [2.] is a rare one-off step that has a lot more caveats than just .la file patching. Generally .la files are tracked by package manager and should not be changed after they are installed on disk. 'fix_libtool_files.sh' breaks that invariant. On top of that portage's FEATURES=fixlafiles removes nested .la files references. Let's remove 'fix_libtool_files.sh' and 'fixlafiles.awk' completely. If really needed we can reintroduce it as a separate tool. Closes: https://bugs.gentoo.org/722554 Closes: https://bugs.gentoo.org/657330 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
-rw-r--r--dev-lang/gnat-gpl/files/awk/fixlafiles.awk-no_gcc_la334
-rw-r--r--dev-lang/gnat-gpl/files/fix_libtool_files.sh66
-rw-r--r--eclass/toolchain.eclass40
-rw-r--r--sys-devel/gcc/files/awk/fixlafiles.awk313
-rw-r--r--sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la334
-rw-r--r--sys-devel/gcc/files/fix_libtool_files.sh66
6 files changed, 9 insertions, 1144 deletions
diff --git a/dev-lang/gnat-gpl/files/awk/fixlafiles.awk-no_gcc_la b/dev-lang/gnat-gpl/files/awk/fixlafiles.awk-no_gcc_la
deleted file mode 100644
index 066c8d21681f..000000000000
--- a/dev-lang/gnat-gpl/files/awk/fixlafiles.awk-no_gcc_la
+++ /dev/null
@@ -1,334 +0,0 @@
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-#
-# Helper functions
-#
-function printn(string) {
- printf("%s", string)
-}
-function einfo(string) {
- printf(" \033[32;01m*\033[0m %s\n", string)
-}
-function einfon(string) {
- printf(" \033[32;01m*\033[0m %s", string)
-}
-function ewarn(string) {
- printf(" \033[33;01m*\033[0m %s\n", string)
-}
-function ewarnn(string) {
- printf(" \033[33;01m*\033[0m %s", string)
-}
-function eerror(string) {
- printf(" \033[31;01m*\033[0m %s\n", string)
-}
-
-#
-# assert(condition, errmsg)
-# assert that a condition is true. Otherwise exit.
-#
-function assert(condition, string) {
- if (! condition) {
- printf("%s:%d: assertion failed: %s\n",
- FILENAME, FNR, string) > "/dev/stderr"
- _assert_exit = 1
- exit 1
- }
-}
-
-#
-# system(command, return)
-# wrapper that normalizes return codes ...
-#
-function dosystem(command, ret) {
- ret = 0
- ret = system(command)
- if (ret == 0)
- return 1
- else
- return 0
-}
-
-#
-# parse_ld_conf(config_file)
-#
-function parse_ld_conf(conf, pipe, ldsoconf_data, CHILD, y) {
- pipe = "cd /etc; cat " conf " | sort 2>/dev/null"
- while(((pipe) | getline ldsoconf_data) > 0) {
- if (ldsoconf_data ~ /^[[:space:]]*#/)
- continue
- if (ldsoconf_data == "")
- continue
-
- # Handle the "include" keyword
- if (ldsoconf_data ~ /^include /) {
- sub(/^include /, "", ldsoconf_data)
- parse_ld_conf(ldsoconf_data)
- continue
- }
-
- # Remove any trailing comments
- sub(/#.*$/, "", ldsoconf_data)
- # Remove any trailing spaces
- sub(/[[:space:]]+$/, "", ldsoconf_data)
- # Eat duplicate slashes
- sub(/\/\//, "/", ldsoconf_data)
- # Prune trailing /
- sub(/\/$/, "", ldsoconf_data)
-
- #
- # Drop the directory if its a child directory of
- # one that was already added ...
- # For example, if we have:
- # /usr/lib /usr/libexec /usr/lib/mozilla /usr/lib/nss
- # We really just want to save /usr/lib /usr/libexec
- #
- CHILD = 0
- for (y in DIRLIST) {
- if (ldsoconf_data ~ "^" DIRLIST[y] "(/|$)") {
- CHILD = 1
- break
- }
- }
- if (CHILD) continue
-
- DIRLIST[++LIBCOUNT] = ldsoconf_data
- }
- close(pipe)
-}
-
-BEGIN {
- #
- # Get our variables from environment
- #
- OLDVER = ENVIRON["OLDVER"]
- OLDCHOST = ENVIRON["OLDCHOST"]
-
- if (OLDVER == "") {
- eerror("Could not get OLDVER!");
- exit 1
- }
-
- # Setup some sane defaults
- LIBCOUNT = 2
- HAVE_GCC34 = 0
- DIRLIST[1] = "/lib"
- DIRLIST[2] = "/usr/lib"
-
- #
- # Walk /etc/ld.so.conf to discover all our library paths
- #
- parse_ld_conf("/etc/ld.so.conf")
-
- #
- # Get line from gcc's output containing CHOST
- #
- pipe = "gcc -print-file-name=libgcc.a 2>/dev/null"
- if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) {
- close(pipe)
-
- # If we fail to get the CHOST, see if we can get the CHOST
- # portage thinks we are using ...
- pipe = "/usr/bin/portageq envvar 'CHOST'"
- assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST")
- } else {
- # Check pre gcc-3.4.x versions
- CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST)
-
- if (CHOST == TMP_CHOST || CHOST == "") {
- # Check gcc-3.4.x or later
- CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST);
-
- if (CHOST == TMP_CHOST || CHOST == "")
- CHOST = ""
- else
- HAVE_GCC34 = 1
- }
- }
- close(pipe)
-
- if (CHOST == "") {
- eerror("Could not get gcc's CHOST!")
- exit 1
- }
-
- if (OLDCHOST != "")
- if (OLDCHOST == CHOST)
- OLDCHOST = ""
-
- GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/"
- GCCLIBPREFIX_NEW = "/usr/lib/gcc/"
-
- if (HAVE_GCC34)
- GCCLIBPREFIX = GCCLIBPREFIX_NEW
- else
- GCCLIBPREFIX = GCCLIBPREFIX_OLD
-
- GCCLIB = GCCLIBPREFIX CHOST
-
- if (OLDCHOST != "") {
- OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST
- OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST
- }
-
- # Get current gcc's version
- pipe = "gcc -dumpversion"
- assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)")
- close(pipe)
-
- if (NEWVER == "") {
- eerror("Could not get gcc's version!")
- exit 1
- }
-
- # Nothing to do ?
- # NB: Do not check for (OLDVER == NEWVER) anymore, as we might need to
- # replace libstdc++.la ....
- if ((OLDVER == "") && (OLDCHOST == ""))
- exit 0
-
- #
- # Ok, now let's scan for the .la files and actually fix them up
- #
- for (x = 1; x <= LIBCOUNT; x++) {
- # Do nothing if the target dir is gcc's internal library path
- if (DIRLIST[x] ~ GCCLIBPREFIX_OLD ||
- DIRLIST[x] ~ GCCLIBPREFIX_NEW)
- continue
-
- einfo(" [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...")
-
- pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null"
- while (((pipe) | getline la_files) > 0) {
-
- # Do nothing if the .la file is located in gcc's internal lib path
- if (la_files ~ GCCLIBPREFIX_OLD ||
- la_files ~ GCCLIBPREFIX_NEW)
- continue
-
- CHANGED = 0
- CHOST_CHANGED = 0
-
- # See if we need to fix the .la file
- while ((getline la_data < (la_files)) > 0) {
- if (OLDCHOST != "") {
- if ((gsub(OLDGCCLIB1 "[/[:space:]]+",
- GCCLIB, la_data) > 0) ||
- (gsub(OLDGCCLIB2 "[/[:space:]]+",
- GCCLIB, la_data) > 0)) {
- CHANGED = 1
- CHOST_CHANGED = 1
- }
- }
- if (OLDVER != NEWVER) {
- if ((gsub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "[/[:space:]]*",
- GCCLIB "/" NEWVER, la_data) > 0) ||
- (gsub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "[/[:space:]]*",
- GCCLIB "/" NEWVER, la_data) > 0))
- CHANGED = 1
- }
- # We now check if we have libstdc++.la, as we remove the
- # libtool linker scripts for gcc ...
- # We do this last, as we only match the new paths
- if (gsub(GCCLIB "/" NEWVER "/libstdc\\+\\+\\.la",
- "-lstdc++", la_data) > 0)
- CHANGED = 1
- }
- close(la_files)
-
- # Do the actual changes in a second loop, as we can then
- # verify that CHOST_CHANGED among things is correct ...
- if (CHANGED) {
- ewarnn(" FIXING: " la_files " ...[")
-
- # Clear the temp file (removing rather than '>foo' is better
- # out of a security point of view?)
- dosystem("rm -f " la_files ".new")
-
- while ((getline la_data < (la_files)) > 0) {
- if (OLDCHOST != "") {
- tmpstr = gensub(OLDGCCLIB1 "([/[:space:]]+)",
- GCCLIB "\\1", "g", la_data)
- tmpstr = gensub(OLDGCCLIB2 "([/[:space:]]+)",
- GCCLIB "\\1", "g", tmpstr)
-
- if (la_data != tmpstr) {
- printn("c")
- la_data = tmpstr
- }
-
- if (CHOST_CHANGED > 0) {
- # We try to be careful about CHOST changes outside
- # the gcc library path (meaning we cannot match it
- # via /GCCLIBPREFIX CHOST/) ...
-
- # Catch:
- #
- # dependency_libs=' -L/usr/CHOST/{bin,lib}'
- #
- gsub("-L/usr/" OLDCHOST "/",
- "-L/usr/" CHOST "/", la_data)
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib'
- #
- la_data = gensub("(" GCCLIB "/[^[:space:]]+)/" OLDCHOST "/",
- "\\1/" CHOST "/", "g", la_data)
- }
- }
-
- if (OLDVER != NEWVER) {
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc/CHOST/VER'
- #
- tmpstr = gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)",
- GCCLIB "/" NEWVER "\\1", "g", la_data)
- tmpstr = gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)",
- GCCLIB "/" NEWVER "\\1", "g", tmpstr)
-
- if (la_data != tmpstr) {
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc-lib/../../CHOST/lib'
- #
- # in cases where we have gcc34
- tmpstr = gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)",
- GCCLIBPREFIX "\\1", "g", tmpstr)
- tmpstr = gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)",
- GCCLIBPREFIX "\\1", "g", tmpstr)
- printn("v")
- la_data = tmpstr
- }
- }
-
- # We now check if we have libstdc++.la, as we remove the
- # libtool linker scripts for gcc and any referencese in any
- # libtool linker scripts.
- # We do this last, as we only match the new paths
- tmpstr = gensub(GCCLIB "/" NEWVER "/libstdc\\+\\+\\.la",
- "-lstdc++", "g", la_data);
- if (la_data != tmpstr) {
- printn("l")
- la_data = tmpstr
- }
-
- print la_data >> (la_files ".new")
- }
-
- if (CHANGED)
- print "]"
-
- close(la_files)
- close(la_files ".new")
-
- assert(dosystem("mv -f " la_files ".new " la_files),
- "dosystem(\"mv -f " la_files ".new " la_files "\")")
- }
- }
-
- close(pipe)
- }
-}
-
-# vim:ts=4
diff --git a/dev-lang/gnat-gpl/files/fix_libtool_files.sh b/dev-lang/gnat-gpl/files/fix_libtool_files.sh
deleted file mode 100644
index 28f9beb36bac..000000000000
--- a/dev-lang/gnat-gpl/files/fix_libtool_files.sh
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/bin/sh
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-usage() {
-cat << "USAGE_END"
-Usage: fix_libtool_files.sh <old-gcc-version> [--oldarch <old-CHOST>]
-
- Where <old-gcc-version> is the version number of the
- previous gcc version. For example, if you updated to
- gcc-3.2.1, and you had gcc-3.2 installed, run:
-
- # fix_libtool_files.sh 3.2
-
- If you updated to gcc-3.2.3, and the old CHOST was i586-pc-linux-gnu
- but you now have CHOST as i686-pc-linux-gnu, run:
-
- # fix_libtool_files.sh 3.2 --oldarch i586-pc-linux-gnu
-
- Note that if only the CHOST and not the version changed, you can run
- it with the current version and the '--oldarch <old-CHOST>' arguments,
- and it will do the expected:
-
- # fix_libtool_files.sh `gcc -dumpversion` --oldarch i586-pc-linux-gnu
-
-USAGE_END
- exit 1
-}
-
-case $2 in
---oldarch) [ $# -ne 3 ] && usage ;;
-*) [ $# -ne 1 ] && usage ;;
-esac
-
-ARGV1=$1
-ARGV2=$2
-ARGV3=$3
-
-. /etc/profile || exit 1
-
-if [ ${EUID:-0} -ne 0 ] ; then
- echo "${0##*/}: Must be root."
- exit 1
-fi
-
-# make sure the files come out sane
-umask 0022
-
-OLDCHOST=
-[ "${ARGV2}" = "--oldarch" ] && OLDCHOST=${ARGV3}
-
-AWKDIR="/usr/share/gcc-data"
-
-if [ ! -r "${AWKDIR}/fixlafiles.awk" ] ; then
- echo "${0##*/}: ${AWKDIR}/fixlafiles.awk does not exist!"
- exit 1
-fi
-
-OLDVER=${ARGV1}
-
-export OLDVER OLDCHOST
-
-echo "Scanning libtool files for hardcoded gcc library paths..."
-exec gawk -f "${AWKDIR}/fixlafiles.awk"
-
-# vim:ts=4
diff --git a/eclass/toolchain.eclass b/eclass/toolchain.eclass
index 1e164957b2b8..8384e565d867 100644
--- a/eclass/toolchain.eclass
+++ b/eclass/toolchain.eclass
@@ -1914,13 +1914,8 @@ toolchain_src_install() {
# prune empty dirs left behind
find "${ED}" -depth -type d -delete 2>/dev/null
- # Rather install the script, else portage with changing $FILESDIR
- # between binary and source package borks things ....
if ! is_crosscompile && [[ ${PN} != "kgcc64" ]] ; then
- insinto "${DATAPATH#${EPREFIX}}"
- newins "$(prefixify_ro "${FILESDIR}"/awk/fixlafiles.awk-no_gcc_la)" fixlafiles.awk || die
exeinto "${DATAPATH#${EPREFIX}}"
- doexe "$(prefixify_ro "${FILESDIR}"/fix_libtool_files.sh)" || die
doexe "${FILESDIR}"/c{89,99} || die
fi
@@ -2225,24 +2220,12 @@ toolchain_pkg_postinst() {
fi
if ! is_crosscompile && [[ ${PN} != "kgcc64" ]] ; then
- echo
- ewarn "If you have issues with packages unable to locate libstdc++.la,"
- ewarn "then try running 'fix_libtool_files.sh' on the old gcc versions."
- echo
- ewarn "You might want to review the GCC upgrade guide when moving between"
- ewarn "major versions (like 4.2 to 4.3):"
- ewarn "https://wiki.gentoo.org/wiki/Upgrading_GCC"
- echo
-
- # Clean up old paths
- rm -f "${EROOT%/}"/*/rcscripts/awk/fixlafiles.awk "${EROOT%/}"/sbin/fix_libtool_files.sh
- rmdir "${EROOT%/}"/*/rcscripts{/awk,} 2>/dev/null
-
- mkdir -p "${EROOT%/}"/usr/{share/gcc-data,sbin,bin}
- # DATAPATH has EPREFIX already, use ROOT with it
- cp "${ROOT%/}${DATAPATH}"/fixlafiles.awk "${EROOT%/}"/usr/share/gcc-data/ || die
- cp "${ROOT%/}${DATAPATH}"/fix_libtool_files.sh "${EROOT%/}"/usr/sbin/ || die
+ # gcc stopped installing .la files fixer in June 2020.
+ # Cleaning can be removed in June 2022.
+ rm -f "${EROOT%/}"/sbin/fix_libtool_files.sh
+ rm -f "${EROOT%/}"/usr/share/gcc-data/fixlafiles.awk
+ mkdir -p "${EROOT%/}"/usr/bin
# Since these aren't critical files and portage sucks with
# handling of binpkgs, don't require these to be found
cp "${ROOT%/}${DATAPATH}"/c{89,99} "${EROOT%/}"/usr/bin/ 2>/dev/null
@@ -2271,15 +2254,10 @@ toolchain_pkg_postrm() {
return 0
fi
- # ROOT isnt handled by the script
- [[ ${ROOT%/} ]] && return 0
-
- if [[ ! -e ${LIBPATH}/libstdc++.so ]] ; then
- einfo "Running 'fix_libtool_files.sh ${GCC_RELEASE_VER}'"
- fix_libtool_files.sh ${GCC_RELEASE_VER}
- fi
-
- return 0
+ # gcc stopped installing .la files fixer in June 2020.
+ # Cleaning can be removed in June 2022.
+ rm -f "${EROOT%/}"/sbin/fix_libtool_files.sh
+ rm -f "${EROOT%/}"/usr/share/gcc-data/fixlafiles.awk
}
do_gcc_config() {
diff --git a/sys-devel/gcc/files/awk/fixlafiles.awk b/sys-devel/gcc/files/awk/fixlafiles.awk
deleted file mode 100644
index aa2ecb60266e..000000000000
--- a/sys-devel/gcc/files/awk/fixlafiles.awk
+++ /dev/null
@@ -1,313 +0,0 @@
-# Copyright 1999-2005 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-#
-# Helper functions
-#
-function printn(string) {
- printf("%s", string)
-}
-function einfo(string) {
- printf(" \033[32;01m*\033[0m %s\n", string)
-}
-function einfon(string) {
- printf(" \033[32;01m*\033[0m %s", string)
-}
-function ewarn(string) {
- printf(" \033[33;01m*\033[0m %s\n", string)
-}
-function ewarnn(string) {
- printf(" \033[33;01m*\033[0m %s", string)
-}
-function eerror(string) {
- printf(" \033[31;01m*\033[0m %s\n", string)
-}
-
-#
-# assert(condition, errmsg)
-# assert that a condition is true. Otherwise exit.
-#
-function assert(condition, string) {
- if (! condition) {
- printf("%s:%d: assertion failed: %s\n",
- FILENAME, FNR, string) > "/dev/stderr"
- _assert_exit = 1
- exit 1
- }
-}
-
-#
-# system(command, return)
-# wrapper that normalizes return codes ...
-#
-function dosystem(command, ret) {
- ret = 0
- ret = system(command)
- if (ret == 0)
- return 1
- else
- return 0
-}
-
-BEGIN {
- #
- # Get our variables from environment
- #
- OLDVER = ENVIRON["OLDVER"]
- OLDCHOST = ENVIRON["OLDCHOST"]
-
- if (OLDVER == "") {
- eerror("Could not get OLDVER!");
- exit 1
- }
-
- # Setup some sane defaults
- LIBCOUNT = 2
- HAVE_GCC34 = 0
- DIRLIST[1] = "/lib"
- DIRLIST[2] = "/usr/lib"
-
- #
- # Walk /etc/ld.so.conf to discover all our library paths
- #
- pipe = "cat /etc/ld.so.conf | sort 2>/dev/null"
- while(((pipe) | getline ldsoconf_data) > 0) {
- if (ldsoconf_data !~ /^[[:space:]]*#/) {
- if (ldsoconf_data == "") continue
-
- # Remove any trailing comments
- sub(/#.*$/, "", ldsoconf_data)
- # Remove any trailing spaces
- sub(/[[:space:]]+$/, "", ldsoconf_data)
-
- # If there's more than one path per line, split
- # it up as if they were sep lines
- split(ldsoconf_data, nodes, /[:,[:space:]]/)
-
- # Now add the rest from ld.so.conf
- for (x in nodes) {
- # wtf does this line do ?
- sub(/=.*/, "", nodes[x])
- # Prune trailing /
- sub(/\/$/, "", nodes[x])
-
- if (nodes[x] == "") continue
-
- #
- # Drop the directory if its a child directory of
- # one that was already added ...
- # For example, if we have:
- # /usr/lib /usr/libexec /usr/lib/mozilla /usr/lib/nss
- # We really just want to save /usr/lib /usr/libexec
- #
- CHILD = 0
- for (y in DIRLIST) {
- if (nodes[x] ~ "^" DIRLIST[y] "(/|$)") {
- CHILD = 1
- break
- }
- }
- if (CHILD) continue
-
- DIRLIST[++LIBCOUNT] = nodes[x]
- }
- }
- }
- close(pipe)
-
- #
- # Get line from gcc's output containing CHOST
- #
- pipe = "gcc -print-file-name=libgcc.a 2>/dev/null"
- if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) {
- close(pipe)
-
- # If we fail to get the CHOST, see if we can get the CHOST
- # portage thinks we are using ...
- pipe = "/usr/bin/portageq envvar 'CHOST'"
- assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST")
- } else {
- # Check pre gcc-3.4.x versions
- CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST)
-
- if (CHOST == TMP_CHOST || CHOST == "") {
- # Check gcc-3.4.x or later
- CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST);
-
- if (CHOST == TMP_CHOST || CHOST == "")
- CHOST = ""
- else
- HAVE_GCC34 = 1
- }
- }
- close(pipe)
-
- if (CHOST == "") {
- eerror("Could not get gcc's CHOST!")
- exit 1
- }
-
- if (OLDCHOST != "")
- if (OLDCHOST == CHOST)
- OLDCHOST = ""
-
- GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/"
- GCCLIBPREFIX_NEW = "/usr/lib/gcc/"
-
- if (HAVE_GCC34)
- GCCLIBPREFIX = GCCLIBPREFIX_NEW
- else
- GCCLIBPREFIX = GCCLIBPREFIX_OLD
-
- GCCLIB = GCCLIBPREFIX CHOST
-
- if (OLDCHOST != "") {
- OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST
- OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST
- }
-
- # Get current gcc's version
- pipe = "gcc -dumpversion"
- assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)")
- close(pipe)
-
- if (NEWVER == "") {
- eerror("Could not get gcc's version!")
- exit 1
- }
-
- # Nothing to do ?
- if ((OLDVER == NEWVER) && (OLDCHOST == ""))
- exit 0
-
- #
- # Ok, now let's scan for the .la files and actually fix them up
- #
- for (x = 1; x <= LIBCOUNT; x++) {
- # Do nothing if the target dir is gcc's internal library path
- if (DIRLIST[x] ~ GCCLIBPREFIX_OLD ||
- DIRLIST[x] ~ GCCLIBPREFIX_NEW)
- continue
-
- einfo(" [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...")
-
- pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null"
- while (((pipe) | getline la_files) > 0) {
-
- # Do nothing if the .la file is located in gcc's internal lib path
- if (la_files ~ GCCLIBPREFIX_OLD ||
- la_files ~ GCCLIBPREFIX_NEW)
- continue
-
- CHANGED = 0
- CHOST_CHANGED = 0
-
- # See if we need to fix the .la file
- while ((getline la_data < (la_files)) > 0) {
- if (OLDCHOST != "") {
- if ((gsub(OLDGCCLIB1 "[/[:space:]]+",
- GCCLIB, la_data) > 0) ||
- (gsub(OLDGCCLIB2 "[/[:space:]]+",
- GCCLIB, la_data) > 0)) {
- CHANGED = 1
- CHOST_CHANGED = 1
- }
- }
- if (OLDVER != NEWVER) {
- if ((gsub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "[/[:space:]]*",
- GCCLIB "/" NEWVER, la_data) > 0) ||
- (gsub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "[/[:space:]]*",
- GCCLIB "/" NEWVER, la_data) > 0))
- CHANGED = 1
- }
- }
- close(la_files)
-
- # Do the actual changes in a second loop, as we can then
- # verify that CHOST_CHANGED among things is correct ...
- if (CHANGED) {
- ewarnn(" FIXING: " la_files " ...")
-
- if (CHANGED)
- printn("[")
-
- # Clear the temp file (removing rather than '>foo' is better
- # out of a security point of view?)
- dosystem("rm -f " la_files ".new")
-
- while ((getline la_data < (la_files)) > 0) {
- if (OLDCHOST != "") {
- tmpstr = gensub(OLDGCCLIB1 "([/[:space:]]+)",
- GCCLIB "\\1", "g", la_data)
- tmpstr = gensub(OLDGCCLIB2 "([/[:space:]]+)",
- GCCLIB "\\1", "g", tmpstr)
-
- if (la_data != tmpstr) {
- printn("c")
- la_data = tmpstr
- }
-
- if (CHOST_CHANGED > 0) {
- # We try to be careful about CHOST changes outside
- # the gcc library path (meaning we cannot match it
- # via /GCCLIBPREFIX CHOST/) ...
-
- # Catch:
- #
- # dependency_libs=' -L/usr/CHOST/{bin,lib}'
- #
- gsub("-L/usr/" OLDCHOST "/",
- "-L/usr/" CHOST "/", la_data)
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib'
- #
- la_data = gensub("(" GCCLIB "/[^[:space:]]+)/" OLDCHOST "/",
- "\\1/" CHOST "/", "g", la_data)
- }
- }
-
- if (OLDVER != NEWVER) {
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc/CHOST/VER'
- #
- tmpstr = gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)",
- GCCLIB "/" NEWVER "\\1", "g", la_data)
- tmpstr = gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)",
- GCCLIB "/" NEWVER "\\1", "g", tmpstr)
-
- if (la_data != tmpstr) {
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc-lib/../../CHOST/lib'
- #
- # in cases where we have gcc34
- tmpstr = gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)",
- GCCLIBPREFIX "\\1", "g", tmpstr)
- tmpstr = gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)",
- GCCLIBPREFIX "\\1", "g", tmpstr)
- printn("v")
- la_data = tmpstr
- }
- }
-
- print la_data >> (la_files ".new")
- }
-
- if (CHANGED)
- print "]"
-
- close(la_files)
- close(la_files ".new")
-
- assert(dosystem("mv -f " la_files ".new " la_files),
- "dosystem(\"mv -f " la_files ".new " la_files "\")")
- }
- }
-
- close(pipe)
- }
-}
-
-# vim:ts=4
diff --git a/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la b/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la
deleted file mode 100644
index d95a3c06e780..000000000000
--- a/sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la
+++ /dev/null
@@ -1,334 +0,0 @@
-# Copyright 1999-2005 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-#
-# Helper functions
-#
-function printn(string) {
- printf("%s", string)
-}
-function einfo(string) {
- printf(" \033[32;01m*\033[0m %s\n", string)
-}
-function einfon(string) {
- printf(" \033[32;01m*\033[0m %s", string)
-}
-function ewarn(string) {
- printf(" \033[33;01m*\033[0m %s\n", string)
-}
-function ewarnn(string) {
- printf(" \033[33;01m*\033[0m %s", string)
-}
-function eerror(string) {
- printf(" \033[31;01m*\033[0m %s\n", string)
-}
-
-#
-# assert(condition, errmsg)
-# assert that a condition is true. Otherwise exit.
-#
-function assert(condition, string) {
- if (! condition) {
- printf("%s:%d: assertion failed: %s\n",
- FILENAME, FNR, string) > "/dev/stderr"
- _assert_exit = 1
- exit 1
- }
-}
-
-#
-# system(command, return)
-# wrapper that normalizes return codes ...
-#
-function dosystem(command, ret) {
- ret = 0
- ret = system(command)
- if (ret == 0)
- return 1
- else
- return 0
-}
-
-#
-# parse_ld_conf(config_file)
-#
-function parse_ld_conf(conf, pipe, ldsoconf_data, CHILD, y) {
- pipe = "cd /etc; cat " conf " | sort 2>/dev/null"
- while(((pipe) | getline ldsoconf_data) > 0) {
- if (ldsoconf_data ~ /^[[:space:]]*#/)
- continue
- if (ldsoconf_data == "")
- continue
-
- # Handle the "include" keyword
- if (ldsoconf_data ~ /^include /) {
- sub(/^include /, "", ldsoconf_data)
- parse_ld_conf(ldsoconf_data)
- continue
- }
-
- # Remove any trailing comments
- sub(/#.*$/, "", ldsoconf_data)
- # Remove any trailing spaces
- sub(/[[:space:]]+$/, "", ldsoconf_data)
- # Eat duplicate slashes
- sub(/\/\//, "/", ldsoconf_data)
- # Prune trailing /
- sub(/\/$/, "", ldsoconf_data)
-
- #
- # Drop the directory if its a child directory of
- # one that was already added ...
- # For example, if we have:
- # /usr/lib /usr/libexec /usr/lib/mozilla /usr/lib/nss
- # We really just want to save /usr/lib /usr/libexec
- #
- CHILD = 0
- for (y in DIRLIST) {
- if (ldsoconf_data ~ "^" DIRLIST[y] "(/|$)") {
- CHILD = 1
- break
- }
- }
- if (CHILD) continue
-
- DIRLIST[++LIBCOUNT] = ldsoconf_data
- }
- close(pipe)
-}
-
-BEGIN {
- #
- # Get our variables from environment
- #
- OLDVER = ENVIRON["OLDVER"]
- OLDCHOST = ENVIRON["OLDCHOST"]
-
- if (OLDVER == "") {
- eerror("Could not get OLDVER!");
- exit 1
- }
-
- # Setup some sane defaults
- LIBCOUNT = 2
- HAVE_GCC34 = 0
- DIRLIST[1] = "/lib"
- DIRLIST[2] = "/usr/lib"
-
- #
- # Walk /etc/ld.so.conf to discover all our library paths
- #
- parse_ld_conf("/etc/ld.so.conf")
-
- #
- # Get line from gcc's output containing CHOST
- #
- pipe = "gcc -print-file-name=libgcc.a 2>/dev/null"
- if ((!((pipe) | getline TMP_CHOST)) || (TMP_CHOST == "")) {
- close(pipe)
-
- # If we fail to get the CHOST, see if we can get the CHOST
- # portage thinks we are using ...
- pipe = "/usr/bin/portageq envvar 'CHOST'"
- assert(((pipe) | getline CHOST), "(" pipe ") | getline CHOST")
- } else {
- # Check pre gcc-3.4.x versions
- CHOST = gensub("^.+lib/gcc-lib/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST)
-
- if (CHOST == TMP_CHOST || CHOST == "") {
- # Check gcc-3.4.x or later
- CHOST = gensub("^.+lib/gcc/([^/]+)/[0-9]+.+$", "\\1", 1, TMP_CHOST);
-
- if (CHOST == TMP_CHOST || CHOST == "")
- CHOST = ""
- else
- HAVE_GCC34 = 1
- }
- }
- close(pipe)
-
- if (CHOST == "") {
- eerror("Could not get gcc's CHOST!")
- exit 1
- }
-
- if (OLDCHOST != "")
- if (OLDCHOST == CHOST)
- OLDCHOST = ""
-
- GCCLIBPREFIX_OLD = "/usr/lib/gcc-lib/"
- GCCLIBPREFIX_NEW = "/usr/lib/gcc/"
-
- if (HAVE_GCC34)
- GCCLIBPREFIX = GCCLIBPREFIX_NEW
- else
- GCCLIBPREFIX = GCCLIBPREFIX_OLD
-
- GCCLIB = GCCLIBPREFIX CHOST
-
- if (OLDCHOST != "") {
- OLDGCCLIB1 = GCCLIBPREFIX_OLD OLDCHOST
- OLDGCCLIB2 = GCCLIBPREFIX_NEW OLDCHOST
- }
-
- # Get current gcc's version
- pipe = "gcc -dumpversion"
- assert(((pipe) | getline NEWVER), "(" pipe ") | getline NEWVER)")
- close(pipe)
-
- if (NEWVER == "") {
- eerror("Could not get gcc's version!")
- exit 1
- }
-
- # Nothing to do ?
- # NB: Do not check for (OLDVER == NEWVER) anymore, as we might need to
- # replace libstdc++.la ....
- if ((OLDVER == "") && (OLDCHOST == ""))
- exit 0
-
- #
- # Ok, now let's scan for the .la files and actually fix them up
- #
- for (x = 1; x <= LIBCOUNT; x++) {
- # Do nothing if the target dir is gcc's internal library path
- if (DIRLIST[x] ~ GCCLIBPREFIX_OLD ||
- DIRLIST[x] ~ GCCLIBPREFIX_NEW)
- continue
-
- einfo(" [" x "/" LIBCOUNT "] Scanning " DIRLIST[x] " ...")
-
- pipe = "find " DIRLIST[x] "/ -name '*.la' 2>/dev/null"
- while (((pipe) | getline la_files) > 0) {
-
- # Do nothing if the .la file is located in gcc's internal lib path
- if (la_files ~ GCCLIBPREFIX_OLD ||
- la_files ~ GCCLIBPREFIX_NEW)
- continue
-
- CHANGED = 0
- CHOST_CHANGED = 0
-
- # See if we need to fix the .la file
- while ((getline la_data < (la_files)) > 0) {
- if (OLDCHOST != "") {
- if ((gsub(OLDGCCLIB1 "[/[:space:]]+",
- GCCLIB, la_data) > 0) ||
- (gsub(OLDGCCLIB2 "[/[:space:]]+",
- GCCLIB, la_data) > 0)) {
- CHANGED = 1
- CHOST_CHANGED = 1
- }
- }
- if (OLDVER != NEWVER) {
- if ((gsub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "[/[:space:]]*",
- GCCLIB "/" NEWVER, la_data) > 0) ||
- (gsub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "[/[:space:]]*",
- GCCLIB "/" NEWVER, la_data) > 0))
- CHANGED = 1
- }
- # We now check if we have libstdc++.la, as we remove the
- # libtool linker scripts for gcc ...
- # We do this last, as we only match the new paths
- if (gsub(GCCLIB "/" NEWVER "/libstdc\\+\\+\\.la",
- "-lstdc++", la_data) > 0)
- CHANGED = 1
- }
- close(la_files)
-
- # Do the actual changes in a second loop, as we can then
- # verify that CHOST_CHANGED among things is correct ...
- if (CHANGED) {
- ewarnn(" FIXING: " la_files " ...[")
-
- # Clear the temp file (removing rather than '>foo' is better
- # out of a security point of view?)
- dosystem("rm -f " la_files ".new")
-
- while ((getline la_data < (la_files)) > 0) {
- if (OLDCHOST != "") {
- tmpstr = gensub(OLDGCCLIB1 "([/[:space:]]+)",
- GCCLIB "\\1", "g", la_data)
- tmpstr = gensub(OLDGCCLIB2 "([/[:space:]]+)",
- GCCLIB "\\1", "g", tmpstr)
-
- if (la_data != tmpstr) {
- printn("c")
- la_data = tmpstr
- }
-
- if (CHOST_CHANGED > 0) {
- # We try to be careful about CHOST changes outside
- # the gcc library path (meaning we cannot match it
- # via /GCCLIBPREFIX CHOST/) ...
-
- # Catch:
- #
- # dependency_libs=' -L/usr/CHOST/{bin,lib}'
- #
- gsub("-L/usr/" OLDCHOST "/",
- "-L/usr/" CHOST "/", la_data)
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc-lib/CHOST/VER/../../../../CHOST/lib'
- #
- la_data = gensub("(" GCCLIB "/[^[:space:]]+)/" OLDCHOST "/",
- "\\1/" CHOST "/", "g", la_data)
- }
- }
-
- if (OLDVER != NEWVER) {
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc/CHOST/VER'
- #
- tmpstr = gensub(GCCLIBPREFIX_OLD CHOST "/" OLDVER "([/[:space:]]+)",
- GCCLIB "/" NEWVER "\\1", "g", la_data)
- tmpstr = gensub(GCCLIBPREFIX_NEW CHOST "/" OLDVER "([/[:space:]]+)",
- GCCLIB "/" NEWVER "\\1", "g", tmpstr)
-
- if (la_data != tmpstr) {
- # Catch:
- #
- # dependency_libs=' -L/usr/lib/gcc-lib/../../CHOST/lib'
- #
- # in cases where we have gcc34
- tmpstr = gensub(GCCLIBPREFIX_OLD "(../../" CHOST "/lib)",
- GCCLIBPREFIX "\\1", "g", tmpstr)
- tmpstr = gensub(GCCLIBPREFIX_NEW "(../../" CHOST "/lib)",
- GCCLIBPREFIX "\\1", "g", tmpstr)
- printn("v")
- la_data = tmpstr
- }
- }
-
- # We now check if we have libstdc++.la, as we remove the
- # libtool linker scripts for gcc and any referencese in any
- # libtool linker scripts.
- # We do this last, as we only match the new paths
- tmpstr = gensub(GCCLIB "/" NEWVER "/libstdc\\+\\+\\.la",
- "-lstdc++", "g", la_data);
- if (la_data != tmpstr) {
- printn("l")
- la_data = tmpstr
- }
-
- print la_data >> (la_files ".new")
- }
-
- if (CHANGED)
- print "]"
-
- close(la_files)
- close(la_files ".new")
-
- assert(dosystem("mv -f " la_files ".new " la_files),
- "dosystem(\"mv -f " la_files ".new " la_files "\")")
- }
- }
-
- close(pipe)
- }
-}
-
-# vim:ts=4
diff --git a/sys-devel/gcc/files/fix_libtool_files.sh b/sys-devel/gcc/files/fix_libtool_files.sh
deleted file mode 100644
index af085e1efa01..000000000000
--- a/sys-devel/gcc/files/fix_libtool_files.sh
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/bin/sh
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-usage() {
-cat << "USAGE_END"
-Usage: fix_libtool_files.sh <old-gcc-version> [--oldarch <old-CHOST>]
-
- Where <old-gcc-version> is the version number of the
- previous gcc version. For example, if you updated to
- gcc-3.2.1, and you had gcc-3.2 installed, run:
-
- # fix_libtool_files.sh 3.2
-
- If you updated to gcc-3.2.3, and the old CHOST was i586-pc-linux-gnu
- but you now have CHOST as i686-pc-linux-gnu, run:
-
- # fix_libtool_files.sh 3.2 --oldarch i586-pc-linux-gnu
-
- Note that if only the CHOST and not the version changed, you can run
- it with the current version and the '--oldarch <old-CHOST>' arguments,
- and it will do the expected:
-
- # fix_libtool_files.sh `gcc -dumpversion` --oldarch i586-pc-linux-gnu
-
-USAGE_END
- exit 1
-}
-
-case $2 in
---oldarch) [ $# -ne 3 ] && usage ;;
-*) [ $# -ne 1 ] && usage ;;
-esac
-
-ARGV1=$1
-ARGV2=$2
-ARGV3=$3
-
-. /etc/profile || exit 1
-
-if [ ${EUID:-0} -ne 0 -a "${EPREFIX}" = '' ] ; then
- echo "${0##*/}: Must be root."
- exit 1
-fi
-
-# make sure the files come out sane
-umask 0022
-
-OLDCHOST=
-[ "${ARGV2}" = "--oldarch" ] && OLDCHOST=${ARGV3}
-
-AWKDIR="/usr/share/gcc-data"
-
-if [ ! -r "${AWKDIR}/fixlafiles.awk" ] ; then
- echo "${0##*/}: ${AWKDIR}/fixlafiles.awk does not exist!"
- exit 1
-fi
-
-OLDVER=${ARGV1}
-
-export OLDVER OLDCHOST
-
-echo "Scanning libtool files for hardcoded gcc library paths..."
-exec gawk -f "${AWKDIR}/fixlafiles.awk"
-
-# vim:ts=4