[Fuego] [PATCH] Optimiz the assert_has_program code.

Wang Mingyu wangmy at cn.fujitsu.com
Tue Aug 13 16:45:22 UTC 2019


It is faster to check the prgoram or file on the target.

Usage:
before:
    assert_has_program AAA
    assert_has_program BBB

after:
    assert_has_program "AAA BBB"

Signed-off-by: Wang Mingyu <wangmy at cn.fujitsu.com>
---
 scripts/functions.sh  | 74 ++++++++++++++++++++++++-------------------
 scripts/need_check.sh | 13 ++------
 2 files changed, 45 insertions(+), 42 deletions(-)

diff --git a/scripts/functions.sh b/scripts/functions.sh
index 0fa80b8..d100db3 100755
--- a/scripts/functions.sh
+++ b/scripts/functions.sh
@@ -977,37 +977,48 @@ function hd_test_clean_umount() {
 
 # check for a program or file on the target, and set a variable if it's present
 # $1 - file, dir or program on target
-# $2 - variable to set during the build
-# $3 - (optional) set of paths to look for on target
-#      if $3 is not specified, a find is done from the root
-#      this requires the 'find' command on the target
-function is_on_target {
-    # FIXTHIS: race condition
-    tmpfile=$(mktemp /tmp/found_loc.XXXXXX)
-    cmd "touch $tmpfile"
-    if [ -z "$3" ] ; then
-        safe_cmd "find / -name \"$1\" | head -n 1 >$tmpfile"
-    else
-        # split search path on colon
-        for d in $(echo "$3" | tr ":" "\n") ; do
-            # execute a command on the target to detect $d/$1
-            cmd "if [ -z \"\$(cat $tmpfile)\" -a -e \"$d/$1\" ] ; then echo \"$d/$1\" >$tmpfile ; fi"
-        done
-    fi
-    get $tmpfile $tmpfile
-    LOCATION=$(cat $tmpfile)
-    export $2=$LOCATION
-    cmd "rm $tmpfile"
-    rm -f $tmpfile # -f for tests running on the host
+# $2 - tmpfile to save the detect result
+function set_cmd_str {
+   tmpfile=$2
+   cmd_str="touch $tmpfile
+         for prg in \$(echo $1 | tr \" \" \"\\n\")
+         do
+            # execute command type on the target to detect \$prg
+            if type -P \$prg
+            then
+                echo \"\$d/\$prg\" >$tmpfile
+            fi
+            if [ ! -s $tmpfile ]
+            then
+                find / -name \"\$prg\" | head -n 1 >$tmpfile
+            fi
+            if [ ! -s $tmpfile ]
+            then
+                echo \"\$prg\" >$tmpfile
+                break;
+            else
+                > $tmpfile
+            fi
+         done"
 }
 
-# check for a program or file on a directory listed on the PATH on the target,
-# and set a variable if it's present
+# check for a program or file on the target, and set a variable if it's present
 # $1 - file, dir or program on target
 # $2 - variable to set during the build
+# $3 - name of program that is not found on the target
 function is_on_target_path {
-    TARGET_PATH=$(cmd "echo \$PATH")
-    is_on_target $1 $2 $TARGET_PATH
+    tmpfile=$(mktemp /tmp/found_loc.XXXXXX)
+    set_cmd_str "$1" $tmpfile
+    cmd "$cmd_str"
+    get $tmpfile $tmpfile
+    if [ -s $tmpfile ] ; then
+        prg=$(cat $tmpfile)
+        upName=${prg^^}
+        export $2=PROGRAM_${upName//[-,.]/_}
+        export $3=$prg
+    fi
+    cmd "rm $tmpfile"
+    rm -f $tmpfile # -f for tests running on the host
 }
 
 # check for a library on the SDK, and set a variable if it's present
@@ -1036,13 +1047,12 @@ function is_on_sdk {
 
 # check for a program or file on the target, and send message if the program or file is missing
 # $1 has the program that is required on the target board
-# this has the side effect of defining PROGRAM_$1 (uppercased)
-# with the value as the directory where $1 is found on the board.
 function assert_has_program {
-   upName=${1^^}
-   progVar=PROGRAM_${upName//[-,.]/_}
-   is_on_target_path $1 ${progVar}
-   assert_define ${progVar} "Missing '$1' program on target board"
+   is_on_target_path "$1" prog_path prg
+   if [ ! -z "$prog_path" ]
+   then
+       assert_define ${prog_path} "Missing '$prg' program on target board"
+   fi
 }
 
 # check for a module on the target, and abort if it is missing
diff --git a/scripts/need_check.sh b/scripts/need_check.sh
index c9bbb75..5912ee1 100755
--- a/scripts/need_check.sh
+++ b/scripts/need_check.sh
@@ -319,18 +319,11 @@ function check_root {
 # check if those specified commands exist on board
 # $1 has single string with a list of command entries to check for
 function check_program {
-  # split $1 on whitespace, without file globbing
-  set -f
-  arg_array=($1)
-  set +f
-
-  for prg in "${arg_array[@]}" ; do
-    is_on_target_path $prg prg_path
-    if [ -z "$prg_path" ] ; then
-      echo -e "\n\nABORTED: Expected command \"$prg\" on the target, but it's not there!"
+    is_on_target_path "$1" prg_path prg
+    if [ ! -z "$prg_path" ] ; then
+      echo -e "\n\nABORTED: Expected command \"$prg\" is on the target, but it's not there!"
       return 1
     fi
-  done
 
   # return OK if all necessary commands exist on the target
   return 0
-- 
2.17.1





More information about the Fuego mailing list