#!/usr/bin/env bash in_array() { local needle=$1; shift local item for item in "$@"; do [[ $item = $needle ]] && return 0 # Found done return 1 # Not Found } move_files() ( for d in libsystemd libudev; do mkdir src/$d-new mv -T src/$d src/$d-new/src mv -T src/$d-new src/$d done for d in basic core shared; do mv -T src/{,lib}$d done mkdir src/libbasic/src mv src/libbasic/*.c src/libbasic/src/ mkdir src/libbasic/include mkdir src/libbasic/include/basic mv src/libbasic/.gitignore src/libbasic/*.h src/libbasic/include/basic/ mv -T src/lib{shared,core}/linux mkdir src/libfirewall mv -T src/lib{shared,firewall}/firewall-util.c mv -T src/lib{shared,firewall}/firewall-util.h mkdir src/libshared/src mv src/libshared/*.c src/libshared/src/ mkdir src/libshared/include mkdir src/libshared/include/shared mv src/libshared/*.h src/libshared/include/shared/ mkdir src/libsystemd-network/test mv src/libsystemd-network/test-* src/libsystemd-network/test mkdir src/libsystemd-network/src mv src/libsystemd-network/*.c src/libsystemd-network/src/ mkdir src/libsystemd-network/include mkdir src/libsystemd-network/include/systemd-network mv src/libsystemd-network/*.h src/libsystemd-network/include/systemd-network/ pfix=( dbus1-generator debug-generator fstab-generator getty-generator gpt-auto-generator rc-local-generator system-update-generator sysv-generator ac-power activate analyze ask-password backlight binfmt cgls cgroups-agent cgtop coredump cryptsetup delta detect-virt escape firstboot fsck hibernate-resume hwdb initctl machine-id-setup modules-load notify nspawn path quotacheck random-seed remount-fs reply-password rfkill run sleep socket-proxy stdio-bridge sysctl sysusers timesync tmpfiles tty-ask-password-agent update-done update-utmp user-sessions ) for d in "${pfix[@]}"; do mv -T src/{,systemd-}$d done mv -T src/vconsole src/systemd-vconsole-setup dmon=( systemd-socket-proxy systemd-timesync ) for d in "${dmon[@]}"; do mv -T "src/$d"{,d} done mv -T {shell-completion/bash/,src/kernel-install/bash-completion_}kernel-install mv -T {shell-completion/zsh/_,src/kernel-install/zsh-completion_}kernel-install mv -T {man,src/kernel-install}/kernel-install.xml mkdir src/libsystemd/include mv -T src/{,libsystemd/include}/systemd mkdir src/grp-machine mv -T src/machine src/grp-machine/libmachine-core mkdir src/grp-machine/systemd-machined mv -T src/grp-machine/{libmachine-core,systemd-machined}/machined.c mkdir src/grp-machine/machinectl mv -T src/grp-machine/{libmachine-core,machinectl}/machinectl.c mv -T src/{,grp-machine}/nss-mymachines mkdir src/grp-resolve mv -T src/{resolve,grp-resolve/systemd-resolved} mv -T src/{,grp-resolve}/nss-resolve mkdir src/grp-system mv -T src/{,grp-system}/systemctl mkdir src/grp-system/systemd mv -T src/{libcore,grp-system/systemd}/main.c mv -T src/{libcore,grp-system/systemd}/macros.systemd.in mv -T src/{libcore,grp-system/systemd}/org.freedesktop.systemd1.conf mv -T src/{libcore,grp-system/systemd}/org.freedesktop.systemd1.policy.in.in mv -T src/{libcore,grp-system/systemd}/org.freedesktop.systemd1.service mv -T src/{libcore,grp-system/systemd}/system.conf mv -T src/{libcore,grp-system/systemd}/systemd.pc.in mv -T src/{libcore,grp-system/systemd}/triggers.systemd.in mv -T src/{libcore,grp-system/systemd}/user.conf mkdir src/libudev/include mv -T src/libudev/{src,include}/libudev.h mv -T src/libsystemd/{src,}/libsystemd.pc.in mv -T src/libsystemd/{src,}/libsystemd.sym mv -T src/libsystemd/{src,}/.gitignore mkdir src/systemd-shutdown mkdir src/grp-coredump mv -T src/{,grp-coredump}/systemd-coredump mkdir src/grp-coredump/coredumpctl mv -T src/grp-coredump/{systemd-coredump,coredumpctl}/coredumpctl.c mkdir src/grp-boot mv -T src/boot/efi src/grp-boot/systemd-boot mv -T src/boot src/grp-boot/bootctl mv -T {test,src/grp-boot/systemd-boot}/test-efi-create-disk.sh mkdir build-aux mkdir build-aux/Makefile.{once,each}.{head,tail} touch build-aux/Makefile.{once,each}.{head,tail}/.gitignore mkdir src/libsystemd/src/sd-journal libsystemd_journal_files=( audit-type.c audit-type.h catalog.c catalog.h compress.c compress.h fsprg.c fsprg.h journal-authenticate.c journal-authenticate.h journal-def.h journal-file.c journal-file.h journal-internal.h journal-send.c journal-vacuum.c journal-vacuum.h journal-verify.c journal-verify.h lookup3.c lookup3.h mmap-cache.c mmap-cache.h sd-journal.c ) for file in "${libsystemd_journal_files[@]}"; do mv -T src/{journal,libsystemd/src/sd-journal}/$file done mkdir src/busctl mv src/libsystemd/src/sd-bus/busctl* src/busctl mv -T src/{udev,libudev/src}/udev.h mkdir src/grp-timedate mv -T src/timedate src/grp-timedate/systemd-timedated mkdir src/grp-timedate/timedatectl mv -T src/grp-timedate/{systemd-timedated,timedatectl}/timedatectl.c mv -T src/{journal,grp-journal} mv -T {,src/grp-journal/}catalog mkdir src/grp-journal/{systemd-journald,journalctl,libjournal-core} mv -T src/grp-journal/{,systemd-journald}/journald.c mv -T src/grp-journal/{,journalctl}/journalctl.c mv src/grp-journal/*.* src/grp-journal/libjournal-core/ mv -T src/{,grp-}journal-remote local suffix for suffix in gatewayd remote upload; do mkdir src/grp-journal-remote/systemd-journal-$suffix mv src/grp-journal-remote/journal-$suffix* src/grp-journal-remote/systemd-journal-$suffix/ done mv -T src/{,grp-}hostname mv -T src/{,grp-}locale mv -T src/{,grp-}udev mv -T src/{,grp-}import mkdir src/grp-import/systemd-importd mv src/grp-import/{,systemd-importd}/importd.c mkdir src/grp-import/systemd-pull mv src/grp-import/pull* src/grp-import/systemd-pull mkdir src/grp-import/systemd-import mv src/grp-import/import* src/grp-import/systemd-import mkdir src/grp-import/systemd-export mv src/grp-import/export* src/grp-import/systemd-export mv -T src/{,grp-}network mkdir src/grp-network/systemd-networkd mv src/grp-network/{,systemd-networkd}/networkd.c mkdir src/grp-network/systemd-networkd-wait-online mv src/grp-network/networkd-wait-online* src/grp-network/systemd-networkd-wait-online mkdir src/grp-network/networkctl mv src/grp-network/{,networkctl}/networkctl.c mkdir src/grp-network/libnetworkd-core mv src/grp-network/networkd* src/grp-network/libnetworkd-core mv -T src/{,grp-}login mkdir src/grp-login/systemd-logind mv -T src/grp-login/{,systemd-logind}/logind.c mv -T src/grp-login/{,systemd-logind}/logind.h mkdir src/grp-login/liblogind-core mv src/grp-login/logind-* src/grp-login/liblogind-core mkdir src/grp-login/loginctl mv -T src/grp-login/{,loginctl}/loginctl.c mv -T src/grp-login/{,loginctl}/sysfs-show.h mv -T src/grp-login/{,loginctl}/sysfs-show.c mkdir src/grp-login/systemd-inhibit mv -T src/grp-login/{,systemd-inhibit}/inhibit.c mkdir src/grp-login/pam_systemd mv -T src/grp-login/{,pam_systemd}/pam_systemd.c mv -T src/grp-login/{,pam_systemd}/pam_systemd.sym mkdir src/grp-udev/d-udevadm mv src/grp-udev/udevadm* src/grp-udev/d-udevadm/ mkdir src/grp-udev/systemd-udevd mv -T src/grp-udev/{,systemd-udevd}/udevd.c mkdir src/grp-udev/libudev-core mv src/grp-udev/udev* src/grp-udev/libudev-core/ mv -T src/grp-udev/{,libudev-core}/net mv -T src/grp-udev/{d-,}udevadm mv -T src/{libcore,systemd-shutdown}/shutdown.c mv -T src/{libcore,systemd-shutdown}/umount.c mv -T src/{libcore,systemd-shutdown}/umount.h mkdir src/grp-helperunits helperunits=( backlight binfmt detect-virt quotacheck random-seed rfkill sleep vconsole-setup user-sessions ) for hu in "${helperunits[@]}"; do mv -T src/systemd-"$hu" src/grp-helperunits/systemd-"$hu" done ) breakup_makefile() ( find . \( -name Makefile -o -name '*.mk' \) -delete touch .tmp.move.all files=(.tmp.move.all) file=/dev/null IFS='' while read -r line; do if [[ $line = '#@'* ]]; then file="${line#'#@'}" file="${file%% *}" elif [[ $file = all ]]; then printf '%s\n' "$line" | tee -a "${files[@]}" >/dev/null else if ! in_array "$file" "${files[@]}"; then cat .tmp.move.all > "$file" files+=("$file") fi printf '%s\n' "$line" >> "$file" fi done < <(fixup_makefile |' \ -e 's|#include <(sd-[^>]*)>|#include |' ) fixup_makefile() { sed -r \ -e '/^[^# ]*:/ { s|^(\s*)\S+/|\1$(outdir)/| }' \ -e 's|^if (.*)|ifneq ($(\1),)|' \ -e 's|--version-script=.*/([^/]+)\.sym|--version-script=$(srcdir)/\1.sym|g' } fixup_makefiles() ( sed -ri \ -e '/^ \$\(AM_V_at\)\$\(MKDIR_P\) \$\(dir \$@\)/d' \ -e 's/ \$\(CFLAGS\) / /g' \ -e 's/ \$\(CPPFLAGS\) / /g' \ -e 's/ \$\(AM_CPPFLAGS\) / $(sd.ALL_CPPFLAGS) /g' \ -e '/^[^# ]*:/ { s|\S+/|$(outdir)/|g }' \ src/libbasic/include/basic/Makefile \ src/libsystemd/src/Makefile \ src/libsystemd/src/sd-journal/Makefile \ src/grp-udev/libudev-core/Makefile find -type f -name Makefile|while read -r filename; do sed -r -i "s|(/\.\.)*/config.mk|/$(realpath -ms --relative-to="${filename%/*}" config.mk)|" "$filename" done ) breakup_zshcompletion() ( sed_expr=' 1 { i #compdef %s d } /^case/,/^esac/ { /^ %s)/,/^ ;;/ { s/^ //p } d } ' cd shell-completion/zsh read -r _ cmds < _systemd for cmd in $cmds; do printf -v cmd_sed_expr "$sed_expr" $cmd $cmd sed -e "$cmd_sed_expr" < _systemd > _$cmd done rm _systemd ) move() ( >&2 echo ' => move_files' move_files >&2 echo ' => breakup_makefile' breakup_makefile >&2 echo ' => fixup_includes' fixup_includes >&2 echo ' => fixup_makefiles' fixup_makefiles >&2 echo ' => breakup_zshutils' breakup_zshcompletion ) main() { set -e if [[ -n "$(git status -s)" ]] || [[ -n "$(git clean -xdn)" ]]; then echo 'There are changes in the current directory.' >&2 exit 1 fi git checkout -b postmove move git add . git commit -m './move.sh' git merge -s ours lukeshu/postmove git checkout lukeshu/postmove git merge postmove git branch -d postmove } main "$@"