blob: 40c168ec26aa0996e601c576bdd75ff1159292dd [file] [log] [blame]
#!/bin/sh
#
# Copyright 2014-2016 Nest Labs Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Description:
# This file is a convenience script that will bootstrap the GNU
# autotools system for a project after any build system changes.
#
#
# usage
#
# Display program usage.
#
usage() {
name=`basename $0`
echo "Usage: ${name} [ options ] [ -w <what> ]"
if [ $1 -ne 0 ]; then
echo "Try '${name} -h' for more information."
fi
if [ $1 -ne 1 ]; then
echo ""
echo " -h, --help Print this help, then exit."
echo " -I DIR Specify directory DIR as the root of the "
echo " nlbuild-autotools repository."
echo " -v, --verbose Verbosely report bootstrap progress."
echo " -w, --what WHAT Specify what part of the package should be "
echo " bootstrapped: all, config, make, or none "
echo " (default: all)."
echo ""
fi
exit $1
}
#
# removetmp
#
# Remove temporary files and directories used during the run of this
# script.
#
removetmp() {
rm -f "${LIBTOOLIZE}"
rm -f "${AUTOM4TE_CFG}"
rm -r -f "${BOOTSTRAP_TMPDIR}"
}
what="all"
verbose=
nlbuild_autotools_dir=
# Parse out any command line options
while [ ${#} -gt 0 ]; do
case ${1} in
-h|--help)
usage 0
;;
-I)
nlbuild_autotools_dir="${2}"
shift 2
;;
-v|--verbose)
verbose="--verbose"
shift 1
;;
-w|--what)
case "${2}" in
all|make*|conf*|none)
what="${2}"
shift 2
;;
*)
echo "Unknown what value '${2}'."
usage 1
;;
esac
;;
*)
usage 1
;;
esac
done
# Check to ensure that the location of the nlbuild-autotools directory
# is sane.
if [ -z "${nlbuild_autotools_dir}" ]; then
echo "$0: No -I option specified. Please provide the location of the nlbuild-autotools directory."
exit 1
elif [ ! -d "${nlbuild_autotools_dir}" ]; then
echo "$0: No such directory: ${nlbuild_autotools_dir}. Please provide a valid path to the nlbuild-autotools directory."
exit 1
fi
# Establish some key directories
srcdir=`dirname ${0}`
abs_srcdir=`pwd`
abs_top_srcdir="${abs_srcdir}"
abs_top_hostdir="${nlbuild_autotools_dir}/tools/host"
# Figure out what sort of build host we are running on, stripping off
# any trailing version number information typically included on Darwin
# / Mac OS X.
host=`${nlbuild_autotools_dir}/autoconf/config.guess | sed -e 's/[[:digit:].]*$//g'`
# Attempt to be self-sufficient, relying on GNU autotools executables
# installed along with the SDK itself.
export PATH="${abs_top_hostdir}/bin:${abs_top_hostdir}/${host}/bin:${PATH}"
export ACLOCAL=`which aclocal`
export AUTOCONF="`which autoconf`"
export AUTOHEADER="`which autoheader`"
export AUTOM4TE="`which autom4te`"
export AUTOMAKE="`which automake`"
export M4=`which m4`
# Establish some SDK-specific directories needed to override various
# paths in GNU autotools that otherwise expect to be absolute
# (e.g. /usr/share, etc.).
export AC_MACRODIR="${abs_top_hostdir}/share/autoconf"
export autom4te_perllibdir="${abs_top_hostdir}/share/autoconf"
export PERL5LIB="${abs_top_hostdir}/share/automake-1.14:${PERL5LIB}"
# Both autom4te.cfg and libtoolize, as installed from source, want to
# use absolute file system paths that cannot be
# overridden. Consequently, we create temporary, local versions of
# these, patched up with SDK-specific paths.
BOOTSTRAP_TMPDIR="`mktemp -d /tmp/tmp.bootstrapXXXXXX`"
trap "removetmp" 1 2 3 9 15
export AUTOM4TE_CFG="${BOOTSTRAP_TMPDIR}/autom4te.cfg"
export LIBTOOLIZE="${BOOTSTRAP_TMPDIR}/libtoolize"
#
# Generate any temporary files that need to be patched at run time
# with the location of the SDK tree, including:
#
# - The autom4te configuration file
# - The libtoolize executable script
#
sed -e "s,//share/autoconf,${abs_top_hostdir}/share/autoconf,g" < "${abs_top_hostdir}/share/autoconf/autom4te.cfg" > "${AUTOM4TE_CFG}"
sed -e "s,//share/libtool,${abs_top_hostdir}/share/libtool,g" -e "s,//share/aclocal,${abs_top_hostdir}/share/aclocal,g" < "${abs_top_hostdir}/${host}/bin/libtoolize" > "${LIBTOOLIZE}"
chmod 775 "${LIBTOOLIZE}"
if [ -n "${verbose}" ]; then
echo ACLOCAL="${ACLOCAL}"
echo AUTOCONF="${AUTOCONF}"
echo AUTOHEADER="${AUTOHEADER}"
echo AUTOM4TE="${AUTOM4TE}"
echo AUTOMAKE="${AUTOMAKE}"
echo LIBTOOLIZE="${LIBTOOLIZE}"
echo M4="${M4}"
echo AC_MACRODIR="${AC_MACRODIR}"
echo AUTOM4TE_CFG="${AUTOM4TE_CFG}"
echo PERL5LIB="${PERL5LIB}"
echo autom4te_perllibdir="${autom4te_perllibdir}"
fi
# Set up the default actions for each bootstrap stage.
local_action="${ACLOCAL} ${verbose} --automake-acdir=${abs_top_hostdir}/share/aclocal-1.14 --system-acdir=${abs_top_hostdir}/share/aclocal -I${nlbuild_autotools_dir}/autoconf/m4"
header_action="${AUTOHEADER} ${verbose}"
tool_action="${LIBTOOLIZE} ${verbose} --automake --copy --force"
make_action="${AUTOMAKE} ${verbose} --libdir ${abs_top_hostdir}/share/automake-1.14 --add-missing --copy"
config_action="${AUTOCONF} ${verbose}"
# Determine what needs to be short-circuited based on the
# user-specified "what".
case "${what}" in
all)
;;
conf*)
local_action=true
header_action=true
tool_action=true
make_action=true
;;
make*)
local_action=true
header_action=true
config_action=true
;;
none)
local_action=true
header_action=true
tool_action=true
make_action=true
config_action=true
;;
esac
# Bootstrap the package.
${local_action} && ${header_action} && ${tool_action} && ${make_action} && ${config_action}
# Clean up any temporary files created.
removetmp