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. |
| 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 |
| 29 import utils |
| 30 |
| 31 from os import listdir, makedirs, remove, rmdir |
| 32 from os.path import basename, dirname, join, realpath, exists, isdir, split |
| 33 |
| 34 HOST_OS = utils.GuessOS() |
| 35 |
| 36 # TODO (16582): Remove this when the LICENSE file becomes part of |
| 37 # all checkouts. |
| 38 license = [ |
| 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') |
| 138 license_lines = lf.read().splitlines() |
| 139 print license_lines |
| 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')) |
| 161 f.close() |
| 162 |
| 163 def GenerateSvnRevision(filename, svn_revision): |
| 164 f = open(filename, 'w') |
| 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) |
| 181 print 'Creating tarball: %s' % (tarfilename) |
| 182 with tarfile.open(tarfilename, mode='w:gz') as tar: |
| 183 for f in listdir('.'): |
| 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 |