office-gobmx/bin/lo-generate-source-tarball

182 lines
4 KiB
Bash
Executable file

#!/usr/bin/env bash
if [ -n "$debug" ] ; then
set -x
fi
BIN_DIR=$(dirname "$0")
CORE_DIR=$(realpath "$BIN_DIR/..")
GEN_BZ2=false
GEN_MD5=false
GEN_XZ=false
OUT_DIR="${CORE_DIR?}"
VERSION=
usage()
{
cat <<EOF
Usage: $0 [ --xz ] [ --bz2 ] [ --md5 ] [ --output-dir=<output location> ]
[ --core-dir=<core-repo-location ] [--version=<package_version] label
--xz generate a package compressed with xz (default)
--bz2 generate a package compressed with bz2. Note if you specify
both --cz and --bz2, both are created. If you specify neither
--xz is implied.
--md5 generate a md5 signature for the generated package(s)
--output-dir where to put the generated packages
--core-dir location of the core repo to extract sources from.
By default this is one directory up from the position
of this script.
--version version string used to generate the name of the package
the source package name is libreoffice-<version>.tar.[bz2|xz]
EOF
}
while [ "${1}" != "" ]; do
parm=${1%%=*}
arg=${1#*=}
has_arg=
if [ "${1}" != "${parm?}" ] ; then
has_arg=1
else
arg=""
fi
# echo "parm=!${parm}!"
# echo "arg=!${arg}!"
case "${parm}" in
-2|--bz2)
GEN_BZ2=true
;;
-x|--xz)
GEN_XZ=true
;;
-5|--md5)
GEN_MD5=true
;;
-o|--output-dir)
if [ -z "${has_arg}" ] ; then
shift;
arg="$1"
fi
if [ -z "${arg}" ] ; then
echo "Missing argument for option $parm" 1>&2
exit -1
else
OUT_DIR="$arg"
fi
;;
-v|--version)
if [ -z "${has_arg}" ] ; then
shift;
arg="$1"
fi
if [ -z "${arg}" ] ; then
echo "Missing argument for option $parm" 1>&2
exit -1
else
VERSION="$arg"
fi
;;
-h|--help)
usage
exit 0
;;
-*)
echo "Invalid option $1" 1>&2
exit -1
;;
*)
if [ -z "${LABEL}" ] ; then
LABEL="$parm"
else
echo "Too many arguments.. $@" 1>&2
exit -1
fi
;;
esac
shift
done
# we need a label
if [ -z "${LABEL}" ] ; then
echo "Missing argument. We need a git label as source" 1>&2
exit 1
fi
# default to xz compression
if ! ${GEN_BZ2?} && ! ${GEN_XZ?} ; then
GEN_XZ=true
fi
# --version= is mandatory
if [ -z "${VERSION}" ] ; then
VERSION="${LABEL?}"
fi
base_name="libreoffice-${VERSION}"
# --output-dir default to core-dir
if [ -z "${OUT_DIR}" ] ; then
OUT_DIR="$CORE_DIR?}"
fi
if [ ! -d "${CORE_DIR?}" ] ; then
echo "Core repo directory $CORE_DIR does not exist or is not a directory" 1>&2
exit 1
fi
if [ ! -d "${CORE_DIR?}/.git" ] ; then
echo "Core repo $CORE_DIR is not a git repo" 1>&2
exit 1
fi
if [ ! -d "${OUT_DIR?}" ] ; then
echo "Output directory $OUT_DIR does not exist or is not a directory" 1>&2
exit 1
fi
pushd "${CORE_DIR}" > /dev/null
echo "archiving core..."
git archive --format=tar --prefix="${base_name?}/" -o "${OUT_DIR}/${base_name}.tar" ${LABEL?}
concatenate_list=
for module in dictionaries helpcontent2 translations ; do
if [ ! -f ${module?}/.git ] ; then
echo "Warning: module $module is not present" 1>&2
else
echo "archiving ${module?}..."
git archive --format=tar --prefix="${base_name?}/${module?}" -o "${OUT_DIR}/${base_name}-${module?}.tar" ${LABEL?}
concatenate_list="${concatenate_list?} ${OUT_DIR}/${base_name}-${module?}.tar"
fi
done
if [ -n "${concatenate_list?}" ] ; then
tar --concatenate --file="${OUT_DIR}/${base_name}.tar" ${concatenate_list?}
rm ${concatenate_list?}
fi
if ${GEN_BZ2?} ; then
echo "bzip2 compression..."
bzip2 -fkz "${OUT_DIR}/${base_name}.tar"
if ${GEN_MD5?} ; then
echo "md5sum..."
md5sum "${OUT_DIR}/${base_name}.tar.bz2" > "${OUT_DIR}/${base_name}.tar.bz2.md5"
fi
fi
if ${GEN_XZ?} ; then
echo "xz compression..."
xz -fz "${OUT_DIR}/${base_name}.tar"
if ${GEN_MD5?} ; then
echo "md5sum..."
md5sum "${OUT_DIR}/${base_name}.tar.xz" > "${OUT_DIR}/${base_name}.tar.zx.md5"
fi
else
rm "${OUT_DIR}/${base_name}.tar"
fi
echo "Done."