summary refs log tree commit diff
path: root/pkgs/build-support/setup-hooks
diff options
context:
space:
mode:
authorTobias Bergkvist <tobias@bergkv.ist>2021-08-26 14:36:30 +0200
committerTobias Bergkvist <tobias@bergkv.ist>2021-08-26 14:36:30 +0200
commitb58c857bfbce8af9b5c100ea2f483c5a228f35d6 (patch)
tree47836fe7bfe77121a85681039f9b72b738f89430 /pkgs/build-support/setup-hooks
parentdcba4171d4a7150cbaf90cae7a3e12a8381067a7 (diff)
downloadnixpkgs-b58c857bfbce8af9b5c100ea2f483c5a228f35d6.tar
nixpkgs-b58c857bfbce8af9b5c100ea2f483c5a228f35d6.tar.gz
nixpkgs-b58c857bfbce8af9b5c100ea2f483c5a228f35d6.tar.bz2
nixpkgs-b58c857bfbce8af9b5c100ea2f483c5a228f35d6.tar.lz
nixpkgs-b58c857bfbce8af9b5c100ea2f483c5a228f35d6.tar.xz
nixpkgs-b58c857bfbce8af9b5c100ea2f483c5a228f35d6.tar.zst
nixpkgs-b58c857bfbce8af9b5c100ea2f483c5a228f35d6.zip
Switch to using strlen in concat3Fn. Make sure uses-variables are local to improve purity of makeCWrapper. Refactor
Diffstat (limited to 'pkgs/build-support/setup-hooks')
-rw-r--r--pkgs/build-support/setup-hooks/make-binary-wrapper.sh18
1 files changed, 8 insertions, 10 deletions
diff --git a/pkgs/build-support/setup-hooks/make-binary-wrapper.sh b/pkgs/build-support/setup-hooks/make-binary-wrapper.sh
index f19edd483cf..0c72508520a 100644
--- a/pkgs/build-support/setup-hooks/make-binary-wrapper.sh
+++ b/pkgs/build-support/setup-hooks/make-binary-wrapper.sh
@@ -36,6 +36,7 @@ makeDocumentedCWrapper() {
 # ARGS: same as makeBinaryWrapper
 makeCWrapper() {
     local argv0 n params cmd main flagsBefore flags
+    local uses_prefix uses_suffix uses_concat3
     local executable=$(escapeStringLiteral "$1")
     local params=("$@")
 
@@ -77,22 +78,19 @@ makeCWrapper() {
             printf "%s\n" "    #error makeCWrapper did not understand argument ${p}"
         fi
     done
-    [ -z ${flagsBefore+"1"} ] || {
-        flagsBefore=("$flagsBefore")
-        main="$main"$'\n'$(addFlags $flagsBefore)$'\n'$'\n'
-    }
-
+    [ -z "$flagsBefore" ] || main="$main"${main:+$'\n'}$(addFlags $flagsBefore)$'\n'$'\n'
     main="$main    argv[0] = \"${argv0:-${executable}}\";"$'\n'
     main="$main    return execv(\"${executable}\", argv);"$'\n'
 
     printf "%s\n" "#include <unistd.h>"
     printf "%s\n" "#include <stdlib.h>"
+    [ -z "$uses_concat3" ] || printf "%s\n" "#include <string.h>"
     [ -z "$uses_concat3" ] || printf "\n%s\n" "$(concat3Fn)"
     [ -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" "}"
+    printf "%s\n" "}"
 }
 
 addFlags() {
@@ -100,7 +98,7 @@ addFlags() {
     local var="argv_tmp"
     flags=("$@")
     for ((n = 0; n < ${#flags[*]}; n += 1)); do
-        flag=$(escapeStringLiteral "${flags[((n))]}")
+        flag=$(escapeStringLiteral "${flags[$n]}")
         result="$result    $var[$((n+1))] = \"$flag\";"$'\n'
     done
     printf "    %s\n" "char **$var = malloc(sizeof(*$var) * ($((n+1)) + argc));"
@@ -169,9 +167,9 @@ escapeStringLiteral() {
 
 concat3Fn() {
     printf "%s\n" 'char *concat3(char *x, char *y, char *z) {'
-    printf "%s\n" '    int xn = 0; while(x[++xn]);'
-    printf "%s\n" '    int yn = 0; while(y[++yn]);'
-    printf "%s\n" '    int zn = 0; while(z[++zn]);'
+    printf "%s\n" '    int xn = strlen(x);'
+    printf "%s\n" '    int yn = strlen(y);'
+    printf "%s\n" '    int zn = strlen(z);'
     printf "%s\n" '    char *res = malloc(sizeof(*res)*(xn + yn + zn + 1));'
     printf "%s\n" '    for (int i = 0; i < xn; ++i) res[i] = x[i];'
     printf "%s\n" '    for (int i = 0; i < yn; ++i) res[xn+i] = y[i];'