diff options
-rwxr-xr-x | bootstrap/pkg.sh | 569 |
1 files changed, 0 insertions, 569 deletions
diff --git a/bootstrap/pkg.sh b/bootstrap/pkg.sh deleted file mode 100755 index 28fb82c45ea..00000000000 --- a/bootstrap/pkg.sh +++ /dev/null @@ -1,569 +0,0 @@ -#! /bin/sh -# -# $NetBSD: pkg.sh,v 1.1.1.1 2004/03/11 13:03:59 grant 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 -# for the NetBSD project. -# 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 - -version=20020615 - -opsys=`uname -s` - -case "$opsys" in -Darwin) - awkprog=/usr/bin/awk - catprog=/bin/cat - chmodprog=/bin/chmod - cpprog=/bin/cp - lnprog=/bin/ln - mkdirprog=/bin/mkdir - rmprog=/bin/rm - sedprog=/usr/bin/sed - ;; -Linux) - awkprog=/usr/bin/awk - catprog=/bin/cat - chmodprog=/bin/chmod - cpprog=/bin/cp - lnprog=/bin/ln - mkdirprog=/bin/mkdir - rmprog=/bin/rm - sedprog=/bin/sed - ;; -NetBSD) - awkprog=/usr/bin/awk - catprog=/bin/cat - chmodprog=/bin/chmod - cpprog=/bin/cp - lnprog=/bin/ln - mkdirprog=/bin/mkdir - rmprog=/bin/rm - sedprog=/usr/bin/sed - ;; -SunOS) - awkprog=/usr/bin/nawk - catprog=/usr/bin/cat - chmodprog=/usr/bin/chmod - cpprog=/usr/bin/cp - lnprog=/usr/bin/ln - mkdirprog=/usr/bin/mkdir - rmprog=/usr/bin/rm - sedprog=/usr/xpg4/bin/sed - ;; -*) - awkprog=awk - catprog=cat - chmodprog=chmod - cpprog=cp - lnprog=ln - mkdirprog=mkdir - rmprog=rm - sedprog=sed - ;; -esac - -getpkg() -{ - if test -d $PKG_DBDIR/$1; then - d=$PKG_DBDIR/$1 - else - d="`echo $PKG_DBDIR/${1}-*`" - fi - echo $d -} - -case "$DIGESTPROG" in -"") DIGESTPROG=/usr/pkg/bin/digest ;; -esac -case "$PKG_DBDIR" in -"") PKG_DBDIR=/var/db/pkg ;; -esac -case "$PKG_DIGEST" in -"") PKG_DIGEST=sha1 ;; -esac - -ALLDIGESTS="sha1 sha512" - -case "$0" in -*pkg_create) cmd=create ;; -*pkg_delete) cmd=delete ;; -*pkg_info) cmd=info ;; -*pkg.sh|*pkg) cmd=$1; shift ;; -esac - -case "$cmd" in -create) - if [ $# -lt 1 ]; then - echo "Usage: pkg create ..." > /dev/stderr - exit 1 - fi - - BUILDINFOFILE="" # done - BUILDVERSIONFILE="" # done - CONFLICTS="" # done - comment="" # done - DISPLAYFILE="" # done - DESCRFILE="" # done - plist="" # done - minush=no - realprefix="" - installfile="" # done - deinstallfile="" # done - srcdir="" - relsymlinks=no - mtreefile="" - plistonly=no - PREREQS="" - #prefix="" - reorder=no - requirements="" - allsizefile="" # done - thissizefile="" # done - updatefilecache=yes - excludefrom="" - - while [ $# -gt 0 ]; do - case "$1" in - -B) BUILDINFOFILE="$2"; shift ;; - -C) CONFLICTS="$2"; shift ;; - -D) DISPLAYFILE="$2"; shift ;; - -I) realprefix="$2"; shift ;; - -L) srcdir="$2"; shift ;; - -O) plistonly=yes ;; - -P) PREREQS="$PREREQS $2"; shift ;; - -R) reorder=yes ;; - -S) allsizefile="$2"; shift ;; - -U) updatefilecache=no ;; - -V) echo $version; exit 0 ;; - -X) excludefrom="$excludefrom $2"; shift ;; - -b) BUILDVERSIONFILE="$2"; shift ;; - -c) case "$2" in - -*) comment="`echo $2 | $sedprog -e 's|^-||'`"; shift ;; - *) comment=`$catprog $2` ;; - esac - shift ;; - -d) DESCRFILE=$2; shift ;; - -f) plist="$2"; shift ;; - -h) minush=yes ;; - -i) installfile="$2"; shift ;; - -k) deinstallfile="$2"; shift ;; - -l) relsymlinks=yes ;; - -m) mtreefile="$2"; shift ;; - -p) PREFIX="$2"; shift ;; - -r) requirements="$2"; shift ;; - -s) thissizefile="$2"; shift ;; - -t) shift ;; - -v) set -x ;; - --) shift; break ;; - *) break ;; - esac - shift - done - - PKGNAME=$1 - - if [ ! -d $PKG_DBDIR/$PKGNAME ]; then - $mkdirprog $PKG_DBDIR/$PKGNAME - fi - - if [ -f "$BUILDINFOFILE" ]; then - $cpprog $BUILDINFOFILE $PKG_DBDIR/$PKGNAME/+BUILD_INFO - fi - if [ -f "$BUILDVERSIONFILE" ]; then - $cpprog $BUILDVERSIONFILE $PKG_DBDIR/$PKGNAME/+BUILD_VERSION - fi - echo $comment > $PKG_DBDIR/$PKGNAME/+COMMENT - $cpprog $DESCRFILE $PKG_DBDIR/$PKGNAME/+DESC - - case "$installfile" in - "") ;; - *) $cpprog $installfile $PKG_DBDIR/$PKGNAME/+INSTALL ;; - esac - case "$deinstallfile" in - "") ;; - *) $cpprog $deinstallfile $PKG_DBDIR/$PKGNAME/+DEINSTALL ;; - esac - case "$DISPLAYFILE" in - "") ;; - *) $cpprog $DISPLAYFILE $PKG_DBDIR/$PKGNAME/+DISPLAY ;; - esac - case "$allsizefile" in - "") ;; - *) $cpprog $allsizefile $PKG_DBDIR/$PKGNAME/+SIZE_ALL ;; - esac - case "$thissizefile" in - "") ;; - *) $cpprog $thissizefile $PKG_DBDIR/$PKGNAME/+SIZE_PKG ;; - esac - - export PREFIX PKGNAME CONFLICTS PREREQS DIGESTPROG PKG_DIGEST - - $awkprog ' - BEGIN { - if (ENVIRON["CONFLICTS"] != "") { - cflc = split(ENVIRON["CONFLICTS"], cflv); - for (i = 1 ; i <= cflc ; i++) - printf("@pkgcfl %s\n", cflv[i]) - } - if (ENVIRON["PREREQS"] != "") { - prec = split(ENVIRON["PREREQS"], prev); - for (i = 1 ; i <= prec ; i++) - printf("@pkgdep %s\n", prev[i]) - } - prefix = ENVIRON["PREFIX"]; - printf("@name %s\n@cwd %s\n", ENVIRON["PKGNAME"], prefix) } - /^@(comment|dirrm|src)/ { print $0; next } - /^@(un)?exec/ { last = filename; gsub(".*/", "", last); gsub("%f", last); - fc = split(filename, fv, "/"); fn = prefix; for (i = 1 ; i < fc ; i++) fn = fn "/" fv[i]; gsub("%B", fn); - gsub("%F", filename); - gsub("%D", prefix); print $0; next } - { filename = $0; printf("%s\n@comment MD5:", $0); cmd = sprintf("'$catprog' %s/%s | %s %s", prefix, $0, ENVIRON["DIGESTPROG"], ENVIRON["PKG_DIGEST"]); system(cmd) } - ' < $plist > $PKG_DBDIR/$PKGNAME/+CONTENTS - - # construct the digests of all the metafiles - echo "#! /bin/sh" > $PKG_DBDIR/$PKGNAME/+VERIFY - echo "" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo 'case $# in' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo '0) ;;' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo '*) cd '$PKG_DBDIR/$PKGNAME ';;' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo 'esac' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "$awkprog '" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo 'BEGIN { ex = 0 }' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo 'END { exit(ex) }' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo '/^@cwd/ { prefix = $2; next }' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo '/^@/ { next }' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' {' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' for (done = 0 ; !done ; ) {' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' filename = prefix "/" $0;' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' getline;' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' if ($0 ~ /^@comment (MD5|SHA1):/) {' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' alg = dig = $2;' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' gsub(":.*", "", alg);' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' gsub("[A-Za-z0-9]*:", "", dig);' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' cmd = sprintf("s=`'$catprog' %s | '$DIGESTPROG' %s`; if test \"%s\" != \"$s\"; then echo \"Checksum mismatch (%s): expected %s, got $s\"; fi", filename, alg, dig, filename, dig);' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' if (system(cmd) != 0) ex = 1' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' done = 1;' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' }' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo ' }' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "}' +CONTENTS" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "$awkprog '" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "BEGIN { ex = 0 }" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "END { exit(ex) }" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo " {" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo 'cmd = sprintf("s=`'$catprog' %s | '$DIGESTPROG' %s`; if test \"%s\" != \"$s\"; then echo \"Checksum mismatch (%s): expected %s, got $s\"; fi", $1, $2, $3, $1, $3);' >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "if (system(cmd) != 0) ex = 1" >> $PKG_DBDIR/$PKGNAME/+VERIFY - echo "}' << filesEOF" >> $PKG_DBDIR/$PKGNAME/+VERIFY - # construct the digests of all the metafiles - for f in +BUILD_INFO +BUILD_VERSION +COMMENT +CONTENTS +DEINSTALL +DESC +DISPLAY +INSTALL +SIZE_ALL +SIZE_PKG; do - if [ -f $PKG_DBDIR/$PKGNAME/$f ]; then - for dig in $ALLDIGESTS; do - echo "$f $dig `$catprog $PKG_DBDIR/$PKGNAME/$f | $DIGESTPROG $dig`" >> $PKG_DBDIR/$PKGNAME/+VERIFY - done - fi - done - echo "filesEOF" >> $PKG_DBDIR/$PKGNAME/+VERIFY - $chmodprog 0755 $PKG_DBDIR/$PKGNAME/+VERIFY - - # change absolute symlinks to relative ones - case "$relsymlinks" in - yes) for f in `$awkprog ' - $1 == "prefix" { prefix = $2; next } - $1 == "file" { printf("%s/%s\n", prefix, $0) } - ' < $PKG_DBDIR/$PKGNAME/+INVENTORY`; do - if [ -h $f ]; then - target="`ls -al $1 | awk '{ print $11 }'`" - case "$target" in - /*) echo $prefix $target $f | /usr/bin/awk ' - { - pc = split($1, pv, "/"); - tc = split($2, tv, "/"); - for (i = tc - pc + 2 ; i <= tc ; i++) - linkname = linkname "../"; - for (i = pc + 1 ; i <= tc ; i++) - linkname = linkname "/" tv[i]; - cmd = sprintf("'$rmprog' -f %s && '$lnprog' -s %s %s", $3, linkname, $3); - exit(system(cmd)); - }' - ;; - esac - fi - done - ;; - esac - - ;; - -delete) - deinstall=yes - force=no - doit=yes - justdb=no - prefix="" - needs=no - reqs=no - while [ $# -gt 0 ]; do - case "$1" in - -D) deinstall=no ;; - -O) justdb=yes ;; - -R) needs=yes ;; - -f) force=yes ;; - -n) doit=no ;; - -p) prefix=$2; shift ;; - -r) reqs=yes ;; - esac - shift - done - for pkg in $@; do - d=`getpkg $pkg` - hitme=yes - if [ -f $d/+REQUIRED_BY ]; then - hitme=no - case "$force" in - yes) hitme=yes ;; - esac - case "$needs" in - yes) hitme=yes ;; - esac - case "$hitme" in - no) echo "pkg_delete: package $pkg is required by other packages:" - $catprog $d/+REQUIRED_BY - echo "pkg_delete: 1 package deletion failed" - continue - ;; - esac - fi - case "$hitme" in - yes) if [ -f $d/+VERIFY ]; then - $d/+VERIFY - fi - ;; - esac - case "$reqs" in - yes) ;; - esac - done - ;; - -info) - allpackages=no - buildinfo=no - buildversion=no - comment=no - display=no - descr=no - exist=no - filedb=no - plist=no - index=no - install=no - deinstall=no - entries=no - needs=no - prefix=no - reqby=no - sizeall=no - sizepkg=no - version=no - if [ $# -eq 0 ]; then - set -- -I -a - fi - while [ $# -gt 0 ]; do - case "$1" in - -B) buildinfo=yes ;; - -D) display=yes ;; - -F) filedb=yes ;; - -I) index=yes ;; - -L) entries=yes ;; - -S) sizeall=yes ;; - -V) version=yes ;; - -a) allpackages=yes ;; - -b) buildversion=yes ;; - -c) comment=yes ;; - -d) descr=yes ;; - -e) exist=yes ;; - -f) plist=yes ;; - -i) install=yes ;; - -k) deinstall=yes ;; - -n) needs=yes ;; - -p) prefix=yes ;; - -r) reqby=yes ;; - -s) sizepkg=yes ;; - *) break ;; - esac - shift - done - case "$version" in - yes) echo $version; exit 0 ;; - esac - case "$filedb" in - yes) echo "-F is unimplemented" ;; - esac - case "$exist" in - yes) echo "-e is unimplemented" ;; - esac - case "$allpackages" in - yes) pkglist="`(cd $PKG_DBDIR; ls -d *-*)`" ;; - *) pkglist="$@" ;; - esac - for pkg in $pkglist; do - d=`getpkg $pkg` - case "$buildinfo" in - yes) $catprog $d/+BUILD_INFO ;; - esac - case "$display" in - yes) if [ -f $d/+DISPLAY ]; then - $catprog $d/+DISPLAY - fi ;; - esac - case "$index" in - yes) echo "`echo $d | $sedprog -e 's|.*/||'` `$catprog $d/+COMMENT`" ;; - esac - case "$entries" in - yes) $awkprog ' - /^@cwd/ { prefix = $2 } - /^@/ { next } - { printf("%s/%s\n", prefix, $0) } - ' < $d/+CONTENTS ;; - esac - case "$buildversion" in - yes) $catprog $d/+BUILD_VERSION ;; - esac - case "$comment" in - yes) $catprog $d/+COMMENT ;; - esac - case "$descr" in - yes) $catprog $d/+DESC ;; - esac - case "$install" in - yes) if [ -f $d/+INSTALL ]; then - $catprog $d/+INSTALL - fi ;; - esac - case "$deinstall" in - yes) if [ -f $d/+DEINSTALL ]; then - $catprog $d/+DEINSTALL - fi ;; - esac - case "$needs" in - yes) $awkprog '/^@pkgdep/ { print $2 }' < $d/+CONTENTS ;; - esac - case "$prefix" in - yes) $awkprog '/^@cwd/ { print $2; exit }' < $d/+CONTENTS ;; - esac - case "$reqby" in - yes) if [ -f $d/+REQUIRED_BY ]; then - $catprog $d/+REQUIRED_BY - fi ;; - esac - case "$sizeall" in - yes) $catprog $d/+SIZE_ALL - esac - case "$sizepkg" in - yes) $catprog $d/+SIZE_PKG - esac - done - ;; - -show) - if [ $# -lt 1 ]; then - echo "Usage: pkg show type packages" > /dev/stderr - exit 1 - fi - - showtype=$1 - shift - for pkg in $@; do - d=`getpkg $pkg` - case "$d" in - "") echo "No such package ($pkg)" ;; - *) - case "$showtype" in - allsizes) - $catprog $d/+SIZE_ALL ;; - blddep|blddeps) - $awkprog '/^@blddep/ { print $2 }' $d/+CONTENTS ;; - comment) - $catprog $d/+COMMENT ;; - description|desc|descr) - $catprog $d/+DESC ;; - deinstall) - if [ -f $d/+DEINSTALL ]; then - $catprog $d/+DEINSTALL - fi ;; - display) - if [ -f $d/+DISPLAY ]; then - $catprog $d/+DISPLAY - fi ;; - files) - $awkprog ' - /^@cwd/ { prefix = $2 } - /^@/ { next } - { printf("%s/%s\n", prefix, $0) } - ' < $d/+CONTENTS ;; - index) - echo "`echo $d | $sedprog -e 's|.*/||'` `$catprog $d/+COMMENT`" ;; - info) - $catprog $d/+BUILD_INFO ;; - install) - if [ -f $d/+INSTALL ]; then - $catprog $d/+INSTALL - fi ;; - prefix) - $awkprog '/^@cwd/ { print $2 }' $d/+CONTENTS ;; - prereqs|pkgdep) - $awkprog '/^@pkgdep/ { print $2 }' $d/+CONTENTS ;; - size) - $catprog $d/+SIZE_PKG ;; - version) - $catprog $d/+BUILD_VERSION ;; - *) - echo "Unknown type \"$showtype\"" - exit 1 ;; - esac - esac - done - ;; - -version) - echo $version - exit 0 - ;; - -*) echo "$0: \"$cmd\" not found" - exit 1 - ;; -esac - -exit 0 |