diff options
Diffstat (limited to 'academic/octave-forge/generate-installscript.sh')
-rw-r--r-- | academic/octave-forge/generate-installscript.sh | 155 |
1 files changed, 0 insertions, 155 deletions
diff --git a/academic/octave-forge/generate-installscript.sh b/academic/octave-forge/generate-installscript.sh deleted file mode 100644 index 4c38aeb2a39bd..0000000000000 --- a/academic/octave-forge/generate-installscript.sh +++ /dev/null @@ -1,155 +0,0 @@ -#!/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-20090607 -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 |