diff options
author | Tobias Bergkvist <tobias@bergkv.ist> | 2021-08-26 14:36:30 +0200 |
---|---|---|
committer | Tobias Bergkvist <tobias@bergkv.ist> | 2021-08-26 14:36:30 +0200 |
commit | b58c857bfbce8af9b5c100ea2f483c5a228f35d6 (patch) | |
tree | 47836fe7bfe77121a85681039f9b72b738f89430 /pkgs/build-support/setup-hooks | |
parent | dcba4171d4a7150cbaf90cae7a3e12a8381067a7 (diff) | |
download | nixpkgs-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.sh | 18 |
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];' |