Skip to content

Commit

Permalink
Merge pull request #320 from mariux64/add-octave-9.4.0-0
Browse files Browse the repository at this point in the history
octave: update to 9.4.0
  • Loading branch information
thomas authored Mar 10, 2025
2 parents 12be660 + e046cdf commit 6b11fa7
Showing 1 changed file with 364 additions and 0 deletions.
364 changes: 364 additions & 0 deletions octave-9.4.0-0.build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,364 @@
#! /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

# ---------------------------------------------------------------- Preamble

PKG=octave
VERSION=9.4.0
BUILD=0

TASK=${TASK:-ALL} # when testing parts, do #> TASK=BLAS ./octave-9.4.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 -eu
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 </dev/null

mkdir -p $PREFIX
cat >$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 '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 (all 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 \
..

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

)

( if ! [ $TASK = 'ALL' -o $TASK = 'BLAS' ]; then exit; fi
# the one in the system is too old ...

# orig: https://github.com/OpenMathLib/OpenBLAS/archive/refs/tags/v0.3.29.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/853a0c5c0747c5943e7ef4bbb793162d/OpenBLAS-0.3.29.tar.gz

test -e OpenBLAS-0.3.29.tar.gz || wget -nv $BEEHIVE
test -d OpenBLAS-0.3.29 || tar -xf OpenBLAS-0.3.29.tar.gz
cd OpenBLAS-0.3.29

mkdir -p build
cd build

cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DCMAKE_PREFIX_PATH=$PREFIX \
-DDYNAMIC_ARCH=TRUE \
..

make -j $NPROC
make install

)

( 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.1.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/3b8c4f18091589da221a1acc5a331edb/SuiteSparse-7.10.1.tar.gz

test -e SuiteSparse-7.10.1.tar.gz || wget -nv $BEEHIVE
test -d SuiteSparse-7.10.1 || tar -xf SuiteSparse-7.10.1.tar.gz
cd SuiteSparse-7.10.1

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.2.1/sundials-7.2.1.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/afeab5b3d53eab290e93c955df26e998/sundials-7.2.1.tar.gz

test -e sundials-7.2.1.tar.gz || wget -nv $BEEHIVE
test -d sundials-7.2.1 || tar -xf sundials-7.2.1.tar.gz
cd sundials-7.2.1

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.fau.de/gnu/octave/octave-9.4.0.tar.gz
BEEHIVE=https://beehive.molgen.mpg.de/879fd8ecbdda563fa70cc7a3f61cbb11/octave-9.4.0.tar.gz

test -e octave-9.4.0.tar.gz || wget -nv $BEEHIVE
test -d octave-9.4.0 || tar -xf octave-9.4.0.tar.gz

mkdir -p octave-9.4.0-build/build
cd octave-9.4.0-build/build

LDFLAGS=${LDFLAGS:-}
# lsundials_core -> Workaround build failure with sundials 7
CFLAGS="-I $PREFIX/include" \
CXXFLAGS="-I $PREFIX/include" \
LDFLAGS+=" -L$PREFIX/lib" \
LDFLAGS+=" -lsundials_core" \
../../octave-9.4.0/configure \
--prefix=$PREFIX

sed -i 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool # Fix overlinking

make -j $NPROC
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

# 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://github.com/ltfat/ltfat/releases/download/v2.6.0/ltfat-2.6.0-of.tar.gz \
https://downloads.sourceforge.net/project/octave/Octave%20Forge%20Packages/Individual%20Package%20Releases/symbolic-3.2.1.tar.gz \
https://github.com/PREDICT-EPFL/piqp/releases/download/v0.4.1/piqp-octave.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/shsajjadi/OctaveCoder/releases/download/coder-1.9.2/coder-1.9.2.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

)

# -------------------------------------------------------------------- Done

0 comments on commit 6b11fa7

Please sign in to comment.