OSDN Git Service

Use shell builtins instead of calling wc/awk/sed. (Fewer forks in build loop.)
authorRob Landley <rob@landley.net>
Wed, 2 Mar 2016 05:39:27 +0000 (23:39 -0600)
committerRob Landley <rob@landley.net>
Wed, 2 Mar 2016 05:39:27 +0000 (23:39 -0600)
Based on suggestions from Nicholas Boichat.

scripts/make.sh

index c73a03d..8be4c3b 100755 (executable)
@@ -254,6 +254,7 @@ fi
 PENDING=
 LFILES=
 DONE=0
+COUNT=0
 for i in $FILES
 do
   # build each generated/obj/*.o file in parallel
@@ -265,16 +266,18 @@ do
   [ "$OUT" -nt "$i" ] && continue
   do_loudly $BUILD -c $i -o $OUT &
   PENDING="$PENDING $!"
+  COUNT=$(($COUNT+1))
 
   # ratelimit to $CPUS many parallel jobs, detecting errors
 
-  while true
+  for j in $PENDING
   do
-    [ $(echo "$PENDING" | wc -w) -lt "$CPUS" ] && break;
+    [ "$COUNT" -lt "$CPUS" ] && break;
 
-    wait $(echo "$PENDING" | awk '{print $1}')
+    wait $j
     DONE=$(($DONE+$?))
-    PENDING="$(echo "$PENDING" | sed 's/^ *[0-9]*//')"
+    COUNT=$(($COUNT-1))
+    PENDING="${PENDING## $j}"
   done
   [ $DONE -ne 0 ] && break
 done