aboutsummaryrefslogtreecommitdiffstats
path: root/testing/ghc/APKBUILD
blob: e3fbfcce96c972c9e72f0f44ad96e50da69f7d88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#-*-mode: Shell-script; coding: utf-8;-*-
# Maintainer: Mitch Tishmack <mitch.tishmack@gmail.com>
pkgname=ghc
pkgver=8.0.2
pkgrel=2
pkgdesc="The Glasgow Haskell Compiler"
url="http://haskell.org"
subpackages="$pkgname-doc $pkgname-dev"
arch="x86_64 armhf"
builddir="$srcdir/$pkgname-$pkgver"
source="http://downloads.haskell.org/~ghc/${pkgver}/ghc-${pkgver}-src.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
	"

# Note ghc's license is basically bsd3. If you'd like to know more visit:
# https://www.haskell.org/ghc/license
# https://ghc.haskell.org/trac/ghc/wiki/Licensing
#
# Note also 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
license="custom:bsd3"

# Note, gcc supports --no-pie on alpine linux 3.5+ only. We test for
# that version as it greatly simplifies the apkbuild process. The
# apks built on 3.5 will not work on any prior version of alpine linux.
depends="gmp-dev perl gcc>=6.2.1 llvm3.7"
provides="ghc-bootstrap=$pkgver-r$pkgrel
	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
	"
install="$pkgname.post-install"

# ghc build dependencies
makedepends_build="autoconf cpio binutils-gold paxmark ghc-bootstrap binutils-gold 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"

prepare() {
	default_prepare || return 1
	cp mk/build.mk.sample mk/build.mk || return 1
	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 || return 1
}

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%% }"
	./configure \
		--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 \
		|| return 1
	make || return 1
}

doc() {
	default_doc
	install -Dm644 "$builddir/LICENSE" "$subpkgdir/usr/share/licenses/$subpkgname/LICENSE" || return 1
}

package() {
	cd "$builddir"
	make -j1 DESTDIR="$pkgdir" install || return 1

	local _ghclib="usr/lib/ghc-$pkgver"

	# Fixup install tree if needed
	if [ -d "$pkgdir/usr/lib/$CTARGET-ghc-$pkgver" ]; then
		# different location
		_ghclib="usr/lib/$CTARGET-ghc-$pkgver"
		# rename binaries, and fix links
		local fn; for fn in "$pkgdir"/usr/bin/"$CTARGET"-*; do
			local _new="${fn//${CTARGET}-/}"
			if [ -h "$fn" ]; then
				local _target="$(readlink $fn)"
				ln -sf "${_target//${CTARGET}-/}" "$_new" || return 1
				rm "$fn" || return 1
			else
				mv "$fn" "$_new" || return 1
			fi
		done
	fi

	# Can't do a full strip on archives.
	find "$pkgdir" -type f \( -name "*.so" -o -name "*.a" \) -exec ${CROSS_COMPILE}strip --strip-unneeded {} \;
	find "$pkgdir/$_ghclib/bin" -type f -exec ${CROSS_COMPILE}strip {} \;
	paxmark -m "$pkgdir/$_ghclib/bin/ghc" \
		"$pkgdir/$_ghclib/bin/ghc-iserv" \
		"$pkgdir/$_ghclib/bin/ghc-iserv-dyn" \
		"$pkgdir/$_ghclib/bin/ghc-iserv-prof"
}

dev() {
	# Like debian, we split apart the profiled archives/etc...
	# This drastically reduces the install size of the ghc pkg.
	cd "${pkgdir}" || return 1
	install -dm755 "${subpkgdir}" || return 1
	local PFILES=$(find . \( -type f -o -type l \) \( -name "*.p_*" -o -name "lib*_p.a" \))
	echo "${PFILES}" | cpio -pamVd "${subpkgdir}" || return 1
	echo "${PFILES}" | xargs rm -fr || return 1
}

sha512sums="58ea3853cd93b556ecdc4abd0be079b2621171b8491f59004ea4e036a4cba4470aaafe6591b942e0a50a64bdc47540e01fe6900212a1ef7087850112d9bfc5ef  ghc-8.0.2-src.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"