aboutsummaryrefslogtreecommitdiffstats
path: root/community/ghc/APKBUILD
blob: 9b922eb4aebf2c9d1e750090de004a6937d246a3 (plain) (blame)
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
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"