diff options
author | Jakub Jirutka <jakub@jirutka.cz> | 2017-05-14 12:26:57 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2017-05-17 13:50:14 +0000 |
commit | 3b5707d385eecf499b59ce4e41763a4f2dc20595 (patch) | |
tree | 58ec7e4c3df19043c1c0cd5f044df2b2ee090876 /community/ghc | |
parent | 0c605083d9c3944e36c12e796ee27f8f217d1524 (diff) | |
download | aports-3b5707d385eecf499b59ce4e41763a4f2dc20595.tar.bz2 aports-3b5707d385eecf499b59ce4e41763a4f2dc20595.tar.xz |
community/ghc: move from testing
Diffstat (limited to 'community/ghc')
-rw-r--r-- | community/ghc/0000-alpine.patch | 11 | ||||
-rw-r--r-- | community/ghc/0000-bootstrap.patch | 16 | ||||
-rw-r--r-- | community/ghc/0001-rm-ghc-pwd.patch | 184 | ||||
-rw-r--r-- | community/ghc/0002-Correct-issue-with-libffi-and-glibc.patch | 28 | ||||
-rw-r--r-- | community/ghc/0003-do-not-use-SHELL.patch | 71 | ||||
-rw-r--r-- | community/ghc/0004-reproducible-tmp-names.patch | 43 | ||||
-rw-r--r-- | community/ghc/0005-buildpath-abi-stability.patch | 25 | ||||
-rw-r--r-- | community/ghc/0006-fix-madvise.patch | 63 | ||||
-rw-r--r-- | community/ghc/0007-build-hp2ps-twice.patch | 25 | ||||
-rw-r--r-- | community/ghc/0008-build-unlit-twice.patch | 58 | ||||
-rw-r--r-- | community/ghc/APKBUILD | 201 | ||||
-rw-r--r-- | community/ghc/ghc.post-install | 5 |
12 files changed, 730 insertions, 0 deletions
diff --git a/community/ghc/0000-alpine.patch b/community/ghc/0000-alpine.patch new file mode 100644 index 0000000000..0487096862 --- /dev/null +++ b/community/ghc/0000-alpine.patch @@ -0,0 +1,11 @@ +--- ghc-8.0.2/aclocal.m4.orig 2017-02-17 12:00:45.179765870 +0000 ++++ ghc-8.0.2/aclocal.m4 2017-02-17 12:00:56.033299769 +0000 +@@ -227,7 +227,7 @@ + + checkVendor() { + case [$]1 in +- dec|unknown|hp|apple|next|sun|sgi|ibm|montavista|portbld) ++ dec|unknown|hp|apple|next|sun|sgi|ibm|montavista|portbld|alpine) + ;; + *) + echo "Unknown vendor [$]1" diff --git a/community/ghc/0000-bootstrap.patch b/community/ghc/0000-bootstrap.patch new file mode 100644 index 0000000000..95a3f5de4f --- /dev/null +++ b/community/ghc/0000-bootstrap.patch @@ -0,0 +1,16 @@ +diff --git a/ghc.mk b/ghc.mk +index 5e4ecc6..a07ff73 100644 +--- a/ghc.mk ++++ b/ghc.mk +@@ -968,8 +968,8 @@ INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf.d + # Install packages in the right order, so that ghc-pkg doesn't complain. + # Also, install ghc-pkg first. + ifeq "$(Windows_Host)" "NO" +-INSTALLED_GHC_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc +-INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc-pkg ++INSTALLED_GHC_REAL=$(CURDIR)/inplace/bin/ghc-stage1 ++INSTALLED_GHC_PKG_REAL=$(CURDIR)/utils/ghc-pkg/dist/build/tmp/ghc-pkg + else + INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe + INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe + diff --git a/community/ghc/0001-rm-ghc-pwd.patch b/community/ghc/0001-rm-ghc-pwd.patch new file mode 100644 index 0000000000..cf4417547b --- /dev/null +++ b/community/ghc/0001-rm-ghc-pwd.patch @@ -0,0 +1,184 @@ +commit 4c56ad36ee0d1f8b6f1b2bc0d8fff1c9acd1a389 +Author: Thomas Miedema <thomasmiedema@gmail.com> +Date: Mon Jan 4 18:29:49 2016 +0100 + + Build system: delete ghc-pwd + + On Windows, with msys2, `pwd` works (as can be seen by the use of `pwd` + that slipped into the validate script), so there is really no need for + `ghc-pwd` anymore. + + Test Plan: try it + + Reviewers: austin, bgamari, Phyx + + Reviewed By: Phyx + + Subscribers: Phyx, erikd + + Differential Revision: https://phabricator.haskell.org/D1731 + +diff --git a/aclocal.m4 b/aclocal.m4 +index 8e97726..0c93de4 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -1737,33 +1737,9 @@ AC_DEFUN([FP_CURSES], + # Calculate absolute path to build tree + # -------------------------------------------------------------- + +-AC_DEFUN([FP_INTREE_GHC_PWD],[ +-AC_MSG_NOTICE(Building in-tree ghc-pwd) +- dnl This would be +- dnl make -C utils/ghc-pwd clean && make -C utils/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 +- dnl If special linker flags are needed to build things, then allow +- dnl the user to pass them in via LDFLAGS. +- changequote(, )dnl +- GHC_LDFLAGS=`perl -e 'foreach (@ARGV) { print "-optl$_ " }' -- $LDFLAGS` +- changequote([, ])dnl +- if ! "$WithGhc" $GHC_LDFLAGS -v0 -no-user-$GHC_PACKAGE_DB_FLAG -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 +- +- GHC_PWD=utils/ghc-pwd/dist-boot/ghc-pwd +-]) +- +-AC_DEFUN([FP_BINDIST_GHC_PWD],[ +- GHC_PWD=utils/ghc-pwd/dist-install/build/tmp/ghc-pwd-bindist +-]) +- + AC_DEFUN([FP_FIND_ROOT],[ + AC_MSG_CHECKING(for path to top of build tree) +- hardtop=`$GHC_PWD` ++ hardtop=`pwd` + + dnl Remove common automounter nonsense + hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'` +diff --git a/configure.ac b/configure.ac +index 042b417..ab82bb0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -26,6 +26,8 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [8.1], [glasgow-haske + # checkout), then we ship a file 'VERSION' containing the full version + # when the source distribution was created. + ++FP_FIND_ROOT ++ + if test ! -f mk/config.h.in; then + echo "mk/config.h.in doesn't exist: perhaps you haven't run 'perl boot'?" + exit 1 +@@ -258,10 +260,6 @@ AC_ARG_WITH(hc, + ) + AC_SUBST(WithHc) + +-# This uses GHC, so put it after the "GHC is required" check above: +-FP_INTREE_GHC_PWD +-FP_FIND_ROOT +- + fail() { + echo >&2 + echo "$1" >&2 +diff --git a/distrib/configure.ac.in b/distrib/configure.ac.in +index 0f68a52..4d57cd8 100644 +--- a/distrib/configure.ac.in ++++ b/distrib/configure.ac.in +@@ -6,7 +6,6 @@ dnl + + AC_INIT([The Glorious Glasgow Haskell Compilation System], [@ProjectVersion@], [glasgow-haskell-bugs@haskell.org], [ghc]) + +-FP_BINDIST_GHC_PWD + FP_FIND_ROOT + + dnl-------------------------------------------------------------------- +diff --git a/ghc.mk b/ghc.mk +index ba708a1..3ccc496 100644 +--- a/ghc.mk ++++ b/ghc.mk +@@ -516,7 +516,6 @@ $(foreach pkg,$(PACKAGES_STAGE1),$(eval $(call fixed_pkg_dep,$(pkg),dist-install + # the stage1 packages, so we have to make sure those packages get configured + # and registered before we can start with these. Note that they don't depend on + # eachother, so we can configure them in parallel. +-utils/ghc-pwd/dist-install/package-data.mk: $(fixed_pkg_prev) + utils/ghc-cabal/dist-install/package-data.mk: $(fixed_pkg_prev) + utils/hpc/dist-install/package-data.mk: $(fixed_pkg_prev) + utils/ghc-pkg/dist-install/package-data.mk: $(fixed_pkg_prev) +@@ -660,7 +659,6 @@ BUILD_DIRS += utils/testremove + BUILD_DIRS += utils/ghctags + BUILD_DIRS += utils/check-api-annotations + BUILD_DIRS += utils/dll-split +-BUILD_DIRS += utils/ghc-pwd + BUILD_DIRS += utils/ghc-cabal + BUILD_DIRS += utils/hpc + BUILD_DIRS += utils/runghc +@@ -1020,7 +1018,6 @@ $(eval $(call bindist-list,.,\ + mk/config.mk.in \ + $(INPLACE_BIN)/mkdirhier \ + utils/ghc-cabal/dist-install/build/tmp/ghc-cabal \ +- utils/ghc-pwd/dist-install/build/tmp/ghc-pwd \ + $(BINDIST_WRAPPERS) \ + $(BINDIST_PERL_SOURCES) \ + $(BINDIST_LIBS) \ +@@ -1366,9 +1363,6 @@ distclean : clean + # Internal files generated by ./configure for itself. + $(call removeFiles,config.cache config.status config.log) + +-# ./configure build ghc-pwd in utils/ghc-pwd/dist-boot, so clean it up. +- $(call removeTrees,utils/ghc-pwd/dist-boot) +- + # The root Makefile makes .old versions of some files that configure + # generates, so we clean those too. + $(call removeFiles,mk/config.mk.old) +diff --git a/utils/ghc-pwd/Main.hs b/utils/ghc-pwd/Main.hs +deleted file mode 100644 +index 91a5606..0000000 +--- a/utils/ghc-pwd/Main.hs ++++ /dev/null +@@ -1,22 +0,0 @@ +- +-module Main where +- +-import System.Directory +-import System.Environment +-import System.Exit +-import System.IO +- +-main :: IO () +-main = do +- args <- getArgs +- case args of +- [] -> do d <- getCurrentDirectory +- putStr $ map forwardifySlashes d +- _ -> do hPutStrLn stderr ("Bad args: " ++ show args) +- hPutStrLn stderr "Usage: ghc-pwd" +- exitFailure +- +-forwardifySlashes :: Char -> Char +-forwardifySlashes '\\' = '/' +-forwardifySlashes c = c +- +diff --git a/utils/ghc-pwd/Setup.hs b/utils/ghc-pwd/Setup.hs +deleted file mode 100644 +index 9a994af..0000000 +--- a/utils/ghc-pwd/Setup.hs ++++ /dev/null +@@ -1,2 +0,0 @@ +-import Distribution.Simple +-main = defaultMain +diff --git a/utils/ghc-pwd/ghc.mk b/utils/ghc-pwd/ghc.mk +deleted file mode 100644 +index ac6bc76..0000000 +--- a/utils/ghc-pwd/ghc.mk ++++ /dev/null +@@ -1,9 +0,0 @@ +- +-utils/ghc-pwd_USES_CABAL = YES +-utils/ghc-pwd_PACKAGE = ghc-pwd +-utils/ghc-pwd_dist-install_INSTALL_INPLACE = YES +-utils/ghc-pwd_dist-install_WANT_BINDIST_WRAPPER = YES +-utils/ghc-pwd_dist-install_PROGNAME = ghc-pwd +- +-$(eval $(call build-prog,utils/ghc-pwd,dist-install,1)) +- diff --git a/community/ghc/0002-Correct-issue-with-libffi-and-glibc.patch b/community/ghc/0002-Correct-issue-with-libffi-and-glibc.patch new file mode 100644 index 0000000000..87420f9928 --- /dev/null +++ b/community/ghc/0002-Correct-issue-with-libffi-and-glibc.patch @@ -0,0 +1,28 @@ +From 843bd68ea83ba011d593ad7162d1df89c230004b Mon Sep 17 00:00:00 2001 +From: Mitch Tishmack <mitch.tishmack@gmail.com> +Date: Sat, 15 Oct 2016 21:53:13 -0500 +Subject: [PATCH 1/1] Correct issue with libffi and glibc + +Ref: https://github.com/mitchty/alpine-linux-ghc-bootstrap/issues/16 + +Shamelessly learnt from here +https://github.com/nilcons/ghc-musl/blob/master/ghc-musl/Dockerfile#L24 +--- + libffi/ghc.mk | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libffi/ghc.mk b/libffi/ghc.mk +index 404cce9..2034873 100644 +--- a/libffi/ghc.mk ++++ b/libffi/ghc.mk +@@ -61,6 +61,7 @@ $(libffi_STAMP_CONFIGURE): $(TOUCH_DEP) + # We have to fake a non-working ln for configure, so that the fallback + # option (cp -p) gets used instead. Otherwise the libffi build system + # will use cygwin symbolic links which cannot be read by mingw gcc. ++ sed -i s/__gnu_linux__/1/ libffi/build/src/closures.c + chmod +x libffi/ln + + # We need to use -MMD rather than -MD, as otherwise we get paths +-- +2.9.0 + diff --git a/community/ghc/0003-do-not-use-SHELL.patch b/community/ghc/0003-do-not-use-SHELL.patch new file mode 100644 index 0000000000..540efa92b1 --- /dev/null +++ b/community/ghc/0003-do-not-use-SHELL.patch @@ -0,0 +1,71 @@ +Description: Do not use $SHELL + as $SHELL is the user's preferred interactive shell. We do not want this to + leak into the wrapper scripts. +Author: Joachim Breitner <nomeata@debian.org> + +Index: ghc/driver/ghci/ghc.mk +=================================================================== +--- ghc.orig/driver/ghci/ghc.mk 2016-07-07 12:40:40.690866042 +0200 ++++ ghc/driver/ghci/ghc.mk 2016-07-07 12:40:40.686863966 +0200 +@@ -21,7 +21,7 @@ + $(INSTALL_DIR) "$(DESTDIR)$(bindir)" + $(call removeFiles, "$(WRAPPER)") + $(CREATE_SCRIPT) "$(WRAPPER)" +- echo '#!$(SHELL)' >> "$(WRAPPER)" ++ echo '#!/bin/sh' >> "$(WRAPPER)" + echo 'exec "$(bindir)/ghc-$(ProjectVersion)" --interactive "$$@"' >> "$(WRAPPER)" + $(EXECUTABLE_FILE) "$(WRAPPER)" + $(call removeFiles,"$(DESTDIR)$(bindir)/ghci") +@@ -56,7 +56,7 @@ + install_driver_ghcii: + $(INSTALL_DIR) "$(DESTDIR)$(bindir)" + $(call removeFiles,"$(GHCII_SCRIPT)") +- echo "#!$(SHELL)" >> $(GHCII_SCRIPT) ++ echo "#!/bin/sh" >> $(GHCII_SCRIPT) + echo 'exec "$$(dirname "$$0")"/ghc --interactive "$$@"' >> $(GHCII_SCRIPT) + $(EXECUTABLE_FILE) $(GHCII_SCRIPT) + cp $(GHCII_SCRIPT) $(GHCII_SCRIPT_VERSIONED) +Index: ghc/rules/shell-wrapper.mk +=================================================================== +--- ghc.orig/rules/shell-wrapper.mk 2016-07-07 12:40:40.690866042 +0200 ++++ ghc/rules/shell-wrapper.mk 2016-07-07 12:40:40.686863966 +0200 +@@ -41,7 +41,7 @@ + endif + $$($1_$2_INPLACE_WRAPPER): $$($1_$2_INPLACE) + $$(call removeFiles, $$@) +- echo '#!$$(SHELL)' >> $$@ ++ echo '#!/bin/sh' >> $$@ + echo 'executablename="$$(TOP)/$$<"' >> $$@ + echo 'datadir="$$(TOP)/$$(INPLACE_LIB)"' >> $$@ + echo 'bindir="$$(TOP)/$$(INPLACE_BIN)"' >> $$@ +@@ -80,7 +80,7 @@ + $$(INSTALL_DIR) "$$(DESTDIR)$$(bindir)" + $$(call removeFiles, "$$(WRAPPER)") + $$(CREATE_SCRIPT) "$$(WRAPPER)" +- echo '#!$$(SHELL)' >> "$$(WRAPPER)" ++ echo '#!/bin/sh' >> "$$(WRAPPER)" + echo 'exedir="$$(ghclibexecdir)/bin"' >> "$$(WRAPPER)" + echo 'exeprog="$$($1_$2_PROG)"' >> "$$(WRAPPER)" + echo 'executablename="$$$$exedir/$$$$exeprog"' >> "$$(WRAPPER)" +@@ -106,7 +106,7 @@ + + $$($1_$2_BINDIST_WRAPPER): $1/$2/build/tmp/$$($1_$2_PROG) + $$(call removeFiles, $$@) +- echo '#!$$(SHELL)' >> $$@ ++ echo '#!/bin/sh' >> $$@ + ifeq "$$(DYNAMIC_GHC_PROGRAMS)" "YES" + echo '$$(call prependLibraryPath,$$($1_$2_DEP_LIB_REL_DIRS_SEARCHPATH))' >> $$@ + endif +Index: ghc/utils/mkdirhier/ghc.mk +=================================================================== +--- ghc.orig/utils/mkdirhier/ghc.mk 2016-07-07 12:40:40.690866042 +0200 ++++ ghc/utils/mkdirhier/ghc.mk 2016-07-07 12:40:40.686863966 +0200 +@@ -14,7 +14,7 @@ + mkdir -p $(INPLACE_BIN) + mkdir -p $(INPLACE_LIB) + $(call removeFiles,$@) +- echo '#!$(SHELL)' >> $@ ++ echo '#!/bin/sh' >> $@ + cat utils/mkdirhier/mkdirhier.sh >> $@ + $(EXECUTABLE_FILE) $@ + diff --git a/community/ghc/0004-reproducible-tmp-names.patch b/community/ghc/0004-reproducible-tmp-names.patch new file mode 100644 index 0000000000..a0417f145d --- /dev/null +++ b/community/ghc/0004-reproducible-tmp-names.patch @@ -0,0 +1,43 @@ +This is an attempt to make GHC build reproducible. The name of .c files may end +up in the resulting binary (in the debug section), but not the directory. + +Instead of using the process id, create a hash from the command line arguments, +and assume that is going to be unique. + +Index: ghc/compiler/main/SysTools.hs +=================================================================== +--- ghc.orig/compiler/main/SysTools.hs 2016-04-23 17:57:12.812255430 +0200 ++++ ghc/compiler/main/SysTools.hs 2016-04-23 17:57:12.808255337 +0200 +@@ -65,6 +65,7 @@ + import Util + import DynFlags + import Exception ++import Fingerprint + + import LlvmCodeGen.Base (llvmVersionStr, supportedLlvmVersion) + +@@ -1158,8 +1159,8 @@ + mapping <- readIORef dir_ref + case Map.lookup tmp_dir mapping of + Nothing -> do +- pid <- getProcessID +- let prefix = tmp_dir </> "ghc" ++ show pid ++ "_" ++ pid <- getStableProcessID ++ let prefix = tmp_dir </> "ghc" ++ pid ++ "_" + mask_ $ mkTempDir prefix + Just dir -> return dir + where +@@ -1575,6 +1576,13 @@ + getProcessID = System.Posix.Internals.c_getpid >>= return . fromIntegral + #endif + ++-- Debian-specific hack to get reproducible output, by not using the "random" ++-- pid, but rather something determinisic ++getStableProcessID :: IO String ++getStableProcessID = do ++ args <- getArgs ++ return $ take 4 $ show $ fingerprintString $ unwords args ++ + -- Divvy up text stream into lines, taking platform dependent + -- line termination into account. + linesPlatform :: String -> [String] diff --git a/community/ghc/0005-buildpath-abi-stability.patch b/community/ghc/0005-buildpath-abi-stability.patch new file mode 100644 index 0000000000..8add0fcd1c --- /dev/null +++ b/community/ghc/0005-buildpath-abi-stability.patch @@ -0,0 +1,25 @@ +Forwarded to https://ghc.haskell.org/trac/ghc/ticket/10424 + +Index: ghc/compiler/iface/MkIface.hs +=================================================================== +--- ghc.orig/compiler/iface/MkIface.hs 2016-04-19 09:26:40.075170754 +0200 ++++ ghc/compiler/iface/MkIface.hs 2016-04-19 09:26:40.071170684 +0200 +@@ -556,7 +556,7 @@ + iface_hash <- computeFingerprint putNameLiterally + (mod_hash, + ann_fn (mkVarOcc "module"), -- See mkIfaceAnnCache +- mi_usages iface0, ++ usages, + sorted_deps, + mi_hpc iface0) + +@@ -589,6 +589,9 @@ + (non_orph_fis, orph_fis) = mkOrphMap ifFamInstOrph (mi_fam_insts iface0) + fix_fn = mi_fix_fn iface0 + ann_fn = mkIfaceAnnCache (mi_anns iface0) ++ -- Do not allow filenames to affect the interface ++ usages = [ case u of UsageFile _ fp -> UsageFile "" fp; _ -> u | u <- mi_usages iface0 ] ++ + + getOrphanHashes :: HscEnv -> [Module] -> IO [Fingerprint] + getOrphanHashes hsc_env mods = do diff --git a/community/ghc/0006-fix-madvise.patch b/community/ghc/0006-fix-madvise.patch new file mode 100644 index 0000000000..0672001722 --- /dev/null +++ b/community/ghc/0006-fix-madvise.patch @@ -0,0 +1,63 @@ +From 6576bf83cdf4eac05eb88a24aa934a736c91e3da Mon Sep 17 00:00:00 2001 +From: Ben Gamari <bgamari.foss@gmail.com> +Date: Thu, 1 Dec 2016 12:55:23 -0500 +Subject: [PATCH] rts: Ensure we always give MADV_DONTNEED a chance in + osDecommitMemory + +As described in #12865, newer Linux kernels support both MADV_FREE and +MADV_DONTNEED. Previously a runtime would fail to try MADV_DONTNEED if +MADV_FREE failed (e.g. since the kernel which the image is running on +doesn't support the latter). Now we try MADV_DONTNEED if MADV_FREE +failed to ensure that binaries compiled on a kernel supporting MADV_FREE +don't fail on decommit. + +Test Plan: Validate + +Reviewers: austin, erikd, simonmar + +Reviewed By: simonmar + +Subscribers: thomie + +Differential Revision: https://phabricator.haskell.org/D2780 + +GHC Trac Issues: #12865 +--- + rts/posix/OSMem.c | 19 ++++++++++++++++--- + 1 file changed, 16 insertions(+), 3 deletions(-) + +diff --git a/rts/posix/OSMem.c b/rts/posix/OSMem.c +index 5291745..beffeda 100644 +--- a/rts/posix/OSMem.c ++++ b/rts/posix/OSMem.c +@@ -541,11 +541,24 @@ void osDecommitMemory(void *at, W_ size) + + #ifdef MADV_FREE + // Try MADV_FREE first, FreeBSD has both and MADV_DONTNEED +- // just swaps memory out ++ // just swaps memory out. Linux >= 4.5 has both DONTNEED and FREE; either ++ // will work as they both allow the system to free anonymous pages. ++ // It is important that we try both methods as the kernel which we were ++ // built on may differ from the kernel we are now running on. + r = madvise(at, size, MADV_FREE); +-#else +- r = madvise(at, size, MADV_DONTNEED); ++ if(r < 0) { ++ if (errno == EINVAL) { ++ // Perhaps the system doesn't support MADV_FREE; fall-through and ++ // try MADV_DONTNEED. ++ } else { ++ sysErrorBelch("unable to decommit memory"); ++ } ++ } else { ++ return; ++ } + #endif ++ ++ r = madvise(at, size, MADV_DONTNEED); + if(r < 0) + sysErrorBelch("unable to decommit memory"); + } +-- +1.9.1 + diff --git a/community/ghc/0007-build-hp2ps-twice.patch b/community/ghc/0007-build-hp2ps-twice.patch new file mode 100644 index 0000000000..47e8a8f266 --- /dev/null +++ b/community/ghc/0007-build-hp2ps-twice.patch @@ -0,0 +1,25 @@ +--- a/utils/hp2ps/ghc.mk 2017-02-25 22:37:12.000000000 -0600 ++++ b/utils/hp2ps/ghc.mk 2017-02-25 23:21:33.000000000 -0600 +@@ -17,10 +17,21 @@ + Utilities.c + utils/hp2ps_dist_EXTRA_LIBRARIES = m + utils/hp2ps_dist_PROGNAME = $(CrossCompilePrefix)hp2ps +-utils/hp2ps_dist_INSTALL = YES ++utils/hp2ps_dist_INSTALL = NO + utils/hp2ps_dist_INSTALL_INPLACE = YES + + utils/hp2ps_CC_OPTS += $(addprefix -I,$(GHC_INCLUDE_DIRS)) + + $(eval $(call build-prog,utils/hp2ps,dist,0)) + ++utils/hp2ps_dist-install_C_SRCS = AreaBelow.c Curves.c Error.c Main.c \ ++ Reorder.c TopTwenty.c AuxFile.c Deviation.c \ ++ HpFile.c Marks.c Scale.c TraceElement.c \ ++ Axes.c Dimensions.c Key.c PsFile.c Shade.c \ ++ Utilities.c ++utils/hp2ps_dist-install_PROGNAME = hp2ps ++utils/hp2ps_dist-install_TOPDIR = YES ++utils/hp2ps_dist-install_INSTALL = YES ++utils/hp2ps_dist-install_INSTALL_INPLACE = NO ++ ++$(eval $(call build-prog,utils/hp2ps,dist-install,1)) diff --git a/community/ghc/0008-build-unlit-twice.patch b/community/ghc/0008-build-unlit-twice.patch new file mode 100644 index 0000000000..91380a5c26 --- /dev/null +++ b/community/ghc/0008-build-unlit-twice.patch @@ -0,0 +1,58 @@ +From eba93774c3ce2f151e7c72f6d068b753f24dbcfa Mon Sep 17 00:00:00 2001 +From: Thomas Miedema <thomasmiedema@gmail.com> +Date: Wed, 15 Jun 2016 14:56:46 +0200 +Subject: [PATCH] Build system: build unlit twice + +See Note [Why build certain utils twice?] in utils/ghc-pkg/ghc.mk +--- + utils/ghc-pkg/ghc.mk | 7 ++++++- + utils/unlit/ghc.mk | 10 +++++++++- + 2 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/utils/ghc-pkg/ghc.mk b/utils/ghc-pkg/ghc.mk +index f7d97de..410de72 100644 +--- a/utils/ghc-pkg/ghc.mk ++++ b/utils/ghc-pkg/ghc.mk +@@ -27,7 +27,7 @@ utils/ghc-pkg_PACKAGE = ghc-pkg + # Note [Why build certain utils twice?] + # + # We build certain utils twice: once with stage0, and once with stage1. +-# Examples are ghc-pkg and hsc2hs. ++# Examples are ghc-pkg, hsc2hs and unlit. + # + # These tools are needed during the bootstrapping process, so we have to use + # stage0 to build them at first (stage1 doesn't exist yet). (side note: they're +@@ -38,6 +38,11 @@ utils/ghc-pkg_PACKAGE = ghc-pkg + # dynamically linked. But the stage0 copies are either statically linked, or + # linked against libraries on the build machine. + # ++# Another reason why we can't install the stage0 copies is that they are ++# built to run on the build(=host) platform, but when installing a ++# "cross-compiled stage2 compiler" we need copies that run on the target ++# platform. ++# + # Therefore we build fresh copies, using the stage1 compiler, and install them + # when you run 'make install'. They are not used for any other purpose. + +diff --git a/utils/unlit/ghc.mk b/utils/unlit/ghc.mk +index e947989..6805c4e 100644 +--- a/utils/unlit/ghc.mk ++++ b/utils/unlit/ghc.mk +@@ -13,8 +13,16 @@ + utils/unlit_dist_C_SRCS = unlit.c + utils/unlit_dist_PROGNAME = unlit + utils/unlit_dist_TOPDIR = YES +-utils/unlit_dist_INSTALL = YES ++utils/unlit_dist_INSTALL = NO + utils/unlit_dist_INSTALL_INPLACE = YES + + $(eval $(call build-prog,utils/unlit,dist,0)) + ++utils/unlit_dist-install_C_SRCS = unlit.c ++utils/unlit_dist-install_PROGNAME = unlit ++utils/unlit_dist-install_TOPDIR = YES ++utils/unlit_dist-install_INSTALL = YES ++utils/unlit_dist-install_INSTALL_INPLACE = NO ++ ++# See Note [Why build certain utils twice?]. ++$(eval $(call build-prog,utils/unlit,dist-install,1)) diff --git a/community/ghc/APKBUILD b/community/ghc/APKBUILD new file mode 100644 index 0000000000..9b922eb4ae --- /dev/null +++ b/community/ghc/APKBUILD @@ -0,0 +1,201 @@ +# Maintainer: Mitch Tishmack <mitch.tishmack@gmail.com> +pkgname=ghc +pkgver=8.0.2 +pkgrel=6 +pkgdesc="The Glasgow Haskell Compiler" +url="http://haskell.org" +arch="x86_64 armhf" +# Note ghc's license is basically BSD-3. If you'd like to know more visit: +# * https://www.haskell.org/ghc/license +# * https://ghc.haskell.org/trac/ghc/wiki/Licensing +license="custom:BSD-3" +# Note that ghc is sensitive to the version of llvm used, +# hence the llvm3.7 package. +# +# Ref: https://ghc.haskell.org/trac/ghc/wiki/Status/GHC-8.0.1 +# https://ghc.haskell.org/trac/ghc/wiki/ImprovedLLVMBackend +depends="gmp-dev perl gcc>=6.2.1 llvm3.7 libffi-dev" +makedepends_build="$pkgname autoconf cpio binutils-gold paxmark libffi-dev ncurses-dev" +makedepends_host="linux-headers musl-dev zlib-dev gmp-dev binutils-dev libffi-dev ncurses-dev" +makedepends="$makedepends_build $makedepends_host" +checkdepends="python2" +provides=" + haskell-cabal=1.24.2.0 + haskell-bytestring=0.10.8.1 + haskell-containers=0.5.7.1 + haskell-deepseq=1.4.2.0 + haskell-directory=1.3.0.0 + haskell-filepath=1.4.1.1 + haskell-ghc=8.0.2 + haskell-ghc-boot=8.0.2 + haskell-ghc-boot-th=8.0.2 + haskell-ghc-prim=0.5.0.0 + haskell-ghci=8.0.2 + haskell-haskeline=0.7.3.0 + haskell-hoopl=3.10.2.1 + haskell-hpc=0.6.0.3 + haskell-integer-gmp=1.0.0.1 + haskell-pretty=1.1.3.3 + haskell-process=1.4.3.0 + haskell-rts=1.0 + haskell-template-haskell=2.11.1.0 + haskell-terminfo=0.4.0.2 + haskell-time=1.6.0.1 + haskell-transformers=0.5.2.0 + haskell-unix=2.7.2.1 + haskell-xhtml=3000.2.1 + " +subpackages="$pkgname-doc $pkgname-dev" +install="$pkgname.post-install" +options="!strip" # we strip it manually in build() +source="http://downloads.haskell.org/~ghc/$pkgver/ghc-$pkgver-src.tar.xz + http://downloads.haskell.org/~ghc/$pkgver/ghc-$pkgver-testsuite.tar.xz + 0000-alpine.patch + 0000-bootstrap.patch + 0001-rm-ghc-pwd.patch + 0002-Correct-issue-with-libffi-and-glibc.patch + 0003-do-not-use-SHELL.patch + 0004-reproducible-tmp-names.patch + 0005-buildpath-abi-stability.patch + 0006-fix-madvise.patch + 0007-build-hp2ps-twice.patch + 0008-build-unlit-twice.patch + " +builddir="$srcdir/$pkgname-$pkgver" + +prepare() { + default_prepare + + cp mk/build.mk.sample mk/build.mk + + cat >> mk/build.mk <<-EOF + BuildFlavour = perf-llvm + INTEGER_LIBRARY = integer-gmp + BeConservative = YES + V = 0 + GhcStage3HcOpts += -O3 + SplitSections = YES + EOF + + if [ "$CBUILD" != "$CTARGET" ]; then + # cross-build + cat >> mk/build.mk <<-EOF + HADDOCK_DOCS = NO + BUILD_SPHINX_HTML = NO + BUILD_SPHINX_PS = NO + BUILD_SPHINX_PDF = NO + EOF + fi + + # Due to patches to the configure script + autoreconf +} + +build() { + cd "$builddir" + + local ffi_inc=$(pkg-config libffi --cflags-only-I); ffi_inc="${ffi_inc%% }" + local ffi_lib=$(pkg-config libffi --libs-only-L); ffi_lib="${ffi_lib%% }" + + # NOTE: ghc build system requires host == build, and it ends up + # compiling the cross-compiler (stage1) and cross-compiling with + # that the native compiler (stage2) + ./configure \ + --build=$CBUILD \ + --host=$CBUILD \ + --target=$CTARGET \ + --prefix=/usr \ + --with-system-libffi \ + ${ffi_inc:+--with-ffi-includes="${ffi_inc#-I}"} \ + ${ffi_lib:+--with-ffi-libraries="${ffi_lib#-L}"} \ + --with-ar=${CROSS_COMPILE}ar \ + --with-nm=${CROSS_COMPILE}nm \ + --with-ranlib=${CROSS_COMPILE}ranlib \ + --with-objdump=${CROSS_COMPILE}objdump \ + --with-ld=${CROSS_COMPILE}ld.gold \ + --with-ld.gold=${CROSS_COMPILE}ld.gold + make +} + +check() { + cd "$builddir/testsuite" + make fast THREADS=$JOBS +} + +doc() { + default_doc + install -Dm644 "$builddir/LICENSE" \ + "$subpkgdir/usr/share/licenses/$subpkgname/LICENSE" +} + +package() { + local ghclib="usr/lib/ghc-$pkgver" + local newpath path target + + cd "$builddir" + make -j1 DESTDIR="$pkgdir" install + + cd "$pkgdir" + + # Fixup install tree if needed. + if [ -d usr/lib/$CTARGET-ghc-$pkgver ]; then + # different location + ghclib="usr/lib/$CTARGET-ghc-$pkgver" + + # Rename binaries and fix links. + local path; for path in usr/bin/"$CTARGET"-*; do + newpath="${path//$CTARGET-/}" + + if [ -h "$path" ]; then + target="$(readlink $path)" + ln -sf "${target//$CTARGET-/}" "$newpath" + rm "$path" + else + mv "$path" "$newpath" + fi + done + + # Remove triplet prefix from settings -- the intention is + # that the native compiler will use native gcc/ld on the target. + sed -i "s|$CTARGET-||g" usr/lib/$CTARGET-ghc-$pkgver/settings + fi + + # Can't do a full strip on archives. + find . -type f \( -name "*.so" -o -name "*.a" \) \ + -exec ${CROSS_COMPILE}strip --strip-unneeded {} \; + find $ghclib/bin -type f -exec ${CROSS_COMPILE}strip {} \; + + paxmark -m \ + $ghclib/bin/ghc \ + $ghclib/bin/ghc-iserv \ + $ghclib/bin/ghc-iserv-dyn \ + $ghclib/bin/ghc-iserv-prof +} + +# Like debian, we split apart the profiled archives/etc... +# This drastically reduces the install size of the ghc pkg. +dev() { + pkgdesc="$pkgdesc (development files)" + depends="$pkgname=$pkgver-r$pkgrel" + + cd "$pkgdir" + + install -dm755 "$subpkgdir" + + local pfiles=$(find . \( -type f -o -type l \) \( -name "*.p_*" -o -name "lib*_p.a" \)) + echo "$pfiles" | cpio -pamVd "$subpkgdir" + echo "$pfiles" | xargs rm -fr +} + +sha512sums="58ea3853cd93b556ecdc4abd0be079b2621171b8491f59004ea4e036a4cba4470aaafe6591b942e0a50a64bdc47540e01fe6900212a1ef7087850112d9bfc5ef ghc-8.0.2-src.tar.xz +1b35fc6a5f482dc1e33f21ddf4c4fe17591990f16a4105c787225980a5f4dbaa42205204faf547f8e1b53f6356aefde9d3ff50cc416c9bf1a9ac08feadd74a99 ghc-8.0.2-testsuite.tar.xz +23a52467fe83322e7b1d5f3e17a9defd08969666acb5a40e40ad93aa4f3feec028389448d4620edbe3ee8b246b3b6e338b267dce09cb14bdd0949b98e75d7562 0000-alpine.patch +82cecce9e42c12cc3c8d484331b76ac5c6d2529887cd73181d4798f95057883be47489919379e6ebf7daba95b7c25b5d9d689b30ed8d01b13dda20a3b921ce3d 0000-bootstrap.patch +128eece1b103f286b915a1563a628b638f03509d18cdb2e6510957d26eb56a4ae66e33c946c0e6c2aac2f947b9646dc88c1f390c69ea21f9dc64e0bef4de4e97 0001-rm-ghc-pwd.patch +6f90b0de1e34c286e54ef14514ffabe17f9012fbc5448b4aacb3687aac065942e0a3a2c1c57b6338121140369a8870b4ce2a6b355c83c43344d4de8909a253a4 0002-Correct-issue-with-libffi-and-glibc.patch +59194e6994c8344c579ec16c3adf3e0cdc7c356b524b12f8b10ec940191463d686782e525537c94ffa8e1bf9efcc36a2b3da3004183586ab0e354ab0a7036e0a 0003-do-not-use-SHELL.patch +b5a5e73a2f01c0cabc96a49776d0d0f3d1d7a10759bb0b2982e7c7f6dc525d0559c0183ee779feb77ec6f2cec3bac17c1a5ba4c3bc0c6f780dfc1ed3dcf6c80e 0004-reproducible-tmp-names.patch +e1c2cef06d307eda4b35521204e95eb54ace5dbcd22de659e95356f884b4424d6304365e4ab45c5116192cba4c095e2e91114bc7cb73d7c7173a7035287d0854 0005-buildpath-abi-stability.patch +478f9c9990ee01b70e88daf97138f853816d862731a02e9286ad787845dcb40c1443a30520598d805d0ff7cea8c3d604ed5d9033dbe8e572e8a85911ee739ff7 0006-fix-madvise.patch +a1032b800515908eae1602454c03bd80c92e39faa4004b52dba698d84166abea1bb4ce4afc2b69aad4a25a4e9acb2d12704453e512ab2b2ceae02c6df180bd76 0007-build-hp2ps-twice.patch +0a53264a2066869379cbcb3a6175b93d4461d9a9fe6d2594bf0c9438daa176fbccf033832fa61bd482a23335c4528d8087301e3bdc08d08160acb789befbe005 0008-build-unlit-twice.patch" diff --git a/community/ghc/ghc.post-install b/community/ghc/ghc.post-install new file mode 100644 index 0000000000..43a1034bf6 --- /dev/null +++ b/community/ghc/ghc.post-install @@ -0,0 +1,5 @@ +#!/bin/sh +# Force ghc-pkg to recache the base installed packages. Necessary as we +# did make install DESTDIR=... so the cache has invalid locations. + +ghc-pkg recache |