]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/create-release.py
OvmfPkg/PlatformBootManagerLib: rejuvenate old-style function comments
[mirror_edk2.git] / OvmfPkg / create-release.py
CommitLineData
267865e8 1#!/usr/bin/python\r
2#\r
4272d1a7 3# Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>\r
267865e8 4#\r
5# This program and the accompanying materials\r
6# are licensed and made available under the terms and conditions of the BSD License\r
7# which accompanies this distribution. The full text of the license may be found at\r
8# http://opensource.org/licenses/bsd-license.php\r
9#\r
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12#\r
13\r
267865e8 14import os\r
15import re\r
16import StringIO\r
17import subprocess\r
18import sys\r
19import zipfile\r
20\r
21is_unix = not sys.platform.startswith('win')\r
22\r
23if not is_unix:\r
24 print "This script currently only supports unix-like systems"\r
25 sys.exit(-1)\r
26\r
27if os.path.exists('OvmfPkgX64.dsc'):\r
28 os.chdir('..')\r
29\r
30if not os.path.exists(os.path.join('OvmfPkg', 'OvmfPkgX64.dsc')):\r
31 print "OvmfPkg/OvmfPkgX64.dsc doesn't exist"\r
32 sys.exit(-1)\r
33\r
267865e8 34def run_and_capture_output(args, checkExitCode = True):\r
35 p = subprocess.Popen(args=args, stdout=subprocess.PIPE)\r
36 stdout = p.stdout.read()\r
37 ret_code = p.wait()\r
38 if checkExitCode:\r
39 assert ret_code == 0\r
40 return stdout\r
41\r
6d3d4a7e
JJ
42gcc_version = run_and_capture_output(args=('gcc', '--version'))\r
43gcc_re = re.compile(r'\s*\S+\s+\([^\)]+?\)\s+(\d+(?:\.\d+)*)(?:\s+.*)?')\r
44mo = gcc_re.match(gcc_version)\r
45if not mo:\r
46 print "Unable to find GCC version"\r
47 sys.exit(-1)\r
48gcc_version = map(lambda n: int(n), mo.group(1).split('.'))\r
49\r
50if 'TOOLCHAIN' in os.environ:\r
51 TOOLCHAIN = os.environ['TOOLCHAIN']\r
52else:\r
53 assert(gcc_version[0] == 4)\r
54 minor = max(4, min(7, gcc_version[1]))\r
55 TOOLCHAIN = 'GCC4' + str(minor)\r
56\r
57dcb83f 57def git_based_version():\r
267865e8 58 dir = os.getcwd()\r
57dcb83f
JJ
59 if not os.path.exists('.git'):\r
60 os.chdir('OvmfPkg')\r
61 stdout = run_and_capture_output(args=('git', 'log',\r
62 '-n', '1',\r
63 '--abbrev-commit'))\r
64 regex = re.compile(r'^\s*git-svn-id:\s+\S+@(\d+)\s+[0-9a-f\-]+$',\r
65 re.MULTILINE)\r
66 mo = regex.search(stdout)\r
67 if mo:\r
68 version = 'r' + mo.group(1)\r
69 else:\r
70 version = stdout.split(None, 3)[1]\r
267865e8 71 os.chdir(dir)\r
57dcb83f 72 return version\r
267865e8 73\r
74def svn_info():\r
75 dir = os.getcwd()\r
76 os.chdir('OvmfPkg')\r
77 stdout = run_and_capture_output(args=('svn', 'info'))\r
78 os.chdir(dir)\r
79 return stdout\r
80\r
57dcb83f
JJ
81def svn_based_version():\r
82 buf = svn_info()\r
83 revision_re = re.compile('^Revision\:\s*([\da-f]+)$', re.MULTILINE)\r
84 mo = revision_re.search(buf)\r
85 assert(mo is not None)\r
86 return 'r' + mo.group(1)\r
267865e8 87\r
88def get_revision():\r
57dcb83f
JJ
89 if os.path.exists(os.path.join('OvmfPkg', '.svn')):\r
90 return svn_based_version()\r
91 else:\r
92 return git_based_version()\r
267865e8 93\r
94revision = get_revision()\r
95\r
96newline_re = re.compile(r'(\n|\r\n|\r(?!\n))', re.MULTILINE)\r
97def to_dos_text(str):\r
98 return newline_re.sub('\r\n', str)\r
99\r
100def gen_build_info():\r
101 distro = run_and_capture_output(args=('lsb_release', '-sd')).strip()\r
102\r
103 machine = run_and_capture_output(args=('uname', '-m')).strip()\r
104\r
6d3d4a7e 105 gcc_version_str = '.'.join(map(lambda v: str(v), gcc_version))\r
267865e8 106\r
107 ld_version = run_and_capture_output(args=('ld', '--version'))\r
108 ld_version = ld_version.split('\n')[0].split()[-1]\r
109\r
110 iasl_version = run_and_capture_output(args=('iasl'), checkExitCode=False)\r
111 iasl_version = filter(lambda s: s.find(' version ') >= 0, iasl_version.split('\n'))[0]\r
112 iasl_version = iasl_version.split(' version ')[1].strip()\r
113\r
114 sb = StringIO.StringIO()\r
57dcb83f 115 print >> sb, 'edk2: ', revision\r
6d3d4a7e 116 print >> sb, 'compiler: GCC', gcc_version_str, '(' + TOOLCHAIN + ')'\r
267865e8 117 print >> sb, 'binutils:', ld_version\r
118 print >> sb, 'iasl: ', iasl_version\r
119 print >> sb, 'system: ', distro, machine.replace('_', '-')\r
120 return to_dos_text(sb.getvalue())\r
121\r
e55bf53b
JJ
122def read_file(filename):\r
123 f = open(filename)\r
124 d = f.read()\r
125 f.close()\r
126 return d\r
127\r
267865e8 128LICENSE = to_dos_text(\r
129'''This OVMF binary release is built from source code licensed under\r
130the BSD open source license. The BSD license is documented at\r
131http://opensource.org/licenses/bsd-license.php, and a copy is\r
132shown below.\r
133\r
134One sub-component of the OVMF project is a FAT filesystem driver. The FAT\r
135filesystem driver code is also BSD licensed, but the code license contains\r
136one additional term. This license can be found at\r
9a426abc 137https://github.com/tianocore/tianocore.github.io/wiki/Edk2-fat-driver\r
267865e8 138and a copy is shown below (following the normal BSD license).\r
139\r
140=== BSD license: START ===\r
141\r
e55bf53b
JJ
142''')\r
143\r
144LICENSE += read_file(os.path.join('MdePkg', 'License.txt'))\r
267865e8 145\r
e55bf53b
JJ
146LICENSE += to_dos_text(\r
147'''\r
267865e8 148=== BSD license: END ===\r
149\r
150=== FAT filesystem driver license: START ===\r
151\r
e55bf53b
JJ
152''')\r
153\r
154LICENSE += read_file(os.path.join('FatBinPkg', 'License.txt'))\r
267865e8 155\r
e55bf53b
JJ
156LICENSE += to_dos_text(\r
157'''\r
267865e8 158=== FAT filesystem driver license: END ===\r
159''')\r
160\r
161def build(arch):\r
162 args = (\r
163 'OvmfPkg/build.sh',\r
164 '-t', TOOLCHAIN,\r
165 '-a', arch,\r
166 '-b', 'RELEASE'\r
167 )\r
168 logname = 'build-%s.log' % arch\r
169 build_log = open(logname, 'w')\r
170 print 'Building OVMF for', arch, '(%s)' % logname, '...',\r
171 sys.stdout.flush()\r
172 p = subprocess.Popen(args=args, stdout=build_log, stderr=build_log)\r
173 ret_code = p.wait()\r
174 if ret_code == 0:\r
175 print '[done]'\r
176 else:\r
177 print '[error 0x%x]' % ret_code\r
178 return ret_code\r
179\r
180def create_zip(arch):\r
181 global build_info\r
57dcb83f 182 filename = 'OVMF-%s-%s.zip' % (arch, revision)\r
267865e8 183 print 'Creating', filename, '...',\r
184 sys.stdout.flush()\r
185 if os.path.exists(filename):\r
186 os.remove(filename)\r
187 zipf = zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED)\r
188\r
189 zipf.writestr('BUILD_INFO', build_info)\r
190 zipf.writestr('LICENSE', LICENSE)\r
191 zipf.write(os.path.join('OvmfPkg', 'README'), 'README')\r
192 FV_DIR = os.path.join(\r
193 'Build',\r
194 'Ovmf' + arch.title(),\r
195 'RELEASE_' + TOOLCHAIN,\r
196 'FV'\r
197 )\r
198 zipf.write(os.path.join(FV_DIR, 'OVMF.fd'), 'OVMF.fd')\r
267865e8 199 zipf.close()\r
200 print '[done]'\r
201\r
202build_info = gen_build_info()\r
203build('IA32')\r
204build('X64')\r
205create_zip('IA32')\r
206create_zip('X64')\r
207\r
208\r