]>
git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/create-release.py
3 # Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>
5 # This program and the accompanying materials
6 # are licensed and made available under the terms and conditions of the BSD License
7 # which accompanies this distribution. The full text of the license may be found at
8 # http://opensource.org/licenses/bsd-license.php
10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
21 is_unix
= not sys
.platform
.startswith('win')
24 print "This script currently only supports unix-like systems"
27 if os
.path
.exists('OvmfPkgX64.dsc'):
30 if not os
.path
.exists(os
.path
.join('OvmfPkg', 'OvmfPkgX64.dsc')):
31 print "OvmfPkg/OvmfPkgX64.dsc doesn't exist"
34 def run_and_capture_output(args
, checkExitCode
= True):
35 p
= subprocess
.Popen(args
=args
, stdout
=subprocess
.PIPE
)
36 stdout
= p
.stdout
.read()
42 gcc_version
= run_and_capture_output(args
=('gcc', '--version'))
43 gcc_re
= re
.compile(r
'\s*\S+\s+\([^\)]+?\)\s+(\d+(?:\.\d+)*)(?:\s+.*)?')
44 mo
= gcc_re
.match(gcc_version
)
46 print "Unable to find GCC version"
48 gcc_version
= map(lambda n
: int(n
), mo
.group(1).split('.'))
50 if 'TOOLCHAIN' in os
.environ
:
51 TOOLCHAIN
= os
.environ
['TOOLCHAIN']
53 assert(gcc_version
[0] == 4)
54 minor
= max(4, min(7, gcc_version
[1]))
55 TOOLCHAIN
= 'GCC4' + str(minor
)
57 def git_based_version():
59 if not os
.path
.exists('.git'):
61 stdout
= run_and_capture_output(args
=('git', 'log',
64 regex
= re
.compile(r
'^\s*git-svn-id:\s+\S+@(\d+)\s+[0-9a-f\-]+$',
66 mo
= regex
.search(stdout
)
68 version
= 'r' + mo
.group(1)
70 version
= stdout
.split(None, 3)[1]
77 stdout
= run_and_capture_output(args
=('svn', 'info'))
81 def svn_based_version():
83 revision_re
= re
.compile('^Revision\:\s*([\da-f]+)$', re
.MULTILINE
)
84 mo
= revision_re
.search(buf
)
85 assert(mo
is not None)
86 return 'r' + mo
.group(1)
89 if os
.path
.exists(os
.path
.join('OvmfPkg', '.svn')):
90 return svn_based_version()
92 return git_based_version()
94 revision
= get_revision()
96 newline_re
= re
.compile(r
'(\n|\r\n|\r(?!\n))', re
.MULTILINE
)
98 return newline_re
.sub('\r\n', str)
100 def gen_build_info():
101 distro
= run_and_capture_output(args
=('lsb_release', '-sd')).strip()
103 machine
= run_and_capture_output(args
=('uname', '-m')).strip()
105 gcc_version_str
= '.'.join(map(lambda v
: str(v
), gcc_version
))
107 ld_version
= run_and_capture_output(args
=('ld', '--version'))
108 ld_version
= ld_version
.split('\n')[0].split()[-1]
110 iasl_version
= run_and_capture_output(args
=('iasl'), checkExitCode
=False)
111 iasl_version
= filter(lambda s
: s
.find(' version ') >= 0, iasl_version
.split('\n'))[0]
112 iasl_version
= iasl_version
.split(' version ')[1].strip()
114 sb
= StringIO
.StringIO()
115 print >> sb
, 'edk2: ', revision
116 print >> sb
, 'compiler: GCC', gcc_version_str
, '(' + TOOLCHAIN
+ ')'
117 print >> sb
, 'binutils:', ld_version
118 print >> sb
, 'iasl: ', iasl_version
119 print >> sb
, 'system: ', distro
, machine
.replace('_', '-')
120 return to_dos_text(sb
.getvalue())
122 LICENSE
= to_dos_text(
123 '''This OVMF binary release is built from source code licensed under
124 the BSD open source license. The BSD license is documented at
125 http://opensource.org/licenses/bsd-license.php, and a copy is
128 One sub-component of the OVMF project is a FAT filesystem driver. The FAT
129 filesystem driver code is also BSD licensed, but the code license contains
130 one additional term. This license can be found at
131 http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Edk2-fat-driver,
132 and a copy is shown below (following the normal BSD license).
134 === BSD license: START ===
136 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.
138 Redistribution and use in source and binary forms, with or without
139 modification, are permitted provided that the following conditions
142 * Redistributions of source code must retain the above copyright
143 notice, this list of conditions and the following disclaimer.
144 * Redistributions in binary form must reproduce the above copyright
145 notice, this list of conditions and the following disclaimer in
146 the documentation and/or other materials provided with the
148 * Neither the name of the Intel Corporation nor the names of its
149 contributors may be used to endorse or promote products derived
150 from this software without specific prior written permission.
152 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
153 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
154 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
155 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
156 COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
157 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
158 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
159 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
160 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
161 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
162 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
163 POSSIBILITY OF SUCH DAMAGE.
165 === BSD license: END ===
167 === FAT filesystem driver license: START ===
169 Copyright (c) 2004, Intel Corporation. All rights reserved.
171 Redistribution and use in source and binary forms, with or without
172 modification, are permitted provided that the following conditions
175 * Redistributions of source code must retain the above copyright
176 notice, this list of conditions and the following disclaimer.
177 * Redistributions in binary form must reproduce the above copyright
178 notice, this list of conditions and the following disclaimer in
179 the documentation and/or other materials provided with the
181 * Neither the name of Intel nor the names of its
182 contributors may be used to endorse or promote products derived
183 from this software without specific prior written permission.
185 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
186 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
187 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
188 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
189 COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
190 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
191 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
192 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
193 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
194 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
195 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
196 POSSIBILITY OF SUCH DAMAGE.
199 In addition to the forgoing, redistribution and use of the code is
200 conditioned upon the FAT 32 File System Driver and all derivative
201 works thereof being used for and designed only to read and/or write
202 to a file system that is directly managed by an Extensible Firmware
203 Interface (EFI) implementation or by an emulator of an EFI
206 === FAT filesystem driver license: END ===
216 logname
= 'build-%s.log' % arch
217 build_log
= open(logname
, 'w')
218 print 'Building OVMF for', arch
, '(%s)' % logname
, '...',
220 p
= subprocess
.Popen(args
=args
, stdout
=build_log
, stderr
=build_log
)
225 print '[error 0x%x]' % ret_code
228 def create_zip(arch
):
230 filename
= 'OVMF-%s-%s.zip' % (arch
, revision
)
231 print 'Creating', filename
, '...',
233 if os
.path
.exists(filename
):
235 zipf
= zipfile
.ZipFile(filename
, 'w', zipfile
.ZIP_DEFLATED
)
237 zipf
.writestr('BUILD_INFO', build_info
)
238 zipf
.writestr('LICENSE', LICENSE
)
239 zipf
.write(os
.path
.join('OvmfPkg', 'README'), 'README')
240 FV_DIR
= os
.path
.join(
242 'Ovmf' + arch
.title(),
243 'RELEASE_' + TOOLCHAIN
,
246 zipf
.write(os
.path
.join(FV_DIR
, 'OVMF.fd'), 'OVMF.fd')
250 build_info
= gen_build_info()