From 6a45c8fc2fb7a5bf72bd59d7d527192dcc3afe18 Mon Sep 17 00:00:00 2001 From: Michal Suchanek <msuchanek@suse.de> Date: Jun 12 2025 12:05:06 +0000 Subject: scripts tar-up.sh -> tar-up --- diff --git a/scripts/tar-up b/scripts/tar-up new file mode 100755 index 0000000..0d6f31b --- /dev/null +++ b/scripts/tar-up @@ -0,0 +1,423 @@ +#!/bin/bash + +############################################################################# +# Copyright (c) 2003-2009 Novell, Inc. +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of version 2 of the GNU General Public License as +# published by the Free Software Foundation. +# +# 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, contact Novell, Inc. +# +# To contact Novell about this file by physical or electronic mail, +# you may find current contact information at www.novell.com +############################################################################# + +# generate a kernel-source rpm package + +. ${0%/*}/wd-functions.sh + +sort() +{ + LC_ALL=C command sort "$@" +} + +tolerate_unknown_new_config_options= +ignore_kabi= +mkspec_args=() +arch= +flavor= +source rpm/config.sh +until [ "$#" = "0" ] ; do + case "$1" in + --dir=*) + build_dir=${1#*=} + shift + ;; + -d|--dir) + build_dir=$2 + shift 2 + ;; + --embargo) + # obsolete + shift + ;; + -nf|--tolerate-unknown-new-config-options) + tolerate_unknown_new_config_options=1 + shift + ;; + -i|--ignore-kabi) + ignore_kabi=1 + shift + ;; + -iu|--ignore-unsupported-deps) + # ignored, unset SUPPORTED_MODULES_CHECK in the config.sh instead + shift + ;; + -rs|--release-string) + case "$2" in + *' '*) + echo "$1 option argument must not contain spaces" >&2 + exit 1 + esac + mkspec_args=("${mkspec_args[@]}" --release "$2") + shift 2 + ;; + -a|--arch) + arch=$2; shift 2 ;; + -f|--flavor|--flavour) + flavor=$2; shift 2 ;; + --vanilla) flavor="vanilla"; shift ;; + -h|--help|-v|--version) + cat <<EOF + +${0##*/} perpares a 'kernel-source' package for submission into autobuild + +these options are recognized: + -nf to proceed if a new unknown .config option is found during make oldconfig + -i ignore kabi failures + -d, --dir=DIR create package in DIR instead of default kernel-source$VARIANT + -a, --arch=ARCH create package for architecture ARCH only + -f, --flavor=FLAVOR create package for FLAVOR only + --vanilla like --flavor=vanilla + +EOF + exit 1 + ;; + *) + echo "unknown option '$1'" >&2 + exit 1 + ;; + esac +done +export LANG=POSIX + +case "$build_dir" in +"") + build_dir=kernel-source$VARIANT + ;; +/* | ./*) ;; +*) + build_dir=./$build_dir +esac + +check_for_merge_conflicts() { + set -- $(grep -lP '^<{7}(?!<)|^>{7}(?!>)' "$@" 2> /dev/null) + if [ $# -gt 0 ]; then + printf "Merge conflicts in %s\n" "$@" >&2 + return 1 + fi +} + +suffix=$(sed -rn 's/^Source0:.*\.(tar\.[a-z0-9]*)$/\1/p' rpm/kernel-source.spec.in) +# Dot files are skipped by intention, in order not to break osc working +# copies. The linux tarball is not deleted if it is already there. +for f in "$build_dir"/*; do + case "${f##*/}" in + "linux-$SRCVERSION.$suffix") + continue + ;; + "linux-$SRCVERSION.tar.sign") + continue + ;; + patches.*) + rm -rf "$f" + esac + rm -f "$f" +done +mkdir -p "$build_dir" +echo "linux-$SRCVERSION.$suffix" +get_tarball "$SRCVERSION" "$suffix" "$build_dir" "$URL" + +# list of patches to include. +install -m 644 series.conf $build_dir/ + +# All config files and patches used +referenced_files="$( { + $(dirname $0)/guards --list < $build_dir/series.conf + $(dirname $0)/guards --prefix=config --list < config.conf + } | sort -u )" + +for file in $referenced_files; do + case $file in + config/* | patches.*/*) + ;; + *) + echo "Error: Patches must be placed in the patches.*/ subdirectories: $file" >&2 + exit 1 + esac +done + +[ "$flavor" == "vanilla" ] && \ + sed -i '/^$\|\s*#\|patches\.\(kernel\.org\|rpmify\)/b; s/\(.*\)/#### \1/' \ + $build_dir/series.conf + +inconsistent=false +check_for_merge_conflicts $referenced_files || inconsistent=true +scripts/check-conf || inconsistent=true +scripts/check-cvs-add --committed || inconsistent=true + +tsfile=source-timestamp +if ! scripts/cvs-wd-timestamp > $build_dir/$tsfile; then + exit 1 +fi + +localversion=$(get_localversion $SRCVERSION) +[ -n "$localversion" ] && echo -n "$localversion" > $build_dir/localversion + +if $using_git; then + # Always include the git revision + echo "GIT Revision: $(git rev-parse HEAD)" >> $build_dir/$tsfile + tag=$(get_branch_name) + if test -n "$tag"; then + echo "GIT Branch: $tag" >>$build_dir/$tsfile + fi +fi + +CLEANFILES=() +trap 'if test -n "$CLEANFILES"; then rm -rf "${CLEANFILES[@]}"; fi' EXIT +tmpdir=$(mktemp -dt ${0##*/}.XXXXXX) +CLEANFILES=("${CLEANFILES[@]}" "$tmpdir") +rpmfiles=$(ls -d rpm/* | grep -v -e "~$" -e "[.]orig$" -e "[.]rej$" | { while read x ; do [ -d "$x" ] || echo "$x" ; done ; } ) +rpmstatus=$(for i in $rpmfiles ; do git status -s $i ; done) +[ -z "$rpmstatus" ] || { inconsistent=true ; echo "$rpmstatus" ; } + +# FIXME: someone should clean up the mess and make this check fatal +if $inconsistent; then + echo "Inconsistencies found." + echo "Please clean up series.conf and/or the patches directories!" + echo +fi + +cp -p $rpmfiles config.conf supported.conf doc/* $build_dir +match="${flavor:+\\/$flavor$}" +match="${arch:+^+\\($(echo -n "${arch}" | sed 's/[, ]\+/\\\|/g')\\)\\>${match:+.*}}${match}" +[ -n "$match" ] && sed -i "/^$\|\s*#\|${match}/b; s/\(.*\)/#### \1/" $build_dir/config.conf +if test -e misc/extract-modaliases; then + cp misc/extract-modaliases $build_dir +fi +# install this file only if the spec file references it +if grep -q '^Source.*:[[:space:]]*log\.sh[[:space:]]*$' rpm/kernel-source.spec.in; then + cp -p scripts/rpm-log.sh "$build_dir"/log.sh +fi +rm -f "$build_dir/kernel-source.changes.old" "$build_dir/gitlog-fixups" "$build_dir/gitlog-excludes" +rm -f "$build_dir/config-subst" + +create_changelog_from_git () { + oldfile="$1" + oldlog="$2" + exclude=() + # Exclude commits in the scripts branch, these are rarely interesting for + # users of the rpm packages. + # FIXME: the remote might have a different name than "origin" or there + # might be no remote at all. + for remote in $(git remote) + do + if git cat-file -e ${remote}/scripts 2>/dev/null; then + exclude[${#exclude[@]}]=^${remote}/scripts + fi + done + if git cat-file -e scripts 2>/dev/null; then + exclude[${#exclude[@]}]=^scripts + fi + if test ${#exclude[@]} -eq 0; then + echo "warning: no scripts or origin/scripts branch found" >&2 + echo "warning: rpm changelog will have some useless entries" >&2 + fi + changes_stop=$(sed 1q $oldfile) + case "$changes_stop" in + last\ commit:\ *) + exclude[${#exclude[@]}]=^${changes_stop#*: } + head="HEAD" + ;; + commit\ range:\ *) + exclude[${#exclude[@]}]=${changes_stop#*: } + head= + ;; + *) + echo "expected \"last commit: <commit>\" in rpm/kernel-source.changes.old" >&2 + exit 1 + esac + if test -e rpm/gitlog-excludes; then + exclude=(--excludes "$_" "${exclude[@]}") + fi + if test -e rpm/gitlog-fixups; then + exclude=(--fixups "$_" "${exclude[@]}") + fi + scripts/gitlog2changes "${exclude[@]}" $head -- >"$oldlog" + sed 1d "$oldfile" >>"$oldlog" + scripts/rpm-changes-merge.pl -1 "$oldlog" +} + +changelog=$build_dir/kernel-source$VARIANT.changes +if test -e kernel-source.changes; then + cat kernel-source.changes{,.old} >"$changelog" +elif $using_git; then + create_changelog_from_git rpm/kernel-source.changes.old "$changelog" +else + touch "$changelog" +fi + +if [ -e extra-symbols ]; then + install -m 755 \ + extra-symbols \ + $build_dir +fi + +# Usage: +# stable_tar [-t <timestamp>] [-C <dir>] [--exclude=...] <tarball> <files> ... +# if -t is not given, files must be within a git repository +stable_tar() { + local tarball mtime chdir="." tar_opts=() + + while test $# -gt 2; do + case "$1" in + -t) + mtime=$2 + shift 2 + ;; + -C) + chdir=$2 + tar_opts=("${tar_opts[@]}" -C "$2") + shift 2 + ;; + --exclude=*) + tar_opts=("${tar_opts[@]}" "$1") + shift + ;; + --exclude) + tar_opts=("${tar_opts[@]}" "$1" "$2") + shift 2 + ;; + *) + break + esac + done + tarball=$1 + shift + + if test -z "$mtime" && $using_git; then + local dirs=$(printf '%s\n' "$@" | sed 's:/.*::' | sort -u) + mtime="$(cd "$chdir" + echo "${dirs[@]}" | xargs git log -1 --pretty=tformat:%ct -- | sort -n | \ + tail -n 1)" + fi + if test -n "$mtime"; then + tar_opts=("${tar_opts[@]}" --mtime "$mtime") + fi + printf '%s\n' "$@" | \ + scripts/stable-tar.pl "${tar_opts[@]}" -T - | bzip2 -9 >"$tarball" + case "${PIPESTATUS[*]}" in + *[1-9]*) + exit 1 + esac +} + +# create the *.tar.bz2 files in parallel: Spawn a job for each cpu +# present; wait for all of them to finish; submit a new set of jobs. +# This is not a very efficient algorithm and it can result in anomalies +# where adding a cpu slows the script down, so improvements are welcome. +slots=$(getconf _NPROCESSORS_ONLN) +if test 0$slots -lt 1; then + slots=1 +fi +used=0 +wait_archives() +{ + if test $used -gt 0; then + wait + if grep -q '[^0]' "$tmpdir"/result-*; then + exit 1 + fi + used=0 + rm -f "$tmpdir"/result-* + fi +} +do_archive() +{ + if test $slots -eq 1; then + stable_tar "$@" + return + fi + if test $used -eq $slots; then + wait_archives + fi + (stable_tar "$@"; echo $? >"$tmpdir/result-$used") & + let used++ +} + +# The first directory level determines the archive name +all_archives="$( + echo "$referenced_files" \ + | sed -e 's,/.*,,' \ + | uniq )" +for archive in $all_archives; do + echo "$archive.tar.bz2" + + files="$(echo "$referenced_files" | sed -ne "\:^${archive//./\\.}/:p")" + if [ -n "$files" ]; then + do_archive $build_dir/$archive.tar.bz2 $files + fi +done + +if test -d kabi; then + echo "kabi.tar.bz2" + do_archive $build_dir/kabi.tar.bz2 kabi +fi + +if test -d sysctl && \ + grep -q '^Source.*\<sysctl\.tar\.bz2' "$build_dir/kernel-source.spec.in" +then + echo "sysctl.tar.bz2" + do_archive $build_dir/sysctl.tar.bz2 sysctl +fi +wait_archives + + +# Create empty dummys for any *.tar.bz2 archive mentioned in the spec file +# not already created: patches.addon is empty by intention; others currently +# may contain no patches. +archives=$(sed -ne 's,^Source[0-9]*:.*[ \t/]\([^/]*\)\.tar\.bz2$,\1,p' \ + $build_dir/kernel-source.spec.in | sort -u) +for archive in $archives; do + case "$archive" in + *%*) + # skip archive names with macros + continue + esac + if test -e "$build_dir/$archive.tar.bz2"; then + continue + fi + echo "$archive.tar.bz2 (empty)" + tmpdir2=$(mktemp -dt ${0##*/}.XXXXXX) + CLEANFILES=("${CLEANFILES[@]}" "$tmpdir2") + mkdir -p $tmpdir2/$archive + stable_tar -C $tmpdir2 -t 1234567890 $build_dir/$archive.tar.bz2 $archive +done + +if [ -n "$ignore_kabi" ]; then + echo > $build_dir/IGNORE-KABI-BADNESS +fi +if [ -n "$tolerate_unknown_new_config_options" ]; then + echo > $build_dir/TOLERATE-UNKNOWN-NEW-CONFIG-OPTIONS +fi + +if [ -s rpm/old_changelog.txt ]; then + echo "old_changelog.txt" + create_changelog_from_git rpm/old_changelog.txt $build_dir/old_changelog.txt +else + echo "old_changelog.txt (empty)" + echo > $build_dir/old_changelog.txt +fi + +echo "cd $build_dir; ./mkspec ${mkspec_args[@]}" +patches=$PWD +cd "$build_dir" +./mkspec --patches "$patches" "${mkspec_args[@]}" diff --git a/scripts/tar-up.sh b/scripts/tar-up.sh index 0d6f31b..809fbe3 100755 --- a/scripts/tar-up.sh +++ b/scripts/tar-up.sh @@ -1,423 +1,9 @@ -#!/bin/bash +#!/bin/sh -############################################################################# -# Copyright (c) 2003-2009 Novell, Inc. -# All Rights Reserved. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of version 2 of the GNU General Public License as -# published by the Free Software Foundation. -# -# 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, contact Novell, Inc. -# -# To contact Novell about this file by physical or electronic mail, -# you may find current contact information at www.novell.com -############################################################################# +self="$0" -# generate a kernel-source rpm package +target="$(dirname $0)/$(basename $0 .sh)" -. ${0%/*}/wd-functions.sh +echo "$0 is deprecated, use $target please" >&2 -sort() -{ - LC_ALL=C command sort "$@" -} - -tolerate_unknown_new_config_options= -ignore_kabi= -mkspec_args=() -arch= -flavor= -source rpm/config.sh -until [ "$#" = "0" ] ; do - case "$1" in - --dir=*) - build_dir=${1#*=} - shift - ;; - -d|--dir) - build_dir=$2 - shift 2 - ;; - --embargo) - # obsolete - shift - ;; - -nf|--tolerate-unknown-new-config-options) - tolerate_unknown_new_config_options=1 - shift - ;; - -i|--ignore-kabi) - ignore_kabi=1 - shift - ;; - -iu|--ignore-unsupported-deps) - # ignored, unset SUPPORTED_MODULES_CHECK in the config.sh instead - shift - ;; - -rs|--release-string) - case "$2" in - *' '*) - echo "$1 option argument must not contain spaces" >&2 - exit 1 - esac - mkspec_args=("${mkspec_args[@]}" --release "$2") - shift 2 - ;; - -a|--arch) - arch=$2; shift 2 ;; - -f|--flavor|--flavour) - flavor=$2; shift 2 ;; - --vanilla) flavor="vanilla"; shift ;; - -h|--help|-v|--version) - cat <<EOF - -${0##*/} perpares a 'kernel-source' package for submission into autobuild - -these options are recognized: - -nf to proceed if a new unknown .config option is found during make oldconfig - -i ignore kabi failures - -d, --dir=DIR create package in DIR instead of default kernel-source$VARIANT - -a, --arch=ARCH create package for architecture ARCH only - -f, --flavor=FLAVOR create package for FLAVOR only - --vanilla like --flavor=vanilla - -EOF - exit 1 - ;; - *) - echo "unknown option '$1'" >&2 - exit 1 - ;; - esac -done -export LANG=POSIX - -case "$build_dir" in -"") - build_dir=kernel-source$VARIANT - ;; -/* | ./*) ;; -*) - build_dir=./$build_dir -esac - -check_for_merge_conflicts() { - set -- $(grep -lP '^<{7}(?!<)|^>{7}(?!>)' "$@" 2> /dev/null) - if [ $# -gt 0 ]; then - printf "Merge conflicts in %s\n" "$@" >&2 - return 1 - fi -} - -suffix=$(sed -rn 's/^Source0:.*\.(tar\.[a-z0-9]*)$/\1/p' rpm/kernel-source.spec.in) -# Dot files are skipped by intention, in order not to break osc working -# copies. The linux tarball is not deleted if it is already there. -for f in "$build_dir"/*; do - case "${f##*/}" in - "linux-$SRCVERSION.$suffix") - continue - ;; - "linux-$SRCVERSION.tar.sign") - continue - ;; - patches.*) - rm -rf "$f" - esac - rm -f "$f" -done -mkdir -p "$build_dir" -echo "linux-$SRCVERSION.$suffix" -get_tarball "$SRCVERSION" "$suffix" "$build_dir" "$URL" - -# list of patches to include. -install -m 644 series.conf $build_dir/ - -# All config files and patches used -referenced_files="$( { - $(dirname $0)/guards --list < $build_dir/series.conf - $(dirname $0)/guards --prefix=config --list < config.conf - } | sort -u )" - -for file in $referenced_files; do - case $file in - config/* | patches.*/*) - ;; - *) - echo "Error: Patches must be placed in the patches.*/ subdirectories: $file" >&2 - exit 1 - esac -done - -[ "$flavor" == "vanilla" ] && \ - sed -i '/^$\|\s*#\|patches\.\(kernel\.org\|rpmify\)/b; s/\(.*\)/#### \1/' \ - $build_dir/series.conf - -inconsistent=false -check_for_merge_conflicts $referenced_files || inconsistent=true -scripts/check-conf || inconsistent=true -scripts/check-cvs-add --committed || inconsistent=true - -tsfile=source-timestamp -if ! scripts/cvs-wd-timestamp > $build_dir/$tsfile; then - exit 1 -fi - -localversion=$(get_localversion $SRCVERSION) -[ -n "$localversion" ] && echo -n "$localversion" > $build_dir/localversion - -if $using_git; then - # Always include the git revision - echo "GIT Revision: $(git rev-parse HEAD)" >> $build_dir/$tsfile - tag=$(get_branch_name) - if test -n "$tag"; then - echo "GIT Branch: $tag" >>$build_dir/$tsfile - fi -fi - -CLEANFILES=() -trap 'if test -n "$CLEANFILES"; then rm -rf "${CLEANFILES[@]}"; fi' EXIT -tmpdir=$(mktemp -dt ${0##*/}.XXXXXX) -CLEANFILES=("${CLEANFILES[@]}" "$tmpdir") -rpmfiles=$(ls -d rpm/* | grep -v -e "~$" -e "[.]orig$" -e "[.]rej$" | { while read x ; do [ -d "$x" ] || echo "$x" ; done ; } ) -rpmstatus=$(for i in $rpmfiles ; do git status -s $i ; done) -[ -z "$rpmstatus" ] || { inconsistent=true ; echo "$rpmstatus" ; } - -# FIXME: someone should clean up the mess and make this check fatal -if $inconsistent; then - echo "Inconsistencies found." - echo "Please clean up series.conf and/or the patches directories!" - echo -fi - -cp -p $rpmfiles config.conf supported.conf doc/* $build_dir -match="${flavor:+\\/$flavor$}" -match="${arch:+^+\\($(echo -n "${arch}" | sed 's/[, ]\+/\\\|/g')\\)\\>${match:+.*}}${match}" -[ -n "$match" ] && sed -i "/^$\|\s*#\|${match}/b; s/\(.*\)/#### \1/" $build_dir/config.conf -if test -e misc/extract-modaliases; then - cp misc/extract-modaliases $build_dir -fi -# install this file only if the spec file references it -if grep -q '^Source.*:[[:space:]]*log\.sh[[:space:]]*$' rpm/kernel-source.spec.in; then - cp -p scripts/rpm-log.sh "$build_dir"/log.sh -fi -rm -f "$build_dir/kernel-source.changes.old" "$build_dir/gitlog-fixups" "$build_dir/gitlog-excludes" -rm -f "$build_dir/config-subst" - -create_changelog_from_git () { - oldfile="$1" - oldlog="$2" - exclude=() - # Exclude commits in the scripts branch, these are rarely interesting for - # users of the rpm packages. - # FIXME: the remote might have a different name than "origin" or there - # might be no remote at all. - for remote in $(git remote) - do - if git cat-file -e ${remote}/scripts 2>/dev/null; then - exclude[${#exclude[@]}]=^${remote}/scripts - fi - done - if git cat-file -e scripts 2>/dev/null; then - exclude[${#exclude[@]}]=^scripts - fi - if test ${#exclude[@]} -eq 0; then - echo "warning: no scripts or origin/scripts branch found" >&2 - echo "warning: rpm changelog will have some useless entries" >&2 - fi - changes_stop=$(sed 1q $oldfile) - case "$changes_stop" in - last\ commit:\ *) - exclude[${#exclude[@]}]=^${changes_stop#*: } - head="HEAD" - ;; - commit\ range:\ *) - exclude[${#exclude[@]}]=${changes_stop#*: } - head= - ;; - *) - echo "expected \"last commit: <commit>\" in rpm/kernel-source.changes.old" >&2 - exit 1 - esac - if test -e rpm/gitlog-excludes; then - exclude=(--excludes "$_" "${exclude[@]}") - fi - if test -e rpm/gitlog-fixups; then - exclude=(--fixups "$_" "${exclude[@]}") - fi - scripts/gitlog2changes "${exclude[@]}" $head -- >"$oldlog" - sed 1d "$oldfile" >>"$oldlog" - scripts/rpm-changes-merge.pl -1 "$oldlog" -} - -changelog=$build_dir/kernel-source$VARIANT.changes -if test -e kernel-source.changes; then - cat kernel-source.changes{,.old} >"$changelog" -elif $using_git; then - create_changelog_from_git rpm/kernel-source.changes.old "$changelog" -else - touch "$changelog" -fi - -if [ -e extra-symbols ]; then - install -m 755 \ - extra-symbols \ - $build_dir -fi - -# Usage: -# stable_tar [-t <timestamp>] [-C <dir>] [--exclude=...] <tarball> <files> ... -# if -t is not given, files must be within a git repository -stable_tar() { - local tarball mtime chdir="." tar_opts=() - - while test $# -gt 2; do - case "$1" in - -t) - mtime=$2 - shift 2 - ;; - -C) - chdir=$2 - tar_opts=("${tar_opts[@]}" -C "$2") - shift 2 - ;; - --exclude=*) - tar_opts=("${tar_opts[@]}" "$1") - shift - ;; - --exclude) - tar_opts=("${tar_opts[@]}" "$1" "$2") - shift 2 - ;; - *) - break - esac - done - tarball=$1 - shift - - if test -z "$mtime" && $using_git; then - local dirs=$(printf '%s\n' "$@" | sed 's:/.*::' | sort -u) - mtime="$(cd "$chdir" - echo "${dirs[@]}" | xargs git log -1 --pretty=tformat:%ct -- | sort -n | \ - tail -n 1)" - fi - if test -n "$mtime"; then - tar_opts=("${tar_opts[@]}" --mtime "$mtime") - fi - printf '%s\n' "$@" | \ - scripts/stable-tar.pl "${tar_opts[@]}" -T - | bzip2 -9 >"$tarball" - case "${PIPESTATUS[*]}" in - *[1-9]*) - exit 1 - esac -} - -# create the *.tar.bz2 files in parallel: Spawn a job for each cpu -# present; wait for all of them to finish; submit a new set of jobs. -# This is not a very efficient algorithm and it can result in anomalies -# where adding a cpu slows the script down, so improvements are welcome. -slots=$(getconf _NPROCESSORS_ONLN) -if test 0$slots -lt 1; then - slots=1 -fi -used=0 -wait_archives() -{ - if test $used -gt 0; then - wait - if grep -q '[^0]' "$tmpdir"/result-*; then - exit 1 - fi - used=0 - rm -f "$tmpdir"/result-* - fi -} -do_archive() -{ - if test $slots -eq 1; then - stable_tar "$@" - return - fi - if test $used -eq $slots; then - wait_archives - fi - (stable_tar "$@"; echo $? >"$tmpdir/result-$used") & - let used++ -} - -# The first directory level determines the archive name -all_archives="$( - echo "$referenced_files" \ - | sed -e 's,/.*,,' \ - | uniq )" -for archive in $all_archives; do - echo "$archive.tar.bz2" - - files="$(echo "$referenced_files" | sed -ne "\:^${archive//./\\.}/:p")" - if [ -n "$files" ]; then - do_archive $build_dir/$archive.tar.bz2 $files - fi -done - -if test -d kabi; then - echo "kabi.tar.bz2" - do_archive $build_dir/kabi.tar.bz2 kabi -fi - -if test -d sysctl && \ - grep -q '^Source.*\<sysctl\.tar\.bz2' "$build_dir/kernel-source.spec.in" -then - echo "sysctl.tar.bz2" - do_archive $build_dir/sysctl.tar.bz2 sysctl -fi -wait_archives - - -# Create empty dummys for any *.tar.bz2 archive mentioned in the spec file -# not already created: patches.addon is empty by intention; others currently -# may contain no patches. -archives=$(sed -ne 's,^Source[0-9]*:.*[ \t/]\([^/]*\)\.tar\.bz2$,\1,p' \ - $build_dir/kernel-source.spec.in | sort -u) -for archive in $archives; do - case "$archive" in - *%*) - # skip archive names with macros - continue - esac - if test -e "$build_dir/$archive.tar.bz2"; then - continue - fi - echo "$archive.tar.bz2 (empty)" - tmpdir2=$(mktemp -dt ${0##*/}.XXXXXX) - CLEANFILES=("${CLEANFILES[@]}" "$tmpdir2") - mkdir -p $tmpdir2/$archive - stable_tar -C $tmpdir2 -t 1234567890 $build_dir/$archive.tar.bz2 $archive -done - -if [ -n "$ignore_kabi" ]; then - echo > $build_dir/IGNORE-KABI-BADNESS -fi -if [ -n "$tolerate_unknown_new_config_options" ]; then - echo > $build_dir/TOLERATE-UNKNOWN-NEW-CONFIG-OPTIONS -fi - -if [ -s rpm/old_changelog.txt ]; then - echo "old_changelog.txt" - create_changelog_from_git rpm/old_changelog.txt $build_dir/old_changelog.txt -else - echo "old_changelog.txt (empty)" - echo > $build_dir/old_changelog.txt -fi - -echo "cd $build_dir; ./mkspec ${mkspec_args[@]}" -patches=$PWD -cd "$build_dir" -./mkspec --patches "$patches" "${mkspec_args[@]}" +exec "$target" "$@"