# Copyright 1999-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/dev-lang/fpc/fpc-2.2.4-r2.ebuild,v 1.1 2009/07/22 20:24:39 truedfx Exp $ inherit eutils RESTRICT="strip" #269221 S="${WORKDIR}/fpcbuild-${PV}/fpcsrc" HOMEPAGE="http://www.freepascal.org/" DESCRIPTION="Free Pascal Compiler" SRC_URI="mirror://sourceforge/freepascal/fpcbuild-${PV}.tar.gz x86? ( mirror://sourceforge/freepascal/fpc-2.2.4.i386-linux.tar ) emul-linux-x86? ( mirror://sourceforge/freepascal/fpc-2.2.4.i386-linux.tar ) sparc? ( mirror://sourceforge/freepascal/fpc-2.2.4.sparc-linux.tar ) ppc? ( mirror://sourceforge/freepascal/fpc-2.2.4.powerpc-linux.tar ) amd64? ( mirror://sourceforge/freepascal/fpc-2.2.4.x86_64-linux.tar ) doc? ( mirror://sourceforge/freepascal/fpc-${PV}-doc-html.tar.gz mirror://gentoo/fpc-${PV}-fpctoc.htx.bz2 )" SLOT="0" LICENSE="GPL-2 LGPL-2.1 LGPL-2.1-FPC" KEYWORDS="~amd64 ~ppc ~sparc ~x86" IUSE="doc emul-linux-x86 source" DEPEND="!dev-lang/fpc-bin !dev-lang/fpc-source" RDEPEND="${DEPEND}" #DEPEND="${DEPEND} # >=sys-devel/binutils-2.19.1-r1" src_unpack_arch() { S="${WORKDIR}/${ARCH}/fpcbuild-${PV}/fpcsrc" case ${ARCH} in x86) FPC_ARCH="i386" PV_BIN=2.2.4 ;; ppc) FPC_ARCH="powerpc" PV_BIN=2.2.4 ;; amd64) FPC_ARCH="x86_64" PV_BIN=2.2.4 ;; sparc) FPC_ARCH="sparc" PV_BIN=2.2.4 ;; *) die "This ebuild doesn't support ${ARCH}." ;; esac mkdir "${WORKDIR}/${ARCH}" || die cd "${WORKDIR}/${ARCH}" || die # unpack ${A} || die "Unpacking ${A} failed!" unpack fpcbuild-${PV}.tar.gz || die "Unpacking fpcbuild-${PV}.tar.gz failed!" tar -xf /usr/portage/distfiles/fpc-2.2.4.${FPC_ARCH}-linux.tar || die "Unpacking fpc-2.2.4.${FPC_ARCH}-linux.tar failed!" tar -xf binary.${FPC_ARCH}-linux.tar || die "Unpacking binary.${FPC_ARCH}-linux.tar failed!" tar -xzf base.${FPC_ARCH}-linux.tar.gz || die "Unpacking base.${FPC_ARCH}-linux.tar.gz failed!" cd "${S}" || die epatch "${FILESDIR}"/${P}-execstack.patch epatch "${FILESDIR}"/${P}-crtlinkpath.patch #sed -i -e 's/ -Xs / /g' $(find . -name Makefile) || die "sed failed" } src_unpack() { # unpack x86 arch if requested case ${ARCH} in amd64) if use emul-linux-x86 ; then einfo "Unpacking x86..." ARCH="x86" src_unpack_arch fi ;; esac # unpack current arch einfo "Unpacking ${ARCH}..." src_unpack_arch } set_pp() { case ${ARCH} in x86) FPC_ARCH="386" ;; ppc) FPC_ARCH="ppc" ;; amd64) FPC_ARCH="x64" ;; sparc) FPC_ARCH="sparc" ;; *) die "This ebuild doesn't support ${ARCH}." ;; esac case ${1} in bootstrap) pp="${WORKDIR}/${ARCH}"/lib/fpc/${PV_BIN}/ppc${FPC_ARCH} ;; new) pp="${S}"/compiler/ppc${FPC_ARCH} ;; *) die "set_pp: unknown argument: ${1}" ;; esac } src_compile_arch() { S="${WORKDIR}/${ARCH}/fpcbuild-${PV}/fpcsrc" cd "${S}" || die local pp # Using the bootstrap compiler. set_pp bootstrap emake -j1 PP="${pp}" compiler_cycle || die "make compiler_cycle failed!" # Save new compiler from cleaning... cp "${S}"/compiler/ppc${FPC_ARCH} "${S}"/ppc${FPC_ARCH}.new # ...rebuild with current version... emake -j1 PP="${S}"/ppc${FPC_ARCH}.new compiler_cycle || die "make compiler_cycle failed!" # ..and clean up afterwards rm "${S}"/ppc${FPC_ARCH}.new # Using the new compiler. set_pp new emake -j1 PP="${pp}" rtl_clean || die "make rtl_clean failed" emake -j1 PP="${pp}" rtl packages_all utils || die "make failed" } src_compile() { # compile x86 arch if requested case ${ARCH} in amd64) if use emul-linux-x86 ; then einfo "Compiling x86..." ARCH="x86" src_compile_arch fi ;; esac # compile current arch einfo "Compiling ${ARCH}..." src_compile_arch } src_install_arch() { S="${WORKDIR}/${ARCH}/fpcbuild-${PV}/fpcsrc" cd "${S}" || die local pp set_pp new set -- PP="${pp}" FPCMAKE="${S}/utils/fpcm/fpcmake" \ INSTALL_PREFIX="${D}"usr \ INSTALL_DOCDIR="${D}"usr/share/doc/${P} \ INSTALL_MANDIR="${D}"usr/share/man \ INSTALL_SOURCEDIR="${D}"usr/lib/fpc/${PV}/source emake -j1 "$@" compiler_install rtl_install packages_install \ utils_install || die "make install failed!" dosym ../lib/fpc/${PV}/ppc${FPC_ARCH} /usr/bin/ppc${FPC_ARCH} cd "${S}"/../install/doc emake -j1 "$@" installdoc || die "make installdoc failed!" cd "${S}"/../install/man emake -j1 "$@" installman || die "make installman failed!" if use doc ; then cd "${S}"/../../share/doc/fpdocs-${PV} insinto /usr/share/doc/${P} doins -r * || die "doins fpdocs failed" newins "${WORKDIR}/${ARCH}"/fpc-${PV}-fpctoc.htx fpctoc.htx || die "newins fpctoc.htx failed" fi if use source ; then cd "${S}" shift emake -j1 PP="${D}"usr/bin/ppc${FPC_ARCH} "$@" sourceinstall || die "make sourceinstall failed!" find "${D}"usr/lib/fpc/${PV}/source -name '*.o' -exec rm {} \; fi "${D}"usr/lib/fpc/${PV}/samplecfg "${D}"usr/lib/fpc/${PV} "${D}"etc || die "samplecfg failed" sed -i -e "s:${D}:/:g" "${D}"etc/fpc.cfg || die "sed fpc.cfg failed" rm -rf "${D}"usr/lib/fpc/lexyacc } src_install() { # install x86 arch if requested case ${ARCH} in amd64) if use emul-linux-x86 ; then einfo "Installing x86..." ARCH="x86" src_install_arch fi ;; esac # install current arch einfo "Installing ${ARCH}..." src_install_arch }