The primary change here is to remove the previous restrictions on `arch`. To accomplish this, several tweaks were needed to coax the upstream build scripts to behave more reasonably. These changes also uncovered the fact that the scripts were not respecting the CFLAGS and LDFLAGS of the environment. This commit also fixes that. For details about the specific changes to upstream we introduce, see the accompanying comments in the template.
140 lines
3.9 KiB
Bash
140 lines
3.9 KiB
Bash
# Template file for 'j'
|
|
pkgname=j
|
|
_vmaj=901
|
|
_vmin=e
|
|
_vrel=${_vmaj}-release${_vmin:+-}${_vmin}
|
|
version=${_vmaj}.${_vmin}
|
|
revision=4
|
|
archs="aarch64* armv[67]* i686* x86_64*"
|
|
wrksrc="jsource-j${_vrel}"
|
|
makedepends="libedit-devel libgomp-devel libomp-devel"
|
|
short_desc="Modern, high-performance, ASCII-based successor to APL"
|
|
maintainer="B. Wilson <x@wilsonb.com>"
|
|
license="GPL-3.0-or-later"
|
|
homepage="https://jsoftware.com/"
|
|
distfiles="https://github.com/jsoftware/jsource/archive/j${_vrel}.tar.gz"
|
|
checksum=23d1cac75ae8426d4e301b178fac1f29e85d7a0c80cefe4740c104d9c1eeab7a
|
|
|
|
_jsz="j${XBPS_TARGET_WORDSIZE}"
|
|
_jtype="release"
|
|
_jbuilder="voidlinux.org"
|
|
_jlib="/usr/lib/j"
|
|
_jshare="/usr/share/j"
|
|
_jetc="/etc/j"
|
|
_juser=".j"
|
|
|
|
case "${XBPS_TARGET_MACHINE}" in
|
|
aarch64*|arm*) _jpl="raspberry";;
|
|
*) _jpl="linux";;
|
|
esac
|
|
|
|
case "${XBPS_TARGET_MACHINE}" in
|
|
*-musl) makedepends+=" musl-fts-devel";;
|
|
esac
|
|
|
|
|
|
do_configure() {
|
|
cp jsrc/jversion-x.h jsrc/jversion.h
|
|
vsed -i "/jplatform/s@unknown@${_jpl}@;
|
|
/jtype/s@beta@${_jtype}-${_vmin}@;
|
|
/jbuilder/s@unknown@${_jbuilder}@" \
|
|
jsrc/jversion.h
|
|
|
|
# Remove version directory component from "~install" and "~user" paths
|
|
cp jlibrary/bin/profile.ijs jlibrary/bin/profile.ijs.new
|
|
vsed -i "/^install=./s@/usr/share/j/[0-9.]\+@${_jshare}@;
|
|
/^user=./s@home,userx@home,'/${_juser}'@" \
|
|
jlibrary/bin/profile.ijs.new
|
|
|
|
# Munge the build scripts into reason:
|
|
# 1) Short-circut their fragile compiler detection to directly use gcc;
|
|
# 2) Make sure they pick up our CFLAGS and LDFLAGS; and
|
|
# 3) Ensure they propogate errors to do_build()
|
|
vsed -i '/^compiler/s/=.*/=gcc/;
|
|
/^common="\$common/n;
|
|
/^common/s/="/&$CFLAGS /;
|
|
/^LDFLAGS/s/="/&$LDFLAGS /;
|
|
/^#!/a\set -o errexit' \
|
|
make2/build_jconsole.sh make2/build_libj.sh
|
|
}
|
|
|
|
##
|
|
# Crossbuilds do not distinguish between AVX- and non-AVX targets, so instead
|
|
# we build all applicable binaries and install a wrapper script that executes
|
|
# the correct one on the target machine.
|
|
do_build() {
|
|
cd make2 # The build scripts assume this is $PWD
|
|
|
|
jplatform=${_jpl} j64x=${_jsz} ./build_jconsole.sh
|
|
jplatform=${_jpl} j64x=${_jsz} ./build_libj.sh
|
|
|
|
if [ "${_jsz}" = 'j64' ]; then
|
|
jplatform=${_jpl} j64x=${_jsz}avx ./build_jconsole.sh
|
|
jplatform=${_jpl} j64x=${_jsz}avx ./build_libj.sh
|
|
|
|
jplatform=${_jpl} j64x=${_jsz}avx2 ./build_jconsole.sh
|
|
jplatform=${_jpl} j64x=${_jsz}avx2 ./build_libj.sh
|
|
fi
|
|
}
|
|
|
|
do_check() {
|
|
if [ -d "${_jlib}/j64avx2" ] \
|
|
&& sed -n '/^flags/{s/\<avx2\>//;t;q1}' /proc/cpuinfo; then
|
|
javx='avx2'
|
|
elif [ -d "${_jlib}/j64avx" ] \
|
|
&& sed -n '/^flags/{s/\<avx\>//;t;q1}' /proc/cpuinfo; then
|
|
javx='avx'
|
|
else
|
|
javx=''
|
|
fi
|
|
|
|
mkdir -p test/bin
|
|
cp -r jlibrary/addons test/bin
|
|
cp -r jlibrary/system test/bin
|
|
cp -r jlibrary/tools test/bin
|
|
cp -r "bin/${_jpl}/${_jsz}${javx}" test/bin
|
|
cp jlibrary/bin/profile.ijs "test/bin/${_jsz}${javx}"
|
|
|
|
echo 'RECHO ddall' | "test/bin/${_jsz}${javx}/jconsole" test/tsu.ijs
|
|
}
|
|
|
|
##
|
|
# Script to detect AVX/AVX2 support and launch appropriate jconsole binary
|
|
_jconsole_wrapper_script() {
|
|
cat <<JC
|
|
#!/usr/bin/env sh
|
|
|
|
cpu_has_avx() { sed -n '/^flags/{s/\<avx\>//;t;q1}' /proc/cpuinfo; }
|
|
cpu_has_avx2() { sed -n '/^flags/{s/\<avx2\>//;t;q1}' /proc/cpuinfo; }
|
|
|
|
if [ -d "${_jlib}/j64avx2" ] && cpu_has_avx2; then
|
|
javx='avx2'
|
|
elif [ -d "${_jlib}/j64avx" ] && cpu_has_avx; then
|
|
javx='avx'
|
|
elif [ -d "${_jlib}/j64" ]; then
|
|
javx=''
|
|
else
|
|
>&2 echo "\${0}: Cannot find jconsole executable"
|
|
exit 1
|
|
fi
|
|
|
|
exec ${_jlib}/${_jsz}\${javx}/jconsole -jprofile "${_jetc}/profile.ijs" "\${@}"
|
|
JC
|
|
}
|
|
|
|
do_install() {
|
|
vmkdir "${_jshare}" 0755
|
|
vcopy jlibrary/system "${_jshare}"
|
|
vcopy jlibrary/tools "${_jshare}"
|
|
|
|
vmkdir "${_jlib}" 0755
|
|
vcopy "bin/${_jpl}/*" "${_jlib}"
|
|
|
|
vmkdir "${_jetc}" 0755
|
|
vinstall "${FILESDIR}/profilex_template.ijs" 644 "${_jetc}"
|
|
vinstall "jlibrary/bin/profile.ijs.new" 644 "${_jetc}" profile.ijs
|
|
|
|
_jconsole_wrapper_script >bin/jc.sh
|
|
vbin "bin/jc.sh" jc
|
|
}
|