mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-03 21:17:23 +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
 | 
						|
 |