diff options
author | Domen Kožar <domen@enlambda.com> | 2017-06-19 11:39:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-19 11:39:17 +0200 |
commit | 55616ad9388dd1f2a7c591d7d4a0400f49c30e78 (patch) | |
tree | 8679d05da98c6e3d0a0d0364ac466d12bc2d1804 /pkgs | |
parent | 66fdb94f5011a2087e237451555c64767c09357e (diff) | |
parent | 5413bfa8e37d8fe7b3f5a80786d7ac6712e87089 (diff) | |
download | nixpkgs-55616ad9388dd1f2a7c591d7d4a0400f49c30e78.tar nixpkgs-55616ad9388dd1f2a7c591d7d4a0400f49c30e78.tar.gz nixpkgs-55616ad9388dd1f2a7c591d7d4a0400f49c30e78.tar.bz2 nixpkgs-55616ad9388dd1f2a7c591d7d4a0400f49c30e78.tar.lz nixpkgs-55616ad9388dd1f2a7c591d7d4a0400f49c30e78.tar.xz nixpkgs-55616ad9388dd1f2a7c591d7d4a0400f49c30e78.tar.zst nixpkgs-55616ad9388dd1f2a7c591d7d4a0400f49c30e78.zip |
Merge pull request #26554 from orivej/rsp
Speed up parsing @args.rsp compiler arguments
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/build-support/cc-wrapper/utils.sh | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/pkgs/build-support/cc-wrapper/utils.sh b/pkgs/build-support/cc-wrapper/utils.sh index d17930e8ab5..8cefc47816f 100644 --- a/pkgs/build-support/cc-wrapper/utils.sh +++ b/pkgs/build-support/cc-wrapper/utils.sh @@ -28,17 +28,16 @@ badPath() { # States: 0 - outside, 1/2 - unquoted arg/slash, 3/4 - 'arg'/slash, 5/6 - "arg"/slash. # State transitions: rspT=(01235 01235 11111 33413 33333 55651 55555) -# Push char on transition: -rspC[01]=1 rspC[11]=1 rspC[21]=1 rspC[33]=1 rspC[43]=1 rspC[55]=1 rspC[65]=1 +# Push (a) arg or (c) char on transition: +rspP[10]=a rspP[01]=c rspP[11]=c rspP[21]=c rspP[33]=c rspP[43]=c rspP[55]=c rspP[65]=c rspParse() { rsp=() - local s="$1" local state=0 local arg='' + local c - for (( i=0; i<${#s}; i++ )); do - local c="${s:$i:1}" + while read -r -N1 c; do local cls=1 case "$c" in ' ' | $'\t' | $'\r' | $'\n') cls=0 ;; @@ -48,12 +47,10 @@ rspParse() { esac local nextstates="${rspT[$state]}" local nextstate="${nextstates:$cls:1}" - if [ "${rspC[$state$nextstate]}" ]; then - arg+="$c" - elif [ "$state$nextstate" = "10" ]; then - rsp+=("$arg") - arg='' - fi + case "${rspP[$state$nextstate]}" in + 'c') arg+="$c" ;; + 'a') rsp+=("$arg"); arg='' ;; + esac state="$nextstate" done @@ -68,7 +65,7 @@ expandResponseParams() { local p="$1" shift if [ "${p:0:1}" = '@' -a -e "${p:1}" ]; then - rspParse "$(<"${p:1}")" + rspParse <"${p:1}" set -- "${rsp[@]}" "$@" else params+=("$p") |