# Template file for 'j' pkgname=j _vmaj=901 _vmin=e _vrel=${_vmaj}-release${_vmin:+-}${_vmin} version=${_vmaj}.${_vmin} revision=5 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 " 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 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/\//;t;q1}' /proc/cpuinfo; then javx='avx2' elif [ -d "${_jlib}/j64avx" ] \ && sed -n '/^flags/{s/\//;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 <//;t;q1}' /proc/cpuinfo; } cpu_has_avx2() { sed -n '/^flags/{s/\//;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 }