diff options
Diffstat (limited to 'academic/octave-forge')
-rw-r--r-- | academic/octave-forge/README | 25 | ||||
-rw-r--r-- | academic/octave-forge/doinst.sh | 1 | ||||
-rw-r--r-- | academic/octave-forge/generate-installscript.sh | 155 | ||||
-rw-r--r-- | academic/octave-forge/installscript.m | 1257 | ||||
-rw-r--r-- | academic/octave-forge/octave-forge.SlackBuild | 131 | ||||
-rw-r--r-- | academic/octave-forge/octave-forge.info | 8 | ||||
-rw-r--r-- | academic/octave-forge/slack-desc | 19 |
7 files changed, 1596 insertions, 0 deletions
diff --git a/academic/octave-forge/README b/academic/octave-forge/README new file mode 100644 index 0000000000..0804fe0f43 --- /dev/null +++ b/academic/octave-forge/README @@ -0,0 +1,25 @@ +This is a script to package Octave-Forge, the main source for +out-of-mainline Octave packages. + +The Octave-Forge packages are grouped into four categories (main, +extra, language and nonfree). By default the script packages all of +them, but you can specify a different behavior with the REPOS +variable. For example, + REPOS=main,extra ./octave-forge.SlackBuild +will build only the "main" and "extra" repositories. +Parallel compilation (JOBS=...) is not supported. + +If you want to build a newer version of Octave-Forge, you need to +regenerate the Octave script that performs the build itself. To do +this, run generate-installscript.sh after updating the usual variables +near the beginning. + +This script requires Octave, available on SlackBuilds.org. +Some packages also have dependencies on external components, not +available on stock Slackware or SlackBuilds.org. These components +(and, more generally, packages failing compilation) are automatically +excluded from the package. + +Note: on package removal, you should run as root: + mkdir -p /usr/share/octave/packages && \ + octave --silent --eval "pkg rebuild" diff --git a/academic/octave-forge/doinst.sh b/academic/octave-forge/doinst.sh new file mode 100644 index 0000000000..a374f3c189 --- /dev/null +++ b/academic/octave-forge/doinst.sh @@ -0,0 +1 @@ +octave --silent --eval "pkg rebuild" diff --git a/academic/octave-forge/generate-installscript.sh b/academic/octave-forge/generate-installscript.sh new file mode 100644 index 0000000000..c5aa1c138e --- /dev/null +++ b/academic/octave-forge/generate-installscript.sh @@ -0,0 +1,155 @@ +#!/bin/sh + +# Generate Octave script to install Octave-Forge packages respecting +# dependency constraints. +# The generated script must be run after setting: +# - main,extra,language,nonfree flags of enabled repositories to 1 +# - pkg_prefix=$PKG + +# Copyright 2008 Mauro Giachero +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PRGNAM=octave-forge +VERSION=bundle-20080507 +TMP=${TMP:-/tmp/SBo} +CWD=$(pwd) +INSTALLSCRIPT=${INSTALLSCRIPT:-installscript.m} + +set -e + +mkdir -p $TMP +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION + +EXIT_STATUS=0 +REPOS=$(ls --indicator-style=none) + +# Build packages list +pkgs_path=$(find . -name \*.gz) +pkgs_count=$(echo $pkgs_path |tr " " "\n" |wc -l) +pkgs_sort_path= +pkgs_sort_count=0 + +# Extract dependency information from packages +for pkg_path in $pkgs_path; do + pkg_name=$(basename $pkg_path |cut -d "-" -f 1) + tar xfO $pkg_path --wildcards \*/DESCRIPTION |grep "Depends:" |tr "," "\n" |grep -v "Depends:" |cut -d " " -f 2 >DEPS-$pkg_name +done + +# Generate Octave installation script +# Heading +for repo in $REPOS; do + # For each repository set the default value for the selection flag + echo "try $repo; catch $repo=0; end" >>$INSTALLSCRIPT +done +for pkg_path in $pkgs_path; do + # For each package, define an homonym flag to keep track of the + # successfully installed (built) packages. + echo $(basename $pkg_path |cut -d "-" -f 1)=0";" >>$INSTALLSCRIPT +done +# Create 3 files with the build results for the packages: +# - installed.tmp tracks successfully built packages; +# - broken.tmp tracks packages with build errors; +# - skipped.tmp tracks packages skipped due to missing prerequisites. +cat <<EOF >>$INSTALLSCRIPT +installed=fopen('installed.tmp','w'); +skipped=fopen('skipped.tmp','w'); +broken=fopen('broken.tmp','w'); +EOF +# Set the packages files/folders properly. +cat <<EOF >>$INSTALLSCRIPT +oldcwd=pwd; +cd(pkg_prefix); +pkg prefix ./usr/share/octave/packages ./usr/libexec/octave/packages ; +pkg local_list ./ll +pkg global_list ./gl +cd(oldcwd); +EOF +# Resolve dependencies. +BROKEN=0 # Detect broken dependency tree +while [ $pkgs_sort_count -ne $pkgs_count ] ; do # Some packages still to sort + BROKEN=1 + for pkg_path in $pkgs_path; do + if echo $pkgs_sort_path | grep -qvw $pkg_path; then # Not already in the sorted list + RESOLVED=1 + pkg_name=$(basename $pkg_path |cut -d "-" -f 1) + # "ifclause" is the install condition, to avoid trying to + # install packages when their prerequisites fail. + ifclause= + for dep in $(cat DEPS-$pkg_name); do + ifclause="$dep==1 && $ifclause" + if echo $pkgs_sort_path | grep -qvw $dep; then + # Still missing some dependency + RESOLVED=0 + fi + done + + if [ $RESOLVED -eq 1 ]; then + pkg_repository=$(echo $pkg_path |cut -d "/" -f 2) + ifclause="$ifclause $pkg_repository==1" + pkgs_sort_path="$pkgs_sort_path $pkg_path" + pkgs_sort_count=$(($pkgs_sort_count+1)) + #Output install command +cat <<EOF >>$INSTALLSCRIPT +if $ifclause + fprintf('%s','Building $pkg_name ($pkg_repository) [$pkgs_sort_count/$pkgs_count]... ') + try + pkg install $pkg_path + $pkg_name=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of $pkg_name aborted due to errors.') + fid=broken; + end +else + disp('Skipping $pkg_name ($pkg_repository) [$pkgs_sort_count/$pkgs_count].') + fid=skipped; +end +fprintf(fid,'%s\n','$pkg_name'); +EOF + # New dependency resolved, so the repository (still) looks ok + BROKEN=0 + fi + fi + done + + if [ $BROKEN -eq 1 ]; then + #A whole loop completed without resolving any dependency + echo "Error: broken dependency tree (some dependencies could not be resolved)" >&2 + EXIT_STATUS=1 + break + fi +done + +# Script tail +cat <<EOF >>$INSTALLSCRIPT +fclose(installed); +fclose(skipped); +fclose(broken); +EOF +mv $INSTALLSCRIPT $CWD + +# Remove temporary files +rm -f DEPS-* + +exit $EXIT_STATUS diff --git a/academic/octave-forge/installscript.m b/academic/octave-forge/installscript.m new file mode 100644 index 0000000000..b321283627 --- /dev/null +++ b/academic/octave-forge/installscript.m @@ -0,0 +1,1257 @@ +try extra; catch extra=0; end +try language; catch language=0; end +try main; catch main=0; end +try nonfree; catch nonfree=0; end +integration=0; +msh=0; +triangular=0; +nan=0; +mapping=0; +windows=0; +secs1d=0; +symband=0; +java=0; +ad=0; +engine=0; +pdb=0; +tsa=0; +graceplot=0; +jhandles=0; +multicore=0; +fpl=0; +ocs=0; +bim=0; +tcl=0; +civil=0; +secs2d=0; +xraylib=0; +data=0; +informationtheory=0; +miscellaneous=0; +special=0; +odepkg=0; +econometrics=0; +financial=0; +strings=0; +irsa=0; +vrml=0; +odebvp=0; +gsl=0; +audio=0; +time=0; +octcdf=0; +outliers=0; +ann=0; +parallel=0; +missing=0; +specfun=0; +physicalconstants=0; +ftp=0; +nnet=0; +statistics=0; +combinatorics=0; +optiminterp=0; +ga=0; +fixed=0; +zenity=0; +control=0; +splines=0; +optim=0; +bioinfo=0; +io=0; +plot=0; +database=0; +general=0; +image=0; +ident=0; +communications=0; +symbolic=0; +video=0; +sockets=0; +signal=0; +struct=0; +linear=0; +octgpr=0; +arpack=0; +spline=0; +pt_br=0; +installed=fopen('installed.tmp','w'); +skipped=fopen('skipped.tmp','w'); +broken=fopen('broken.tmp','w'); +oldcwd=pwd; +cd(pkg_prefix); +pkg prefix ./usr/share/octave/packages ./usr/libexec/octave/packages ; +pkg local_list ./ll +pkg global_list ./gl +cd(oldcwd); +if extra==1 + fprintf('%s','Building integration (extra) [1/73]... ') + try + pkg install ./extra/integration-1.0.5.tar.gz + integration=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of integration aborted due to errors.') + fid=broken; + end +else + disp('Skipping integration (extra) [1/73].') + fid=skipped; +end +fprintf(fid,'%s\n','integration'); +if extra==1 + fprintf('%s','Building triangular (extra) [2/73]... ') + try + pkg install ./extra/triangular-1.0.4.tar.gz + triangular=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of triangular aborted due to errors.') + fid=broken; + end +else + disp('Skipping triangular (extra) [2/73].') + fid=skipped; +end +fprintf(fid,'%s\n','triangular'); +if extra==1 + fprintf('%s','Building nan (extra) [3/73]... ') + try + pkg install ./extra/nan-1.0.6.tar.gz + nan=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of nan aborted due to errors.') + fid=broken; + end +else + disp('Skipping nan (extra) [3/73].') + fid=skipped; +end +fprintf(fid,'%s\n','nan'); +if extra==1 + fprintf('%s','Building mapping (extra) [4/73]... ') + try + pkg install ./extra/mapping-1.0.5.tar.gz + mapping=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of mapping aborted due to errors.') + fid=broken; + end +else + disp('Skipping mapping (extra) [4/73].') + fid=skipped; +end +fprintf(fid,'%s\n','mapping'); +if extra==1 + fprintf('%s','Building windows (extra) [5/73]... ') + try + pkg install ./extra/windows-1.0.5.tar.gz + windows=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of windows aborted due to errors.') + fid=broken; + end +else + disp('Skipping windows (extra) [5/73].') + fid=skipped; +end +fprintf(fid,'%s\n','windows'); +if extra==1 + fprintf('%s','Building secs1d (extra) [6/73]... ') + try + pkg install ./extra/secs1d-0.0.6.tar.gz + secs1d=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of secs1d aborted due to errors.') + fid=broken; + end +else + disp('Skipping secs1d (extra) [6/73].') + fid=skipped; +end +fprintf(fid,'%s\n','secs1d'); +if extra==1 + fprintf('%s','Building symband (extra) [7/73]... ') + try + pkg install ./extra/symband-1.0.6.tar.gz + symband=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of symband aborted due to errors.') + fid=broken; + end +else + disp('Skipping symband (extra) [7/73].') + fid=skipped; +end +fprintf(fid,'%s\n','symband'); +if extra==1 + fprintf('%s','Building java (extra) [8/73]... ') + try + pkg install ./extra/java-1.2.4.tar.gz + java=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of java aborted due to errors.') + fid=broken; + end +else + disp('Skipping java (extra) [8/73].') + fid=skipped; +end +fprintf(fid,'%s\n','java'); +if extra==1 + fprintf('%s','Building ad (extra) [9/73]... ') + try + pkg install ./extra/ad-1.0.2.tar.gz + ad=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of ad aborted due to errors.') + fid=broken; + end +else + disp('Skipping ad (extra) [9/73].') + fid=skipped; +end +fprintf(fid,'%s\n','ad'); +if extra==1 + fprintf('%s','Building engine (extra) [10/73]... ') + try + pkg install ./extra/engine-1.0.6.tar.gz + engine=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of engine aborted due to errors.') + fid=broken; + end +else + disp('Skipping engine (extra) [10/73].') + fid=skipped; +end +fprintf(fid,'%s\n','engine'); +if extra==1 + fprintf('%s','Building pdb (extra) [11/73]... ') + try + pkg install ./extra/pdb-1.0.5.tar.gz + pdb=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of pdb aborted due to errors.') + fid=broken; + end +else + disp('Skipping pdb (extra) [11/73].') + fid=skipped; +end +fprintf(fid,'%s\n','pdb'); +if extra==1 + fprintf('%s','Building tsa (extra) [12/73]... ') + try + pkg install ./extra/tsa-3.10.6.tar.gz + tsa=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of tsa aborted due to errors.') + fid=broken; + end +else + disp('Skipping tsa (extra) [12/73].') + fid=skipped; +end +fprintf(fid,'%s\n','tsa'); +if java==1 && extra==1 + fprintf('%s','Building jhandles (extra) [13/73]... ') + try + pkg install ./extra/jhandles-0.3.3.tar.gz + jhandles=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of jhandles aborted due to errors.') + fid=broken; + end +else + disp('Skipping jhandles (extra) [13/73].') + fid=skipped; +end +fprintf(fid,'%s\n','jhandles'); +if extra==1 + fprintf('%s','Building multicore (extra) [14/73]... ') + try + pkg install ./extra/multicore-0.2.12.tar.gz + multicore=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of multicore aborted due to errors.') + fid=broken; + end +else + disp('Skipping multicore (extra) [14/73].') + fid=skipped; +end +fprintf(fid,'%s\n','multicore'); +if extra==1 + fprintf('%s','Building fpl (extra) [15/73]... ') + try + pkg install ./extra/fpl-0.1.2.tar.gz + fpl=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of fpl aborted due to errors.') + fid=broken; + end +else + disp('Skipping fpl (extra) [15/73].') + fid=skipped; +end +fprintf(fid,'%s\n','fpl'); +if extra==1 + fprintf('%s','Building ocs (extra) [16/73]... ') + try + pkg install ./extra/ocs-0.0.1.tar.gz + ocs=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of ocs aborted due to errors.') + fid=broken; + end +else + disp('Skipping ocs (extra) [16/73].') + fid=skipped; +end +fprintf(fid,'%s\n','ocs'); +if extra==1 + fprintf('%s','Building tcl (extra) [17/73]... ') + try + pkg install ./extra/tcl-octave-0.1.6.tar.gz + tcl=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of tcl aborted due to errors.') + fid=broken; + end +else + disp('Skipping tcl (extra) [17/73].') + fid=skipped; +end +fprintf(fid,'%s\n','tcl'); +if extra==1 + fprintf('%s','Building civil (extra) [18/73]... ') + try + pkg install ./extra/civil-engineering-1.0.5.tar.gz + civil=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of civil aborted due to errors.') + fid=broken; + end +else + disp('Skipping civil (extra) [18/73].') + fid=skipped; +end +fprintf(fid,'%s\n','civil'); +if extra==1 + fprintf('%s','Building secs2d (extra) [19/73]... ') + try + pkg install ./extra/secs2d-0.0.6.tar.gz + secs2d=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of secs2d aborted due to errors.') + fid=broken; + end +else + disp('Skipping secs2d (extra) [19/73].') + fid=skipped; +end +fprintf(fid,'%s\n','secs2d'); +if extra==1 + fprintf('%s','Building xraylib (extra) [20/73]... ') + try + pkg install ./extra/xraylib-1.0.6.tar.gz + xraylib=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of xraylib aborted due to errors.') + fid=broken; + end +else + disp('Skipping xraylib (extra) [20/73].') + fid=skipped; +end +fprintf(fid,'%s\n','xraylib'); +if main==1 + fprintf('%s','Building data (main) [21/73]... ') + try + pkg install ./main/data-smoothing-1.0.0.tar.gz + data=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of data aborted due to errors.') + fid=broken; + end +else + disp('Skipping data (main) [21/73].') + fid=skipped; +end +fprintf(fid,'%s\n','data'); +if main==1 + fprintf('%s','Building informationtheory (main) [22/73]... ') + try + pkg install ./main/informationtheory-0.1.5.tar.gz + informationtheory=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of informationtheory aborted due to errors.') + fid=broken; + end +else + disp('Skipping informationtheory (main) [22/73].') + fid=skipped; +end +fprintf(fid,'%s\n','informationtheory'); +if main==1 + fprintf('%s','Building miscellaneous (main) [23/73]... ') + try + pkg install ./main/miscellaneous-1.0.6.tar.gz + miscellaneous=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of miscellaneous aborted due to errors.') + fid=broken; + end +else + disp('Skipping miscellaneous (main) [23/73].') + fid=skipped; +end +fprintf(fid,'%s\n','miscellaneous'); +if main==1 + fprintf('%s','Building special (main) [24/73]... ') + try + pkg install ./main/special-matrix-1.0.5.tar.gz + special=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of special aborted due to errors.') + fid=broken; + end +else + disp('Skipping special (main) [24/73].') + fid=skipped; +end +fprintf(fid,'%s\n','special'); +if main==1 + fprintf('%s','Building odepkg (main) [25/73]... ') + try + pkg install ./main/odepkg-0.6.0.tar.gz + odepkg=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of odepkg aborted due to errors.') + fid=broken; + end +else + disp('Skipping odepkg (main) [25/73].') + fid=skipped; +end +fprintf(fid,'%s\n','odepkg'); +if main==1 + fprintf('%s','Building econometrics (main) [26/73]... ') + try + pkg install ./main/econometrics-1.0.6.tar.gz + econometrics=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of econometrics aborted due to errors.') + fid=broken; + end +else + disp('Skipping econometrics (main) [26/73].') + fid=skipped; +end +fprintf(fid,'%s\n','econometrics'); +if main==1 + fprintf('%s','Building strings (main) [27/73]... ') + try + pkg install ./main/strings-1.0.5.tar.gz + strings=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of strings aborted due to errors.') + fid=broken; + end +else + disp('Skipping strings (main) [27/73].') + fid=skipped; +end +fprintf(fid,'%s\n','strings'); +if main==1 + fprintf('%s','Building irsa (main) [28/73]... ') + try + pkg install ./main/irsa-1.0.5.tar.gz + irsa=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of irsa aborted due to errors.') + fid=broken; + end +else + disp('Skipping irsa (main) [28/73].') + fid=skipped; +end +fprintf(fid,'%s\n','irsa'); +if main==1 + fprintf('%s','Building vrml (main) [29/73]... ') + try + pkg install ./main/vrml-1.0.6.tar.gz + vrml=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of vrml aborted due to errors.') + fid=broken; + end +else + disp('Skipping vrml (main) [29/73].') + fid=skipped; +end +fprintf(fid,'%s\n','vrml'); +if main==1 + fprintf('%s','Building odebvp (main) [30/73]... ') + try + pkg install ./main/odebvp-1.0.4.tar.gz + odebvp=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of odebvp aborted due to errors.') + fid=broken; + end +else + disp('Skipping odebvp (main) [30/73].') + fid=skipped; +end +fprintf(fid,'%s\n','odebvp'); +if main==1 + fprintf('%s','Building gsl (main) [31/73]... ') + try + pkg install ./main/gsl-1.0.6.tar.gz + gsl=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of gsl aborted due to errors.') + fid=broken; + end +else + disp('Skipping gsl (main) [31/73].') + fid=skipped; +end +fprintf(fid,'%s\n','gsl'); +if main==1 + fprintf('%s','Building audio (main) [32/73]... ') + try + pkg install ./main/audio-1.1.1.tar.gz + audio=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of audio aborted due to errors.') + fid=broken; + end +else + disp('Skipping audio (main) [32/73].') + fid=skipped; +end +fprintf(fid,'%s\n','audio'); +if main==1 + fprintf('%s','Building time (main) [33/73]... ') + try + pkg install ./main/time-1.0.7.tar.gz + time=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of time aborted due to errors.') + fid=broken; + end +else + disp('Skipping time (main) [33/73].') + fid=skipped; +end +fprintf(fid,'%s\n','time'); +if main==1 + fprintf('%s','Building octcdf (main) [34/73]... ') + try + pkg install ./main/octcdf-1.0.9.tar.gz + octcdf=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of octcdf aborted due to errors.') + fid=broken; + end +else + disp('Skipping octcdf (main) [34/73].') + fid=skipped; +end +fprintf(fid,'%s\n','octcdf'); +if main==1 + fprintf('%s','Building outliers (main) [35/73]... ') + try + pkg install ./main/outliers-0.13.7.tar.gz + outliers=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of outliers aborted due to errors.') + fid=broken; + end +else + disp('Skipping outliers (main) [35/73].') + fid=skipped; +end +fprintf(fid,'%s\n','outliers'); +if main==1 + fprintf('%s','Building ann (main) [36/73]... ') + try + pkg install ./main/ann-1.0.tar.gz + ann=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of ann aborted due to errors.') + fid=broken; + end +else + disp('Skipping ann (main) [36/73].') + fid=skipped; +end +fprintf(fid,'%s\n','ann'); +if main==1 + fprintf('%s','Building parallel (main) [37/73]... ') + try + pkg install ./main/parallel-1.0.6.tar.gz + parallel=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of parallel aborted due to errors.') + fid=broken; + end +else + disp('Skipping parallel (main) [37/73].') + fid=skipped; +end +fprintf(fid,'%s\n','parallel'); +if main==1 + fprintf('%s','Building missing (main) [38/73]... ') + try + pkg install ./main/missing-functions-1.0.0.tar.gz + missing=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of missing aborted due to errors.') + fid=broken; + end +else + disp('Skipping missing (main) [38/73].') + fid=skipped; +end +fprintf(fid,'%s\n','missing'); +if main==1 + fprintf('%s','Building specfun (main) [39/73]... ') + try + pkg install ./main/specfun-1.0.6.tar.gz + specfun=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of specfun aborted due to errors.') + fid=broken; + end +else + disp('Skipping specfun (main) [39/73].') + fid=skipped; +end +fprintf(fid,'%s\n','specfun'); +if main==1 + fprintf('%s','Building physicalconstants (main) [40/73]... ') + try + pkg install ./main/physicalconstants-0.1.5.tar.gz + physicalconstants=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of physicalconstants aborted due to errors.') + fid=broken; + end +else + disp('Skipping physicalconstants (main) [40/73].') + fid=skipped; +end +fprintf(fid,'%s\n','physicalconstants'); +if main==1 + fprintf('%s','Building ftp (main) [41/73]... ') + try + pkg install ./main/ftp-1.0.tar.gz + ftp=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of ftp aborted due to errors.') + fid=broken; + end +else + disp('Skipping ftp (main) [41/73].') + fid=skipped; +end +fprintf(fid,'%s\n','ftp'); +if main==1 + fprintf('%s','Building nnet (main) [42/73]... ') + try + pkg install ./main/nnet-0.1.7.tar.gz + nnet=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of nnet aborted due to errors.') + fid=broken; + end +else + disp('Skipping nnet (main) [42/73].') + fid=skipped; +end +fprintf(fid,'%s\n','nnet'); +if main==1 + fprintf('%s','Building statistics (main) [43/73]... ') + try + pkg install ./main/statistics-1.0.6.tar.gz + statistics=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of statistics aborted due to errors.') + fid=broken; + end +else + disp('Skipping statistics (main) [43/73].') + fid=skipped; +end +fprintf(fid,'%s\n','statistics'); +if main==1 + fprintf('%s','Building combinatorics (main) [44/73]... ') + try + pkg install ./main/combinatorics-1.0.6.tar.gz + combinatorics=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of combinatorics aborted due to errors.') + fid=broken; + end +else + disp('Skipping combinatorics (main) [44/73].') + fid=skipped; +end +fprintf(fid,'%s\n','combinatorics'); +if main==1 + fprintf('%s','Building optiminterp (main) [45/73]... ') + try + pkg install ./main/optiminterp-0.2.7.tar.gz + optiminterp=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of optiminterp aborted due to errors.') + fid=broken; + end +else + disp('Skipping optiminterp (main) [45/73].') + fid=skipped; +end +fprintf(fid,'%s\n','optiminterp'); +if miscellaneous==1 && main==1 + fprintf('%s','Building ga (main) [46/73]... ') + try + pkg install ./main/ga-0.1.1.tar.gz + ga=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of ga aborted due to errors.') + fid=broken; + end +else + disp('Skipping ga (main) [46/73].') + fid=skipped; +end +fprintf(fid,'%s\n','ga'); +if main==1 + fprintf('%s','Building fixed (main) [47/73]... ') + try + pkg install ./main/fixed-0.7.6.tar.gz + fixed=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of fixed aborted due to errors.') + fid=broken; + end +else + disp('Skipping fixed (main) [47/73].') + fid=skipped; +end +fprintf(fid,'%s\n','fixed'); +if main==1 + fprintf('%s','Building zenity (main) [48/73]... ') + try + pkg install ./main/zenity-0.5.5.tar.gz + zenity=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of zenity aborted due to errors.') + fid=broken; + end +else + disp('Skipping zenity (main) [48/73].') + fid=skipped; +end +fprintf(fid,'%s\n','zenity'); +if main==1 + fprintf('%s','Building control (main) [49/73]... ') + try + pkg install ./main/control-1.0.6.tar.gz + control=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of control aborted due to errors.') + fid=broken; + end +else + disp('Skipping control (main) [49/73].') + fid=skipped; +end +fprintf(fid,'%s\n','control'); +if main==1 + fprintf('%s','Building splines (main) [50/73]... ') + try + pkg install ./main/splines-1.0.5.tar.gz + splines=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of splines aborted due to errors.') + fid=broken; + end +else + disp('Skipping splines (main) [50/73].') + fid=skipped; +end +fprintf(fid,'%s\n','splines'); +if miscellaneous==1 && main==1 + fprintf('%s','Building optim (main) [51/73]... ') + try + pkg install ./main/optim-1.0.3.tar.gz + optim=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of optim aborted due to errors.') + fid=broken; + end +else + disp('Skipping optim (main) [51/73].') + fid=skipped; +end +fprintf(fid,'%s\n','optim'); +if main==1 + fprintf('%s','Building bioinfo (main) [52/73]... ') + try + pkg install ./main/bioinfo-0.1.0.tar.gz + bioinfo=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of bioinfo aborted due to errors.') + fid=broken; + end +else + disp('Skipping bioinfo (main) [52/73].') + fid=skipped; +end +fprintf(fid,'%s\n','bioinfo'); +if main==1 + fprintf('%s','Building io (main) [53/73]... ') + try + pkg install ./main/io-1.0.6.tar.gz + io=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of io aborted due to errors.') + fid=broken; + end +else + disp('Skipping io (main) [53/73].') + fid=skipped; +end +fprintf(fid,'%s\n','io'); +if main==1 + fprintf('%s','Building plot (main) [54/73]... ') + try + pkg install ./main/plot-1.0.5.tar.gz + plot=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of plot aborted due to errors.') + fid=broken; + end +else + disp('Skipping plot (main) [54/73].') + fid=skipped; +end +fprintf(fid,'%s\n','plot'); +if main==1 + fprintf('%s','Building database (main) [55/73]... ') + try + pkg install ./main/database-1.0.tar.gz + database=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of database aborted due to errors.') + fid=broken; + end +else + disp('Skipping database (main) [55/73].') + fid=skipped; +end +fprintf(fid,'%s\n','database'); +if main==1 + fprintf('%s','Building general (main) [56/73]... ') + try + pkg install ./main/general-1.0.6.tar.gz + general=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of general aborted due to errors.') + fid=broken; + end +else + disp('Skipping general (main) [56/73].') + fid=skipped; +end +fprintf(fid,'%s\n','general'); +if main==1 + fprintf('%s','Building image (main) [57/73]... ') + try + pkg install ./main/image-1.0.6.tar.gz + image=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of image aborted due to errors.') + fid=broken; + end +else + disp('Skipping image (main) [57/73].') + fid=skipped; +end +fprintf(fid,'%s\n','image'); +if main==1 + fprintf('%s','Building ident (main) [58/73]... ') + try + pkg install ./main/ident-1.0.5.tar.gz + ident=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of ident aborted due to errors.') + fid=broken; + end +else + disp('Skipping ident (main) [58/73].') + fid=skipped; +end +fprintf(fid,'%s\n','ident'); +if main==1 + fprintf('%s','Building symbolic (main) [59/73]... ') + try + pkg install ./main/symbolic-1.0.6.tar.gz + symbolic=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of symbolic aborted due to errors.') + fid=broken; + end +else + disp('Skipping symbolic (main) [59/73].') + fid=skipped; +end +fprintf(fid,'%s\n','symbolic'); +if main==1 + fprintf('%s','Building video (main) [60/73]... ') + try + pkg install ./main/video-1.0.0.tar.gz + video=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of video aborted due to errors.') + fid=broken; + end +else + disp('Skipping video (main) [60/73].') + fid=skipped; +end +fprintf(fid,'%s\n','video'); +if main==1 + fprintf('%s','Building sockets (main) [61/73]... ') + try + pkg install ./main/sockets-1.0.4.tar.gz + sockets=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of sockets aborted due to errors.') + fid=broken; + end +else + disp('Skipping sockets (main) [61/73].') + fid=skipped; +end +fprintf(fid,'%s\n','sockets'); +if main==1 + fprintf('%s','Building signal (main) [62/73]... ') + try + pkg install ./main/signal-1.0.7.tar.gz + signal=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of signal aborted due to errors.') + fid=broken; + end +else + disp('Skipping signal (main) [62/73].') + fid=skipped; +end +fprintf(fid,'%s\n','signal'); +if main==1 + fprintf('%s','Building struct (main) [63/73]... ') + try + pkg install ./main/struct-1.0.5.tar.gz + struct=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of struct aborted due to errors.') + fid=broken; + end +else + disp('Skipping struct (main) [63/73].') + fid=skipped; +end +fprintf(fid,'%s\n','struct'); +if main==1 + fprintf('%s','Building linear (main) [64/73]... ') + try + pkg install ./main/linear-algebra-1.0.5.tar.gz + linear=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of linear aborted due to errors.') + fid=broken; + end +else + disp('Skipping linear (main) [64/73].') + fid=skipped; +end +fprintf(fid,'%s\n','linear'); +if main==1 + fprintf('%s','Building octgpr (main) [65/73]... ') + try + pkg install ./main/octgpr-1.1.3.tar.gz + octgpr=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of octgpr aborted due to errors.') + fid=broken; + end +else + disp('Skipping octgpr (main) [65/73].') + fid=skipped; +end +fprintf(fid,'%s\n','octgpr'); +if nonfree==1 + fprintf('%s','Building arpack (nonfree) [66/73]... ') + try + pkg install ./nonfree/arpack-1.0.5.tar.gz + arpack=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of arpack aborted due to errors.') + fid=broken; + end +else + disp('Skipping arpack (nonfree) [66/73].') + fid=skipped; +end +fprintf(fid,'%s\n','arpack'); +if nonfree==1 + fprintf('%s','Building spline (nonfree) [67/73]... ') + try + pkg install ./nonfree/spline-gcvspl-1.0.5.tar.gz + spline=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of spline aborted due to errors.') + fid=broken; + end +else + disp('Skipping spline (nonfree) [67/73].') + fid=skipped; +end +fprintf(fid,'%s\n','spline'); +if language==1 + fprintf('%s','Building pt_br (language) [68/73]... ') + try + pkg install ./language/pt_br-1.0.6.tar.gz + pt_br=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of pt_br aborted due to errors.') + fid=broken; + end +else + disp('Skipping pt_br (language) [68/73].') + fid=skipped; +end +fprintf(fid,'%s\n','pt_br'); +if splines==1 && extra==1 + fprintf('%s','Building msh (extra) [69/73]... ') + try + pkg install ./extra/msh-0.0.6.tar.gz + msh=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of msh aborted due to errors.') + fid=broken; + end +else + disp('Skipping msh (extra) [69/73].') + fid=skipped; +end +fprintf(fid,'%s\n','msh'); +if io==1 && extra==1 + fprintf('%s','Building graceplot (extra) [70/73]... ') + try + pkg install ./extra/graceplot-1.0.5.tar.gz + graceplot=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of graceplot aborted due to errors.') + fid=broken; + end +else + disp('Skipping graceplot (extra) [70/73].') + fid=skipped; +end +fprintf(fid,'%s\n','graceplot'); +if msh==1 && fpl==1 && extra==1 + fprintf('%s','Building bim (extra) [71/73]... ') + try + pkg install ./extra/bim-0.0.6.tar.gz + bim=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of bim aborted due to errors.') + fid=broken; + end +else + disp('Skipping bim (extra) [71/73].') + fid=skipped; +end +fprintf(fid,'%s\n','bim'); +if time==1 && main==1 + fprintf('%s','Building financial (main) [72/73]... ') + try + pkg install ./main/financial-0.2.2.tar.gz + financial=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of financial aborted due to errors.') + fid=broken; + end +else + disp('Skipping financial (main) [72/73].') + fid=skipped; +end +fprintf(fid,'%s\n','financial'); +if signal==1 && main==1 + fprintf('%s','Building communications (main) [73/73]... ') + try + pkg install ./main/communications-1.0.6.tar.gz + communications=1; + fid=installed; + fprintf('done.\n') + catch + fprintf('\n%s\n','Build of communications aborted due to errors.') + fid=broken; + end +else + disp('Skipping communications (main) [73/73].') + fid=skipped; +end +fprintf(fid,'%s\n','communications'); +fclose(installed); +fclose(skipped); +fclose(broken); diff --git a/academic/octave-forge/octave-forge.SlackBuild b/academic/octave-forge/octave-forge.SlackBuild new file mode 100644 index 0000000000..aa27664e97 --- /dev/null +++ b/academic/octave-forge/octave-forge.SlackBuild @@ -0,0 +1,131 @@ +#!/bin/sh + +# Slackware build script for Octave-Forge + +# Written by Mauro Giachero (mauro dot giachero at gmail dot com) + +# Copyright 2008 Mauro Giachero +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# There are some caveats related to this script: +# - Even setting ARCH=i486, the binary parts of the packages are put +# in directories named `uname -m`-*. This is just cosmetic, as ARCH +# is actually used to set compiler flags and you really get i486 +# binaries. +# - On package removal, you should run as root: +# mkdir -p /usr/share/octave/packages && octave --silent --eval "pkg rebuild" +# or Octave will be left in an incorrect state. +# - No JOBS support. + +PRGNAM=octave-forge +VERSION=bundle-20080507 +ARCH=${ARCH:-i486} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686 -fno-strict-aliasing" + SLKPICFLAG="-fPIC" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686 -fno-strict-aliasing" + SLKPICFLAG="-fPIC" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fno-strict-aliasing" + SLKPICFLAG="-fPIC" +fi + +# The Octave-Forge packages are divided into four repositories. +# By default this script builds all packages from all repositories, +# but you can explicitly set which repositories you are interested in. +REPOS=${REPOS:-"main,extra,language,nonfree"} + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +# Prepare the build +( cd $PKG + mkdir -p usr/share/octave/packages + mkdir -p usr/libexec/octave/packages +) + +# Compile the application and install it into the $PKG directory +CFLAGS=$SLKCFLAGS \ +CXXFLAGS=$SLKCFLAGS \ +FFLAGS=$SLKCFLAGS \ +CPICFLAG=$SLKPICFLAG \ +CXXPICFLAG=$SLKPICFLAG \ +FPICFLAG=$SLKPICFLAG \ +octave --silent \ + --eval "pkg_prefix='$PKG';$(echo $REPOS, |sed "s/,/=1;/g")" \ + $CWD/installscript.m +# Remove package registers (we don't want these in the package) +( cd $PKG + rm ll gl +) + +( cd $PKG + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +cat $CWD/generate-installscript.sh > $PKG/usr/doc/$PRGNAM-$VERSION/generate-installscript.sh +cat $CWD/installscript.m > $PKG/usr/doc/$PRGNAM-$VERSION/installscript.m + +mkdir -p $PKG/install +cat $CWD/doinst.sh > $PKG/install/doinst.sh +cat $CWD/slack-desc > $PKG/install/slack-desc + +( cd $PKG + /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$(echo $VERSION |tr - _)-$ARCH-$BUILD$TAG.tgz +) + +# Print a brief compilation report +# This is useful to let the packager know which packages were +# really built (the script has to assume some failures). +echo "*** Compilation report ***" +for i in `cat installed.tmp`; do + echo "$i[70G[[0;32m OK [0m]" +done +for i in `cat skipped.tmp`; do + echo "$i[70G[[0;33m SKIP [0m]" +done +for i in `cat broken.tmp`; do + echo "$i[70G[[0;31m ERROR [0m]" +done +echo "Package creation complete." diff --git a/academic/octave-forge/octave-forge.info b/academic/octave-forge/octave-forge.info new file mode 100644 index 0000000000..4c905c44c6 --- /dev/null +++ b/academic/octave-forge/octave-forge.info @@ -0,0 +1,8 @@ +PRGNAM="octave-forge" +VERSION="bundle-20080507" +HOMEPAGE="http://octave.sourceforge.net" +DOWNLOAD="http://switch.dl.sourceforge.net/sourceforge/octave/octave-forge-bundle-20080507.tar.gz" +MD5SUM="ef7cb19e8b18281f09ad2501f6861f03" +MAINTAINER="Mauro Giachero" +EMAIL="mauro dot giachero at gmail dot com" +APPROVED="David Somero"
\ No newline at end of file diff --git a/academic/octave-forge/slack-desc b/academic/octave-forge/slack-desc new file mode 100644 index 0000000000..39d91a8762 --- /dev/null +++ b/academic/octave-forge/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' on +# the right side marks the last column you can put a character in. You must make +# exactly 11 lines for the formatting to be correct. It's also customary to +# leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +octave-forge: Octave-Forge (Extra packages for GNU Octave) +octave-forge: +octave-forge: Octave-Forge is a central location for the collaborative development +octave-forge: of packages for GNU Octave. +octave-forge: This package contains a collection of pre-built Octave-Forge +octave-forge: packages. +octave-forge: +octave-forge: Homepage: http://octave.sourceforge.net +octave-forge: +octave-forge: +octave-forge: |