clean up a few semicolons in the build system

several code lines were condensed together, which
make them less readable. make the code more readable
by having separate commands on separate lines.

i previously did this during my manic build system
audits of 2023 and 2024; condensing lines like this
is overly pedantic and serves no real purpose.

Signed-off-by: Leah Rowe <leah@libreboot.org>
25.04_branch
Leah Rowe 2025-04-11 17:15:00 +01:00
parent 7b7642dc90
commit 6e6b54cc24
6 changed files with 75 additions and 47 deletions

8
build
View File

@ -34,8 +34,12 @@ main()
case "${spath#script/}" in case "${spath#script/}" in
version) printf "%s\nWebsite: %s\n" "$relname" "$projectsite" ;; version) printf "%s\nWebsite: %s\n" "$relname" "$projectsite" ;;
inject) shift 1; xbmk_inject "$@" ;; release)
release) shift 1; mkrelease "$@" ;; shift 1
mkrelease "$@" ;;
xbmk_inject)
shift 1
xbmk_inject "$@" ;;
roms) roms)
if [ $# -gt 1 ] && [ "$2" = "serprog" ]; then if [ $# -gt 1 ] && [ "$2" = "serprog" ]; then
mk -b stm32-vserprog pico-serprog mk -b stm32-vserprog pico-serprog

View File

@ -13,7 +13,8 @@ fetch_targets()
printf "Creating %s tree %s\n" "$project" "$tree" printf "Creating %s tree %s\n" "$project" "$tree"
git_prep "$loc" "$loc" "$PWD/$configdir/$tree/patches" \ git_prep "$loc" "$loc" "$PWD/$configdir/$tree/patches" \
"src/$project/$tree" u; nuke "$project/$tree" "$project/$tree" "src/$project/$tree" u
nuke "$project/$tree" "$project/$tree"
} }
fetch_project() fetch_project()
@ -47,9 +48,11 @@ clone_project()
git_prep() git_prep()
{ {
_patchdir="$3"; _loc="$4" # $1 and $2 are gitrepo and gitrepo_backup _patchdir="$3"
_loc="$4" # $1 and $2 are gitrepo and gitrepo_backup
chkvars rev; tmpclone "$1" "$2" "$tmpgit" "$rev" "$_patchdir" chkvars rev
tmpclone "$1" "$2" "$tmpgit" "$rev" "$_patchdir"
if singletree "$project" || [ $# -gt 4 ]; then if singletree "$project" || [ $# -gt 4 ]; then
prep_submodules "$_loc" prep_submodules "$_loc"
fi fi
@ -67,7 +70,7 @@ prep_submodules()
{ {
[ -f "$mdir/module.list" ] && while read -r msrcdir; do [ -f "$mdir/module.list" ] && while read -r msrcdir; do
fetch_submodule "$msrcdir" fetch_submodule "$msrcdir"
done < "$mdir/module.list"; return 0 done < "$mdir/module.list"; :
} }
fetch_submodule() fetch_submodule()
@ -125,10 +128,11 @@ tmpclone()
git_am_patches() git_am_patches()
{ {
for p in "$2/"*; do for p in "$2/"*; do
[ -L "$p" ] && continue; [ -e "$p" ] || continue [ -L "$p" ] && continue
[ -e "$p" ] || continue
[ -d "$p" ] && git_am_patches "$1" "$p" && continue [ -d "$p" ] && git_am_patches "$1" "$p" && continue
[ ! -f "$p" ] || git -C "$1" am "$p" || $err "$1 $2: !am $p" [ ! -f "$p" ] || git -C "$1" am "$p" || $err "$1 $2: !am $p"
done; return 0 done; :
} }
link_crossgcc() link_crossgcc()
@ -136,7 +140,7 @@ link_crossgcc()
( (
x_ cd "$tmpgit/util" && x_ rm -Rf crossgcc x_ cd "$tmpgit/util" && x_ rm -Rf crossgcc
ln -s "../../$xtree/util/crossgcc" crossgcc || $err "$1: !xgcc link" ln -s "../../$xtree/util/crossgcc" crossgcc || $err "$1: !xgcc link"
) || $err "$1: !xgcc link" ) || $err "$1: !xgcc link"; :
} }
move_repo() move_repo()
@ -152,5 +156,5 @@ nuke()
e "config/${1%/}/nuke.list" f missing || while read -r nukefile; do e "config/${1%/}/nuke.list" f missing || while read -r nukefile; do
rmf="src/${2%/}/$nukefile" && [ -L "$rmf" ] && continue rmf="src/${2%/}/$nukefile" && [ -L "$rmf" ] && continue
e "$rmf" e missing || rm -Rf "$rmf" || $err "!rm $rmf, ${2%/}" e "$rmf" e missing || rm -Rf "$rmf" || $err "!rm $rmf, ${2%/}"
done < "config/${1%/}/nuke.list"; return 0 done < "config/${1%/}/nuke.list"; :
} }

View File

@ -29,7 +29,8 @@ xbmk_inject()
err="fail_inject" err="fail_inject"
remkdir "$tmpromdel" remkdir "$tmpromdel"
set +u +e; [ $# -lt 1 ] && $err "No options specified. - $dontflash" set +u +e
[ $# -lt 1 ] && $err "No options specified. - $dontflash"
eval "`setvars "" new_mac xchanged`" eval "`setvars "" new_mac xchanged`"
# randomise the MAC address by default # randomise the MAC address by default

View File

@ -17,7 +17,8 @@ err="err_"
err_() err_()
{ {
printf "ERROR %s: %s\n" "$0" "$1" 1>&2; exit 1 printf "ERROR %s: %s\n" "$0" "$1" 1>&2
exit 1
} }
setvars() setvars()
@ -25,14 +26,15 @@ setvars()
_setvars="" && [ $# -lt 2 ] && $err "setvars: too few arguments" _setvars="" && [ $# -lt 2 ] && $err "setvars: too few arguments"
val="$1" && shift 1 && for var in "$@"; do val="$1" && shift 1 && for var in "$@"; do
_setvars="$var=\"$val\"; $_setvars" _setvars="$var=\"$val\"; $_setvars"
done; printf "%s\n" "${_setvars% }" done
printf "%s\n" "${_setvars% }"
} }
chkvars() chkvars()
{ {
for var in "$@"; do for var in "$@"; do
eval "[ -n \"\${$var+x}\" ] || \$err \"$var unset\"" eval "[ -n \"\${$var+x}\" ] || \$err \"$var unset\""
eval "[ -n \"\$$var\" ] || \$err \"$var unset\"" eval "[ -n \"\$$var\" ] || \$err \"$var unset\""
done; return 0 done; :
} }
eval "`setvars "" _nogit board reinstall versiondate projectsite projectname \ eval "`setvars "" _nogit board reinstall versiondate projectsite projectname \
@ -40,7 +42,8 @@ eval "`setvars "" _nogit board reinstall versiondate projectsite projectname \
for fv in projectname projectsite version versiondate; do for fv in projectname projectsite version versiondate; do
eval "[ ! -f \"$fv\" ] || read -r $fv < \"$fv\" || :" eval "[ ! -f \"$fv\" ] || read -r $fv < \"$fv\" || :"
done; chkvars projectname projectsite done
chkvars projectname projectsite
setcfg() setcfg()
{ {
@ -57,7 +60,8 @@ e()
estr="[ -$es_t \"\$1\" ] || return 1" estr="[ -$es_t \"\$1\" ] || return 1"
[ $# -gt 2 ] && estr="[ -$es_t \"\$1\" ] && return 1" && es2="missing" [ $# -gt 2 ] && estr="[ -$es_t \"\$1\" ] && return 1" && es2="missing"
eval "$estr"; printf "%s %s\n" "$1" "$es2" 1>&2 eval "$estr"
printf "%s %s\n" "$1" "$es2" 1>&2
} }
install_packages() install_packages()
@ -140,7 +144,7 @@ expr "X$XBMK_THREADS" : "X-\{0,1\}[0123456789][0123456789]*$" \
x_() { x_() {
[ $# -lt 1 ] || "$@" || \ [ $# -lt 1 ] || "$@" || \
$err "Unhandled non-zero exit: $(echo "$@")"; return 0 $err "Unhandled non-zero exit: $(echo "$@")"; :
} }
[ -e ".git" ] || [ -f "version" ] || printf "unknown\n" > version || \ [ -e ".git" ] || [ -f "version" ] || printf "unknown\n" > version || \
@ -155,7 +159,8 @@ versiondate_="$versiondate"
[ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \
--pretty='%ct' HEAD)" || versiondate="$versiondate_" --pretty='%ct' HEAD)" || versiondate="$versiondate_"
for p in projectname version versiondate projectsite; do for p in projectname version versiondate projectsite; do
chkvars "$p"; eval "x_ printf \"%s\\n\" \"\$$p\" > $p" chkvars "$p"
eval "x_ printf \"%s\\n\" \"\$$p\" > $p"
done done
relname="$projectname-$version" relname="$projectname-$version"
export LOCALVERSION="-$projectname-${version%%-*}" export LOCALVERSION="-$projectname-${version%%-*}"
@ -165,7 +170,7 @@ check_defconfig()
[ -d "$1" ] || $err "Target '$1' not defined." [ -d "$1" ] || $err "Target '$1' not defined."
for x in "$1"/config/*; do for x in "$1"/config/*; do
[ -f "$x" ] && printf "%s\n" "$x" && return 1 [ -f "$x" ] && printf "%s\n" "$x" && return 1
done; return 0 done; :
} }
remkdir() remkdir()
@ -180,7 +185,8 @@ mkrom_tarball()
printf "%s\n" "$versiondate" > "$1/versiondate" || $err "$1 !vdate" printf "%s\n" "$versiondate" > "$1/versiondate" || $err "$1 !vdate"
printf "%s\n" "$projectname" > "$1/projectname" || $err "$1 !pname" printf "%s\n" "$projectname" > "$1/projectname" || $err "$1 !pname"
mktarball "$1" "${1%/*}/${relname}_${1##*/}.tar.xz"; x_ rm -Rf "$1"; : mktarball "$1" "${1%/*}/${relname}_${1##*/}.tar.xz"
x_ rm -Rf "$1"
} }
mktarball() mktarball()
@ -248,7 +254,8 @@ download()
$err "$1 $2 $3 $4: Unsupported dlop type: '$_dlop'" $err "$1 $2 $3 $4: Unsupported dlop type: '$_dlop'"
fi fi
vendor_checksum "$4" "$cached" || dl_fail="n" vendor_checksum "$4" "$cached" || dl_fail="n"
done; [ "$dl_fail" = "y" ] && $err "$1 $2 $3 $4: not downloaded" done
[ "$dl_fail" = "y" ] && $err "$1 $2 $3 $4: not downloaded"
[ "$cached" = "$3" ] || cp "$cached" "$3" || $err "!d cp $cached $3"; : [ "$cached" = "$3" ] || cp "$cached" "$3" || $err "!d cp $cached $3"; :
} }

View File

@ -28,11 +28,12 @@ mkserprog()
&& x_ cmake --build "$sersrc/build" && x_ cmake --build "$sersrc/build"
[ "$1" = "stm32" ] && x_ make -C "$sersrc" \ [ "$1" = "stm32" ] && x_ make -C "$sersrc" \
libopencm3-just-make BOARD=$sertarget && x_ make -C \ libopencm3-just-make BOARD=$sertarget && x_ make -C \
"$sersrc" BOARD=$sertarget; x_ mkdir -p "bin/serprog_$1" "$sersrc" BOARD=$sertarget
x_ mkdir -p "bin/serprog_$1"
x_ mv "$serx" "bin/serprog_$1/serprog_$sertarget.${serx##*.}" x_ mv "$serx" "bin/serprog_$1/serprog_$sertarget.${serx##*.}"
done < "$TMPDIR/ser" done < "$TMPDIR/ser"
[ "$XBMK_RELEASE" = "y" ] && mkrom_tarball "bin/serprog_$1"; return 0 [ "$XBMK_RELEASE" = "y" ] && mkrom_tarball "bin/serprog_$1"; :
} }
mkpicotool() mkpicotool()
@ -69,7 +70,7 @@ mkpayload_grub()
--install-modules="$grub_install_modules" \ --install-modules="$grub_install_modules" \
"/boot/grub/grub_default.cfg=${srcdir}/.config" \ "/boot/grub/grub_default.cfg=${srcdir}/.config" \
"/boot/grub/grub.cfg=$grubdata/memdisk.cfg" || \ "/boot/grub/grub.cfg=$grubdata/memdisk.cfg" || \
$err "$tree: cannot build grub.elf"; return 0 $err "$tree: cannot build grub.elf"; :
} }
mkvendorfiles() mkvendorfiles()
@ -77,7 +78,7 @@ mkvendorfiles()
[ -z "$mode" ] && $dry cook_coreboot_config [ -z "$mode" ] && $dry cook_coreboot_config
check_coreboot_utils "$tree" check_coreboot_utils "$tree"
printf "%s\n" "${version%%-*}" > "$srcdir/.coreboot-version" || \ printf "%s\n" "${version%%-*}" > "$srcdir/.coreboot-version" || \
$err "!mk $srcdir .coreboot-version" $err "!mk $srcdir .coreboot-version"; :
} }
cook_coreboot_config() cook_coreboot_config()
@ -106,8 +107,8 @@ check_coreboot_utils()
x_ cp "$utilsrcdir/rmodtool" "$utilelfdir" x_ cp "$utilsrcdir/rmodtool" "$utilelfdir"
elif [ -n "$mode" ]; then elif [ -n "$mode" ]; then
x_ rm -Rf "$utilelfdir" x_ rm -Rf "$utilelfdir"
fi; continue fi; :
done; return 0 done; :
} }
mkcorebootbin() mkcorebootbin()
@ -175,7 +176,8 @@ add_seabios()
cbfs "$tmprom" "$_seabioself" "$_seaname" cbfs "$tmprom" "$_seabioself" "$_seaname"
x_ "$cbfstool" "$tmprom" add-int -i 3000 -n etc/ps2-keyboard-spinup x_ "$cbfstool" "$tmprom" add-int -i 3000 -n etc/ps2-keyboard-spinup
_z="2"; [ "$initmode" = "vgarom" ] && _z="0" _z="2"
[ "$initmode" = "vgarom" ] && _z="0"
x_ "$cbfstool" "$tmprom" add-int -i $_z -n etc/pci-optionrom-exec x_ "$cbfstool" "$tmprom" add-int -i $_z -n etc/pci-optionrom-exec
x_ "$cbfstool" "$tmprom" add-int -i 0 -n etc/optionroms-checksum x_ "$cbfstool" "$tmprom" add-int -i 0 -n etc/optionroms-checksum
[ "$initmode" = "libgfxinit" ] && \ [ "$initmode" = "libgfxinit" ] && \

View File

@ -15,13 +15,17 @@ eval "`setvars "" xarch srcdir premake gnatdir xlang mode makeargs elfdir cmd \
project target target_dir targets xtree _f release bootstrapargs mkhelper \ project target target_dir targets xtree _f release bootstrapargs mkhelper \
autoconfargs listfile autogenargs btype tree rev tree_depend build_depend \ autoconfargs listfile autogenargs btype tree rev tree_depend build_depend \
defconfig postmake mkhelpercfg dry dest_dir mdir cleanargs gccver gccfull \ defconfig postmake mkhelpercfg dry dest_dir mdir cleanargs gccver gccfull \
gnatver gnatfull gccdir cmakedir`"; badhash="n" gnatver gnatfull gccdir cmakedir`"
# ./mk -f will set this to "n", thus # ./mk -f will set this to "n", thus
# disabling the use of make commands # disabling the use of make commands
do_make="y" do_make="y"
mode="all" # make all mode="all" # make all
# badhash changes to "y" when project
# files change, e.g. config files, patches
badhash="n"
flags="-m/-u/-b/-c/-x/-f/-s/-l/-n/-d" flags="-m/-u/-b/-c/-x/-f/-s/-l/-n/-d"
main() main()
@ -82,7 +86,8 @@ main()
x_ touch "$mkhelpercfg" x_ touch "$mkhelpercfg"
fi fi
targets="$*"; cmd="build_targets $targets" targets="$*"
cmd="build_targets $targets"
singletree "$project" && cmd="build_project" singletree "$project" && cmd="build_project"
remkdir "${tmpgit%/*}" remkdir "${tmpgit%/*}"
@ -96,7 +101,7 @@ build_project()
[ "$mode" = "distclean" ] && mode="clean" [ "$mode" = "distclean" ] && mode="clean"
run_make_command || return 0 run_make_command || return 0
[ -n "$mode" ] || $dry copy_elf; return 0 [ -n "$mode" ] || $dry copy_elf; :
} }
build_targets() build_targets()
@ -113,7 +118,7 @@ build_targets()
printf "'make %s', '%s', '%s'\n" "$mode" "$project" "$target" printf "'make %s', '%s', '%s'\n" "$mode" "$project" "$target"
x_ handle_defconfig x_ handle_defconfig
[ -n "$mode" ] || [ -z "$postmake" ] || $postmake || \ [ -n "$mode" ] || [ -z "$postmake" ] || $postmake || \
$err "$project/$target: !postmake: $postmake"; continue $err "$project/$target: !postmake: $postmake"; :
done; return 0 done; return 0
} }
@ -125,7 +130,8 @@ handle_defconfig()
configure_project "$target_dir" || return 0 configure_project "$target_dir" || return 0
x_ mkdir -p "$elfdir/$target" x_ mkdir -p "$elfdir/$target"
chkvars tree; srcdir="src/$project/$tree" chkvars tree
srcdir="src/$project/$tree"
if [ "$mode" = "distclean" ] || [ "$mode" = "crossgcc-clean" ]; then if [ "$mode" = "distclean" ] || [ "$mode" = "crossgcc-clean" ]; then
[ -d "$srcdir" ] || return 0 [ -d "$srcdir" ] || return 0
@ -139,7 +145,7 @@ handle_defconfig()
[ -n "$mode" ] || check_defconfig || continue [ -n "$mode" ] || check_defconfig || continue
handle_makefile handle_makefile
[ -n "$mode" ] || $dry copy_elf [ -n "$mode" ] || $dry copy_elf
done; return 0 done; :
} }
configure_project() configure_project()
@ -190,8 +196,8 @@ build_dependencies()
[ -z "$bd_p" ] && $dry $err "$project/$tree: !bd '$bd'" [ -z "$bd_p" ] && $dry $err "$project/$tree: !bd '$bd'"
[ "${bd##*/}" = "$bd" ] && bd_t="" [ "${bd##*/}" = "$bd" ] && bd_t=""
[ -z "$bd_p" ] || $dry ./mk -b $bd_p $bd_t \ [ -z "$bd_p" ] || $dry ./mk -b $bd_p $bd_t \
|| $err "!mk $project/$tree $bd_p/$bd_t"; continue || $err "!mk $project/$tree $bd_p/$bd_t"; :
done; return 0 done; :
} }
check_project_hashes() check_project_hashes()
@ -202,7 +208,8 @@ check_project_hashes()
read -r old_pjhash < "$XBMK_CACHE/hash/$project$tree" read -r old_pjhash < "$XBMK_CACHE/hash/$project$tree"
x_ rm -f "$TMPDIR/project.list" "$TMPDIR/project.hash" \ x_ rm -f "$TMPDIR/project.list" "$TMPDIR/project.hash" \
"$TMPDIR/project.tmp"; x_ touch "$TMPDIR/project.tmp" "$TMPDIR/project.tmp"
x_ touch "$TMPDIR/project.tmp"
x_ touch "$TMPDIR/project.hash" x_ touch "$TMPDIR/project.hash"
for rmchk in "$datadir" "$configdir/$tree" "$mdir"; do for rmchk in "$datadir" "$configdir/$tree" "$mdir"; do
@ -258,7 +265,7 @@ check_cross_compiler()
# we only want to mess with hostcc to build xgcc # we only want to mess with hostcc to build xgcc
rm -f "$XBMK_CACHE/gnupath/"* || \ rm -f "$XBMK_CACHE/gnupath/"* || \
$err "Cannot clear gnupath/"; : $err "Cannot clear gnupath/"; :
done; return 0 done; :
} }
# fix mismatching gcc/gnat versions on debian trixie/sid. as of december 2024, # fix mismatching gcc/gnat versions on debian trixie/sid. as of december 2024,
@ -297,7 +304,8 @@ check_gnu_path()
rm -f "$XBMK_CACHE/gnupath/"* || $err "Cannot clear gnupath/" rm -f "$XBMK_CACHE/gnupath/"* || $err "Cannot clear gnupath/"
cd "$XBMK_CACHE/gnupath" || $err "Can't cd to gnupath/" cd "$XBMK_CACHE/gnupath" || $err "Can't cd to gnupath/"
for _gnubin in "$_gnudir/$2"*"-$_gnuver"; do for _gnubin in "$_gnudir/$2"*"-$_gnuver"; do
[ -e "$_gnubin" ] || continue; _gnuutil="${_gnubin##*/}" [ -e "$_gnubin" ] || continue
_gnuutil="${_gnubin##*/}"
x_ ln -s "$_gnubin" "${_gnuutil%"-$_gnuver"}" x_ ln -s "$_gnubin" "${_gnuutil%"-$_gnuver"}"
done done
) || $err "Cannot create $2-$_gnuver link in $_gnudir"; : ) || $err "Cannot create $2-$_gnuver link in $_gnudir"; :
@ -326,7 +334,7 @@ elfcheck()
# TODO: very hacky check. do it properly (based on build.list) # TODO: very hacky check. do it properly (based on build.list)
for elftest in "$dest_dir"/*; do for elftest in "$dest_dir"/*; do
[ -e "$elftest" ] && e "$elftest" f && return 1 [ -e "$elftest" ] && e "$elftest" f && return 1
done; return 0 done; :
} }
handle_makefile() handle_makefile()
@ -350,8 +358,9 @@ handle_makefile()
run_make_command() run_make_command()
{ {
[ -z "$premake" ] || [ -n "$mode" ] || $premake || $err "!$premake" [ -z "$premake" ] || [ -n "$mode" ] || $premake || $err "!$premake"
$dry check_cmake "$srcdir" && [ -z "$mode" ] && $dry check_autoconf \ $dry check_cmake "$srcdir" && [ -z "$mode" ] && \
"$srcdir"; $dry check_makefile "$srcdir" || return 1 $dry check_autoconf "$srcdir"
$dry check_makefile "$srcdir" || return 1
$dry make -C "$srcdir" $mode -j$XBMK_THREADS $makeargs || $err "!$mode" $dry make -C "$srcdir" $mode -j$XBMK_THREADS $makeargs || $err "!$mode"
[ -z "$mkhelper" ] || [ -n "$mode" ] || $mkhelper || $err "!$mkhelper" [ -z "$mkhelper" ] || [ -n "$mode" ] || $mkhelper || $err "!$mkhelper"
@ -366,7 +375,7 @@ check_cmake()
"$1/$cmakedir" || $dry check_makefile "$1" || $err \ "$1/$cmakedir" || $dry check_makefile "$1" || $err \
"$1: !cmk $cmakedir" "$1: !cmk $cmakedir"
[ -z "$cmakedir" ] || $dry check_makefile "$1" || \ [ -z "$cmakedir" ] || $dry check_makefile "$1" || \
$err "check_cmake $1: can't generate Makefile"; return 0 $err "check_cmake $1: can't generate Makefile"; :
} }
check_autoconf() check_autoconf()
@ -375,21 +384,22 @@ check_autoconf()
cd "$1" || $err "!cd $1" cd "$1" || $err "!cd $1"
[ -f "bootstrap" ] && x_ ./bootstrap $bootstrapargs [ -f "bootstrap" ] && x_ ./bootstrap $bootstrapargs
[ -f "autogen.sh" ] && x_ ./autogen.sh $autogenargs [ -f "autogen.sh" ] && x_ ./autogen.sh $autogenargs
[ -f "configure" ] && x_ ./configure $autoconfargs; return 0 [ -f "configure" ] && x_ ./configure $autoconfargs; :
) || $err "can't bootstrap project: $1" ) || $err "can't bootstrap project: $1"; :
} }
check_makefile() check_makefile()
{ {
[ -f "$1/Makefile" ] || [ -f "$1/makefile" ] || \ [ -f "$1/Makefile" ] || [ -f "$1/makefile" ] || \
[ -f "$1/GNUmakefile" ] || return 1; return 0 [ -f "$1/GNUmakefile" ] || return 1; :
} }
copy_elf() copy_elf()
{ {
[ -f "$listfile" ] && x_ mkdir -p "$dest_dir" && while read -r f; do [ -f "$listfile" ] && x_ mkdir -p "$dest_dir" && while read -r f; do
[ -f "$srcdir/$f" ] && x_ cp "$srcdir/$f" "$dest_dir" [ -f "$srcdir/$f" ] && x_ cp "$srcdir/$f" "$dest_dir"
done < "$listfile"; x_ make clean -C "$srcdir" $cleanargs done < "$listfile"
x_ make clean -C "$srcdir" $cleanargs
} }
main "$@" || exit 0 main "$@" || exit 0