#! /bin/sh
#
# opkbuild
# testsetup
# Generates configuration and data files to test opkbuild.
#
# 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 2 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 .
prefix=''
datadir=''
sysconfdir=''
long_opts_with_args='
prefix
datadir
sysconfdir
'
main()
{
parse_options "${@}"
shift ${optind}
[ -z "${prefix}" ] && prefix='/usr/local'
[ -z "${datadir}" ] && datadir="${prefix}/share"
[ -z "${sysconfdir}" ] && sysconfdir='/etc'
if [ ${#} -ne 2 ]; then
print_usage
exit 1
fi
build_arch="${1}"
build_plat="${2}"
printf 'Generating build system configuration...\n'
mkdir -p "${sysconfdir}" || \
error 'Cannot make system configuration directory'
echo "${build_arch}" >"${sysconfdir}/proteanos_arch" || \
error 'Cannot write proteanos_arch'
echo "${build_plat}" >"${sysconfdir}/proteanos_plat" || \
error 'Cannot write proteanos_plat'
printf 'Generating distribution architecture data...\n'
mkdir -p "${datadir}/opkbuild/archtab" || \
error 'Cannot make architecture table directory'
printf 'x86_64-unknown-linux-gnu\nx86, i386\n' \
>"${datadir}/opkbuild/archtab/core-linux-eglibc" || \
error 'Cannot write architecture data'
printf 'i686-unknown-linux-gnu\nx86, i386\n' \
>"${datadir}/opkbuild/archtab/i686-linux-eglibc" || \
error 'Cannot write architecture data'
printf 'i686-unknown-freebsd9.0\nx86, i386\n' \
>"${datadir}/opkbuild/archtab/i686-kfreebsd-eglibc" || \
error 'Cannot write architecture data'
printf 'arm-cortex_a8-linux-gnueabi\narm\n' \
>"${datadir}/opkbuild/archtab/cortexa8-linux-eglibc" || \
error 'Cannot write architecture data'
printf 'Done!\n'
}
print_usage()
{
printf 'Usage: %s [OPTION]... build-arch build-plat\n' "${0}"
}
parse_options()
{
optind=0
for _opt; do
# Handle arguments of "--opt arg" options.
if [ -n "${_prev}" ]; then
eval "${_prev}"=\"\$\{_opt\}\"
_prev=''
continue
fi
# Detect "--opt=arg" and "--opt arg" options.
case "${_opt}" in
*=*)
_optarg="${_opt#*=}"
_opt="${_opt%=*}"
_optarg_set='true'
;;
*)
_optarg_set='false'
;;
esac
# Handle short and long options.
case "${_opt}" in
--)
break
;;
esac
# Anything beyond this point should be a long option.
case "${_opt}" in
--*)
_opt="${_opt#--}"
_opts="${long_opts_with_args}"
_type='option'
;;
*)
break
;;
esac
grep "^${_opt}\$" >/dev/null 2>&1 <&2
exit 1
fi
if ${_optarg_set}; then
_opt="$(printf '%s' "${_opt}" | tr -c '[a-z0-9]' '_')"
eval "${_opt}"=\"\$\{_optarg\}\"
else
_prev="${_opt}"
fi
optind=$(($optind + 1))
done
}
error()
{
printf '%s: Error: ' "${0##*/}"
printf "${@}"
printf '\n'
exit 1
}
main "${@}"