OLD | NEW |
---|---|
(Empty) | |
1 #!/usr/bin/env python | |
2 # | |
3 # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
4 # for details. All rights reserved. Use of this source code is governed by a | |
5 # BSD-style license that can be found in the LICENSE file. | |
6 # | |
7 | |
8 # Script to build a tarball of the Dart source. | |
9 # | |
10 # The tarball includes all the source needed to build Dart. This | |
11 # includes source in third_party. As part of creating the tarball the | |
12 # files used to build Debian packages are copied to a top-level debian | |
13 # directory. This makes it easy to build Debian packages from the | |
14 # tarball. | |
15 # | |
16 # For building a Debian package renaming the tarball to follow the | |
17 # Debian is needed. | |
kustermann
2014/02/06 15:28:04
"to follow the Debian" sounds strange.
Søren Gjesse
2014/02/07 09:52:43
Done.
| |
18 # | |
19 # $ mv dart-XXX.tar.gz dart_XXX.orig.tar.gz | |
20 # $ tar xf dart_XXX.orig.tar.gz | |
21 # $ cd dart_XXX | |
22 # $ debuild -us -uc | |
23 | |
24 import datetime | |
25 import optparse | |
26 import sys | |
27 import tarfile | |
28 import tempfile | |
kustermann
2014/02/06 15:28:04
tempfile not used.
Søren Gjesse
2014/02/07 09:52:43
Removed.
| |
29 import utils | |
30 | |
31 from os import listdir, makedirs, remove, rmdir | |
kustermann
2014/02/06 15:28:04
remove, rmdir not used.
Søren Gjesse
2014/02/07 09:52:43
Removed.
| |
32 from os.path import basename, dirname, join, realpath, exists, isdir, split | |
kustermann
2014/02/06 15:28:04
basename, dirname, realpath, isdir unused.
Søren Gjesse
2014/02/07 09:52:43
Removed.
| |
33 | |
34 HOST_OS = utils.GuessOS() | |
35 | |
36 # TODO (16582): Remove this when the LICENSE file becomes part of | |
37 # all checkouts. | |
38 license = [ | |
kustermann
2014/02/06 15:28:04
Python supports multiline strings, why don't you d
Søren Gjesse
2014/02/07 09:52:43
This will go away when https://codereview.chromium
| |
39 'This license applies to all parts of Dart that are not externally', | |
40 'maintained libraries. The external maintained libraries used by', | |
41 'Dart are:', | |
42 '', | |
43 '7-Zip - in third_party/7zip', | |
44 'JSCRE - in runtime/third_party/jscre', | |
45 'Ant - in third_party/apache_ant', | |
46 'args4j - in third_party/args4j', | |
47 'bzip2 - in third_party/bzip2', | |
48 'Commons IO - in third_party/commons-io', | |
49 'Commons Lang in third_party/commons-lang', | |
50 'dromaeo - in samples/third_party/dromaeo', | |
51 'Eclipse - in third_party/eclipse', | |
52 'gsutil - in third_party/gsutil', | |
53 'Guava - in third_party/guava', | |
54 'hamcrest - in third_party/hamcrest', | |
55 'Httplib2 - in samples/third_party/httplib2', | |
56 'JSON - in third_party/json', | |
57 'JUnit - in third_party/junit', | |
58 'Oauth - in samples/third_party/oauth2client', | |
59 'weberknecht - in third_party/weberknecht', | |
60 'fest - in third_party/fest', | |
61 'mockito - in third_party/mockito', | |
62 '', | |
63 'The libraries may have their own licenses; we recommend you read them,', | |
64 'as their terms may differ from the terms below.', | |
65 '', | |
66 'Copyright 2012, the Dart project authors. All rights reserved.', | |
67 'Redistribution and use in source and binary forms, with or without', | |
68 'modification, are permitted provided that the following conditions are', | |
69 'met:', | |
70 ' * Redistributions of source code must retain the above copyright', | |
71 ' notice, this list of conditions and the following disclaimer.', | |
72 ' * Redistributions in binary form must reproduce the above', | |
73 ' copyright notice, this list of conditions and the following', | |
74 ' disclaimer in the documentation and/or other materials provided', | |
75 ' with the distribution.', | |
76 ' * Neither the name of Google Inc. nor the names of its', | |
77 ' contributors may be used to endorse or promote products derived', | |
78 ' from this software without specific prior written permission.', | |
79 'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS', | |
80 '"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT', | |
81 'LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR', | |
82 'A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT', | |
83 'OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,', | |
84 'SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT', | |
85 'LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,', | |
86 'DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY', | |
87 'THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT', | |
88 '(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE', | |
89 'OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.' | |
90 ] | |
91 | |
92 # Flags. | |
93 verbose = False | |
94 | |
95 # Name of the dart directory when unpacking the tarball. | |
96 versiondir = '' | |
97 | |
98 # Ignore Git/SVN files, checked-in binaries, backup files, etc.. | |
99 ignoredPaths = ['out', 'tools/testing/bin' | |
100 'third_party/7zip', 'third_party/android_tools', | |
101 'third_party/clang', 'third_party/d8', | |
102 'third_party/firefox_jsshell'] | |
103 ignoredDirs = ['.svn', '.git'] | |
104 ignoredEndings = ['.mk', '.pyc', 'Makefile', '~'] | |
105 | |
106 def BuildOptions(): | |
107 result = optparse.OptionParser() | |
108 result.add_option("-v", "--verbose", | |
109 help='Verbose output.', | |
110 default=False, action="store_true") | |
111 return result | |
112 | |
113 def Filter(tar_info): | |
114 _, tail = split(tar_info.name) | |
115 if tail in ignoredDirs: | |
116 return None | |
117 for path in ignoredPaths: | |
118 if tar_info.name.startswith(path): | |
119 return None | |
120 for ending in ignoredEndings: | |
121 if tar_info.name.endswith(ending): | |
122 return None | |
123 # Add the dart directory name with version. | |
124 original_name = tar_info.name | |
125 # Place the debian directory one level over the rest which are | |
126 # placed in the directory 'dart'. This enables building the Debian | |
127 # packages out-of-the-box. | |
128 tar_info.name = join(versiondir, 'dart', tar_info.name) | |
129 if verbose: | |
130 print 'Adding %s as %s' % (original_name, tar_info.name) | |
131 return tar_info | |
132 | |
133 def GenerateCopyright(filename): | |
134 license_lines = license | |
135 try: | |
136 # Currently the LICENSE file is part of a svn-root checkout. | |
137 lf = open('../LICENSE', 'r') | |
kustermann
2014/02/06 15:28:04
'r' is the default + using context manager?
Søren Gjesse
2014/02/07 09:52:43
Done.
| |
138 license_lines = lf.read().splitlines() | |
139 print license_lines | |
kustermann
2014/02/06 15:28:04
Why print?
Søren Gjesse
2014/02/07 09:52:43
Debug code. Removed.
| |
140 lf.close() | |
141 except: | |
142 pass | |
143 | |
144 f = open(filename, 'w') | |
145 f.write('Name: dart\n') | |
146 f.write('Maintainer: Dart Team <misc@dartlang.org>\n') | |
147 f.write('Source: https://code.google.com/p/dart/\n') | |
148 f.write('License:\n') | |
149 for line in license_lines: | |
150 f.write(' %s\n' % line) | |
151 f.close() | |
152 | |
153 def GenerateChangeLog(filename, version): | |
154 f = open(filename, 'w') | |
155 f.write('dart (%s-1) UNRELEASED; urgency=low\n' % version) | |
156 f.write('\n') | |
157 f.write(' * Generated file.\n') | |
158 f.write('\n') | |
159 f.write(' -- Dart Team <misc@dartlang.org> %s\n' % | |
160 datetime.datetime.utcnow().strftime('%a, %d %b %Y %X +0000')) | |
kustermann
2014/02/06 15:28:04
Maybe use a multiline string? [see comment at lice
Søren Gjesse
2014/02/07 09:52:43
It does not indent as well as this I think.
| |
161 f.close() | |
162 | |
163 def GenerateSvnRevision(filename, svn_revision): | |
164 f = open(filename, 'w') | |
kustermann
2014/02/06 15:28:04
It's usually nicer (and safer if an exception occu
Søren Gjesse
2014/02/07 09:52:43
Done.
| |
165 f.write(svn_revision) | |
166 f.close() | |
167 | |
168 | |
169 def CreateTarball(): | |
170 # Generate the name of the tarfile | |
171 version = utils.GetVersion() | |
172 global versiondir | |
173 versiondir = 'dart-%s' % version | |
174 tarname = '%s.tar.gz' % versiondir | |
175 debian_dir = 'tools/linux_dist_support/debian' | |
176 # Create the tar file in the out directory. | |
177 tardir = utils.GetBuildDir(HOST_OS, HOST_OS) | |
178 if not exists(tardir): | |
179 makedirs(tardir) | |
180 tarfilename = join(tardir, tarname) | |
kustermann
2014/02/06 15:28:04
It's slightly spooky, that you tar up the dart dir
Søren Gjesse
2014/02/07 09:52:43
I started out by generating it in the parent direc
| |
181 print 'Creating tarball: %s' % (tarfilename) | |
kustermann
2014/02/06 15:28:04
No parenthesis needed!
Søren Gjesse
2014/02/07 09:52:43
Done.
| |
182 with tarfile.open(tarfilename, mode='w:gz') as tar: | |
183 for f in listdir('.'): | |
kustermann
2014/02/06 15:28:04
You assume this is run from the root of the dart d
Søren Gjesse
2014/02/07 09:52:43
Done. The script can now be run from anywhere.
| |
184 tar.add(f, filter=Filter) | |
185 for f in listdir(debian_dir): | |
186 tar.add(join(debian_dir, f), | |
187 arcname='%s/debian/%s' % (versiondir, f)) | |
188 | |
189 with utils.TempDir() as temp_dir: | |
190 # Generate and add debian/copyright | |
191 copyright = join(temp_dir, 'copyright') | |
192 GenerateCopyright(copyright) | |
193 tar.add(copyright, arcname='%s/debian/copyright' % versiondir) | |
194 | |
195 # Generate and add debian/changelog | |
196 change_log = join(temp_dir, 'changelog') | |
197 GenerateChangeLog(change_log, version) | |
198 tar.add(change_log, arcname='%s/debian/changelog' % versiondir) | |
199 | |
200 # For bleeding_edge add the SVN_REVISION file. | |
201 if utils.GetChannel() == 'be': | |
202 svn_revision = join(temp_dir, 'SVN_REVISION') | |
203 GenerateSvnRevision(svn_revision, utils.GetSVNRevision()) | |
204 tar.add(svn_revision, arcname='%s/dart/tools/SVN_REVISION' % versiondir) | |
205 | |
206 def Main(): | |
207 if HOST_OS != 'linux': | |
208 print 'Tarball can only be created on linux' | |
209 return -1 | |
210 | |
211 # Parse the options. | |
212 parser = BuildOptions() | |
213 (options, args) = parser.parse_args() | |
214 if options.verbose: | |
215 global verbose | |
216 verbose = True | |
217 | |
218 CreateTarball() | |
219 | |
220 if __name__ == '__main__': | |
221 sys.exit(Main()) | |
OLD | NEW |