diff options
author | 2012-03-04 05:49:54 +0000 | |
---|---|---|
committer | 2012-03-04 05:49:54 +0000 | |
commit | 1a4250e9452d81c2d3523d838f695785bc3fdc6d (patch) | |
tree | a7f2dc81f56b4e39a180e50e8c84e0c9d50dde4a /dev-lang/ghc | |
parent | version bump (diff) | |
download | historical-1a4250e9452d81c2d3523d838f695785bc3fdc6d.tar.gz historical-1a4250e9452d81c2d3523d838f695785bc3fdc6d.tar.bz2 historical-1a4250e9452d81c2d3523d838f695785bc3fdc6d.zip |
Bump ghc to 7.4.1
Package-Manager: portage-2.1.10.49/cvs/Linux x86_64
Diffstat (limited to 'dev-lang/ghc')
-rw-r--r-- | dev-lang/ghc/ChangeLog | 11 | ||||
-rw-r--r-- | dev-lang/ghc/Manifest | 18 | ||||
-rw-r--r-- | dev-lang/ghc/files/ghc-7.2.1-freebsd-CHOST.patch | 13 | ||||
-rw-r--r-- | dev-lang/ghc/files/ghc-7.4-rc2-macos-prefix-respect-gcc.patch | 23 | ||||
-rw-r--r-- | dev-lang/ghc/ghc-7.0.4.ebuild | 6 | ||||
-rw-r--r-- | dev-lang/ghc/ghc-7.4.1.ebuild | 599 |
6 files changed, 653 insertions, 17 deletions
diff --git a/dev-lang/ghc/ChangeLog b/dev-lang/ghc/ChangeLog index de4b70d0362d..0af2aec6b3c5 100644 --- a/dev-lang/ghc/ChangeLog +++ b/dev-lang/ghc/ChangeLog @@ -1,6 +1,13 @@ # ChangeLog for dev-lang/ghc -# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ChangeLog,v 1.210 2011/12/28 08:47:34 josejx Exp $ +# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ChangeLog,v 1.211 2012/03/04 05:49:54 gienah Exp $ + +*ghc-7.4.1 (04 Mar 2012) + + 04 Mar 2012; Mark Wright <gienah@gentoo.org> ghc-7.0.4.ebuild, + +files/ghc-7.2.1-freebsd-CHOST.patch, + +files/ghc-7.4-rc2-macos-prefix-respect-gcc.patch, +ghc-7.4.1.ebuild: + Bump ghc to 7.4.1 28 Dec 2011; Joseph Jezak <josejx@gentoo.org> ghc-7.0.4.ebuild, +files/ghc-7.0.4-fix-ppc-linker.patch: diff --git a/dev-lang/ghc/Manifest b/dev-lang/ghc/Manifest index 01e07529a08d..50a8124f3b4f 100644 --- a/dev-lang/ghc/Manifest +++ b/dev-lang/ghc/Manifest @@ -1,6 +1,3 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA1 - AUX ghc-6.10.4-autoconf.patch 2010 RMD160 c5154aca1828ff5bf5289da6167c2218ad6cb1ab SHA1 a100d0ba94516eacc7dcb5d99fd3b69a72f6e658 SHA256 125afd89af86b32bcf88dd97860993dc6f7ef9920a3f3dfb577897837fbcf4fe AUX ghc-6.10.4-disable-strip.patch 782 RMD160 b892e4133ff36e056e3f0e015388b1a5ffd61da4 SHA1 d83ca80f339f5de1772e2e70dbf2d6353257ba84 SHA256 3d61160acc28afed2c2fd0a37c460b57368d81d5a18c8fcd07867cfdc8a190a6 AUX ghc-6.10.4-ia64-fixed-relax.patch 1368 RMD160 83b75c2cb44c4b35d12206570c59830706314537 SHA1 9f6c81a9ca9657be580ffb232d4dc73ae1bfbe11 SHA256 f2862403cc89c3f7e83fcc569cf357597d70afd444194178eb2a299f16a938c3 @@ -31,6 +28,8 @@ AUX ghc-7.0.4-CHOST-softfloat.patch 371 RMD160 91988c43d3ec589a49707979eb8c6d785 AUX ghc-7.0.4-darwin8.patch 486 RMD160 475b8276380291d6c88866fc021fc33c795f28d9 SHA1 1c10dda546a339bb206e3d7047314c7b377d9254 SHA256 b0857679f29aab3719df5538a2f104924cf5df913927a2748be3f77d2c8ea481 AUX ghc-7.0.4-fix-ppc-linker.patch 732 RMD160 139a1ea0b5ee6dfbe5c457f86199b35be66c441b SHA1 f17b6f016b85f1effa511f30f808f26720eb55e1 SHA256 983689df4b59985ffc2aa116f553d91c9743610e671530350d7b2c55998d1549 AUX ghc-7.0.4-nxstack.patch 984 RMD160 e475ccc5cc6e06bb736ebb84c72135bc94434d99 SHA1 3cafa50092d0607728999c93225aa4dd67b4a451 SHA256 325f00f12922edaf54e6df56acc7743e40234c53e2f341b9a28e4fe22fb4569f +AUX ghc-7.2.1-freebsd-CHOST.patch 472 RMD160 06dec133486f6eeb4e98434a1c1694523aafaa34 SHA1 b5a71785113307fcc2dc588e52acfe1fb6842b2d SHA256 f9538a6d3fc3e9023fa1647ccb05ac3f93cdc285c4e8cd2cb7fd5f53262dbabb +AUX ghc-7.4-rc2-macos-prefix-respect-gcc.patch 776 RMD160 d5af3a2250655c21c8c2d6d1fdd5b11c3ba8dea6 SHA1 537341bd7778875fba786d13b87979cd83be448f SHA256 7ffcbfc1822408cf8ed17f2f35c192e56967fc1e83265764aa414b868b69f463 AUX ghc-apply-gmp-hack 2585 RMD160 1246e8fc40bbbb28f52f755457feca97bf3e22cc SHA1 63a7999b829548f82bcdcc4da869956abe2890bf SHA256 0d3c9e52be232734c916e9765fae770225ad6fb04c0948780867450401ff1eed AUX ghc-bash-completion 6496 RMD160 61574aab2f8ed4ae906df5ac291f528384b79b87 SHA1 a0d7c264cc8ff3d235511e151dc82f9e16691bac SHA256 82a862bea2c9248e06fcf74d307de07b05a55f9eb95f412762bd02e53fece822 DIST ghc-6.10.1-i386-apple-darwin.tar.bz2 97910484 RMD160 3764303b9c9161905b5c0e2e4000cfe0fceea85c SHA1 299a829981db533cbab71426051cf924f4a6cdd7 SHA256 b806bf9c163314c3aac389df1cf5f30e31d3557baa0eabce9279f6ef58305d51 @@ -40,6 +39,7 @@ DIST ghc-6.10.4-sparc-sun-solaris2.tar.bz2 87371847 RMD160 6028d2224524c6dfeb7b9 DIST ghc-6.10.4-src.tar.bz2 8060565 RMD160 5f83baf2549f1f4bea140c6a80728c2a76f60ab6 SHA1 0566858b409066d98da70de5adb9a7030d0df5dc SHA256 d66a8e52572f4ff819fe5c4e34c6dd1e84a7763e25c3fadcc222453c0bd8534d DIST ghc-6.12.3-src.tar.bz2 26592939 RMD160 021619aec4c820009e77745657bfdf0d9705f3e7 SHA1 d811be2131d4403ea452aa94fe71edd1b6bd0a79 SHA256 6cbdbe415011f2c7d15e4d850758d8d393f70617b88cb3237d2c602bb60e5e68 DIST ghc-7.0.4-src.tar.bz2 24205070 RMD160 80727043c2141a0472f9e2fffcdf5a8eb9fb55ec SHA1 469a7ed626e53bf02f1e73713dea61e172106fd5 SHA256 1a9b78d9d66c9c21de6c0932e36bb87406a4856f1611bf83bd44539bdc6ed0ed +DIST ghc-7.4.1-src.tar.bz2 25272609 RMD160 00c6a4df54e55559812b0e289dbc6fe8523d18da SHA1 66c5a027fef1ed01c35c3493e964fb3657efc936 SHA256 721c09a49e519b7459b67b451b5103252ba3833906a7a24c3a3679ff94669a79 DIST ghc-bin-6.10.4-alpha.tbz2 84499083 RMD160 5f68a5592663d7c6abf3617ccab9aa35cbfc2d63 SHA1 88fb6020bf1fab2e0914c223087af94e926a1dda SHA256 cfe28ea83e000f1ba0853b78dd27b35fa5d823c4cb94699f901aec5e2705c315 DIST ghc-bin-6.10.4-amd64.tbz2 51566179 RMD160 68b261b4bbef89021a2c92e99c70db45ed85d9e7 SHA1 27e542cc49fa47566c59407fad1c9254d46a8d03 SHA256 2ced87862603a44a59744459a8231f587c0f225f70eb4861ad2db5098c2433a1 DIST ghc-bin-6.10.4-ia64.tbz2 86508052 RMD160 ea1f1de73be8ca51abd8eb748d92694ea4ade2f6 SHA1 eea28fe871e1e3821b370715930864d7fd955181 SHA256 2e8f03eec65329abb15c3d3351d8d4f896ac6c7fc8a8b3815807c3bd0329292e @@ -64,13 +64,7 @@ DIST ghc-bin-7.0.4-x86.tbz2 81814964 RMD160 c901d8b58679d243fa0e77ac7b8d0b6c63fc EBUILD ghc-6.10.4-r1.ebuild 13011 RMD160 4feb3ad764af5ad16b3dd5a000d49755c8b91c2a SHA1 c8eb3181598c05053e1f27b5fdb2a3a4264377b1 SHA256 f8c163192a9c5a62158bbb5698cef9872fa0e64956689aeafb3f90c8c9670b0a EBUILD ghc-6.12.3-r2.ebuild 20515 RMD160 6db339fd7d94a8db5d8cd30730037151855bbaf9 SHA1 be6f59c823756aab0ce6c8e492469855b6d04cde SHA256 2a14fff51f910460049540a77e006e0978e7f623907b273bacf779c88d418694 EBUILD ghc-6.12.3.ebuild 15063 RMD160 6476ac66f125ad0d2c13351a73e560b1df67c822 SHA1 15d9cd33ba4bb23b31d8a03111d31d4bd1bfe603 SHA256 f968048385c848f60007ea9bca2598c7d26a06a02945557b912dd587636d3ece -EBUILD ghc-7.0.4.ebuild 20049 RMD160 fd342034898b4773851bc039cfac39787374fb67 SHA1 82310689c605c0152ade15c45762b0ae1fc458e7 SHA256 adc186f93e32c4adff6a282a942c3b177aed7f70c599de16e156a87df82d2b69 -MISC ChangeLog 38842 RMD160 bf47b8897cce18e2b59b8584218662f7af8c9397 SHA1 72f9216ce66c924330418504157583315c51fb3f SHA256 4e195a1a9dedc592c267cd1a98a9e6f6224c95d5252dedbf52fbc704799e1277 +EBUILD ghc-7.0.4.ebuild 20046 RMD160 dd7421518a6ac10421ad7a2b3c4ac577f7f2f2de SHA1 136a2cb5e6d9e2e51ee6604b72fc9c5f97f7580d SHA256 c50196a4af5769c4bd0d9912be696c2a6baa76c232b177d633f0e8c40b990e2a +EBUILD ghc-7.4.1.ebuild 20523 RMD160 55fe64177084cc67703c3c492b6ede683f97b824 SHA1 d2b71080f401b85a58c2836e7bd8daa265373436 SHA256 eb9939f5f650e5a5919b706d7e4ce8e0cb6b8af0e94d22e2f5e8400934224627 +MISC ChangeLog 39066 RMD160 15c6c4dc862d25954be07d28ec2f26d06d35b2f5 SHA1 8944abc7946665c268c3ae77059c63c055b6c061 SHA256 b00e099b8ad050e30e25da1ea16741a924d8c8b92ebd3a354163840d6fdaec63 MISC metadata.xml 511 RMD160 79a995fb7989ead0e2a1aaae42a015a34864e2ff SHA1 a7222153de1350459b28c0be825beeb13c0aa16e SHA256 4474d6b9638e6b78e16025c88b5455fa353ca723c05ce80aa3f8b426149ec1dd ------BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.17 (GNU/Linux) - -iEYEARECAAYFAk7617QACgkQcsIHjyDViGTYUACg6Nk8wZP4H4HGKYi59M3oOY6r -PVcAoONlba0FzvQqw0QaBqUQAd/QDvGG -=uJHP ------END PGP SIGNATURE----- diff --git a/dev-lang/ghc/files/ghc-7.2.1-freebsd-CHOST.patch b/dev-lang/ghc/files/ghc-7.2.1-freebsd-CHOST.patch new file mode 100644 index 000000000000..da59cd789f99 --- /dev/null +++ b/dev-lang/ghc/files/ghc-7.2.1-freebsd-CHOST.patch @@ -0,0 +1,13 @@ +diff --git a/aclocal.m4 b/aclocal.m4 +index 11bb003..52df243 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -1545,7 +1545,7 @@ case "$1" in + freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku) + $2="$1" + ;; +- freebsd8) # like i686-gentoo-freebsd8 ++ freebsd*) # like i686-gentoo-freebsd8 or i686-gentoo-freebsd8.2 + $2="freebsd" + ;; + darwin*) diff --git a/dev-lang/ghc/files/ghc-7.4-rc2-macos-prefix-respect-gcc.patch b/dev-lang/ghc/files/ghc-7.4-rc2-macos-prefix-respect-gcc.patch new file mode 100644 index 000000000000..770fd650606b --- /dev/null +++ b/dev-lang/ghc/files/ghc-7.4-rc2-macos-prefix-respect-gcc.patch @@ -0,0 +1,23 @@ +diff --git a/aclocal.m4 b/aclocal.m4 +index a377cb9..4f8fd69 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -1950,17 +1950,7 @@ AC_DEFUN([XCODE_VERSION],[ + # -------------------------------- + # Finds where gcc is + AC_DEFUN([FIND_GCC],[ +- if test "$TargetOS_CPP" = "darwin" && +- test "$XCodeVersion1" -eq 4 && +- test "$XCodeVersion2" -lt 2 +- then +- # In Xcode 4.1, 'gcc-4.2' is the gcc legacy backend (rather +- # than the LLVM backend). We prefer the legacy gcc, but in +- # Xcode 4.2 'gcc-4.2' was removed. +- FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc-4.2]) +- else +- FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc]) +- fi ++ FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc]) + export CC + WhatGccIsCalled="$CC" + AC_SUBST(WhatGccIsCalled) diff --git a/dev-lang/ghc/ghc-7.0.4.ebuild b/dev-lang/ghc/ghc-7.0.4.ebuild index 060cab0b7082..3f8751599230 100644 --- a/dev-lang/ghc/ghc-7.0.4.ebuild +++ b/dev-lang/ghc/ghc-7.0.4.ebuild @@ -1,6 +1,6 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ghc-7.0.4.ebuild,v 1.4 2011/12/28 08:47:34 josejx Exp $ +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ghc-7.0.4.ebuild,v 1.5 2012/03/04 05:49:54 gienah Exp $ # Brief explanation of the bootstrap logic: # @@ -193,7 +193,7 @@ relocate_path() { for file in "$@" do sed -i -e "s|$from|$to|g" \ - "$file" || die "path relocation failed for '$file'" + "$file" || die "path relocation failed for '$file'" done } diff --git a/dev-lang/ghc/ghc-7.4.1.ebuild b/dev-lang/ghc/ghc-7.4.1.ebuild new file mode 100644 index 000000000000..ca642085fc84 --- /dev/null +++ b/dev-lang/ghc/ghc-7.4.1.ebuild @@ -0,0 +1,599 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ghc-7.4.1.ebuild,v 1.1 2012/03/04 05:49:54 gienah 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. + +EAPI="4" + +inherit base autotools bash-completion-r1 eutils flag-o-matic multilib toolchain-funcs ghc-package versionator pax-utils + +DESCRIPTION="The Glasgow Haskell Compiler" +HOMEPAGE="http://www.haskell.org/ghc/" + +# we don't have any binaries yet +arch_binaries="" + +# sorted! +#arch_binaries="$arch_binaries alpha? ( http://code.haskell.org/~slyfox/ghc-alpha/ghc-bin-${PV}-alpha.tbz2 )" +#arch_binaries="$arch_binaries arm? ( http://code.haskell.org/~slyfox/ghc-arm/ghc-bin-${PV}-arm.tbz2 )" +#arch_binaries="$arch_binaries amd64? ( http://code.haskell.org/~slyfox/ghc-amd64/ghc-bin-${PV}-amd64.tbz2 )" +#arch_binaries="$arch_binaries ia64? ( http://code.haskell.org/~slyfox/ghc-ia64/ghc-bin-${PV}-ia64-fixed-fiw.tbz2 )" +#arch_binaries="$arch_binaries ppc? ( mirror://gentoo/ghc-bin-${PV}-ppc.tbz2 )" +#arch_binaries="$arch_binaries ppc64? ( mirror://gentoo/ghc-bin-${PV}-ppc64.tbz2 )" +#arch_binaries="$arch_binaries sparc? ( http://code.haskell.org/~slyfox/ghc-sparc/ghc-bin-${PV}-sparc.tbz2 )" +#arch_binaries="$arch_binaries x86? ( http://code.haskell.org/~slyfox/ghc-x86/ghc-bin-${PV}-x86.tbz2 )" + +# various ports: +#arch_binaries="$arch_binaries x86-fbsd? ( http://code.haskell.org/~slyfox/ghc-x86-fbsd/ghc-bin-${PV}-x86-fbsd.tbz2 )" + +# 0 - yet +yet_binary() { + case "${ARCH}" in + #alpha) + # return 0 + # ;; + #arm) + # ewarn "ARM binary is built on armv5tel-eabi toolchain. Use with caution." + # return 0 + # ;; + #amd64) + # return 0 + # ;; + ##sparc) + # return 0 + # ;; + #x86) + # return 0 + # ;; + *) + return 1 + ;; + esac +} + +SRC_URI="!binary? ( http://www.haskell.org/ghc/dist/${PV}/${P}-src.tar.bz2 )" +[[ -n $arch_binaries ]] && SRC_URI+=" !ghcbootstrap? ( $arch_binaries )" +LICENSE="BSD" +SLOT="0" +# ghc on ia64 needs gcc to support -mcmodel=medium (or some dark hackery) to avoid TOC overflow +KEYWORDS="~alpha ~amd64 -ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos ~sparc-solaris ~x86-solaris" +IUSE="doc ghcbootstrap llvm" +IUSE+=" binary" # don't forget about me later! + +RDEPEND=" + !kernel_Darwin? ( >=sys-devel/gcc-2.95.3 ) + kernel_linux? ( >=sys-devel/binutils-2.17 ) + kernel_SunOS? ( >=sys-devel/binutils-2.17 ) + >=dev-lang/perl-5.6.1 + >=dev-libs/gmp-5 + !<dev-haskell/haddock-2.4.2 + sys-libs/ncurses[unicode]" +# earlier versions than 2.4.2 of haddock only works with older ghc releases + +# force dependency on >=gmp-5, even if >=gmp-4.1 would be enough. this is due to +# that we want the binaries to use the latest versioun available, and not to be +# built against gmp-4 + +DEPEND="${RDEPEND} + ghcbootstrap? ( >=dev-haskell/alex-2.3 + >=dev-haskell/happy-1.18 + doc? ( app-text/docbook-xml-dtd:4.2 + app-text/docbook-xml-dtd:4.5 + 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-1.2* )" +PDEPEND=" + ${PDEPEND} + dev-haskell/random + dev-haskell/syb + llvm? ( sys-devel/llvm )" + +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_FLAGS="${GHC_FLAGS} -optc${flag}" CFLAGS="${CFLAGS} ${flag}" + [[ ${assemble} ]] && GHC_FLAGS="${GHC_FLAGS} -opta${flag}" CFLAGS="${CFLAGS} ${flag}" + [[ ${link} ]] && GHC_FLAGS="${GHC_FLAGS} -optl${flag}" FILTERED_LDFLAGS="${FILTERED_LDFLAGS} ${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 + + GHC_FLAGS="" + 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 + + FILTERED_LDFLAGS="" + for flag in ${LDFLAGS}; do + case ${flag} in + # Pass the canary. we don't quite respect LDFLAGS, but we have an excuse! + "-Wl,--hash-style="*) append-ghc-cflags link ${flag};; + + # Ignore all other 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 + # fix the similar issue as ppc64 TOC on ia64. ia64 has limited size of small data + # currently ghc fails to build haddock + # http://osdir.com/ml/gnu.binutils.bugs/2004-10/msg00050.html + use ia64 && append-ghc-cflags compile -G0 + + # Unfortunately driver/split/ghc-split.lprl is dumb + # enough to preserve stack marking for each split object + # and it flags stack marking violation: + # * !WX --- --- usr/lib64/ghc-7.4.1/base-4.5.0.0/libHSbase-4.5.0.0.a:Fingerprint__1.o + # * !WX --- --- usr/lib64/ghc-7.4.1/base-4.5.0.0/libHSbase-4.5.0.0.a:Fingerprint__2.o + # * !WX --- --- usr/lib64/ghc-7.4.1/base-4.5.0.0/libHSbase-4.5.0.0.a:Fingerprint__3.o + case $($(tc-getAS) -v 2>&1 </dev/null) in + *"GNU Binutils"*) # GNU ld + append-ghc-cflags compile assemble -Wa,--noexecstack + ;; + esac +} + +# substitutes string $1 to $2 in files $3 $4 ... +relocate_path() { + local from=$1 + local to=$2 + shift 2 + local file= + for file in "$@" + do + sed -i -e "s|$from|$to|g" \ + "$file" || die "path relocation failed for '$file'" + done +} + +# changes hardcoded ghc paths and updates package index +# $1 - new absolute root path +relocate_ghc() { + local to=$1 + + # backup original script to use it later after relocation + local gp_back="${T}/ghc-pkg-${PV}-orig" + cp "${WORKDIR}/usr/bin/ghc-pkg-${PV}" "$gp_back" || die "unable to backup ghc-pkg wrapper" + + # Relocate from /usr to ${EPREFIX}/usr + relocate_path "/usr" "${to}/usr" \ + "${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.d/"* + + # this one we will use to regenerate cache + # so it shoult point to current tree location + relocate_path "/usr" "${WORKDIR}/usr" "$gp_back" + + if use prefix; then + # and insert LD_LIBRARY_PATH entry to EPREFIX dir tree + # TODO: add the same for darwin's CHOST and it's DYLD_ + local new_ldpath='LD_LIBRARY_PATH="'${EPREFIX}/$(get_libdir):${EPREFIX}/usr/$(get_libdir)'${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"\nexport LD_LIBRARY_PATH' + sed -i -e '2i'"$new_ldpath" \ + "${WORKDIR}/usr/bin/ghc-${PV}" \ + "${WORKDIR}/usr/bin/ghci-${PV}" \ + "${WORKDIR}/usr/bin/ghc-pkg-${PV}" \ + "$gp_back" \ + "${WORKDIR}/usr/bin/hsc2hs" \ + || die "Adding LD_LIBRARY_PATH for wrappers failed" + fi + + # regenerate the binary package cache + "$gp_back" recache || die "failed to update cache after relocation" + rm "$gp_back" +} + +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." + else + if ! yet_binary; then + eerror "Please try emerging with USE=ghcbootstrap and report build" + eerror "sucess or failure to the haskell team (haskell@gentoo.org)" + die "No binary available for '${ARCH}' arch yet, USE=ghcbootstrap" + fi + fi +} + +src_unpack() { + # Create the ${S} dir if we're using the binary version + use binary && mkdir "${S}" + + # the Solaris and Darwin binaries from ghc (maeder) need to be + # unpacked separately, so prevent them from being unpacked + local ONLYA=${A} + case ${CHOST} in + *-darwin* | *-solaris*) ONLYA=${P}-src.tar.bz2 ;; + esac + unpack ${ONLYA} +} + +src_prepare() { + [[ ${CHOST} != *-darwin* ]] && \ + source "${FILESDIR}/ghc-apply-gmp-hack" "$(get_libdir)" + + ghc_setup_cflags + + if ! use ghcbootstrap; then + # Modify the wrapper script from the binary tarball to use GHC_FLAGS. + # See bug #313635. + sed -i -e "s|\"\$topdir\"|\"\$topdir\" ${GHC_FLAGS}|" \ + "${WORKDIR}/usr/bin/ghc-${PV}" + + # allow hardened users use vanilla binary to bootstrap ghc + # ghci uses mmap with rwx protection at it implements dynamic + # linking on it's own (bug #299709) + pax-mark -m "${WORKDIR}/usr/$(get_libdir)/${P}/ghc" + fi + + if use binary; then + if use prefix; then + relocate_ghc "${EPREFIX}" + fi + + # Move unpacked files to the expected place + mv "${WORKDIR}/usr" "${S}" + else + if ! use ghcbootstrap; then + case ${CHOST} in + *-darwin* | *-solaris*) + # UPDATE ME for ghc-7 + mkdir "${WORKDIR}"/ghc-bin-installer || die + pushd "${WORKDIR}"/ghc-bin-installer > /dev/null || die + use sparc-solaris && unpack ghc-6.10.4-sparc-sun-solaris2.tar.bz2 + use x86-solaris && unpack ghc-6.10.4-i386-unknown-solaris2.tar.bz2 + use ppc-macos && unpack ghc-6.10.1-powerpc-apple-darwin.tar.bz2 + use x86-macos && unpack ghc-6.10.1-i386-apple-darwin.tar.bz2 + popd > /dev/null + + pushd "${WORKDIR}"/ghc-bin-installer/ghc-6.10.? > /dev/null || die + # fix the binaries so they run, on Solaris we need an + # LD_LIBRARY_PATH which has our prefix libdirs, on + # Darwin we need to replace the frameworks with our libs + # from the prefix fix before installation, because some + # of the tools are actually used during configure/make + if [[ ${CHOST} == *-solaris* ]] ; then + export LD_LIBRARY_PATH="${EPREFIX}/$(get_libdir):${EPREFIX}/usr/$(get_libdir):${LD_LIBRARY_PATH}" + elif [[ ${CHOST} == *-darwin* ]] ; then + # http://hackage.haskell.org/trac/ghc/ticket/2942 + pushd utils/haddock/dist-install/build > /dev/null + ln -s Haddock haddock >& /dev/null # fails on IN-sensitive + popd > /dev/null + + local readline_framework=GNUreadline.framework/GNUreadline + local gmp_framework=/opt/local/lib/libgmp.3.dylib + local ncurses_file=/opt/local/lib/libncurses.5.dylib + for binary in $(scanmacho -BRE MH_EXECUTE -F '%F' .) ; do + install_name_tool -change \ + ${readline_framework} \ + "${EPREFIX}"/lib/libreadline.dylib \ + ${binary} || die + install_name_tool -change \ + ${gmp_framework} \ + "${EPREFIX}"/usr/lib/libgmp.dylib \ + ${binary} || die + install_name_tool -change \ + ${ncurses_file} \ + "${EPREFIX}"/usr/lib/libncurses.dylib \ + ${binary} || die + done + # we don't do frameworks! + sed -i \ + -e 's/\(frameworks = \)\["GMP"\]/\1[]/g' \ + -e 's/\(extraLibraries = \)\["m"\]/\1["m","gmp"]/g' \ + rts/package.conf.in || die + fi + + # it is autoconf, but we really don't want to give it too + # much arguments, in fact we do the make in-place anyway + ./configure --prefix="${WORKDIR}"/usr || die + make install || die + popd > /dev/null + ;; + *) + relocate_ghc "${WORKDIR}" + ;; + esac + fi + + sed -i -e "s|\"\$topdir\"|\"\$topdir\" ${GHC_FLAGS}|" \ + "${S}/ghc/ghc.wrapper" + + cd "${S}" # otherwise epatch will break + + epatch "${FILESDIR}/ghc-7.0.4-CHOST-prefix.patch" + + epatch "${FILESDIR}"/${PN}-7.0.4-darwin8.patch + # failed to apply. FIXME + #epatch "${FILESDIR}"/${PN}-6.12.3-mach-o-relocation-limit.patch + + epatch "${FILESDIR}"/${PN}-7.4-rc2-macos-prefix-respect-gcc.patch + epatch "${FILESDIR}"/${PN}-7.2.1-freebsd-CHOST.patch + + if use prefix; then + # Make configure find docbook-xsl-stylesheets from Prefix + sed -i -e '/^FP_DIR_DOCBOOK_XSL/s:\[.*\]:['"${EPREFIX}"'/usr/share/sgml/docbook/xsl-stylesheets/]:' utils/haddock/doc/configure.ac || die + fi + + # as we have changed the build system + eautoreconf + fi +} + +src_configure() { + 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 = ${EPREFIX}/usr/share/doc/${P}" >> mk/build.mk + echo "htmldir = ${EPREFIX}/usr/share/doc/${P}" >> mk/build.mk + + # We also need to use the GHC_FLAGS flags when building ghc itself + echo "SRC_HC_OPTS+=${GHC_FLAGS}" >> mk/build.mk + echo "SRC_CC_OPTS+=${CFLAGS}" >> mk/build.mk + echo "SRC_LD_OPTS+=${FILTERED_LDFLAGS}" >> 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 "BUILD_DOCBOOK_PDF = NO" >> mk/build.mk + echo "BUILD_DOCBOOK_PS = NO" >> mk/build.mk + echo "BUILD_DOCBOOK_HTML = YES" >> mk/build.mk + echo "HADDOCK_DOCS = YES" >> mk/build.mk + else + echo "BUILD_DOCBOOK_PDF = NO" >> mk/build.mk + echo "BUILD_DOCBOOK_PS = NO" >> mk/build.mk + echo "BUILD_DOCBOOK_HTML = NO" >> 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 + + # some arches do not support ELF parsing for ghci module loading + # PPC64: never worked (should be easy to implement) + # alpha: never worked + # arm: unimplemented or never worked + if use alpha || use ppc64 || use arm; then + echo "GhcWithInterpreter=NO" >> mk/build.mk + fi + + # we have to tell it to build unregisterised on some arches + # ppc64: EvilMangler currently does not understand some TOCs + # ia64: EvilMangler bitrot + if use alpha || use ia64 || use ppc64; then + echo "GhcUnregisterised=YES" >> 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 + + # arm: no EvilMangler support, no NCG support + if use arm; then + echo "GhcUnregisterised=YES" >> mk/build.mk + echo "GhcWithNativeCodeGen=NO" >> 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 + + if ! use llvm; then + echo "GhcWithLlvmCodeGen=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 + + # Since GHC 6.12.2 the GHC wrappers store which GCC version GHC was + # compiled with, by saving the path to it. The purpose is to make sure + # that GHC will use the very same gcc version when it compiles haskell + # sources, as the extra-gcc-opts files contains extra gcc options which + # match only this GCC version. + # However, this is not required in Gentoo, as only modern GCCs are used + # (>4). + # Instead, this causes trouble when for example ccache is used during + # compilation, but we don't want the wrappers to point to ccache. + # Due to the above, we simply set GCC to be "gcc". When compiling ghc it + # might point to ccache, once installed it will point to the users + # regular gcc. + + econf --with-gcc=gcc || die "econf failed" + fi # ! use binary +} + +src_compile() { + if ! use binary; then + emake all || die "make failed" + fi # ! use binary +} + +src_install() { + if use binary; then + use prefix && mkdir -p "${ED}" + mv "${S}/usr" "${ED}" + + # Remove the docs if not requested + if ! use doc; then + rm -rf "${ED}/usr/share/doc/${P}/*/" \ + "${ED}/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 + mkdir -p "${ED}/usr/share/doc" + mv "${WORKDIR}/usr/share/doc/${P}" "${ED}/usr/share/doc" \ + || die "failed to copy docs" + fi + fi + + emake -j1 ${insttarget} \ + DESTDIR="${D}" \ + || die "make ${insttarget} failed" + + # remove wrapper and linker + rm -f "${ED}"/usr/bin/haddock* + + # ghci uses mmap with rwx protection at it implements dynamic + # linking on it's own (bug #299709) + # so mark resulting binary + pax-mark -m "${ED}/usr/$(get_libdir)/${P}/ghc" + + dodoc "${S}/README" "${S}/ANNOUNCE" "${S}/LICENSE" "${S}/VERSION" + + dobashcompletion "${FILESDIR}/ghc-bash-completion" + + fi + + # path to the package.cache + PKGCACHE="${ED}/usr/$(get_libdir)/${P}/package.conf.d/package.cache" + + # copy the package.conf, including timestamp, save it so we later can put it + # back before uninstalling, or when upgrading. + cp -p "${PKGCACHE}"{,.shipped} \ + || die "failed to copy package.conf.d/package.cache" +} + +pkg_preinst() { + # have we got an earlier version of ghc installed? + if has_version "<${CATEGORY}/${PF}"; then + haskell_updater_warn="1" + fi +} + +pkg_postinst() { + ghc-reregister + + # path to the package.cache + PKGCACHE="${EROOT}/usr/$(get_libdir)/${P}/package.conf.d/package.cache" + + # give the cache a new timestamp, it must be as recent as + # the package.conf.d directory. + touch "${PKGCACHE}" + + if [[ "${haskell_updater_warn}" == "1" ]]; then + ewarn + ewarn "\e[1;31m************************************************************************\e[0m" + ewarn + ewarn "You have just upgraded from an older version of GHC." + ewarn "You may have to run" + ewarn " 'haskell-updater --upgrade'" + ewarn "to rebuild all ghc-based Haskell libraries." + ewarn + ewarn "\e[1;31m************************************************************************\e[0m" + ewarn + fi + + 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 modified package.cache with a copy of the + # original one, so that it will be removed during uninstall. + + PKGCACHE="${EROOT}/usr/$(get_libdir)/${P}/package.conf.d/package.cache" + rm -rf "${PKGCACHE}" + + cp -p "${PKGCACHE}"{.shipped,} +} |