summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Coutts <dcoutts@gentoo.org>2007-07-10 17:16:49 +0000
committerDuncan Coutts <dcoutts@gentoo.org>2007-07-10 17:16:49 +0000
commit48e6f474a323d06721c47c98796269b03f6fe87f (patch)
treef23633e06a4261a9886431c854d113dec7ec7a14 /dev-lang/ghc/ghc-6.2.2.ebuild
parentalpha/ia64/x86 stable wrt #182366 (diff)
downloadgentoo-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.ebuild253
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."
}