#!/bin/sh # $NetBSD: mkbinarykit,v 1.26 2007/10/09 19:19:08 martti 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= ] [ --mkconf= ] [ --no-build ] [ --workdir= ] [ bootstrap script arguments ] [ --fetch-cmd= ] [ --mk-fragment= ]' 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