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