summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <eradicator@gentoo.org>2005-01-10 11:26:22 +0000
committerJeremy Huddleston <eradicator@gentoo.org>2005-01-10 11:26:22 +0000
commit310061f90263dd9b7e095cdc7b18e30e7b69fc62 (patch)
tree6c68c39a89ba3e91098d6cd5737798bb74956207 /sys-devel/gcc/gcc-3.3.5-r1.ebuild
parentMoved src_install, pkg_preinst, and pkg_postinst into eclass using gcc-3.3.5-... (diff)
downloadhistorical-310061f90263dd9b7e095cdc7b18e30e7b69fc62.tar.gz
historical-310061f90263dd9b7e095cdc7b18e30e7b69fc62.tar.bz2
historical-310061f90263dd9b7e095cdc7b18e30e7b69fc62.zip
Moved src_install, pkg_preinst, and pkg_postinst into eclass using gcc-3.3.5-r1 and gcc-3.4.3-r1 as a base. Made env.d script creation more abstract. Fixed up multilib support. Fixed some problems moving libs to incorrect destinations or not moving some libs. Fixed a few cross-compilation problems (but not all yet). Closes bug #76884. Updated src_unpack to do patches based on instead of .
Diffstat (limited to 'sys-devel/gcc/gcc-3.3.5-r1.ebuild')
-rw-r--r--sys-devel/gcc/gcc-3.3.5-r1.ebuild328
1 files changed, 11 insertions, 317 deletions
diff --git a/sys-devel/gcc/gcc-3.3.5-r1.ebuild b/sys-devel/gcc/gcc-3.3.5-r1.ebuild
index 3e865d07c7be..638804eadd4b 100644
--- a/sys-devel/gcc/gcc-3.3.5-r1.ebuild
+++ b/sys-devel/gcc/gcc-3.3.5-r1.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-3.3.5-r1.ebuild,v 1.5 2005/01/07 15:33:40 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-3.3.5-r1.ebuild,v 1.6 2005/01/10 11:26:22 eradicator Exp $
DESCRIPTION="The GNU Compiler Collection. Includes C/C++, java compilers, pie+ssp extensions, Haj Ten Brugge runtime bounds checking"
@@ -69,51 +69,6 @@ SPLIT_SPECS="${SPLIT_SPECS:="true"}"
inherit eutils flag-o-matic libtool gnuconfig toolchain
-gcc_do_filter_flags() {
- strip-flags
-
- # In general gcc does not like optimization, and add -O2 where
- # it is safe. This is especially true for gcc 3.3 + 3.4
- replace-flags -O? -O2
-
- strip-unsupported-flags
-
- # If we use multilib on mips, we shouldn't pass -mabi flag - it breaks
- # build of non-default-abi libraries.
- use mips && use multilib && filter-flags "-mabi*"
-
- # Compile problems with these (bug #6641 among others)...
- #filter-flags "-fno-exceptions -fomit-frame-pointer -fforce-addr"
-
- export GCJFLAGS="${CFLAGS}"
-}
-
-
-chk_gcc_version() {
- mkdir -p "${WORKDIR}"
-
- # This next bit is for updating libtool linker scripts ...
- local OLD_GCC_VERSION="`gcc -dumpversion`"
- local OLD_GCC_CHOST="$(gcc -v 2>&1 | egrep '^Reading specs' |\
- sed -e 's:^.*/gcc[^/]*/\([^/]*\)/[0-9]\+.*$:\1:')"
-
- if [ "${OLD_GCC_VERSION}" != "${MY_PV_FULL}" ]
- then
- echo "${OLD_GCC_VERSION}" > "${WORKDIR}/.oldgccversion"
- fi
-
- if [ -n "${OLD_GCC_CHOST}" ]
- then
- if [ "${CHOST}" = "${CTARGET}" -a "${OLD_GCC_CHOST}" != "${CHOST}" ]
- then
- echo "${OLD_GCC_CHOST}" > "${WORKDIR}/.oldgccchost"
- fi
- fi
-
- # Did we check the version ?
- touch "${WORKDIR}/.chkgccversion"
-}
-
src_unpack() {
gcc_src_unpack
@@ -130,14 +85,16 @@ src_unpack() {
# 3.3.5 to not compile on some configurations.
epatch ${FILESDIR}/3.3.5/gcc-3.3.5-ffecom_gfrt_basictype-prototype.patch
- if [ "${ARCH}" = "ppc" -o "${ARCH}" = "ppc64" ] ; then
- epatch ${FILESDIR}/3.3.3/gcc333_pre20040408-stack-size.patch
- fi
-
- if [ "${ARCH}" = "arm" ] ; then
- epatch ${FILESDIR}/3.3.3/gcc333-debian-arm-getoff.patch
- epatch ${FILESDIR}/3.3.3/gcc333-debian-arm-ldm.patch
- fi
+ einfo "Applying CTARGET based patches: ${CTARGET}"
+ case "${CTARGET}" in
+ powerpc*-*)
+ epatch ${FILESDIR}/3.3.3/gcc333_pre20040408-stack-size.patch
+ ;;
+ arm-*)
+ epatch ${FILESDIR}/3.3.3/gcc333-debian-arm-getoff.patch
+ epatch ${FILESDIR}/3.3.3/gcc333-debian-arm-ldm.patch
+ ;;
+ esac
# Anything useful and objc will require libffi. Seriously. Lets just force
# libffi to install with USE="objc", even though it normally only installs
@@ -147,266 +104,3 @@ src_unpack() {
#epatch ${FILESDIR}/3.4.3/libffi-nogcj-lib-path-fix.patch
fi
}
-
-
-src_install() {
- local x=
-
- # Do allow symlinks in ${PREFIX}/lib/gcc-lib/${CHOST}/${PV}/include as
- # this can break the build.
- for x in ${WORKDIR}/build/gcc/include/*
- do
- if [ -L ${x} ]
- then
- rm -f ${x}
- continue
- fi
- done
- # Remove generated headers, as they can cause things to break
- # (ncurses, openssl, etc).
- for x in `find ${WORKDIR}/build/gcc/include/ -name '*.h'`
- do
- if grep -q 'It has been auto-edited by fixincludes from' ${x}
- then
- rm -f ${x}
- fi
- done
-
- einfo "Installing GCC..."
- # Do the 'make install' from the build directory
- cd ${WORKDIR}/build
- S="${WORKDIR}/build" \
- make DESTDIR="${D}" install || die
-
- if [ "${CHOST}" == "${CTARGET}" ] ; then
- [ -r ${D}${BINPATH}/gcc ] || die "gcc not found in ${D}"
- fi
-
- dodir /lib /usr/bin
- dodir /etc/env.d/gcc
- create_gcc_env_entry
-
- if want_split_specs ; then
- if use hardened ; then
- create_gcc_env_entry vanilla
- fi
- use !hardened && hardened_gcc_works && create_gcc_env_entry hardened
- if hardened_gcc_works || hardened_gcc_works pie ; then
- create_gcc_env_entry hardenednossp
- fi
- if hardened_gcc_works || hardened_gcc_works ssp ; then
- create_gcc_env_entry hardenednopie
- fi
-
- cp ${WORKDIR}/build/*.specs ${D}/${LIBPATH}
- fi
-
- # This one comes with binutils
- rm -f ${D}${PREFIX}/lib/libiberty.a
- rm -f ${D}${LIBPATH}/libiberty.a
- [ -e ${D}/${PREFIX}/lib/32 ] && rm -rf ${D}/${PREFIX}/lib/32
-
- # we dont want these in freaky non-versioned paths that dont ever get used
- fix_freaky_non_versioned_library_paths_that_dont_ever_get_used 32
- fix_freaky_non_versioned_library_paths_that_dont_ever_get_used 64
- # and mips is just freaky in general ;p
- fix_freaky_non_versioned_library_paths_that_dont_ever_get_used o32
- # and finally, the non-bitdepth-or-ABI-specific freaky path
- if [ -d ${D}/${LIBPATH}/../lib ] ; then
- mv ${D}/${LIBPATH}/../lib/* ${D}/${LIBPATH}/
- rm -rf ${D}/${LIBPATH}/../lib
- fi
- # we also dont want libs in /usr/lib*
- if [ -d ${D}/${PREFIX}/lib32 -a -d ${D}/${LIBPATH}/32 ] ; then
- mv ${D}/${PREFIX}/lib32/* ${D}/${LIBPATH}/32/
- rm -rf ${D}/${PREFIX}/lib32/
- elif [ -d ${D}/${PREFIX}/lib32 -a ! -d ${D}/${LIBPATH}/32 ] ; then
- mv ${D}/${PREFIX}/lib32/* ${D}/${LIBPATH}/
- rm -rf ${D}/${PREFIX}/lib32/
- fi
- if [ -d ${D}/${PREFIX}/lib64 -a -d ${D}/${LIBPATH}/64 ] ; then
- mv ${D}/${PREFIX}/lib64/* ${D}/${LIBPATH}/64/
- rm -rf ${D}/${PREFIX}/lib64/
- elif [ -d ${D}/${PREFIX}/lib64 -a ! -d ${D}/${LIBPATH}/64 ] ; then
- mv ${D}/${PREFIX}/lib64/* ${D}/${LIBPATH}/
- rm -rf ${D}/${PREFIX}/lib64/
- fi
- if [ "$(get_multilibdir)" != "lib" ] ; then
- mv ${D}/${PREFIX}/lib/*so* ${D}/${PREFIX}/lib/*\.la \
- ${D}/${PREFIX}/lib/*\.a ${D}/${LIBPATH}
- else
- mv ${D}/${PREFIX}/lib/*so* ${D}/${PREFIX}/lib/*\.la \
- ${D}/${PREFIX}/lib/*\.a ${D}/${LIBPATH}/32/
- fi
- # and sometimes crap ends up here too :|
- mv ${D}/${LIBPATH}/../*.a ${D}/${LIBPATH}/../*.la ${D}/${LIBPATH}/../*so* \
- ${D}/${LIBPATH}/
-
- # make sure the libtool archives have libdir set to where they actually
- # -are-, and not where they -used- to be.
- fix_libtool_libdir_paths "$(find ${D}/${LIBPATH} -name *.la)"
-
- # Make sure we dont have stuff lying around that
- # can nuke multiple versions of gcc
- if ! use build
- then
- cd ${D}${LIBPATH}
-
- # Move Java headers to compiler-specific dir
- for x in ${D}${PREFIX}/include/gc*.h ${D}${PREFIX}/include/j*.h
- do
- [ -f "${x}" ] && mv -f ${x} ${D}${LIBPATH}/include/
- done
- for x in gcj gnu java javax org
- do
- if [ -d "${D}${PREFIX}/include/${x}" ]
- then
- dodir /${LIBPATH}/include/${x}
- mv -f ${D}${PREFIX}/include/${x}/* ${D}${LIBPATH}/include/${x}/
- rm -rf ${D}${PREFIX}/include/${x}
- fi
- done
-
- if [ -d "${D}${PREFIX}/lib/security" ]
- then
- dodir /${LIBPATH}/security
- mv -f ${D}${PREFIX}/lib/security/* ${D}${LIBPATH}/security
- rm -rf ${D}${PREFIX}/lib/security
- fi
-
- # Move libgcj.spec to compiler-specific directories
- [ -f "${D}${PREFIX}/lib/libgcj.spec" ] && \
- mv -f ${D}${PREFIX}/lib/libgcj.spec ${D}${LIBPATH}/libgcj.spec
-
- # Rename jar because it could clash with Kaffe's jar if this gcc is
- # primary compiler (aka don't have the -<version> extension)
- cd ${D}${PREFIX}/${CTARGET}/gcc-bin/${MY_PV_FULL}
- [ -f jar ] && mv -f jar gcj-jar
-
- # Move <cxxabi.h> to compiler-specific directories
- [ -f "${D}${STDCXX_INCDIR}/cxxabi.h" ] && \
- mv -f ${D}${STDCXX_INCDIR}/cxxabi.h ${D}${LIBPATH}/include/
-
- # These should be symlinks
- cd ${D}${BINPATH}
- for x in gcc g++ c++ g77 gcj
- do
- if [ "${CHOST}" == "${CTARGET}" ] && [ -f "${CTARGET}-${x}" ]
- then
- [ ! -f "${x}" ] && mv "${CTARGET}-${x}" "${x}"
- ln -sf ${x} ${CTARGET}-${x}
- fi
-
- if [ -f "${CTARGET}-${x}-${PV}" ]
- then
- rm -f ${CTARGET}-${x}-${PV}
- ln -sf ${CTARGET}-${x} ${CTARGET}-${x}-${PV}
- fi
- done
- fi
-
- cd ${S}
- if ! use build && [ "${CHOST}" == "${CTARGET}" ] ; then
- prepman ${DATAPATH}
- prepinfo ${DATAPATH}
- else
- rm -rf ${D}/usr/share/{man,info}
- rm -rf ${D}${DATAPATH}/{man,info}
- fi
-
- # Rather install the script, else portage with changing $FILESDIR
- # between binary and source package borks things ....
- if [ "${CHOST}" == "${CTARGET}" ] ; then
- insinto /lib/rcscripts/awk
- doins ${FILESDIR}/awk/fixlafiles.awk
- exeinto /sbin
- doexe ${FILESDIR}/fix_libtool_files.sh
- fi
-}
-
-fix_freaky_non_versioned_library_paths_that_dont_ever_get_used() {
- # first the multilib case
- if [ -d ${D}/${LIBPATH}/../$1 -a -d ${D}/${LIBPATH}/$1 ] ; then
- mv ${D}/${LIBPATH}/../$1/* ${D}/${LIBPATH}/$1/
- rm -rf ${D}/${LIBPATH}/../$1
- fi
- if [ -d ${D}/${LIBPATH}/../lib$1 -a -d ${D}/${LIBPATH}/$1 ] ; then
- mv ${D}/${LIBPATH}/../lib$1/* ${D}/${LIBPATH}/$1/
- rm -rf ${D}/${LIBPATH}/../lib$1
- fi
- # and now to fix up the non-multilib case
- if [ -d ${D}/${LIBPATH}/../$1 -a ! -d ${D}/${LIBPATH}/$1 ] ; then
- mv ${D}/${LIBPATH}/../$1/* ${D}/${LIBPATH}/
- rm -rf ${D}/${LIBPATH}/../$1
- fi
- if [ -d ${D}/${LIBPATH}/../lib$1 -a ! -d ${D}/${LIBPATH}/$1 ] ; then
- mv ${D}/${LIBPATH}/../lib$1/* ${D}/${LIBPATH}/
- rm -rf ${D}/${LIBPATH}/../lib$1
- fi
-}
-
-fix_libtool_libdir_paths() {
- local dirpath
- for archive in ${*} ; do
- dirpath=$(dirname ${archive} | sed -e "s:^${D}::")
- sed -i ${archive} -e "s:^libdir.*:libdir=\'${dirpath}\':"
- done
-}
-
-
-pkg_preinst() {
-
- if [ ! -f "${WORKDIR}/.chkgccversion" ]
- then
- mkdir -p ${WORKDIR}
- chk_gcc_version
- fi
-
- # Make again sure that the linker "should" be able to locate
- # libstdc++.so ...
- if use multilib && [ "${ARCH}" = "amd64" ]
- then
- # Can't always find libgcc_s.so.1, make it find it
- export LD_LIBRARY_PATH="${LIBPATH}:${LIBPATH}/../lib64:${LIBPATH}/../lib32:${LD_LIBRARY_PATH}"
- else
- export LD_LIBRARY_PATH="${LIBPATH}:${LD_LIBRARY_PATH}"
- fi
- ${ROOT}/sbin/ldconfig
-}
-
-pkg_postinst() {
-
- if use multilib && [ "${ARCH}" = "amd64" ]
- then
- # Can't always find libgcc_s.so.1, make it find it
- export LD_LIBRARY_PATH="${LIBPATH}:${LIBPATH}/../lib64:${LIBPATH}/../lib32:${LD_LIBRARY_PATH}"
- else
- export LD_LIBRARY_PATH="${LIBPATH}:${LD_LIBRARY_PATH}"
- fi
-
- should_we_gcc_config && do_gcc_config
-
- # Update libtool linker scripts to reference new gcc version ...
- if [ "${ROOT}" = "/" ] && \
- [ -f "${WORKDIR}/.oldgccversion" -o -f "${WORKDIR}/.oldgccchost" ]
- then
- local OLD_GCC_VERSION=
- local OLD_GCC_CHOST=
-
- if [ -f "${WORKDIR}/.oldgccversion" ] && \
- [ -n "$(cat "${WORKDIR}/.oldgccversion")" ]
- then
- OLD_GCC_VERSION="$(cat "${WORKDIR}/.oldgccversion")"
- else
- OLD_GCC_VERSION="${MY_PV_FULL}"
- fi
-
- if [ -f "${WORKDIR}/.oldgccchost" ] && \
- [ -n "$(cat "${WORKDIR}/.oldgccchost")" ]
- then
- OLD_GCC_CHOST="--oldarch $(cat "${WORKDIR}/.oldgccchost")"
- fi
-
- /sbin/fix_libtool_files.sh ${OLD_GCC_VERSION} ${OLD_GCC_CHOST}
- fi
-}