diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2020-12-18 08:52:22 +0000 |
---|---|---|
committer | Sergei Trofimovich <slyfox@gentoo.org> | 2020-12-18 08:52:32 +0000 |
commit | 3e0a550ed6aada6c28da02f9582209c4f789d819 (patch) | |
tree | 00929539f28b4c3a86da050437eee1fa4200e6c4 /dev-lang/ghc | |
parent | www-client/chromium: beta channel bump to 88.0.4324.50 (diff) | |
download | gentoo-3e0a550ed6aada6c28da02f9582209c4f789d819.tar.gz gentoo-3e0a550ed6aada6c28da02f9582209c4f789d819.tar.bz2 gentoo-3e0a550ed6aada6c28da02f9582209c4f789d819.zip |
dev-lang/ghc: bump up to 8.10.2
Package-Manager: Portage-3.0.12, Repoman-3.0.2
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to 'dev-lang/ghc')
-rw-r--r-- | dev-lang/ghc/Manifest | 3 | ||||
-rw-r--r-- | dev-lang/ghc/files/ghc-8.10.2-revert-linker-rtsSymbols_more_linker_symbols.patch | 296 | ||||
-rw-r--r-- | dev-lang/ghc/ghc-8.10.2.ebuild | 798 |
3 files changed, 1097 insertions, 0 deletions
diff --git a/dev-lang/ghc/Manifest b/dev-lang/ghc/Manifest index 0f7b4fe5d558..ba190adce3de 100644 --- a/dev-lang/ghc/Manifest +++ b/dev-lang/ghc/Manifest @@ -5,6 +5,8 @@ DIST ghc-7.8.4-src.tar.bz2 10600755 BLAKE2B 6cf27f663178513b25032b648cf36b016e01 DIST ghc-8.0.2-src.tar.xz 10687760 BLAKE2B 3b2a487c115680342ce308ff1a42d2b6fa6fb1f31e2670b27a305b4d44160056611b77273c9d47f2e37a1ef01b1aba59c36e76b65c83142a5f09812bf3b1ea02 SHA512 58ea3853cd93b556ecdc4abd0be079b2621171b8491f59004ea4e036a4cba4470aaafe6591b942e0a50a64bdc47540e01fe6900212a1ef7087850112d9bfc5ef DIST ghc-8.10.1-src.tar.xz 19781652 BLAKE2B 61ff73d3a895cfa0c836e25a684d7a31cf099dcc33d1f308eaf56aa4b2a75b8f38cf963197c11dad9d027270845af20e00a7d81e5417b0fb8b4a98ddbadd53d8 SHA512 e6bb5c326f8354f0892324586c164c6e04168215d8bfeccb594173a838a535e37bac38db6fbdb01fb37150099c12842c53be5e912dfb6a6feeae3c75d4ae24d0 DIST ghc-8.10.1-testsuite.tar.xz 2091988 BLAKE2B 88796f0fb6ea2bdd749161c84ec88768f3bf87063d2224a083db24f69282e615227626fe3c7b41d4abec10883e22042abed6a231582bab4ea530feffd683ed0b SHA512 35147f98301c5bfb6c939e108de48b2a1133adc1028aaa720ce49d60faa06a4b486a9eded658295e3f203731b4dd53475b57e8213491c45b05959430030be269 +DIST ghc-8.10.2-src.tar.xz 21880680 BLAKE2B 0c1b67c1576cfd1067d11838301f96041cabf66b94cfd546cfe6bef57babe940fc3814918ff9327e59fe73a8e230fa1d62d7816d7c6cae274dd8c53de6e81736 SHA512 6c3f1311feab3665419a301b17fcb09d303ec822f8eb8c4021edfacff00d9b52e71895bed0e58f11d8f7970415bd8c6f95ffde1294afe795e15607199b20cefc +DIST ghc-8.10.2-testsuite.tar.xz 2101788 BLAKE2B 0d4528223471dfd68cadcda47931d53508c9eafa415716ca5990ea519eb89bfa2bdd444280057be33467382dd3d178887262d54ef633aa8ce88ea91eb9d58ece SHA512 043faaf2f0dc34a868c481b284b94afd78aa1ec1a4056d1f3c97ca3f7dadb3e9cff0517a4cfb378fe5187389db7c9027763bf066328e7dcfd264b737f6d09e41 DIST ghc-8.2.1-src.tar.xz 10736016 BLAKE2B 60993cfc9569e83b0c383591ef30a7280e0138fbb7bd696ad62d87e68dcbccf31c0b8ba211b6647922b8595c7aec2c783648f12c67da53e0766b71c7d7c923fc SHA512 d9aa2aa7f9414db8f4e51d6c275694b46df515e68331a1a2b6018256333a2c63ebd877b75ee90407ecce5be672ec9afc6bebd62aadbf8ae06b94f1760d1736be DIST ghc-8.2.2-src.tar.xz 10753272 BLAKE2B 6fd792390d3df20f84836466705c3f3c931ba2d594dcbe2b808ea0ae284460000b443df8aae74903eabf05ff9064d68a303086cf888ea68222eb1c60959c8f21 SHA512 6549416f470b599973d409fa45f59c25b07e6a94798cef1a19ad432547dc225338cf4dbc4a4793114b4a417798a3b59b122b92b020251074405c5302b7ffe799 DIST ghc-8.4.1-src.tar.xz 11301528 BLAKE2B 6dcf467d04cace856b68315c85b80f19b517dcbc8ae6e2a08c60afa141c9e0261e012738452c9ca208f9fc40c48bd1a0817e5e0fe9f4737383cd7b44ca65c8d9 SHA512 f8ae11f498bf2911fb92635534c6906c96f1fbe5072c7b7447bd3f69e408026b674564515af02a8aaddc57ee6905ce78d10005b12478a39c220580aaec13a9f7 @@ -45,6 +47,7 @@ DIST ghc-bin-8.0.2-ppc64.tbz2 117432068 BLAKE2B cae202f0d6e825127d543996b2fe7ae0 DIST ghc-bin-8.0.2-x86_64-pc-linux-gnu.tbz2 130852973 BLAKE2B 24d2032bbfc664d924800c1a317334e2342c8ec1e529178f9d1bb99bb4772a9cc100603bf70111b8cfafa715c1cccc643f115c77cf6adcdfb17d1f1735ee6682 SHA512 c36e0e2600fc7c284562a323d396a03062cb6e8fa63c353e672be61e76d2ec5c7698485e3a370a57cf512db9e5ba6a68338fff2ab404d9fe67b1a468ed72638f DIST ghc-bin-8.10.1-i686-pc-linux-gnu.tbz2 123398571 BLAKE2B 3650f9dbaaa5af684abad589953bcef5b1684a91a4cc2695d0ef735536057bb031231fe3d73dd74bc38a199f0890ef91764b551e5e158c120affc0d7bc3175b7 SHA512 52cc172de08ef30d6e89384e86eda1b8bbdef2bbff526041eb47d85d77b70ab49314ac7f33f18b40864c16fa546256f1b4c7964e65aa5d3cfbb7f9cbec505dc9 DIST ghc-bin-8.10.1-x86_64-pc-linux-gnu.tbz2 122227601 BLAKE2B 84340866c70044eb1444a70b0cbed6814808037b697db28f567d2b14bb791cbe7d9bf2a327cc47ae85ce3c4970ba039854b4a6df44eb85cdc18040c5a4d15f4f SHA512 81df9de95aec47d60ad8d699756ad323eb525c3a16536fac8c6717e1754272061bd8d7d70cd38f5c509a2fc323305333e4f898c9b6dc27645521bb29ee218bdb +DIST ghc-bin-8.10.2-x86_64-pc-linux-gnu.tbz2 122818630 BLAKE2B 030a68e2aca0eb0a273e0d48a3e180d92b219b2d1826d1d58fa133d0a6cae1316b3ccceadb55a4fa5870f87c3df85df2998e7611b93dbc1fea592437748b2daf SHA512 23bf47ee45fae54a843de9e6991b67fccb79c14ad8d08eff9f38a68a3530496c8ce4bc8cae8a731bb690ddd6cd0bf36d6d5bf37eb68ddae8ce646a0bf3916d8f DIST ghc-bin-8.2.1-i686-pc-linux-gnu.tbz2 96157437 BLAKE2B 2b9608845db8cea78db07209fa054b3b05085d5c3ac07cbe3de02a93c87fb0cff12b1820f08757221c59c8a0a9e7a5563c44266b181525d916825e5cf5bac34c SHA512 e891e76557fa61853e28829b8bedc4a6abb92954f90cc1ebcf22a13cc137556bbe9262e7398b7e1aedbabeb997916b008bf1561a52f16a569f3d58ea9404f41e DIST ghc-bin-8.2.1-x86_64-pc-linux-gnu.tbz2 97490496 BLAKE2B 3666ea70cb8b3645db071040d2069fe244042c11954b34e5d92aaa90132d2316c0ee8c176cd4e674772bea3b99df150404f62bd8745c046cdaf102ecf0a0fa54 SHA512 52630a185d0eab56bce0469a612a54109895bfee041ec362ced59a9b35ba3b9c185e86bc7dbf0a5939081d3626baa19fbb3306e36d1857530248a7b9bfc100bb DIST ghc-bin-8.2.2-i686-pc-linux-gnu.tbz2 96638908 BLAKE2B b470f838e77330969f162196b0f1035fa764f5d123687fbf67c14323280bfe55216af0e16f8b79c62f290905d96abc8bfafee650f8d27c81608853e78329b2c9 SHA512 15b1525890477539878385efc15ce5f1cf2f126cc785c42923be958cabe3298cebe73526a2370cf4c630124160a7ca0f0f9062aebbf035dce807a0374eaddd14 diff --git a/dev-lang/ghc/files/ghc-8.10.2-revert-linker-rtsSymbols_more_linker_symbols.patch b/dev-lang/ghc/files/ghc-8.10.2-revert-linker-rtsSymbols_more_linker_symbols.patch new file mode 100644 index 000000000000..eb30d9d9dd4c --- /dev/null +++ b/dev-lang/ghc/files/ghc-8.10.2-revert-linker-rtsSymbols_more_linker_symbols.patch @@ -0,0 +1,296 @@ +From fac083e7ac8a37b61a4082bbbca2848e52fd1bb2 Mon Sep 17 00:00:00 2001 +From: Ben Gamari <ben@smart-cactus.org> +Date: Sun, 9 Aug 2020 09:15:16 -0400 +Subject: [PATCH] Revert "[linker/rtsSymbols] More linker symbols" + +This reverts commit aa2e5863699306920513b216f337de09e29b5bb8. +--- + rts/RtsSymbols.c | 224 ++++------------------------------------------- + 1 file changed, 17 insertions(+), 207 deletions(-) + +diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c +index d10a6900db..b2f90a892d 100644 +--- a/rts/RtsSymbols.c ++++ b/rts/RtsSymbols.c +@@ -58,6 +58,7 @@ + SymI_HasProto(signal_handlers) \ + SymI_HasProto(stg_sig_install) \ + SymI_HasProto(rtsTimerSignal) \ ++ SymI_HasProto(atexit) \ + SymI_NeedsDataProto(nocldstop) + #endif + +@@ -976,213 +977,29 @@ + RTS_USER_SIGNALS_SYMBOLS \ + RTS_INTCHAR_SYMBOLS + ++ + // 64-bit support functions in libgcc.a +-// See https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html#Libgcc +-#define RTS_LIBGCC_SYMBOLS_32 \ +- SymI_NeedsProto(__fixunsdfdi) \ +- /* 4 The GCC low-level runtime library */\ +- /* 4.1.1 Arithmetic functions */\ +- /* SymI_NeedsProto(__ashlsi3) */\ +- SymI_NeedsProto(__ashldi3) \ +- /* SymI_NeedsProto(__ashlti3) */\ +- /* These functions return the result of shifting a left by b bits. */\ +- /* SymI_NeedsProto(__ashrsi3) */\ +- SymI_NeedsProto(__ashrdi3) \ +- /* SymI_NeedsProto(__ashrti3) */\ +- /* These functions return the result of arithmetically shifting a right by b bits. */\ +- /* SymI_NeedsProto(__divsi3) */\ +- SymI_NeedsProto(__divdi3) \ +- /* SymI_NeedsProto(__divti3) */\ +- /* These functions return the quotient of the signed division of a and b. */\ +- /* SymI_NeedsProto(__lshrsi3) */ \ +- SymI_NeedsProto(__lshrdi3) \ +- /* SymI_NeedsProto(__lshrti3) */ \ +- /* These functions return the result of logically shifting a right by b bits. */\ +- /* SymI_NeedsProto(__modsi3) */ \ +- SymI_NeedsProto(__moddi3) \ +- /* SymI_NeedsProto(__modti3) */ \ +- /* These functions return the remainder of the signed division of a and b. */\ +- /* SymI_NeedsProto(__mulsi3) */ \ +- SymI_NeedsProto(__muldi3) \ +- /* SymI_NeedsProto(__multi3) */ \ +- /* These functions return the product of a and b. */\ +- SymI_NeedsProto(__negdi2) \ +- /* SymI_NeedsProto(__negti2) */ \ +- /* These functions return the negation of a. */\ +- /* SymI_NeedsProto(__udivsi3) */ \ +- SymI_NeedsProto(__udivdi3) \ +- /* SymI_NeedsProto(__udivti3) */ \ +- /* These functions return the quotient of the unsigned division of a and b. */\ +- SymI_NeedsProto(__udivmoddi4) \ +- /* SymI_NeedsProto(__udivmodti4) */ \ +- /* These functions calculate both the quotient and remainder of the unsigned division of a and b. The return value is the quotient, and the remainder is placed in variable pointed to by c. */\ +- /* SymI_NeedsProto(__umodsi3) */ \ +- SymI_NeedsProto(__umoddi3) \ +- /* SymI_NeedsProto(__umodti3) */ \ +- /* These functions return the remainder of the unsigned division of a and b. */\ +- /* 4.1.2 Comparison functions */\ +- /* The following functions implement integral comparisons. These functions implement a low-level compare, upon which the higher level comparison operators (such as less than and greater than or equal to) can be constructed. The returned values lie in the range zero to two, to allow the high-level operators to be implemented by testing the returned result using either signed or unsigned comparison. */\ +- SymI_NeedsProto(__cmpdi2) \ +- /* SymI_NeedsProto(__cmpti2) */ \ +- /* These functions perform a signed comparison of a and b. If a is less than b, they return 0; if a is greater than b, they return 2; and if a and b are equal they return 1. */\ +- SymI_NeedsProto(__ucmpdi2) \ +- /* SymI_NeedsProto(__ucmpti2) */ \ +- /* These functions perform an unsigned comparison of a and b. If a is less than b, they return 0; if a is greater than b, they return 2; and if a and b are equal they return 1. */\ +- /* 4.1.3 Trapping arithmetic functions */\ +- /* The following functions implement trapping arithmetic. These functions call the libc function abort upon signed arithmetic overflow. */\ +- SymI_NeedsProto(__absvsi2) \ +- SymI_NeedsProto(__absvdi2) \ +- /* These functions return the absolute value of a. */\ +- /* SymI_NeedsProto(__addvsi3) */ \ +- SymI_NeedsProto(__addvdi3) \ +- /* These functions return the sum of a and b; that is a + b. */\ +- /* SymI_NeedsProto(__mulvsi3) */ \ +- SymI_NeedsProto(__mulvdi3) \ +- /* The functions return the product of a and b; that is a * b. */\ +- SymI_NeedsProto(__negvsi2) \ +- SymI_NeedsProto(__negvdi2) \ +- /* These functions return the negation of a; that is -a. */\ +- /* SymI_NeedsProto(__subvsi3) */ \ +- SymI_NeedsProto(__subvdi3) \ +- /* These functions return the difference between b and a; that is a - b. */\ +- /* 4.1.4 Bit operations */\ +- SymI_NeedsProto(__clzsi2) \ +- SymI_NeedsProto(__clzdi2) \ +- /* SymI_NeedsProto(__clzti2) */ \ +- /* These functions return the number of leading 0-bits in a, starting at the most significant bit position. If a is zero, the result is undefined. */\ +- SymI_NeedsProto(__ctzsi2) \ +- SymI_NeedsProto(__ctzdi2) \ +- /* SymI_NeedsProto(__ctzti2) */ \ +- /* These functions return the number of trailing 0-bits in a, starting at the least significant bit position. If a is zero, the result is undefined. */\ +- SymI_NeedsProto(__ffsdi2) \ +- /* SymI_NeedsProto(__ffsti2) */ \ +- /* These functions return the index of the least significant 1-bit in a, or the value zero if a is zero. The least significant bit is index one. */\ +- SymI_NeedsProto(__paritysi2) \ +- SymI_NeedsProto(__paritydi2) \ +- /* SymI_NeedsProto(__parityti2) */\ +- /* These functions return the value zero if the number of bits set in a is even, and the value one otherwise. */\ +- SymI_NeedsProto(__popcountsi2) \ +- SymI_NeedsProto(__popcountdi2) \ +- /* SymI_NeedsProto(__popcountti2) */ \ +- /* These functions return the number of bits set in a. */\ +- SymI_NeedsProto(__bswapsi2) \ +- SymI_NeedsProto(__bswapdi2) +-#define RTS_LIBGCC_SYMBOLS_aarch32 \ +- /* armv6l */\ +- /* TODO: should check for __ARM_EABI__ */\ +- SymI_NeedsProto(__aeabi_d2f) \ +- SymI_NeedsProto(__aeabi_d2iz) \ +- SymI_NeedsProto(__aeabi_d2lz) \ +- SymI_NeedsProto(__aeabi_d2uiz) \ +- SymI_NeedsProto(__aeabi_d2ulz) \ +- SymI_NeedsProto(__aeabi_dadd) \ +- SymI_NeedsProto(__aeabi_dcmpeq) \ +- SymI_NeedsProto(__aeabi_dcmpge) \ +- SymI_NeedsProto(__aeabi_dcmpgt) \ +- SymI_NeedsProto(__aeabi_dcmple) \ +- SymI_NeedsProto(__aeabi_dcmplt) \ +- SymI_NeedsProto(__aeabi_dcmpun) \ +- SymI_NeedsProto(__aeabi_ddiv) \ +- SymI_NeedsProto(__aeabi_dmul) \ +- SymI_NeedsProto(__aeabi_dneg) \ +- SymI_NeedsProto(__aeabi_dsub) \ +- SymI_NeedsProto(__aeabi_f2d) \ +- SymI_NeedsProto(__aeabi_f2iz) \ +- SymI_NeedsProto(__aeabi_f2lz) \ +- SymI_NeedsProto(__aeabi_f2uiz) \ +- SymI_NeedsProto(__aeabi_f2ulz) \ +- SymI_NeedsProto(__aeabi_fadd) \ +- SymI_NeedsProto(__aeabi_fcmpeq) \ +- SymI_NeedsProto(__aeabi_fcmpge) \ +- SymI_NeedsProto(__aeabi_fcmpgt) \ +- SymI_NeedsProto(__aeabi_fcmple) \ +- SymI_NeedsProto(__aeabi_fcmplt) \ +- SymI_NeedsProto(__aeabi_fcmpun) \ +- SymI_NeedsProto(__aeabi_fdiv) \ +- SymI_NeedsProto(__aeabi_fmul) \ +- SymI_NeedsProto(__aeabi_fneg) \ +- SymI_NeedsProto(__aeabi_fsub) \ +- SymI_NeedsProto(__aeabi_i2d) \ +- SymI_NeedsProto(__aeabi_i2f) \ +- SymI_NeedsProto(__aeabi_idiv) \ +- SymI_NeedsProto(__aeabi_idivmod) \ +- SymI_NeedsProto(__aeabi_l2d) \ +- SymI_NeedsProto(__aeabi_l2f) \ +- SymI_NeedsProto(__aeabi_lasr) \ +- SymI_NeedsProto(__aeabi_lcmp) \ +- SymI_NeedsProto(__aeabi_ldivmod) \ +- SymI_NeedsProto(__aeabi_llsl) \ +- SymI_NeedsProto(__aeabi_llsr) \ +- SymI_NeedsProto(__aeabi_lmul) \ +- SymI_NeedsProto(__aeabi_ui2d) \ +- SymI_NeedsProto(__aeabi_ui2f) \ +- SymI_NeedsProto(__aeabi_uidiv) \ +- SymI_NeedsProto(__aeabi_uidivmod) \ +- SymI_NeedsProto(__aeabi_ul2d) \ +- SymI_NeedsProto(__aeabi_ul2f) \ +- SymI_NeedsProto(__aeabi_ulcmp) \ +- SymI_NeedsProto(__aeabi_uldivmod) +-#define RTS_LIBGCC_SYMBOLS_64 \ ++#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32) ++#define RTS_LIBGCC_SYMBOLS \ ++ SymI_NeedsProto(__divdi3) \ ++ SymI_NeedsProto(__udivdi3) \ ++ SymI_NeedsProto(__moddi3) \ ++ SymI_NeedsProto(__umoddi3) \ ++ SymI_NeedsProto(__muldi3) \ ++ SymI_NeedsProto(__ashldi3) \ ++ SymI_NeedsProto(__ashrdi3) \ ++ SymI_NeedsProto(__lshrdi3) \ ++ SymI_NeedsProto(__fixunsdfdi) ++#elif defined(__GNUC__) && SIZEOF_VOID_P == 8 ++#define RTS_LIBGCC_SYMBOLS \ + SymI_NeedsProto(__udivti3) \ + SymI_NeedsProto(__umodti3) +- +-/* for aarch64 */ +-#define RTS_LIBGCC_SYMBOLS_aarch64 \ +- SymI_NeedsProto(__netf2) \ +- SymI_NeedsProto(__addtf3) \ +- SymI_NeedsProto(__subtf3) \ +- SymI_NeedsProto(__multf3) \ +- SymI_NeedsProto(__extenddftf2) \ +- SymI_NeedsProto(__fixtfsi) \ +- SymI_NeedsProto(__fixunstfsi) \ +- SymI_NeedsProto(__floatsitf) \ +- SymI_NeedsProto(__floatunsitf) +- +-#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && defined(arm_HOST_OS) +-#define RTS_LIBGCC_SYMBOLS RTS_LIBGCC_SYMBOLS_32 RTS_LIBGCC_SYMBOLS_aarch32 +-#elif defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32) +-#define RTS_LIBGCC_SYMBOLS RTS_LIBGCC_SYMBOLS_32 +-#elif defined(__GNUC__) && SIZEOF_VOID_P == 8 && defined(aarch64_HOST_OS) +-#define RTS_LIBGCC_SYMBOLS RTS_LIBGCC_SYMBOLS_64 RTS_LIBGCC_SYMBOLS_aarch64 +-#elif defined(__GNUC__) && SIZEOF_VOID_P == 8 +-#define RTS_LIBGCC_SYMBOLS RTS_LIBGCC_SYMBOLS_64 + #else + #define RTS_LIBGCC_SYMBOLS + #endif + +-#if !defined(mingw32_HOST_OS) && !defined(DYNAMIC) && (defined(_FORTIFY_SOURCE) || defined(__SSP__)) +-#define RTS_SSP_SYMBOLS \ +- SymI_NeedsProto(__stack_chk_guard) \ +- SymI_NeedsProto(__stack_chk_fail) +-#else +-#define RTS_SSP_SYMBOLS +-#endif +-#if !defined(DYNAMIC) && defined(linux_HOST_OS) +-// we need these for static musl builds. However when +-// linking shared objects (DLLs) this will fail, hence +-// we do not include them when building with -DDYNAMIC +-#define RTS_LINKER_SYMBOLS \ +- SymI_NeedsProto(__fini_array_start) \ +- SymI_NeedsProto(__fini_array_end) +-#else +-#define RTS_LINKER_SYMBOLS +-#endif +- +-#if defined(darwin_HOST_OS) && defined(powerpc_HOST_ARCH) +- // Symbols that don't have a leading underscore +- // on Mac OS X. They have to receive special treatment, +- // see machoInitSymbolsWithoutUnderscore() +-#define RTS_MACHO_NOUNDERLINE_SYMBOLS \ +- SymI_NeedsProto(saveFP) \ +- SymI_NeedsProto(restFP) +-#endif +- + /* entirely bogus claims about types of these symbols */ +-/* to prevent a bit of define expansion, SymI_NeedsProto is a variadic +- * macro. And we'll concat vvv with the __VA_ARGS__. This prevents +- * vvv from getting macro expanded. +- */ +-#define SymI_NeedsProto(vvv,...) extern void vvv ## __VA_ARGS__ (void); ++#define SymI_NeedsProto(vvv) extern void vvv(void); + #define SymI_NeedsDataProto(vvv) extern StgWord vvv[]; + #if defined(COMPILING_WINDOWS_DLL) + #define SymE_HasProto(vvv) SymE_HasProto(vvv); +@@ -1209,8 +1026,6 @@ RTS_DARWIN_ONLY_SYMBOLS + RTS_OPENBSD_ONLY_SYMBOLS + RTS_LIBGCC_SYMBOLS + RTS_LIBFFI_SYMBOLS +-RTS_SSP_SYMBOLS +-RTS_LINKER_SYMBOLS + #undef SymI_NeedsProto + #undef SymI_NeedsDataProto + #undef SymI_HasProto +@@ -1230,7 +1045,7 @@ RTS_LINKER_SYMBOLS + #define SymE_HasDataProto(vvv) \ + SymE_HasProto(vvv) + +-#define SymI_NeedsProto(vvv,...) SymI_HasProto(vvv ## __VA_ARGS__) ++#define SymI_NeedsProto(vvv) SymI_HasProto(vvv) + #define SymI_NeedsDataProto(vvv) SymI_HasDataProto(vvv) + #define SymE_NeedsProto(vvv) SymE_HasProto(vvv) + #define SymE_NeedsDataProto(vvv) SymE_HasDataProto(vvv) +@@ -1251,8 +1066,6 @@ RTS_LINKER_SYMBOLS + #define SymI_HasProto_deprecated(vvv) \ + { #vvv, (void*)0xBAADF00D, true }, + +-void *RTS_DYNAMIC = NULL; +- + RtsSymbolVal rtsSyms[] = { + RTS_SYMBOLS + RTS_RET_SYMBOLS +@@ -1264,14 +1077,11 @@ RtsSymbolVal rtsSyms[] = { + RTS_LIBGCC_SYMBOLS + RTS_LIBFFI_SYMBOLS + SymI_HasDataProto(nonmoving_write_barrier_enabled) +- RTS_SSP_SYMBOLS +- RTS_LINKER_SYMBOLS + #if defined(darwin_HOST_OS) && defined(i386_HOST_ARCH) + // dyld stub code contains references to this, + // but it should never be called because we treat + // lazy pointers as nonlazy. + { "dyld_stub_binding_helper", (void*)0xDEADBEEF, false }, + #endif +- { "_DYNAMIC", (void*)(&RTS_DYNAMIC), false }, + { 0, 0, false } /* sentinel */ + }; +-- +2.25.4 + diff --git a/dev-lang/ghc/ghc-8.10.2.ebuild b/dev-lang/ghc/ghc-8.10.2.ebuild new file mode 100644 index 000000000000..567a3225311e --- /dev/null +++ b/dev-lang/ghc/ghc-8.10.2.ebuild @@ -0,0 +1,798 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +# to make make a crosscompiler use crossdev and symlink ghc tree into +# cross overlay. result would look like 'cross-sparc-unknown-linux-gnu/ghc' +export CBUILD=${CBUILD:-${CHOST}} +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} = ${CHOST} ]] ; then + if [[ ${CATEGORY/cross-} != ${CATEGORY} ]] ; then + export CTARGET=${CATEGORY/cross-} + fi +fi + +inherit autotools bash-completion-r1 eutils flag-o-matic ghc-package +inherit multilib multiprocessing pax-utils toolchain-funcs prefix +inherit check-reqs +DESCRIPTION="The Glasgow Haskell Compiler" +HOMEPAGE="https://www.haskell.org/ghc/" + +# we don't have any binaries yet +arch_binaries="" + +BIN_PV=${PV} +# sorted! +#arch_binaries="$arch_binaries alpha? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-alpha.tbz2 )" +#arch_binaries="$arch_binaries arm? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-armv7a-hardfloat-linux-gnueabi.tbz2 )" +#arch_binaries="$arch_binaries arm64? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-aarch64-unknown-linux-gnu.tbz2 )" +arch_binaries="$arch_binaries amd64? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-x86_64-pc-linux-gnu.tbz2 )" +#arch_binaries="$arch_binaries ia64? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-ia64-fixed-fiw.tbz2 )" +#arch_binaries="$arch_binaries ppc? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-ppc.tbz2 )" +#arch_binaries="$arch_binaries ppc64? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-ppc64.tbz2 )" +#arch_binaries="$arch_binaries ppc64? ( !big-endian? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-powerpc64le-unknown-linux-gnu.tbz2 ) )" +#arch_binaries="$arch_binaries sparc? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-sparc.tbz2 )" +#arch_binaries="$arch_binaries x86? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-i686-pc-linux-gnu.tbz2 )" + +# various ports: +#arch_binaries="$arch_binaries x86-fbsd? ( https://slyfox.uni.cx/~slyfox/distfiles/ghc-bin-${PV}-x86-fbsd.tbz2 )" + +# 0 - yet +yet_binary() { + case "${ARCH}" in + #alpha) return 0 ;; + #arm64) return 0 ;; + #arm) return 0 ;; + amd64) return 0 ;; + #ia64) return 0 ;; + #ppc) return 0 ;; + #ppc64) + # use big-endian && return 0 + # return 0 + # ;; + #sparc) return 0 ;; + #x86) return 0 ;; + *) return 1 ;; + esac +} + +GHC_PV=${PV} +#GHC_PV=8.10.0.20200123 # uncomment only for -alpha, -beta, -rc ebuilds +GHC_P=${PN}-${GHC_PV} # using ${P} is almost never correct + +SRC_URI="!binary? ( + https://downloads.haskell.org/ghc/${PV/_/-}/${GHC_P}-src.tar.xz + test? ( https://downloads.haskell.org/ghc/${PV/_/-}/${GHC_P}-testsuite.tar.xz ) +)" +S="${WORKDIR}"/${GHC_P} + +[[ -n $arch_binaries ]] && SRC_URI+=" !ghcbootstrap? ( $arch_binaries )" + +BUMP_LIBRARIES=( + # "hackage-name hackage-version" +) + +LICENSE="BSD" +SLOT="0/${PV}" +KEYWORDS="" +IUSE="big-endian doc elfutils ghcbootstrap ghcmakebinary +gmp numa profile test" +IUSE+=" binary" +RESTRICT="!test? ( test )" + +RDEPEND=" + >=dev-lang/perl-5.6.1 + dev-libs/gmp:0= + sys-libs/ncurses:0=[unicode] + elfutils? ( dev-libs/elfutils ) + !ghcmakebinary? ( dev-libs/libffi:= ) + numa? ( sys-process/numactl ) +" + +# This set of dependencies is needed to run +# prebuilt ghc. We specifically avoid ncurses +# dependency with: +# utils/ghc-pkg_HC_OPTS += -DBOOTSTRAPPING +PREBUILT_BINARY_DEPENDS=" + !prefix? ( elibc_glibc? ( >=sys-libs/glibc-2.17 ) ) +" +# This set of dependencies is needed to install +# ghc[binary] in system. terminfo package is linked +# against ncurses. +PREBUILT_BINARY_RDEPENDS="${PREBUILT_BINARY_DEPENDS} + sys-libs/ncurses:0/6 +" + +RDEPEND+="binary? ( ${PREBUILT_BINARY_RDEPENDS} )" + +DEPEND="${RDEPEND} + doc? ( app-text/docbook-xml-dtd:4.2 + app-text/docbook-xml-dtd:4.5 + app-text/docbook-xsl-stylesheets + dev-python/sphinx + >=dev-libs/libxslt-1.1.2 ) + !ghcbootstrap? ( ${PREBUILT_BINARY_DEPENDS} )" + +# we build binaries without profiling support +REQUIRED_USE=" + ?? ( ghcbootstrap binary ) + ?? ( profile binary ) +" + +# haskell libraries built with cabal in configure mode, #515354 +QA_CONFIGURE_OPTIONS+=" --with-compiler --with-gcc" + +is_crosscompile() { + [[ ${CHOST} != ${CTARGET} ]] +} + +is_native() { + [[ ${CHOST} == ${CBUILD} ]] && [[ ${CHOST} == ${CTARGET} ]] +} + +if ! is_crosscompile; then + PDEPEND="!ghcbootstrap? ( >=app-admin/haskell-updater-1.2 )" +fi + +# returns tool prefix for crosscompiler. +# Example: +# CTARGET=armv7a-unknown-linux-gnueabi +# CHOST=x86_64-pc-linux-gnu +# "armv7a-unknown-linux-gnueabi-" +# CTARGET=${CHOST} +# "" +# Used in tools and library prefix: +# "${ED}"/usr/bin/$(cross)haddock +# "${ED}/usr/$(get_libdir)/$(cross)${GHC_P}/package.conf.d" + +cross() { + if is_crosscompile; then + echo "${CTARGET}-" + else + echo "" + fi +} + +append-ghc-cflags() { + local persistent compile assemble link + local flag ghcflag + + for flag in $*; do + case ${flag} in + persistent) persistent="yes";; + compile) compile="yes";; + assemble) assemble="yes";; + link) link="yes";; + *) + [[ ${compile} ]] && ghcflag="-optc${flag}" CFLAGS+=" ${flag}" && GHC_FLAGS+=" ${ghcflag}" && + [[ ${persistent} ]] && GHC_PERSISTENT_FLAGS+=" ${ghcflag}" + [[ ${assemble} ]] && ghcflag="-opta${flag}" CFLAGS+=" ${flag}" && GHC_FLAGS+=" ${ghcflag}" && + [[ ${persistent} ]] && GHC_PERSISTENT_FLAGS+=" ${ghcflag}" + [[ ${link} ]] && ghcflag="-optl${flag}" LDFLAGS+=" ${flag}" && GHC_FLAGS+=" ${ghcflag}" && + [[ ${persistent} ]] && GHC_PERSISTENT_FLAGS+=" ${ghcflag}" + ;; + esac + done +} + +# $1 - lib name (under libraries/) +# $2 - lib version +# example: bump_lib "transformers" "0.4.2.0" +bump_lib() { + local pn=$1 pv=$2 + local p=${pn}-${pv} + local f + + einfo "Bumping ${pn} up to ${pv}" + + for f in ghc.mk GNUmakefile; do + mv libraries/"${pn}"/$f "${WORKDIR}"/"${p}"/$f || die + done + mv libraries/"${pn}" "${WORKDIR}"/"${pn}".old || die + mv "${WORKDIR}"/"${p}" libraries/"${pn}" || die +} + +update_SRC_URI() { + local p pn pv + for p in "${BUMP_LIBRARIES[@]}"; do + set -- $p + pn=$1 pv=$2 + + SRC_URI+=" https://hackage.haskell.org/package/${pn}-${pv}/${pn}-${pv}.tar.gz" + done +} + +update_SRC_URI + +bump_libs() { + local p pn pv + for p in "${BUMP_LIBRARIES[@]}"; do + set -- $p + pn=$1 pv=$2 + + bump_lib "${pn}" "${pv}" + done +} + +ghc_setup_cflags() { + # TODO: plumb CFLAGS and BUILD_CFLAGS to respective CONF_CC_OPTS_STAGE<N> + if ! is_native; then + export CFLAGS=${GHC_CFLAGS-"-O2 -pipe"} + export LDFLAGS=${GHC_LDFLAGS-"-Wl,-O1"} + einfo "Crosscompiling mode:" + einfo " CHOST: ${CHOST}" + einfo " CTARGET: ${CTARGET}" + einfo " CFLAGS: ${CFLAGS}" + einfo " LDFLAGS: ${LDFLAGS}" + einfo " prefix: $(cross)" + return + fi + # We need to be very careful with the CFLAGS we ask ghc to pass through to + # gcc. There are plenty of flags which will make gcc produce output that + # breaks ghc in various ways. The main ones we want to pass through are + # -mcpu / -march flags. These are important for arches like alpha & sparc. + # We also use these CFLAGS for building the C parts of ghc, ie the rts. + strip-flags + strip-unsupported-flags + + # Cmm can't parse line numbers #482086 + replace-flags -ggdb[3-9] -ggdb2 + + GHC_FLAGS="" + GHC_PERSISTENT_FLAGS="" + for flag in ${CFLAGS}; do + case ${flag} in + + # Ignore extra optimisation (ghc passes -O to gcc anyway) + # -O2 and above break on too many systems + -O*) ;; + + # Arch and ABI flags are what we're really after + -m*) append-ghc-cflags compile assemble ${flag};; + + # Sometimes it's handy to see backtrace of RTS + # to get an idea what happens there + -g*) append-ghc-cflags compile ${flag};; + + # Ignore all other flags, including all -f* flags + esac + done + + for flag in ${LDFLAGS}; do + append-ghc-cflags link ${flag} + done + + # GHC uses ${CBUILD}-gcc, ${CHOST}-gcc and ${CTARGET}-gcc at a single build. + # Skip any gentoo-specific tweaks for cross-case to avoid passing unsupported + # options to gcc. + if is_native; then + # prevent from failing to build unregisterised ghc: + # https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg171602.html + use ppc64 && append-ghc-cflags persistent compile -mminimal-toc + fi +} + +# substitutes string $1 to $2 in files $3 $4 ... +relocate_path() { + local from=$1 + local to=$2 + shift 2 + local file= + for file in "$@" + do + sed -i -e "s|$from|$to|g" \ + "$file" || die "path relocation failed for '$file'" + done +} + +# changes hardcoded ghc paths and updates package index +# $1 - new absolute root path +relocate_ghc() { + local to=$1 ghc_v=${BIN_PV} + + # libdir for prebuilt binary and for current system may mismatch + # It does for prefix installation for example: bug #476998 + local bin_ghc_prefix=${WORKDIR}/usr + local bin_libpath=$(echo "${bin_ghc_prefix}"/lib*) + local bin_libdir=${bin_libpath#${bin_ghc_prefix}/} + + # backup original script to use it later after relocation + local gp_back="${T}/ghc-pkg-${ghc_v}-orig" + cp "${WORKDIR}/usr/bin/ghc-pkg-${ghc_v}" "$gp_back" || die "unable to backup ghc-pkg wrapper" + + if [[ ${bin_libdir} != $(get_libdir) ]]; then + einfo "Relocating '${bin_libdir}' to '$(get_libdir)' (bug #476998)" + # moving the dir itself is not strictly needed + # but then USE=binary would result in installing + # in '${bin_libdir}' + mv "${bin_ghc_prefix}/${bin_libdir}" "${bin_ghc_prefix}/$(get_libdir)" || die + + relocate_path "/usr/${bin_libdir}" "/usr/$(get_libdir)" \ + "${WORKDIR}/usr/bin/ghc-${ghc_v}" \ + "${WORKDIR}/usr/bin/ghci-${ghc_v}" \ + "${WORKDIR}/usr/bin/ghc-pkg-${ghc_v}" \ + "${WORKDIR}/usr/bin/hsc2hs" \ + "${WORKDIR}/usr/bin/runghc-${ghc_v}" \ + "$gp_back" \ + "${WORKDIR}/usr/$(get_libdir)/${PN}-${ghc_v}/package.conf.d/"* + fi + + # Relocate from /usr to ${EPREFIX}/usr + relocate_path "/usr" "${to}/usr" \ + "${WORKDIR}/usr/bin/ghc-${ghc_v}" \ + "${WORKDIR}/usr/bin/ghci-${ghc_v}" \ + "${WORKDIR}/usr/bin/ghc-pkg-${ghc_v}" \ + "${WORKDIR}/usr/bin/haddock-ghc-${ghc_v}" \ + "${WORKDIR}/usr/bin/hp2ps" \ + "${WORKDIR}/usr/bin/hpc" \ + "${WORKDIR}/usr/bin/hsc2hs" \ + "${WORKDIR}/usr/bin/runghc-${ghc_v}" \ + "${WORKDIR}/usr/$(get_libdir)/${PN}-${ghc_v}/package.conf.d/"* + + # this one we will use to regenerate cache + # so it should point to current tree location + relocate_path "/usr" "${WORKDIR}/usr" "$gp_back" + + if use prefix; then + hprefixify "${bin_libpath}"/${PN}*/settings + fi + + # regenerate the binary package cache + "$gp_back" recache || die "failed to update cache after relocation" + rm "$gp_back" +} + +ghc-check-reqs() { + # These are pessimistic values (slightly bigger than worst-case) + # Worst case is UNREG USE=profile ia64. See bug #611866 for some + # numbers on various arches. + CHECKREQS_DISK_BUILD=8G + CHECKREQS_DISK_USR=2G + # USE=binary roughly takes + use binary && CHECKREQS_DISK_BUILD=4G + + "$@" +} + +pkg_pretend() { + ghc-check-reqs check-reqs_pkg_pretend +} + +pkg_setup() { + ghc-check-reqs check-reqs_pkg_setup + + # quiet portage about prebuilt binaries + use binary && QA_PREBUILT="*" + + [[ ${MERGE_TYPE} == binary ]] && return + + if use ghcbootstrap; then + ewarn "You requested ghc bootstrapping, this is usually only used" + ewarn "by Gentoo developers to make binary .tbz2 packages." + + [[ -z $(type -P ghc) ]] && \ + die "Could not find a ghc to bootstrap with." + else + if ! yet_binary; then + eerror "Please try emerging with USE=ghcbootstrap and report build" + eerror "sucess or failure to the haskell team (haskell@gentoo.org)" + die "No binary available for '${ARCH}' arch yet, USE=ghcbootstrap" + fi + fi +} + +src_unpack() { + # Create the ${S} dir if we're using the binary version + use binary && mkdir "${S}" + + # the Solaris and Darwin binaries from ghc (maeder) need to be + # unpacked separately, so prevent them from being unpacked + local ONLYA=${A} + case ${CHOST} in + *-darwin* | *-solaris*) ONLYA=${GHC_P}-src.tar.xz ;; + esac + unpack ${ONLYA} +} + +src_prepare() { + ghc_setup_cflags + + if ! use ghcbootstrap && [[ ${CHOST} != *-darwin* && ${CHOST} != *-solaris* ]]; then + # Modify the wrapper script from the binary tarball to use GHC_PERSISTENT_FLAGS. + # See bug #313635. + sed -i -e "s|\"\$topdir\"|\"\$topdir\" ${GHC_PERSISTENT_FLAGS}|" \ + "${WORKDIR}/usr/bin/ghc-${BIN_PV}" + + # allow hardened users use vanilla binary to bootstrap ghc + # ghci uses mmap with rwx protection at it implements dynamic + # linking on it's own (bug #299709) + pax-mark -m "${WORKDIR}/usr/$(get_libdir)/${PN}-${BIN_PV}/bin/ghc" + fi + + if use binary; then + if use prefix; then + relocate_ghc "${EPREFIX}" + fi + + # Move unpacked files to the expected place + mv "${WORKDIR}/usr" "${S}" + eapply_user + else + if ! use ghcbootstrap; then + case ${CHOST} in + *-darwin* | *-solaris*) + # UPDATE ME for ghc-7 + mkdir "${WORKDIR}"/ghc-bin-installer || die + pushd "${WORKDIR}"/ghc-bin-installer > /dev/null || die + use sparc-solaris && unpack ghc-6.10.4-sparc-sun-solaris2.tar.bz2 + use x86-solaris && unpack ghc-7.0.3-i386-unknown-solaris2.tar.bz2 + use x86-macos && unpack ghc-7.4.1-i386-apple-darwin.tar.bz2 + use x64-macos && unpack ghc-7.4.1-x86_64-apple-darwin.tar.bz2 + popd > /dev/null + + pushd "${WORKDIR}"/ghc-bin-installer/ghc-[67].?*.? > /dev/null || die + # fix the binaries so they run, on Solaris we need an + # LD_LIBRARY_PATH which has our prefix libdirs, on + # Darwin we need to replace the frameworks with our libs + # from the prefix fix before installation, because some + # of the tools are actually used during configure/make + if [[ ${CHOST} == *-solaris* ]] ; then + export LD_LIBRARY_PATH="${EPREFIX}/$(get_libdir):${EPREFIX}/usr/$(get_libdir):${LD_LIBRARY_PATH}" + elif [[ ${CHOST} == *-darwin* ]] ; then + local readline_framework=GNUreadline.framework/GNUreadline + local gmp_framework=/opt/local/lib/libgmp.10.dylib + local ncurses_file=/opt/local/lib/libncurses.5.dylib + for binary in $(scanmacho -BRE MH_EXECUTE -F '%F' .) ; do + install_name_tool -change \ + ${readline_framework} \ + "${EPREFIX}"/lib/libreadline.dylib \ + ${binary} || die + install_name_tool -change \ + ${gmp_framework} \ + "${EPREFIX}"/usr/lib/libgmp.dylib \ + ${binary} || die + install_name_tool -change \ + ${ncurses_file} \ + "${EPREFIX}"/usr/lib/libncurses.dylib \ + ${binary} || die + done + # we don't do frameworks! + sed -i \ + -e 's/\(frameworks = \)\["GMP"\]/\1[]/g' \ + -e 's/\(extraLibraries = \)\["m"\]/\1["m","gmp"]/g' \ + rts/package.conf.in || die + fi + + # it is autoconf, but we really don't want to give it too + # many arguments, in fact we do the make in-place anyway + ./configure --prefix="${WORKDIR}"/usr || die + make install || die + popd > /dev/null + ;; + *) + relocate_ghc "${WORKDIR}" + ;; + esac + fi + + sed -i -e "s|\"\$topdir\"|\"\$topdir\" ${GHC_PERSISTENT_FLAGS}|" \ + "${S}/ghc/ghc.wrapper" + + cd "${S}" # otherwise eapply will break + + eapply "${FILESDIR}"/${PN}-7.0.4-CHOST-prefix.patch + eapply "${FILESDIR}"/${PN}-8.2.1-darwin.patch + eapply "${FILESDIR}"/${PN}-7.8.3-prim-lm.patch + eapply "${FILESDIR}"/${PN}-8.8.1-revert-CPP.patch + eapply "${FILESDIR}"/${PN}-8.10.1-allow-cross-bootstrap.patch + eapply "${FILESDIR}"/${PN}-8.10.2-revert-linker-rtsSymbols_more_linker_symbols.patch + + # a bunch of crosscompiler patches + # needs newer version: + #eapply "${FILESDIR}"/${PN}-8.2.1_rc1-hp2ps-cross.patch + + # mingw32 target + pushd "${S}/libraries/Win32" + eapply "${FILESDIR}"/${PN}-8.2.1_rc1-win32-cross-2-hack.patch # bad workaround + popd + + bump_libs + + eapply_user + # as we have changed the build system + eautoreconf + fi +} + +src_configure() { + if ! use binary; then + # initialize build.mk + echo '# Gentoo changes' > mk/build.mk + + # Put docs into the right place, ie /usr/share/doc/ghc-${GHC_PV} + echo "docdir = ${EPREFIX}/usr/share/doc/$(cross)${P}" >> mk/build.mk + echo "htmldir = ${EPREFIX}/usr/share/doc/$(cross)${P}" >> mk/build.mk + + # We also need to use the GHC_FLAGS flags when building ghc itself + echo "SRC_HC_OPTS+=${HCFLAGS} ${GHC_FLAGS}" >> mk/build.mk + echo "SRC_CC_OPTS+=${CFLAGS}" >> mk/build.mk + echo "SRC_LD_OPTS+=${LDFLAGS}" >> mk/build.mk + # Speed up initial Cabal bootstrap + echo "utils/ghc-cabal_dist_EXTRA_HC_OPTS+=$(ghc-make-args)" >> mk/build.mk + + # We can't depend on haddock except when bootstrapping when we + # must build docs and include them into the binary .tbz2 package + # app-text/dblatex is not in portage, can not build PDF or PS + echo "BUILD_SPHINX_PDF = NO" >> mk/build.mk + echo "BUILD_SPHINX_HTML = $(usex doc YES NO)" >> mk/build.mk + echo "BUILD_MAN = $(usex doc YES NO)" >> mk/build.mk + + # this controls presence on 'xhtml' and 'haddock' in final install + echo "HADDOCK_DOCS = YES" >> mk/build.mk + + # not used outside of ghc's test + if [[ -n ${GHC_BUILD_DPH} ]]; then + echo "BUILD_DPH = YES" >> mk/build.mk + else + echo "BUILD_DPH = NO" >> mk/build.mk + fi + + # Any non-native build has to skip as it needs + # target haddock binary to be runnabine. + if ! is_native; then + # disable docs generation as it requires running stage2 + echo "HADDOCK_DOCS=NO" >> mk/build.mk + echo "BUILD_SPHINX_HTML=NO" >> mk/build.mk + echo "BUILD_SPHINX_PDF=NO" >> mk/build.mk + fi + + if is_crosscompile; then + # Install ghc-stage1 crosscompiler instead of + # ghc-stage2 cross-built compiler. + echo "Stage1Only=YES" >> mk/build.mk + fi + + # allows overriding build flavours for libraries: + # v - vanilla (static libs) + # p - profiled + # dyn - shared libraries + # example: GHC_LIBRARY_WAYS="v dyn" + if [[ -n ${GHC_LIBRARY_WAYS} ]]; then + echo "GhcLibWays=${GHC_LIBRARY_WAYS}" >> mk/build.mk + fi + echo "BUILD_PROF_LIBS = $(usex profile YES NO)" >> mk/build.mk + + # Get ghc from the unpacked binary .tbz2 + # except when bootstrapping we just pick ghc up off the path + if ! use ghcbootstrap; then + export PATH="${WORKDIR}/usr/bin:${PATH}" + fi + + echo "INTEGER_LIBRARY = $(usex gmp integer-gmp integer-simple)" >> mk/build.mk + + # don't strip anything. Very useful when stage2 SIGSEGVs on you + echo "STRIP_CMD = :" >> mk/build.mk + + local econf_args=() + + # GHC embeds toolchain it was built by and uses it later. + # Don't allow things like ccache or versioned binary slip. + # We use stable thing across gcc upgrades. + # User can use EXTRA_ECONF=CC=... to override this default. + econf_args+=( + AR=${CTARGET}-ar + CC=${CTARGET}-gcc + # these should be inferred by GHC but ghc defaults + # to using bundled tools on windows. + Windres=${CTARGET}-windres + DllWrap=${CTARGET}-dllwrap + # we set the linker explicitly below + --disable-ld-override + ) + case ${CTARGET} in + arm*) + # ld.bfd-2.28 does not work for ghc. Force ld.gold + # instead. This should be removed once gentoo gets + # a fix for R_ARM_COPY bug: https://sourceware.org/PR16177 + econf_args+=(LD=${CTARGET}-ld.gold) + ;; + sparc*) + # ld.gold-2.28 does not work for ghc. Force ld.bfd + # instead. This should be removed once gentoo gets + # a fix for missing --no-relax support bug: + # https://sourceware.org/ml/binutils/2017-07/msg00183.html + econf_args+=(LD=${CTARGET}-ld.bfd) + ;; + *) + econf_args+=(LD=${CTARGET}-ld) + esac + + if [[ ${CBUILD} != ${CHOST} ]]; then + # GHC bug: ghc claims not to support cross-building. + # It does, but does not distinct --host= value + # for stage1 and stage2 compiler. + econf_args+=(--host=${CBUILD}) + fi + + if use ghcmakebinary; then + # When building booting libary we are trying to + # bundle or restrict most of external depends + # with unstable ABI: + # - embed libffi (default GHC behaviour) + # - disable ncurses support for ghci (via haskeline) + # https://bugs.gentoo.org/557478 + # - disable ncurses support for ghc-pkg + echo "libraries/haskeline_CONFIGURE_OPTS += --flag=-terminfo" >> mk/build.mk + echo "utils/ghc-pkg_HC_OPTS += -DBOOTSTRAPPING" >> mk/build.mk + elif is_native; then + # using ${GTARGET}'s libffi is not supported yet: + # GHC embeds full path for ffi includes without /usr/${CTARGET} account. + econf_args+=(--with-system-libffi) + econf_args+=(--with-ffi-includes=$($(tc-getPKG_CONFIG) libffi --cflags-only-I | sed -e 's@^-I@@')) + fi + + einfo "Final mk/build.mk:" + cat mk/build.mk || die + + econf ${econf_args[@]} \ + --enable-bootstrap-with-devel-snapshot \ + $(use_enable elfutils dwarf-unwind) \ + $(use_enable numa) + + if [[ ${PV} == *9999* ]]; then + GHC_PV="$(grep 'S\[\"PACKAGE_VERSION\"\]' config.status | sed -e 's@^.*=\"\(.*\)\"@\1@')" + GHC_P=${PN}-${GHC_PV} + fi + fi # ! use binary +} + +src_compile() { + if ! use binary; then + # Stage1Only crosscompiler does not build stage2 + if ! is_crosscompile; then + # 1. build/pax-mark compiler binary first + emake ghc/stage2/build/tmp/ghc-stage2 + # 2. pax-mark (bug #516430) + pax-mark -m ghc/stage2/build/tmp/ghc-stage2 + # 2. build/pax-mark haddock using ghc-stage2 + if is_native; then + # non-native build does not build haddock + # due to HADDOCK_DOCS=NO, but it could. + emake utils/haddock/dist/build/tmp/haddock + pax-mark -m utils/haddock/dist/build/tmp/haddock + fi + fi + # 3. and then all the rest + emake all + fi # ! use binary +} + +src_test() { + # TODO: deal with: + # - sandbox (pollutes environment) + # - extra packages (to extend testsuite coverage) + # bits are taken from 'validate' + local make_test_target='test' # can be fulltest + # not 'emake' as testsuite uses '$MAKE' without jobserver available + make $make_test_target stage=2 THREADS=$(makeopts_jobs) +} + +src_install() { + if use binary; then + use prefix && mkdir -p "${ED}" + mv "${S}/usr" "${ED}" + else + [[ -f VERSION ]] || emake VERSION + + # -j1 due to a rare race in install script: + # make --no-print-directory -f ghc.mk phase=final install + # /usr/lib/portage/python3.4/ebuild-helpers/xattr/install -c -m 755 \ + # -d "/tmp/portage-tmpdir/portage/cross-armv7a-unknown-linux-gnueabi/ghc-9999/image/usr/lib64/armv7a-unknown-linux-gnueabi-ghc-8.3.20170404/include" + # /usr/lib/portage/python3.4/ebuild-helpers/xattr/install -c -m 644 utils/hsc2hs/template-hsc.h \ + # "/tmp/portage-tmpdir/portage/cross-armv7a-unknown-linux-gnueabi/ghc-9999/image/usr/lib64/armv7a-unknown-linux-gnueabi-ghc-8.3.20170404" + # /usr/bin/install: cannot create regular file \ + # '/tmp/portage-tmpdir/portage/cross-armv7a-unknown-linux-gnueabi/ghc-9999/image/usr/lib64/armv7a-unknown-linux-gnueabi-ghc-8.3.20170404': No such file or directory + emake -j1 install DESTDIR="${D}" + + # Skip for cross-targets as they all share target location: + # /usr/share/doc/ghc-9999/ + if ! is_crosscompile; then + dodoc "distrib/README" "LICENSE" "VERSION" + fi + + # rename ghc-shipped files to avoid collision + # of external packages. Motivating example: + # user had installed: + # dev-lang/ghc-7.8.4-r0 (with transformers-0.3.0.0) + # dev-haskell/transformers-0.4.2.0 + # then user tried to update to + # dev-lang/ghc-7.8.4-r1 (with transformers-0.4.2.0) + # this will lead to single .conf file collision. + local shipped_conf renamed_conf + local package_confdir="${ED}/usr/$(get_libdir)/$(cross)${GHC_P}/package.conf.d" + for shipped_conf in "${package_confdir}"/*.conf; do + # rename 'pkg-ver-id.conf' to 'pkg-ver-id-gentoo-${PF}.conf' + renamed_conf=${shipped_conf%.conf}-gentoo-${PF}.conf + mv "${shipped_conf}" "${renamed_conf}" || die + done + + # remove link, but leave 'haddock-${GHC_P}' + rm -f "${ED}"/usr/bin/$(cross)haddock + + if ! is_crosscompile; then + newbashcomp "${FILESDIR}"/ghc-bash-completion ghc-pkg + newbashcomp utils/completion/ghc.bash ghc + fi + fi + + # path to the package.cache + local package_confdir="${ED}/usr/$(get_libdir)/$(cross)${GHC_P}/package.conf.d" + PKGCACHE="${package_confdir}"/package.cache + # copy the package.conf.d, including timestamp, save it so we can help + # users that have a broken package.conf.d + cp -pR "${package_confdir}"{,.initial} || die "failed to backup intial package.conf.d" + + # copy the package.conf, including timestamp, save it so we later can put it + # back before uninstalling, or when upgrading. + cp -p "${PKGCACHE}"{,.shipped} \ + || die "failed to copy package.conf.d/package.cache" + + if is_crosscompile; then + # When we build a cross-compiler the layout is the following: + # usr/lib/${CTARGET}-ghc-${VER}/ contains target libraries + # but + # usr/lib/${CTARGET}-ghc-${VER}/bin/ directory + # containst host binaries (modulo bugs). + + # Portage's stripping mechanism does not skip stripping + # foreign binaries. This frequently causes binaries to be + # broken. + # + # Thus below we disable stripping of target libraries and allow + # stripping hosts executables. + dostrip -x "/usr/$(get_libdir)/$(cross)${GHC_P}" + dostrip "/usr/$(get_libdir)/$(cross)${GHC_P}/bin" + fi +} + +pkg_preinst() { + # have we got an earlier version of ghc installed? + if has_version "<${CATEGORY}/${PF}"; then + haskell_updater_warn="1" + fi +} + +pkg_postinst() { + ghc-reregister + + # path to the package.cache + PKGCACHE="${EROOT}/usr/$(get_libdir)/$(cross)${GHC_P}/package.conf.d/package.cache" + + # give the cache a new timestamp, it must be as recent as + # the package.conf.d directory. + touch "${PKGCACHE}" + + if [[ "${haskell_updater_warn}" == "1" ]]; then + ewarn + ewarn "\e[1;31m************************************************************************\e[0m" + ewarn + ewarn "You have just upgraded from an older version of GHC." + ewarn "You may have to run" + ewarn " 'haskell-updater'" + ewarn "to rebuild all ghc-based Haskell libraries." + ewarn + ewarn "\e[1;31m************************************************************************\e[0m" + ewarn + fi +} + +pkg_prerm() { + PKGCACHE="${EROOT}/usr/$(get_libdir)/$(cross)${GHC_P}/package.conf.d/package.cache" + rm -rf "${PKGCACHE}" + + cp -p "${PKGCACHE}"{.shipped,} +} + +pkg_postrm() { + ghc-package_pkg_postrm +} |