summary refs log tree commit diff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authorTobias Bergkvist <tobias@bergkv.ist>2021-12-07 17:42:54 +0100
committerTobias Bergkvist <tobias@bergkv.ist>2021-12-07 17:42:54 +0100
commit7cf1aa102a513ad7df9c6e6c0e57254b2f44efaf (patch)
tree2f11446772a1dffa8f650924bcebb26c6399914c /pkgs/build-support
parent2b5a2d4a8e8e41a283767088443845913c3ab340 (diff)
downloadnixpkgs-7cf1aa102a513ad7df9c6e6c0e57254b2f44efaf.tar
nixpkgs-7cf1aa102a513ad7df9c6e6c0e57254b2f44efaf.tar.gz
nixpkgs-7cf1aa102a513ad7df9c6e6c0e57254b2f44efaf.tar.bz2
nixpkgs-7cf1aa102a513ad7df9c6e6c0e57254b2f44efaf.tar.lz
nixpkgs-7cf1aa102a513ad7df9c6e6c0e57254b2f44efaf.tar.xz
nixpkgs-7cf1aa102a513ad7df9c6e6c0e57254b2f44efaf.tar.zst
nixpkgs-7cf1aa102a513ad7df9c6e6c0e57254b2f44efaf.zip
Separate out indentation responsibility to indent4 in makeCWrapper using awk.
Generated code no longer needs to worry about its own indent level in the output.
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/setup-hooks/make-binary-wrapper.sh66
1 files changed, 36 insertions, 30 deletions
diff --git a/pkgs/build-support/setup-hooks/make-binary-wrapper.sh b/pkgs/build-support/setup-hooks/make-binary-wrapper.sh
index 5080d0065aa..ec60f9ba722 100644
--- a/pkgs/build-support/setup-hooks/make-binary-wrapper.sh
+++ b/pkgs/build-support/setup-hooks/make-binary-wrapper.sh
@@ -76,82 +76,82 @@ makeCWrapper() {
         case $p in
             --set)
                 cmd=$(setEnv "${params[n + 1]}" "${params[n + 2]}")
-                main="$main    $cmd"$'\n'
+                main="$main$cmd"$'\n'
                 n=$((n + 2))
-                [ $n -ge "$length" ] && main="$main    #error makeCWrapper: $p takes 2 arguments"$'\n'
+                [ $n -ge "$length" ] && main="$main#error makeCWrapper: $p takes 2 arguments"$'\n'
             ;;
             --set-default)
                 cmd=$(setDefaultEnv "${params[n + 1]}" "${params[n + 2]}")
-                main="$main    $cmd"$'\n'
+                main="$main$cmd"$'\n'
                 uses_stdio=1
                 uses_assert_success=1
                 n=$((n + 2))
-                [ $n -ge "$length" ] && main="$main    #error makeCWrapper: $p takes 2 arguments"$'\n'
+                [ $n -ge "$length" ] && main="$main#error makeCWrapper: $p takes 2 arguments"$'\n'
             ;;
             --unset)
                 cmd=$(unsetEnv "${params[n + 1]}")
-                main="$main    $cmd"$'\n'
+                main="$main$cmd"$'\n'
                 uses_stdio=1
                 uses_assert_success=1
                 n=$((n + 1))
-                [ $n -ge "$length" ] && main="$main    #error makeCWrapper: $p takes 1 argument"$'\n'
+                [ $n -ge "$length" ] && main="$main#error makeCWrapper: $p takes 1 argument"$'\n'
             ;;
             --prefix)
                 cmd=$(setEnvPrefix "${params[n + 1]}" "${params[n + 2]}" "${params[n + 3]}")
-                main="$main    $cmd"$'\n'
+                main="$main$cmd"$'\n'
                 uses_prefix=1
                 uses_asprintf=1
                 uses_stdio=1
                 uses_assert_success=1
                 uses_assert=1
                 n=$((n + 3))
-                [ $n -ge "$length" ] && main="$main    #error makeCWrapper: $p takes 3 arguments"$'\n'
+                [ $n -ge "$length" ] && main="$main#error makeCWrapper: $p takes 3 arguments"$'\n'
             ;;
             --suffix)
                 cmd=$(setEnvSuffix "${params[n + 1]}" "${params[n + 2]}" "${params[n + 3]}")
-                main="$main    $cmd"$'\n'
+                main="$main$cmd"$'\n'
                 uses_suffix=1
                 uses_asprintf=1
                 uses_stdio=1
                 uses_assert_success=1
                 uses_assert=1
                 n=$((n + 3))
-                [ $n -ge "$length" ] && main="$main    #error makeCWrapper: $p takes 3 arguments"$'\n'
+                [ $n -ge "$length" ] && main="$main#error makeCWrapper: $p takes 3 arguments"$'\n'
             ;;
             --chdir)
                 cmd=$(changeDir "${params[n + 1]}")
-                main="$main    $cmd"$'\n'
+                main="$main$cmd"$'\n'
                 uses_stdio=1
                 uses_assert_success=1
                 n=$((n + 1))
-                [ $n -ge "$length" ] && main="$main    #error makeCWrapper: $p takes 1 argument"$'\n'
+                [ $n -ge "$length" ] && main="$main#error makeCWrapper: $p takes 1 argument"$'\n'
             ;;
             --add-flags)
                 flags="${params[n + 1]}"
                 flagsBefore="$flagsBefore $flags"
                 uses_assert=1
                 n=$((n + 1))
-                [ $n -ge "$length" ] && main="$main    #error makeCWrapper: $p takes 1 argument"$'\n'
+                [ $n -ge "$length" ] && main="$main#error makeCWrapper: $p takes 1 argument"$'\n'
             ;;
             --argv0)
                 argv0=$(escapeStringLiteral "${params[n + 1]}")
                 inherit_argv0=
                 n=$((n + 1))
-                [ $n -ge "$length" ] && main="$main    #error makeCWrapper: $p takes 1 argument"$'\n'
+                [ $n -ge "$length" ] && main="$main#error makeCWrapper: $p takes 1 argument"$'\n'
             ;;
             --inherit-argv0)
                 # Whichever comes last of --argv0 and --inherit-argv0 wins
                 inherit_argv0=1
             ;;
             *) # Using an error macro, we will make sure the compiler gives an understandable error message
-                main="$main    #error makeCWrapper: Uknown argument ${p}"$'\n'
+                main="$main#error makeCWrapper: Uknown argument ${p}"$'\n'
             ;;
         esac
     done
     # shellcheck disable=SC2086
     [ -z "$flagsBefore" ] || main="$main"${main:+$'\n'}$(addFlags $flagsBefore)$'\n'$'\n'
-    [ -z "$inherit_argv0" ] && main="$main    argv[0] = \"${argv0:-${executable}}\";"$'\n'
-    main="$main    return execv(\"${executable}\", argv);"$'\n'
+    [ -z "$inherit_argv0" ] && main="${main}argv[0] = \"${argv0:-${executable}}\";"$'\n'
+    main="${main}return execv(\"${executable}\", argv);"$'\n'
 
     [ -z "$uses_asprintf" ] || printf '%s\n' "#define _GNU_SOURCE         /* See feature_test_macros(7) */"
     printf '%s\n' "#include <unistd.h>"
@@ -162,8 +162,8 @@ makeCWrapper() {
     [ -z "$uses_prefix" ] || printf '\n%s\n' "$(setEnvPrefixFn)"
     [ -z "$uses_suffix" ] || printf '\n%s\n' "$(setEnvSuffixFn)"
     printf '\n%s' "int main(int argc, char **argv) {"
-    printf '\n%s' "$main"
-    printf '%s\n' "}"
+    printf '\n%s' "$(indent4 "$main")"
+    printf '\n%s\n' "}"
 }
 
 addFlags() {
@@ -172,17 +172,17 @@ addFlags() {
     flags=("$@")
     for ((n = 0; n < ${#flags[*]}; n += 1)); do
         flag=$(escapeStringLiteral "${flags[$n]}")
-        result="$result    ${var}[$((n+1))] = \"$flag\";"$'\n'
+        result="$result${var}[$((n+1))] = \"$flag\";"$'\n'
     done
-    printf '    %s\n' "char **$var = calloc($((n+1)) + argc, sizeof(*$var));"
-    printf '    %s\n' "assert($var != NULL);"
-    printf '    %s\n' "${var}[0] = argv[0];"
+    printf '%s\n' "char **$var = calloc($((n+1)) + argc, sizeof(*$var));"
+    printf '%s\n' "assert($var != NULL);"
+    printf '%s\n' "${var}[0] = argv[0];"
     printf '%s' "$result"
-    printf '    %s\n' "for (int i = 1; i < argc; ++i) {"
-    printf '    %s\n' "    ${var}[$n + i] = argv[i];"
-    printf '    %s\n' "}"
-    printf '    %s\n' "${var}[$n + argc] = NULL;"
-    printf '    %s\n' "argv = $var;"
+    printf '%s\n' "for (int i = 1; i < argc; ++i) {"
+    printf '%s\n' "    ${var}[$n + i] = argv[i];"
+    printf '%s\n' "}"
+    printf '%s\n' "${var}[$n + argc] = NULL;"
+    printf '%s\n' "argv = $var;"
 }
 
 # chdir DIR
@@ -249,10 +249,16 @@ escapeStringLiteral() {
     printf '%s' "$result"
 }
 
+# Indents every non-empty line by 4 spaces. To avoid trailing whitespace, we don't indent empty lines
+# indent4 TEXT_BLOCK
+indent4() {
+    printf '%s' "$1" | awk '{ if ($0 != "") { print "    "$0 } else { print $0 }}'
+}
+
 assertValidEnvName() {
     case "$1" in
-        *=*) printf '\n%s\n' "    #error Illegal environment variable name \`$1\` (cannot contain \`=\`)";;
-        "")  printf '\n%s\n' "    #error Environment variable name can't be empty.";;
+        *=*) printf '\n%s\n' "#error Illegal environment variable name \`$1\` (cannot contain \`=\`)";;
+        "")  printf '\n%s\n' "#error Environment variable name can't be empty.";;
     esac
 }