215 lines
5.3 KiB
Bash
Executable file
215 lines
5.3 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# $NetBSD: mkbinarykit,v 1.25 2007/08/01 14:03:49 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 ${PREFIX}/etc/mk.conf or to the location specified
|
|
# by using --mkconf. Run this program from the pkgsrc/bootstrap
|
|
# directory.
|
|
|
|
mkbinarykit_macpkg()
|
|
{
|
|
local macdestdir
|
|
macdestdir=${wrkdir}/macpkg-destdir
|
|
rm -rf ${macdestdir} || die "cleanup destdir"
|
|
|
|
mkdir -p ${macdestdir}${prefix} || die "mkdir destprefix"
|
|
rmdir ${macdestdir}${prefix} || die "rmdir destprefix"
|
|
cp -Rp ${prefix} ${macdestdir}${prefix} || die "copy prefix"
|
|
|
|
if [ ! -d ${macdestdir}${pkgdbdir} ]; then
|
|
mkdir -p ${macdestdir}${pkgdbdir} || die "mkdir destdbdir"
|
|
rmdir ${macdestdir}${pkgdbdir} || die "rmdir destdbdir"
|
|
cp -Rp ${pkgdbdir} ${macdestdir}${pkgdbdir} || die "copy dbdir"
|
|
fi
|
|
|
|
${sedprog} -e "s|%WRKDIR%|${wrkdir}|g" \
|
|
-e "s|%TARGETDIR%|${targetdir}|g" -e "s|%DATE%|${date}|g" \
|
|
< macpkg.pmproj.in > ${wrkdir}/macpkg.pmproj
|
|
/Developer/Tools/packagemaker -build -proj ${wrkdir}/macpkg.pmproj -p "$targetdir/bootstrap-pkgsrc-$opsys-$osrev-$ospro-$date.pkg"
|
|
ls -dl "$targetdir/bootstrap-pkgsrc-$opsys-$osrev-$ospro-$date.pkg"
|
|
}
|
|
|
|
mkbinarykit_tar()
|
|
{
|
|
# in case tar was built by bootstrap
|
|
PATH="$prefix/bin:$PATH"; export PATH
|
|
[ ! -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"
|
|
}
|
|
|
|
die()
|
|
{
|
|
echo "error: can't $@" >&2
|
|
exit 1
|
|
}
|
|
|
|
usage="Usage: $0 "'
|
|
[ --force ] [ --targetdir=<tar target dir> ] [ --mkconf=<target> ]
|
|
[ --no-build ] [ --workdir=<work dir> ] [ bootstrap script arguments ]
|
|
[ --fetch-cmd=<ftp command> ] [ --mk-fragment=<mk.conf> ]'
|
|
|
|
opsys=`uname -s | tr -d /-`
|
|
osrev=`uname -r`
|
|
ospro=`uname -p`
|
|
date=`date +%Y%m%d`
|
|
|
|
prefix=/usr/pkg
|
|
sysconfdir=$prefix/etc
|
|
pkgdbdir=/var/db/pkg
|
|
compiler=
|
|
mkfile=
|
|
mk_fragment=
|
|
ignorecasecheck=no
|
|
ignoreusercheck=no
|
|
force=no
|
|
build=yes
|
|
fetch_cmd=""
|
|
targetdir=`pwd`
|
|
wrkdir=`pwd`/work # default: relative to pkgsrc/bootstrap
|
|
|
|
sedprog="sed"
|
|
|
|
case "$opsys" in
|
|
AIX)
|
|
pkgdbdir=$prefix/pkgdb
|
|
;;
|
|
Darwin)
|
|
macosx_version=`echo $osrev | awk -F . '{ print "10."$1-4; }'`
|
|
universal_sdk="/Developer/SDKs/MacOSX${macosx_version}u.sdk"
|
|
if [ -d "${universal_sdk}" ]; then
|
|
echo "===> Building Universal binaries."
|
|
ospro=universal
|
|
export CFLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64 -isysroot ${universal_sdk}"
|
|
export LDFLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64 -Wl,-syslibroot,${universal_sdk}"
|
|
else
|
|
echo "===> Building non-Universal binaries."
|
|
fi
|
|
unset macosx_version universal_sdk
|
|
;;
|
|
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)
|
|
# Don't use the interopsystems.com package dir
|
|
pkgdbdir=$prefix/pkgdb
|
|
ospro=i386
|
|
;;
|
|
HPUX)
|
|
ospro=`uname -m | sed 's/^9000.*$/hppa/'`
|
|
;;
|
|
NetBSD)
|
|
;;
|
|
OpenBSD)
|
|
# 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=||'` ;;
|
|
--mk-fragment=*)
|
|
mk_fragment="$1" ;;
|
|
--compiler=*) compiler="$1" ;;
|
|
--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
|
|
|
|
[ -z "${mkfile}" ] && mkfile="$prefix/etc/mk.conf"
|
|
|
|
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 [ -n "${mk_fragment}" ]; then
|
|
bootstrap_flags="$bootstrap_flags ${mk_fragment}"
|
|
fi
|
|
if [ -n "${compiler}" ]; then
|
|
bootstrap_flags="$bootstrap_flags ${compiler}"
|
|
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."
|
|
case "$opsys" in
|
|
Darwin)
|
|
mkbinarykit_macpkg
|
|
;;
|
|
*)
|
|
mkbinarykit_tar
|
|
;;
|
|
esac
|