diff options
author | Lennart Kolmodin <kolmodin@gentoo.org> | 2009-12-05 09:19:27 +0000 |
---|---|---|
committer | Lennart Kolmodin <kolmodin@gentoo.org> | 2009-12-05 09:19:27 +0000 |
commit | 3be1c8f17dd4ae0aa730848a69e6ce8a18328762 (patch) | |
tree | 9964d12f9d1204cb03240ac8bedbd90125f2fc44 /dev-lang | |
parent | Remove kde-base/kdelibs:3.5 support. (diff) | |
download | gentoo-2-3be1c8f17dd4ae0aa730848a69e6ce8a18328762.tar.gz gentoo-2-3be1c8f17dd4ae0aa730848a69e6ce8a18328762.tar.bz2 gentoo-2-3be1c8f17dd4ae0aa730848a69e6ce8a18328762.zip |
Fix several build bugs in dev-lang/ghc-6.10.4, see ChangeLog
(Portage version: 2.1.6.13/cvs/Linux x86_64)
Diffstat (limited to 'dev-lang')
-rw-r--r-- | dev-lang/ghc/ChangeLog | 17 | ||||
-rw-r--r-- | dev-lang/ghc/files/ghc-6.10.4-autoconf.patch | 44 | ||||
-rw-r--r-- | dev-lang/ghc/files/ghc-6.10.4-libm-detection.patch | 43 | ||||
-rw-r--r-- | dev-lang/ghc/ghc-6.10.4-r1.ebuild | 340 |
4 files changed, 443 insertions, 1 deletions
diff --git a/dev-lang/ghc/ChangeLog b/dev-lang/ghc/ChangeLog index 2db0547a2842..c258d08d7852 100644 --- a/dev-lang/ghc/ChangeLog +++ b/dev-lang/ghc/ChangeLog @@ -1,6 +1,21 @@ # ChangeLog for dev-lang/ghc # Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ChangeLog,v 1.171 2009/10/31 13:29:17 kolmodin Exp $ +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ChangeLog,v 1.172 2009/12/05 09:19:27 kolmodin Exp $ + +*ghc-6.10.4-r1 (05 Dec 2009) + + 05 Dec 2009; <kolmodin@gentoo.org> +ghc-6.10.4-r1.ebuild, + +files/ghc-6.10.4-autoconf.patch, +files/ghc-6.10.4-libm-detection.patch: + Attempt to fix a lot of recent trouble with building ghc-6.10.4; + * bug #295487, could not build with >=autoconf-2.64; + patch by int-e, reported by Tobias Hommel <tobi@keksbude.net> + * bug #292772, add CFLAGS to ghc wrapper enables hardended to build; + reported and fixed by Zhang, Hongjiu <secludedsage@gmail.com> with the + help of ivanm, trofi, dcoutts and igloo. + * bug #293208, undefined reference to `sqrt', libm detection trouble; + Roie Kerstein and Renato Gallo found and tracked down the bug, + asuffield suggested the fix and Sergei Trofimovich <slyfox@inbox.ru> + patched. 31 Oct 2009; <kolmodin@gentoo.org> -ghc-6.10.2.ebuild, -ghc-6.10.3.ebuild, metadata.xml: diff --git a/dev-lang/ghc/files/ghc-6.10.4-autoconf.patch b/dev-lang/ghc/files/ghc-6.10.4-autoconf.patch new file mode 100644 index 000000000000..57d0de55e4d0 --- /dev/null +++ b/dev-lang/ghc/files/ghc-6.10.4-autoconf.patch @@ -0,0 +1,44 @@ +diff --git a/aclocal.m4 b/aclocal.m4 +index 4678774..7f947f0 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -212,7 +212,7 @@ fi + changequote([, ])dnl + ]) + FP_COMPARE_VERSIONS([$fptools_cv_greencard_version],[-lt],[$1], +- [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[]dnl ++ [AC_MSG_ERROR([greencard version $1 or later is required (found '$fptools_cv_greencard_version')])])[] + GreenCardVersion=$fptools_cv_greencard_version + AC_SUBST(GreenCardVersion) + ]) +@@ -247,7 +247,7 @@ changequote([, ])dnl + if test ! -f compiler/parser/Parser.hs || test ! -f compiler/main/ParsePkgConf.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs + then + FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.15], +- [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[]dnl ++ [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[] + fi + HappyVersion=$fptools_cv_happy_version; + AC_SUBST(HappyVersion) +@@ -282,7 +282,7 @@ changequote([, ])dnl + if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs + then + FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.1.0], +- [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[]dnl ++ [AC_MSG_ERROR([Alex version 2.1.0 or later is required to compile GHC.])])[] + fi + AlexVersion=$fptools_cv_alex_version; + AC_SUBST(AlexVersion) +diff --git a/configure.ac b/configure.ac +index 4d39e74..e3573c9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -795,7 +795,7 @@ if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then + AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.]) + fi + FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.4], +- [AC_MSG_ERROR([GHC version 6.4 or later is required to compile GHC.])])dnl ++ [AC_MSG_ERROR([GHC version 6.4 or later is required to compile GHC.])]) + fi; + + # This uses GHC, so put it after the "GHC is required" check above: diff --git a/dev-lang/ghc/files/ghc-6.10.4-libm-detection.patch b/dev-lang/ghc/files/ghc-6.10.4-libm-detection.patch new file mode 100644 index 000000000000..0e90deb507f1 --- /dev/null +++ b/dev-lang/ghc/files/ghc-6.10.4-libm-detection.patch @@ -0,0 +1,43 @@ +Fri Dec 4 23:40:12 EET 2009 Sergei Trofimovich <slyfox@inbox.ru> + * configure.ac: fix libm checks (Trac #3730) + + libbfd pulled libm as dependency and broke LIBM= detection. + + Patch moves libm in library tests as early as possible. + Thanks to asuffield for suggesting such a simple fix. + Thanks to Roie Kerstein and Renato Gallo for finding + and tracking down the issue. + +http://bugs.gentoo.org/show_bug.cgi?id=293208 +http://hackage.haskell.org/trac/ghc/ticket/3730 +diff -rN -u old-ghc/configure.ac new-ghc/configure.ac +--- old-ghc/configure.ac 2009-12-04 23:51:06.135605014 +0200 ++++ new-ghc/configure.ac 2009-12-04 23:51:06.344604339 +0200 +@@ -713,18 +713,22 @@ + AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.]) + fi + +-dnl ** check whether this machine has BFD and liberty installed (used for debugging) +-dnl the order of these tests matters: bfd needs liberty +-AC_CHECK_LIB(iberty, xmalloc) +-AC_CHECK_LIB(bfd, bfd_init) +- + dnl ** check for math library ++dnl Keep that check as early as possible. ++dnl as we need to know whether we need libm ++dnl for math functions or not ++dnl (see http://hackage.haskell.org/trac/ghc/ticket/3730) + AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno]) + if test x"$fp_libm_not_needed" = xdunno; then + AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=]) + fi + AC_SUBST([LIBM]) + ++dnl ** check whether this machine has BFD and liberty installed (used for debugging) ++dnl the order of these tests matters: bfd needs liberty ++AC_CHECK_LIB(iberty, xmalloc) ++AC_CHECK_LIB(bfd, bfd_init) ++ + dnl ################################################################ + dnl Check for libraries + dnl ################################################################ diff --git a/dev-lang/ghc/ghc-6.10.4-r1.ebuild b/dev-lang/ghc/ghc-6.10.4-r1.ebuild new file mode 100644 index 000000000000..b5fa7d500874 --- /dev/null +++ b/dev-lang/ghc/ghc-6.10.4-r1.ebuild @@ -0,0 +1,340 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ghc-6.10.4-r1.ebuild,v 1.1 2009/12/05 09:19:27 kolmodin Exp $ + +# Brief explanation of the bootstrap logic: +# +# Previous ghc ebuilds have been split into two: ghc and ghc-bin, +# where ghc-bin was primarily used for bootstrapping purposes. +# From now on, these two ebuilds have been combined, with the +# binary USE flag used to determine whether or not the pre-built +# binary package should be emerged or whether ghc should be compiled +# from source. If the latter, then the relevant ghc-bin for the +# arch in question will be used in the working directory to compile +# ghc from source. +# +# This solution has the advantage of allowing us to retain the one +# ebuild for both packages, and thus phase out virtual/ghc. + +# Note to users of hardened gcc-3.x: +# +# If you emerge ghc with hardened gcc it should work fine (because we +# turn off the hardened features that would otherwise break ghc). +# However, emerging ghc while using a vanilla gcc and then switching to +# hardened gcc (using gcc-config) will leave you with a broken ghc. To +# fix it you would need to either switch back to vanilla gcc or re-emerge +# ghc (or ghc-bin). Note that also if you are using hardened gcc-3.x and +# you switch to gcc-4.x that this will also break ghc and you'll need to +# re-emerge ghc (or ghc-bin). People using vanilla gcc can switch between +# gcc-3.x and 4.x with no problems. + +inherit base autotools bash-completion eutils flag-o-matic toolchain-funcs ghc-package versionator + +DESCRIPTION="The Glasgow Haskell Compiler" +HOMEPAGE="http://www.haskell.org/ghc/" + +# discover if this is a snapshot release +IS_SNAPSHOT="$(get_version_component_range 4)" # non-empty if snapshot +EXTRA_SRC_URI="${PV}" +[[ "${IS_SNAPSHOT}" ]] && EXTRA_SRC_URI="stable/dist" + +arch_binaries="" + +arch_binaries="$arch_binaries x86? ( http://code.haskell.org/~ivanm/ghc-bin-${PV}-x86.tbz2 )" +arch_binaries="$arch_binaries amd64? ( http://haskell.org/~kolmodin/ghc-bin-${PV}-amd64.tbz2 )" +arch_binaries="$arch_binaries sparc? ( http://haskell.org/~duncan/ghc/ghc-bin-${PV}-sparc.tbz2 )" +arch_binaries="$arch_binaries ppc64? ( http://code.haskell.org/~slyfox/ghc-ppc64/ghc-bin-${PV}-ppc64.tbz2 )" + +#arch_binaries="$arch_binaries alpha? ( mirror://gentoo/ghc-bin-${PV}-alpha.tbz2 )" +#arch_binaries="$arch_binaries amd64? ( mirror://gentoo/ghc-bin-${PV}-amd64.tbz2 )" +#arch_binaries="$arch_binaries hppa? ( mirror://gentoo/ghc-bin-${PV}-hppa.tbz2 )" +#arch_binaries="$arch_binaries ia64? ( mirror://gentoo/ghc-bin-${PV}-ia64.tbz2 )" +#arch_binaries="$arch_binaries sparc? ( mirror://gentoo/ghc-bin-${PV}-sparc.tbz2 )" +#arch_binaries="$arch_binaries x86? ( mirror://gentoo/ghc-bin-${PV}-x86.tbz2 )" + +SRC_URI="!binary? ( http://haskell.org/ghc/dist/${EXTRA_SRC_URI}/${P}-src.tar.bz2 ) + !ghcbootstrap? ( $arch_binaries )" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~amd64 ~sparc ~ppc64 ~x86" +IUSE="binary doc ghcbootstrap" + +RDEPEND=" + !dev-lang/ghc-bin + >=sys-devel/gcc-2.95.3 + >=sys-devel/binutils-2.17 + >=dev-lang/perl-5.6.1 + >=dev-libs/gmp-4.1 + !<dev-haskell/haddock-2.4.2" +# earlier versions than 2.4.2 of haddock only works with older ghc releases + +DEPEND="${RDEPEND} + ghcbootstrap? ( doc? ( ~app-text/docbook-xml-dtd-4.2 + app-text/docbook-xsl-stylesheets + >=dev-libs/libxslt-1.1.2 ) )" +# In the ghcbootstrap case we rely on the developer having +# >=ghc-5.04.3 on their $PATH already + +PDEPEND="!ghcbootstrap? ( =app-admin/haskell-updater-0.9* )" + +append-ghc-cflags() { + local flag compile assemble link + for flag in $*; do + case ${flag} in + compile) compile="yes";; + assemble) assemble="yes";; + link) link="yes";; + *) + [[ ${compile} ]] && GHC_CFLAGS="${GHC_CFLAGS} -optc${flag}" + [[ ${assemble} ]] && GHC_CFLAGS="${GHC_CFLAGS} -opta${flag}" + [[ ${link} ]] && GHC_CFLAGS="${GHC_CFLAGS} -optl${flag}";; + esac + done +} + +ghc_setup_cflags() { + # We need to be very careful with the CFLAGS we ask ghc to pass through to + # gcc. There are plenty of flags which will make gcc produce output that + # breaks ghc in various ways. The main ones we want to pass through are + # -mcpu / -march flags. These are important for arches like alpha & sparc. + # We also use these CFLAGS for building the C parts of ghc, ie the rts. + strip-flags + strip-unsupported-flags + filter-flags -fPIC + + GHC_CFLAGS="" + for flag in ${CFLAGS}; do + case ${flag} in + + # Ignore extra optimisation (ghc passes -O to gcc anyway) + # -O2 and above break on too many systems + -O*) ;; + + # Arch and ABI flags are what we're really after + -m*) append-ghc-cflags compile assemble ${flag};; + + # Debugging flags don't help either. You can't debug Haskell code + # at the C source level and the mangler discards the debug info. + -g*) ;; + + # Ignore all other flags, including all -f* flags + esac + done + + # hardened-gcc needs to be disabled, because the mangler doesn't accept + # its output. + gcc-specs-pie && append-ghc-cflags compile link -nopie + gcc-specs-ssp && append-ghc-cflags compile -fno-stack-protector + + # prevent from failind building unregisterised ghc: + # http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg171602.html + use ppc64 && append-ghc-cflags compile -mminimal-toc + + # We also add -Wa,--noexecstack to get ghc to generate .o files with + # non-exectable stack. This it a hack until ghc does it itself properly. + append-ghc-cflags assemble "-Wa,--noexecstack" +} + +pkg_setup() { + if use ghcbootstrap; then + ewarn "You requested ghc bootstrapping, this is usually only used" + ewarn "by Gentoo developers to make binary .tbz2 packages for" + ewarn "use with the ghc ebuild's USE=\"binary\" feature." + use binary && \ + die "USE=\"ghcbootstrap binary\" is not a valid combination." + [[ -z $(type -P ghc) ]] && \ + die "Could not find a ghc to bootstrap with." + fi +} + +src_unpack() { + # Create the ${S} dir if we're using the binary version + use binary && mkdir "${S}" + + base_src_unpack + ghc_setup_cflags + + if use binary; then + + # Move unpacked files to the expected place + mv "${WORKDIR}/usr" "${S}" + else + if ! use ghcbootstrap; then + # Relocate from /usr to ${WORKDIR}/usr + sed -i -e "s|/usr|${WORKDIR}/usr|g" \ + "${WORKDIR}/usr/bin/ghc-${PV}" \ + "${WORKDIR}/usr/bin/ghci-${PV}" \ + "${WORKDIR}/usr/bin/ghc-pkg-${PV}" \ + "${WORKDIR}/usr/bin/hsc2hs" \ + "${WORKDIR}/usr/$(get_libdir)/${P}/package.conf" \ + || die "Relocating ghc from /usr to workdir failed" + fi + + # Hack to prevent haddock being installed, remove when ./configure + # supports something better to not build docs or haddock. + sed -i -e 's/DO_NOT_INSTALL =/DO_NOT_INSTALL = haddock/' \ + "${S}/utils/Makefile" + + # Modify the ghc driver script to use GHC_CFLAGS + sed -i -e "s|wrapped|wrapped ${GHC_CFLAGS}|" \ + "${S}/ghc/ghc.wrapper" + + + cd "${S}" + + # patch aclocal.m4 and configure.ac to work with >=autoconf-2.64 + epatch "${FILESDIR}/${P}-autoconf.patch" + + # fix configure.ac to detect libm need + # http://bugs.gentoo.org/show_bug.cgi?id=293208 + # http://hackage.haskell.org/trac/ghc/ticket/3730 + epatch "${FILESDIR}/ghc-6.10.4-libm-detection.patch" + + # as we have changed the build system with the readline patch + eautoreconf + fi +} + +src_compile() { + if ! use binary; then + + # initialize build.mk + echo '# Gentoo changes' > mk/build.mk + + # Put docs into the right place, ie /usr/share/doc/ghc-${PV} + echo "docdir = /usr/share/doc/${P}" >> mk/build.mk + echo "htmldir = /usr/share/doc/${P}" >> mk/build.mk + + # We also need to use the GHC_CFLAGS flags when building ghc itself + echo "SRC_HC_OPTS+=${GHC_CFLAGS}" >> mk/build.mk + echo "SRC_CC_OPTS+=${CFLAGS} -Wa,--noexecstack" >> mk/build.mk + + # We can't depend on haddock except when bootstrapping when we + # must build docs and include them into the binary .tbz2 package + if use ghcbootstrap && use doc; then + echo XMLDocWays="html" >> mk/build.mk + echo HADDOCK_DOCS=YES >> mk/build.mk + else + echo XMLDocWays="" >> mk/build.mk + echo HADDOCK_DOCS=NO >> mk/build.mk + fi + + # circumvent a very strange bug that seems related with ghc producing + # too much output while being filtered through tee (e.g. due to + # portage logging) reported as bug #111183 + echo "SRC_HC_OPTS+=-w" >> mk/build.mk + + # GHC build system knows to build unregisterised on alpha and hppa, + # but we have to tell it to build unregisterised on some arches + # ppc64: EvilMangler currently does not understand some TOCs + if use alpha || use hppa || use ppc64; then + echo "GhcUnregisterised=YES" >> mk/build.mk + echo "GhcWithInterpreter=NO" >> mk/build.mk + echo "GhcWithNativeCodeGen=NO" >> mk/build.mk + echo "SplitObjs=NO" >> mk/build.mk + echo "GhcRTSWays := debug" >> mk/build.mk + echo "GhcNotThreaded=YES" >> mk/build.mk + fi + # Have "ld -r --relax" problem with split-objs on sparc: + if use sparc; then + echo "SplitObjs=NO" >> mk/build.mk + fi + + # Get ghc from the unpacked binary .tbz2 + # except when bootstrapping we just pick ghc up off the path + if ! use ghcbootstrap; then + export PATH="${WORKDIR}/usr/bin:${PATH}" + fi + + econf || die "econf failed" + + emake all || die "make failed" + + fi # ! use binary +} + +src_install() { + if use binary; then + mv "${S}/usr" "${D}" + + # Remove the docs if not requested + if ! use doc; then + rm -rf "${D}/usr/share/doc/${P}/*/" \ + "${D}/usr/share/doc/${P}/*.html" \ + || die "could not remove docs (P vs PF revision mismatch?)" + fi + else + local insttarget="install" + + # We only built docs if we were bootstrapping, otherwise + # we copy them out of the unpacked binary .tbz2 + if use doc; then + if use ghcbootstrap; then + insttarget="${insttarget} install-docs" + else + mkdir -p "${D}/usr/share/doc" + mv "${WORKDIR}/usr/share/doc/${P}" "${D}/usr/share/doc" \ + || die "failed to copy docs" + fi + fi + + emake -j1 ${insttarget} \ + DESTDIR="${D}" \ + || die "make ${insttarget} failed" + + dodoc "${S}/README" "${S}/ANNOUNCE" "${S}/LICENSE" "${S}/VERSION" + + dobashcompletion "${FILESDIR}/ghc-bash-completion" + + cp -p "${D}/usr/$(get_libdir)/${P}/package.conf"{,.shipped} \ + || die "failed to copy package.conf" + fi +} + +pkg_postinst() { + # 'ghc-pkg check' fails in ghc 6.10.2, with the error message: + # There are problems in package rts-1.0: + # include-dirs: PAPI_INCLUDE_DIR doesn't exist or isn't a directory + # Upstream suggests this solution to fix it: + export PATH="/usr/bin:${PATH}" + $(ghc-getghcpkg) describe rts | sed 's/PAPI_INCLUDE_DIR//' | $(ghc-getghcpkg) update - + + ghc-reregister + + ewarn "IMPORTANT:" + ewarn "If you have upgraded from another version of ghc," + ewarn "once app-admin/haskell-updater has installed please run:" + ewarn " /usr/sbin/haskell-updater --upgrade" + ewarn "to re-build all ghc-based Haskell libraries." + + bash-completion_pkg_postinst +} + +pkg_prerm() { + # Be very careful here... Call order when upgrading is (according to PMS): + # * src_install for new package + # * pkg_preinst for new package + # * pkg_postinst for new package + # * pkg_prerm for the package being replaced + # * pkg_postrm for the package being replaced + # so you'll actually be touching the new packages files, not the one you + # uninstall, due to that or installation directory ${P} will be the same for + # both packages. + + # Call order for reinstalling is (according to PMS): + # * src_install + # * pkg_preinst + # * pkg_prerm for the package being replaced + # * pkg_postrm for the package being replaced + # * pkg_postinst + + # Overwrite the (potentially) modified package.conf with a copy of the + # original one, so that it will be removed during uninstall. + + PKG="${ROOT}/usr/$(get_libdir)/${P}/package.conf" + + cp -p "${PKG}"{.shipped,} + + [[ -f ${PKG}.old ]] && rm "${PKG}.old" +} |