diff options
author | 2009-04-19 14:54:35 +0000 | |
---|---|---|
committer | 2009-04-19 14:54:35 +0000 | |
commit | fb7dd4335ade5c168b6e36c9aeb28f37d7ece1eb (patch) | |
tree | 250ab104c0ddc158cc6302c5428ed6f55d712f8d /dev-lang/ghc | |
parent | amd64/x86 stable, bug #266357 (diff) | |
download | gentoo-2-fb7dd4335ade5c168b6e36c9aeb28f37d7ece1eb.tar.gz gentoo-2-fb7dd4335ade5c168b6e36c9aeb28f37d7ece1eb.tar.bz2 gentoo-2-fb7dd4335ade5c168b6e36c9aeb28f37d7ece1eb.zip |
Version bump dev-lang/ghc to 6.10.2, currently masked for testing.
(Portage version: 2.1.6.7/cvs/Linux x86_64)
Diffstat (limited to 'dev-lang/ghc')
-rw-r--r-- | dev-lang/ghc/ChangeLog | 7 | ||||
-rw-r--r-- | dev-lang/ghc/files/ghc-6.10.2-readline.patch | 216 | ||||
-rw-r--r-- | dev-lang/ghc/ghc-6.10.2.ebuild | 338 | ||||
-rw-r--r-- | dev-lang/ghc/metadata.xml | 1 |
4 files changed, 561 insertions, 1 deletions
diff --git a/dev-lang/ghc/ChangeLog b/dev-lang/ghc/ChangeLog index d8963c12b6d3..4fe988daadcf 100644 --- a/dev-lang/ghc/ChangeLog +++ b/dev-lang/ghc/ChangeLog @@ -1,6 +1,11 @@ # ChangeLog for dev-lang/ghc # Copyright 2002-2009 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ChangeLog,v 1.159 2009/04/17 16:27:48 kolmodin Exp $ +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ChangeLog,v 1.160 2009/04/19 14:54:34 kolmodin Exp $ + +*ghc-6.10.2 (19 Apr 2009) + + 19 Apr 2009; Lennart Kolmodin <kolmodin@gentoo.org> +ghc-6.10.2.ebuild: + Add ghc-6.10.2, currently masked for testing. *ghc-6.8.2-r1 (17 Apr 2009) diff --git a/dev-lang/ghc/files/ghc-6.10.2-readline.patch b/dev-lang/ghc/files/ghc-6.10.2-readline.patch new file mode 100644 index 000000000000..315d800ac57b --- /dev/null +++ b/dev-lang/ghc/files/ghc-6.10.2-readline.patch @@ -0,0 +1,216 @@ +Lennart Kolmodin <kolmodin@gentoo.org> 2009 +Make GHC 6.10.2 use readline instead of editline + +diff -rN -u old-ghc-6.10.2/aclocal.m4 new-ghc-6.10.2/aclocal.m4 +--- old-ghc-6.10.2/aclocal.m4 2009-04-02 22:56:21.000000000 +0200 ++++ new-ghc-6.10.2/aclocal.m4 2009-04-02 22:56:23.000000000 +0200 +@@ -900,18 +900,18 @@ + fi])# FP_PROG_GHC_PKG + + +-# FP_GHC_HAS_EDITLINE ++# FP_GHC_HAS_READLINE + # ------------------- +-AC_DEFUN([FP_GHC_HAS_EDITLINE], ++AC_DEFUN([FP_GHC_HAS_READLINE], + [AC_REQUIRE([FP_PROG_GHC_PKG]) +-AC_CACHE_CHECK([whether ghc has editline package], [fp_cv_ghc_has_editline], +-[if "${GhcPkgCmd-ghc-pkg}" --show-package editline >/dev/null 2>&1; then +- fp_cv_ghc_has_editline=yes ++AC_CACHE_CHECK([whether ghc has readline package], [fp_cv_ghc_has_readline], ++[if "${GhcPkgCmd-ghc-pkg}" describe readline >/dev/null 2>&1; then ++ fp_cv_ghc_has_readline=yes + else +- fp_cv_ghc_has_editline=no ++ fp_cv_ghc_has_readline=no + fi]) +-AC_SUBST([GhcHasEditline], [`echo $fp_cv_ghc_has_editline | sed 'y/yesno/YESNO/'`]) +-])# FP_GHC_HAS_EDITLINE ++AC_SUBST([GhcHasReadline], [`echo $fp_cv_ghc_has_readline | sed 'y/yesno/YESNO/'`]) ++])# FP_GHC_HAS_READLINE + + + # FP_GCC_EXTRA_FLAGS +diff -rN -u old-ghc-6.10.2/compiler/ghc.cabal.in new-ghc-6.10.2/compiler/ghc.cabal.in +--- old-ghc-6.10.2/compiler/ghc.cabal.in 2009-04-02 22:56:21.000000000 +0200 ++++ new-ghc-6.10.2/compiler/ghc.cabal.in 2009-04-02 22:56:23.000000000 +0200 +@@ -28,8 +28,8 @@ + Default: False + Manual: True + +-Flag editline +- Description: Use editline ++Flag readline ++ Description: Use readline + Default: False + Manual: True + +@@ -71,8 +71,8 @@ + else + Build-Depends: unix + +- if flag(editline) +- Build-Depends: editline ++ if flag(readline) ++ Build-Depends: readline + CPP-Options: -DUSE_EDITLINE + + GHC-Options: -Wall -fno-warn-name-shadowing -fno-warn-orphans +diff -rN -u old-ghc-6.10.2/compiler/ghci/InteractiveUI.hs new-ghc-6.10.2/compiler/ghci/InteractiveUI.hs +--- old-ghc-6.10.2/compiler/ghci/InteractiveUI.hs 2009-04-02 22:56:21.000000000 +0200 ++++ new-ghc-6.10.2/compiler/ghci/InteractiveUI.hs 2009-04-02 22:56:23.000000000 +0200 +@@ -66,7 +66,7 @@ + + #ifdef USE_EDITLINE + import Control.Concurrent ( yield ) -- Used in readline loop +-import System.Console.Editline.Readline as Readline ++import System.Console.Readline as Readline + #endif + + --import SystemExts +@@ -96,6 +96,10 @@ + + import Data.IORef ( IORef, readIORef, writeIORef ) + ++#ifdef USE_EDITLINE ++import System.Posix.Internals ( setNonBlockingFD ) ++#endif ++ + ----------------------------------------------------------------------------- + + ghciWelcomeMsg :: String +@@ -322,10 +326,6 @@ + when is_tty $ withReadline $ do + Readline.initialize + +- withGhcAppData +- (\dir -> Readline.readHistory (dir </> "ghci_history")) +- (return True) +- + Readline.setAttemptedCompletionFunction (Just completeWord) + --Readline.parseAndBind "set show-all-if-ambiguous 1" + +@@ -360,9 +360,6 @@ + + #ifdef USE_EDITLINE + liftIO $ do +- Readline.stifleHistory 100 +- withGhcAppData (\dir -> Readline.writeHistory (dir </> "ghci_history")) +- (return True) + Readline.resetTerminal Nothing + #endif + +@@ -634,11 +631,9 @@ + return (Just str) + + withReadline :: IO a -> IO a +-withReadline = bracket_ stopTimer startTimer +- -- editline doesn't handle some of its system calls returning +- -- EINTR, so our timer signal confuses it, hence we turn off +- -- the timer signal when making calls to editline. (#2277) +- -- If editline is ever fixed, we can remove this. ++withReadline = flip finally (setNonBlockingFD 0) ++ -- 1. readline sometimes puts stdin into blocking mode, ++ -- so we need to put it back for the IO library + + -- These come from the RTS + foreign import ccall unsafe startTimer :: IO () +diff -rN -u old-ghc-6.10.2/compiler/ghci/Linker.lhs new-ghc-6.10.2/compiler/ghci/Linker.lhs +--- old-ghc-6.10.2/compiler/ghci/Linker.lhs 2009-04-02 22:56:21.000000000 +0200 ++++ new-ghc-6.10.2/compiler/ghci/Linker.lhs 2009-04-02 22:56:23.000000000 +0200 +@@ -953,7 +953,7 @@ + partOfGHCi + | isWindowsTarget || isDarwinTarget = [] + | otherwise = map PackageName +- ["base", "haskell98", "template-haskell", "editline"] ++ ["base", "haskell98", "template-haskell", "readline"] + + showLS :: LibrarySpec -> String + showLS (Object nm) = "(static) " ++ nm +diff -rN -u old-ghc-6.10.2/compiler/Makefile new-ghc-6.10.2/compiler/Makefile +--- old-ghc-6.10.2/compiler/Makefile 2009-04-02 22:56:21.000000000 +0200 ++++ new-ghc-6.10.2/compiler/Makefile 2009-04-02 22:56:23.000000000 +0200 +@@ -118,15 +118,15 @@ + CONFIGURE_FLAGS_STAGE2 += --ghc-option=-DDEBUGGER + endif + +-# Enable editline if: +-# - we're building stage 2/3, and we have built the editline package ++# Enable readline if: ++# - we're building stage 2/3, and we have built the readline package + # +-# But we don't enable editline on Windows, as Windows terminals have +-# editline-like support builtin. ++# But we don't enable readline on Windows, as Windows terminals have ++# readline-like support builtin. + # + ifneq "$(TARGETPLATFORM)" "i386-unknown-mingw32" +-ifeq "$(wildcard $(FPTOOLS_TOP_ABS)/libraries/editline/unbuildable)" "" +-CONFIGURE_FLAGS_STAGE2 += --flags=editline ++ifeq "$(wildcard $(FPTOOLS_TOP_ABS)/libraries/readline/unbuildable)" "" ++CONFIGURE_FLAGS_STAGE2 += --flags=readline + endif + endif + endif +diff -rN -u old-ghc-6.10.2/configure.ac new-ghc-6.10.2/configure.ac +--- old-ghc-6.10.2/configure.ac 2009-04-02 22:56:21.000000000 +0200 ++++ new-ghc-6.10.2/configure.ac 2009-04-02 22:56:23.000000000 +0200 +@@ -679,8 +679,8 @@ + AC_SUBST(ghc_ge_609)dnl + fi + +-# Check whether this GHC has editline installed +-FP_GHC_HAS_EDITLINE ++# Check whether this GHC has readline installed ++FP_GHC_HAS_READLINE + + # Dummy arguments to print help for --with-editline-* arguments. + # Those are actually passed to the editline package's configure script +diff -rN -u old-ghc-6.10.2/libraries/ifBuildable.hs new-ghc-6.10.2/libraries/ifBuildable.hs +--- old-ghc-6.10.2/libraries/ifBuildable.hs 2009-04-02 22:56:22.000000000 +0200 ++++ new-ghc-6.10.2/libraries/ifBuildable.hs 2009-04-02 22:56:23.000000000 +0200 +@@ -36,5 +36,5 @@ + requiredLines = filter ((3 == ) . length) $ map words nonCommentLines + requiredLibraries = [ x | 'l':'i':'b':'r':'a':'r':'i':'e':'s':'/':x + <- map head requiredLines ] +- return $ filter ("editline" /=) requiredLibraries ++ return $ filter ("readline" /=) requiredLibraries + +diff -rN -u old-ghc-6.10.2/libraries/Makefile new-ghc-6.10.2/libraries/Makefile +--- old-ghc-6.10.2/libraries/Makefile 2009-04-02 22:56:22.000000000 +0200 ++++ new-ghc-6.10.2/libraries/Makefile 2009-04-02 22:56:23.000000000 +0200 +@@ -46,7 +46,7 @@ + ifeq "$(Windows)" "YES" + SUBDIRS += $(wildcard Win32) + endif +-SUBDIRS += directory process pretty hpc template-haskell editline Cabal random haskell98 ++SUBDIRS += directory process pretty hpc template-haskell readline Cabal random haskell98 + + # Set GhcBootLibs=YES from the command line to work with just the libraries + # needed to bootstrap GHC. +diff -rN -u old-ghc-6.10.2/Makefile new-ghc-6.10.2/Makefile +--- old-ghc-6.10.2/Makefile 2009-04-02 22:56:21.000000000 +0200 ++++ new-ghc-6.10.2/Makefile 2009-04-02 22:56:23.000000000 +0200 +@@ -393,7 +393,7 @@ + echo "HaveLibGmp = $(HaveLibGmp)" >> $(BIN_DIST_VARFILE) + echo "GhcLibsWithUnix = $(GhcLibsWithUnix)" >> $(BIN_DIST_VARFILE) + echo "GhcWithInterpreter = $(GhcWithInterpreter)" >> $(BIN_DIST_VARFILE) +- echo "GhcHasEditline = $(GhcHasEditline)" >> $(BIN_DIST_VARFILE) ++ echo "GhcHasReadline = $(GhcHasReadline)" >> $(BIN_DIST_VARFILE) + echo "BootingFromHc = $(BootingFromHc)" >> $(BIN_DIST_VARFILE) + echo "XMLDocWays = $(XMLDocWays)" >> $(BIN_DIST_VARFILE) + # We won't actually use xsltproc, but we need to know if it's "" or not +diff -rN -u old-ghc-6.10.2/mk/config.mk.in new-ghc-6.10.2/mk/config.mk.in +--- old-ghc-6.10.2/mk/config.mk.in 2009-04-02 22:56:22.000000000 +0200 ++++ new-ghc-6.10.2/mk/config.mk.in 2009-04-02 22:56:23.000000000 +0200 +@@ -891,8 +891,8 @@ + GHC = @WithGhc@ + GhcDir = $(dir $(GHC)) + +-# Set to YES if $(GHC) has the editline package installed +-GhcHasEditline = @GhcHasEditline@ ++# Set to YES if $(GHC) has the readline package installed ++GhcHasReadline = @GhcHasReadline@ + + HBC = @HBC@ + NHC = @NHC@ diff --git a/dev-lang/ghc/ghc-6.10.2.ebuild b/dev-lang/ghc/ghc-6.10.2.ebuild new file mode 100644 index 000000000000..ecbb71d3197e --- /dev/null +++ b/dev-lang/ghc/ghc-6.10.2.ebuild @@ -0,0 +1,338 @@ +# 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.2.ebuild,v 1.1 2009/04/19 14:54:34 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" + +READLINE_PV="1.0.1.0" +READLINE_P="readline-${READLINE_PV}" + +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 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 + http://hackage.haskell.org/packages/archive/readline/${READLINE_PV}/${READLINE_P}.tar.gz + ) + !ghcbootstrap? ( $arch_binaries )" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="binary doc ghcbootstrap ghcmakebinary" + +RDEPEND=" + >=sys-devel/gcc-2.95.3 + >=sys-devel/binutils-2.17 + >=dev-lang/perl-5.6.1 + >=dev-libs/gmp-4.1 + !binary? ( >=sys-libs/readline-5 )" + +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 + +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 + + # 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 + + # move readline into the ghc libraries dir + mv "${WORKDIR}/readline-${READLINE_PV}" \ + "${S}/libraries/readline" + + # use sys-libs/readline instead of dev-libs/editline + epatch "${FILESDIR}/${P}-readline.patch" + + + + 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" + + # 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 + + # The settings that give you the fastest complete GHC build are these: + if use ghcquickbuild; then + echo "SRC_HC_OPTS = -H64m -Onot -fasm" >> mk/build.mk + echo "GhcStage1HcOpts = -O -fasm" >> mk/build.mk + echo "GhcStage2HcOpts = -Onot -fasm" >> mk/build.mk + echo "GhcLibHcOpts = -Onot -fasm" >> mk/build.mk + echo "GhcLibWays =" >> mk/build.mk + echo "SplitObjs = NO" >> mk/build.mk + fi + # However, note that the libraries are built without optimisation, so + # this build isn't very useful. The resulting compiler will be very + # slow. On a 4-core x86 machine using MAKEOPTS="-j10", this build was + # timed at less than 8 minutes. + + # 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 + if use alpha || use hppa || use ppc64 || use sparc; 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 + + # When making a binary to be used for bootstrapping we want as few + # dependencies as possible in the resulting binary. Depending on + # packages that might be upgraded will result in a broken bootstrapping + # binary, see bug #259867 comment #4. + # Here we disable using readline in ghci, for two reasons: + # 1. Building ghci with sys-libs/readline or dev-libs/libedit + # will make the resulting binary fragile to upgrades in the + # host environment. + # 2. We've patched ghc to use the GPL library sys-libs/readline. + # The licence prohibits us from distributing binaries linked to it. + if use ghcmakebinary; then + sed -i compiler/Makefile \ + -e 's,CONFIGURE_FLAGS_STAGE2 += --flags=readline,CONFIGURE_FLAGS_STAGE2 += --flags=-readline,' + 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" + + dosbin "${FILESDIR}/ghc-updater" + + 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, please run:" + ewarn " /usr/sbin/ghc-updater" + ewarn "to re-merge all ghc-based Haskell libraries." + + bash-completion_pkg_postinst +} + +pkg_prerm() { + # 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" +} diff --git a/dev-lang/ghc/metadata.xml b/dev-lang/ghc/metadata.xml index a482746639df..a09c23af8401 100644 --- a/dev-lang/ghc/metadata.xml +++ b/dev-lang/ghc/metadata.xml @@ -8,5 +8,6 @@ <use> <flag name='binary'>Install the binary version directly, rather than using it to build the source version.</flag> <flag name='ghcbootstrap'>Internal: Bootstrap GHC from an existing GHC installation.</flag> +<flag name='ghcmakebinary'>Internal: Used while bootstrapping for making binaries, license related tweaking.</flag> </use> </pkgmetadata> |