[ghc/el5] backport 7.0.4-46.el6
Jens Petersen
petersen at fedoraproject.org
Wed Dec 25 08:32:13 UTC 2013
commit 5cc7cbb6d25b65488ce612e7bad911787dd616fa
Author: Jens Petersen <petersen at redhat.com>
Date: Wed Dec 25 17:32:03 2013 +0900
backport 7.0.4-46.el6
- bootstrap
- use ghc_lib_subpackage
.gitignore | 2 +
Cabal-option-executable-dynamic.patch | 145 ++++++++++
ghc-7.0.4-configure-s390x.patch | 37 +++
ghc-doc-index.cron | 41 +++
ghc-fix-linking-on-sparc.patch | 13 +
ghc-gen_contents_index-cron-batch.patch | 20 ++
ghc-gen_contents_index-type-level.patch | 12 +
ghc-powerpc-linker-mmap.patch | 34 +++
ghc-powerpc-pthread.patch | 18 ++
ghc-use-system-libffi.patch | 120 ++++++++
ghc-wrapper-libffi-include.patch | 8 +
ghc.spec | 476 ++++++++++++++++++++++---------
sources | 4 +-
update-package.sh | 16 +
14 files changed, 816 insertions(+), 130 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 4a3c164..a56b197 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
ghc-6.12.3-src.tar.bz2
testsuite-6.12.3.tar.bz2
+/ghc-7.0.4-src.tar.bz2
+/testsuite-7.0.4.tar.bz2
diff --git a/Cabal-option-executable-dynamic.patch b/Cabal-option-executable-dynamic.patch
new file mode 100644
index 0000000..4324c11
--- /dev/null
+++ b/Cabal-option-executable-dynamic.patch
@@ -0,0 +1,145 @@
+diff -rN -u old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Configure.hs new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Configure.hs
+--- old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Configure.hs 2011-01-22 14:49:22.000000000 +1000
++++ new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Configure.hs 2011-01-22 14:49:22.000000000 +1000
+@@ -488,6 +488,7 @@
+ withVanillaLib = fromFlag $ configVanillaLib cfg,
+ withProfLib = fromFlag $ configProfLib cfg,
+ withSharedLib = fromFlag $ configSharedLib cfg,
++ withDynExe = fromFlag $ configDynExe cfg,
+ withProfExe = fromFlag $ configProfExe cfg,
+ withOptimization = fromFlag $ configOptimization cfg,
+ withGHCiLib = fromFlag $ configGHCiLib cfg,
+diff -u ghc-7.0.1/libraries/Cabal/Distribution/Simple/GHC.hs.orig ghc-7.0.1/libraries/Cabal/Distribution/Simple/GHC.hs
+--- ghc-7.0.1/libraries/Cabal/Distribution/Simple/GHC.hs.orig 2010-11-13 04:10:09.000000000 +1000
++++ ghc-7.0.1/libraries/Cabal/Distribution/Simple/GHC.hs 2011-01-22 14:52:52.000000000 +1000
+@@ -537,6 +537,7 @@
+ info verbosity "Building C Sources..."
+ sequence_ [do let (odir,args) = constructCcCmdLine lbi libBi clbi pref
+ filename verbosity
++ False
+ (withProfLib lbi)
+ createDirectoryIfMissingVerbose verbosity True odir
+ runGhcProg args
+@@ -671,7 +672,7 @@
+ info verbosity "Building C Sources."
+ sequence_ [do let (odir,args) = constructCcCmdLine lbi exeBi clbi
+ exeDir filename verbosity
+- (withProfExe lbi)
++ (withDynExe lbi) (withProfExe lbi)
+ createDirectoryIfMissingVerbose verbosity True odir
+ runGhcProg args
+ | filename <- cSources exeBi]
+@@ -679,7 +680,7 @@
+ srcMainFile <- findFile (exeDir : hsSourceDirs exeBi) modPath
+
+ let cObjs = map (`replaceExtension` objExtension) (cSources exeBi)
+- let binArgs linkExe profExe =
++ let binArgs linkExe dynExe profExe =
+ "--make"
+ : (if linkExe
+ then ["-o", targetDir </> exeNameReal]
+@@ -691,6 +692,9 @@
+ ++ ["-l"++lib | lib <- extraLibs exeBi]
+ ++ ["-L"++libDir | libDir <- extraLibDirs exeBi]
+ ++ concat [["-framework", f] | f <- PD.frameworks exeBi]
++ ++ if dynExe
++ then ["-dynamic"]
++ else []
+ ++ if profExe
+ then ["-prof",
+ "-hisuf", "p_hi",
+@@ -704,9 +708,9 @@
+ -- run at compile time needs to be the vanilla ABI so it can
+ -- be loaded up and run by the compiler.
+ when (withProfExe lbi && TemplateHaskell `elem` allExtensions exeBi)
+- (runGhcProg (binArgs False False))
++ (runGhcProg (binArgs (withDynExe lbi) False False))
+
+- runGhcProg (binArgs True (withProfExe lbi))
++ runGhcProg (binArgs True (withDynExe lbi) (withProfExe lbi))
+
+ -- | Filter the "-threaded" flag when profiling as it does not
+ -- work with ghc-6.8 and older.
+@@ -836,9 +840,9 @@
+ ierror = error ("internal error: unexpected package db stack: " ++ show dbstack)
+
+ constructCcCmdLine :: LocalBuildInfo -> BuildInfo -> ComponentLocalBuildInfo
+- -> FilePath -> FilePath -> Verbosity -> Bool
++ -> FilePath -> FilePath -> Verbosity -> Bool -> Bool
+ ->(FilePath,[String])
+-constructCcCmdLine lbi bi clbi pref filename verbosity profiling
++constructCcCmdLine lbi bi clbi pref filename verbosity dynamic profiling
+ = let odir | compilerVersion (compiler lbi) >= Version [6,4,1] [] = pref
+ | otherwise = pref </> takeDirectory filename
+ -- ghc 6.4.1 fixed a bug in -odir handling
+@@ -852,6 +856,7 @@
+ -- option to ghc here when compiling C code, so that the PROFILING
+ -- macro gets defined. The macro is used in ghc's Rts.h in the
+ -- definitions of closure layouts (Closures.h).
++ ++ ["-dynamic" | dynamic]
+ ++ ["-prof" | profiling])
+
+ ghcCcOptions :: LocalBuildInfo -> BuildInfo -> ComponentLocalBuildInfo
+diff -rN -u old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/LocalBuildInfo.hs new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/LocalBuildInfo.hs
+--- old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/LocalBuildInfo.hs 2011-01-22 14:49:22.000000000 +1000
++++ new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/LocalBuildInfo.hs 2011-01-22 14:49:22.000000000 +1000
+@@ -118,6 +118,7 @@
+ withVanillaLib:: Bool, -- ^Whether to build normal libs.
+ withProfLib :: Bool, -- ^Whether to build profiling versions of libs.
+ withSharedLib :: Bool, -- ^Whether to build shared versions of libs.
++ withDynExe :: Bool, -- ^Whether to link executables dynamically
+ withProfExe :: Bool, -- ^Whether to build executables for profiling.
+ withOptimization :: OptimisationLevel, -- ^Whether to build with optimization (if available).
+ withGHCiLib :: Bool, -- ^Whether to build libs suitable for use with GHCi.
+diff -rN -u old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Setup.hs new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Setup.hs
+--- old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Setup.hs 2011-01-22 14:49:22.000000000 +1000
++++ new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Setup.hs 2011-01-22 14:49:22.000000000 +1000
+@@ -270,6 +270,7 @@
+ configVanillaLib :: Flag Bool, -- ^Enable vanilla library
+ configProfLib :: Flag Bool, -- ^Enable profiling in the library
+ configSharedLib :: Flag Bool, -- ^Build shared library
++ configDynExe :: Flag Bool, -- ^Enable dynamic linking of the executables.
+ configProfExe :: Flag Bool, -- ^Enable profiling in the executables.
+ configConfigureArgs :: [String], -- ^Extra arguments to @configure@
+ configOptimization :: Flag OptimisationLevel, -- ^Enable optimization.
+@@ -301,6 +302,7 @@
+ configVanillaLib = Flag True,
+ configProfLib = Flag False,
+ configSharedLib = Flag False,
++ configDynExe = Flag False,
+ configProfExe = Flag False,
+ configOptimization = Flag NormalOptimisation,
+ configProgPrefix = Flag (toPathTemplate ""),
+@@ -388,10 +390,16 @@
+ configSharedLib (\v flags -> flags { configSharedLib = v })
+ (boolOpt [] [])
+
++ ,option "" ["executable-dynamic"]
++ "Executable dynamic linking (fedora patch)"
++ configDynExe (\v flags -> flags { configDynExe = v })
++ (boolOpt [] [])
++
+ ,option "" ["executable-profiling"]
+ "Executable profiling"
+ configProfExe (\v flags -> flags { configProfExe = v })
+ (boolOpt [] [])
++
+ ,multiOption "optimization"
+ configOptimization (\v flags -> flags { configOptimization = v })
+ [optArg' "n" (Flag . flagToOptimisationLevel)
+@@ -553,6 +561,7 @@
+ configVanillaLib = mempty,
+ configProfLib = mempty,
+ configSharedLib = mempty,
++ configDynExe = mempty,
+ configProfExe = mempty,
+ configConfigureArgs = mempty,
+ configOptimization = mempty,
+@@ -583,6 +592,7 @@
+ configVanillaLib = combine configVanillaLib,
+ configProfLib = combine configProfLib,
+ configSharedLib = combine configSharedLib,
++ configDynExe = combine configDynExe,
+ configProfExe = combine configProfExe,
+ configConfigureArgs = combine configConfigureArgs,
+ configOptimization = combine configOptimization,
diff --git a/ghc-7.0.4-configure-s390x.patch b/ghc-7.0.4-configure-s390x.patch
new file mode 100644
index 0000000..b79ed3a
--- /dev/null
+++ b/ghc-7.0.4-configure-s390x.patch
@@ -0,0 +1,37 @@
+From 3a49e5147822bdfea2c763c863a7ca6b6baee609 Mon Sep 17 00:00:00 2001
+From: Joachim Breitner <mail at joachim-breitner.de>
+Date: Mon, 5 Sep 2011 09:37:24 +0200
+Subject: [PATCH] Add s390x to list of supported architectures
+
+---
+ aclocal.m4 | 3 +++
+ configure.ac | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletions(-)
+
+Index: ghc-7.0.4/aclocal.m4
+===================================================================
+--- ghc-7.0.4.orig/aclocal.m4 2011-08-31 08:44:42.000000000 +0200
++++ ghc-7.0.4/aclocal.m4 2011-09-05 14:08:59.000000000 +0200
+@@ -1457,6 +1457,9 @@
+ rs6000)
+ $2="rs6000"
+ ;;
++ s390x*)
++ $2="s390x"
++ ;;
+ s390*)
+ $2="s390"
+ ;;
+Index: ghc-7.0.4/configure.ac
+===================================================================
+--- ghc-7.0.4.orig/configure.ac 2011-06-13 19:10:04.000000000 +0200
++++ ghc-7.0.4/configure.ac 2011-09-05 14:08:59.000000000 +0200
+@@ -244,7 +244,7 @@
+
+ checkArch() {
+ case $1 in
+- alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|sparc|sparc64|vax|x86_64)
++ alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|s390x|sparc|sparc64|vax|x86_64)
+ ;;
+ *)
+ echo "Unknown arch $1"
diff --git a/ghc-doc-index.cron b/ghc-doc-index.cron
new file mode 100755
index 0000000..9cf2888
--- /dev/null
+++ b/ghc-doc-index.cron
@@ -0,0 +1,41 @@
+#! /bin/bash
+
+if [ -e /etc/sysconfig/ghc-doc-index ]; then
+ . /etc/sysconfig/ghc-doc-index
+fi
+
+if [ "$CRON" = "no" ]; then
+ exit 0
+fi
+
+
+LOCKFILE=/var/lock/ghc-doc-index.lock
+
+# the lockfile is not meant to be perfect, it's just in case the
+# two cron scripts get run close to each other to keep
+# them from stepping on each other's toes.
+[ -f $LOCKFILE ] && exit 0
+
+trap "{ rm -f $LOCKFILE ; exit 255; }" EXIT
+touch $LOCKFILE
+
+PKGDIRCACHE=/var/lib/ghc/pkg-dir.cache
+LISTING="env LANG=C ls -dl"
+
+# only re-index ghc docs when there are changes
+cd /usr/share/doc/ghc/html/libraries
+if [ -r "$PKGDIRCACHE" ]; then
+ $LISTING */ > $PKGDIRCACHE.new
+ DIR_DIFF=$(diff $PKGDIRCACHE $PKGDIRCACHE.new)
+else
+ $LISTING */ > $PKGDIRCACHE
+fi
+if [ -x "gen_contents_index" -a ! -r "$PKGDIRCACHE.new" -o -n "$DIR_DIFF" ]; then
+ ./gen_contents_index --batch
+fi
+
+if [ -f $PKGDIRCACHE.new ]; then
+ mv -f $PKGDIRCACHE{.new,}
+fi
+
+exit 0
diff --git a/ghc-fix-linking-on-sparc.patch b/ghc-fix-linking-on-sparc.patch
new file mode 100644
index 0000000..323730a
--- /dev/null
+++ b/ghc-fix-linking-on-sparc.patch
@@ -0,0 +1,13 @@
+diff -Nuard ghc-7.0.1.orig/compiler/main/DriverPipeline.hs ghc-7.0.1/compiler/main/DriverPipeline.hs
+--- ghc-7.0.1.orig/compiler/main/DriverPipeline.hs 2010-11-12 19:10:03.000000000 +0100
++++ ghc-7.0.1/compiler/main/DriverPipeline.hs 2011-02-22 11:08:26.079686994 +0100
+@@ -1211,6 +1211,9 @@
+ let ld_r args = SysTools.runLink dflags ([
+ SysTools.Option "-nostdlib",
+ SysTools.Option "-nodefaultlibs",
++#ifdef sparc_TARGET_ARCH
++ SysTools.Option "-Wl,--no-relax",
++#endif
+ SysTools.Option "-Wl,-r",
+ SysTools.Option ld_x_flag,
+ SysTools.Option "-o",
diff --git a/ghc-gen_contents_index-cron-batch.patch b/ghc-gen_contents_index-cron-batch.patch
new file mode 100644
index 0000000..9e30974
--- /dev/null
+++ b/ghc-gen_contents_index-cron-batch.patch
@@ -0,0 +1,20 @@
+diff -u ghc-6.12.3/libraries/gen_contents_index gen_contents_index
+--- ghc-6.12.3/libraries/gen_contents_index 2010-11-05 10:28:02.000000000 +1000
++++ gen_contents_index 2010-11-05 10:20:37.000000000 +1000
+@@ -22,5 +22,5 @@
+ done
+ ;;
+-*)
++--batch)
+ HADDOCK=/usr/bin/haddock
+ # We don't want the GHC API to swamp the index
+@@ -32,6 +32,9 @@
+ HADDOCK_ARGS="$HADDOCK_ARGS $HADDOCK_ARG"
+ done
+ ;;
++*)
++ HADDOCK=/bin/true
++ tty -s && echo Run with '--batch' to index package haddock docs.
+ esac
+
+ # Now create the combined contents and index pages
diff --git a/ghc-gen_contents_index-type-level.patch b/ghc-gen_contents_index-type-level.patch
new file mode 100644
index 0000000..05a9e42
--- /dev/null
+++ b/ghc-gen_contents_index-type-level.patch
@@ -0,0 +1,12 @@
+diff -u ghc-6.12.3/libraries/gen_contents_index\~ ghc-6.12.3/libraries/gen_contents_index
+--- ghc-6.12.3/libraries/gen_contents_index~ 2010-09-14 13:03:12.000000000 +1000
++++ ghc-6.12.3/libraries/gen_contents_index 2010-11-04 16:41:32.000000000 +1000
+@@ -24,7 +24,7 @@
+ *)
+ HADDOCK=/usr/bin/haddock
+ # We don't want the GHC API to swamp the index
+- HADDOCK_FILES=`ls -1 */*.haddock | grep -v '/ghc\.haddock' | sort`
++ HADDOCK_FILES=`ls -1 */*.haddock | grep -v '/ghc\.haddock' | grep -v '/type-level\.haddock' | sort`
+ for HADDOCK_FILE in $HADDOCK_FILES
+ do
+ NAME_VERSION=`echo "$HADDOCK_FILE" | sed 's#/.*##'`
diff --git a/ghc-powerpc-linker-mmap.patch b/ghc-powerpc-linker-mmap.patch
new file mode 100644
index 0000000..df0d5ff
--- /dev/null
+++ b/ghc-powerpc-linker-mmap.patch
@@ -0,0 +1,34 @@
+diff -up ghc-7.0.2/rts/Linker.c.fix-powerpc ghc-7.0.2/rts/Linker.c
+--- ghc-7.0.2/rts/Linker.c.fix-powerpc 2011-02-28 19:10:08.000000000 +0100
++++ ghc-7.0.2/rts/Linker.c 2011-04-25 22:20:10.781092305 +0200
+@@ -70,11 +70,12 @@
+ #include <sys/wait.h>
+ #endif
+
+-#if defined(linux_HOST_OS ) || defined(freebsd_HOST_OS) || \
+- defined(dragonfly_HOST_OS) || defined(netbsd_HOST_OS ) || \
+- defined(openbsd_HOST_OS ) || \
+- ( defined(darwin_HOST_OS ) && !defined(powerpc_HOST_ARCH) )
+-/* Don't use mmap on powerpc-apple-darwin as mmap doesn't support
++#if !defined(powerpc_HOST_ARCH) && \
++ ( defined(linux_HOST_OS ) || defined(freebsd_HOST_OS) || \
++ defined(dragonfly_HOST_OS) || defined(netbsd_HOST_OS ) || \
++ defined(openbsd_HOST_OS ) || defined(darwin_HOST_OS ) || \
++ defined(kfreebsdgnu_HOST_OS) )
++/* Don't use mmap on powerpc_HOST_ARCH as mmap doesn't support
+ * reallocating but we need to allocate jump islands just after each
+ * object images. Otherwise relative branches to jump islands can fail
+ * due to 24-bits displacement overflow.
+@@ -2436,7 +2437,11 @@ static void ocFlushInstructionCacheFrom(
+ static void ocFlushInstructionCache( ObjectCode *oc )
+ {
+ /* The main object code */
+- ocFlushInstructionCacheFrom(oc->image + oc->misalignment, oc->fileSize);
++ ocFlushInstructionCacheFrom(oc->image
++#ifdef darwin_HOST_OS
++ + oc->misalignment
++#endif
++ , oc->fileSize);
+
+ /* Jump Islands */
+ ocFlushInstructionCacheFrom(oc->symbol_extras, sizeof(SymbolExtra) * oc->n_symbol_extras);
diff --git a/ghc-powerpc-pthread.patch b/ghc-powerpc-pthread.patch
new file mode 100644
index 0000000..f0b8c60
--- /dev/null
+++ b/ghc-powerpc-pthread.patch
@@ -0,0 +1,18 @@
+diff -up ghc-7.0.2/aclocal.m4.pthread ghc-7.0.2/aclocal.m4
+--- ghc-7.0.2/aclocal.m4.pthread 2011-02-28 13:10:03.000000000 -0500
++++ ghc-7.0.2/aclocal.m4 2011-04-20 07:12:36.489772545 -0400
+@@ -1385,7 +1385,7 @@ AC_MSG_NOTICE(Building in-tree ghc-pwd)
+ dnl except we don't want to have to know what make is called. Sigh.
+ rm -rf utils/ghc-pwd/dist-boot
+ mkdir utils/ghc-pwd/dist-boot
+- if ! "$WithGhc" -v0 -no-user-package-conf -hidir utils/ghc-pwd/dist-boot -odir utils/ghc-pwd/dist-boot -stubdir utils/ghc-pwd/dist-boot --make utils/ghc-pwd/Main.hs -o utils/ghc-pwd/dist-boot/ghc-pwd
++ if ! "$WithGhc" -optl-pthread -v0 -no-user-package-conf -hidir utils/ghc-pwd/dist-boot -odir utils/ghc-pwd/dist-boot -stubdir utils/ghc-pwd/dist-boot --make utils/ghc-pwd/Main.hs -o utils/ghc-pwd/dist-boot/ghc-pwd
+ then
+ AC_MSG_ERROR([Building ghc-pwd failed])
+ fi
+diff -up ghc-7.0.4/ghc/ghc.wrapper.pthread ghc-7.0.4/ghc/ghc.wrapper
+--- ghc-7.0.4/ghc/ghc.wrapper.pthread 2012-03-09 09:39:58.205330373 +0900
++++ ghc-7.0.4/ghc/ghc.wrapper 2012-03-09 09:41:01.791237737 +0900
+@@ -1 +1 @@
+-exec "$executablename" -B"$topdir" -pgmc "$pgmgcc" -pgma "$pgmgcc" -pgml "$pgmgcc" -pgmP "$pgmgcc -E -undef -traditional" -optc-I$(pkg-config --variable=includedir libffi) ${1+"$@"}
++exec "$executablename" -B"$topdir" -pgmc "$pgmgcc" -pgma "$pgmgcc" -pgml "$pgmgcc" -pgmP "$pgmgcc -E -undef -traditional" -optl-pthread -optc-I$(pkg-config --variable=includedir libffi) ${1+"$@"}
diff --git a/ghc-use-system-libffi.patch b/ghc-use-system-libffi.patch
new file mode 100644
index 0000000..60262e0
--- /dev/null
+++ b/ghc-use-system-libffi.patch
@@ -0,0 +1,120 @@
+diff -up ghc-7.0.1/compiler/ghc.cabal.in.libffi ghc-7.0.1/compiler/ghc.cabal.in
+--- ghc-7.0.1/compiler/ghc.cabal.in.libffi 2010-11-13 04:10:03.000000000 +1000
++++ ghc-7.0.1/compiler/ghc.cabal.in 2010-11-16 19:04:28.000000000 +1000
+@@ -83,7 +83,7 @@ Library
+ if flag(ghci)
+ Build-Depends: template-haskell
+ CPP-Options: -DGHCI
+- Include-Dirs: ../libffi/build/include
++ pkgconfig-depends: libffi
+
+ if !flag(ncg)
+ CPP-Options: -DOMIT_NATIVE_CODEGEN
+diff -up ghc-7.0.1/ghc.mk.libffi ghc-7.0.1/ghc.mk
+--- ghc-7.0.1/ghc.mk.libffi 2010-11-13 04:10:05.000000000 +1000
++++ ghc-7.0.1/ghc.mk 2010-11-16 19:04:28.000000000 +1000
+@@ -437,7 +437,6 @@ utils/runghc/dist/package-data.mk: compi
+ # add the final two package.conf dependencies: ghc-prim depends on RTS,
+ # and RTS depends on libffi.
+ libraries/ghc-prim/dist-install/package-data.mk : rts/package.conf.inplace
+-rts/package.conf.inplace : libffi/package.conf.inplace
+ endif
+
+ # --------------------------------
+@@ -452,11 +451,6 @@ ALL_STAGE1_LIBS += $(foreach lib,$(PACKA
+ endif
+ BOOT_LIBS = $(foreach lib,$(STAGE0_PACKAGES),$(libraries/$(lib)_dist-boot_v_LIB))
+
+-OTHER_LIBS = libffi/dist-install/build/libHSffi$(v_libsuf) libffi/dist-install/build/HSffi.o
+-ifeq "$(BuildSharedLibs)" "YES"
+-OTHER_LIBS += libffi/dist-install/build/libHSffi$(dyn_libsuf)
+-endif
+-
+ # ----------------------------------------
+ # Special magic for the ghc-prim package
+
+@@ -581,7 +575,6 @@ BUILD_DIRS += \
+ driver/ghci \
+ driver/ghc \
+ driver/haddock \
+- libffi \
+ includes \
+ rts
+
+@@ -937,11 +930,10 @@ INSTALL_DISTDIR_compiler = stage2
+
+ # Now we can do the installation
+ install_packages: install_libexecs
+-install_packages: libffi/package.conf.install rts/package.conf.install
++install_packages: rts/package.conf.install
+ $(call INSTALL_DIR,"$(DESTDIR)$(topdir)")
+ "$(RM)" $(RM_OPTS_REC) "$(INSTALLED_PACKAGE_CONF)"
+ $(call INSTALL_DIR,"$(INSTALLED_PACKAGE_CONF)")
+- "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf "$(INSTALLED_PACKAGE_CONF)" update libffi/package.conf.install
+ "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf "$(INSTALLED_PACKAGE_CONF)" update rts/package.conf.install
+ $(foreach p, $(INSTALLED_PKG_DIRS), \
+ $(call make-command, \
+@@ -1024,7 +1016,7 @@ BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindi
+ unix-binary-dist-prep:
+ "$(RM)" $(RM_OPTS_REC) bindistprep/
+ "$(MKDIRHIER)" $(BIN_DIST_PREP_DIR)
+- set -e; for i in packages LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh extra-gcc-opts.in ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
++ set -e; for i in packages LICENSE compiler ghc rts libraries utils docs includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh extra-gcc-opts.in ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
+ echo "HADDOCK_DOCS = $(HADDOCK_DOCS)" >> $(BIN_DIST_MK)
+ echo "LATEX_DOCS = $(LATEX_DOCS)" >> $(BIN_DIST_MK)
+ echo "BUILD_DOCBOOK_HTML = $(BUILD_DOCBOOK_HTML)" >> $(BIN_DIST_MK)
+@@ -1102,7 +1094,7 @@ SRC_DIST_DIR=$(shell pwd)/$(SRC_DIST_NAM
+ #
+ # Files to include in source distributions
+ #
+-SRC_DIST_DIRS = mk rules docs distrib bindisttest libffi includes utils docs rts compiler ghc driver libraries ghc-tarballs
++SRC_DIST_DIRS = mk rules docs distrib bindisttest includes utils docs rts compiler ghc driver libraries ghc-tarballs
+ SRC_DIST_FILES += \
+ configure.ac config.guess config.sub configure \
+ aclocal.m4 README ANNOUNCE HACKING LICENSE Makefile install-sh \
+diff -up ghc-7.0.1/rts/ghc.mk.libffi ghc-7.0.1/rts/ghc.mk
+--- ghc-7.0.1/rts/ghc.mk.libffi 2010-11-13 04:10:06.000000000 +1000
++++ ghc-7.0.1/rts/ghc.mk 2010-11-16 19:06:09.000000000 +1000
+@@ -430,15 +430,15 @@ endif
+
+ $(eval $(call build-dependencies,rts,dist,1))
+
+-$(rts_dist_depfile_c_asm) : libffi/dist-install/build/ffi.h $(DTRACEPROBES_H)
++$(rts_dist_depfile_c_asm) : $(DTRACEPROBES_H)
+
+ #-----------------------------------------------------------------------------
+ # libffi stuff
+
+-rts_CC_OPTS += -Ilibffi/build/include
+-rts_HC_OPTS += -Ilibffi/build/include
+-rts_HSC2HS_OPTS += -Ilibffi/build/include
+-rts_LD_OPTS += -Llibffi/build/include
++rts_CC_OPTS += $(shell pkg-config --cflags libffi)
++rts_HC_OPTS += $(shell pkg-config --cflags libffi)
++rts_HSC2HS_OPTS += $(shell pkg-config --cflags libffi)
++rts_LD_OPTS += $(shell pkg-config --libs libffi)
+
+ # -----------------------------------------------------------------------------
+ # compile dtrace probes if dtrace is supported
+diff -up ghc-7.0.1/rts/package.conf.in.libffi ghc-7.0.1/rts/package.conf.in
+--- ghc-7.0.1/rts/package.conf.in.libffi 2010-11-13 04:10:06.000000000 +1000
++++ ghc-7.0.1/rts/package.conf.in 2010-11-16 19:04:28.000000000 +1000
+@@ -24,8 +24,9 @@ library-dirs: TOP"/rts/dist/build" PAPI
+ hs-libraries: "HSrts"
+
+ extra-libraries:
++ "ffi"
+ #ifdef HAVE_LIBM
+- "m" /* for ldexp() */
++ , "m" /* for ldexp() */
+ #endif
+ #ifdef HAVE_LIBRT
+ , "rt"
+@@ -55,7 +56,6 @@ include-dirs: TOP"/includes"
+ #endif
+
+ includes: Stg.h
+-depends: builtin_ffi
+ hugs-options:
+ cc-options:
+
diff --git a/ghc-wrapper-libffi-include.patch b/ghc-wrapper-libffi-include.patch
new file mode 100644
index 0000000..b8963e7
--- /dev/null
+++ b/ghc-wrapper-libffi-include.patch
@@ -0,0 +1,8 @@
+diff -u ghc-7.0.4/ghc/ghc.wrapper\~ ghc-7.0.4/ghc/ghc.wrapper
+--- ghc-7.0.4/ghc/ghc.wrapper~ 2011-06-14 02:10:05.000000000 +0900
++++ ghc-7.0.4/ghc/ghc.wrapper 2012-03-08 18:00:02.713144402 +0900
+@@ -1 +1 @@
+-exec "$executablename" -B"$topdir" -pgmc "$pgmgcc" -pgma "$pgmgcc" -pgml "$pgmgcc" -pgmP "$pgmgcc -E -undef -traditional" ${1+"$@"}
++exec "$executablename" -B"$topdir" -pgmc "$pgmgcc" -pgma "$pgmgcc" -pgml "$pgmgcc" -pgmP "$pgmgcc -E -undef -traditional" -optc-I$(pkg-config --variable=includedir libffi) ${1+"$@"}
+
+Diff finished. Thu Mar 8 18:01:14 2012
diff --git a/ghc.spec b/ghc.spec
index cd6b5bf..803f5c1 100644
--- a/ghc.spec
+++ b/ghc.spec
@@ -1,37 +1,47 @@
-# shared haskell libraries supported for x86* archs (enabled in ghc-rpm-macros)
-
-## default enabled options ##
-%bcond_without doc
-# test builds can made faster and smaller by disabling profiled libraries
-# (currently libHSrts_thr_p.a breaks no prof build)
-%bcond_without prof
-# build xml manuals (users_guide, etc)
-%bcond_without manual
-# run testsuite
-%bcond_without testsuite
-# include colored html src
-%bcond_with hscolour
-
-## default disabled options ##
-# quick build profile
-%bcond_with quick
+# Shared haskell libraries are supported for x86* archs
+# (disabled for other archs in ghc-rpm-macros)
+
+# To bootstrap a new version of ghc, uncomment the following:
+%global ghc_bootstrapping 1
+%{?ghc_bootstrap}
+%global without_hscolour 1
+%global without_testsuite 1
+
+# To do a test build instead with shared libs, uncomment the following:
+#%%global ghc_bootstrapping 1
+#%%{?ghc_test}
+#%%global without_hscolour 1
+#%%global without_testsuite 1
+
+# unregisterized archs
+%global unregisterised_archs ppc64 armv7hl armv5tel s390 s390x
# ghc does not output dwarf format so debuginfo is not useful
%global debug_package %{nil}
+%global space %(echo -n ' ')
+%global BSDHaskellReport BSD%{space}and%{space}HaskellReport
+
Name: ghc
-# haskell-platform-2010.2.0.0
-Version: 6.12.3
-Release: 5.1%{?dist}
-Summary: Glasgow Haskell Compilation system
-# fedora ghc has only been bootstrapped on the following archs:
-ExclusiveArch: %{ix86} x86_64 ppc alpha
-License: BSD
+# part of haskell-platform
+# NB make sure to rebuild ghc after a version bump to avoid ABI change problems
+Version: 7.0.4
+# Since library subpackages are versioned:
+# - release can only be reset if all library versions get bumped simultaneously
+# (eg for a major release)
+# - minor release numbers should be incremented monotonically
+Release: 45.1%{?dist}
+Summary: Glasgow Haskell Compiler
+# fedora ghc has been bootstrapped on the following archs:
+#ExclusiveArch: %{ix86} x86_64 ppc alpha sparcv9 ppc64 armv7hl armv5tel
+ExcludeArch: sparc64
+License: %BSDHaskellReport
Group: Development/Languages
Source0: http://www.haskell.org/ghc/dist/%{version}/ghc-%{version}-src.tar.bz2
-%if %{with testsuite}
+%if %{undefined without_testsuite}
Source2: http://www.haskell.org/ghc/dist/%{version}/testsuite-%{version}.tar.bz2
%endif
+Source3: ghc-doc-index.cron
URL: http://haskell.org/ghc/
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# introduced for f14
@@ -43,103 +53,221 @@ Obsoletes: ghc-haddock-doc < 2.4.2-3
# introduced for f14
Obsoletes: ghc-time-devel < 1.1.2.4-5
Obsoletes: ghc-time-doc < 1.1.2.4-5
+%if %{defined ghc_bootstrapping}
BuildRequires: ghc, ghc-rpm-macros >= 0.10.52
-BuildRequires: gmp-devel, ncurses-devel
-Requires: gcc, gmp-devel
-# for forwards compatibility
-Provides: ghc-devel = %{version}-%{release}
-%if %{undefined ghc_without_shared}
-# not sure if this is actually needed:
-BuildRequires: libffi-devel
-Requires: %{name}-libs = %{version}-%{release}
%endif
-%if %{with manual}
+%if %{undefined ghc_bootstrapping}
+BuildRequires: ghc-compiler = %{version}
+BuildRequires: ghc-rpm-macros >= 0.14
+BuildRequires: ghc-bytestring-devel
+BuildRequires: ghc-containers-devel
+BuildRequires: ghc-directory-devel
+BuildRequires: ghc-haskell98-devel
+BuildRequires: ghc-pretty-devel
+BuildRequires: ghc-process-devel
+%endif
+BuildRequires: gmp-devel
+BuildRequires: libffi-devel
+# for internal terminfo
+BuildRequires: ncurses-devel
+%if %{undefined without_manual}
BuildRequires: libxslt, docbook-style-xsl
%endif
-%if %{with hscolour}
+%if %{undefined without_haddock} && %{undefined without_hscolour}
BuildRequires: hscolour
%endif
-%if %{with testsuite}
+%if %{undefined without_testsuite}
BuildRequires: python
%endif
+%ifarch ppc64 s390x
+BuildRequires: autoconf
+%endif
+Requires: ghc-compiler = %{version}-%{release}
+Requires: ghc-libraries = %{version}-%{release}
+Requires: ghc-ghc-devel = %{version}-%{release}
Patch1: ghc-6.12.1-gen_contents_index-haddock-path.patch
+Patch2: ghc-gen_contents_index-type-level.patch
+Patch3: ghc-gen_contents_index-cron-batch.patch
+Patch4: ghc-use-system-libffi.patch
+# add cabal configure option --enable-executable-dynamic
+# (see http://hackage.haskell.org/trac/hackage/ticket/600)
+Patch5: Cabal-option-executable-dynamic.patch
+Patch6: ghc-fix-linking-on-sparc.patch
+Patch7: ghc-powerpc-pthread.patch
+# http://hackage.haskell.org/trac/ghc/ticket/4999
+Patch8: ghc-powerpc-linker-mmap.patch
+# touches configure.ac
+Patch9: ghc-7.0.4-configure-s390x.patch
+# add libffi include dir to ghc wrapper for archs using gcc
+Patch10: ghc-wrapper-libffi-include.patch
%description
-GHC is a state-of-the-art programming suite for Haskell, a purely
-functional programming language. It includes an optimizing compiler
-generating good code for a variety of platforms, together with an
-interactive system for convenient, quick development. The
-distribution includes space and time profiling facilities, a large
-collection of libraries, and support for various language
-extensions, including concurrency, exceptions, and a foreign language
-interface.
+GHC is a state-of-the-art, open source, compiler and interactive environment
+for the functional language Haskell. Highlights:
+
+- GHC supports the entire Haskell 2010 language plus various extensions.
+- GHC has particularly good support for concurrency and parallelism,
+ including support for Software Transactional Memory (STM).
+- GHC generates fast code, particularly for concurrent programs
+ (check the results on the "Computer Language Benchmarks Game").
+- GHC works on several platforms including Windows, Mac, Linux,
+ most varieties of Unix, and several different processor architectures.
+- GHC has extensive optimisation capabilities,
+ including inter-module optimisation.
+- GHC compiles Haskell code either directly to native code or using LLVM
+ as a back-end. GHC can also generate C code as an intermediate target for
+ porting to new platforms. The interactive environment compiles Haskell to
+ bytecode, and supports execution of mixed bytecode/compiled programs.
+- Profiling is supported, both by time/allocation and heap profiling.
+- GHC comes with core libraries, and thousands more are available on Hackage.
+
+%package compiler
+Summary: GHC compiler and utilities
+License: BSD
+Group: Development/Languages
+Requires: gcc
+Requires: ghc-base-devel
+Requires(post): chkconfig
+Requires(postun): chkconfig
+# added in f14
+Obsoletes: ghc-doc < 6.12.3-4
+# llvm is an optional dependency
-%if %{undefined ghc_without_shared}
-%package libs
-Summary: Shared libraries for GHC
-Group: Development/Libraries
-Obsoletes: ghc-time < 1.1.2.4-5
+%description compiler
+The package contains the GHC compiler, tools and utilities.
-%description libs
-Shared libraries for Glorious Glasgow Haskell Compilation System (GHC).
-%endif
+The ghc libraries are provided by ghc-devel.
+To install all of ghc, install the ghc base package.
-%if %{with prof}
-%package prof
-Summary: Profiling libraries for GHC
-Group: Development/Libraries
-Requires: %{name} = %{version}-%{release}
-Obsoletes: ghc-haddock-prof < 2.4.2-3
-Obsoletes: ghc-time-prof < 1.1.2.4-5
+%global ghc_version_override %{version}
-%description prof
-Profiling libraries for Glorious Glasgow Haskell Compilation System (GHC).
-They should be installed when GHC's profiling subsystem is needed.
+# needs ghc_version_override for bootstrapping
+%global _use_internal_dependency_generator 0
+%global __find_provides %{_prefix}/lib/rpm/ghc-deps.sh --provides %{buildroot}%{ghclibdir}
+%global __find_requires %{_prefix}/lib/rpm/ghc-deps.sh --requires %{buildroot}%{ghclibdir}
+
+
+%global ghc_pkg_c_deps ghc-compiler = %{ghc_version_override}-%{release}
+
+%if %{defined ghclibdir}
+%ghc_lib_subpackage Cabal 1.10.2.0
+%ghc_lib_subpackage -l %BSDHaskellReport array 0.3.0.2
+%ghc_lib_subpackage -l %BSDHaskellReport -c gmp-devel,libffi-devel base 4.3.1.0
+%ghc_lib_subpackage bytestring 0.9.1.10
+%ghc_lib_subpackage -l %BSDHaskellReport containers 0.4.0.0
+%ghc_lib_subpackage -l %BSDHaskellReport directory 1.1.0.0
+%ghc_lib_subpackage -l %BSDHaskellReport extensible-exceptions 0.1.1.2
+%ghc_lib_subpackage filepath 1.2.0.0
+%define ghc_pkg_obsoletes ghc-bin-package-db-devel < 0.0.0.0-12
+# in ghc not ghc-libraries:
+%ghc_lib_subpackage -x ghc %{ghc_version_override}
+%undefine ghc_pkg_obsoletes
+%ghc_lib_subpackage -l HaskellReport haskell2010 1.0.0.0
+%ghc_lib_subpackage -l HaskellReport haskell98 1.1.0.1
+%ghc_lib_subpackage hpc 0.5.0.6
+%ghc_lib_subpackage -l %BSDHaskellReport old-locale 1.0.0.2
+%ghc_lib_subpackage -l %BSDHaskellReport old-time 1.0.0.6
+%ghc_lib_subpackage pretty 1.0.1.2
+%ghc_lib_subpackage -l %BSDHaskellReport process 1.0.1.5
+%ghc_lib_subpackage -l %BSDHaskellReport random 1.0.0.3
+%ghc_lib_subpackage template-haskell 2.5.0.0
+%ghc_lib_subpackage time 1.2.0.3
+%ghc_lib_subpackage unix 2.4.2.0
%endif
-%global ghc_version_override %{version}
+%global version %{ghc_version_override}
+
+%package libraries
+Summary: GHC development libraries meta package
+License: %BSDHaskellReport
+Group: Development/Libraries
+Requires: ghc-compiler = %{version}-%{release}
+Obsoletes: ghc-devel < %{version}-%{release}
+Provides: ghc-devel = %{version}-%{release}
+Obsoletes: ghc-prof < %{version}-%{release}
+Provides: ghc-prof = %{version}-%{release}
+# since f15
+Obsoletes: ghc-libs < 7.0.1-3
+%{?ghc_packages_list:Requires: %(echo %{ghc_packages_list} | sed -e "s/\([^ ]*\)-\([^ ]*\)/ghc-\1-devel = \2-%{release},/g")}
-%ghc_binlib_package ghc %{ghc_version_override}
+%description libraries
+This is a meta-package for all the development library packages in GHC
+except the ghc library, which is installed by the toplevel ghc metapackage.
%prep
-%setup -q -n %{name}-%{version} %{?with_extralibs:-b1} %{?with_testsuite:-b2}
+%setup -q -n %{name}-%{version} %{!?without_testsuite:-b2}
# absolute haddock path (was for html/libraries -> libraries)
%patch1 -p1 -b .orig
+# type-level too big so skip it in gen_contents_index
+%patch2 -p1
+# disable gen_contents_index when not --batch for cron
+%patch3 -p1
# make sure we don't use these
rm -r ghc-tarballs/{mingw,perl}
+# use system libffi
+%patch4 -p1 -b .libffi
+rm -r ghc-tarballs/libffi
+# needed for tier 2 archs
+%ifnarch %{ix86} x86_64
+ln -s $(pkg-config --variable=includedir libffi)/*.h libraries/base/include
+%endif
+
+%patch5 -p1 -b .orig
+
+%patch6 -p1 -b .sparclinking
+
+%ifnarch %{ix86} x86_64
+%patch10 -p1 -b .10-ffi
+%endif
+
+%ifarch ppc ppc64
+%patch7 -p1 -b .pthread
+%patch8 -p1 -b .mmap
+%endif
+
+%ifarch s390x
+%patch9 -p1 -b .s390x
+%endif
%build
+# http://hackage.haskell.org/trac/ghc/wiki/Platforms
+# cf https://github.com/gentoo-haskell/gentoo-haskell/tree/master/dev-lang/ghc
cat > mk/build.mk << EOF
-GhcLibWays = v %{?with_prof:p} %{!?ghc_without_shared:dyn}
-%if %{without doc}
+GhcLibWays = v %{!?ghc_without_shared:dyn} %{!?without_prof:p}
+%if %{defined without_haddock}
HADDOCK_DOCS = NO
%endif
-%if %{without manual}
+%if %{defined without_manual}
BUILD_DOCBOOK_HTML = NO
%endif
-%if %{with quick}
-SRC_HC_OPTS = -H64m -O0 -fasm
-GhcStage1HcOpts = -O -fasm
-GhcStage2HcOpts = -O0 -fasm
-GhcLibHcOpts = -O0 -fasm
-SplitObjs = NO
-%endif
-%if %{without hscolour}
+%if %{undefined without_hscolour}
HSCOLOUR_SRCS = NO
%endif
+%ifarch %{unregisterised_archs}
+GhcUnregisterised=YES
+%endif
+%ifarch ppc64
+GhcNotThreaded=YES
+SRC_HC_OPTS+=-optc-mminimal-toc -optl-pthread
+SRC_CC_OPTS+=-mminimal-toc -pthread -Wa,--noexecstack
+%endif
EOF
+%ifarch ppc64 s390x
+autoreconf
+%endif
export CFLAGS="${CFLAGS:-%optflags}"
+# specify gcc to avoid problems when bootstrapping with ccache
./configure --prefix=%{_prefix} --exec-prefix=%{_exec_prefix} \
--bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} \
--datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} \
--libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} \
--sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} \
- %{!?ghc_without_shared:--enable-shared}
+ --with-gcc=%{_bindir}/gcc
-# 4 cpus or more sometimes breaks build
-[ -z "$RPM_BUILD_NCPUS" ] && RPM_BUILD_NCPUS=$(/usr/bin/getconf _NPROCESSORS_ONLN)
+# >4 cpus tends to break build
+[ -z "$RPM_BUILD_NCPUS" ] && RPM_BUILD_NCPUS=$(%{_bindir}/getconf _NPROCESSORS_ONLN)
[ "$RPM_BUILD_NCPUS" -gt 4 ] && RPM_BUILD_NCPUS=4
make -j$RPM_BUILD_NCPUS
@@ -147,29 +275,38 @@ make -j$RPM_BUILD_NCPUS
rm -rf $RPM_BUILD_ROOT
make DESTDIR=${RPM_BUILD_ROOT} install
-SRC_TOP=$PWD
-( cd $RPM_BUILD_ROOT
- # library directories
- find .%{_libdir}/%{name}-%{version} -maxdepth 1 -type d ! -name 'include' ! -name 'package.conf.d' -fprintf $SRC_TOP/rpm-lib-dir.files "%%%%dir %%p\n"
- # library devel subdirs
- find .%{_libdir}/%{name}-%{version} -mindepth 1 -type d \( -fprintf $SRC_TOP/rpm-dev-dir.files "%%%%dir %%p\n" \)
- # split dyn, devel, conf and prof files
- find .%{_libdir}/%{name}-%{version} -mindepth 1 \( -name 'libHS*-ghc%{version}.so' -fprintf $SRC_TOP/rpm-lib.files "%%%%attr(755,root,root) %%p\n" \) -o \( \( -name '*.p_hi' -o -name '*_p.a' \) -fprint $SRC_TOP/ghc-prof.files \) -o \( \( -name '*.hi' -o -name '*.dyn_hi' -o -name 'libHS*.a' -o -name 'HS*.o' -o -name '*.h' -o -name '*.conf' -o -type f -not -name 'package.cache' \) -fprint $SRC_TOP/rpm-base.files \)
- # manuals (src dir are subdirs so dont duplicate them)
- find .%{_docdir}/%{name}/html/* -type d ! -name libraries ! -name src > $SRC_TOP/rpm-doc-dir.files
-)
-
-# make paths absolute (filter "./usr" to "/usr")
-sed -i -e "s|\.%{_prefix}|%{_prefix}|" *.files
-
-cat rpm-lib-dir.files rpm-lib.files > ghc-libs.files
-cat rpm-dev-dir.files rpm-base.files rpm-doc-dir.files > ghc.files
-
-# subpackage ghc libraries
-sed -i -e "/ghc-%{version}\/ghc-%{version}/d" ghc.files ghc-libs.files ghc-prof.files
-sed -i -e "/ghc-%{version}\/package.conf.d\/ghc-%{version}-.*.conf\$/d" ghc.files
-sed -i -e "/html\/libraries\/ghc-%{version}\$/d" ghc.files
-%ghc_gen_filelists ghc
+for i in %{ghc_packages_list}; do
+name=$(echo $i | sed -e "s/\(.*\)-.*/\1/")
+ver=$(echo $i | sed -e "s/.*-\(.*\)/\1/")
+%ghc_gen_filelists $name $ver
+echo "%doc libraries/$name/LICENSE" >> ghc-$name%{?ghc_without_shared:-devel}.files
+done
+
+%ghc_gen_filelists bin-package-db 0.0.0.0
+%ghc_gen_filelists ghc %{ghc_version_override}
+%ghc_gen_filelists ghc-binary 0.5.0.2
+%ghc_gen_filelists ghc-prim 0.2.0.0
+%ghc_gen_filelists integer-gmp 0.2.0.3
+
+%define merge_filelist()\
+%if %{undefined ghc_without_shared}\
+cat ghc-%1.files >> ghc-%2.files\
+%endif\
+cat ghc-%1-devel.files >> ghc-%2-devel.files\
+cp -p libraries/%1/LICENSE libraries/LICENSE.%1\
+echo "%doc libraries/LICENSE.%1" >> ghc-%2.files
+
+%merge_filelist integer-gmp base
+%merge_filelist ghc-prim base
+%merge_filelist ghc-binary ghc
+%merge_filelist bin-package-db ghc
+
+%if %{undefined ghc_without_shared}
+ls $RPM_BUILD_ROOT%{ghclibdir}/libHS*.so >> ghc-base.files
+sed -i -e "s|^$RPM_BUILD_ROOT||g" ghc-base.files
+%endif
+ls -d $RPM_BUILD_ROOT%{ghclibdir}/libHS*.a $RPM_BUILD_ROOT%{ghclibdir}/package.conf.d/builtin_*.conf $RPM_BUILD_ROOT%{ghclibdir}/include >> ghc-base-devel.files
+sed -i -e "s|^$RPM_BUILD_ROOT||g" ghc-base-devel.files
# these are handled as alternatives
for i in hsc2hs runhaskell; do
@@ -178,10 +315,16 @@ for i in hsc2hs runhaskell; do
else
mv ${RPM_BUILD_ROOT}%{_bindir}/$i{,-ghc}
fi
+ touch ${RPM_BUILD_ROOT}%{_bindir}/$i
done
%ghc_strip_dynlinked
+%if %{undefined without_haddock}
+mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/cron.hourly
+install -p --mode=755 %SOURCE3 ${RPM_BUILD_ROOT}%{_sysconfdir}/cron.hourly/ghc-doc-index
+mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/lib/ghc
+%endif
%check
# stolen from ghc6/debian/rules:
@@ -191,6 +334,8 @@ mkdir testghc
echo 'main = putStrLn "Foo"' > testghc/foo.hs
inplace/bin/ghc-stage2 testghc/foo.hs -o testghc/foo
[ "$(testghc/foo)" = "Foo" ]
+# doesn't seem to work inplace:
+#[ "$(inplace/bin/runghc testghc/foo.hs)" = "Foo" ]
rm testghc/*
echo 'main = putStrLn "Foo"' > testghc/foo.hs
inplace/bin/ghc-stage2 testghc/foo.hs -o testghc/foo -O2
@@ -202,14 +347,14 @@ inplace/bin/ghc-stage2 testghc/foo.hs -o testghc/foo -dynamic
[ "$(testghc/foo)" = "Foo" ]
rm testghc/*
%endif
-%if %{with testsuite}
+%if %{undefined without_testsuite}
make -C testsuite/tests/ghc-regress fast
%endif
%clean
rm -rf $RPM_BUILD_ROOT
-%post
+%post compiler
# Alas, GHC, Hugs, and nhc all come with different set of tools in
# addition to a runFOO:
#
@@ -227,54 +372,129 @@ update-alternatives --install %{_bindir}/runhaskell runhaskell \
update-alternatives --install %{_bindir}/hsc2hs hsc2hs \
%{_bindir}/hsc2hs-ghc 500
-%preun
+%preun compiler
if [ "$1" = 0 ]; then
update-alternatives --remove runhaskell %{_bindir}/runghc
update-alternatives --remove hsc2hs %{_bindir}/hsc2hs-ghc
fi
-%posttrans
-# (posttrans to make sure any old libs and docs have been removed first)
-%ghc_pkg_recache
-%ghc_reindex_haddock
+%files
-%files -f ghc.files
+%files compiler
%defattr(-,root,root,-)
%doc ANNOUNCE HACKING LICENSE README
-%{_bindir}/*
-%dir %{_libdir}/%{name}-%{version}
-%ghost %{_libdir}/%{name}-%{version}/package.conf.d/package.cache
-%if %{with manual}
+%{_bindir}/ghc
+%{_bindir}/ghc-%{version}
+%{_bindir}/ghc-pkg
+%{_bindir}/ghc-pkg-%{version}
+%{_bindir}/ghci
+%{_bindir}/ghci-%{version}
+%{_bindir}/hp2ps
+%{_bindir}/hpc
+%ghost %{_bindir}/hsc2hs
+%{_bindir}/hsc2hs-ghc
+%{_bindir}/runghc
+%ghost %{_bindir}/runhaskell
+%{_bindir}/runhaskell-ghc
+%dir %{ghclibdir}
+%{ghclibdir}/extra-gcc-opts
+%{ghclibdir}/ghc
+%{ghclibdir}/ghc-pkg
+%ifnarch %{unregisterised_archs}
+%{ghclibdir}/ghc-asm
+%{ghclibdir}/ghc-split
+%endif
+%{ghclibdir}/ghc-usage.txt
+%{ghclibdir}/ghci-usage.txt
+%{ghclibdir}/hsc2hs
+%dir %{ghclibdir}/package.conf.d
+%ghost %{ghclibdir}/package.conf.d/package.cache
+%{ghclibdir}/runghc
+%{ghclibdir}/template-hsc.h
+%{ghclibdir}/unlit
%{_mandir}/man1/ghc.*
+%dir %{_docdir}/ghc
+%dir %{ghcdocbasedir}
+%if %{undefined without_haddock}
+%{_bindir}/haddock
+%{_bindir}/haddock-ghc-%{version}
+%{ghclibdir}/haddock
+%{ghclibdir}/html
+%{ghclibdir}/latex
+%{ghcdocbasedir}/html
+%if %{undefined without_manual}
+%{ghcdocbasedir}/Cabal
+%{ghcdocbasedir}/haddock
+%{ghcdocbasedir}/users_guide
%endif
-%if %{with doc}
%dir %{ghcdocbasedir}/libraries
%{ghcdocbasedir}/libraries/frames.html
%{ghcdocbasedir}/libraries/gen_contents_index
%{ghcdocbasedir}/libraries/hscolour.css
+%{ghcdocbasedir}/libraries/ocean.css
%{ghcdocbasedir}/libraries/prologue.txt
%{ghcdocbasedir}/index.html
%ghost %{ghcdocbasedir}/libraries/doc-index*.html
-%ghost %{ghcdocbasedir}/libraries/haddock.css
%ghost %{ghcdocbasedir}/libraries/haddock-util.js
-%ghost %{ghcdocbasedir}/libraries/haskell_icon.gif
%ghost %{ghcdocbasedir}/libraries/index*.html
%ghost %{ghcdocbasedir}/libraries/minus.gif
%ghost %{ghcdocbasedir}/libraries/plus.gif
+%{_sysconfdir}/cron.hourly/ghc-doc-index
+%{_localstatedir}/lib/ghc
%endif
-%if %{undefined ghc_without_shared}
-%files libs -f ghc-libs.files
-%defattr(-,root,root,-)
-%endif
-
-%if %{with prof}
-%files prof -f ghc-prof.files
-%defattr(-,root,root,-)
-%endif
+%files libraries
%changelog
-* Sat Jun 2 2012 Jens Petersen <petersen at redhat.com> - 6.12.3-5.1
+* Wed Dec 25 2013 Jens Petersen <petersen at redhat.com> - 7.0.4-45.1
+- rebase to 7.0.4 bootstrap
+- use ghc_lib_subpackage
+
+- reinstate ghc-powerpc-pthread.patch needed for linking on ppc
+- patch ghc wrapper script to add libffi includedir on tier 2 archs
+- fix build with system libffi on secondary archs by including libffi headers
+ in base/include
+- do alternatives handling correctly (reported by Giam Teck Choon, #753661)
+ see https://fedoraproject.org/wiki/Packaging:Alternatives
+- add HaskellReport license also to the base and libraries subpackages
+- the post and postun scripts are now for the compiler subpackage
+- rename ghc-devel metapackage to ghc-libraries
+- require ghc-rpm-macros-0.14
+- move compiler and tools to ghc-compiler
+- the ghc base package is now a metapackage that installs all of ghc,
+ ie ghc-compiler and ghc-devel (#750317)
+- drop ghc-doc provides
+- add HaskellReport license tag to some of the library subpackages
+ which contain some code from the Haskell Reports
+- setup ghc-deps.sh after ghc_version_override for bootstrapping
+- setup dependency generation with ghc-deps.sh since it was moved to
+ ghc_lib_install in ghc-rpm-macros
+- BR same ghc version unless ghc_bootstrapping defined
+- put dyn before p in GhcLibWays
+- update to 7.0.4 bugfix release
+ http://haskell.org/ghc/docs/7.0.4/html/users_guide/release-7-0-4.html
+- strip static again (upstream #5004 fixed)
+- finally change from ExclusiveArch to ExcludeArch to target more archs
+- merge prof subpackages into the devel subpackages with ghc-rpm-macros-0.13
+- configure with /usr/bin/gcc to help bootstrapping to new archs
+ (otherwise ccache tends to get hardcoded as gcc, which not in koji)
+- make devel and prof meta packages require libs with release
+- make ghc-*-devel subpackages require ghc with release
+- without_shared renamed to ghc_without_shared
+- include LICENSE files in the shared lib subpackages
+- add BRs for various subpackaged ghc libraries needed to build ghc
+- condition rts .so libraries for non-shared builds
+- subpackage all the libraries with ghc-rpm-macros-0.11.1
+- put rts, integer-gmp and ghc-prim in base, and ghc-binary in bin-package-db
+- drop the libs mega-subpackage
+- prof now a meta-package for backward compatibility
+- require libffi-devel
+- turn on system libffi now
+- add a cronjob for doc indexing
+- disable gen_contents_index when not run with --batch for cron
+- use system libffi with ghc-use-system-libffi.patch from debian
+
+* Sat Jun 2 2012 Jens Petersen <petersen at redhat.com> - 6.12.3-5.1.el5
- provide ghc-devel for compatibility with cabal2spec-0.22.5
- use ghc_without_shared (ghc-rpm-macros-0.10.52)
- drop old extralibs bcond
@@ -374,7 +594,7 @@ fi
- add bcond for manual and extralibs
- reenable ppc secondary arch
- don't provide ghc-haddock-*
-- remove obsoltete post requires policycoreutils
+- remove obsolete post requires policycoreutils
- add vanilla v to GhcLibWays when building without prof
- handle without hscolour
- can't smp make currently
diff --git a/sources b/sources
index e7c5106..5c31c12 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-4c2663c2eff833d7b9f39ef770eefbd6 ghc-6.12.3-src.tar.bz2
-5c6143040d043f10e6d014cd5fd8ca36 testsuite-6.12.3.tar.bz2
+f167b0b4538d1a56788f43fcc662b568 ghc-7.0.4-src.tar.bz2
+1680925a557821d7e3abab368f37fbdc testsuite-7.0.4.tar.bz2
diff --git a/update-package.sh b/update-package.sh
new file mode 100755
index 0000000..ef60175
--- /dev/null
+++ b/update-package.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+[ $# -ne 1 ] && echo "Usage: $(basename $0) [package]" && exit 1
+
+set -e -x
+
+PKG=$1
+
+cd ~/fedora/haskell/$PKG/master
+git pull
+
+cat ~/fedora/haskell/cabal2spec/master/cabal2spec-0.22.4.diff | sed -e "s/@PKG@/$PKG/" | patch -p1
+
+rpmdev-bumpspec --comment="update to cabal2spec-0.22.4" $PKG.spec
+
+fedpkg commit -p -m "update to cabal2spec-0.22.4"
More information about the scm-commits
mailing list