# Template file for 'dmd'
pkgname=dmd
version=2.101.1
revision=1
create_wrksrc=yes
hostmakedepends="dmd2.091 which"
makedepends="git"
depends="libphobos>=${version} gcc"
short_desc="Digital Mars D compiler"
maintainer="streaks <assemblyislaw@gmail.com>"
license="BSL-1.0"
homepage="http://www.digitalmars.com/d/2.0/"
distfiles="
 https://github.com/dlang/dmd/archive/refs/tags/v${version}.tar.gz>dmd-${version}.tar.gz
 https://github.com/dlang/phobos/archive/v${version}.tar.gz>phobos-${version}.tar.gz
 http://downloads.dlang.org/releases/2.x/${version}/dmd.${version}.linux.tar.xz"
checksum="e369396dbbe4eec9311122fa24c975688b209a000bf2062a9f86b49ab2e4a7b0
 8a275b3f46d921be87744ec80d3094421a979d6f607dbd43e88e251bbb3f503a
 58333e57ed3812077dc2f8cc8759998b3b59c9ea3dbe01571eab4b2944a84bfe"
conf_files="/etc/dmd.conf"
provides="d-compiler-${version}_${revision}"
conflicts="dmd-bootstrap dmd2.081 dmd2.091"
nopie=yes
# from no to very little distinction between host CC and target CC in
# makefiles or build.d
nocross="broken build system"
disable_parallel_build=yes
LDFLAGS="-lpthread"

case "$XBPS_TARGET_MACHINE" in
	x86_64*) _archbits=64;;
	i686) _archbits=32;;
	*) broken="unsupported arch upstream";;
esac

post_extract() {
	mv dmd-${version} dmd
	mv phobos-${version} phobos
}

post_patch() {
	if [ "$XBPS_TARGET_LIBC" = musl ]; then
		patch -p0 < ${FILESDIR}/musl.patch
	fi
}

do_build() {
	local dmd

	cd dmd
	make ${makejobs} -f posix.mak MODEL=${_archbits} TARGET_CPU=X86 ENABLE_RELEASE=1 PIC=1
	dmd=${wrksrc}/dmd/generated/linux/release/$_archbits/dmd

	make ${makejobs} -C compiler/docs

	cd ../phobos
	make ${makejobs} -f posix.mak MODEL=${_archbits} DMD=$dmd ENABLE_RELEASE=1 PIC=1
}

do_install() {
	cd dmd
	vbin generated/linux/release/$_archbits/dmd
	vinstall ${FILESDIR}/dmd.conf 644 etc

	vman generated/docs/man/man1/dmd.1
	vman generated/docs/man/man5/dmd.conf.5
}

dmd-doc_package() {
	short_desc="Documentation and sample code for D programming language"
	replaces="dmd-docs>=0"
	license="BSL-1.0"

	pkg_install() {
		cd dmd2

		vmkdir usr/share/doc/d
		vcopy samples usr/share/doc/d
		vcopy html usr/share/doc/d

		find ${PKGDESTDIR}/usr/share/doc/d -type f | xargs chmod 0644

		vlicense license.txt
	}
}

libphobos_package() {
	short_desc+=" - standard library"
	license="BSL-1.0"
	conflicts="dmd-bootstrap dmd2.081 dmd2.091"
	pkg_install() {
		vinstall ${wrksrc}/dmd/generated/linux/release/$_archbits/libdruntime.a 644 usr/lib libdruntime.a
		vinstall ${wrksrc}/phobos/generated/linux/release/$_archbits/libphobos2.a 644 usr/lib libphobos2.a

		vmkdir usr/include/d
		cp -r ${wrksrc}/phobos/{*.d,etc,std} ${PKGDESTDIR}/usr/include/d

		vmkdir usr/include/d/druntime
		cp -r ${wrksrc}/dmd/druntime/import ${PKGDESTDIR}/usr/include/d/druntime

		vlicense ${wrksrc}/dmd/LICENSE.txt
	}
}
