@@ -9,19 +9,6 @@
# This code is licensed under the GPL version 2 or later. See
# the COPYING file in the top-level directory.
-error() {
- printf %s\\n "$*" >&2
- exit 1
-}
-
-if test $# -lt 1; then
- error "Usage: $0 <output tarball>"
-fi
-
-tar_file=$(realpath "$1")
-sub_tdir=$(mktemp -d "${tar_file%.tar}.sub.XXXXXXXX")
-sub_file="${sub_tdir}/submodule.tar"
-
# We want a predictable list of submodules for builds, that is
# independent of what the developer currently has initialized
# in their checkout, because the build environment is completely
@@ -32,6 +19,61 @@ subprojects="keycodemapdb libvfio-user berkeley-softfloat-3
proc-macro-error-1-rs proc-macro-error-attr-1-rs quote-1-rs
syn-2-rs unicode-ident-1-rs"
sub_deinit=""
+git_archive_prefix=""
+tar_transform=""
+
+BASENAME="$(basename "${BASH_SOURCE[0]}")"
+USAGE="Usage: ${BASENAME} [OPTIONS] <tarball>
+ <tarball> Resulting tarball name
+
+ OPTIONS:
+ -d, --dir <DIR> Files will be placed into DIR inside the tarball
+"
+
+error() {
+ printf %s\\n "$*" >&2
+ exit 1
+}
+
+get_opts() {
+ local short="d:"
+ local long="dir:"
+
+ if ! tmp=$(getopt -o "$short" --long "$long" -n "$BASENAME" -- "$@"); then
+ exit 1
+ fi
+ eval set -- "$tmp"
+ unset tmp
+
+ while true; do
+ case "$1" in
+ '-d' | '--dir' )
+ local tar_dir_name=$"$2/"; shift 2
+ git_archive_prefix="--prefix ${tar_dir_name}"
+ tar_transform="--transform=s|^|${tar_dir_name}|"
+ ;;
+
+ '--' )
+ shift 1
+ ;;
+
+ * )
+ tar_file_name="$1"; shift
+ break
+ ;;
+
+ esac
+ done
+
+ if [ $# -gt 0 ]; then
+ echo "Superfluous args: $@"
+ error "${USAGE}"
+ fi
+
+ tar_file=$(realpath "$tar_file_name")
+ sub_tdir=$(mktemp -d "${tar_file%.tar}.sub.XXXXXXXX")
+ sub_file="${sub_tdir}/submodule.tar"
+}
function cleanup() {
local status=$?
@@ -73,13 +115,19 @@ function subproject_dir() {
echo "${dir:-$1}"
}
-git archive --format tar "$(tree_ish)" > "$tar_file"
+get_opts "$@"
+
+git archive --format tar ${git_archive_prefix} "$(tree_ish)" > "$tar_file"
test $? -ne 0 && error "failed to archive qemu"
for sp in $subprojects; do
meson subprojects download $sp
test $? -ne 0 && error "failed to download subproject $sp"
- tar --append --file "$tar_file" --exclude=.git subprojects/"$(subproject_dir $sp)"
+ tar --append \
+ --file "$tar_file" \
+ --exclude=.git \
+ ${tar_transform} \
+ subprojects/"$(subproject_dir $sp)"
test $? -ne 0 && error "failed to append subproject $sp to $tar_file"
done
exit 0
The archive-source script appended everything directly on the tar root making it unusable for creating nix overlays; nix expects all files to be under a directory in the tarbal. Add a "-d|--dir" argument that places all files under a custom root. Behaviour is unchanged when the argument is not given. Signed-off-by: Joel Granados <joel.granados@kernel.org> --- scripts/archive-source.sh | 78 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 63 insertions(+), 15 deletions(-)