diff options
author | Duncan Coutts <dcoutts@gentoo.org> | 2007-07-10 17:16:49 +0000 |
---|---|---|
committer | Duncan Coutts <dcoutts@gentoo.org> | 2007-07-10 17:16:49 +0000 |
commit | 48e6f474a323d06721c47c98796269b03f6fe87f (patch) | |
tree | f23633e06a4261a9886431c854d113dec7ec7a14 /dev-lang/ghc/ghc-6.2.2.ebuild | |
parent | alpha/ia64/x86 stable wrt #182366 (diff) | |
download | gentoo-2-48e6f474a323d06721c47c98796269b03f6fe87f.tar.gz gentoo-2-48e6f474a323d06721c47c98796269b03f6fe87f.tar.bz2 gentoo-2-48e6f474a323d06721c47c98796269b03f6fe87f.zip |
Remove lots of cruft, like ghc-6.4.1, ia64 hacks. Make 6.2.2 work again.
(Portage version: 2.1.2.9)
Diffstat (limited to 'dev-lang/ghc/ghc-6.2.2.ebuild')
-rw-r--r-- | dev-lang/ghc/ghc-6.2.2.ebuild | 253 |
1 files changed, 142 insertions, 111 deletions
diff --git a/dev-lang/ghc/ghc-6.2.2.ebuild b/dev-lang/ghc/ghc-6.2.2.ebuild index 664d93199b03..43c21dd0331f 100644 --- a/dev-lang/ghc/ghc-6.2.2.ebuild +++ b/dev-lang/ghc/ghc-6.2.2.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ghc-6.2.2.ebuild,v 1.21 2007/06/26 01:49:10 mr_bones_ Exp $ +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ghc-6.2.2.ebuild,v 1.22 2007/07/10 17:16:49 dcoutts Exp $ # Brief explanation of the bootstrap logic: # @@ -14,9 +14,19 @@ # can be removed once an forall after the first succesful install # of ghc. -inherit base flag-o-matic eutils ghc-package - -IUSE="doc tetex opengl" +# 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 eutils flag-o-matic toolchain-funcs ghc-package DESCRIPTION="The Glasgow Haskell Compiler" HOMEPAGE="http://www.haskell.org/ghc/" @@ -25,145 +35,163 @@ SRC_URI="http://www.haskell.org/ghc/dist/${PV}/ghc-${PV}-src.tar.bz2" LICENSE="as-is" SLOT="0" -# removed amd64, because there's no binary to bootstrap from -KEYWORDS="x86 ppc -alpha -amd64 sparc" - +KEYWORDS="-* ppc sparc x86" +IUSE="doc opengl" PROVIDE="virtual/ghc" -# FIXME: Add USE support for parallel haskell (requires PVM) -# Get PVM from ftp://ftp.netlib.org/pvm3/ -DEPEND="<virtual/ghc-6.3 - !>=virtual/ghc-6.4 - >=dev-lang/perl-5.6.1 - >=sys-devel/gcc-2.95.3 - >=sys-devel/make-3.79.1 - >=sys-apps/sed-3.02.80 - >=sys-devel/flex-2.5.4a - >=dev-libs/gmp-4.1 - >=sys-libs/readline-4.2 - doc? ( >=app-text/openjade-1.3.1 - >=app-text/sgml-common-0.6.3 - ~app-text/docbook-sgml-dtd-3.1 - >=app-text/docbook-dsssl-stylesheets-1.64 - >=dev-haskell/haddock-0.6-r2 - tetex? ( virtual/tetex - >=app-text/jadetex-3.12 ) ) - opengl? ( virtual/opengl - virtual/glu - virtual/glut )" -RDEPEND="virtual/libc +RDEPEND=" >=sys-devel/gcc-2.95.3 + >=sys-devel/binutils-2.17 >=dev-lang/perl-5.6.1 >=dev-libs/gmp-4.1 >=sys-libs/readline-4.2 - opengl? ( virtual/opengl virtual/glu virtual/glut )" + opengl? ( virtual/opengl + virtual/glu virtual/glut )" -SUPPORTED_CFLAGS="" +# ghc cannot usually be bootstrapped using later versions ... +DEPEND="${RDEPEND} + <virtual/ghc-6.3 + !>=virtual/ghc-6.4 + doc? ( ~app-text/docbook-sgml-dtd-3.1 + >=app-text/docbook-dsssl-stylesheets-1.64 + >=app-text/openjade-1.3.1 + >=app-text/sgml-common-0.6.3 + >=dev-haskell/haddock-0.6-r2 )" -# Setup supported CFLAGS. -check_cflags() { - OLD_CFLAGS="${CFLAGS}" - CFLAGS="$1" - strip-unsupported-flags - SUPPORTED_CFLAGS="${SUPPORTED_CFLAGS} ${CFLAGS}" - CFLAGS="${OLD_CFLAGS}" +pkg_setup() { + if test $(gcc-major-version) -gt 3; then + eerror "ghc-6.2.2 does not work with gcc-4.x, only 3.x or older" + eerror "You can either use gcc-config to switch to gcc-3.x" + eerror "or you emerge '>=dev-lang/ghc-6.4' or later." + die "ghc-6.2.2 does not work with gcc-4.x, only 3.x or older" + fi } -setup_cflags() { - check_cflags "-nopie -fno-stack-protector -fno-stack-protector-all" +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 } -pkg_setup() { - if ! has_version virtual/ghc; then - eerror "This ebuild needs a version of GHC to bootstrap from." - eerror "Please emerge dev-lang/ghc-bin to get a binary version." - eerror "You can either use the binary version directly or emerge" - eerror "dev-lang/ghc afterwards." - die "virtual/ghc version required to build" - fi +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 +} + +ghc_setup_wrapper() { + echo '#!/bin/sh' + echo "GHCBIN=\"$(ghc-libdir)/ghc-$1\";" + echo "TOPDIROPT=\"-B$(ghc-libdir)\";" + echo "GHC_CFLAGS=\"${GHC_CFLAGS}\";" + echo '# Mini-driver for GHC' + echo 'exec $GHCBIN $TOPDIROPT $GHC_CFLAGS ${1+"$@"}' } src_unpack() { base_src_unpack + ghc_setup_cflags + + # Modify the ghc driver script to use GHC_CFLAGS + echo "SCRIPT_SUBST_VARS += GHC_CFLAGS" >> "${S}/ghc/driver/ghc/Makefile" + echo "GHC_CFLAGS = ${GHC_CFLAGS}" >> "${S}/ghc/driver/ghc/Makefile" + sed -i -e 's|$TOPDIROPT|$TOPDIROPT $GHC_CFLAGS|' "${S}/ghc/driver/ghc/ghc.sh" - # hardened-gcc needs to be disabled, because the - # mangler doesn't accept its output; yes, the 6.2 version - # should do ... - cd ${S}/ghc - pushd driver - setup_cflags - - epatch ${FILESDIR}/${PN}-6.2.hardened.patch - sed -i -e "s|@GHC_CFLAGS@|${SUPPORTED_CFLAGS// -/ -optc-}|" ghc/ghc.sh - sed -i -e "s|@GHC_CFLAGS@|${SUPPORTED_CFLAGS// -/ -optc-}|" ghci/ghci.sh - popd + # Patch to fix a mis-compilation in the rts due to strict aliasing, + # should be fixed upstream for 6.4.3 and 6.6. Fixes bug #135651. + echo 'GC_HC_OPTS += -optc-fno-strict-aliasing' >> "${S}/ghc/rts/Makefile" + + # Don't strip binaries on install. See QA warnings in bug #140369. + sed -i -e 's/SRC_INSTALL_BIN_OPTS += -s//' ${S}/mk/config.mk.in } src_compile() { - local myconf - if use opengl; then - myconf="--enable-hopengl" - fi + # initialize build.mk + echo '# Gentoo changes' > 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 - # disable the automatic PIC building which is considered as Prologue Junk by the Haskell Compiler - # thanks to Peter Simons for finding this and giving notice on bugs.gentoo.org - # (this is still necessary, even though we have the patch, because - # we might be bootstrapping from a version that didn't have the - # patch included) - setup_cflags - echo "SRC_CC_OPTS+=${SUPPORTED_CFLAGS}" >> mk/build.mk - echo "SRC_HC_OPTS+=${SUPPORTED_CFLAGS// -/ -optc-}" >> mk/build.mk + # determine what to do with documentation + if use doc; then + echo SGMLDocWays="html" >> mk/build.mk + else + echo SGMLDocWays="" >> mk/build.mk + # needed to prevent haddock from being called + echo NO_HADDOCK_DOCS=YES >> mk/build.mk + fi - # force the config variable ArSupportsInput to be unset; - # ar in binutils >= 2.14.90.0.8-r1 seems to be classified - # incorrectly by the configure script - echo "ArSupportsInput:=" >> mk/build.mk + # 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+=-fno-warn-deprecations" >> mk/build.mk # Required for some architectures, because they don't support ghc fully ... - use ppc || use amd64 || use sparc && echo "SplitObjs=NO" >> mk/build.mk - use amd64 && echo "GhcUnregisterised=YES" >> mk/build.mk - use amd64 || use sparc && echo "GhcWithInterpreter=NO" >> mk/build.mk + use ppc || use sparc && echo "SplitObjs=NO" >> mk/build.mk + use sparc && echo "GhcWithInterpreter=NO" >> mk/build.mk + + GHC_CFLAGS="" ghc_setup_wrapper $(ghc-version) > "${T}/ghc.sh" + chmod +x "${T}/ghc.sh" # unset SGML_CATALOG_FILES because documentation installation # breaks otherwise ... - # (--enable-threaded-rts is no longer needed) SGML_CATALOG_FILES="" econf \ - ${myconf} || die "econf failed" - - # the build does not seem to work all that - # well with parallel make - emake -j1 || die "make failed" + --with-ghc="${T}/ghc.sh" \ + $(use_enable opengl hopengl) \ + || die "econf failed" - # if documentation has been requested, build documentation ... - if use doc; then - emake -j1 html || die "make html failed" - if use tetex; then - emake -j1 ps || die "make ps failed" - fi - fi + # ghc-6.2.x build system does not support parallel make + emake -j1 datadir="/usr/share/doc/${PF}" || die "make failed" + # the explicit datadir is required to make the haddock entries + # in the package.conf file point to the right place ... } src_install () { - local mydoc local insttarget insttarget="install" - - # determine what to do with documentation - if use doc; then - mydoc="html" - insttarget="${insttarget} install-docs" - if use tetex; then - mydoc="${mydoc} ps" - fi - else - mydoc="" - # needed to prevent haddock from being called - echo NO_HADDOCK_DOCS=YES >> mk/build.mk - fi - echo SGMLDocWays="${mydoc}" >> mk/build.mk + use doc && insttarget="${insttarget} install-docs" # the libdir0 setting is needed for amd64, and does not # harm for other arches @@ -176,13 +204,14 @@ src_install () { || die "make ${insttarget} failed" #need to remove ${D} from ghcprof script - cd ${D}/usr/bin + # TODO: does this actually work? + cd "${D}/usr/bin" mv ghcprof ghcprof-orig sed -e 's:$FPTOOLS_TOP_ABS:#$FPTOOLS_TOP_ABS:' ghcprof-orig > ghcprof chmod a+x ghcprof rm -f ghcprof-orig - cd ${S}/ghc + cd "${S}/ghc" dodoc README ANNOUNCE LICENSE VERSION dosbin ${FILESDIR}/ghc-updater @@ -193,8 +222,10 @@ pkg_postinst () { elog "If you have dev-lang/ghc-bin installed, you might" elog "want to unmerge it. It is no longer needed." elog - ewarn "If you upgrade from another ghc version, please run" - ewarn "/usr/sbin/ghc-updater to re-merge all ghc-based" - ewarn "Haskell libraries." + ewarn "IMPORTANT:" + ewarn "If you have upgraded from another version of ghc or" + ewarn "if you have switched from ghc-bin to ghc, please run:" + ewarn " /usr/sbin/ghc-updater" + ewarn "to re-merge all ghc-based Haskell libraries." } |