# Maintainer: Mitch Tishmack <mitch.tishmack@gmail.com>
setvar pkgname = 'ghc'
setvar pkgver = '8.0.2'
setvar pkgrel = '6'
setvar pkgdesc = ""The Glasgow Haskell Compiler""
setvar url = ""http://haskell.org""
setvar 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
setvar 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
setvar depends = ""gmp-dev perl gcc>=6.2.1 llvm3.7 libffi-dev""
setvar makedepends_build = ""$pkgname autoconf cpio binutils-gold paxmark libffi-dev ncurses-dev""
setvar makedepends_host = ""linux-headers musl-dev zlib-dev gmp-dev binutils-dev libffi-dev ncurses-dev""
setvar makedepends = ""$makedepends_build $makedepends_host""
setvar checkdepends = ""python2""
setvar 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
	""
setvar subpackages = ""$pkgname-doc $pkgname-dev""
setvar install = ""$pkgname.post-install""
setvar options = ""!strip""  # we strip it manually in build()
setvar 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
	""
setvar builddir = ""$srcdir/$pkgname-$pkgver""

proc prepare {
	default_prepare

	cp mk/build.mk.sample mk/build.mk

	cat >> mk/build.mk <<< """
		BuildFlavour         = perf-llvm
		INTEGER_LIBRARY      = integer-gmp
		BeConservative       = YES
		V                    = 0
		GhcStage3HcOpts     += -O3
		SplitSections        = YES
"""

	if test $CBUILD != $CTARGET {
		# cross-build
		cat >> mk/build.mk <<< """
			HADDOCK_DOCS         = NO
			BUILD_SPHINX_HTML    = NO
			BUILD_SPHINX_PS      = NO
			BUILD_SPHINX_PDF     = NO
"""
	}

	# Due to patches to the configure script
	autoreconf
}

proc build {
	cd $builddir

	local ffi_inc=$(pkg-config libffi --cflags-only-I); setvar ffi_inc = "${ffi_inc%% }"
	local ffi_lib=$(pkg-config libffi --libs-only-L); setvar 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
}

proc check {
	cd "$builddir/testsuite"
	make fast THREADS=$JOBS
}

proc doc {
	default_doc
	install -Dm644 "$builddir/LICENSE" \
		"$subpkgdir/usr/share/licenses/$subpkgname/LICENSE"
}

proc 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 test -d usr/lib/$CTARGET-ghc-$pkgver {
		# different location
		setvar ghclib = ""usr/lib/$CTARGET-ghc-$pkgver""

		# Rename binaries and fix links.
		local path; for path in usr/bin/"$CTARGET"-* {
			setvar newpath = "${path//$CTARGET-/}"

			if test -h $path {
				setvar target = "$(readlink $path)"
				ln -sf ${target//$CTARGET-/} $newpath
				rm $path
			} else {
				mv $path $newpath
			}
		}

		# 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
	}

	# 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.
proc dev {
	setvar pkgdesc = ""$pkgdesc (development files)""
	setvar 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
}

setvar 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""