diff options
author | Jeremy Huddleston <eradicator@gentoo.org> | 2005-01-10 11:26:22 +0000 |
---|---|---|
committer | Jeremy Huddleston <eradicator@gentoo.org> | 2005-01-10 11:26:22 +0000 |
commit | 310061f90263dd9b7e095cdc7b18e30e7b69fc62 (patch) | |
tree | 6c68c39a89ba3e91098d6cd5737798bb74956207 /sys-devel/gcc/gcc-3.3.5-r1.ebuild | |
parent | Moved src_install, pkg_preinst, and pkg_postinst into eclass using gcc-3.3.5-... (diff) | |
download | historical-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.ebuild | 328 |
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 -} |