Revision: 19694
          http://sourceforge.net/p/edk2/code/19694
Author:   yzhu52
Date:     2016-01-20 05:09:06 +0000 (Wed, 20 Jan 2016)
Log Message:
-----------
BaseTools: Improve shell wrappers for Python build commands

- Use `python2` executable if it exists, to avoid breakage on systems (such as
  Arch Linux) where `python` is Python 3.
- Quote all references to `$0`, for safety when located in a directory
  containing spaces in its name.
- Use the `exec` shell command to avoid leaving the shell wrapper in the
  process table when invoking the actual build tool.
- Use `"$@"` rather than `$*` to pass arguments through directly rather than
  concatenating to a string, and then string-splitting and glob-expanding its
  contents.
- Use `$BASH_SOURCE` in preference to `$0` (which is only guaranteed to be
  process name, *not* source path).

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Charles Duffy <[email protected]>
Reviewed-by: Yonghong Zhu <[email protected]>

Modified Paths:
--------------
    trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/Ecc
    trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/GenDepex
    trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/GenFds
    trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/TargetTool
    trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/Trim
    trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/build
    trunk/edk2/BaseTools/BinWrappers/PosixLike/BPDG
    trunk/edk2/BaseTools/BinWrappers/PosixLike/Ecc
    trunk/edk2/BaseTools/BinWrappers/PosixLike/GenDepex
    trunk/edk2/BaseTools/BinWrappers/PosixLike/GenFds
    trunk/edk2/BaseTools/BinWrappers/PosixLike/GenPatchPcdTable
    trunk/edk2/BaseTools/BinWrappers/PosixLike/PatchPcdValue
    trunk/edk2/BaseTools/BinWrappers/PosixLike/TargetTool
    trunk/edk2/BaseTools/BinWrappers/PosixLike/Trim
    trunk/edk2/BaseTools/BinWrappers/PosixLike/UPT
    trunk/edk2/BaseTools/BinWrappers/PosixLike/build

Modified: trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/Ecc
===================================================================
--- trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/Ecc     2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/Ecc     2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/GenDepex
===================================================================
--- trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/GenDepex        2016-01-20 
04:38:14 UTC (rev 19693)
+++ trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/GenDepex        2016-01-20 
05:09:06 UTC (rev 19694)
@@ -1,3 +1,14 @@
 #!/usr/bin/env bash
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/AutoGen/`basename $0`.py $*
+#python `dirname $0`/RunToolFromSource.py `basename $0` $*
+
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/GenFds
===================================================================
--- trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/GenFds  2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/GenFds  2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/TargetTool
===================================================================
--- trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/TargetTool      2016-01-20 
04:38:14 UTC (rev 19693)
+++ trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/TargetTool      2016-01-20 
05:09:06 UTC (rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/Trim
===================================================================
--- trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/Trim    2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/Trim    2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+exe=$(basename "$full_cmd")
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$exe/$exe.py" "$@"

Modified: trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/build
===================================================================
--- trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/build   2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/Bin/CYGWIN_NT-5.1-i686/build   2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/BPDG
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/BPDG     2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/BPDG     2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/Ecc
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/Ecc      2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/Ecc      2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/GenDepex
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/GenDepex 2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/GenDepex 2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,3 +1,14 @@
 #!/usr/bin/env bash
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/AutoGen/`basename $0`.py $*
+#python `dirname $0`/RunToolFromSource.py `basename $0` $*
+
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/GenFds
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/GenFds   2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/GenFds   2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/GenPatchPcdTable
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/GenPatchPcdTable 2016-01-20 
04:38:14 UTC (rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/GenPatchPcdTable 2016-01-20 
05:09:06 UTC (rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/PatchPcdValue
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/PatchPcdValue    2016-01-20 
04:38:14 UTC (rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/PatchPcdValue    2016-01-20 
05:09:06 UTC (rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/TargetTool
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/TargetTool       2016-01-20 
04:38:14 UTC (rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/TargetTool       2016-01-20 
05:09:06 UTC (rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/Trim
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/Trim     2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/Trim     2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+exe=$(basename "$full_cmd")
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$exe/$exe.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/UPT
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/UPT      2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/UPT      2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"

Modified: trunk/edk2/BaseTools/BinWrappers/PosixLike/build
===================================================================
--- trunk/edk2/BaseTools/BinWrappers/PosixLike/build    2016-01-20 04:38:14 UTC 
(rev 19693)
+++ trunk/edk2/BaseTools/BinWrappers/PosixLike/build    2016-01-20 05:09:06 UTC 
(rev 19694)
@@ -1,5 +1,14 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
-PYTHONPATH="`dirname $0`/../../Source/Python" \
-    python "`dirname $0`/../../Source/Python"/`basename $0`/`basename $0`.py $*
 
+# If a python2 command is available, use it in preference to python
+if command -v python2 >/dev/null 2>&1; then
+    python_exe=python2
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a 
discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+cmd=${full_cmd##*/}
+
+export PYTHONPATH="$dir/../../Source/Python"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$cmd.py" "$@"


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to