#! /bin/sh # $NetBSD: bootstrap,v 1.140 2009/02/04 07:44:58 joerg Exp $ # # # Copyright (c) 2001-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 # the following environment variables are honored: # compiler/linker flags: CFLAGS, CPPFLAGS, LDFLAGS # tools: CP, GREP, ID, MKDIR, SH, TEST, TOUCH, XARGS BOOTSTRAP_VERSION=20060721 # Don't let the bootstrap program get confused by a pre-existing mk.conf # file. MAKECONF=/dev/null export MAKECONF ignorecasecheck=no unprivileged=no preserve_path=no # where the building takes place bootstrapdir=`dirname "$0"` bootstrapdir=`cd "${bootstrapdir}" && pwd` pkgsrcdir=`dirname "${bootstrapdir}"` wrkdir="`pwd`/work" usage="Usage: $0 "' [ --workdir ] [ --prefix ] [ --pkgdbdir ] [ --pkgmandir ] [ --sysconfdir ] [ --varbase ] [ --fetch-cmd ] [ --ignore-case-check ] [ --unprivileged | --ignore-user-check ] [ --preserve-path ] [ --compiler ] [ --abi [32|64] ] [ --mk-fragment ] [ --binary-kit ] [ --gzip-binary-kit ] [ --binary-macpkg ] [ --full ] [ --quiet ] [ --help ]' # this replicates some of the logic in bsd.prefs.mk. until # bootstrap-pkgsrc is merged into pkgsrc, we need to determine the # right value for OPSYS and MACHINE_ARCH. # strip / for BSD/OS, strip - for HP-UX opsys=`uname -s | tr -d /-` 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 ${packagemaker} -build -proj ${wrkdir}/macpkg.pmproj -p "${binary_macpkg}" } mkbinarykit_tar() { # in case tar was built by bootstrap PATH="$prefix/bin:$PATH"; export PATH cd / && tar -hcf "${binary_kit}" .$prefix .$pkgdbdir .$etc_mk_conf } mkbinarykit_tgz() { # in case tar was built by bootstrap PATH="$prefix/bin:$PATH"; export PATH cd / && tar -hzcf "${binary_gzip_kit}" .$prefix .$pkgdbdir .$etc_mk_conf } die() { echo >&2 "$@" exit 1 } echo_msg() { echo "===> $@" } # see if we're using gcc. If so, set $compiler_is_gnu to '1'. get_compiler() { testcc="${CC}" # normally, we'd just use 'cc', but certain configure tools look # for gcc specifically, so we have to see if that comes first if [ -z "${testcc}" ]; then save_IFS="${IFS}" IFS=':' for dir in ${PATH}; do test -z "$dir" && dir=. if [ -x "$dir/gcc" ]; then testcc="$dir/gcc" break fi done IFS="${save_IFS}" fi cat >${wrkdir}/$$.c </dev/null | grep -c indeed` rm -f ${wrkdir}/$$.c } get_abi() { abi_opsys=$@ if [ -n "$abi" ]; then die "ERROR: $abi_opsys has special ABI handling, --abi not supported (yet)." fi case "$abi_opsys" in IRIX) if [ `uname -r` -ge 6 ]; then abi=`sed -e 's/.*\(abi=\)\([on]*[36][24]\).*/\2/' /etc/compiler.defaults` isa=`sed -e 's/.*\(isa=mips\)\([1234]\).*/\2/' /etc/compiler.defaults` case "$abi" in o32) imakeopts="-DBuildO32 -DSgiISAo32=$isa" abi="" ;; n32) imakeopts="-DBuildN32 -DSgiISA32=$isa" abi="32" ;; 64 | n64) imakeopts="-DBuild64bit -DSgiISA64=$isa" abi="64" ;; esac else # IRIX before 6 abi=32 fi ;; esac } get_machine_arch_aix() { _cpuid=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El $_cpuid | grep ' POWER' >/dev/null 2>&1; then echo rs6000 else echo powerpc fi } check_prog() { _var="$1"; _name="$2" eval _tmp=\"\$$_var\" if [ "x$_tmp" != "x" ]; then # Variable is already set (by the user, for example) return 0 fi for _d in `echo $PATH | tr ':' ' '`; do if [ -f "$_d/$_name" ] && [ -x "$_d/$_name" ]; then # Program found eval $_var=\""$_d/$_name"\" return 1 fi done die "$_name not found in path." } opsys_finish() { case "$opsys" in IRIX) if [ ! -z "$imakeopts" ]; then echo "IMAKEOPTS+= $imakeopts" >> ${TARGET_MKCONF} fi if [ `uname -r` -lt 6 ]; then echo_msg "Installing fake ldd script" run_cmd "$install_sh -c -o $user -g $group -m 755 $pkgsrcdir/pkgtools/bootstrap-extras/files/fakeldd $prefix/sbin" need_extras=yes echo "LDD= $prefix/sbin/fakeldd" >> ${TARGET_MKCONF} fi ;; esac } is_root() { if [ `uname -s` = "IRIX" ]; then if [ `uname -r` -lt 6 -a -z "$ID" ]; then # older version of IRIX have an id command with limited features if [ "`$idprog`" != "uid=0(root) gid=0(sys)" ]; then return 0 fi return 1 fi fi if [ `$idprog -u` != 0 ]; then return 0 fi return 1 } # run a command, abort if it fails run_cmd() { echo_msg "running: $@" eval "$@" ret=$? if [ $ret -ne 0 ]; then echo_msg "exited with status $ret" die "aborted." fi } # Some versions of mkdir (notably SunOS) bail out too easily, so use the # install-sh wrapper instead. mkdir_p() { for dir in $@; do run_cmd "$install_sh -d -o $user -g $group $dir" done } mkdir_p_early() { if [ ! -d "$1" ]; then if mkdir -p "$1"; then : else echo_msg "mkdir $1 exited with status $?" die "aborted." fi fi } copy_src() { _src="$1"; _dst="$2" if [ ! -d $wrkdir/$_dst ]; then mkdir_p $wrkdir/$_dst fi $cpprog -r $_src/* $wrkdir/$_dst } get_optarg() { expr "x$1" : "x[^=]*=\\(.*\\)" } checkarg_sane_absolute_path() { case "$1" in "") ;; # the default value will be used. *[!-A-Za-z0-9_./]*) die "ERROR: Invalid characters in path $1 (from $2)." ;; /*) ;; *) die "ERROR: The argument to $2 must be an absolute path." ;; esac } checkarg_sane_relative_path() { case "$1" in "") ;; # the default value will be used. *[!-A-Za-z0-9_./]*) die "ERROR: Invalid characters in path $1 (from $2)." ;; /*) die "ERROR: The argument to $2 must be a relative path." ;; *) ;; esac } bootstrap_sh=${SH-/bin/sh} bootstrap_sh_set=${SH+set} # On some newer Ubuntu installations, /bin/sh is a symlink to /bin/dash, # whose echo(1) is not BSD-compatible. dash_echo_test=`$bootstrap_sh -c 'echo "\\100"'` if [ "$dash_echo_test" = "@" ]; then { echo "ERROR: Your shell's echo command is not BSD-compatible." echo "ERROR: Please select another shell by setting the environment" echo "ERROR: variable SH." } 1>&2 exit 1; fi build_start=`date` echo_msg "bootstrap command: $0 $@" echo_msg "bootstrap started: $build_start" # ensure system locations are empty; we will set them later when we know # whether they will be system wide or user specific prefix= pkgdbdir= pkgmandir= sysconfdir= varbase= full=no compiler="" quiet=no mk_fragment= while [ $# -gt 0 ]; do case $1 in --workdir=*) wrkdir=`get_optarg "$1"` ;; --workdir) wrkdir="$2"; shift ;; --prefix=*) prefix=`get_optarg "$1"` ;; --prefix) prefix="$2"; shift ;; --pkgdbdir=*) pkgdbdir=`get_optarg "$1"` ;; --pkgdbdir) pkgdbdir="$2"; shift ;; --pkgmandir=*) pkgmandir=`get_optarg "$1"` ;; --pkgmandir) pkgmandir="$2"; shift ;; --sysconfdir=*) sysconfdir=`get_optarg "$1"` ;; --sysconfdir) sysconfdir="$2"; shift ;; --varbase=*) varbase=`get_optarg "$1"` ;; --varbase) varbase="$2"; shift ;; --fetch-cmd=*) fetch_cmd=`get_optarg "$1"` ;; --fetch-cmd) fetch_cmd="$2"; shift ;; --compiler=*) compiler=`get_optarg "$1"` ;; --compiler) compiler="$2"; shift ;; --abi=*) abi=`get_optarg "$1"` ;; --abi) abi="$2"; shift ;; --ignore-case-check) ignorecasecheck=yes ;; --unprivileged | --ignore-user-check) unprivileged=yes ;; --preserve-path) preserve_path=yes ;; --mk-fragment=*) mk_fragment=`get_optarg "$1"` ;; --mk-fragment) mk_fragment="$2"; shift ;; --binary-kit=*) binary_kit=`get_optarg "$1"` ;; --binary-kit) binary_kit="$2"; shift ;; --gzip-binary-kit=*) binary_gzip_kit=`get_optarg "$1"` ;; --gzip-binary-kit) binary_gzip_kit="$2"; shift ;; --binary-macpkg=*) binary_macpkg=`get_optarg "$1"` ;; --binary-macpkg) binary_macpkg="$2"; shift ;; --full) full=yes ;; --quiet) quiet=yes ;; --help) echo "$usage"; exit ;; -h) echo "$usage"; exit ;; --*) echo "$usage"; exit 1 ;; esac shift done checkarg_sane_absolute_path "$wrkdir" "--workdir" checkarg_sane_absolute_path "$prefix" "--prefix" checkarg_sane_absolute_path "$pkgdbdir" "--pkgdbdir" checkarg_sane_absolute_path "$sysconfdir" "--sysconfdir" checkarg_sane_absolute_path "$varbase" "--varbase" checkarg_sane_relative_path "$pkgmandir" "--pkgmandir" # set defaults for system locations if not already set by the user wrkobjdir=${wrkdir}/pkgsrc if [ "$unprivileged" = "yes" ]; then [ -z "$prefix" ] && prefix=${HOME}/pkg elif [ -z "$prefix" -o "$prefix" = "/usr/pkg" ]; then prefix=/usr/pkg [ -z "$varbase" ] && varbase=/var fi [ -z "$varbase" ] && varbase=${prefix}/var [ -z "$pkgdbdir" ] && pkgdbdir=${varbase}/db/pkg if [ "$prefix" = "/usr" ]; then [ -z "$pkgmandir" ] && pkgmandir=share/man else [ -z "$pkgmandir" ] && pkgmandir=man fi mandir=${prefix}/${pkgmandir} [ -z "$sysconfdir" ] && sysconfdir=${prefix}/etc if [ "x$preserve_path" != "xyes" ]; then PATH="$PATH:/sbin:/usr/sbin" fi overpath="" root_user=root bmakexenv= bmakexargs= need_extras=no case "$opsys" in Darwin) root_group=wheel need_bsd_install=no need_awk=no need_sed=no set_opsys=no [ -z "$fetch_cmd" ] && fetch_cmd="/usr/bin/ftp" machine_arch=`uname -p` CC="gcc -isystem /usr/include"; export CC osrev=`uname -r` macosx_version=`echo $osrev | awk -F . '{ print "10."$1-4; }'` case "$macosx_version" in 10.[0-4]) packagemaker=/Developer/Tools/packagemaker ;; *) packagemaker=/Developer/usr/bin/packagemaker ;; esac unset osrev macosx_version ;; DragonFly) root_group=wheel need_bsd_install=no need_awk=no need_sed=no set_opsys=no check_prog tarprog tar machine_arch=`uname -p` case `uname -r` in 1.1[0-9]*) [ -z "$fetch_cmd" ] && fetch_cmd="/usr/bin/ftp" ;; 1.0* | 1.1 | 1.2.* | 1.3.*) ;; *) [ -z "$fetch_cmd" ] && fetch_cmd="/usr/bin/ftp" ;; esac ;; FreeBSD) root_group=wheel need_bsd_install=no need_awk=no need_sed=no set_opsys=no machine_arch=`uname -p` ;; HPUX) root_group=sys need_bsd_install=yes need_awk=yes need_sed=yes set_opsys=no machine_arch=`uname -m | sed 's/^9000.*$/hppa/'` ;; IRIX*) if [ -d "/usr/freeware/bin" ]; then overpath="/usr/freeware/bin:$overpath" fi if [ -d "/usr/bsd/bin" ]; then overpath="/usr/bsd/bin:$overpath" fi root_group=sys need_bsd_install=yes get_abi "IRIX" opsys=IRIX need_awk=yes need_sed=yes set_opsys=yes machine_arch=mipseb bmakexargs="MACHINE_ARCH=$machine_arch" bmakexenv="MAKE=pmake" check_compiler=yes if [ `uname -r` -lt 6 ]; then # IRIX 5's mkdir bails out with an error when trying to create with the -p # option an already existing directory need_mkdir=yes fi ;; Linux) if [ -f /etc/debian_version ]; then DEBIAN=yes fi root_group=root need_bsd_install=no need_awk=no need_sed=no set_opsys=no machine_arch=`uname -m | sed -e 's/i.86/i386/'` ;; NetBSD) root_group=wheel need_bsd_install=no need_awk=no need_sed=no set_opsys=no machine_arch=`uname -p` ;; OpenBSD) root_group=wheel need_bsd_install=no need_awk=no need_sed=no set_opsys=no machine_arch=`uname -m` ;; SunOS) if [ -d "/usr/xpg4/bin" ]; then overpath="/usr/xpg4/bin:$overpath" fi root_group=root need_bsd_install=yes need_awk=yes need_sed=yes need_ksh=yes set_opsys=no groupsprog="/usr/xpg4/bin/id -gn" whoamiprog="/usr/xpg4/bin/id -un" machine_arch=`uname -p | sed -e 's/i86pc/i386/'` check_compiler=yes ;; AIX) root_group=system need_bsd_install=yes need_awk=yes need_sed=yes need_fixed_strip=yes set_opsys=no machine_arch=`get_machine_arch_aix` ;; Interix) is_root () { if id -G | grep -q 131616; then return 1 fi return 0 } mkdir_p () { mkdir -p "$@" # allows umask to take effect } default_install_mode=0775 root_user=`id -u` root_group=131616 need_bsd_install=yes need_awk=yes need_sed=yes set_opsys=no need_xargs=yes # only used for unprivileged builds groupsprog="id -gn" # for bootstrap only; pkgsrc uses CPPFLAGS CC="gcc -D_ALL_SOURCE"; export CC ac_cv_header_poll_h=no; export ac_cv_header_poll_h ac_cv_func_poll=no; export ac_cv_func_poll ;; UnixWare) root_group=sys need_bsd_install=no BSTRAP_ENV="INSTALL=/usr/ucb/install $BSTRAP_ENV" need_mkdir=yes need_awk=yes need_sed=yes whoamiprog=/usr/ucb/whoami set_opsys=no CC="gcc -DUNIXWARE"; export CC ;; OSF1) root_group=system need_bsd_install=yes need_awk=yes need_sed=yes need_ksh=yes set_opsys=no ;; QNX) root_group=root need_bsd_install=yes set_opsys=no groupsprog="id -gn" whoamiprog="id -un" fetch_cmd="/usr/bin/ftp" machine_arch=`uname -p | sed -e 's/x86/i386/'` ;; *) echo "This platform ($opsys) is untried - good luck, and thanks for using pkgsrc" root_group=wheel need_bsd_install=yes need_awk=yes need_sed=yes set_opsys=no ;; esac if [ -z "$fetch_cmd" ]; then need_ftp=yes else need_ftp=no fi # If "--full" is specified, then install all of the platform-independent # bootstrap software. # case "$full" in yes) need_bsd_install=yes need_awk=yes need_sed=yes need_ftp=yes need_ksh=yes ;; esac case "$quiet" in yes) configure_quiet_flags="--quiet" make_quiet_flags="-s" ;; no) configure_quiet_flags="" make_quiet_flags="" esac # export OPSYS and MACHINE_ARCH for pkg_install. we only set # MACHINE_ARCH on platforms where we override bmake's value. OPSYS=${opsys} export OPSYS if [ "${machine_arch}" != "" ]; then MACHINE_ARCH=${machine_arch} export MACHINE_ARCH fi if [ "x$preserve_path" != "xyes" ]; then PATH="$overpath:$PATH" fi check_prog awkprog awk check_prog chmodprog chmod if [ -n "$CP" ]; then cpprog="$CP" else check_prog cpprog cp fi if [ -n "$ID" ]; then idprog="$ID" else check_prog idprog id fi check_prog groupsprog groups check_prog lnprog ln check_prog lsprog ls check_prog rmdirprog rmdir check_prog sedprog sed check_prog shprog sh check_prog whoamiprog whoami mkdir_p_early ${wrkdir} if touch ${wrkdir}/.writeable; then : else echo "\"${wrkdir}\" is not writeable. Try $0 -h."; exit 1 fi echo "Working directory is: ${wrkdir}" if [ "$compiler" = "" ] && [ x"$check_compiler" = x"yes" ]; then get_compiler if [ $compiler_is_gnu -gt 0 ]; then compiler="gcc" else case "$opsys" in IRIX) if [ `uname -r` -ge 6 ]; then compiler="mipspro" else compiler="ido" fi test -n "$CC" || CC=cc ;; SunOS) compiler="sunpro" test -n "$CC" || CC=cc ;; esac fi fi mkdir_p_early ${wrkdir}/bin # build install-sh run_cmd "$sedprog -e 's|@DEFAULT_INSTALL_MODE@|'${default_install_mode-0755}'|' $pkgsrcdir/sysutils/install-sh/files/install-sh.in > $wrkdir/bin/install-sh" run_cmd "$chmodprog +x $wrkdir/bin/install-sh" install_sh="$shprog $wrkdir/bin/install-sh" is_root if [ $? = 1 ]; then user=$root_user group=$root_group else if [ $unprivileged = "no" ]; then die "You must be either root to install bootstrap-pkgsrc or use the --unprivileged option." fi user=`$whoamiprog` group=`$groupsprog | $awkprog '{print $1}'` echo_msg "building as unprivileged user $user/$group" # force bmake install target to use $user and $group echo "BINOWN=$user BINGRP=$group LIBOWN=$user LIBGRP=$group MANOWN=$user MANGRP=$group" > ${wrkdir}/Makefile.inc fi # make sure we're using a case-sensitive file system if [ $ignorecasecheck = "no" ]; then case "$opsys" in Interix) echo_msg "Testing file system case sensitivity" for fs in "$prefix"; do testdir="pkgsrc-REQUIRES-case-SENSITIVE-filesystem" testdir_mangled="PKGSRC-requires-CASE-sensitive-FILESYSTEM" mkdir_p "$fs/$testdir" || die "can't verify filesystem ($fs) case-sensitivity" if [ -d "$fs/$testdir_mangled" ]; then $rmdirprog "$fs/$testdir" die "\"$fs\" needs to be on a case-sensitive filesystem (see README.$opsys)" fi $rmdirprog "$fs/$testdir" done ;; esac fi # export the proper environment PATH=$prefix/bin:$prefix/sbin:${PATH}; export PATH if [ -d /usr/ccs/bin -a -x /usr/ccs/bin/make ]; then PATH=${PATH}:/usr/ccs/bin; export PATH fi PKG_DBDIR=$pkgdbdir; export PKG_DBDIR LOCALBASE=$prefix; export LOCALBASE VARBASE=$varbase; export VARBASE # set up an example mk.conf file TARGET_MKCONF=${wrkdir}/mk.conf.example echo_msg "Creating default mk.conf. in ${wrkdir}" echo "# Example ${sysconfdir}/mk.conf file produced by bootstrap-pkgsrc" > ${TARGET_MKCONF} echo "# `date`" >> ${TARGET_MKCONF} echo "" >> ${TARGET_MKCONF} echo ".ifdef BSD_PKG_MK # begin pkgsrc settings" >> ${TARGET_MKCONF} echo "" >> ${TARGET_MKCONF} # IRIX64 needs to be set to IRIX, for example if [ "$set_opsys" = "yes" ]; then echo "OPSYS= $opsys" >> ${TARGET_MKCONF} fi if [ ! -z "$abi" ]; then echo "ABI= $abi" >> ${TARGET_MKCONF} fi if [ "$compiler" != "" ]; then echo "PKGSRC_COMPILER= $compiler" >> ${TARGET_MKCONF} fi case "$compiler" in sunpro) echo "CC= cc" >> ${TARGET_MKCONF} echo "CXX= CC" >> ${TARGET_MKCONF} echo "CPP= \${CC} -E" >> ${TARGET_MKCONF} ;; esac if [ -n "$SUNWSPROBASE" ]; then echo "SUNWSPROBASE= $SUNWSPROBASE" >> ${TARGET_MKCONF} fi echo "" >> ${TARGET_MKCONF} # enable unprivileged builds if not root if [ "$unprivileged" = "yes" ]; then echo "UNPRIVILEGED= yes" >> ${TARGET_MKCONF} fi # save environment in example mk.conf echo "PKG_DBDIR= $pkgdbdir" >> ${TARGET_MKCONF} echo "LOCALBASE= $prefix" >> ${TARGET_MKCONF} echo "VARBASE= $varbase" >> ${TARGET_MKCONF} if [ "${sysconfdir}" != "${prefix}/etc" ]; then echo "PKG_SYSCONFBASE= $sysconfdir" >> ${TARGET_MKCONF} fi echo "PKG_TOOLS_BIN= $prefix/sbin" >> ${TARGET_MKCONF} echo "PKGMANDIR= $pkgmandir" >> ${TARGET_MKCONF} echo "" >> ${TARGET_MKCONF} BOOTSTRAP_MKCONF=${wrkdir}/mk.conf cp ${TARGET_MKCONF} ${BOOTSTRAP_MKCONF} # sbin is used by pkg_install, share/mk by bootstrap-mk-files mkdir_p $wrkdir/sbin $wrkdir/share/mk mkdir_p_early ${wrkdir} if [ "$need_bsd_install" = "yes" ]; then BSTRAP_ENV="INSTALL='$prefix/bin/install-sh -c' $BSTRAP_ENV" echo "TOOLS_PLATFORM.install?= $prefix/bin/install-sh" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.install?= $wrkdir/bin/install-sh" >> ${BOOTSTRAP_MKCONF} fi if [ "$need_fixed_strip" = "yes" ] ; then echo_msg "Installing fixed strip script" run_cmd "$install_sh -c -o $user -g $group -m 755 $pkgsrcdir/pkgtools/bootstrap-extras/files/strip-sh $wrkdir/bin/strip" echo "TOOLS_PLATFORM.strip?= $prefix/bin/strip" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.strip?= $wrkdir/bin/strip" >> ${BOOTSTRAP_MKCONF} need_extras=yes fi if [ "$need_mkdir" = "yes" -a -z "$MKDIR" ]; then echo_msg "Installing fixed mkdir script \"mkdir-sh\"" run_cmd "$install_sh -c -o $user -g $group -m 755 $pkgsrcdir/pkgtools/bootstrap-extras/files/mkdir-sh $wrkdir/bin/mkdir-sh" echo "TOOLS_PLATFORM.mkdir?= $prefix/bin/mkdir-sh -p" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.mkdir?= $wrkdir/bin/mkdir-sh -p" >> ${BOOTSTRAP_MKCONF} need_extras=yes fi if [ "$need_xargs" = "yes" ]; then echo_msg "Installing fixed xargs script" run_cmd "$install_sh -c -o $user -g $group -m 755 $pkgsrcdir/pkgtools/bootstrap-extras/files/xargs-sh $wrkdir/bin/xargs" echo "TOOLS_PLATFORM.xargs?= $prefix/bin/xargs" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.xargs?= $wrkdir/bin/xargs" >> ${BOOTSTRAP_MKCONF} need_extras=yes fi echo_msg "Bootstrapping mk-files" run_cmd "(cd ${pkgsrcdir}/pkgtools/bootstrap-mk-files/files && env CP=${cpprog} \ OPSYS=${opsys} MK_DST=${wrkdir}/share/mk ROOT_GROUP=${root_group} \ ROOT_USER=${root_user} SED=${sedprog} SYSCONFDIR=${sysconfdir} \ $shprog ./bootstrap.sh)" bootstrap_bmake() { echo_msg "Bootstrapping bmake" copy_src $pkgsrcdir/devel/bmake/files bmake run_cmd "(cd $wrkdir/bmake && env $bmakexenv $shprog ./boot-strap $configure_quiet_flags -q -o $opsys --prefix=$wrkdir --sysconfdir=$wrkdir --mksrc none --with-default-sys-path="$wrkdir/share/mk" $bmakexargs)" run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/bmake/$opsys/bmake $wrkdir/bin/bmake" } bootstrap_bmake bmake="$wrkdir/bin/bmake $make_quiet_flags" # build libnbcompat echo_msg "Building libnbcompat" copy_src $pkgsrcdir/pkgtools/libnbcompat/files libnbcompat run_cmd "(cd $wrkdir/libnbcompat; $shprog ./configure $configure_quiet_flags -C --prefix=$prefix --mandir=$mandir --sysconfdir=$sysconfdir --enable-bsd-getopt --enable-db && $bmake $make_quiet_flags)" # bootstrap ksh if necessary case "$need_ksh" in yes) echo_msg "Bootstrapping ksh" copy_src $pkgsrcdir/shells/pdksh/files ksh test -n "$CC" || CC=gcc # default to gcc if no compiler is specified run_cmd "(cd $wrkdir/ksh && env $BSTRAP_ENV $shprog ./configure $configure_quiet_flags --prefix=$prefix --mandir=$mandir --sysconfdir=$sysconfdir && $bmake)" run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/ksh/ksh $wrkdir/bin/pdksh" echo "TOOLS_PLATFORM.sh?= $prefix/bin/pdksh" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.sh?= $wrkdir/bin/pdksh" >> ${BOOTSTRAP_MKCONF} echo "TOOLS_PLATFORM.ksh?= $prefix/bin/pdksh" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.ksh?= $wrkdir/bin/pdksh" >> ${BOOTSTRAP_MKCONF} # Now rebootstrap bmake for ksh echo_msg "Rebootstrapping bmake for ksh" bmakexargs="$bmakexargs --with-defshell=$wrkdir/bin/pdksh" bootstrap_bmake ;; esac # bootstrap awk if necessary case "$need_awk" in yes) echo_msg "Bootstrapping awk" copy_src $pkgsrcdir/lang/nawk/files awk test -n "$CC" || CC=gcc # default to gcc if no compiler is specified run_cmd "(cd $wrkdir/awk && $bmake -f Makefile CC=\"${CC}\" CFLAGS=\"${CFLAGS}\")" run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/awk/a.out $wrkdir/bin/nawk" echo "TOOLS_PLATFORM.awk?= $prefix/bin/nawk" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.awk?= $wrkdir/bin/nawk" >> ${BOOTSTRAP_MKCONF} ;; esac # bootstrap sed if necessary case "$need_sed" in yes) echo_msg "Bootstrapping sed" copy_src $pkgsrcdir/textproc/nbsed/files sed run_cmd "(cd $wrkdir/sed; env $BSTRAP_ENV CPPFLAGS='$CPPFLAGS -I../libnbcompat' LDFLAGS='$LDFLAGS -L../libnbcompat' LIBS='-lnbcompat' $shprog ./configure $configure_quiet_flags -C --prefix=$prefix --mandir=$mandir --sysconfdir=$sysconfdir --program-transform-name='s,sed,nbsed,' && $bmake)" run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/sed/sed $wrkdir/bin/sed" echo "TOOLS_PLATFORM.sed?= $prefix/bin/nbsed" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.sed?= $wrkdir/bin/sed" >> ${BOOTSTRAP_MKCONF} ;; esac # bootstrap pkg_install echo_msg "Bootstrapping pkgtools" copy_src $pkgsrcdir/pkgtools/pkg_install/files pkg_install run_cmd "(cd $wrkdir/pkg_install; env $BSTRAP_ENV \ CPPFLAGS='$CPPFLAGS -I../libnbcompat -I../../libnbcompat' \ LDFLAGS='$LDFLAGS -L../libnbcompat -L../../libnbcompat' \ LIBS='-lnbcompat' $shprog ./configure $configure_quiet_flags -C \ --enable-bootstrap --prefix=$prefix --sysconfdir=$sysconfdir \ --with-pkgdbdir=$pkgdbdir --mandir=$mandir $pkg_install_args && $bmake)" run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/admin/pkg_admin $wrkdir/sbin/pkg_admin" run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/create/pkg_create $wrkdir/sbin/pkg_create" run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/info/pkg_info $wrkdir/sbin/pkg_info" echo "PKG_ADMIN_CMD?= $wrkdir/sbin/pkg_admin" >> ${BOOTSTRAP_MKCONF} echo "PKG_CREATE_CMD?= $wrkdir/sbin/pkg_create" >> ${BOOTSTRAP_MKCONF} echo "PKG_INFO_CMD?= $wrkdir/sbin/pkg_info" >> ${BOOTSTRAP_MKCONF} if [ -n "${fetch_cmd}" ]; then echo "FETCH_CMD= $fetch_cmd" >> ${TARGET_MKCONF} fi MAKECONF=$wrkdir/mk.conf export MAKECONF if [ "$bootstrap_sh_set" = "set" ]; then echo "TOOLS_PLATFORM.sh?= ${bootstrap_sh}" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.sh?= ${bootstrap_sh}" >> ${BOOTSTRAP_MKCONF} fi # preserve compiler and tool environment variables settings if test -n "$CP"; then echo "TOOLS_PLATFORM.cp?= $CP" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.cp?= $CP" >> ${BOOTSTRAP_MKCONF} fi if test -n "$GREP"; then echo "TOOLS_PLATFORM.grep?= $GREP" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.grep?= $GREP" >> ${BOOTSTRAP_MKCONF} fi if test -n "$ID"; then echo "TOOLS_PLATFORM.id?= $ID" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.id?= $ID" >> ${BOOTSTRAP_MKCONF} fi if test -n "$MKDIR"; then echo "TOOLS_PLATFORM.mkdir?= $MKDIR" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.mkdir?= $MKDIR" >> ${BOOTSTRAP_MKCONF} fi if test -n "$TEST"; then echo "TOOLS_PLATFORM.test?= $TEST" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.test?= $TEST" >> ${BOOTSTRAP_MKCONF} fi if test -n "$TOUCH"; then echo "TOOLS_PLATFORM.touch?= $TOUCH" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.touch?= $TOUCH" >> ${BOOTSTRAP_MKCONF} fi if test -n "$XARGS"; then echo "TOOLS_PLATFORM.xargs?= $XARGS" >> ${TARGET_MKCONF} echo "TOOLS_PLATFORM.xargs?= $XARGS" >> ${BOOTSTRAP_MKCONF} fi if test -n "$CFLAGS"; then echo "CFLAGS+= $CFLAGS" >> ${TARGET_MKCONF} echo "DBG= # prevent DBG from adding default optimizer flags" >> ${TARGET_MKCONF} echo "DBG= # prevent DBG from adding default optimizer flags" >> ${BOOTSTRAP_MKCONF} fi if test -n "$CPPFLAGS"; then echo "CPPFLAGS+= $CPPFLAGS" >> ${TARGET_MKCONF} fi if test -n "$LDFLAGS"; then echo "LDFLAGS+= $LDFLAGS" >> ${TARGET_MKCONF} fi # opsys specific fiddling opsys_finish echo "WRKOBJDIR= ${wrkdir}/wrk" >> ${BOOTSTRAP_MKCONF} echo "" >> ${TARGET_MKCONF} echo "" >> ${BOOTSTRAP_MKCONF} if test -n "${mk_fragment}"; then cat "${mk_fragment}" >> ${TARGET_MKCONF} echo "" >> ${TARGET_MKCONF} fi echo ".endif # end pkgsrc settings" >> ${TARGET_MKCONF} echo ".endif # end pkgsrc settings" >> ${BOOTSTRAP_MKCONF} # register packages # usage: register_package [additional arguments] build_package() { run_cmd "(cd $pkgsrcdir/$1 && $bmake -DPKG_PRESERVE MAKECONF=${BOOTSTRAP_MKCONF} install)" } # # Please make sure that the following packages and # only the following packages set BOOTSTRAP_PKG=yes. # echo_msg "Installing packages" build_package "pkgtools/bootstrap-mk-files" case "$need_bsd_install" in yes) build_package "sysutils/install-sh";; esac case "$need_ksh" in yes) build_package "shells/pdksh";; esac build_package "devel/bmake" case "$need_awk" in yes) build_package "lang/nawk";; esac case "$need_sed" in yes) build_package "textproc/nbsed";; esac case "$need_extras" in yes) build_package "pkgtools/bootstrap-extras";; esac build_package "pkgtools/pkg_install" etc_mk_conf="$sysconfdir/mk.conf" # Install the example mk.conf so that it is used, but only if it doesn't # exist yet. This can happen with non-default sysconfdir settings. mkdir_p "$sysconfdir" if [ ! -f "$etc_mk_conf" ]; then cp "$TARGET_MKCONF" "$etc_mk_conf" TARGET_MKCONF="$etc_mk_conf" fi hline="===========================================================================" echo "" echo "$hline" echo "" echo "Please remember to add $prefix/bin to your PATH environment variable" echo "and $mandir to your MANPATH environment variable, if necessary." echo "" echo "An example mk.conf file with the settings you provided to \"bootstrap\"" echo "has been created for you. It can be found in:" echo "" echo " ${TARGET_MKCONF}" echo "" if [ "$TARGET_MKCONF" != "$etc_mk_conf" ]; then echo "Please copy it to $etc_mk_conf to use it." echo "" fi echo "You can find extensive documentation of the NetBSD Packages Collection" echo "in $pkgsrcdir/doc/pkgsrc.txt." echo "" echo "Hopefully everything is now complete." echo "Thank you" echo "" echo "$hline" echo "" [ ! -z "${binary_kit}" ] && mkbinarykit_tar [ ! -z "${binary_gzip_kit}" ] && mkbinarykit_tgz [ ! -z "${binary_macpkg}" ] && mkbinarykit_macpkg echo_msg "bootstrap started: $build_start" echo_msg "bootstrap ended: `date`" exit 0