diff --git a/octave-10.2.0-0.build.sh b/octave-10.2.0-0.build.sh new file mode 100755 index 0000000..e7ab2af --- /dev/null +++ b/octave-10.2.0-0.build.sh @@ -0,0 +1,432 @@ +#! /bin/bash + +# ------------------------------------------------------------------- Debug + +# COOKIE=$(mcookie|cut -c-8); grep -v V_GREP_ME $0 > /dev/shm/runme-$COOKIE.sh ; sleep 0.3; exec bash /dev/shm/runme-$COOKIE.sh +# TESTING=1 + +# mind openblas.be0 lapack.be0 ... +BLASPRESENT=$(echo -e /usr/lib/libopenblas* '\n' /usr/lib/libblas* '\n' /usr/lib/liblapack* | grep -v '*' | wc -c) +test $BLASPRESENT != '0' -a -z "$NOBLASCHECK" && \ + echo -e '# Only build w/o system blas/lapack!\n# bee remove' \ + 'openblas-0.3.9-1.x86_64 lapack-3.10.1-1.x86_64' && \ + exit + +# ---------------------------------------------------------------- Preamble + +PKG=octave +VERSION=10.2.0 +BUILD=0 + +TASK=${TASK:-ALL} # when testing parts, do #> TASK=BLAS ./octave-10.1.0-0.build.sh + +PREFIX=/pkg/$PKG-$VERSION-$BUILD +if [ -n "$TESTING" ]; then PREFIX=/scratch/local2/$PKG-$VERSION-$BUILD ; fi + +PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin + +set -euv +umask 022 + +BUILD_TMPDIR=/scratch/local2/$PKG-$VERSION-$BUILD.$USER.build.tmp + +test -d $BUILD_TMPDIR && ( chmod -R u+rwx $BUILD_TMPDIR || true ; rm -rf $BUILD_TMPDIR ) +export TMPDIR=$BUILD_TMPDIR +export HOME=$BUILD_TMPDIR/home +mkdir -vp $HOME + +exec $PREFIX/profile <<-EOF + PATH=$PREFIX/bin:\$PATH + export JAVA_HOME=/pkg/openjdk-17.0.2.8-0 + export LD_LIBRARY_PATH=$PREFIX/lib\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} + PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig\${PKG_CONFIG_PATH:+:\$PKG_CONFIG_PATH} + export PKG_CONFIG_PATH + if [ -d $PREFIX/.compatlibs ]; then export LD_LIBRARY_PATH=$PREFIX/.compatlibs\${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH ; fi +EOF +. $PREFIX/profile + +NPROC=$(( $(nproc) * 4 / 5 + 1 )) +export MAKEFLAGS="-j $NPROC" + +BUILDDIR=$PREFIX/build + +mkdir -p $BUILDDIR +cd $BUILDDIR + + +# ------------------------------------------------------------- Maintenance + +if [ $TASK = 'zap' ]; then # reset + cd $PREFIX + for DIR in $(find -maxdepth 1 -type d | grep -v build | grep -i [a-z]); do # exclude build and the sole 'dot' + rm -rf $DIR + done + for DIR in */*/build; do + rm -rf $DIR + done + # qhull is a bit different :/ + rm -rf build/qhull-2020.2 + + echo "# $PREFIX cleaned ..." + exit +fi + +# ------------------------------------------ Dependencies (mostly optional) + +( if ! [ $TASK = 'ALL' -o $TASK = 'QH' ]; then exit; fi + + # orig: http://www.qhull.org/download/qhull-2020-src-8.0.2.tgz + BEEHIVE=https://beehive.molgen.mpg.de/295f7332269a38279478f555cc185296/qhull-2020-src-8.0.2.tgz + + test -e qhull-2020-src-8.0.2.tgz || wget -nv $BEEHIVE + test -d qhull-2020.2 || tar -xf qhull-2020-src-8.0.2.tgz + + export CFLAGS='-O3 -fPIC' + export CXXFLAGS='-O3 -fPIC' + + cd qhull-2020.2/build + + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_SKIP_RPATH=ON \ + .. + + make -j $NPROC + make install + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'RJ' ]; then exit; fi + + # orig: https://github.com/Tencent/rapidjson/archive/refs/tags/v1.1.0.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/badd12c511e081fec6c89c43a7027bce/rapidjson-1.1.0.tar.gz + + test -e rapidjson-1.1.0.tar.gz || wget -nv $BEEHIVE + rm -rf rapidjson-1.1.0 + tar -xf rapidjson-1.1.0.tar.gz + + cd rapidjson-1.1.0 + + # # it is a header only library + # well, a 2016 release, and around thousand issues ... + + sed -i -e 's/-Werror//' CMakeLists.txt + sed -i -e 's/-Werror//' example/CMakeLists.txt + + # same as https://github.com/Tencent/rapidjson/commit/3b2441b8.patch + # Removed non-compiling assignment operator + sed -i -e '/^\s\s*GenericStringRef&\s\s*operator=/ d' include/rapidjson/document.h + + # issue #909, include/rapidjson/prettywriter.h + sed -i -e '45 s/> Base;$/, writeFlags> Base;/' include/rapidjson/prettywriter.h + + # issue #1718, include/rapidjson/writer.h + sed -i \ + -e '262 d' -e '252 a \\n static const size_t kDefaultLevelDepth = 32; // now unprotected' \ + include/rapidjson/writer.h + + mkdir -p build + cd build + + cmake \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DRAPIDJSON_HAS_STDSTRING=ON \ + -DRAPIDJSON_BUILD_CXX11=ON \ + -DRAPIDJSON_BUILD_DOC=OFF \ + -DRAPIDJSON_ENABLE_INSTRUMENTATION_OPT=OFF \ + .. + + make -j $NPROC + make install + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'GM' ]; then exit; fi + # GraphicsMagick: an ImageMagick fork + + # orig: https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/1.3.45/GraphicsMagick-1.3.45.tar.xz + BEEHIVE=https://beehive.molgen.mpg.de/5eb76e9af7b887a8828fce11aa1e2f1c/GraphicsMagick-1.3.45.tar.xz + + test -e GraphicsMagick-1.3.45.tar.xz || wget -nv $BEEHIVE + test -d GraphicsMagick-1.3.45 || tar -xf GraphicsMagick-1.3.45.tar.xz + + mkdir -p GraphicsMagick-1.3.45-build/build + cd GraphicsMagick-1.3.45-build/build + + ../../GraphicsMagick-1.3.45/configure \ + --prefix=$PREFIX \ + --enable-shared \ + --with-modules \ + --with-magick_plus_plus \ + --with-threads + + make -j $NPROC + make install + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'GL2' ]; then exit; fi + + # orig: https://geuz.org/gl2ps/src/gl2ps-1.4.2.tgz + BEEHIVE=https://beehive.molgen.mpg.de/0606554d833f4fd9f09eab48a374c785/gl2ps-1.4.2.tgz + + test -e gl2ps-1.4.2.tgz || wget -nv $BEEHIVE + test -d gl2ps-1.4.2 || tar -xf gl2ps-1.4.2.tgz + cd gl2ps-1.4.2 + + mkdir -p build + cd build + + export FORCE_SOURCE_DATE=1 # make pdftex adhere to SOURCE_DATE_EPOCH + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_EXE_LINKER_FLAGS=-lm \ + .. + + make -j $NPROC + make install + +) + + +# ------------------------ Blas is indeed not optional +( if ! [ $TASK = 'ALL' -o $TASK = 'BLAS' ]; then exit; fi + + # orig: https://github.com/OpenMathLib/OpenBLAS/releases/download/v0.3.30/OpenBLAS-0.3.30.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/8db3d57f4d4485c6ae3f21ea465660e7/OpenBLAS-0.3.30.tar.gz + + BLASVER=0.3.30 + + test -e OpenBLAS-0.3.30.tar.gz || wget -nv $BEEHIVE + test -d OpenBLAS-0.3.30 || tar -xf OpenBLAS-0.3.30.tar.gz + cd OpenBLAS-0.3.30 + + # only use all CPUs when told to do so (OPENBLAS_DEFAULT_NUM_THREADS, OPENBLAS_NUM_THREADS, GOTO_NUM_THREADS) + sed -i \ + -e '/^\s\s*else blas_num_threads = MAX_CPU_NUMBER;/ s/MAX_CPU_NUMBER/1/' \ + ./driver/others/memory{,_qalloc}.c + + COMMONFLAGS='-O2 -fPIC' + + CFLAGS=$COMMONFLAGS \ + ASMFLAGS=$COMMONFLAGS \ + FFLAGS=${COMMONFLAGS/ -Wformat -Werror=format-security/} \ + FC=gfortran \ + cmake \ + -B build \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DBUILD_RELAPACK=ON \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DBUILD_TESTING=OFF \ + -DNO_AFFINITY=ON \ + -DUSE_OPENMP=OFF \ + -DNO_WARMUP=1 \ + -DTARGET=CORE2 \ + -DNUM_THREADS=256 \ + -DDYNAMIC_ARCH=ON + + cmake --build build + + srcdir=$(pwd) + + # check + cd "$srcdir"/build + ctest + + cd "$srcdir" + cmake --install build + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'ARPNG' ]; then exit; fi + # orig: https://github.com/opencollab/arpack-ng/archive/refs/tags/3.9.1.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/8f66485ae9d7e676b42aeead2bf5757e/arpack-ng-3.9.1.tar.gz + # https://slackbuilds.org/repository/15.0/academic/arpack-ng/ + # postponed for the next build +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'QR' ]; then exit; fi + + # orig: https://github.com/mpimd-csc/qrupdate-ng/archive/refs/tags/v1.1.5.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/c5c61b8d6401508feefd56efed0f6a5a/qrupdate-ng-1.1.5.tar.gz + + test -e qrupdate-ng-1.1.5.tar.gz || wget -nv $BEEHIVE + test -d qrupdate-ng-1.1.5 || tar -xf qrupdate-ng-1.1.5.tar.gz + cd qrupdate-ng-1.1.5 + + mkdir -p build + cd build + + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + .. + + make -j $NPROC + make install + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'SSP' ]; then exit; fi + + # orig: https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/refs/tags/v7.10.3.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/d824ca42257575397d384bbbf99cf10e/SuiteSparse-7.10.3.tar.gz + + test -e SuiteSparse-7.10.3.tar.gz || wget -nv $BEEHIVE + test -d SuiteSparse-7.10.3 || tar -xf SuiteSparse-7.10.3.tar.gz + cd SuiteSparse-7.10.3 + + mkdir -p build + cd build + + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + .. + + make -j $NPROC + make install + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'SD' ]; then exit; fi + + # orig: https://github.com/LLNL/sundials/releases/download/v7.3.0/sundials-7.3.0.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/2e301e1ed3356b80145d7c142d467ec9/sundials-7.3.0.tar.gz + + test -e sundials-7.3.0.tar.gz || wget -nv $BEEHIVE + test -d sundials-7.3.0 || tar -xf sundials-7.3.0.tar.gz + cd sundials-7.3.0 + + mkdir -p build + cd build + + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + -DENABLE_KLU=ON \ + -DEXAMPLES_ENABLE_C=OFF \ + -DEXAMPLES_ENABLE_CXX=OFF \ + -DEXAMPLES_INSTALL=OFF \ + .. + + make -j $NPROC + make install + +) + +# ------------------------------------------------------------------ Octave + +( if ! [ $TASK = 'ALL' -o $TASK = 'OCT' ]; then exit; fi + + # orig: https://ftp.halifax.rwth-aachen.de/gnu/octave/octave-10.2.0.tar.gz + BEEHIVE=https://beehive.molgen.mpg.de/ff45483bef60b83f5b95cc5dd477e206/octave-10.2.0.tar.gz + + test -e octave-10.2.0.tar.gz || wget -nv $BEEHIVE + test -d octave-10.2.0 || tar -xf octave-10.2.0.tar.gz + + mkdir -p octave-10.2.0-build/build + cd octave-10.2.0-build/build + + LDFLAGS=${LDFLAGS:-} + # lsundials_core -> Workaround build failure with sundials 7 + # LDFLAGS+=" -lsundials_core" \ + + COMMONBUILDFLAGS='-O2 -fPIC -I $PREFIX/include' + + OPENBLASLIB="$PREFIX/lib/libopenblas.so.0.3" + + LDFLAGS+=" -L$PREFIX/lib" \ + ../../octave-10.2.0/configure V=1 \ + --prefix=$PREFIX \ + --with-openssl=auto \ + --with-blas=$OPENBLASLIB \ + --with-lapack=$OPENBLASLIB \ + CFLAGS="$COMMONBUILDFLAGS" \ + CXXFLAGS="$COMMONBUILDFLAGS" \ + FFLAGS="$COMMONBUILDFLAGS" \ + FCFLAGS="$COMMONBUILDFLAGS" + + sed -i 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool # Fix overlinking + + make -j $NPROC V=1 + make install + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'PKG' ]; then exit; fi + # also install some popular packages + # --> https://gnu-octave.github.io/packages/ + + mkdir -p packages_global + cd packages_global + + # arduino: would be a nice to have, but probably the hardware libs are missing, so skip them for now + # https://downloads.sourceforge.net/project/octave/Octave%20Forge%20Packages/Individual%20Package%20Releases/instrument-control-0.9.4.tar.gz \ + # https://github.com/gnu-octave/octave-arduino/releases/download/release-0.12.1/arduino-0.12.1.tar.gz ; do + + + # Thu Jul 3 15:20:50 CEST 2025 - new failures + # https://github.com/ltfat/ltfat/releases/download/v2.6.0/ltfat-2.6.0-of.tar.gz \ + # https://github.com/PREDICT-EPFL/piqp/releases/download/v0.4.1/piqp-octave.tar.gz \ + # https://github.com/shsajjadi/OctaveCoder/releases/download/coder-1.9.2/coder-1.9.2.tar.gz \ + + # cache em ... + for PKG in \ + https://github.com/gnu-octave/pkg-control/releases/download/control-4.1.1/control-4.1.1.tar.gz \ + https://github.com/gnu-octave/pkg-octave-doc/archive/refs/tags/release-0.5.5.tar.gz \ + https://downloads.sourceforge.net/project/octave/Octave%20Forge%20Packages/Individual%20Package%20Releases/symbolic-3.2.1.tar.gz \ + https://github.com/ONSAS/ONSAS.m/archive/refs/tags/v0.2.5.tar.gz \ + https://github.com/stk-kriging/stk/releases/download/2.8.1/stk-2.8.1-octpkg.tar.gz \ + https://github.com/apjanke/octave-tablicious/releases/download/v0.4.4/tablicious-0.4.4.tar.gz \ + https://github.com/gnu-octave/statistics/archive/refs/tags/release-1.7.3.tar.gz \ + https://sourceforge.net/projects/geographiclib/files/distrib-Octave/geographiclib-octave-2.3.3.tar.gz \ + https://github.com/gnu-octave/statistics-resampling/archive/refs/tags/5.6.0.tar.gz \ + https://github.com/wgreene310/pde1dm/archive/v1.3.tar.gz \ + https://github.com/gapost/hdf5oct/archive/refs/tags/1.0.0.tar.gz ; do + BN=${PKG##*/} + if ! [ -e "$BN" ]; then wget -nv "$PKG"; fi + TARS+=($BN) + done + + # install + for TAR in ${TARS[*]}; do + echo "# ====== installing $TAR" + echo pkg install -verbose -global $TAR | octave --no-gui + echo "# ===================================================== DONE" + done + +) + +( if ! [ $TASK = 'ALL' -o $TASK = 'LIBCHK' ]; then exit; fi + # do some bookkeeping on the libs, use readelf, ldd + cd $PREFIX + # find -type f -name 'lib*.so.*' | grep -v /build + for SO in $(find lib -type f -name 'lib*.so.*'); do + echo "# --- $SO ---" + readelf -d $SO | grep -i -e needed -e soname -e rpath + echo '' + ldd $SO | cut -f2- + echo '' + done 2>&1 | tee $BUILDDIR/lib_report + echo "# created $BUILDDIR/lib_report" +) + +# -------------------------------------------------------------------- Done