1## @file 2# Setup the environment for unix-like systems running a bash-like shell. 3# This file must be "sourced" not merely executed. For example: ". edksetup.sh" 4# 5# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> 6# This program and the accompanying materials 7# are licensed and made available under the terms and conditions of the BSD License 8# which accompanies this distribution. The full text of the license may be found at 9# http://opensource.org/licenses/bsd-license.php 10# 11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13# 14 15SetWorkspace() { 16 17 # 18 # If WORKSPACE is already set, then we can return right now 19 # 20 if [ -n "$WORKSPACE" ] 21 then 22 return 0 23 fi 24 25 # 26 # Set $WORKSPACE 27 # 28 export WORKSPACE=`pwd` 29 30 return 0 31 32} 33 34RestorePreviousConfiguration() { 35 # 36 # Restore previous configuration 37 # 38 if [ -z "$CONF_PATH" ] 39 then 40 export CONF_PATH=$WORKSPACE/Conf 41 if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ] 42 then 43 PACKAGES_PATH=${PACKAGES_PATH//:/ } 44 for DIR in $PACKAGES_PATH 45 do 46 if [ -d $DIR/Conf ] 47 then 48 export CONF_PATH=$DIR/Conf 49 break 50 fi 51 done 52 fi 53 fi 54 55 PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh 56 if [ -e $PREVIOUS_CONF_FILE ] 57 then 58 echo Loading previous configuration from $PREVIOUS_CONF_FILE 59 . $PREVIOUS_CONF_FILE 60 fi 61} 62 63GenerateShellCodeToSetVariable() { 64 VARIABLE=$1 65 OUTPUT_FILE=$2 66 VAR_VALUE="echo \${${VARIABLE}}" 67 VAR_VALUE=`eval $VAR_VALUE` 68 echo "if [ -z \"\$${VARIABLE}\" ]" >> $OUTPUT_FILE 69 echo "then" >> $OUTPUT_FILE 70 echo " export ${VARIABLE}=${VAR_VALUE}" >> $OUTPUT_FILE 71 echo "fi" >> $OUTPUT_FILE 72} 73 74GenerateShellCodeToUpdatePath() { 75 OUTPUT_FILE=$1 76 echo "if [ -e $EDK_TOOLS_PATH_BIN ]" >> $OUTPUT_FILE 77 echo "then" >> $OUTPUT_FILE 78 echo " if [ "\${PATH/$EDK_TOOLS_PATH_BIN/}" == "\$PATH" ]" >> $OUTPUT_FILE 79 echo " then" >> $OUTPUT_FILE 80 echo " export PATH=$EDK_TOOLS_PATH_BIN:\$PATH" >> $OUTPUT_FILE 81 echo " fi" >> $OUTPUT_FILE 82 echo "fi" >> $OUTPUT_FILE 83} 84 85StoreCurrentConfiguration() { 86 # 87 # Write configuration to a shell script to allow for configuration to be 88 # easily reloaded. 89 # 90 OUTPUT_FILE=$CONF_PATH/BuildEnv.sh 91 #echo Storing current configuration into $OUTPUT_FILE 92 echo "# Auto-generated by ${BASH_SOURCE[0]}" > $OUTPUT_FILE 93 GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE 94 GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE 95 GenerateShellCodeToUpdatePath $OUTPUT_FILE 96} 97 98SetEdkToolsPath() { 99 100 # 101 # If EDK_TOOLS_PATH is already set, then we can return right now 102 # 103 if [ -n "$EDK_TOOLS_PATH" ] 104 then 105 return 0 106 fi 107 108 # 109 # Try $CONF_PATH/EdkTools 110 # 111 if [ -e $CONF_PATH/EdkTools ] 112 then 113 export EDK_TOOLS_PATH=$CONF_PATH/EdkTools 114 return 0 115 fi 116 117 # 118 # Try $CONF_PATH/BaseToolsSource 119 # 120 if [ -e $CONF_PATH/BaseToolsSource ] 121 then 122 export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource 123 return 0 124 fi 125 126 # 127 # Try $WORKSPACE/BaseTools 128 # 129 if [ -e $WORKSPACE/BaseTools ] 130 then 131 export EDK_TOOLS_PATH=$WORKSPACE/BaseTools 132 return 0 133 fi 134 135 # 136 # Try $PACKAGES_PATH 137 # 138 if [ -n "$PACKAGES_PATH"] 139 then 140 PACKAGES_PATH=${PACKAGES_PATH//:/ } 141 for DIR in $PACKAGES_PATH 142 do 143 if [ -d $DIR/BaseTools ] 144 then 145 export EDK_TOOLS_PATH=$DIR/BaseTools 146 return 0 147 fi 148 done 149 fi 150 151 echo "Unable to determine EDK_TOOLS_PATH" 152 echo 153 echo "You may need to download the 'BaseTools' from buildtools.tianocore.org." 154 echo "After downloading, either create a symbolic link to the source at" 155 echo "\$WORKSPACE/Conf/BaseToolsSource, or set the EDK_TOOLS_PATH environment" 156 echo "variable." 157 158} 159 160GetBaseToolsBinSubDir() { 161 # 162 # Figure out a uniq directory name from the uname command 163 # 164 UNAME_DIRNAME=`uname -sm` 165 UNAME_DIRNAME=${UNAME_DIRNAME// /-} 166 UNAME_DIRNAME=${UNAME_DIRNAME//\//-} 167 echo $UNAME_DIRNAME 168} 169 170GetEdkToolsPathBinDirectory() { 171 # 172 # Figure out a uniq directory name from the uname command 173 # 174 BIN_SUB_DIR=`GetBaseToolsBinSubDir` 175 176 if [ -e $EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR ] 177 then 178 EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR 179 else 180 EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/Bin/$BIN_SUB_DIR 181 fi 182 183 echo $EDK_TOOLS_PATH_BIN 184} 185 186AddDirToStartOfPath() { 187 DIRNAME=$1 188 PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH 189 PATH=${PATH//$DIRNAME:/} 190 PATH=$DIRNAME:$PATH 191 export PATH 192} 193 194AddEdkToolsToPath() { 195 196 # 197 # If EDK_TOOLS_PATH is not set, then we cannot update PATH 198 # 199 if [ -z "$EDK_TOOLS_PATH" ] 200 then 201 return 1 202 fi 203 204 EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory` 205 206 AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike 207 AddDirToStartOfPath $EDK_TOOLS_PATH_BIN 208 209} 210 211CopySingleTemplateFile() { 212 213 SRC_FILENAME=Conf/$1.template 214 DST_FILENAME=$CONF_PATH/$1.txt 215 216 if [ -e $DST_FILENAME ] 217 then 218 return 219 fi 220 221 echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME" 222 echo " to $DST_FILENAME" 223 SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME 224 cp $SRC_FILENAME $DST_FILENAME 225 226} 227 228CopyTemplateFiles() { 229 230 CopySingleTemplateFile build_rule 231 CopySingleTemplateFile tools_def 232 CopySingleTemplateFile target 233 234} 235 236ScriptMain() { 237 238 SetWorkspace 239 if [ -z $WORKSPACE ] 240 then 241 echo "Failure setting WORKSPACE" 242 return 1 243 fi 244 245 RestorePreviousConfiguration 246 247 SetEdkToolsPath 248 if [ -z $EDK_TOOLS_PATH ] 249 then 250 return 1 251 fi 252 253 AddEdkToolsToPath 254 if [ $? -ne 0 ] 255 then 256 echo "Failure adding EDK Tools into PATH!" 257 return 1 258 fi 259 260 StoreCurrentConfiguration 261 262 echo WORKSPACE: $WORKSPACE 263 echo EDK_TOOLS_PATH: $EDK_TOOLS_PATH 264 echo CONF_PATH: $CONF_PATH 265 266 CopyTemplateFiles 267 268} 269 270# 271# Run the main function 272# 273ScriptMain 274 275