diff options
-rwxr-xr-x | build-aux/write-ifchanged | 25 | ||||
-rwxr-xr-x | tools/notsd-find-includes | 70 | ||||
-rwxr-xr-x | tools/notsd-fixup | 42 | ||||
-rwxr-xr-x | tools/notsd-fixup--includes | 393 | ||||
-rwxr-xr-x | tools/notsd-move | 35 |
5 files changed, 335 insertions, 230 deletions
diff --git a/build-aux/write-ifchanged b/build-aux/write-ifchanged new file mode 100755 index 0000000000..185ceb0039 --- /dev/null +++ b/build-aux/write-ifchanged @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Copyright (C) 2015 Luke Shumaker +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +outfile=$1 +tmpfile="$(dirname "$outfile")/.tmp${outfile##*/}" + +cat > "$tmpfile" || exit $? +if cmp -s "$tmpfile" "$outfile"; then + rm -f "$tmpfile" || : +else + mv -f "$tmpfile" "$outfile" +fi diff --git a/tools/notsd-find-includes b/tools/notsd-find-includes index 6dfb406fa3..494398b082 100755 --- a/tools/notsd-find-includes +++ b/tools/notsd-find-includes @@ -3,50 +3,50 @@ phase=phase0 phase0() { - phase=phase0 - local line="$1" - case "$line" in - '#include'*|'typedef '*';') - phase1 "$line" - ;; - *) - ;; - esac + phase=phase0 + local line="$1" + case "$line" in + '#include'*|'typedef '*';') + phase1 "$line" + ;; + *) + ;; + esac } phase1() { - phase=phase1 - local line="$1" - case "$line" in - '') - ;; - '#include'*) - ;; - 'typedef '*';') - ;; - *) - phase2 "$line" - ;; - esac + phase=phase1 + local line="$1" + case "$line" in + '') + ;; + '#include'*) + ;; + 'typedef '*';') + ;; + *) + phase2 "$line" + ;; + esac } phase2() { - phase=phase2 - local line="$1" - printf '%s\n' "$line" - cat + phase=phase2 + local line="$1" + printf '%s\n' "$line" + cat } main() { - current_file="$1" - set -o pipefail - { - IFS='' - while read -r line; do - "$phase" "$line" - IFS='' - done - } < "$current_file" | grep '^#include' | ifne printf '%s\n' "$current_file" + current_file="$1" + set -o pipefail + { + IFS='' + while read -r line; do + "$phase" "$line" + IFS='' + done + } < "$current_file" | grep '^#include' | ifne printf '%s\n' "$current_file" } main "$@" diff --git a/tools/notsd-fixup b/tools/notsd-fixup index feec1b8921..77df56fff4 100755 --- a/tools/notsd-fixup +++ b/tools/notsd-fixup @@ -1,25 +1,45 @@ #!/usr/bin/env bash +# The reason we do `find`/`while read`-loops instead of `find -exec` commands +# is that we want errors from the inner loop to bubble up. + fixup_makefiles() ( - find -type f -name Makefile|while read -r filename; do - sed -r -i "s|(/\.\.)*/config.mk|/$(realpath -ms --relative-to="${filename%/*}" config.mk)|" "$filename" + find "$@" -type f -name Makefile | while read -r filename; do + { + <"$filename" sed -r \ + -e "s|(/\.\.)*/config.mk|/$(realpath -ms --relative-to="$(dirname -- "$filename")" config.mk)|" \ + -e '/^nested\.subdirs/d' \ + -e '/^include \$\(topsrcdir\)\/build-aux\/Makefile\.tail\.mk$/d' + echo + find "$(dirname "$filename")" -mindepth 2 -maxdepth 2 -name Makefile -print0 | + xargs -r0 dirname -z -- | + xargs -r0 basename -a -z | + xargs -r0 printf 'nested.subdirs += %s\n' | sort + echo + echo 'include $(topsrcdir)/build-aux/Makefile.tail.mk' + } | cat -s | build-aux/write-ifchanged "$filename" done ) fixup_includes() ( - find $(find . -type d -name include) -type d | while read -r dir; do - lib="${dir##*/}" - pushd "$dir" - find . -type f -exec sed -ri -e "s|$lib/||" -- {} + - popd - done + find $(find . -type d -name include) -type d | while read -r dir; do + lib="${dir##*/}" + pushd "$dir" >/dev/null + find . -type f -exec sed -ri -e "s|$lib/||" -- {} + + popd >/dev/null + done - find src \( -name '*.h' -o -name '*.c' \) -type f -exec "$0"--includes {} \; + find "$@" \( -name '*.h' -o -name '*.c' -o -name '*.gperf' \) -type f | while read -r filename; do + "$0"--includes "$filename" + done ) main() { - fixup_makefiles - fixup_includes + set -e + set -o pipefail + export LC_COLLATE=C + fixup_makefiles "$@" + fixup_includes "$@" } main "$@" diff --git a/tools/notsd-fixup--includes b/tools/notsd-fixup--includes index 957733cdc0..315be32c8d 100755 --- a/tools/notsd-fixup--includes +++ b/tools/notsd-fixup--includes @@ -1,12 +1,12 @@ #!/usr/bin/env bash panic() { - >&2 echo panic - exit 2 + >&2 echo panic + exit 2 } out() { - printf '%q ' "$@" + printf '%q ' "$@" } # system @@ -15,201 +15,226 @@ out() { # protected # private classify() { - local path=$1 - if [[ "$path" = linux/* ]]; then - out linux "$path" - elif [[ -f "${current_file%/*}/${path}" ]]; then - out private "$path" - elif [[ "$path" != systemd/* ]] && - [[ "$path" != libudev.h ]] && - cpp -include "$path" <<<'' &>/dev/null; - then - out system "$path" - else - case "$path" in - asm/sgidefs.h|dbus/dbus.h|efi.h|efilib.h|gio/gio.h|glib.h|libmount.h) - out system "$path" - ;; - util.h|*/util.h) - if [[ "$current_file" = */systemd-boot/* ]]; then - out private util.h - else - out protected basic/util.h - fi - ;; - *) - file=$(find src -type f -name "${path##*/}") - if [[ -f "$file" ]]; then - case "$file" in - */src/*) - if [[ "${current_file%/*}" = "${file%/*}" ]]; then - out private "${file##*/}" - else - out protected "${file##*/src/}" - fi - ;; - */libsystemd/include/*|*/libudev/include/*) - out public "${file##*/include/}" - ;; - */include/*) - out protected "${file##*/include/}" - ;; - *) - if [[ "${current_file%/*}" = "${file%/*}" ]]; then - out private "${file##*/}" - else - out protected "${file##*/}" - fi - ;; - esac - else - >&2 printf 'Cannot figure out: %q\n' "$path" - exit 2 - fi - ;; - esac - fi + local path=$1 + if [[ "$path" = linux/* ]]; then + out linux "$path" + elif [[ -f "${current_file%/*}/${path}" ]]; then + out private "$path" + elif [[ "$path" != systemd/* ]] && + [[ "$path" != libudev.h ]] && + cpp -include "$path" <<<'' &>/dev/null; then + out system "$path" + else + case "$path" in + *-to-name.h|*-from-name.h) + base="${path##*/}" + base="${base%-to-name.h}" + base="${base%-from-name.h}" + case "$base" in + dns_type) d=src/grp-resolve/systemd-resolved;; + keyboard-keys) d=src/grp-udev/libudev-core;; + af|arphrd|cap|errno) d=src/libbasic/include/basic;; + audit_type) d=src/libsystemd/src/sd-journal;; + *) + >&2 printf 'Unknown gperf base: %q\n' "$base" + >&2 printf 'Cannot figure out: %q\n' "$path" + exit 2 + ;; + esac + file="$d/${path##*/}" + if [[ "$current_file" = "$d"/* ]]; then + out private "${file##*/}" + elif [[ "$file" = */include/* ]]; then + out protected "${file##*/include/}" + else + out protected "${file##*/}" + fi + ;; + asm/sgidefs.h|dbus/dbus.h|efi.h|efilib.h|gio/gio.h|glib.h|libmount.h) + out system "$path" + ;; + util.h|*/util.h) + if [[ "$current_file" = */systemd-boot/* ]]; then + out private util.h + else + out protected basic/util.h + fi + ;; + *) + file=$(find src -type f -name "${path##*/}") + if [[ -f "$file" ]]; then + case "$file" in + */src/*) + if [[ "${current_file%/*}" = "${file%/*}" ]]; then + out private "${file##*/}" + else + out protected "${file##*/src/}" + fi + ;; + */libsystemd/include/*|*/libudev/include/*) + out public "${file##*/include/}" + ;; + */include/*) + out protected "${file##*/include/}" + ;; + *) + if [[ "${current_file%/*}" = "${file%/*}" ]]; then + out private "${file##*/}" + else + out protected "${file##*/}" + fi + ;; + esac + else + >&2 printf 'Cannot figure out: %q\n' "$path" + exit 2 + fi + ;; + esac + fi } phase=phase0 hook=: phase0() { - phase=phase0 - hook=: - local line="$1" - case "$line" in - '#include'*|'typedef '*';') - phase1 "$line" - ;; - *) - printf '%s\n' "$line" - ;; - esac + phase=phase0 + hook=: + local line="$1" + case "$line" in + '#include'*|'typedef '*';') + phase1 "$line" + ;; + *) + printf '%s\n' "$line" + ;; + esac } -phase1_tail= -system=() -linux=() -public=() -protected=() -typedef=(); typedef_last=true -private=() +phase1_init() { + phase1_tail= + system=() + linux=() + public=() + protected=() + typedef=(); typedef_last=true + private=() +} +phase1_init phase1_flush() { - local b=: - if [[ ${#system[@]} -gt 0 ]]; then - printf '%s\n' "${system[@]}" | sort -u - b=echo - fi - if [[ ${#linux[@]} -gt 0 ]]; then - $b - printf '%s\n' "${linux[@]}" - b=echo - fi - if [[ ${#public[@]} -gt 0 ]]; then - $b - printf '%s\n' "${public[@]}" | sort -u - b=echo - fi - if [[ ${#protected[@]} -gt 0 ]]; then - $b - printf '%s\n' "${protected[@]}" | sort -u - b=echo - fi - if [[ ${#typedef[@]} -gt 0 ]] && ! $typedef_last; then - $b - printf '%s\n' "${typedef[@]}" | sort -u - b=echo - fi - if [[ ${#private[@]} -gt 0 ]]; then - $b - printf '%s\n' "${private[@]}" | sort -u - b=echo - fi - if [[ ${#typedef[@]} -gt 0 ]] && $typedef_last; then - $b - printf '%s\n' "${typedef[@]}" - fi - printf '%s' "$phase1_tail" + local b=: + if [[ ${#system[@]} -gt 0 ]]; then + printf '%s\n' "${system[@]}" | sort -u + b=echo + fi + if [[ ${#linux[@]} -gt 0 ]]; then + $b + printf '%s\n' "${linux[@]}" + b=echo + fi + if [[ ${#public[@]} -gt 0 ]]; then + $b + printf '%s\n' "${public[@]}" | sort -u + b=echo + fi + if [[ ${#protected[@]} -gt 0 ]]; then + $b + printf '%s\n' "${protected[@]}" | sort -u + b=echo + fi + if [[ ${#typedef[@]} -gt 0 ]] && ! $typedef_last; then + $b + printf '%s\n' "${typedef[@]}" | sort -u + b=echo + fi + if [[ ${#private[@]} -gt 0 ]]; then + $b + printf '%s\n' "${private[@]}" | sort -u + b=echo + fi + if [[ ${#typedef[@]} -gt 0 ]] && $typedef_last; then + $b + printf '%s\n' "${typedef[@]}" + fi + printf '%s' "$phase1_tail" + phase1_init } phase1() { - phase=phase1 - hook=phase1_flush - local line="$1" - case "$line" in - '') - phase1_tail+=$'\n' - ;; - '#include'*) - phase1_tail='' - local re='^#include [<"]([^">]*)[">](.*)' - if [[ "$line" =~ $re ]]; then - IFS=' ' - local buf - buf="$(classify "${BASH_REMATCH[1]}")" || panic - read -r class path <<<"$buf" - case "$class" in - system) - printf -v line '#include <%s>%s' "$path" "${BASH_REMATCH[2]}" - system+=("$line") - ;; - linux) - printf -v line '#include <%s>%s' "$path" "${BASH_REMATCH[2]}" - linux+=("$line") - ;; - public) - printf -v line '#include <%s>%s' "$path" "${BASH_REMATCH[2]}" - public+=("$line") - ;; - protected) - printf -v line '#include "%s"%s' "$path" "${BASH_REMATCH[2]}" - protected+=("$line") - ;; - private) - if [[ ${#typedef[@]} -gt 0 ]]; then - typedef_last=false - fi - printf -v line '#include "%s"%s' "$path" "${BASH_REMATCH[2]}" - private+=("$line") - ;; - esac - else - panic - fi - ;; - 'typedef '*';') - phase1_tail='' - typedef+=("$line") - ;; - *) - phase1_flush - phase2 "$line" - ;; - esac -} - -phase2() { - phase=phase2 - hook=: - local line="$1" - printf '%s\n' "$line" - cat + phase=phase1 + hook=phase1_flush + local line="$1" + case "$line" in + '') + phase1_tail+=$'\n' + ;; + '#include'*) + phase1_tail='' + local re='^#include [<"]([^">]*)[">](.*)' + if [[ "$line" =~ $re ]]; then + IFS=' ' + local buf + buf="$(classify "${BASH_REMATCH[1]}")" || panic + read -r class path <<<"$buf" + case "$class" in + system) + printf -v line '#include <%s>%s' "$path" "${BASH_REMATCH[2]}" + system+=("$line") + ;; + linux) + printf -v line '#include <%s>%s' "$path" "${BASH_REMATCH[2]}" + linux+=("$line") + ;; + public) + printf -v line '#include <%s>%s' "$path" "${BASH_REMATCH[2]}" + public+=("$line") + ;; + protected) + printf -v line '#include "%s"%s' "$path" "${BASH_REMATCH[2]}" + protected+=("$line") + ;; + private) + if [[ ${#typedef[@]} -gt 0 ]]; then + typedef_last=false + fi + printf -v line '#include "%s"%s' "$path" "${BASH_REMATCH[2]}" + private+=("$line") + ;; + esac + else + panic + fi + ;; + 'typedef '*';') + phase1_tail='' + typedef+=("$line") + ;; + *) + phase1_flush + phase0 "$line" + ;; + esac } main() { - current_file="$1" - printf ' => %s\n' "$current_file" - set -o pipefail - trap 'rm -f -- "$current_file.tmp"' EXIT - { - IFS='' - while read -r line; do - "$phase" "$line" - IFS='' - done - "$hook" - } < "$current_file" > "$current_file.tmp" - mv -Tf "$current_file.tmp" "$current_file" + current_file="$1" + printf ' => %q %q\n' "$0" "$current_file" + set -o pipefail + trap 'rm -f -- "$current_file.tmp"' EXIT + { + IFS='' + while read -r line; do + "$phase" "$line" + IFS='' + done + "$hook" + } < "$current_file" > "$current_file.tmp" + # I specificially don't use write-ifchanged because I don't want the + # temporary file to have the .c suffix. + if cmp -s "$current_file.tmp" "$current_file"; then + rm -f "$current_file.tmp" || : + else + mv -Tf "$current_file.tmp" "$current_file" + fi } main "$@" diff --git a/tools/notsd-move b/tools/notsd-move index 5ae639fe26..bf0646528f 100755 --- a/tools/notsd-move +++ b/tools/notsd-move @@ -706,6 +706,41 @@ breakup_makefile() ( src/libsystemd/src/Makefile \ src/libsystemd/src/sd-journal/Makefile \ src/grp-udev/libudev-core/Makefile + + ln -sT ../grp-system/libcore/mount-setup.h src/systemd-remount-fs/mount-setup.h + ln -sT ../grp-system/libcore/mount-setup.c src/systemd-remount-fs/mount-setup.c + ln -sT ../libcore/mount-setup.h src/grp-system/systemd-shutdown/mount-setup.h + ln -sT ../libcore/mount-setup.c src/grp-system/systemd-shutdown/mount-setup.c + ln -sT ../libcore/killall.h src/grp-system/systemd-shutdown/killall.h + ln -sT ../libcore/killall.c src/grp-system/systemd-shutdown/killall.c + ln -sT ../../libcore/mount-setup.h src/grp-system/grp-utils/systemd-fstab-generator/mount-setup.h + ln -sT ../../libcore/mount-setup.c src/grp-system/grp-utils/systemd-fstab-generator/mount-setup.c + ln -sT ../grp-system/libcore/mount-setup.h src/systemd-nspawn/mount-setup.h + ln -sT ../grp-system/libcore/loopback-setup.h src/systemd-nspawn/loopback-setup.h + ln -sT ../grp-system/libcore/loopback-setup.c src/systemd-nspawn/loopback-setup.c + ln -sT ../grp-system/libcore/machine-id-setup.h src/systemd-nspawn/machine-id-setup.h + ln -sT ../grp-system/libcore/machine-id-setup.c src/systemd-nspawn/machine-id-setup.c + ln -sT ../grp-system/libcore/mount-setup.c src/systemd-nspawn/mount-setup.c + ln -sT ../../../libsystemd/include/systemd/_sd-common.h src/libsystemd-network/include/systemd-network/_sd-common.h + ln -sT ../../libsystemd/include/systemd/_sd-common.h src/grp-utils/systemd-path/_sd-common.h + ln -sT ../../grp-login/systemd-logind/logind-acl.h src/grp-udev/libudev-core/logind-acl.h + ln -sT ../../libsystemd/src/sd-login/sd-login.c src/grp-udev/libudev-core/sd-login.c + ln -sT ../../grp-login/systemd-logind/logind-acl.c src/grp-udev/libudev-core/logind-acl.c + ln -sT ../../../libshared/include/shared/gcrypt-util.h src/libsystemd/src/sd-journal/gcrypt-util.h + ln -sT ../../../libshared/src/gcrypt-util.c src/libsystemd/src/sd-journal/gcrypt-util.c + ln -sT ../grp-system/libcore/machine-id-setup.h src/systemd-machine-id-setup/machine-id-setup.h + ln -sT ../grp-system/libcore/machine-id-setup.c src/systemd-machine-id-setup/machine-id-setup.c + + ln -sT ../subdir.mk src/libsystemd/src/sd-network/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-bus/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-event/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-login/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-resolve/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-daemon/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-netlink/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-id128/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-hwdb/Makefile + ln -sT ../subdir.mk src/libsystemd/src/sd-device/Makefile ) fixup_makefile() { |