summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-09-10 18:59:03 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-09-10 18:59:03 -0400
commit12e3360f833dbc83e995aed1ba67b74fc95e3ec3 (patch)
treebed8d2ce2309e2bab18cdab0931fb60d290c3fa9
parent2a5c8b237b1b0303bf6d0f6cc762bb9cafac35c9 (diff)
sync other tools from master
-rwxr-xr-xtools/find_includes52
-rwxr-xr-xtools/fixup.sh9
-rwxr-xr-xtools/fixup_includes215
-rwxr-xr-xtools/git-setup23
-rw-r--r--tools/test-header.c1
-rwxr-xr-xtools/test-header.sh2
6 files changed, 302 insertions, 0 deletions
diff --git a/tools/find_includes b/tools/find_includes
new file mode 100755
index 0000000000..6dfb406fa3
--- /dev/null
+++ b/tools/find_includes
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+
+phase=phase0
+
+phase0() {
+ 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
+}
+
+phase2() {
+ 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"
+}
+
+main "$@"
diff --git a/tools/fixup.sh b/tools/fixup.sh
new file mode 100755
index 0000000000..651feb6cf8
--- /dev/null
+++ b/tools/fixup.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+for lib in basic shared systemd-network systemd; do
+ pushd src/lib${lib}/include/${lib}
+ find . -type f -exec sed -ri -e "s|$lib/||" -- {} +
+ popd
+done
+
+find src \( -name '*.h' -o -name '*.c' \) -type f -exec ./fixup_includes {} \;
diff --git a/tools/fixup_includes b/tools/fixup_includes
new file mode 100755
index 0000000000..957733cdc0
--- /dev/null
+++ b/tools/fixup_includes
@@ -0,0 +1,215 @@
+#!/usr/bin/env bash
+
+panic() {
+ >&2 echo panic
+ exit 2
+}
+
+out() {
+ printf '%q ' "$@"
+}
+
+# system
+# linux
+# public
+# 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
+}
+
+phase=phase0
+hook=:
+
+phase0() {
+ 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_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"
+}
+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
+}
+
+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"
+}
+
+main "$@"
diff --git a/tools/git-setup b/tools/git-setup
new file mode 100755
index 0000000000..f40a7724d9
--- /dev/null
+++ b/tools/git-setup
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+cd "$(dirname -- "$0")"
+cd "$(git rev-parse --show-toplevel)"
+
+if [ -f .git/hooks/pre-commit.sample ] && [ ! -f .git/hooks/pre-commit ]; then
+ # This part is allowed to fail
+ cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \
+ chmod +x .git/hooks/pre-commit && \
+ echo "Activated pre-commit hook." || :
+fi
+
+declare -A fetch
+git config -f .gitconfig --get-regexp '.*' | while read -r key val; do
+ if [[ $key = *.fetch ]]; then
+ if [[ -z "${fetch[$key]}" ]]; then
+ git config --local --unset-all "$key"
+ fetch[$key]='true'
+ fi
+ git config --local --add "$key" "$val"
+ else
+ git config --local "$key" "$val"
+ fi
+done
diff --git a/tools/test-header.c b/tools/test-header.c
new file mode 100644
index 0000000000..76e8197013
--- /dev/null
+++ b/tools/test-header.c
@@ -0,0 +1 @@
+int main() { return 0; }
diff --git a/tools/test-header.sh b/tools/test-header.sh
new file mode 100755
index 0000000000..b11285af7d
--- /dev/null
+++ b/tools/test-header.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+gcc -c -o /dev/null -I/usr/include/efi -I/usr/include/efi/x86_64 -I/usr/include/libmount $(find src -type d |sed 's|^|-I&|') -include ./config.h -include "$(realpath -- "$1")" test-header.c