-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
template
153 lines (136 loc) · 4.98 KB
/
template
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
# Template file for 'ghc'
pkgname=ghc
# Keep this synchronized with http://www.stackage.org/lts
version=9.0.2
revision=2
build_style=gnu-configure
hostmakedepends="automake docbook-xsl ghc-bin libxslt libnuma-devel
ncurses-devel python3-Sphinx python3-setuptools"
makedepends="libnuma-devel"
depends="perl gcc libffi-devel gmp-devel libnuma-devel"
short_desc="Glorious Haskell Compiler"
maintainer="Orphaned <orphan@voidlinux.org>"
license="BSD-3-Clause"
homepage="http://www.haskell.org/ghc/"
distfiles="http://www.haskell.org/ghc/dist/${version%[!0-9]}/${pkgname}-${version%[!0-9]}-src.tar.xz"
checksum=140e42b96346322d1a39eb17602bcdc76e292028ad4a69286b230bab188a9197
nocross=yes # this is conditionally unset for cross bindist
nodebug=yes # work around assembler error "Fatal error: duplicate .debug_line sections"
_bindir="/usr/lib/${pkgname}-${version}/bin"
nopie_files="
${_bindir}/ghc
${_bindir}/ghc-iserv
${_bindir}/ghc-iserv-dyn
${_bindir}/ghc-iserv-prof
${_bindir}/ghc-pkg
${_bindir}/haddock
${_bindir}/hp2ps
${_bindir}/hpc
${_bindir}/hsc2hs
${_bindir}/runghc
${_bindir}/unlit
"
build_options="bindist"
desc_option_bindist="Create a binary distribution"
# it is not possible to cross-compile an entire ghc distribution as
# some components rely on stage2 binaries being runnable on the host
# even cross-compiled bindists are incomplete, and you should only
# use them to compile proper bindists on newly bootstrapped targets
if [ -z "$build_option_bindist" ]; then
# final package builds use system libffi as well as gmp and ncurses
configure_args=" --with-system-libffi"
makedepends+=" libffi-devel ncurses-devel gmp-devel"
elif [ -z "$CROSS_BUILD" ]; then
# native bindist builds use gmp and ncurses, but builtin libffi
makedepends+=" ncurses-devel gmp-devel"
elif [ "${XBPS_MACHINE%-*}" != "${XBPS_TARGET_MACHINE%-*}" ]; then
# ghc's cross mode only works when the actual target arch differs
# i.e. cross-compiling to same arch but different libc does not work
unset nocross
# host must equal build and target must be set when cross-compiling
configure_args+=" --host=${XBPS_TRIPLET} --target=${XBPS_CROSS_TRIPLET}"
fi
case "$XBPS_TARGET_MACHINE" in
aarch64*)
# GHC uses LLVM to generate code on aarch64
hostmakedepends+=" llvm17-devel"
depends+=" llvm17-devel"
;;
esac
# Recent safe to use tarball
# GHC's bundled tarball is from 2017, buggy on some archs
_ffi_rev=4d6d2866ae43e55325e8ee96561221804602cd7a
if [ "$build_option_bindist" ]; then
# Required to make the binary distribution tarball
hostmakedepends+=" tar xz libtool libltdl-devel"
# Fetch a safe libffi tarball
distfiles+=" https://github.com/libffi/libffi/archive/${_ffi_rev}.tar.gz>libffi-${_ffi_rev}.tar.gz"
checksum+=" f7a17fa61261942e93450ec52272b5f09d8f42cfffd147867587f969ee01b739"
skip_extraction+=" libffi-${_ffi_rev}.tar.gz"
fi
post_extract() {
[ "$build_option_bindist" ] || return 0
# update libffi for all bindists
rm -f libffi-tarballs/libffi-*.tar.gz
cp ${XBPS_SRCDISTDIR}/${pkgname}-${version}/libffi-${_ffi_rev}.tar.gz \
libffi-tarballs
[ "$CROSS_BUILD" ] || return 0
# create build config for cross bindists
local flav="quick"
echo "BuildFlavour = ${flav}" >> mk/build.mk
cat mk/flavours/${flav}.mk >> mk/build.mk
# gmp segfaults when cross-built
echo "INTEGER_LIBRARY = integer-simple" >> mk/build.mk
# otherwise needs ncurses for target
echo "WITH_TERMINFO = NO" >> mk/build.mk
# cannot be cross-compiled
echo "HADDOCK_DOCS = NO" >> mk/build.mk
# just wastes time
echo "BUILD_SPHINX_HTML = NO" >> mk/build.mk
echo "BUILD_SPHINX_PDF = NO" >> mk/build.mk
echo "BUILD_MAN = NO" >> mk/build.mk
}
pre_configure() {
# stage0 and stage1 are built for build/host (which are the
# same in ghc) and stage2 is built for target (when cross)
export CONF_CC_OPTS_STAGE0=$CFLAGS_FOR_BUILD
export CONF_CC_OPTS_STAGE1=$CFLAGS_FOR_BUILD
export CONF_CC_OPTS_STAGE2=$CFLAGS
export CONF_GCC_LINKER_OPTS_STAGE0=$LDFLAGS_FOR_BUILD
export CONF_GCC_LINKER_OPTS_STAGE1=$LDFLAGS_FOR_BUILD
export CONF_GCC_LINKER_OPTS_STAGE2=$LDFLAGS
export CONF_CPP_OPTS_STAGE0=$CPPFLAGS_FOR_BUILD
export CONF_CPP_OPTS_STAGE1=$CPPFLAGS_FOR_BUILD
export CONF_CPP_OPTS_STAGE2=$CPPFLAGS
autoreconf -fi
}
post_install() {
sed -i 's#/usr/lib/ccache/bin/##g' ${DESTDIR}/usr/lib/ghc-${version%[!0-9]}/settings
vlicense LICENSE
local arch dest
if [ "$CROSS_BUILD" ]; then
arch=${XBPS_CROSS_TRIPLET%%-*}
else
arch=${XBPS_TRIPLET%%-*}
fi
if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
dest=ghc-${version}-${arch}-void-linux-musl.tar.xz
else
dest=ghc-${version}-${arch}-void-linux.tar.xz
fi
if [ "$build_option_bindist" ]; then
msg_normal "Creating binary distribution for ${XBPS_TARGET_MACHINE}...\n"
make ${makejobs} binary-dist
mkdir -p ${XBPS_SRCDISTDIR}/distfiles
mv ghc-${version}-${arch}-unknown-linux.tar.xz ${dest}
install -m 0644 ${dest} ${XBPS_SRCDISTDIR}/distfiles
msg_normal "Installed in ${XBPS_SRCDISTDIR}/distfiles\n"
exit 1
fi
}
ghc-doc_package() {
short_desc+=" -- documentation"
pkg_install() {
vmove usr/share/doc
}
}