diff options
Diffstat (limited to 'pkgtools/pkg_install/files/view/linkfarm.sh.in')
-rw-r--r-- | pkgtools/pkg_install/files/view/linkfarm.sh.in | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/pkgtools/pkg_install/files/view/linkfarm.sh.in b/pkgtools/pkg_install/files/view/linkfarm.sh.in new file mode 100644 index 00000000000..5c934139846 --- /dev/null +++ b/pkgtools/pkg_install/files/view/linkfarm.sh.in @@ -0,0 +1,225 @@ +#! /bin/sh + +# $NetBSD: linkfarm.sh.in,v 1.1 2003/09/08 04:49:07 jlam Exp $ + +# +# Copyright (c) 2002 Alistair G. Crooks. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by Alistair G. Crooks. +# 4. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# 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. + +# set -x + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +sbindir="@sbindir@" + +# set up program definitions +findprog="@FIND@" +grepprog="@GREP@" +lnprog="@LN@" +mkdirprog="@MKDIR@" +pkginfoprog="@sbindir@/pkg_info" +rmprog="@RM@" +rmdirprog="@RMDIR@" +sedprog="@SED@" +sortprog="@SORT@" + +usage() { + echo 'Usage: linkfarm [options] package' + exit 1 +} + +version() { + $pkginfoprog -V + exit 0 +} + +checkdir() { + if [ ! -d "$1" ]; then + echo "linkfarm: \`$1' doesn't exist" + exit 1 + fi +} + +ignorefiles=${PLIST_IGNORE_FILES:-"info/dir *[~#] *.OLD *.orig *,v"} +linktype=-s + +# default action: create a linkfarm in $target from $stowdir/$1 +# i.e. linkfarm --target=${prefix}/${view} --dir=${prefix}/packages $1 +# +doit="" +target=${LOCALBASE:-/usr/pkg} +stowdir=${target}/packages +subdir="" +verbose=0 + +# default action is to create +check=no +delete=no +create=yes + +# process args - can't use getopt(1) because of '--' style args +while [ $# -gt 0 ]; do + case "$1" in + -D) delete=yes; create=no ;; + -R) delete=yes; create=yes ;; + -V) version ;; + -c) check=yes; doit=":" ;; + -d) stowdir=$2; shift ;; + -d*) stowdir=`echo $1 | $sedprog -e 's|-d||'` ;; + -s) subdir=$2; shift ;; + -s*) subdir=`echo $1 | $sedprog -e 's|-s||'` ;; + -t) target=$2; shift ;; + -t*) target=`echo $1 | $sedprog -e 's|-t||'` ;; + -n) doit=":" ;; + -v) verbose=`expr $verbose + 1` ;; + + --delete) delete=yes; create=no ;; + --dir=*) stowdir=`echo $1 | $sedprog -e 's|--dir=||'` ;; + --restow) delete=yes; create=yes ;; + --subdir=*) subdir=`echo $1 | $sedprog -e 's|--subdir=||'` ;; + --target=*) target=`echo $1 | $sedprog -e 's|--target=||'` ;; + --version) version ;; + + --) shift; break ;; + *) break ;; + esac + shift +done + +# set the package name +package=$1 + +# make sure stowdir has a full pathname +case $stowdir in +/*) ;; +*) stowdir=`pwd`/$stowdir ;; +esac + +# Set the directory from which we symlink. +case $subdir in +"") fromdir=$stowdir/$package ;; +*) fromdir=$stowdir/$package/$subdir ;; +esac + +# Set the directory to which we symlink. +case $target in +/*) todir=$target ;; +*) todir=`pwd`/$target ;; +esac + +# if we're checking the entries, check, then exit +case $check in +yes) + checkdir $fromdir + (cd $fromdir; + ex=0; + for f in `$findprog . ! -type d -print`; do + newf=`echo $f | $sedprog -e 's|^\./||'` + if [ -e $todir/$newf ]; then + ignore=no + for i in $ignorefiles; do + case $newf in + $i) ignore=yes; break ;; + esac + done + case $ignore in + no) + echo "${newf}"; ex=1 ;; + esac + fi + done + exit $ex) || exit 1 + ;; +esac + +# if we need to get rid of old linkfarms, do it +case $delete in +yes) + checkdir $fromdir + (cd $fromdir; + for f in `$findprog . ! -type d -print`; do + newf=`echo $f | $sedprog -e 's|^\./||'` + ignore=no + for i in $ignorefiles; do + case $newf in + $i) ignore=yes; break ;; + esac + done + case $ignore in + no) + if [ $verbose -gt 0 ]; then + echo "$rmprog $todir/$newf" + fi + $doit $rmprog $todir/$f ;; + esac + done + for d in `$findprog . -type d -print | $sortprog -r`; do + if [ $verbose -gt 0 ]; then + echo "$rmdirprog $todir/$d" + fi + $doit $rmdirprog $todir/$d > /dev/null 2>&1 + done) + ;; +esac + +# if we need to create new linkfarms, do it +case $create in +yes) + checkdir $fromdir + (cd $fromdir; + for d in `$findprog . -type d -print`; do + newd=`echo $d | $sedprog -e 's|^\./||'` + case "$d" in + "") continue ;; + esac + if [ $verbose -gt 0 ]; then + echo "$mkdirprog -p $todir/$newd" + fi + $doit $mkdirprog -p $todir/$newd > /dev/null 2>&1 + done + for f in `$findprog . ! -type d -print`; do + newf=`echo $f | $sedprog -e 's|^\./||'` + ignore=no + for i in $ignorefiles; do + case $newf in + $i) ignore=yes; break ;; + esac + done + case $ignore in + no) + if [ $verbose -gt 0 ]; then + echo "$lnprog ${linktype} $fromdir/$newf $todir/$newf" + fi + $doit $lnprog ${linktype} $fromdir/$newf $todir/$newf ;; + esac + done) + ;; +esac + +exit 0 |