```sh git grep -l '^patch_args=-Np0' "srcpkgs/$1*/template" | while read template; do for p in ${template%/template}/patches/*; do sed -i ' \,^[+-][+-][+-] /dev/null,b /^[*-]\+ [0-9]\+\(,[0-9]\+\)\? [*-]\+$/b s,^[*][*][*] ,&a/, /^--- /{ s,\(^--- \)\(./\)*,\1a/, s,[.][Oo][Rr][Ii][Gg]\([ /]\),\1, s/[.][Oo][Rr][Ii][Gg]$// s/[.]patched[.]\([^.]\)/.\1/ h } /^+++ -/{ g s/^--- a/+++ b/ b } s,\(^+++ \)\(./\)*,\1b/, ' "$p" done sed -i '/^patch_args=/d' $template done ```
141 lines
3.9 KiB
Bash
141 lines
3.9 KiB
Bash
# Template file for 'j'
|
|
pkgname=j
|
|
_vmaj=901
|
|
_vmin=f
|
|
_vrel=${_vmaj}-release${_vmin:+-}${_vmin}
|
|
version=${_vmaj}.${_vmin}
|
|
revision=1
|
|
archs="aarch64* armv[67]* i686* x86_64*"
|
|
wrksrc="jsource-j${_vrel}"
|
|
makedepends="libedit-devel libgomp-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=6b1cdcc1a0c3d955e400cf676f115de51ef9d1da495d08721ee999f48f6f9209
|
|
|
|
_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 "/jversion/s@${_vmaj}@&-${_vmin}@;
|
|
/jplatform/s@unknown@${_jpl}@;
|
|
/jtype/s@beta@${_jtype}@;
|
|
/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
|
|
export USE_OPENMP=1
|
|
|
|
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
|
|
}
|