summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Tilley <lv@gentoo.org>2004-11-14 23:13:52 +0000
committerTravis Tilley <lv@gentoo.org>2004-11-14 23:13:52 +0000
commit6617a78317bbed801216e8b5b673e4b4d5b2f43c (patch)
tree8774f0978c2257a0a50f5aa065096cbbc04ec7e7 /eclass/toolchain.eclass
parentVersion bump. (Manifest recommit) (diff)
downloadgentoo-2-6617a78317bbed801216e8b5b673e4b4d5b2f43c.tar.gz
gentoo-2-6617a78317bbed801216e8b5b673e4b4d5b2f43c.tar.bz2
gentoo-2-6617a78317bbed801216e8b5b673e4b4d5b2f43c.zip
update toolchain.eclass to handle do_gcc_config right when portage removes old files AFTER running postinst. :|
Diffstat (limited to 'eclass/toolchain.eclass')
-rw-r--r--eclass/toolchain.eclass103
1 files changed, 55 insertions, 48 deletions
diff --git a/eclass/toolchain.eclass b/eclass/toolchain.eclass
index d02ab80bfdb5..058713fb8c58 100644
--- a/eclass/toolchain.eclass
+++ b/eclass/toolchain.eclass
@@ -1,6 +1,6 @@
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain.eclass,v 1.48 2004/11/14 09:13:52 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain.eclass,v 1.49 2004/11/14 23:13:52 lv Exp $
#
# This eclass should contain general toolchain-related functions that are
# expected to not change, or change much.
@@ -541,60 +541,66 @@ split_out_specs_files() {
}
-# This function will call gcc-config when appropriate, with the appropriate
-# arguments. It also -attempts- to not be invasive, keeping the current config
-# active if it -appears- to be valid. Cross-compilers will never be switched
-# to.
-#
-# Travis Tilley <lv@gentoo.org> (04 Oct 2004)
-#
-do_gcc_config() {
- # sometimes MY_PV_FULL is set at this point, sometimes it isnt. I have no
- # idea why, but it seems not to be set at bootstrap and that's bad.
- gcc_setup_static_vars
-
+should_we_gcc_config() {
# we only want to switch compilers if installing to / and we're not
# building a cross-compiler.
- ! [ "${ROOT}" == "/" -a "${CHOST}" == "${CTARGET}" ] && return 0
+ ! [ "${ROOT}" == "/" -a "${CHOST}" == "${CTARGET}" ] && return 1
+
+ # we always want to run gcc-config if we're bootstrapping, otherwise
+ # we might get stuck with the c-only stage1 compiler
+ use bootstrap && return 0
+ use build && return 0
+
+ # if the current config is invalid, we definately want a new one
+ [ "$(gcc-config -L | grep -v ^\ )" == "no-config" ] && return 0
+
+ # if the previously selected config has the same major.minor as the
+ # version we are installing, then it will probably be uninstalled
+ # for being in the same SLOT. we cannot rely on the previous check
+ # to handle this, since postinst sometimes happens BEFORE the
+ # previous version is removed. :|
+ # ...skip this check if the current version is -exactly- the same
+ local c_gcc_conf_ver=$(gcc-config -c | awk -F - '{ print $5 }')
+ local c_majmin=$(get_version_component_range 1-2 ${c_gcc_conf_ver})
+ if [ "${c_gcc_conf_ver}" != "${MY_PV_FULL}" ] ; then
+ if [ "${c_majmin}" == "${MY_PV}" ] ;then
+ return 0
+ else
+ # if we're installing a genuinely different compiler version,
+ # we should probably tell the user -how- to switch to the new
+ # gcc version, since we're now going to do it for him/her.
+ einfo "The current gcc config appears valid, so it will not be"
+ einfo "automatically switched for you. If you would like to"
+ einfo "switch to the newly installed gcc version, do the"
+ einfo "following:"
+ echo
+ einfo "gcc-config ${CTARGET}-${MY_PV_FULL}${use_specs}"
+ einfo "source /etc/profile"
+ echo
+ ebeep
+ return 1
+ fi
+ else
+ # since we are re-merging the same gcc version, it's safe to re-run
+ # gcc-config and update any new wrappers, etc.
+ return 0
+ fi
+ # default to -not- switching gcc configs. this is to prevent an
+ # annoying bug where doing an emerge world -e with multiple slotted
+ # compilers will compile some apps with one and others with another.
+ return 1
+}
+
+do_gcc_config() {
# the grep -v is in there to filter out informational messages >_<
local current_gcc_config="$(gcc-config -c | grep -v ^\ )"
+
+ # figure out which specs-specific config is active. yes, this works
+ # even if the current config is invalid.
local current_specs="$(echo ${current_gcc_config} | awk -F - '{ print $6 }')"
[ "${current_specs}" != "" ] && local use_specs="-${current_specs}"
- # ...we also dont want to automatically switch the currently selected gcc
- # config unless the old config is no longer valid. otherwise doing an
- # emerge world -e with multiple slotted compilers installed will compile
- # some packages with one compiler and others with another. besides, it's
- # just plain rude. ;)
- # ...unless we're bootstrapping and NEED a compiler with c++!
- # ...and if the gcc-config -L result is no-config, lets just skip the
- # rest of the exclusion logic altogether, since we certainly want to
- # run gcc-config.
- if use !bootstrap && use !build && [ "$(gcc-config -L | grep -v ^\ )" != "no-config" ] ; then
- local current_gcc_libpath="$(gcc-config -L | grep -v ^\ )"
- if [ -e ${ROOT}${current_gcc_libpath%:*}/specs -a -e ${ROOT}/etc/env.d/gcc/${current_gcc_config} ] ; then
- local current_gcc_version="$(echo ${current_gcc_config} | awk -F - '{ print $5 }')"
- if [ "${current_gcc_version}" != "${MY_PV_FULL}" ] ; then
- # if we're installing a genuinely different compiler version, we
- # should probably tell the user -how- to switch to the new gcc
- # version if we're not going to do it for him/her.
- einfo "The current gcc config appears valid, so it will not be"
- einfo "automatically switched for you. If you would like to switch"
- einfo "to the newly installed gcc version, do the following:"
- echo
- einfo "gcc-config ${CTARGET}-${MY_PV_FULL}${use_specs}"
- einfo "source /etc/profile"
- echo
- ebeep
- epause
- else
- einfo "The current gcc config appears to be valid, not running"
- einfo "gcc-config ..."
- fi
- return 0
- fi
- fi
if [ -n "${use_specs}" -a ! -e ${ROOT}/etc/env.d/gcc/${CTARGET}-${MY_PV_FULL}${use_specs} ] ; then
ewarn "The currently selected specs-specific gcc config,"
@@ -606,9 +612,10 @@ do_gcc_config() {
epause
fi
+
if [ -e ${ROOT}/etc/env.d/gcc/${CTARGET}-${MY_PV_FULL}${use_specs} ] ; then
# we dont want to lose the current specs setting!
- gcc-config --use-portage-chost ${CTARGET}-${MY_PV_FULL}${use_specs}
+ gcc-config ${CTARGET}-${MY_PV_FULL}${use_specs}
else
# ...unless of course the specs-specific entry doesnt exist :)
gcc-config --use-portage-chost ${CTARGET}-${MY_PV_FULL}