pkgsrc/bootstrap/mkbinarykit
joerg f860aa0fbb Don't use the carat (^) in class matches, as it is not supported by
some shells. Use precendency order instead.

Should fix PR 33236.
2006-04-11 14:35:48 +00:00

152 lines
3.8 KiB
Bash
Executable file

#!/bin/sh
# $NetBSD: mkbinarykit,v 1.15 2006/04/11 14:35:48 joerg Exp $
#
# Make a binary bootstrap kit and place it in targetdir (or current
# working directory if not specified). The mk.conf.example file is
# copied to /etc/mk.conf (or /etc/mk.conf.example on systems which
# may already have a /etc/mk.conf file) or to the location specified
# by using --mkconf. Run this program from the pkgsrc/bootstrap
# directory.
usage="Usage: $0 "'
[ --force ] [ --targetdir=<tar target dir> ] [ --mkconf=<target> ]
[ --no-build ] [ --workdir=<work dir> ] [ bootstrap script arguments ]
[ --fetch-cmd=<ftp command> ]'
opsys=`uname -s`
osrev=`uname -r`
ospro=`uname -p`
date=`date +%Y%m%d`
prefix=/usr/pkg
sysconfdir=/etc
pkgdbdir=/var/db/pkg
mkfile=$sysconfdir/mk.conf
ignorecasecheck=no
ignoreusercheck=no
force=no
build=yes
fetch_cmd=""
targetdir=`pwd`
wrkdir=work # default: relative to pkgsrc/bootstrap
sedprog="sed"
case "$opsys" in
AIX)
syscondir=$prefix/etc
mkfile=$sysconfdir/mk.conf
pkgdbdir=$prefix/pkgdb
;;
DragonFly)
case "$osrev" in
1.1[0-9]*)
;;
1.0* | 1.1 | 1.2.* | 1.3.*)
# Don't use the ports /var/db/pkg
pkgdbdir=$prefix/pkgdb
;;
esac
;;
FreeBSD)
# Don't use the ports /var/db/pkg
pkgdbdir=$prefix/pkgdb
;;
Interix)
mkfile=$sysconfdir/mk.conf.example
# Don't use the interopsystems.com package dir
pkgdbdir=$prefix/pkgdb
ospro=i386
;;
NetBSD)
# Don't overwrite the system's mk.conf
mkfile=$sysconfdir/mk.conf.example
;;
OpenBSD)
# Don't overwrite the system's mk.conf
mkfile=$sysconfdir/mk.conf.example
# Don't use the ports /var/db/pkg
pkgdbdir=$prefix/pkgdb
# Use "arch -s" instead of uname -p
ospro=`arch -s`
;;
SunOS)
sedprog=/usr/xpg4/bin/sed
;;
esac
while [ $# -gt 0 ]; do
case $1 in
--force) force=yes ;;
--no-build) build=no ;;
--targetdir=*) targetdir=`echo $1 | $sedprog -e 's|--targetdir=||'` ;;
--prefix=*) prefix=`echo $1 | $sedprog -e 's|--prefix=||'` ;;
--fetch-cmd=*) fetch_cmd="$1" ;;
--mkconf=*) mkfile=`echo $1 | $sedprog -e 's|--mkconf=||'` ;;
--pkgdbdir=*) pkgdbdir=`echo $1 | $sedprog -e 's|--pkgdbdir=||'` ;;
--ignore-case-check) ignorecasecheck=yes ;;
--ignore-user-check) ignoreusercheck=yes ;;
--workdir=*) wrkdir=`echo $1 | $sedprog -e 's|--workdir=||'` ;;
--*) echo "$usage"; exit 1 ;;
esac
shift
done
if [ "$build" = "yes" ] && [ "$force" != "yes" ]; then
if [ -d "$prefix" ] || [ -d "$pkgdbdir" ]; then
echo "Some pkgsrc infrastructure exists on this system already."
echo "Use --force to move it out of the way."
exit 1
fi
elif [ "$build" = "yes" ]; then
mv -f "$prefix" "$prefix.$$"
mv -f "$pkgdbdir" "$pkgdbdir.$$"
mv -f "$mkfile" "$mkfile.$$"
fi
if [ "$build" != "no" ]; then
# Bootstrap
bootstrap_flags="--prefix=$prefix --pkgdbdir=$pkgdbdir --workdir=$wrkdir $fetch_cmd"
if [ "$ignorecasecheck" = "yes" ]; then
bootstrap_flags="$bootstrap_flags --ignore-case-check"
fi
if [ "$ignoreusercheck" = "yes" ]; then
bootstrap_flags="$bootstrap_flags --ignore-user-check"
fi
echo "Making bootstrap kit with"
echo "prefix = $prefix"
echo "pkgdbdir = $pkgdbdir"
echo "mk.conf.example will be copied to $mkfile"
echo ""
./cleanup $wrkdir
./bootstrap $bootstrap_flags
if [ $? != "0" ]; then
echo "Bootstrap error."
exit 1;
fi
fi
# Make a tar ball
strip=strip
if [ -x /usr/ccs/bin/strip ]; then
strip=/usr/ccs/bin/strip
fi
echo "Stripping binaries..."
$strip "$prefix/"bin/*
$strip "$prefix/"sbin/*
echo "Making binary kit."
PATH="$prefix/bin:$PATH"; export PATH # in case tar was built by bootstrap
[ ! -d $sysconfdir ] && mkdir -p $sysconfdir
cp ${wrkdir}/mk.conf.example $mkfile && \
cd / && \
tar -hcf "$targetdir/bootstrap-pkgsrc-$opsys-$osrev-$ospro-$date.tar" \
.$prefix .$pkgdbdir .$mkfile && \
ls -l "$targetdir/bootstrap-pkgsrc-$opsys-$osrev-$ospro-$date.tar"