From 91572faf170ad06ee88fbf4eccce1dd73733e6a9 Mon Sep 17 00:00:00 2001
From: Martin Schlemmer <azarah@gentoo.org>
Date: Tue, 8 Apr 2003 12:53:38 +0000
Subject: optimizations; use new wrapper

---
 sys-devel/gcc-config/ChangeLog                     |  10 +-
 sys-devel/gcc-config/files/digest-gcc-config-1.3.2 |   3 +
 sys-devel/gcc-config/files/gcc-config-1.3.2        | 418 +++++++++++++++++++++
 sys-devel/gcc-config/files/gcc-config-1.4.1        |  27 +-
 sys-devel/gcc-config/gcc-config-1.3.2.ebuild       |  85 +++++
 5 files changed, 536 insertions(+), 7 deletions(-)
 create mode 100644 sys-devel/gcc-config/files/digest-gcc-config-1.3.2
 create mode 100644 sys-devel/gcc-config/files/gcc-config-1.3.2
 create mode 100644 sys-devel/gcc-config/gcc-config-1.3.2.ebuild

(limited to 'sys-devel/gcc-config')

diff --git a/sys-devel/gcc-config/ChangeLog b/sys-devel/gcc-config/ChangeLog
index d548729c37d7..adc3819976e7 100644
--- a/sys-devel/gcc-config/ChangeLog
+++ b/sys-devel/gcc-config/ChangeLog
@@ -1,6 +1,14 @@
 # ChangeLog for sys-devel/gcc-config
 # Copyright 2002-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/ChangeLog,v 1.32 2003/04/06 22:18:42 zwelch Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/ChangeLog,v 1.33 2003/04/08 12:53:38 azarah Exp $
+
+*gcc-config-1.3.2 (08 Apr 2003)
+
+  08 Apr 2003; Martin Schlemmer <azarah@gentoo.org> gcc-config-1.3.2.ebuild,
+  files/gcc-config-1.3.2, files/gcc-config-1.4.1 :
+  Add speed optimization patch from Aron Griffis <agriffis@gentoo.org>. 
+  Basically we only get the CHOST from portage if needed ... closes bug #18766.
+  Use wrapper-1.4.c ...
 
 *gcc-config-1.3.1-r1 (06 Apr 2003)
 
diff --git a/sys-devel/gcc-config/files/digest-gcc-config-1.3.2 b/sys-devel/gcc-config/files/digest-gcc-config-1.3.2
new file mode 100644
index 000000000000..f6d9661c4fd3
--- /dev/null
+++ b/sys-devel/gcc-config/files/digest-gcc-config-1.3.2
@@ -0,0 +1,3 @@
+MD5 27740a9a29d5fa3a86a48a49da0c6a5c /files/wrapper-1.4.c 5643
+MD5 440883b169e3ef32583fcb891569bb65 /files/gcc-config-1.3.2 8145
+MD5 9fd5cf72fc906e151c94dfb405231c89 /gcc-config-1.3.2.ebuild 2136
diff --git a/sys-devel/gcc-config/files/gcc-config-1.3.2 b/sys-devel/gcc-config/files/gcc-config-1.3.2
new file mode 100644
index 000000000000..96baba4864f0
--- /dev/null
+++ b/sys-devel/gcc-config/files/gcc-config-1.3.2
@@ -0,0 +1,418 @@
+#!/bin/bash
+# Copyright 1999-2003 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
+# Author:  Martin Schlemmer <azarah@gentoo.org>
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/gcc-config-1.3.2,v 1.1 2003/04/08 12:53:38 azarah Exp $
+
+
+source /etc/init.d/functions.sh || {
+	echo "$0: Could not source /etc/init.d/functions.sh!"
+	exit 1
+}
+
+usage() {
+cat << "USAGE_END"
+Usage: gcc-config [Option] [CC Profile]
+Change the current cc/gcc profile, or give info about profiles.
+
+Options:
+
+  --use-old              Use the old profile if one was selected.
+	
+  --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...).
+	
+  --get-current-profile  Print current used gcc profile.
+
+  --list-profiles        Print a list of available profiles.
+
+  --print-environ        Print environment that can be used to setup things
+                         for current gcc profile, or specified one ...
+	
+  --get-bin-path         Print path where binaries of given/current profile
+                         are located.
+	
+  --get-lib-path         Print path where libraries of given/current profile
+                         are located.
+
+  --get-stdcxx-incdir    Print path to g++ include files of given/current
+                         profile.
+	
+The profile name is in the form of:
+
+  <CHOST>-<gcc version>
+
+For example:
+
+  i686-pc-linux-gnu-3.2.1
+
+
+
+USAGE_END
+
+	exit 1
+}
+
+if [ "$#" -lt 1 ]
+then
+	usage
+fi
+
+HAVE_WHICH="no"
+if [ -n "$(which which 2> /dev/null)" ]
+then
+	HAVE_WHICH="yes"
+fi
+
+find_path() {
+	[ -z "$1" ] && return 0
+
+	if [ "${HAVE_WHICH}" = "yes" ]
+	then
+		local fullpath="$(which $1 2> /dev/null)"
+		
+		if [ -x "${fullpath}" ]
+		then
+			echo "${fullpath}"
+			return 0
+		fi
+	fi
+
+	for x in /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin
+	do
+		if [ -x "${x}/$1" -a -r "${x}/$1" ]
+		then
+			echo "${x}/$1"
+			return 0
+		fi
+	done
+
+	return 0
+}
+
+cmd_setup() {
+
+	# Sourcing /etc/env.d/gcc/${CC_COMP} is going to mess up
+	# PATH among things...
+	CP="$(find_path cp)"
+	RM="$(find_path rm)"
+	MV="$(find_path mv)"
+	LN="$(find_path ln)"
+	CAT="$(find_path cat)"
+	AWK="$(find_path gawk)"
+	GREP="$(find_path grep)"
+	FIND="$(find_path find)"
+	CHMOD="$(find_path chmod)"
+	TOUCH="$(find_path touch)"
+	ENV_UPDATE="$(find_path env-update)"
+}
+
+CC_COMP=""
+
+get_real_chost() {
+	[ -n "$REAL_CHOST" ] && return 0
+
+	REAL_CHOST="$(portageq envvar CHOST)"
+
+	if [ -z "${REAL_CHOST}" ]
+	then
+		eerror "$0:  Could not get portage CHOST!"
+		return 1
+	fi
+}
+
+switch_profile() {
+	local MY_LDPATH=""
+	local GCC_PROFILES=""
+	local OLD_CC_COMP=""
+
+	if [ -r /etc/env.d/gcc/config ]
+	then
+		source /etc/env.d/gcc/config
+
+		if [ -n "${CURRENT}" ]
+		then
+			OLD_CC_COMP="${CURRENT}"
+		fi
+	fi
+
+	if [ "$(id -u)" -ne 0 ]
+	then
+		eerror "$0: Must be root."
+		exit 1
+	fi
+
+	ebegin "Switching to ${CC_COMP} compiler"
+
+	# Sourcing /etc/env.d/gcc/${CC_COMP} is going to mess up
+	# PATH among things...
+	cmd_setup
+
+	# 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="$(${FIND} /etc/env.d/gcc/ -name "${REAL_CHOST}-*")"
+	GCC_PROFILES="${GCC_PROFILES/\/etc\/env.d\/gcc\/${CC_COMP}}"
+	GCC_PROFILES="/etc/env.d/gcc/${CC_COMP} ${GCC_PROFILES}"
+
+	# Extract all LDPATH's for our CHOST
+	for x in ${GCC_PROFILES}
+	do
+		if [ -f "${x}" ]
+		then
+			source "${x}"
+
+			if [ -z "${MY_LDPATH}" ]
+			then
+				if [ -d "${LDPATH}" ]
+				then
+					MY_LDPATH="${LDPATH}"
+				fi
+			else
+				if [ -d "${LDPATH}" ]
+				then
+					MY_LDPATH="${MY_LDPATH}:${LDPATH}"
+				fi
+			fi
+		fi
+	done
+
+	# Setup things properly again for this profile
+	source "/etc/env.d/gcc/${CC_COMP}"
+
+	# Setup /etc/env.d/05gcc
+	${AWK} '!/^STDCXX_INCDIR=|^LDPATH=/ {print $0}' \
+		"/etc/env.d/gcc/${CC_COMP}" > /etc/env.d/05gcc
+
+	# Add our custom LDPATH
+	echo "LDPATH=\"${MY_LDPATH}\"" >> /etc/env.d/05gcc
+
+	# Make sure we do not recreate /lib/cpp and /usr/bin/cc ...
+#	echo "DISABLE_GEN_GCC_WRAPPERS=\"yes\"" >> /etc/env.d/05gcc
+	
+	echo "CURRENT=${CC_COMP}" > /etc/env.d/gcc/config
+
+	source /etc/profile
+
+	# These might not be installed, and we want to update the mtime
+	# for ccache and distcc anyhow ...
+	${RM} -f /lib/cpp
+	${CP} -f /usr/lib/gcc-config/wrapper /lib/cpp
+	for x in gcc cpp cc c++ g++ "${CHOST}-gcc" "${CHOST}-c++" "${CHOST}-g++"
+	do
+		${RM} -f "/usr/bin/${x}"
+		${CP} -f /usr/lib/gcc-config/wrapper "/usr/bin/${x}"
+
+		if [ "${OLD_CC_COMP}" != "${CC_COMP}" ]
+		then
+			${TOUCH} -m "/usr/bin/${x}"
+		fi
+	done
+
+
+	${ENV_UPDATE} &> /dev/null
+
+	eend 0
+
+	if [ "${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 "  # source /etc/profile"
+		echo
+	fi
+
+	return 0
+}
+
+get_current_profile() {
+	if [ ! -f /etc/env.d/gcc/config ]
+	then
+		eerror "$0:  No gcc profile is active!"
+		return 1
+	fi
+
+	source /etc/env.d/gcc/config
+
+	if [ -z "${CURRENT}" ]
+	then
+		eerror "$0:  No gcc profile is active!"
+		return 1
+	fi
+
+	echo "${CURRENT}"
+
+	return 0
+}
+
+list_profiles() {
+	if [ ! -f /etc/env.d/gcc/config ]
+	then
+		eerror "$0:  No gcc profile is active!"
+		return 1
+	fi
+
+	for x in /etc/env.d/gcc/*
+	do
+		if [ -f "${x}" -a "${x}" != "/etc/env.d/gcc/config" ]
+		then
+			echo "${x##*/}"
+		fi
+	done
+}
+
+print_environ() {
+	local OLDPATH="${PATH}"
+
+	source "/etc/env.d/gcc/${CC_COMP}"
+
+	echo "export PATH=\"${PATH}:${OLDPATH}\""
+
+#	if [ -z "${LD_LIBRARY_PATH}" ]
+#	then
+#		echo "export LD_LIBRARY_PATH=\"${LDPATH}\""
+#	else
+#		echo "export LD_LIBRARY_PATH=\"${LDPATH}:${LD_LIBRARY_PATH}\""
+#	fi
+
+	echo "export CC=\"${CC}\""
+	echo "export CXX=\"${CXX}\""
+}
+
+get_bin_path() {
+	source "/etc/env.d/gcc/${CC_COMP}"
+
+	echo "${PATH}"
+
+	return 0
+}
+
+get_lib_path() {
+	source "/etc/env.d/gcc/${CC_COMP}"
+
+	echo "${LDPATH}"
+
+	return 0
+}
+
+get_stdcxx_incdir() {
+	source "/etc/env.d/gcc/${CC_COMP}"
+
+	echo "${LDPATH}/include/${STDCXX_INCDIR}"
+
+	return 0
+}
+
+NEED_ACTION="yes"
+DOIT="switch_profile"
+CHECK_CHOST="no"
+
+for x in $*
+do
+	case "${x}" in
+		# Only use specified compiler if one is not already selected.
+		--use-old)
+			if get_current_profile &> /dev/null
+			then
+				CC_COMP="$(get_current_profile)"
+			fi
+			;;
+		--use-portage-chost)
+			CHECK_CHOST="yes"
+			;;
+		--get-current-profile)
+			if [ "${NEED_ACTION}" = "yes" ]
+			then
+				NEED_ACTION="no"
+				DOIT="get_current_profile"
+			fi
+			;;
+		--list-profiles)
+			if [ "${NEED_ACTION}" = "yes" ]
+			then
+				NEED_ACTION="no"
+				DOIT="list_profiles"
+			fi
+			;;
+		--print-environ)
+			if [ "${NEED_ACTION}" = "yes" ]
+			then
+				NEED_ACTION="no"
+				DOIT="print_environ"
+			fi
+			;;
+		--get-bin-path)
+			if [ "${NEED_ACTION}" = "yes" ]
+			then
+				NEED_ACTION="no"
+				DOIT="get_bin_path"
+			fi
+			;;
+		--get-lib-path)
+			if [ "${NEED_ACTION}" = "yes" ]
+			then
+				NEED_ACTION="no"
+				DOIT="get_lib_path"
+			fi
+			;;
+		--get-stdcxx-incdir)
+			if [ "${NEED_ACTION}" = "yes" ]
+			then
+				NEED_ACTION="no"
+				DOIT="get_stdcxx_incdir"
+			fi
+			;;
+		--*)
+			eerror "$0: Invalid switch!  Run $0 without parameters for help."
+			exit 1
+			;;
+		*)
+			if [ -z "${CC_COMP}" ]
+			then
+				CC_COMP="${x}"
+			fi
+			;;
+	esac
+done
+
+if [ "${DOIT}" = "switch_profile" -a -z "${CC_COMP}" ]
+then
+	usage
+fi
+
+if [ -z "${CC_COMP}" ]
+then
+	if get_current_profile &> /dev/null
+	then
+		CC_COMP="$(get_current_profile)"
+	else
+		eerror "$0: No default profile setup!"
+		exit 1
+	fi
+fi
+
+if [ ! -d "/usr/lib/gcc-lib/${CC_COMP%-*}/${CC_COMP##*-}" -o \
+     ! -f "/etc/env.d/gcc/${CC_COMP}" ]
+then
+	eerror "$0: Profile does not exist!"
+	exit 1
+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%-*}" != "${REAL_CHOST}" ] && exit 0
+fi
+
+eval ${DOIT}
+
+
+# vim:ts=4
diff --git a/sys-devel/gcc-config/files/gcc-config-1.4.1 b/sys-devel/gcc-config/files/gcc-config-1.4.1
index 955959eb23eb..259d6a094960 100644
--- a/sys-devel/gcc-config/files/gcc-config-1.4.1
+++ b/sys-devel/gcc-config/files/gcc-config-1.4.1
@@ -4,7 +4,7 @@
 # Author:  Martin Schlemmer <azarah@gentoo.org>
 # Cross-compiling toolchain contributions by: 
 #   Zach Welch <zwelch@gentoo.org> and James Boddington <aiken@gentoo.org>
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/gcc-config-1.4.1,v 1.1 2003/04/06 22:18:42 zwelch Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/gcc-config-1.4.1,v 1.2 2003/04/08 12:53:38 azarah Exp $
 
 # handle not ROOT installs
 [ -z "${ROOT}" ] && ROOT="/"
@@ -122,10 +122,21 @@ cmd_setup() {
 }
 
 CC_COMP=""
-REAL_CHOST="$(portageq envvar CHOST)"
 PORTDIR="$(portageq portdir)"
 PORTDIR_OVERLAY="$(portageq portdir_overlay)"
 
+get_real_chost() {
+	[ -n "$REAL_CHOST" ] && return 0
+
+	REAL_CHOST="$(portageq envvar CHOST)"
+
+	if [ -z "${REAL_CHOST}" ]
+	then
+		eerror "$0:  Could not get portage CHOST!"
+		return 1
+	fi
+}
+
 switch_profile() {
 	local MY_LDPATH=""
 	local GCC_PROFILES=""
@@ -158,6 +169,7 @@ switch_profile() {
 	# 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="$(${FIND} ${ROOT}etc/env.d/gcc/ -name "${REAL_CHOST}-*")"
 	GCC_PROFILES="${GCC_PROFILES/\/etc\/env.d\/gcc\/${CC_COMP}}"
 	GCC_PROFILES="/etc/env.d/gcc/${CC_COMP} ${GCC_PROFILES}"
@@ -372,6 +384,8 @@ install_toolchain() {
 	local AROOT="${ROOT}usr/${ACCHOST}/"
 	local PORTDIR="$(portage_setting PORTDIR)"
 
+	get_real_chost
+
 	[ -z "${ACCHOST}" -o -z "${AGCCVERS}" ] && \
 		die "Invalid profile specification"
 
@@ -572,11 +586,12 @@ then
 	exit 1
 fi
 
-# Chosen CHOST are not the same as the real CHOST according to make.conf,
-# and --use-portage-chost option was given, so do nothing ...
-if [ "${CHECK_CHOST}" = "yes" -a "${CC_COMP%-*}" != "${REAL_CHOST}" ]
+if [ "${CHECK_CHOST}" = "yes" ]
 then
-	exit 0
+	# 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%-*}" != "${REAL_CHOST}" ] && exit 0
 fi
 
 eval ${DOIT}
diff --git a/sys-devel/gcc-config/gcc-config-1.3.2.ebuild b/sys-devel/gcc-config/gcc-config-1.3.2.ebuild
new file mode 100644
index 000000000000..7a3b113ee6ff
--- /dev/null
+++ b/sys-devel/gcc-config/gcc-config-1.3.2.ebuild
@@ -0,0 +1,85 @@
+# Copyright 1999-2003 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/gcc-config-1.3.2.ebuild,v 1.1 2003/04/08 12:53:38 azarah Exp $
+
+DISABLE_GEN_GCC_WRAPPERS="yes"
+
+S="${WORKDIR}/${P}"
+DESCRIPTION="Utility to change the gcc compiler being used."
+SRC_URI=""
+HOMEPAGE="http://www.gentoo.org/"
+
+KEYWORDS="~x86 ~ppc ~sparc ~alpha ~mips ~hppa ~arm"
+SLOT="0"
+LICENSE="GPL-2"
+
+DEPEND="virtual/glibc
+	>=sys-apps/portage-2.0.47-r10" # We need portageq ...
+
+
+src_install() {
+
+	# Setup PATH just in case ...
+	if /usr/bin/gcc-config --get-current-profile &> /dev/null || \
+	   /usr/sbin/gcc-config --get-current-profile &> /dev/null
+	then
+		if [ -x /usr/bin/gcc-config ]
+		then
+			export PATH="`/usr/bin/gcc-config --get-bin-path`:${PATH}"
+		else
+			export PATH="`/usr/sbin/gcc-config --get-bin-path`:${PATH}"
+		fi
+	fi
+
+	einfo "Compiling wrapper..."
+	${CC:-gcc} -O2 -Wall -o ${WORKDIR}/wrapper ${FILESDIR}/wrapper-1.4.c || die
+
+	exeinto /usr/lib/gcc-config
+	doexe ${WORKDIR}/wrapper
+
+	# Only setup this if we have a proper gcc version installed, else
+	# we will nuke the non gcc-config versions ...
+	if /usr/bin/gcc-config --get-current-profile &> /dev/null || \
+	   /usr/sbin/gcc-config --get-current-profile &> /dev/null
+	then
+		einfo "Creating wrappers for compiler tools..."
+		exeinto /lib
+		newexe ${WORKDIR}/wrapper cpp
+
+		exeinto /usr/bin
+		for x in gcc cpp cc c++ g++ ${CHOST}-gcc ${CHOST}-c++ ${CHOST}-g++
+		do
+			newexe ${WORKDIR}/wrapper ${x}
+		done
+	fi
+
+	einfo "Adding compat symlinks..."
+	into /usr
+	dodir /usr/sbin
+	newbin ${FILESDIR}/${PN}-${PV} ${PN}
+	dosym ../bin/${PN} /usr/sbin/${PN}
+}
+
+pkg_postinst() {
+
+	# Do we have a valid multi ver setup ?
+	if ${ROOT}/usr/bin/gcc-config --get-current-profile &> /dev/null
+	then
+		# We not longer use the /usr/include/g++-v3 hacks, as
+		# it is not needed ...
+		if [ -L ${ROOT}/usr/include/g++ ]
+		then
+			rm -f ${ROOT}/usr/include/g++
+		fi
+		if [ -L ${ROOT}/usr/include/g++-v3 ]
+		then
+			rm -f ${ROOT}/usr/include/g++-v3
+		fi
+
+		if [ ${ROOT} = "/" ]
+		then
+			/usr/bin/gcc-config $(/usr/bin/gcc-config --get-current-profile)
+		fi
+	fi
+}
+
-- 
cgit v1.2.3-65-gdbad