public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: eclass/, sys-devel/gcc/files/awk/, sys-devel/gcc/files/, ...
@ 2020-06-19 20:52 Sergei Trofimovich
  0 siblings, 0 replies; only message in thread
From: Sergei Trofimovich @ 2020-06-19 20:52 UTC (permalink / raw
  To: gentoo-commits

commit:     92e383747ffc633ff6e85a02bf8cdb856eb1bcdc
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 19 18:15:21 2020 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Fri Jun 19 20:52:43 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=92e38374

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 <AT> gentoo.org>

 .../gnat-gpl/files/awk/fixlafiles.awk-no_gcc_la    | 334 ---------------------
 dev-lang/gnat-gpl/files/fix_libtool_files.sh       |  66 ----
 eclass/toolchain.eclass                            |  40 +--
 sys-devel/gcc/files/awk/fixlafiles.awk             | 313 -------------------
 sys-devel/gcc/files/awk/fixlafiles.awk-no_gcc_la   | 334 ---------------------
 sys-devel/gcc/files/fix_libtool_files.sh           |  66 ----
 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 066c8d21681..00000000000
--- 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 28f9beb36ba..00000000000
--- 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 1e164957b2b..8384e565d86 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 aa2ecb60266..00000000000
--- 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 d95a3c06e78..00000000000
--- 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 af085e1efa0..00000000000
--- 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


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2020-06-19 20:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-19 20:52 [gentoo-commits] repo/gentoo:master commit in: eclass/, sys-devel/gcc/files/awk/, sys-devel/gcc/files/, Sergei Trofimovich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox