mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-26 16:53:49 +01:00 
			
		
		
		
	The BuildEnv utility is sourced (executed by the user's interactive shell) when the user sets up the build session. Some users like to set -C (noclobber) for some additional safety in their shells, which trips up BuildEnv. Update the redirection operator so that it overrides noclobber. Cc: Liming Gao <liming.gao@intel.com> Cc: Thomas Huth <thuth@redhat.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Thomas Huth <thuth@redhat.com>
		
			
				
	
	
		
			276 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			276 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| ## @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 - 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.
 | |
| #
 | |
| 
 | |
| SetWorkspace() {
 | |
| 
 | |
|   #
 | |
|   # If WORKSPACE is already set, then we can return right now
 | |
|   #
 | |
|   if [ -n "$WORKSPACE" ]
 | |
|   then
 | |
|     return 0
 | |
|   fi
 | |
| 
 | |
|   #
 | |
|   # 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
 | |
| 
 | |
| }
 | |
| 
 | |
| #
 | |
| # Run the main function
 | |
| #
 | |
| ScriptMain
 | |
| 
 |