[ghc/el6] backport f17 ghc-7.0.4-41.1.fc17 bootstrap build

Jens Petersen petersen at fedoraproject.org
Mon May 7 14:48:40 UTC 2012


commit fc816fcc57402938cfd79134c2cffb4c08f3ba20
Author: Jens Petersen <petersen at redhat.com>
Date:   Mon May 7 23:48:16 2012 +0900

    backport f17 ghc-7.0.4-41.1.fc17 bootstrap build

 .gitignore                              |    5 +
 Cabal-option-executable-dynamic.patch   |  145 +++++++
 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-ppc64-pthread.patch                 |   18 +
 ghc-use-system-libffi.patch             |  120 ++++++
 ghc.spec                                |  638 ++++++++++++++++++++++++-------
 sources                                 |    4 +-
 update-package.sh                       |   16 +
 12 files changed, 921 insertions(+), 145 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 4a3c164..7ae39ec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,7 @@
 ghc-6.12.3-src.tar.bz2
 testsuite-6.12.3.tar.bz2
+/ghc-7.0.1-src.tar.bz2
+/testsuite-7.0.1.tar.bz2
+/ghc-7.0.2-src.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-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-ppc64-pthread.patch b/ghc-ppc64-pthread.patch
new file mode 100644
index 0000000..d317ff7
--- /dev/null
+++ b/ghc-ppc64-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.2/ghc/ghc.wrapper.pthread ghc-7.0.2/ghc/ghc.wrapper
+--- ghc-7.0.2/ghc/ghc.wrapper.pthread	2011-04-20 09:58:50.307894773 -0400
++++ ghc-7.0.2/ghc/ghc.wrapper	2011-04-20 09:59:14.477894370 -0400
+@@ -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" -optl-pthread ${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.spec b/ghc.spec
index fa87e08..2d5bdbf 100644
--- a/ghc.spec
+++ b/ghc.spec
@@ -1,173 +1,286 @@
-# 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_without 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
+
+# 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
 
 # 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: 6%{?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: 41.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 s390x
+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/
-# introduced for f14
-Obsoletes: ghc-doc < 6.12.3-4
-Provides: ghc-doc = %{version}-%{release}
-# introduced for f11
-Obsoletes: haddock < 2.4.2-3, ghc-haddock-devel < 2.4.2-3
-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
-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}
+Obsoletes: ghc-dph-base < 0.5, ghc-dph-base-devel < 0.5, ghc-dph-base-prof < 0.5
+Obsoletes: ghc-dph-par < 0.5, ghc-dph-par-devel < 0.5, ghc-dph-par-prof < 0.5
+Obsoletes: ghc-dph-prim-interface < 0.5, ghc-dph-prim-interface-devel < 0.5, ghc-dph-interface-prim-prof < 0.5
+Obsoletes: ghc-dph-prim-par < 0.5, ghc-dph-prim-par-devel < 0.5, ghc-dph-prim-par-prof < 0.5
+Obsoletes: ghc-dph-prim-seq < 0.5, ghc-dph-prim-seq-devel < 0.5, ghc-dph-prim-seq-prof < 0.5
+Obsoletes: ghc-dph-seq < 0.5, ghc-dph-seq-devel < 0.5, ghc-dph-seq-prof < 0.5
+Obsoletes: ghc-feldspar-language < 0.4, ghc-feldspar-language-devel < 0.4, ghc-feldspar-language-prof < 0.4
+# change to ghc-compiler once backported to el6
+BuildRequires: ghc %{!?ghc_bootstrapping: = %{version}}
+BuildRequires: ghc-rpm-macros >= 0.14
+BuildRequires: gmp-devel, libffi-devel
+#BuildRequires: ghc-directory-devel, ghc-process-devel, ghc-pretty-devel, ghc-containers-devel, ghc-haskell98-devel, ghc-bytestring-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
+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-ppc64-pthread.patch
+# http://hackage.haskell.org/trac/ghc/ticket/4999
+Patch8: ghc-powerpc-linker-mmap.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 %{_rpmconfigdir}/ghc-deps.sh --provides %{buildroot}%{ghclibdir}
+%global __find_requires %{_rpmconfigdir}/ghc-deps.sh --requires %{buildroot}%{ghclibdir}
+
+
+%global ghc_pkg_c_deps ghc-compiler = %{ghc_version_override}-%{release}
+
+%if %{defined ghclibdir}
+%ghc_binlib_package Cabal 1.10.2.0
+%ghc_binlib_package -l %BSDHaskellReport array 0.3.0.2
+%ghc_binlib_package -l %BSDHaskellReport -c gmp-devel,libffi-devel base 4.3.1.0
+%ghc_binlib_package bytestring 0.9.1.10
+%ghc_binlib_package -l %BSDHaskellReport containers 0.4.0.0
+%ghc_binlib_package -l %BSDHaskellReport directory 1.1.0.0
+%ghc_binlib_package -l %BSDHaskellReport extensible-exceptions 0.1.1.2
+%ghc_binlib_package 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_binlib_package -x ghc %{ghc_version_override}
+%undefine ghc_pkg_obsoletes
+%ghc_binlib_package -l HaskellReport haskell2010 1.0.0.0
+%ghc_binlib_package -l HaskellReport haskell98 1.1.0.1
+%ghc_binlib_package hpc 0.5.0.6
+%ghc_binlib_package -l %BSDHaskellReport old-locale 1.0.0.2
+%ghc_binlib_package -l %BSDHaskellReport old-time 1.0.0.6
+%ghc_binlib_package pretty 1.0.1.2
+%ghc_binlib_package -l %BSDHaskellReport process 1.0.1.5
+%ghc_binlib_package -l %BSDHaskellReport random 1.0.0.3
+%ghc_binlib_package template-haskell 2.5.0.0
+%ghc_binlib_package time 1.2.0.3
+%ghc_binlib_package unix 2.4.2.0
 %endif
 
-%global ghc_version_override %{version}
+%global version %{ghc_version_override}
 
-%ghc_binlib_package ghc %{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")}
+
+%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
+ln -s $(pkg-config --variable=includedir libffi)/*.h libraries/base/include
+
+%patch5 -p1 -b .orig
+
+%patch6 -p1 -b .sparclinking
+
+%ifarch ppc64
+%patch7 -p1 -b .pthread
+%endif
+
+%ifarch ppc ppc64
+%patch8 -p1 -b .mmap
+%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
+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
 
 %install
 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
@@ -176,10 +289,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:
@@ -189,6 +308,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
@@ -200,11 +321,11 @@ 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
 
-%post
+%post compiler
 # Alas, GHC, Hugs, and nhc all come with different set of tools in
 # addition to a runFOO:
 #
@@ -222,59 +343,290 @@ 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
-%defattr(-,root,root,-)
+%files compiler
 %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
-* Mon Apr 25 2011 Jens Petersen <petersen at redhat.com> - 6.12.3-6
-- provide ghc-devel for compatibility with cabal2spec-0.22.5
-- use ghc_without_shared (ghc-rpm-macros-0.10.52)
-- drop buildroot and buildroot cleaning
+* Thu Feb  9 2012 Jens Petersen <petersen at redhat.com> - 7.0.4-41.1
+- bootstrap build
+- fix build with system libffi on secondary archs by including libffi headers
+  in base/include
+
+* Thu Jan 19 2012 Jens Petersen <petersen at redhat.com>
+- move ghc-ghc-devel from ghc-libraries to the ghc metapackage
+
+* Fri Jan 13 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 7.0.4-41
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Mon Nov 14 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-40
+- do alternatives handling correctly (reported by Giam Teck Choon, #753661)
+  see https://fedoraproject.org/wiki/Packaging:Alternatives
+
+* Sat Nov 12 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-39
+- move ghc-doc and ghc-libs obsoletes
+- add HaskellReport license also to the base and libraries subpackages
+
+* Thu Nov 10 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-38
+- the post and postun scripts are now for the compiler subpackage
+
+* Wed Nov  2 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-37
+- rename ghc-devel metapackage to ghc-libraries
+- require ghc-rpm-macros-0.14
+
+* Tue Nov  1 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-36
+- 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
+
+* Fri Oct 28 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-35.1
+- rebuild against new gmp
+
+* Fri Oct 28 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-35
+- add HaskellReport license tag to some of the library subpackages
+  which contain some code from the Haskell Reports
+
+* Thu Oct 20 2011 Marcela Mašláňová <mmaslano at redhat.com> - 7.0.4-34.1
+- rebuild with new gmp without compat lib
+
+* Thu Oct 20 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-34
+- setup ghc-deps.sh after ghc_version_override for bootstrapping
+
+* Tue Oct 18 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-33
+- add armv5tel (ported by Henrik Nordström)
+- also use ghc-deps.sh when bootstrapping (ghc-rpm-macros-0.13.13)
+
+* Mon Oct 17 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-32
+- remove libffi_archs: not allowed to bundle libffi on any arch
+- include the ghc (ghci) library in ghc-devel (Narasim)
+
+* Tue Oct 11 2011 Peter Schiffer <pschiffe at redhat.com> - 7.0.4-31.1
+- rebuild with new gmp
+
+* Fri Sep 30 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-31
+- build with ghc-rpm-macros >= 0.13.11 to fix provides and obsoletes versions
+  in library devel subpackages
+
+* Thu Sep 29 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-30
+- no need to specify -lffi in build.mk (Henrik Nordström)
+
+* Wed Sep 28 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-29
+- port to armv7hl by Henrik Nordström (#741725)
+
+* Wed Sep 14 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-28
+- setup ghc-deps.sh when not bootstrapping!
+
+* Wed Sep 14 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-27
+- setup dependency generation with ghc-deps.sh since it was moved to
+  ghc_lib_install in ghc-rpm-macros
+
+* Fri Jun 17 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-26
+- BR same ghc version unless ghc_bootstrapping defined
+- add libffi_archs
+- drop the quick build profile
+- put dyn before p in GhcLibWays
+- explain new bootstrapping mode using ghc_bootstrap (ghc-rpm-macros-0.13.5)
+
+* Thu Jun 16 2011 Jens Petersen <petersen at redhat.com> - 7.0.4-25
+- 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)
+- Cabal updated to 1.10.2.0
+- re-enable testsuite
+- update summary and description
+
+* Tue Jun 14 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-24
+- finally change from ExclusiveArch to ExcludeArch to target more archs
+
+* Sat May 21 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-23
+- obsolete dph libraries and feldspar-language
+
+* Mon May 16 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-22
+- merge prof subpackages into the devel subpackages with ghc-rpm-macros-0.13
+
+* Wed May 11 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-21
+- configure with /usr/bin/gcc to help bootstrapping to new archs
+  (otherwise ccache tends to get hardcoded as gcc, which not in koji)
+- posttrans scriplet for ghc_pkg_recache is redundant
+
+* Mon May  9 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-20
+- make devel and prof meta packages require libs with release
+- make ghc-*-devel subpackages require ghc with release
+
+* Wed May 04 2011 Jiri Skala <jskala at redhat.com> - 7.0.2-19.1
+- fixes path to gcc on ppc64 arch
+
+* Tue Apr 26 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-19
+- add upstream ghc-powerpc-linker-mmap.patch for ppc64 (Jiri Skala)
+
+* Thu Apr 21 2011 Jiri Skala <jskala at redhat.com> - 7.0.2-18
+- bootstrap to ppc64
+
+* Fri Apr  1 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-17
+- rebuild against ghc-rpm-macros-0.11.14 to provide ghc-*-doc
+
+* Fri Apr  1 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-16
+- provides ghc-doc again: it is still a buildrequires for libraries
+- ghc-prof now requires ghc-devel
+- ghc-devel now requires ghc explicitly
+
+* Wed Mar 30 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-15
+- do not strip static libs since it breaks ghci-7.0.2 loading libHSghc.a
+  (see http://hackage.haskell.org/trac/ghc/ticket/5004)
+- no longer provide ghc-doc
+- no longer obsolete old haddock
+
+* Tue Mar 29 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-14
+- fix back missing LICENSE files in library subpackages
+- drop ghc_reindex_haddock from install script
+
+* Thu Mar 10 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-13
+- rebuild against 7.0.2
+
+* Wed Mar  9 2011 Jens Petersen <petersen at redhat.com> - 7.0.2-12
+- update to 7.0.2 release
+- move bin-package-db into ghc-ghc
+- disable broken testsuite
+
+* Wed Feb 23 2011 Fabio M. Di Nitto <fdinitto at redhat.com> 7.0.1-11
+- enable build on sparcv9
+- add ghc-fix-linking-on-sparc.patch to fix ld being called
+  at the same time with --relax and -r. The two options conflict
+  on sparc.
+- bump BuildRequires on ghc-rpm-macros to >= 0.11.10 that guarantees
+  a correct build on secondary architectures.
+
+* Sun Feb 13 2011 Jens Petersen <petersen at redhat.com>
+- without_shared renamed to ghc_without_shared
+
+* Thu Feb 10 2011 Jens Petersen <petersen at redhat.com> - 7.0.1-10
+- rebuild
+
+* Thu Feb 10 2011 Jens Petersen <petersen at redhat.com> - 7.0.1-9
+- fix without_shared build (thanks Adrian Reber)
+- disable system libffi for secondary archs
+- temporarily disable ghc-*-devel BRs for ppc
+
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 7.0.1-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Jan 31 2011 Jens Petersen <petersen at redhat.com> - 7.0.1-7
+- include LICENSE files in the shared lib subpackages
+
+* Sat Jan 22 2011 Jens Petersen <petersen at redhat.com> - 7.0.1-6
+- patch Cabal to add configure option --enable-executable-dynamic
+- exclude huge ghc API library from devel and prof metapackages
+
+* Thu Jan 13 2011 Jens Petersen <petersen at redhat.com> - 7.0.1-5
+- fix no doc and no manual builds
+
+* Thu Jan 13 2011 Jens Petersen <petersen at redhat.com> - 7.0.1-4
+- add BRs for various subpackaged ghc libraries needed to build ghc
+- condition rts .so libraries for non-shared builds
+
+* Thu Dec 30 2010 Jens Petersen <petersen at redhat.com> - 7.0.1-3
+- 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
+- add devel meta-subpackage to easily install all ghc libraries
+- store doc cronjob package cache file under /var (#664850)
 - drop old extralibs bcond
 - no longer need to define or clean buildroot
+- ghc base package now requires ghc-base-devel
+- drop ghc-time obsoletes
+
+* Wed Nov 24 2010 Jens Petersen <petersen at redhat.com> - 7.0.1-2
+- require libffi-devel
+
+* Tue Nov 16 2010 Jens Petersen <petersen at redhat.com> - 7.0.1-1
+- update to 7.0.1 release
+- turn on system libffi now
+
+* Mon Nov  8 2010 Jens Petersen <petersen at redhat.com> - 6.12.3-9
+- disable the libffi changes for now since they break libHSffi*.so
+
+* Thu Nov  4 2010 Jens Petersen <petersen at redhat.com> - 6.12.3-8
+- 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
+- add bcond for system libffi
+
+* Thu Nov  4 2010 Jens Petersen <petersen at redhat.com> - 6.12.3-7
+- skip huge type-level docs from haddock re-indexing (#649228)
+
+* Thu Sep 30 2010 Jens Petersen <petersen at redhat.com> - 6.12.3-6
+- move gtk2hs obsoletes to ghc-glib and ghc-gtk
+- drop happy buildrequires
 - smp build with max 4 cpus
 
 * Wed Sep 29 2010 Jens Petersen <petersen at redhat.com> - 6.12.3-5.el6
@@ -371,7 +723,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