]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/BuildEnv
BaseTools/Capsule: Do not support -o with --dump-info
[mirror_edk2.git] / BaseTools / BuildEnv
old mode 100644 (file)
new mode 100755 (executable)
index fcca6c9..ff0c511
+## @file
+# Setup the environment for unix-like systems running a bash-like shell.
+# This file must be "sourced" not merely executed. For example: ". edksetup.sh"
 #
-# Copyright (c) 2006 - 2007, Intel Corporation
-# All rights reserved. This program and the accompanying materials
+# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
+# This program and the accompanying materials
 # are licensed and made available under the terms and conditions of the BSD License
 # which accompanies this distribution.  The full text of the license may be found at
 # http://opensource.org/licenses/bsd-license.php
 # 
 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
 
-# Setup the environment for unix-like systems running a bash-like shell.
-# This file must be "sourced" not merely executed. For example: ". edksetup.sh"
+SetWorkspace() {
 
-if [ ! -e ./Tools/BaseTools/BuildEnv.py ]
-then
-  echo Run this script from the base of your tree.  For example:
-  echo "  cd /Path/To/Edk/Root"
-  echo "  . Tools/BuildEnv"
-  return
-fi
+  #
+  # If WORKSPACE is already set, then we can return right now
+  #
+  if [ -n "$WORKSPACE" ]
+  then
+    return 0
+  fi
 
-#
-# First, we run a python tool that will ask the user to configure
-# the environment in a (relatively) user friendly manner.
-#
-python ./Tools/BaseTools/BuildEnv.py $*
+  #
+  # Set $WORKSPACE
+  #
+  export WORKSPACE=`pwd`
+
+  return 0
+
+}
+
+RestorePreviousConfiguration() {
+  #
+  # Restore previous configuration
+  #
+  if [ -z "$CONF_PATH" ]
+  then
+    export CONF_PATH=$WORKSPACE/Conf
+    if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
+    then
+      PATH_LIST=${PACKAGES_PATH//:/ }
+      for DIR in $PATH_LIST
+      do
+        if [ -d $DIR/Conf ]
+        then
+          export CONF_PATH=$DIR/Conf
+          break
+        fi
+      done
+    fi
+  fi
+  
+  PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
+  if [ -e $PREVIOUS_CONF_FILE ]
+  then
+    echo Loading previous configuration from $PREVIOUS_CONF_FILE
+    . $PREVIOUS_CONF_FILE
+  fi
+}
+
+GenerateShellCodeToSetVariable() {
+  VARIABLE=$1
+  OUTPUT_FILE=$2
+  VAR_VALUE="echo \${${VARIABLE}}"
+  VAR_VALUE=`eval $VAR_VALUE`
+  echo "if [ -z \"\$${VARIABLE}\" ]"             >> $OUTPUT_FILE
+  echo "then"                                    >> $OUTPUT_FILE
+  echo "  export ${VARIABLE}=${VAR_VALUE}"       >> $OUTPUT_FILE
+  echo "fi"                                      >> $OUTPUT_FILE
+}
+
+GenerateShellCodeToUpdatePath() {
+  OUTPUT_FILE=$1
+  echo "if [ -e $EDK_TOOLS_PATH_BIN ]"                        >> $OUTPUT_FILE
+  echo "then"                                                 >> $OUTPUT_FILE
+  echo "  if [ "\${PATH/$EDK_TOOLS_PATH_BIN/}" == "\$PATH" ]" >> $OUTPUT_FILE
+  echo "  then"                                               >> $OUTPUT_FILE
+  echo "    export PATH=$EDK_TOOLS_PATH_BIN:\$PATH"           >> $OUTPUT_FILE
+  echo "  fi"                                                 >> $OUTPUT_FILE
+  echo "fi"                                                   >> $OUTPUT_FILE
+}
+
+StoreCurrentConfiguration() {
+  #
+  # Write configuration to a shell script to allow for configuration to be
+  # easily reloaded.
+  #
+  OUTPUT_FILE=$CONF_PATH/BuildEnv.sh
+  #echo Storing current configuration into $OUTPUT_FILE
+  echo "# Auto-generated by ${BASH_SOURCE[0]}" >| $OUTPUT_FILE
+  GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE
+  GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE
+  GenerateShellCodeToUpdatePath $OUTPUT_FILE
+}
+
+SetEdkToolsPath() {
+
+  #
+  # If EDK_TOOLS_PATH is already set, then we can return right now
+  #
+  if [ -n "$EDK_TOOLS_PATH" ]
+  then
+    return 0
+  fi
+
+  #
+  # Try $CONF_PATH/EdkTools
+  #
+  if [ -e $CONF_PATH/EdkTools ]
+  then
+    export EDK_TOOLS_PATH=$CONF_PATH/EdkTools
+    return 0
+  fi
+
+  #
+  # Try $CONF_PATH/BaseToolsSource
+  #
+  if [ -e $CONF_PATH/BaseToolsSource ]
+  then
+    export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource
+    return 0
+  fi
+
+  #
+  # Try $WORKSPACE/BaseTools
+  #
+  if [ -e $WORKSPACE/BaseTools ]
+  then
+    export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
+    return 0
+  fi
+
+  #
+  # Try $PACKAGES_PATH
+  #
+  if [ -n "$PACKAGES_PATH"]
+  then
+    PATH_LIST=${PACKAGES_PATH//:/ }
+    for DIR in $PATH_LIST
+    do
+      if [ -d $DIR/BaseTools ]
+      then
+        export EDK_TOOLS_PATH=$DIR/BaseTools
+        return 0
+      fi
+    done
+  fi
+
+  echo "Unable to determine EDK_TOOLS_PATH"
+  echo
+  echo "You may need to download the 'BaseTools' from buildtools.tianocore.org."
+  echo "After downloading, either create a symbolic link to the source at"
+  echo "\$WORKSPACE/Conf/BaseToolsSource, or set the EDK_TOOLS_PATH environment"
+  echo "variable."
+
+}
+
+GetBaseToolsBinSubDir() {
+  #
+  # Figure out a uniq directory name from the uname command
+  #
+  UNAME_DIRNAME=`uname -sm`
+  UNAME_DIRNAME=${UNAME_DIRNAME// /-}
+  UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
+  echo $UNAME_DIRNAME
+}
+
+GetEdkToolsPathBinDirectory() {
+  #
+  # Figure out a uniq directory name from the uname command
+  #
+  BIN_SUB_DIR=`GetBaseToolsBinSubDir`
+
+  if [ -e $EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR ]
+  then
+    EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR
+  else
+    EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/Bin/$BIN_SUB_DIR
+  fi
+
+  echo $EDK_TOOLS_PATH_BIN
+}
+
+AddDirToStartOfPath() {
+  DIRNAME=$1
+  PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
+  PATH=${PATH//$DIRNAME:/}
+  PATH=$DIRNAME:$PATH
+  export PATH
+}
+
+AddEdkToolsToPath() {
+
+  #
+  # If EDK_TOOLS_PATH is not set, then we cannot update PATH
+  #
+  if [ -z "$EDK_TOOLS_PATH" ]
+  then
+    return 1
+  fi
+
+  EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
+
+  AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
+  AddDirToStartOfPath $EDK_TOOLS_PATH_BIN
+
+}
+
+CopySingleTemplateFile() {
+
+  SRC_FILENAME=Conf/$1.template
+  DST_FILENAME=$CONF_PATH/$1.txt
+
+  if [ -e $DST_FILENAME ]
+  then
+    [ $RECONFIG != TRUE ] && return
+  fi
+
+  echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
+  echo "     to $DST_FILENAME"
+  SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
+  cp $SRC_FILENAME $DST_FILENAME
+
+}
+
+CopyTemplateFiles() {
+
+  CopySingleTemplateFile build_rule
+  CopySingleTemplateFile tools_def
+  CopySingleTemplateFile target
+
+}
+
+ScriptMain() {
+
+  SetWorkspace
+  if [ -z $WORKSPACE ]
+  then
+    echo "Failure setting WORKSPACE"
+    return 1
+  fi
+
+  RestorePreviousConfiguration
+
+  SetEdkToolsPath
+  if [ -z $EDK_TOOLS_PATH ]
+  then
+    return 1
+  fi
+
+  AddEdkToolsToPath
+  if [ $? -ne 0 ]
+  then
+    echo "Failure adding EDK Tools into PATH!"
+    return 1
+  fi
+
+  StoreCurrentConfiguration
+
+  echo WORKSPACE: $WORKSPACE
+  echo EDK_TOOLS_PATH: $EDK_TOOLS_PATH
+  echo CONF_PATH: $CONF_PATH
+
+  CopyTemplateFiles
+
+}
 
 #
-# The python tool will write ./Conf/BuildEnv.sh to actually configure
-# the environment.
+# Run the main function
 #
-if [ -e ./Conf/BuildEnv.sh ]
-then
-  . ./Conf/BuildEnv.sh
-else
-  echo There was a failure while trying to setup the environment!
-fi
-
+ScriptMain