Since WORKSPACE should point at the EDK2 tree, the right place
to check its validity is edksetup.sh, not BaseTools/BuildEnv.

This patch makes sure that BuildEnv is always invoked with a valid
WORKSPACE.  This lets us show better error messages, and ensures that
we never dirty the user's environment.

BuildEnv will maintain backwards-compatibility and, should the variable
be missing, it will be able to set a default WORKSPACE.  Only the sanity
checks will be of lower quality.

Note that the error message in SetupEnv will never be shown if
SetWorkspace sets WORKSPACE=`pwd`.

Suggested-by: Laszlo Ersek <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Paolo Bonzini <[email protected]>
---
 edksetup.sh | 46 ++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/edksetup.sh b/edksetup.sh
index 5b4d37e..a576d92 100755
--- a/edksetup.sh
+++ b/edksetup.sh
@@ -33,16 +33,57 @@ function HelpMsg()
   return 1
 }
 
-function SetupEnv()
+function SetWorkspace()
 {
+  #
+  # If WORKSPACE is already set, then we can return right now
+  #
   if [ -n "$WORKSPACE" ]
   then
+    return 0
+  fi
+
+  if [ ! ${BASH_SOURCE[0]} -ef ./edksetup.sh ]
+  then
+    echo Run this script from the base of your tree.  For example:
+    echo "  cd /Path/To/Edk/Root"
+    echo "  . edksetup.sh"
+    return 1
+  fi
+
+  #
+  # Check for BaseTools/BuildEnv before dirtying the user's environment.
+  #
+  if [ ! -f BaseTools/BuildEnv ] && [ -z "$EDK_TOOLS_PATH" ]
+  then
+    echo BaseTools not found in your tree, and EDK_TOOLS_PATH is not set.
+    echo Please point EDK_TOOLS_PATH at the directory that contains
+    echo the EDK2 BuildEnv script.
+    return 1
+  fi
+
+  #
+  # Set $WORKSPACE
+  #
+  export WORKSPACE=`pwd`
+
+  return 0
+}
+
+function SetupEnv()
+{
+  if [ -f "$WORKSPACE/BaseTools/BuildEnv" ]
+  then
     . $WORKSPACE/BaseTools/BuildEnv $*
   elif [ -n "$EDK_TOOLS_PATH" ]
   then
     . $EDK_TOOLS_PATH/BuildEnv $*
   else
-    . BaseTools/BuildEnv $*
+    echo BaseTools not found in your tree, and EDK_TOOLS_PATH is not set.
+    echo Please check that WORKSPACE is not set incorrectly in your
+    echo shell, or point EDK_TOOLS_PATH at the directory that contains
+    echo the EDK2 BuildEnv script.
+    return 1
   fi
 }
 
@@ -56,6 +97,7 @@ function SourceEnv()
   then
     HelpMsg
   else
+    SetWorkspace &&
     SetupEnv "$*"
   fi
 }
-- 
1.9.3


------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to