280 lines
7.7 KiB
Bash
280 lines
7.7 KiB
Bash
# Copyright 1999-2011 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc/gcc-2.95.3-r9.ebuild,v 1.8 2011/07/20 08:58:35 dirtyepic Exp $
|
|
|
|
inherit eutils flag-o-matic toolchain-funcs versionator fixheadtails gnuconfig
|
|
|
|
# The next command strips most flags from CFLAGS/CXXFLAGS. If you do
|
|
# not like it, comment it out, but do not file bugreports if you run into
|
|
# problems.
|
|
do_filter_flags() {
|
|
strip-flags
|
|
|
|
# In general gcc does not like optimization ... we'll add -O2 where safe
|
|
filter-flags -O?
|
|
|
|
# Compile problems with these (bug #6641 among others)...
|
|
filter-flags -fno-exceptions -fomit-frame-pointer -ggdb
|
|
|
|
# Are we trying to compile with gcc3 ? CFLAGS and CXXFLAGS needs to be
|
|
# valid for gcc-2.95.3 ...
|
|
if [[ $(tc-arch) == "x86" || $(tc-arch) == "amd64" ]] ; then
|
|
CFLAGS=${CFLAGS//-mtune=/-mcpu=}
|
|
CXXFLAGS=${CXXFLAGS//-mtune=/-mcpu=}
|
|
fi
|
|
|
|
replace-cpu-flags k6-{2,3} k6
|
|
replace-cpu-flags athlon{,-{tbird,4,xp,mp}} i686
|
|
|
|
replace-cpu-flags pentium-mmx i586
|
|
replace-cpu-flags pentium{2,3,4} i686
|
|
|
|
replace-cpu-flags ev6{7,8} ev6
|
|
|
|
export CFLAGS CXXFLAGS
|
|
}
|
|
|
|
export CTARGET=${CTARGET:-${CHOST}}
|
|
if [[ ${CTARGET} = ${CHOST} ]] ; then
|
|
if [[ ${CATEGORY/cross-} != ${CATEGORY} ]] ; then
|
|
export CTARGET=${CATEGORY/cross-}
|
|
fi
|
|
fi
|
|
|
|
LOC="/usr"
|
|
GCC_BRANCH_VER="$(get_version_component_range 1-2)"
|
|
GCC_RELEASE_VER="$(get_version_component_range 1-3)"
|
|
|
|
LIBPATH="${LOC}/lib/gcc-lib/${CTARGET}/${GCC_RELEASE_VER}"
|
|
BINPATH="${LOC}/${CTARGET}/gcc-bin/${GCC_BRANCH_VER}"
|
|
DATAPATH="${LOC}/share/gcc-data/${CTARGET}/${GCC_BRANCH_VER}"
|
|
# Dont install in /usr/include/g++/, but in gcc internal directory.
|
|
# We will handle /usr/include/g++/ with gcc-config ...
|
|
STDCXX_INCDIR="${LIBPATH}/include/g++"
|
|
|
|
PATCH_VER=1.2
|
|
DESCRIPTION="The GNU Compiler Collection"
|
|
HOMEPAGE="http://gcc.gnu.org/"
|
|
SRC_URI="ftp://gcc.gnu.org/pub/gcc/releases/${P}/${P}.tar.gz
|
|
mirror://gentoo/${P}-patches-${PATCH_VER}.tar.bz2"
|
|
|
|
LICENSE="GPL-2 LGPL-2.1"
|
|
KEYWORDS="x86 ppc sparc alpha"
|
|
IUSE="static nls build multislot nocxx fortran"
|
|
|
|
if use multislot ; then
|
|
SLOT="${CTARGET}-${GCC_CONFIG_VER}"
|
|
elif [[ ${CTARGET} != ${CHOST} ]] ; then
|
|
SLOT="${CTARGET}-${GCC_BRANCH_VER}"
|
|
else
|
|
SLOT="${GCC_BRANCH_VER}"
|
|
fi
|
|
|
|
RDEPEND=">=sys-devel/gcc-config-1.4
|
|
>=sys-libs/zlib-1.1.4
|
|
>=sys-apps/texinfo-4.2-r4
|
|
!build? ( >=sys-libs/ncurses-5.2-r2 )"
|
|
DEPEND="${RDEPEND}
|
|
!build? ( nls? ( sys-devel/gettext ) )"
|
|
|
|
# Hack used to patch Makefiles to install into the build dir
|
|
FAKE_ROOT=""
|
|
|
|
src_unpack() {
|
|
unpack ${P}.tar.gz
|
|
unpack ${P}-patches-${PATCH_VER}.tar.bz2
|
|
[[ $(tc-arch ${TARGET}) == "alpha" ]] \
|
|
&& rm -f "${EPATCH_SOURCE}"/10_all_new-atexit.patch
|
|
|
|
cd "${S}"
|
|
epatch
|
|
|
|
# Fixup libtool to correctly generate .la files with portage
|
|
libtoolize --copy --force
|
|
|
|
# Fix outdated head/tails format #65668
|
|
ht_fix_file configure gcc/Makefile.in
|
|
|
|
# Currently if any path is changed via the configure script, it breaks
|
|
# installing into ${D}. We should not patch it in src_install() with
|
|
# absolute paths, as some modules then gets rebuild with the wrong
|
|
# paths. Thus we use $FAKE_ROOT.
|
|
for x in $(find . -name Makefile.in) ; do
|
|
sed -i \
|
|
-e 's:datadir = @datadir@:datadir = $(FAKE_ROOT)@datadir@:' \
|
|
-e 's:bindir = @bindir@:bindir = $(FAKE_ROOT)@bindir@:' \
|
|
-e 's:gxx_include_dir=${includedir}:gxx_include_dir=$(FAKE_ROOT)${includedir}:' \
|
|
${x} || die "could not sed $x"
|
|
done
|
|
|
|
gnuconfig_update
|
|
}
|
|
|
|
src_compile() {
|
|
export LINGUAS=""
|
|
|
|
# Make sure we have sane CFLAGS
|
|
do_filter_flags
|
|
|
|
# Build in a separate build tree
|
|
mkdir -p "${WORKDIR}"/build
|
|
cd "${WORKDIR}"/build
|
|
|
|
local gcclangs="c"
|
|
local myconf=""
|
|
if use build ; then
|
|
myconf="--disable-nls"
|
|
else
|
|
myconf=""
|
|
use !nocxx && gcclangs="${gcclangs},c++"
|
|
use fortran && gcclangs="${gcclangs},f77"
|
|
use nls && myconf="${myconf} --enable-nls --without-included-gettext"
|
|
fi
|
|
[[ -n ${CBUILD} ]] && myconf="${myconf} --build=${CBUILD}"
|
|
[[ ${CHOST} == ${CTARGET} ]] \
|
|
&& myconf="${myconf} --enable-shared --enable-threads=posix" \
|
|
|| myconf="${myconf} --disable-shared --disable-threads"
|
|
myconf="--prefix=${LOC}
|
|
--bindir=${BINPATH}
|
|
--datadir=${DATAPATH}
|
|
--mandir=${DATAPATH}/man
|
|
--infodir=${DATAPATH}/info
|
|
--host=${CHOST}
|
|
--target=${CTARGET}
|
|
--with-system-zlib
|
|
--enable-long-long
|
|
--enable-version-specific-runtime-libs
|
|
--with-local-prefix=${LOC}/local
|
|
--enable-languages=${gcclangs}
|
|
${myconf}
|
|
${EXTRA_ECONF}"
|
|
echo ./configure "${myconf}"
|
|
addwrite "/dev/zero"
|
|
"${S}"/configure ${myconf} || die "configure failed"
|
|
|
|
touch "${S}"/gcc/c-gperf.h
|
|
|
|
if ! use static ; then
|
|
# Fix for our libtool-portage.patch
|
|
S="${WORKDIR}/build" \
|
|
emake bootstrap-lean \
|
|
LIBPATH="${LIBPATH}" STAGE1_CFLAGS="-O" || die "make failed"
|
|
# Above FLAGS optimize and speedup build, thanks
|
|
# to Jeff Garzik <jgarzik@mandrakesoft.com>
|
|
else
|
|
S="${WORKDIR}/build" \
|
|
emake LDFLAGS=-static bootstrap \
|
|
LIBPATH="${LIBPATH}" STAGE1_CFLAGS="-O" || die "make static failed"
|
|
fi
|
|
}
|
|
|
|
src_install() {
|
|
# Do allow symlinks in ${LOC}/lib/gcc-lib/${CHOST}/${PV}/include as
|
|
# this can break the build.
|
|
for x in "${WORKDIR}"/build/gcc/include/* ; do
|
|
[[ -L ${x} ]] && rm -f "${x}"
|
|
done
|
|
|
|
# Do the 'make install' from the build directory
|
|
cd "${WORKDIR}"/build
|
|
S="${WORKDIR}/build" \
|
|
make \
|
|
prefix=${D}${LOC} \
|
|
bindir=${D}${BINPATH} \
|
|
datadir=${D}${DATAPATH} \
|
|
mandir=${D}${DATAPATH}/man \
|
|
infodir=${D}${DATAPATH}/info \
|
|
LIBPATH="${LIBPATH}" \
|
|
FAKE_ROOT="${D}" \
|
|
install || die
|
|
|
|
[[ -r ${D}${BINPATH}/gcc ]] || die "gcc not found in ${D}"
|
|
|
|
dodir /lib /usr/bin
|
|
dodir /etc/env.d/gcc
|
|
cat << EOF > "${D}"/etc/env.d/gcc/${CTARGET}-${GCC_RELEASE_VER}
|
|
PATH="${BINPATH}"
|
|
ROOTPATH="${BINPATH}"
|
|
LDPATH="${LIBPATH}"
|
|
MANPATH="${DATAPATH}/man"
|
|
INFOPATH="${DATAPATH}/info"
|
|
STDCXX_INCDIR="${STDCXX_INCDIR##*/}"
|
|
EOF
|
|
|
|
# Make sure we dont have stuff lying around that
|
|
# can nuke multiple versions of gcc
|
|
if ! use build ; then
|
|
cd "${D}"${LIBPATH}
|
|
|
|
# Tell libtool files where real libraries are
|
|
for LA in "${D}"${LOC}/lib/*.la "${D}"${LIBPATH}/../*.la ; do
|
|
if [[ -f ${LA} ]] ; then
|
|
sed -i -e "s:/usr/lib:${LIBPATH}:" "${LA}"
|
|
mv "${LA}" "${D}"${LIBPATH}
|
|
fi
|
|
done
|
|
|
|
# Move all the libraries to version specific libdir.
|
|
for x in "${D}"${LOC}/lib/*.{so,a}* "${D}"${LIBPATH}/../*.{so,a}* ; do
|
|
[[ -f ${x} ]] && mv -f "${x}" "${D}"${LIBPATH}
|
|
done
|
|
|
|
# These should be symlinks
|
|
cd "${D}"${BINPATH}
|
|
for x in gcc g++ c++ g77 gcj ; do
|
|
# For some reason, g77 gets made instead of ${CTARGET}-g77... this makes it safe
|
|
[[ -f ${x} ]] && mv ${x} ${CTARGET}-${x}
|
|
|
|
if [[ ${CHOST} == ${CTARGET} ]] && [[ -f ${CTARGET}-${x} ]] ; then
|
|
[[ ! -f ${x} ]] && mv ${CTARGET}-${x} ${x}
|
|
ln -sf ${x} ${CTARGET}-${x}
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# This one comes with binutils
|
|
rm -f "${D}"${LOC}/lib/libiberty.a
|
|
|
|
cd "${S}"
|
|
if use build ; then
|
|
rm -r "${D}"/usr/share/{man,info}
|
|
rm -r "${D}"/${DATAPATH}/{man,info}
|
|
elif ! has nodoc ${FEATURES} ; then
|
|
cd "${S}"
|
|
docinto /
|
|
dodoc README* FAQ MAINTAINERS
|
|
docinto html
|
|
dodoc faq.html
|
|
docinto gcc
|
|
cd "${S}"/gcc
|
|
dodoc BUGS ChangeLog* FSFChangeLog* LANGUAGES NEWS PROBLEMS README* SERVICE TESTS.FLUNK
|
|
cd "${S}"/libchill
|
|
docinto libchill
|
|
dodoc ChangeLog
|
|
cd "${S}"/libf2c
|
|
docinto libf2c
|
|
dodoc ChangeLog changes.netlib README TODO
|
|
cd "${S}"/libio
|
|
docinto libio
|
|
dodoc ChangeLog NEWS README
|
|
cd dbz
|
|
docinto libio/dbz
|
|
dodoc README
|
|
cd ../stdio
|
|
docinto libio/stdio
|
|
dodoc ChangeLog*
|
|
cd "${S}"/libobjc
|
|
docinto libobjc
|
|
dodoc ChangeLog README* THREADS*
|
|
cd "${S}"/libstdc++
|
|
docinto libstdc++
|
|
dodoc ChangeLog NEWS
|
|
fi
|
|
has noman ${FEATURES} && rm -r "${D}"/${DATAPATH}/man
|
|
has noinfo ${FEATURES} && rm -r "${D}"/${DATAPATH}/info
|
|
}
|
|
|
|
pkg_postinst() {
|
|
[[ ${ROOT} != "/" ]] && return 0
|
|
gcc-config --use-portage-chost ${CTARGET}-${GCC_RELEASE_VER}
|
|
}
|