=== modified file 'functions/build-dir-from-image' --- functions/build-dir-from-image 2017-12-12 23:27:45 +0000 +++ functions/build-dir-from-image 2017-12-08 08:00:17 +0000 @@ -4,12 +4,28 @@ mount_opts=${3:-loop,ro} [[ -e $src ]] || die "Image not found: ${(qqq)src}" -defvar build_dir $DO:h/work/$TARGET -defvar prev_fstab '' -eval $(getvars build_dir prev_fstab) - -mkdir -p $build_dir \ - || die "Failed to create build directory ${(qqq)build_dir}" - -fstab-add-and-mount "$src:A ${build_dir:A} $fstype $mount_opts 0 0" +if ! (($+vars[build_dir])); then + vars[build_dir]=$DO:h/work/$TARGET +fi +if ! (($+vars[fstab])); then + vars[fstab]='' +fi +vars[fstab]+="$src:A ${vars[build_dir]:A} $fstype $mount_opts 0 0 +" + +#while grep -q "^[^ ]\\+ ${vars[build_dir]:A} " /proc/mounts; do +# umount ${vars[build_dir]:A} || die "Failed to umount ${(qqq)vars[build_dir]}" +#done +# +#local remove +#[[ -e $vars[build_dir] ]] && remove+=( $vars[build_dir]/*(DN) ) +#if (($#remove)); then +# rm -rf $remove \ +# || die "Failed to clean build directory ${(qqq)vars[build_dir]}" +#fi +mkdir -p $vars[build_dir] \ + || die "Failed to create build directory ${(qqq)vars[build_dir]}" + +mount -a --fstab /dev/stdin <<<$vars[fstab] \ + || die "Failed to mount ${(qqq)vars[build_dir]}" # vim: fileencoding=utf8 ft=zsh noet sw=4 ts=4 sts=4 === modified file 'functions/clone-build-dir' --- functions/clone-build-dir 2017-12-12 23:27:45 +0000 +++ functions/clone-build-dir 2017-12-12 17:03:06 +0000 @@ -1,14 +1,22 @@ init-build-dir-vars -eval $(getvars build_dir changes_dir work_dir prev_fstab) -output-dir $changes_dir -output-dir $work_dir +while grep -q "^overlay ${vars[build_dir]:A} overlay" /proc/mounts; do + umount ${vars[build_dir]:A} || die "Failed to umount ${(qqq)vars[build_dir]}" +done +if [[ -e $vars[build_dir] ]]; then + rm -rf $vars[changes_dir] $vars[work_dir] \ + || die "Failed to clean work directories" +fi +mkdir -p $vars[changes_dir] $vars[work_dir] $vars[build_dir] \ + || die "Failed to create work directories" local -a mount_opts mount_opts=( lowerdir=${1//=/\\=} - upperdir=${changes_dir//=/\\=} - workdir=${work_dir//=/\\=} + upperdir=${vars[changes_dir]//=/\\=} + workdir=${vars[work_dir]//=/\\=} ) - -fstab-add-and-mount "overlay ${build_dir:A} overlay ${(j:,:)mount_opts} 0 0" +mount -t overlay overlay -o ${(j:,:)mount_opts} ${vars[build_dir]:A} \ + || die "Failed to mount ${(qqq)vars[build_dir]}" +grep -q "^overlay ${vars[build_dir]:A} overlay" /proc/mounts \ + || die "Not visible as mounted: ${(qqq)vars[build_dir]}" # vim: fileencoding=utf8 ft=zsh noet sw=4 ts=4 sts=4 === renamed file 'functions/clone-depend' => 'functions/clone-depend-if-changed' --- functions/clone-depend 2017-12-12 23:27:45 +0000 +++ functions/clone-depend-if-changed 2017-12-07 19:20:41 +0000 @@ -1,4 +1,39 @@ -depend "$@" build_dir:source_dir fstab:prev_fstab -eval $(getvars source_dir) -clone-build-dir $source_dir +init-build-dir-vars +while grep -q "^[^ ]\\+ ${vars[build_dir]:A} " /proc/mounts; do + umount ${vars[build_dir]:A} || die "Failed to umount ${(qqq)vars[build_dir]}" +done + +depend "$@" %build_dir=source_dir %fstab + +local -a mount_opts +mount_opts=( + lowerdir=${${vars[source_dir]:A}//=/\\=} + upperdir=${${vars[changes_dir]:A}//=/\\=} + workdir=${${vars[work_dir]:A}//=/\\=} +) +vars[fstab]+="overlay ${vars[build_dir]:A} overlay ${(j:,:)mount_opts} 0 0 +" + +hash-changes +if is-unchanged; then + mount -a --fstab /dev/stdin <<<$vars[fstab] \ + || die "Failed to mount ${(qqq)vars[build_dir]}" + grep -q "^overlay ${vars[build_dir]:A} overlay" /proc/mounts \ + || die "Not visible as mounted: ${(qqq)vars[build_dir]}" + exit-unchanged +fi + +local -a remove +[[ -e $vars[changes_dir] ]] && remove+=( $vars[changes_dir]/*(DN) ) +[[ -e $vars[work_dir] ]] && remove+=( $vars[work_dir]/*(DN) ) +if (($#remove)); then + rm -rf $remove || die "Failed to clean work directories" +fi + +mkdir -p $vars[changes_dir] $vars[work_dir] $vars[build_dir] \ + || die "Failed to create work directories" +mount -a --fstab /dev/stdin <<<$vars[fstab] \ + || die "Failed to mount ${(qqq)vars[build_dir]}" +grep -q "^overlay ${vars[build_dir]:A} overlay" /proc/mounts \ + || die "Not visible as mounted: ${(qqq)vars[build_dir]}" # vim: fileencoding=utf8 ft=zsh noet sw=4 ts=4 sts=4 === modified file 'functions/fresh-build-dir' --- functions/fresh-build-dir 2017-12-12 23:27:45 +0000 +++ functions/fresh-build-dir 2017-12-06 19:34:01 +0000 @@ -1,4 +1,20 @@ -defvar build_dir $DO:h/work/$TARGET -eval $(getvars build_dir) -output-dir $build_dir +if ! (($+vars[build_dir])); then + vars[build_dir]=$DO:h/work/$TARGET +fi +if ! (($+vars[fstab])); then + vars[fstab]='' +fi +while grep -q "^[^ ]\\+ ${vars[build_dir]:A} " /proc/mounts; do + umount ${vars[build_dir]:A} || die "Failed to umount ${(qqq)vars[build_dir]}" +done + +local remove +[[ -e $vars[build_dir] ]] && remove+=( $vars[build_dir]/*(DN) ) +if (($#remove)); then + rm -rf $remove \ + || die "Failed to clean build directory ${(qqq)vars[build_dir]}" +fi +mkdir -p $vars[build_dir] \ + || die "Failed to create build directory ${(qqq)vars[build_dir]}" + # vim: fileencoding=utf8 ft=zsh noet sw=4 ts=4 sts=4 === modified file 'functions/fsapply_build_dir' --- functions/fsapply_build_dir 2017-12-12 23:27:45 +0000 +++ functions/fsapply_build_dir 2017-12-07 19:13:00 +0000 @@ -1,8 +1,7 @@ ifchange $1 -eval $(getvars build_dir) local -a fsapply fsapply=( fsapply ) (($+xtrace)) && (($xtrace)) && fsapply+=( -x ) -$fsapply $build_dir <$1 \ - || die "$0: Could not apply ${(qqq)1}" +$fsapply $vars[build_dir] <$1 \ + || die "Could not apply ${(qqq)1}" # vim: fileencoding=utf8 ft=zsh noet sw=4 ts=4 sts=4 === modified file 'functions/init-build-dir-vars' --- functions/init-build-dir-vars 2017-12-12 23:27:45 +0000 +++ functions/init-build-dir-vars 2017-12-06 19:34:01 +0000 @@ -1,4 +1,10 @@ -defvar build_dir $DO:h/work/$TARGET -defvar changes_dir $DO:h/work/$TARGET.changes -defvar work_dir $DO:h/work/$TARGET.work +if ! (($+vars[build_dir])); then + vars[build_dir]=$DO:h/work/$TARGET +fi +if ! (($+vars[changes_dir])); then + vars[changes_dir]=$DO:h/work/$TARGET.changes +fi +if ! (($+vars[work_dir])); then + vars[work_dir]=$DO:h/work/$TARGET.work +fi # vim: fileencoding=utf8 ft=zsh noet sw=4 ts=4 sts=4 === modified file 'functions/output-dir' --- functions/output-dir 2017-12-12 23:27:45 +0000 +++ functions/output-dir 2017-12-12 17:03:06 +0000 @@ -8,7 +8,7 @@ rm -rf $remove || die "$0: Failed to clean output directory: ${(qqq)1}" fi -mkdir -p $1 || die "$0: Failed to create output directory: ${(qqq)1}" +mkdir -p $1 || die "Failed to create output directory: ${(qqq)1}" add_finish_hook dep_add_dir $1 # vim: fileencoding=utf8 ft=zsh noet sw=4 ts=4 sts=4 === modified file 'functions/patch_build_dir' (properties changed: -x to +x) --- functions/patch_build_dir 2017-12-12 23:27:45 +0000 +++ functions/patch_build_dir 2017-12-11 22:43:53 +0000 @@ -2,7 +2,5 @@ patch=$1 shift ifchange $patch -eval $(getvars build_dir) -patch --directory=$build_dir <$patch "$@" \ - || die "$0: Patch failed: ${(qqq)patch}" +patch --directory=$vars[build_dir] <$patch "$@" # vim: fileencoding=utf8 ft=zsh noet sw=4 ts=4 sts=4