#!@@SH@@
#
# opkbuild
# src/opkbuild
# Build opkg packages.
#
# Copyright (C) 2012 Patrick "P. J." McDermott
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
. '@@LIBOPKBUILD@@/load.sm'
ob_use locale
ob_use output
ob_use package
ob_use metadata
opt_build=
opt_target=
opt_host_arch=
opt_host_plat=
opt_check_build_deps=
opt_clean=
opt_uid0_cmd=
main()
{
ob_set_text_domain 'opkbuild'
get_options "${@}"
shift $(($OPTIND - 1))
if [ ${#} -ne 0 ]; then
usage
exit 1
fi
test_uid0_cmd
ob_info "$(ob_get_msg 'setup_arch_plat')"
setup_arch_plat
ob_info "$(ob_get_msg 'make_work_area')"
mkdir -p 'tmp'
cd 'tmp'
ob_info "$(ob_get_msg 'parse_package_metadata')"
ob_init_package '..'
ob_parse_package_metadata -c '.opkbuild.cache'
ob_info "$(ob_get_msg 'build_source')"
build_source
ob-checkbuilddeps
pkgs="$(ob_get_binary_packages -a "${OB_HOST_ARCH}")"
eval "$(ob-buildenv)"
ob-unpacksource
ob-applypatches
ob-installplatconf
./build build
${opt_uid0_cmd} ./build install
ob-installdocs
ob-gencontrol
ob-buildopk
ob-genchanges
if "${opt_clean}"; then
cd ..
rm -Rf 'tmp'
fi
}
usage()
{
printf "$(ob_get_msg 'usage')\n" 'opkbuild'
}
help()
{
usage
printf '%s\n' "$(ob_get_msg 'help')"
}
version()
{
printf "$(ob_get_msg 'version')\n" \
'opkbuild' '@@PACKAGE_NAME@@' '@@PACKAGE_VERSION@@'
}
get_options()
{
# Parse and handle command-line options.
while getopts 'bBASFT:a:P:DdCcr:hV' opt; do
case "${opt}" in
b)
if [ -n "${opt_build}" ]; then
oh_error "${oh_str_bbasf_mutex}"
fi
opt_build='binary'
;;
B)
if [ -n "${opt_build}" ]; then
oh_error "${oh_str_bbasf_mutex}"
fi
opt_build='binary-arch'
;;
A)
if [ -n "${opt_build}" ]; then
oh_error "${oh_str_bbasf_mutex}"
fi
opt_build='binary-indep'
;;
S)
if [ -n "${opt_build}" ]; then
oh_error "${oh_str_bbasf_mutex}"
fi
opt_build='source'
;;
F)
if [ -n "${opt_build}" ]; then
oh_error "${oh_str_bbasf_mutex}"
fi
opt_build='full'
;;
T)
opt_target="${OPTARG}"
;;
a)
opt_host_arch="${OPTARG}"
;;
P)
opt_host_plat="${OPTARG}"
;;
D)
opt_check_build_deps='true'
;;
d)
opt_check_build_deps='false'
;;
C)
opt_clean='true'
;;
c)
opt_clean='false'
;;
r)
opt_uid0_cmd="${OPTARG}"
;;
h)
help
exit 0
;;
V)
version
exit 0
;;
?)
ob_error "$(ob_get_msg 'bad_opt')" "${opt}"
exit 1
;;
esac
done
# Set default option values.
[ -z "${opt_build}" ] && opt_build='full'
[ -z "${opt_check_build_deps}" ] && opt_check_build_deps='true'
[ -z "${opt_uid0_cmd}" ] && opt_uid0_cmd='fakeroot'
# Set default target and cleaning behavior.
if [ -n "${opt_target}" ]; then
[ -z "${opt_clean}" ] && opt_clean='false'
else
if [ "${opt_build}" = 'full' ]; then
opt_target='binary'
else
opt_target="${opt_build}"
fi
[ -z "${opt_clean}" ] && opt_clean='true'
fi
}
test_uid0_cmd()
{
# Verify that the UID 0 command works.
test_uid=$("${opt_uid0_cmd}" id -u)
if [ ${?} -ne 0 ]; then
ob_error "$(ob_get_msg 'uid0_cmd_not_found')" "${opt_uid0_cmd}"
fi
if [ ${test_uid} -ne 0 ]; then
ob_error "$(ob_get_msg 'uid0_cmd_bad_uid')" "${opt_uid0_cmd}"
fi
}
setup_arch_plat()
{
OB_BUILD_ARCH="$(ob_get_system_arch)"
OB_BUILD_PLATFORM="$(ob_get_system_plat)"
if [ -n "${opt_host_arch}" ]; then
OB_HOST_ARCH="${opt_host_arch}"
else
OB_HOST_ARCH="${OB_BUILD_ARCH}"
fi
if [ -n "${opt_host_plat}" ]; then
OB_HOST_PLATFORM="${opt_host_plat}"
else
OB_HOST_PLATFORM="${OB_BUILD_PLATFORM}"
fi
IFS=- read OB_BUILD_ARCH_CPU OB_BUILD_ARCH_KERNEL OB_BUILD_ARCH_LIBS <