OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 5 # BSD-style license that can be found in the LICENSE file. |
6 # | 6 # |
7 | 7 |
8 # Script to build a tarball of the Dart source. | 8 # Script to build a tarball of the Dart source. |
9 # | 9 # |
10 # The tarball includes all the source needed to build Dart. This | 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 | 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 | 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 | 13 # directory. This makes it easy to build Debian packages from the |
14 # tarball. | 14 # tarball. |
15 # | 15 # |
16 # For building a Debian package renaming the tarball to follow the | 16 # For building a Debian package one need to the tarball to follow the |
17 # Debian is needed. | 17 # Debian naming rules upstream tar files. |
18 # | 18 # |
19 # $ mv dart-XXX.tar.gz dart_XXX.orig.tar.gz | 19 # $ mv dart-XXX.tar.gz dart_XXX.orig.tar.gz |
20 # $ tar xf dart_XXX.orig.tar.gz | 20 # $ tar xf dart_XXX.orig.tar.gz |
21 # $ cd dart_XXX | 21 # $ cd dart_XXX |
22 # $ debuild -us -uc | 22 # $ debuild -us -uc |
23 | 23 |
24 import datetime | 24 import datetime |
25 import optparse | 25 import optparse |
26 import sys | 26 import sys |
27 import tarfile | 27 import tarfile |
28 import tempfile | |
29 import utils | 28 import utils |
30 | 29 |
31 from os import listdir, makedirs, remove, rmdir | 30 from os import listdir, makedirs |
32 from os.path import basename, dirname, join, realpath, exists, isdir, split | 31 from os.path import join, exists, split, dirname, abspath |
33 | 32 |
34 HOST_OS = utils.GuessOS() | 33 HOST_OS = utils.GuessOS() |
| 34 DART_DIR = abspath(join(__file__, '..', '..')) |
35 | 35 |
36 # TODO (16582): Remove this when the LICENSE file becomes part of | 36 # TODO (16582): Remove this when the LICENSE file becomes part of |
37 # all checkouts. | 37 # all checkouts. |
38 license = [ | 38 license = [ |
39 'This license applies to all parts of Dart that are not externally', | 39 'This license applies to all parts of Dart that are not externally', |
40 'maintained libraries. The external maintained libraries used by', | 40 'maintained libraries. The external maintained libraries used by', |
41 'Dart are:', | 41 'Dart are:', |
42 '', | 42 '', |
43 '7-Zip - in third_party/7zip', | 43 '7-Zip - in third_party/7zip', |
44 'JSCRE - in runtime/third_party/jscre', | 44 'JSCRE - in runtime/third_party/jscre', |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 'OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.' | 89 'OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.' |
90 ] | 90 ] |
91 | 91 |
92 # Flags. | 92 # Flags. |
93 verbose = False | 93 verbose = False |
94 | 94 |
95 # Name of the dart directory when unpacking the tarball. | 95 # Name of the dart directory when unpacking the tarball. |
96 versiondir = '' | 96 versiondir = '' |
97 | 97 |
98 # Ignore Git/SVN files, checked-in binaries, backup files, etc.. | 98 # Ignore Git/SVN files, checked-in binaries, backup files, etc.. |
99 ignoredPaths = ['out', 'tools/testing/bin' | 99 ignoredPaths = ['tools/testing/bin' |
100 'third_party/7zip', 'third_party/android_tools', | 100 'third_party/7zip', 'third_party/android_tools', |
101 'third_party/clang', 'third_party/d8', | 101 'third_party/clang', 'third_party/d8', |
102 'third_party/firefox_jsshell'] | 102 'third_party/firefox_jsshell'] |
103 ignoredDirs = ['.svn', '.git'] | 103 ignoredDirs = ['.svn', '.git'] |
104 ignoredEndings = ['.mk', '.pyc', 'Makefile', '~'] | 104 ignoredEndings = ['.mk', '.pyc', 'Makefile', '~'] |
105 | 105 |
106 def BuildOptions(): | 106 def BuildOptions(): |
107 result = optparse.OptionParser() | 107 result = optparse.OptionParser() |
108 result.add_option("-v", "--verbose", | 108 result.add_option("-v", "--verbose", |
109 help='Verbose output.', | 109 help='Verbose output.', |
110 default=False, action="store_true") | 110 default=False, action="store_true") |
111 return result | 111 return result |
112 | 112 |
113 def Filter(tar_info): | 113 def Filter(tar_info): |
114 _, tail = split(tar_info.name) | 114 # Get the name of the file relative to the dart directory. Note the |
| 115 # name from the TarInfo does not include a leading slash. |
| 116 assert tar_info.name.startswith(DART_DIR[1:]) |
| 117 original_name = tar_info.name[len(DART_DIR):] |
| 118 _, tail = split(original_name) |
115 if tail in ignoredDirs: | 119 if tail in ignoredDirs: |
116 return None | 120 return None |
117 for path in ignoredPaths: | 121 for path in ignoredPaths: |
118 if tar_info.name.startswith(path): | 122 if original_name.startswith(path): |
119 return None | 123 return None |
120 for ending in ignoredEndings: | 124 for ending in ignoredEndings: |
121 if tar_info.name.endswith(ending): | 125 if original_name.endswith(ending): |
122 return None | 126 return None |
123 # Add the dart directory name with version. | 127 # Add the dart directory name with version. Place the debian |
124 original_name = tar_info.name | 128 # directory one level over the rest which are placed in the |
125 # Place the debian directory one level over the rest which are | 129 # directory 'dart'. This enables building the Debian packages |
126 # placed in the directory 'dart'. This enables building the Debian | 130 # out-of-the-box. |
127 # packages out-of-the-box. | 131 tar_info.name = join(versiondir, 'dart', original_name) |
128 tar_info.name = join(versiondir, 'dart', tar_info.name) | |
129 if verbose: | 132 if verbose: |
130 print 'Adding %s as %s' % (original_name, tar_info.name) | 133 print 'Adding %s as %s' % (original_name, tar_info.name) |
131 return tar_info | 134 return tar_info |
132 | 135 |
133 def GenerateCopyright(filename): | 136 def GenerateCopyright(filename): |
134 license_lines = license | 137 license_lines = license |
135 try: | 138 try: |
136 # Currently the LICENSE file is part of a svn-root checkout. | 139 # TODO (16582): The LICENSE file is currently not in a normal the |
137 lf = open('../LICENSE', 'r') | 140 # dart checkout. |
138 license_lines = lf.read().splitlines() | 141 with open(join(DART_DIR, 'LICENSE')) as lf: |
139 print license_lines | 142 license_lines = lf.read().splitlines() |
140 lf.close() | |
141 except: | 143 except: |
142 pass | 144 pass |
143 | 145 |
144 f = open(filename, 'w') | 146 with open(filename, 'w') as f: |
145 f.write('Name: dart\n') | 147 f.write('Name: dart\n') |
146 f.write('Maintainer: Dart Team <misc@dartlang.org>\n') | 148 f.write('Maintainer: Dart Team <misc@dartlang.org>\n') |
147 f.write('Source: https://code.google.com/p/dart/\n') | 149 f.write('Source: https://code.google.com/p/dart/\n') |
148 f.write('License:\n') | 150 f.write('License:\n') |
149 for line in license_lines: | 151 for line in license_lines: |
150 f.write(' %s\n' % line) | 152 f.write(' %s\n' % line) |
151 f.close() | |
152 | 153 |
153 def GenerateChangeLog(filename, version): | 154 def GenerateChangeLog(filename, version): |
154 f = open(filename, 'w') | 155 with open(filename, 'w') as f: |
155 f.write('dart (%s-1) UNRELEASED; urgency=low\n' % version) | 156 f.write('dart (%s-1) UNRELEASED; urgency=low\n' % version) |
156 f.write('\n') | 157 f.write('\n') |
157 f.write(' * Generated file.\n') | 158 f.write(' * Generated file.\n') |
158 f.write('\n') | 159 f.write('\n') |
159 f.write(' -- Dart Team <misc@dartlang.org> %s\n' % | 160 f.write(' -- Dart Team <misc@dartlang.org> %s\n' % |
160 datetime.datetime.utcnow().strftime('%a, %d %b %Y %X +0000')) | 161 datetime.datetime.utcnow().strftime('%a, %d %b %Y %X +0000')) |
161 f.close() | |
162 | 162 |
163 def GenerateSvnRevision(filename, svn_revision): | 163 def GenerateSvnRevision(filename, svn_revision): |
164 f = open(filename, 'w') | 164 with open(filename, 'w') as f: |
165 f.write(svn_revision) | 165 f.write(svn_revision) |
166 f.close() | |
167 | 166 |
168 | 167 |
169 def CreateTarball(): | 168 def CreateTarball(): |
| 169 global ignoredPaths # Used for adding the output directory. |
170 # Generate the name of the tarfile | 170 # Generate the name of the tarfile |
171 version = utils.GetVersion() | 171 version = utils.GetVersion() |
172 global versiondir | 172 global versiondir |
173 versiondir = 'dart-%s' % version | 173 versiondir = 'dart-%s' % version |
174 tarname = '%s.tar.gz' % versiondir | 174 tarname = '%s.tar.gz' % versiondir |
175 debian_dir = 'tools/linux_dist_support/debian' | 175 debian_dir = 'tools/linux_dist_support/debian' |
176 # Create the tar file in the out directory. | 176 # Create the tar file in the build directory. |
177 tardir = utils.GetBuildDir(HOST_OS, HOST_OS) | 177 tardir = join(DART_DIR, utils.GetBuildDir(HOST_OS, HOST_OS)) |
| 178 # Don't include the build directory in the tarball. |
| 179 ignoredPaths.append(tardir) |
178 if not exists(tardir): | 180 if not exists(tardir): |
179 makedirs(tardir) | 181 makedirs(tardir) |
180 tarfilename = join(tardir, tarname) | 182 tarfilename = join(tardir, tarname) |
181 print 'Creating tarball: %s' % (tarfilename) | 183 print 'Creating tarball: %s' % tarfilename |
182 with tarfile.open(tarfilename, mode='w:gz') as tar: | 184 with tarfile.open(tarfilename, mode='w:gz') as tar: |
183 for f in listdir('.'): | 185 for f in listdir(DART_DIR): |
184 tar.add(f, filter=Filter) | 186 tar.add(join(DART_DIR, f), filter=Filter) |
185 for f in listdir(debian_dir): | 187 for f in listdir(join(DART_DIR, debian_dir)): |
186 tar.add(join(debian_dir, f), | 188 tar.add(join(DART_DIR, debian_dir, f), |
187 arcname='%s/debian/%s' % (versiondir, f)) | 189 arcname='%s/debian/%s' % (versiondir, f)) |
188 | 190 |
189 with utils.TempDir() as temp_dir: | 191 with utils.TempDir() as temp_dir: |
190 # Generate and add debian/copyright | 192 # Generate and add debian/copyright |
191 copyright = join(temp_dir, 'copyright') | 193 copyright = join(temp_dir, 'copyright') |
192 GenerateCopyright(copyright) | 194 GenerateCopyright(copyright) |
193 tar.add(copyright, arcname='%s/debian/copyright' % versiondir) | 195 tar.add(copyright, arcname='%s/debian/copyright' % versiondir) |
194 | 196 |
195 # Generate and add debian/changelog | 197 # Generate and add debian/changelog |
196 change_log = join(temp_dir, 'changelog') | 198 change_log = join(temp_dir, 'changelog') |
(...skipping 15 matching lines...) Expand all Loading... |
212 parser = BuildOptions() | 214 parser = BuildOptions() |
213 (options, args) = parser.parse_args() | 215 (options, args) = parser.parse_args() |
214 if options.verbose: | 216 if options.verbose: |
215 global verbose | 217 global verbose |
216 verbose = True | 218 verbose = True |
217 | 219 |
218 CreateTarball() | 220 CreateTarball() |
219 | 221 |
220 if __name__ == '__main__': | 222 if __name__ == '__main__': |
221 sys.exit(Main()) | 223 sys.exit(Main()) |
OLD | NEW |