From 4f2b735472eb921b5edd91c502e0a47d5e4d0cd2 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Tue, 11 Jun 2024 09:48:15 +0200 Subject: chore(build): Update --- build/c/scripts/renew_copyright_header.sh | 92 +++++++++++++++++++++++++++++++ build/c/scripts/valgrind_test.sh | 29 ++++++++++ 2 files changed, 121 insertions(+) create mode 100755 build/c/scripts/renew_copyright_header.sh create mode 100755 build/c/scripts/valgrind_test.sh (limited to 'build/c/scripts') diff --git a/build/c/scripts/renew_copyright_header.sh b/build/c/scripts/renew_copyright_header.sh new file mode 100755 index 0000000..423547f --- /dev/null +++ b/build/c/scripts/renew_copyright_header.sh @@ -0,0 +1,92 @@ +#! /usr/bin/env sh + +# NOTE: This is the line length of the .licensure.yml header template **plus** the extra +# line after the template comment. +TEMPLATE_LINE_LENGTH=20 +LATEX_TEMPLATE_LINE_LENGTH=9 + +PROJECT_ROOT="$(git rev-parse --show-toplevel)" + +remove() { + extension="$1" + file="$2" + + # We need to differentiate, when removing the old copyright header, as some + # formatters do weird things to the file + case "$extension" in + # normal '#' comments (these are $TEMPLATE_LINE_LENGTH lines long) + "Makefile" | "makefile" | "toml" | "envrc" | "yml" | "gitignore" | "awk" | "pest" | "lua") + sed --in-place "1,${TEMPLATE_LINE_LENGTH}d" "$file" + ;; + # LaTeX files (or TeX files in general) have a different license, use the + # $LATEX_TEMPLATE_LINE_LENGTH variable. + "tex") + sed --in-place "1,${LATEX_TEMPLATE_LINE_LENGTH}d" "$file" + ;; + # normal '/* ... */' like comments (these are $TEMPLATE_LINE_LENGTH + 2 lines long) + "c" | "h" | "md" | "rs" | "html" | "svg" | "drawio" | "tri") + length="$((TEMPLATE_LINE_LENGTH + 2))" + sed --in-place "1,${length}d;" "$file" + ;; + # alejandra (the nix formatter) removes the blank line after the comment, + # thus only $TEMPLATE_LINE_LENGTH - 1 lines + "nix") + length="$((TEMPLATE_LINE_LENGTH - 1))" + sed --in-place "1,${length}d;" "$file" + ;; + # Shell needs a shebang on the first line, only after the first line can we + # remove the $TEMPLATE_LINE_LENGTH lines + "sh") + sed --in-place "2,${TEMPLATE_LINE_LENGTH}d;" "$file" + licensure --in-place "$file" + + TEMPLATE_LINE_LENGTH_NEW="$(($(yq --raw-output '.licenses | map(.template) | join("")' "$PROJECT_ROOT/.licensure.yml" | wc -l) + $(yq '.comments | last | .commenter.trailing_lines' "$PROJECT_ROOT/.licensure.yml")))" + + # delete the current shebang + to="$((TEMPLATE_LINE_LENGTH_NEW + 1))" + sed --in-place "${TEMPLATE_LINE_LENGTH_NEW},${to}d;" "$file" + + # add a new one + sed --in-place "1i#! /usr/bin/env sh" "$file" + ;; + *) + echo "File '$file' with extension '$extension' is not know yet, please add it!" + ;; + esac +} + +list() { + echo "$extension -> $file" +} + +if [ -f "$1" ]; then + file="$(realpath "$1")" + filename="$(basename -- "$file")" + extension="${filename##*.}" + filename="${filename%.*}" + + if [ -n "$DRY_RUN" ]; then + list "$extension" "$file" + else + remove "$extension" "$file" + fi +else + fd --type file --hidden . | while read -r file; do + if grep --quiet 'SPDX-License-Identifier' "$file"; then + filename="$(basename -- "$file")" + extension="${filename##*.}" + filename="${filename%.*}" + + if [ -n "$DRY_RUN" ]; then + list "$extension" "$file" + else + remove "$extension" "$file" + fi + fi + done + + if [ -z "$DRY_RUN" ]; then + licensure --in-place --project + nix fmt + fi +fi diff --git a/build/c/scripts/valgrind_test.sh b/build/c/scripts/valgrind_test.sh new file mode 100755 index 0000000..4d0d964 --- /dev/null +++ b/build/c/scripts/valgrind_test.sh @@ -0,0 +1,29 @@ +#! /usr/bin/env sh + +for arg in "$@"; do + case "$arg" in + "--help" | "-h") + cat <<-EOF + valgrind_test.sh [BINARY_NAME] [ARGS_FOR_BINARY..] +EOF + exit 0 + ;; + esac +done + +binary_name="${1-main}" +[ -n "$1" ] && shift 1 + +log_file="$(git rev-parse --show-toplevel)/target/valgrind_out.report" +mkdir --parents "$(dirname "$log_file")" + +CFLAGS="-ggdb3" make "$binary_name" + +valgrind --leak-check=full \ + --show-leak-kinds=all \ + --show-error-list=yes \ + --track-origins=yes \ + --log-file="$log_file" \ + "./target/$binary_name" "$@" + +cat "$log_file" -- cgit 1.4.1