multiprocessing.eclass: Fix handling multiple short options (e.g. -kj)
authorMichał Górny <mgorny@gentoo.org>
Tue, 13 Dec 2016 08:57:46 +0000 (09:57 +0100)
committerMichał Górny <mgorny@gentoo.org>
Sun, 18 Dec 2016 13:45:43 +0000 (14:45 +0100)
Improve the regular expressions to handle parameters consisting of
multiple short options (such as -kj). It should be noted that the code
is not perfect but should handle all common (valid) cases; it could e.g.
incorrectly process a short option followed by string arg such as
'-Wfoo.j' although having this in MAKEOPTS is extremely unlikely.

eclass/multiprocessing.eclass
eclass/tests/multiprocessing_makeopts_jobs.sh
eclass/tests/multiprocessing_makeopts_loadavg.sh

index 06e004aa1669eb8acf917a4c25198e5d3e8a0825..5a5fe9acb56ab55a602563c32a851e33573e1375 100644 (file)
@@ -67,8 +67,8 @@ makeopts_jobs() {
        # This assumes the first .* will be more greedy than the second .*
        # since POSIX doesn't specify a non-greedy match (i.e. ".*?").
        local jobs=$(echo " $* " | sed -r -n \
-               -e 's:.*[[:space:]](-j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' \
-               -e 's:.*[[:space:]](-j|--jobs)[[:space:]].*:999:p')
+               -e 's:.*[[:space:]](-[a-z]*j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' \
+               -e 's:.*[[:space:]](-[a-z]*j|--jobs)[[:space:]].*:999:p')
        echo ${jobs:-1}
 }
 
@@ -86,8 +86,8 @@ makeopts_loadavg() {
        # This assumes the first .* will be more greedy than the second .*
        # since POSIX doesn't specify a non-greedy match (i.e. ".*?").
        local lavg=$(echo " $* " | sed -r -n \
-               -e 's:.*[[:space:]](-l|--(load-average|max-load)[=[:space:]])[[:space:]]*([0-9]+|[0-9]+\.[0-9]+).*:\3:p' \
-               -e 's:.*[[:space:]](-l|--(load-average|max-load))[[:space:]].*:999:p')
+               -e 's:.*[[:space:]](-[a-z]*l|--(load-average|max-load)[=[:space:]])[[:space:]]*([0-9]+|[0-9]+\.[0-9]+).*:\3:p' \
+               -e 's:.*[[:space:]](-[a-z]*l|--(load-average|max-load))[[:space:]].*:999:p')
        # Default to 999 since the default is to not use a load limit.
        echo ${lavg:-999}
 }
index 017d491156a0ee7aa9501a9d9f3223cbdd2572d7..a1e43c8b91d7026ff7801ebe50f30a906aecf98d 100755 (executable)
@@ -31,6 +31,9 @@ tests=(
        7 "-l3 --jobs 7 -w"
        4 "-j1 -j 2 --jobs 3 --jobs=4"
        8 "     -j                              8     "
+       999 "-kj"
+       4 "-kj4"
+       5 "-kj 5"
 )
 for (( i = 0; i < ${#tests[@]}; i += 2 )) ; do
        test-makeopts_jobs "${tests[i]}" "${tests[i+1]}"
index 12f9d01f9fcdee1f657aaf705a04ee0f6be2ba3b..276b7e70d3938e6a3493c1d3c9442d5016bf8642 100755 (executable)
@@ -28,6 +28,9 @@ tests=(
        4 "-j1 -j 2 --load-average 3 --load-average=4"
        3 " --max-load=3 -x"
        8 "     -l                              8     "
+       999 "-kl"
+       4 "-kl4"
+       5 "-kl 5"
 )
 for (( i = 0; i < ${#tests[@]}; i += 2 )) ; do
        test-makeopts_loadavg "${tests[i]}" "${tests[i+1]}"