Previously there were at least 5 different ways MACHINE_ARCH could be set, some statically and some at run time, and in many cases these settings differed, leading to issues at pkg_add time where there was conflict between the setting encoded into the package and that used by pkg_install. Instead, move to a single source of truth where the correct value based on the host and the chosen (or default) ABI is determined in the bootstrap script. The value can still be overridden in mk.conf if necessary, e.g. for cross-compiling. ABI is now set by default and if unset a default is calculated based on MACHINE_ARCH. This fixes some OS, e.g. Linux, where the wrong default was previously chosen. As a result of the refactoring there is no need for LOWER_ARCH, with references to it replaced by MACHINE_ARCH. SPARC_TARGET_ARCH is also removed.
1365 lines
36 KiB
Bash
Executable file
1365 lines
36 KiB
Bash
Executable file
#! /bin/sh
|
|
|
|
# $NetBSD: bootstrap,v 1.227 2016/01/24 16:14:44 jperkin Exp $
|
|
#
|
|
# Copyright (c) 2001-2011 Alistair Crooks <agc@NetBSD.org>
|
|
# 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.
|
|
#
|
|
# 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, LIBS
|
|
# 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
|
|
|
|
# No vulnerability checks since there might be an incompatible checker installed
|
|
NO_PKGTOOLS_REQD_CHECK=yes
|
|
export NO_PKGTOOLS_REQD_CHECK
|
|
|
|
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 "'
|
|
[ --abi [32|64] ]
|
|
[ --binary-kit <tarball> ]
|
|
[ --binary-macpkg <pkg> ]
|
|
[ --compiler <compiler> ]
|
|
[ --cwrappers ]
|
|
[ --full ]
|
|
[ --gzip-binary-kit <tarball> ]
|
|
[ --help ]
|
|
[ --make-jobs <num> ]
|
|
[ --mk-fragment <mk.conf> ]
|
|
[ --pkgdbdir <pkgdbdir> ]
|
|
[ --pkginfodir <pkginfodir> ]
|
|
[ --pkgmandir <pkgmandir> ]
|
|
[ --prefer-pkgsrc <list|yes|no> ]
|
|
[ --prefix <prefix> ]
|
|
[ --preserve-path ]
|
|
[ --quiet ]
|
|
[ --sysconfdir <sysconfdir> ]
|
|
[ --unprivileged | --ignore-user-check ]
|
|
[ --varbase <varbase> ]
|
|
[ --workdir <workdir> ]
|
|
'
|
|
|
|
# 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 -hcf - .$prefix .$pkgdbdir .$etc_mk_conf | gzip > "${binary_gzip_kit}"
|
|
}
|
|
|
|
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
|
|
|
|
# Clang compiler pretends to be GCC, so we have to check that
|
|
cat >${wrkdir}/$$.c <<EOF
|
|
#ifdef __clang__
|
|
indeed
|
|
#endif
|
|
EOF
|
|
compiler_is_clang=`${testcc:-cc} -E ${wrkdir}/$$.c 2>/dev/null | grep -c indeed`
|
|
rm -f ${wrkdir}/$$.c
|
|
|
|
cat >${wrkdir}/$$.c <<EOF
|
|
#ifdef __GNUC__
|
|
#ifndef __clang__
|
|
indeed
|
|
#endif
|
|
#endif
|
|
EOF
|
|
compiler_is_gnu=`${testcc:-cc} -E ${wrkdir}/$$.c 2>/dev/null | grep -c indeed`
|
|
rm -f ${wrkdir}/$$.c
|
|
|
|
}
|
|
get_abi()
|
|
{
|
|
abi_opsys=$@
|
|
|
|
if [ -n "$abi" ]; then
|
|
case "$abi_opsys" in
|
|
IRIX)
|
|
die "ERROR: $abi_opsys has special ABI handling, --abi not supported (yet)."
|
|
;;
|
|
esac
|
|
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
|
|
}
|
|
|
|
get_machine_arch_darwin()
|
|
{
|
|
case `uname -p` in
|
|
i386)
|
|
# Returns "i386" or "x86_64" depending on CPU
|
|
echo `uname -m`
|
|
;;
|
|
powerpc)
|
|
# sysctl mib exists on 64-bit hardware
|
|
if [ `sysctl -n hw.optional.64bitops 2>/dev/null` = "1" ]; then
|
|
echo "powerpc64"
|
|
else
|
|
echo "powerpc"
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
|
|
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 [ -n "$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
|
|
;;
|
|
Haiku)
|
|
need_extras=yes
|
|
echo "LDD= $prefix/sbin/fakeldd" >> ${TARGET_MKCONF}
|
|
;;
|
|
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 1
|
|
fi
|
|
return 0
|
|
fi
|
|
fi
|
|
if [ `$idprog -u` != 0 ]; then
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# 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()
|
|
{
|
|
[ -d "$1" ] && return 0
|
|
mkdir -p "$1" 2> /dev/null && return 0
|
|
parent=`dirname "$1"`
|
|
mkdir_p_early "$parent"
|
|
if [ ! -d "$1" ] && mkdir "$1"; then
|
|
echo_msg "mkdir $1 exited with status $?"
|
|
die "aborted."
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
copy_src()
|
|
{
|
|
_src="$1"; _dst="$2"
|
|
if [ ! -d $wrkdir/$_dst ]; then
|
|
mkdir_p $wrkdir/$_dst
|
|
fi
|
|
$cpprog -r $_src/* $wrkdir/$_dst
|
|
if [ -f $wrkdir/$_dst/config.guess ]; then
|
|
$cpprog $pkgsrcdir/mk/gnu-config/config.guess $wrkdir/$_dst/
|
|
fi
|
|
if [ -f $wrkdir/$_dst/config.sub ]; then
|
|
$cpprog $pkgsrcdir/mk/gnu-config/config.sub $wrkdir/$_dst/
|
|
fi
|
|
}
|
|
|
|
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 not end in /." ;;
|
|
/*) ;;
|
|
*) 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}
|
|
|
|
case "$bootstrap_sh" in
|
|
/*)
|
|
;;
|
|
*)
|
|
echo "ERROR: The variable SH must contain an absolute path" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# On some newer Ubuntu installations, /bin/sh is a symlink to /bin/dash,
|
|
# whose echo(1) is not BSD-compatible.
|
|
# On all Debian GNU/kFreeBSD 7.0, /bin/sh is a symlink to /bin/dash, and
|
|
# use /bin/bash. bootstrap forces /bin/bash is used.
|
|
dash_echo_test=`$bootstrap_sh -c 'echo "\\100"'`
|
|
if [ "$opsys" != "GNUkFreeBSD" ] && [ "$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
|
|
|
|
if [ -n "$PKG_PATH" ]; then
|
|
echo "ERROR: Please unset PKG_PATH before running bootstrap." 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=
|
|
pkginfodir=
|
|
pkgmandir=
|
|
sysconfdir=
|
|
varbase=
|
|
|
|
compiler=""
|
|
cwrappers=no
|
|
full=no
|
|
make_jobs=1
|
|
mk_fragment=
|
|
quiet=no
|
|
|
|
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 ;;
|
|
--pkginfodir=*) pkginfodir=`get_optarg "$1"` ;;
|
|
--pkginfodir) pkginfodir="$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 ;;
|
|
--compiler=*) compiler=`get_optarg "$1"` ;;
|
|
--compiler) compiler="$2"; shift ;;
|
|
--abi=*) abi=`get_optarg "$1"` ;;
|
|
--abi) abi="$2"; shift ;;
|
|
--cwrappers) cwrappers=yes ;;
|
|
--unprivileged | --ignore-user-check) unprivileged=yes ;;
|
|
--prefer-pkgsrc=*)
|
|
prefer_pkgsrc=`get_optarg "$1"` ;;
|
|
--prefer-pkgsrc)
|
|
prefer_pkgsrc="$2"; shift ;;
|
|
--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 ;;
|
|
--make-jobs=*) make_jobs=`get_optarg "$1"` ;;
|
|
--make-jobs) make_jobs="$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 "$pkginfodir" "--pkginfodir"
|
|
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 "$pkginfodir" ] && pkginfodir=share/info
|
|
[ -z "$pkgmandir" ] && pkgmandir=share/man
|
|
else
|
|
[ -z "$pkginfodir" ] && pkginfodir=info
|
|
[ -z "$pkgmandir" ] && pkgmandir=man
|
|
fi
|
|
infodir=${prefix}/${pkginfodir}
|
|
mandir=${prefix}/${pkgmandir}
|
|
[ -z "$sysconfdir" ] && sysconfdir=${prefix}/etc
|
|
|
|
if [ "x$preserve_path" != "xyes" ]; then
|
|
PATH="$PATH:/sbin:/usr/sbin"
|
|
fi
|
|
|
|
overpath=""
|
|
root_user=root
|
|
bmakexargs=
|
|
need_extras=no
|
|
use_bsdinstall=
|
|
case "$opsys" in
|
|
AIX)
|
|
root_group=system
|
|
need_bsd_install=yes
|
|
need_awk=yes
|
|
need_sed=yes
|
|
need_ksh=yes
|
|
need_fixed_strip=yes
|
|
set_opsys=no
|
|
machine_arch=`get_machine_arch_aix`
|
|
;;
|
|
Bitrig)
|
|
root_group=wheel
|
|
need_bsd_install=no
|
|
need_awk=no
|
|
need_sed=no
|
|
set_opsys=no
|
|
machine_arch=`arch -s`
|
|
check_compiler=yes
|
|
;;
|
|
CYGWIN_*)
|
|
is_root () {
|
|
if id -nG | grep -q 'Administrators'; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
root_user=Administrators
|
|
root_group=Administrators
|
|
need_bsd_install=no
|
|
opsys=`uname -o`
|
|
need_awk=no
|
|
need_sed=no
|
|
need_xargs=no
|
|
# only used for unprivileged builds.
|
|
whoamiprog='id -u'
|
|
groupsprog='id -g'
|
|
;;
|
|
|
|
Darwin)
|
|
root_group=wheel
|
|
need_bsd_install=no
|
|
need_awk=no
|
|
need_sed=no
|
|
set_opsys=no
|
|
machine_arch=`get_machine_arch_darwin`
|
|
CC=${CC:-"cc -isystem /usr/include"}; export CC
|
|
check_compiler=yes
|
|
osrev=`uname -r`
|
|
macosx_version=`echo $osrev | awk -F . '{ print "10."$1-4; }'`
|
|
case "$macosx_version" in
|
|
10.[7-9])
|
|
packagemaker=/Applications/PackageMaker.app/Contents/MacOS/PackageMaker
|
|
;;
|
|
10.[0-4])
|
|
packagemaker=/Developer/Tools/packagemaker
|
|
;;
|
|
*)
|
|
packagemaker=/Developer/usr/bin/packagemaker
|
|
;;
|
|
esac
|
|
case "$macosx_version" in
|
|
10.[8-9]|10.1[01])
|
|
need_awk=yes
|
|
need_sed=yes
|
|
;;
|
|
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`
|
|
;;
|
|
FreeBSD)
|
|
root_group=wheel
|
|
need_bsd_install=no
|
|
need_awk=no
|
|
need_sed=no
|
|
set_opsys=no
|
|
machine_arch=`uname -p`
|
|
check_compiler=yes
|
|
;;
|
|
FreeMiNT)
|
|
root_group=root
|
|
need_bsd_install=no
|
|
need_awk=no
|
|
need_sed=no
|
|
set_opsys=no
|
|
machine_arch=m68k
|
|
;;
|
|
GNUkFreeBSD)
|
|
root_group=root
|
|
need_bsd_install=no
|
|
need_awk=yes
|
|
need_sed=no
|
|
set_opsys=no
|
|
machine_arch=`uname -m`
|
|
;;
|
|
Haiku)
|
|
root_user=`id -un`
|
|
root_group=root
|
|
need_bsd_install=no
|
|
need_awk=no
|
|
need_sed=no
|
|
set_opsys=no
|
|
case `uname -m` in
|
|
BeMac)
|
|
machine_arch=powerpc
|
|
;;
|
|
BePC)
|
|
machine_arch=i386
|
|
;;
|
|
*)
|
|
machine_arch=`uname -p`
|
|
;;
|
|
esac
|
|
;;
|
|
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/'`
|
|
;;
|
|
Interix)
|
|
is_root () {
|
|
if id -G | grep -q 131616; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
mkdir_p () {
|
|
mkdir -p "$@" # allows umask to take effect
|
|
}
|
|
default_install_mode=0775
|
|
root_user=`id -un`
|
|
root_group=+Administrators
|
|
case `uname -r` in
|
|
3.* | 5.*)
|
|
need_bsd_install=yes
|
|
need_awk=yes
|
|
need_sed=yes
|
|
set_opsys=no
|
|
need_xargs=yes
|
|
;;
|
|
*)
|
|
need_bsd_install=no
|
|
need_awk=no
|
|
need_sed=no
|
|
set_opsys=no
|
|
need_xargs=no
|
|
;;
|
|
esac
|
|
# 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
|
|
;;
|
|
IRIX*)
|
|
if [ -d "/usr/freeware/bin" ]; then
|
|
overpath="/usr/freeware/bin:$overpath"
|
|
fi
|
|
if [ -d "/usr/bsd" ]; then
|
|
overpath="/usr/bsd:$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
|
|
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/ssdlinux_version ]; then
|
|
root_group=wheel
|
|
else
|
|
root_group=root
|
|
fi
|
|
need_bsd_install=no
|
|
# Debian/Ubuntu's awk is mawk, and mawk does not understand
|
|
# some regexp used in pkgsrc/mk.
|
|
if [ -f /etc/debian_version ]; then
|
|
need_awk=yes
|
|
else
|
|
need_awk=no
|
|
fi
|
|
need_sed=no
|
|
set_opsys=no
|
|
machine_arch=`uname -m | sed -e 's/i.86/i386/'`
|
|
;;
|
|
Minix)
|
|
root_group=operator
|
|
need_bsd_install=yes
|
|
need_awk=no
|
|
need_sed=no
|
|
set_opsys=no
|
|
machine_arch=`uname -p`
|
|
LDFLAGS="-lcompat_minix -lminlib"
|
|
;;
|
|
MirBSD)
|
|
root_group=wheel
|
|
need_pax=yes
|
|
need_mtree=no
|
|
need_bsd_install=no
|
|
need_awk=no
|
|
need_sed=no
|
|
set_opsys=no
|
|
check_prog mtreeprog mtree
|
|
machine_arch=`arch -s`
|
|
# there is no /usr/bin/cc, so use mgcc if unset
|
|
test -n "$CC" || { CC=mgcc; export CC; }
|
|
# get some variables from the native make if unset
|
|
for var in CFLAGS CPPFLAGS LDFLAGS; do
|
|
# check if variable is already set
|
|
eval _tmp=\"\$$var\"
|
|
[ "x$_tmp" != x ] && continue
|
|
# ask the native make (EXPERIMENTAL = don't add -Werror)
|
|
# the -I${.CURDIR} dance is to prevent junk in CPPFLAGS
|
|
_tmp=`printf '%s\nall:\n\t@%s %%s %s=${%s:M*:Q:Q}\n%s\n%s\n' \
|
|
$var'+=-I${.CURDIR}' printf $var $var':S/-I${.CURDIR}//' \
|
|
EXPERIMENTAL=yes '.include <bsd.prog.mk>' | \
|
|
(unset MAKECONF; /usr/bin/make -f - all 2>/dev/null) | \
|
|
sed 's/^x//'`
|
|
eval $_tmp
|
|
eval export $var
|
|
done
|
|
;;
|
|
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=`arch -s`
|
|
;;
|
|
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
|
|
need_awk=yes
|
|
need_sed=yes
|
|
set_opsys=no
|
|
groupsprog="id -gn"
|
|
whoamiprog="id -un"
|
|
machine_arch=`uname -p | sed -e 's/x86/i386/'`
|
|
;;
|
|
SCO_SV)
|
|
root_group=root
|
|
need_awk=yes
|
|
need_bsd_install=yes
|
|
need_sed=yes
|
|
set_opsys=no
|
|
whoamiprog='id -u'
|
|
groupsprog='id -g'
|
|
# /bin/sh under OpenServer 5.0.7/3.2 breaks bmake tests.
|
|
#bmakexargs="$bmakexargs --with-defshell=/bin/ksh"
|
|
;;
|
|
SunOS)
|
|
root_group=root
|
|
need_bsd_install=yes
|
|
use_bsdinstall=yes
|
|
if [ -x "/usr/gnu/bin/awk" ]; then
|
|
need_awk=no
|
|
else
|
|
need_awk=yes
|
|
fi
|
|
if [ -x "/usr/gnu/bin/sed" ]; then
|
|
need_sed=no
|
|
else
|
|
need_sed=yes
|
|
fi
|
|
if [ -x "/usr/bin/bash" ]; then
|
|
bootstrap_sh=${SH:-/usr/bin/bash}
|
|
bootstrap_sh_set=set
|
|
else
|
|
need_ksh=yes
|
|
fi
|
|
set_opsys=no
|
|
idprog="/usr/xpg4/bin/id"
|
|
groupsprog="${idprog} -gn"
|
|
whoamiprog="${idprog} -un"
|
|
machine_arch=`uname -p | sed -e 's/i86pc/i386/'`
|
|
check_compiler=yes
|
|
;;
|
|
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
|
|
;;
|
|
*)
|
|
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
|
|
|
|
# Fixup MACHINE_ARCH to use canonical pkgsrc variants, and support multiarch
|
|
# systems via --abi, setting a default $abi based on MACHINE_ARCH if not set.
|
|
#
|
|
case "$machine_arch/$abi" in
|
|
# "amd64" translates to "x86_64", defaults to 64-bit
|
|
amd64/32) abi=32 machine_arch=i386 ;;
|
|
amd64/*) abi=64 machine_arch=x86_64 ;;
|
|
# XXX: hppa untested
|
|
hppa/64) abi=64 machine_arch=hppa64 ;;
|
|
hppa/*) abi=32 machine_arch=hppa ;;
|
|
hppa64/32) abi=32 machine_arch=hppa ;;
|
|
hppa64/*) abi=64 machine_arch=hppa64 ;;
|
|
# "i386" can support 64-bit, e.g. SunOS, defaults to 32-bit.
|
|
i386/64) abi=64 machine_arch=x86_64 ;;
|
|
i386/*) abi=32 machine_arch=i386 ;;
|
|
# XXX: powerpc untested
|
|
powerpc/64) abi=64 machine_arch=powerpc64 ;;
|
|
powerpc/*) abi=32 machine_arch=powerpc ;;
|
|
powerpc64/32) abi=32 machine_arch=powerpc ;;
|
|
powerpc64/*) abi=64 machine_arch=powerpc64 ;;
|
|
# "sparc" can support 64-bit, e.g. SunOS, defaults to 32-bit.
|
|
sparc/64) abi=64 machine_arch=sparc64 ;;
|
|
sparc/*) abi=32 machine_arch=sparc ;;
|
|
# x86_64 supports 32-bit/64-bit, defaults to 64-bit.
|
|
x86_64/32) abi=32 machine_arch=i386 ;;
|
|
x86_64/*) abi=64 machine_arch=x86_64 ;;
|
|
esac
|
|
|
|
# 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_ksh=yes
|
|
;;
|
|
esac
|
|
|
|
case "$quiet" in
|
|
yes)
|
|
configure_quiet_flags="--quiet"
|
|
make_quiet_flags="-s"
|
|
;;
|
|
no)
|
|
configure_quiet_flags=""
|
|
make_quiet_flags=""
|
|
esac
|
|
|
|
test ${make_jobs} -gt 0 2>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
die "ERROR: --make-jobs must be a positive integer argument"
|
|
fi
|
|
|
|
# export MACHINE_ARCH and OPSYS for bmake and pkg_install.
|
|
MACHINE_ARCH=${machine_arch}; export MACHINE_ARCH
|
|
OPSYS=${opsys}; export OPSYS
|
|
|
|
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
|
|
|
|
if [ -d "${wrkdir}" ] || [ -f "${wrkdir}" ]; then
|
|
echo "\"${wrkdir}\" already exists, please remove it or use --workdir.";
|
|
exit 1
|
|
fi
|
|
|
|
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
|
|
# Clang pretends to be GCC, so we have to check it first.
|
|
if [ $compiler_is_clang -gt 0 ]; then
|
|
compiler="clang"
|
|
elif [ $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"
|
|
|
|
if [ $unprivileged = "yes" ]; then
|
|
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
|
|
elif is_root; then
|
|
user=$root_user
|
|
group=$root_group
|
|
else
|
|
die "You must be either root to install bootstrap-pkgsrc or use the --unprivileged option."
|
|
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 [ -n "$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}
|
|
;;
|
|
clang)
|
|
echo "CC= clang" >> ${TARGET_MKCONF}
|
|
echo "CXX= clang++" >> ${TARGET_MKCONF}
|
|
echo "CPP= \${CC} -E" >> ${TARGET_MKCONF}
|
|
if [ -z "$CLANGBASE" -a -f "/usr/bin/clang" ]; then
|
|
CLANGBASE="/usr"
|
|
fi
|
|
if [ -n "$CLANGBASE" -o -f "/bin/clang" ]; then
|
|
echo "CLANGBASE= $CLANGBASE" >> ${TARGET_MKCONF}
|
|
fi
|
|
;;
|
|
esac
|
|
if [ -n "$GCCBASE" ]; then
|
|
echo "GCCBASE= $GCCBASE" >> ${TARGET_MKCONF}
|
|
fi
|
|
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 "PKGINFODIR= $pkginfodir" >> ${TARGET_MKCONF}
|
|
echo "PKGMANDIR= $pkgmandir" >> ${TARGET_MKCONF}
|
|
echo "" >> ${TARGET_MKCONF}
|
|
|
|
if [ -n "$prefer_pkgsrc" ]; then
|
|
echo "PREFER_PKGSRC= $prefer_pkgsrc" >> ${TARGET_MKCONF}
|
|
echo "" >> ${TARGET_MKCONF}
|
|
fi
|
|
|
|
BOOTSTRAP_MKCONF=${wrkdir}/mk.conf
|
|
cp ${TARGET_MKCONF} ${BOOTSTRAP_MKCONF}
|
|
|
|
case "$cwrappers" in
|
|
yes)
|
|
echo "USE_CWRAPPERS= yes" >> ${TARGET_MKCONF}
|
|
echo "" >> ${TARGET_MKCONF}
|
|
;;
|
|
esac
|
|
|
|
# On all Debian GNU/kFreeBSD 7, /bin/sh is a symlink to /bin/dash, and
|
|
# use /bin/bash.
|
|
if [ "$opsys" = "GNUkFreeBSD" -a "$bootstrap_sh_set" != "set" ]; then
|
|
echo "TOOLS_PLATFORM.sh?= /bin/bash # instead of /bin/sh" >> ${TARGET_MKCONF}
|
|
echo "TOOLS_PLATFORM.sh?= /bin/bash # instead of /bin/sh" >> ${BOOTSTRAP_MKCONF}
|
|
echo $opsys
|
|
fi
|
|
|
|
# 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"
|
|
if [ "$use_bsdinstall" = "yes" ]; then
|
|
echo "TOOLS_PLATFORM.install?= $prefix/bin/bsdinstall" >> ${TARGET_MKCONF}
|
|
else
|
|
echo "TOOLS_PLATFORM.install?= $prefix/bin/install-sh" >> ${TARGET_MKCONF}
|
|
fi
|
|
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 && $shprog configure $configure_quiet_flags --prefix=$wrkdir --with-default-sys-path=$wrkdir/share/mk --with-machine-arch=${machine_arch} $bmakexargs)"
|
|
run_cmd "(cd $wrkdir/bmake && $shprog make-bootstrap.sh)"
|
|
run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/bmake/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 --infodir=$infodir --mandir=$mandir --sysconfdir=$sysconfdir --enable-bsd-getopt --enable-db && $bmake -j$make_jobs)"
|
|
|
|
# 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 --infodir=$infodir --mandir=$mandir --sysconfdir=$sysconfdir && $bmake -j$make_jobs)"
|
|
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 -j$make_jobs -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='$LIBS -lnbcompat' $shprog ./configure $configure_quiet_flags -C --prefix=$prefix --infodir=$infodir --mandir=$mandir --sysconfdir=$sysconfdir --program-transform-name='s,sed,nbsed,' && $bmake -j$make_jobs)"
|
|
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/archivers/libarchive/files libarchive
|
|
run_cmd "(cd $wrkdir/libarchive; env $BSTRAP_ENV \
|
|
$shprog ./configure $configure_quiet_flags --enable-static --disable-shared \
|
|
--disable-bsdtar --disable-bsdcpio --disable-posix-regex-lib --disable-xattr \
|
|
--disable-acl --without-zlib --without-bz2lib --without-lzmadec \
|
|
--without-iconv --without-lzma --without-lzo2 --without-nettle \
|
|
--without-openssl --without-xml2 --without-expat MAKE=$bmake && $bmake -j$make_jobs)"
|
|
copy_src $pkgsrcdir/pkgtools/pkg_install/files pkg_install
|
|
run_cmd "(cd $wrkdir/pkg_install; env $BSTRAP_ENV \
|
|
CPPFLAGS='$CPPFLAGS -I${wrkdir}/libnbcompat -I${wrkdir}/libarchive/libarchive' \
|
|
LDFLAGS='$LDFLAGS -L${wrkdir}/libnbcompat' \
|
|
LIBS='$LIBS -lnbcompat' $shprog ./configure $configure_quiet_flags -C \
|
|
--enable-bootstrap --prefix=$prefix --sysconfdir=$sysconfdir \
|
|
--with-pkgdbdir=$pkgdbdir --infodir=$infodir --mandir=$mandir $pkg_install_args && \
|
|
STATIC_LIBARCHIVE=$wrkdir/libarchive/.libs/libarchive.a \
|
|
PKGSRC_MACHINE_ARCH="$machine_arch" $bmake -j$make_jobs)"
|
|
run_cmd "$install_sh -c -o $user -g $group -m 755 $wrkdir/pkg_install/add/pkg_add $wrkdir/sbin/pkg_add"
|
|
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_ADD_CMD?= $wrkdir/sbin/pkg_add" >> ${BOOTSTRAP_MKCONF}
|
|
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}
|
|
|
|
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
|
|
if test -n "$LIBS"; then
|
|
echo "LIBS+= $LIBS" >> ${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}
|
|
|
|
# build and register packages
|
|
# usage: build_package <packagedirectory> [additional arguments]
|
|
build_package() {
|
|
run_cmd "(cd $pkgsrcdir/$1 && $bmake MAKE_JOBS=${make_jobs} USE_DESTDIR=yes PKG_COMPRESSION=none -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)
|
|
if [ "$use_bsdinstall" = "yes" ]; then
|
|
build_package "sysutils/bsdinstall"
|
|
else
|
|
build_package "sysutils/install-sh"
|
|
fi
|
|
;;
|
|
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 for using pkgsrc!"
|
|
echo ""
|
|
echo "$hline"
|
|
echo ""
|
|
|
|
[ -n "${binary_kit}" ] && mkbinarykit_tar
|
|
[ -n "${binary_gzip_kit}" ] && mkbinarykit_tgz
|
|
[ -n "${binary_macpkg}" ] && mkbinarykit_macpkg
|
|
|
|
echo_msg "bootstrap started: $build_start"
|
|
echo_msg "bootstrap ended: `date`"
|
|
|
|
exit 0
|