progname="$0"
start_dir="$(pwd)"
src_dir="${start_dir}"
keep_working_dir=n
ext_list="gzip"
valid_exts="gzip bzip2 xz zip"
print_usage()
{
printf "usage: %s: OPTIONS\n" "$progname"
printf " Roll source release tarballs\n\n"
printf " -h, --help print this message and exit\n"
printf " -k, --keep do not delete temporary working directory\n"
printf " -s, --source location of source directory [current working direcctory]\n"
printf " -x, --extensions list of tarball compression types [gzip]\n"
printf " valid extension are the following: %s\n" "$valid_exts"
}
do_cleanup()
{
cd "$start_dir"
if [ $keep_working_dir != y ]; then
rm -rf "$working_dir"
fi
}
validate_extensions()
{
for valid_ext in $valid_exts; do
if [ "$1" = "$valid_ext" ]; then
return 1
fi
done
return 0
}
do_setup()
{
options=$(getopt --options='hks:x:' \
--longoptions='help,keep,source:extensions:' \
--name "$progname" \
-- "$@")
if [ $? -ne 0 ]; then
print_usage
exit 1
fi
eval set -- "$options"
while true; do
case "$1" in
-h|--help)
print_usage
exit 0
;;
-k|--keep)
keep_working_dir=y
shift
;;
-s|--source)
src_dir=$(readlink -f "$2")
shift 2
;;
-x|--extensions)
for ext in $2; do
if validate_extensions $ext; then
printf "invalid extension %s" "$ext\n"
print_usage
exit 1
fi
done
ext_list="$2"
shift 2
;;
--)
shift
break
;;
*)
print_usage
exit 1
;;
esac
done
working_dir=$(mktemp -p "${start_dir}" -d)
trap do_cleanup 0
}
do_source_updates()
{
upstream_url='https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain'
cd "${src_dir}"
autoreconf -if
wget -O config/config.guess "${upstream_url};f=config.guess;hb=HEAD"
wget -O config/config.sub "${upstream_url};f=config.sub;hb=HEAD"
}
do_tarball()
{
cd "${working_dir}"
"${src_dir}/configure"
cd "$working_dir"
for ext in $ext_list; do
make dist-${ext}
done
for cmp in $ext_list; do
case $cmp in
gzip)
ext=tar.gz
;;
bzip2)
ext=tar.bz2
;;
xz)
ext=tar.xz
;;
zip)
ext=zip
;;
*)
printf "unknown extension: %s\n" "$cmp"
;;
esac
mv *.${ext} "$start_dir"
done
}
do_setup "$@"
do_source_updates
do_tarball