mirror of
https://github.com/dart-lang/sdk
synced 2024-11-05 18:22:09 +00:00
Add script for generating a source tarball and rules for bilding a Debian package
R=ricow@google.com, kusternamm@google.com BUG= Review URL: https://codereview.chromium.org//154073002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@32359 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
parent
05d70400d6
commit
8128bd9373
8 changed files with 302 additions and 0 deletions
221
tools/create_tarball.py
Executable file
221
tools/create_tarball.py
Executable file
|
@ -0,0 +1,221 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
||||
# for details. All rights reserved. Use of this source code is governed by a
|
||||
# BSD-style license that can be found in the LICENSE file.
|
||||
#
|
||||
|
||||
# Script to build a tarball of the Dart source.
|
||||
#
|
||||
# The tarball includes all the source needed to build Dart. This
|
||||
# includes source in third_party. As part of creating the tarball the
|
||||
# files used to build Debian packages are copied to a top-level debian
|
||||
# directory. This makes it easy to build Debian packages from the
|
||||
# tarball.
|
||||
#
|
||||
# For building a Debian package renaming the tarball to follow the
|
||||
# Debian is needed.
|
||||
#
|
||||
# $ mv dart-XXX.tar.gz dart_XXX.orig.tar.gz
|
||||
# $ tar xf dart_XXX.orig.tar.gz
|
||||
# $ cd dart_XXX
|
||||
# $ debuild -us -uc
|
||||
|
||||
import datetime
|
||||
import optparse
|
||||
import sys
|
||||
import tarfile
|
||||
import tempfile
|
||||
import utils
|
||||
|
||||
from os import listdir, makedirs, remove, rmdir
|
||||
from os.path import basename, dirname, join, realpath, exists, isdir, split
|
||||
|
||||
HOST_OS = utils.GuessOS()
|
||||
|
||||
# TODO (16582): Remove this when the LICENSE file becomes part of
|
||||
# all checkouts.
|
||||
license = [
|
||||
'This license applies to all parts of Dart that are not externally',
|
||||
'maintained libraries. The external maintained libraries used by',
|
||||
'Dart are:',
|
||||
'',
|
||||
'7-Zip - in third_party/7zip',
|
||||
'JSCRE - in runtime/third_party/jscre',
|
||||
'Ant - in third_party/apache_ant',
|
||||
'args4j - in third_party/args4j',
|
||||
'bzip2 - in third_party/bzip2',
|
||||
'Commons IO - in third_party/commons-io',
|
||||
'Commons Lang in third_party/commons-lang',
|
||||
'dromaeo - in samples/third_party/dromaeo',
|
||||
'Eclipse - in third_party/eclipse',
|
||||
'gsutil - in third_party/gsutil',
|
||||
'Guava - in third_party/guava',
|
||||
'hamcrest - in third_party/hamcrest',
|
||||
'Httplib2 - in samples/third_party/httplib2',
|
||||
'JSON - in third_party/json',
|
||||
'JUnit - in third_party/junit',
|
||||
'Oauth - in samples/third_party/oauth2client',
|
||||
'weberknecht - in third_party/weberknecht',
|
||||
'fest - in third_party/fest',
|
||||
'mockito - in third_party/mockito',
|
||||
'',
|
||||
'The libraries may have their own licenses; we recommend you read them,',
|
||||
'as their terms may differ from the terms below.',
|
||||
'',
|
||||
'Copyright 2012, the Dart project authors. All rights reserved.',
|
||||
'Redistribution and use in source and binary forms, with or without',
|
||||
'modification, are permitted provided that the following conditions are',
|
||||
'met:',
|
||||
' * Redistributions of source code must retain the above copyright',
|
||||
' notice, this list of conditions and the following disclaimer.',
|
||||
' * Redistributions in binary form must reproduce the above',
|
||||
' copyright notice, this list of conditions and the following',
|
||||
' disclaimer in the documentation and/or other materials provided',
|
||||
' with the distribution.',
|
||||
' * Neither the name of Google Inc. nor the names of its',
|
||||
' contributors may be used to endorse or promote products derived',
|
||||
' from this software without specific prior written permission.',
|
||||
'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS',
|
||||
'"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT',
|
||||
'LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR',
|
||||
'A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT',
|
||||
'OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,',
|
||||
'SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT',
|
||||
'LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,',
|
||||
'DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY',
|
||||
'THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT',
|
||||
'(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE',
|
||||
'OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.'
|
||||
]
|
||||
|
||||
# Flags.
|
||||
verbose = False
|
||||
|
||||
# Name of the dart directory when unpacking the tarball.
|
||||
versiondir = ''
|
||||
|
||||
# Ignore Git/SVN files, checked-in binaries, backup files, etc..
|
||||
ignoredPaths = ['out', 'tools/testing/bin'
|
||||
'third_party/7zip', 'third_party/android_tools',
|
||||
'third_party/clang', 'third_party/d8',
|
||||
'third_party/firefox_jsshell']
|
||||
ignoredDirs = ['.svn', '.git']
|
||||
ignoredEndings = ['.mk', '.pyc', 'Makefile', '~']
|
||||
|
||||
def BuildOptions():
|
||||
result = optparse.OptionParser()
|
||||
result.add_option("-v", "--verbose",
|
||||
help='Verbose output.',
|
||||
default=False, action="store_true")
|
||||
return result
|
||||
|
||||
def Filter(tar_info):
|
||||
_, tail = split(tar_info.name)
|
||||
if tail in ignoredDirs:
|
||||
return None
|
||||
for path in ignoredPaths:
|
||||
if tar_info.name.startswith(path):
|
||||
return None
|
||||
for ending in ignoredEndings:
|
||||
if tar_info.name.endswith(ending):
|
||||
return None
|
||||
# Add the dart directory name with version.
|
||||
original_name = tar_info.name
|
||||
# Place the debian directory one level over the rest which are
|
||||
# placed in the directory 'dart'. This enables building the Debian
|
||||
# packages out-of-the-box.
|
||||
tar_info.name = join(versiondir, 'dart', tar_info.name)
|
||||
if verbose:
|
||||
print 'Adding %s as %s' % (original_name, tar_info.name)
|
||||
return tar_info
|
||||
|
||||
def GenerateCopyright(filename):
|
||||
license_lines = license
|
||||
try:
|
||||
# Currently the LICENSE file is part of a svn-root checkout.
|
||||
lf = open('../LICENSE', 'r')
|
||||
license_lines = lf.read().splitlines()
|
||||
print license_lines
|
||||
lf.close()
|
||||
except:
|
||||
pass
|
||||
|
||||
f = open(filename, 'w')
|
||||
f.write('Name: dart\n')
|
||||
f.write('Maintainer: Dart Team <misc@dartlang.org>\n')
|
||||
f.write('Source: https://code.google.com/p/dart/\n')
|
||||
f.write('License:\n')
|
||||
for line in license_lines:
|
||||
f.write(' %s\n' % line)
|
||||
f.close()
|
||||
|
||||
def GenerateChangeLog(filename, version):
|
||||
f = open(filename, 'w')
|
||||
f.write('dart (%s-1) UNRELEASED; urgency=low\n' % version)
|
||||
f.write('\n')
|
||||
f.write(' * Generated file.\n')
|
||||
f.write('\n')
|
||||
f.write(' -- Dart Team <misc@dartlang.org> %s\n' %
|
||||
datetime.datetime.utcnow().strftime('%a, %d %b %Y %X +0000'))
|
||||
f.close()
|
||||
|
||||
def GenerateSvnRevision(filename, svn_revision):
|
||||
f = open(filename, 'w')
|
||||
f.write(svn_revision)
|
||||
f.close()
|
||||
|
||||
|
||||
def CreateTarball():
|
||||
# Generate the name of the tarfile
|
||||
version = utils.GetVersion()
|
||||
global versiondir
|
||||
versiondir = 'dart-%s' % version
|
||||
tarname = '%s.tar.gz' % versiondir
|
||||
debian_dir = 'tools/linux_dist_support/debian'
|
||||
# Create the tar file in the out directory.
|
||||
tardir = utils.GetBuildDir(HOST_OS, HOST_OS)
|
||||
if not exists(tardir):
|
||||
makedirs(tardir)
|
||||
tarfilename = join(tardir, tarname)
|
||||
print 'Creating tarball: %s' % (tarfilename)
|
||||
with tarfile.open(tarfilename, mode='w:gz') as tar:
|
||||
for f in listdir('.'):
|
||||
tar.add(f, filter=Filter)
|
||||
for f in listdir(debian_dir):
|
||||
tar.add(join(debian_dir, f),
|
||||
arcname='%s/debian/%s' % (versiondir, f))
|
||||
|
||||
with utils.TempDir() as temp_dir:
|
||||
# Generate and add debian/copyright
|
||||
copyright = join(temp_dir, 'copyright')
|
||||
GenerateCopyright(copyright)
|
||||
tar.add(copyright, arcname='%s/debian/copyright' % versiondir)
|
||||
|
||||
# Generate and add debian/changelog
|
||||
change_log = join(temp_dir, 'changelog')
|
||||
GenerateChangeLog(change_log, version)
|
||||
tar.add(change_log, arcname='%s/debian/changelog' % versiondir)
|
||||
|
||||
# For bleeding_edge add the SVN_REVISION file.
|
||||
if utils.GetChannel() == 'be':
|
||||
svn_revision = join(temp_dir, 'SVN_REVISION')
|
||||
GenerateSvnRevision(svn_revision, utils.GetSVNRevision())
|
||||
tar.add(svn_revision, arcname='%s/dart/tools/SVN_REVISION' % versiondir)
|
||||
|
||||
def Main():
|
||||
if HOST_OS != 'linux':
|
||||
print 'Tarball can only be created on linux'
|
||||
return -1
|
||||
|
||||
# Parse the options.
|
||||
parser = BuildOptions()
|
||||
(options, args) = parser.parse_args()
|
||||
if options.verbose:
|
||||
global verbose
|
||||
verbose = True
|
||||
|
||||
CreateTarball()
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(Main())
|
1
tools/linux_dist_support/debian/compat
Normal file
1
tools/linux_dist_support/debian/compat
Normal file
|
@ -0,0 +1 @@
|
|||
7
|
16
tools/linux_dist_support/debian/control
Normal file
16
tools/linux_dist_support/debian/control
Normal file
|
@ -0,0 +1,16 @@
|
|||
Source: dart
|
||||
Maintainer: Soren Gjesse <sgjesse@google.com>
|
||||
Section: misc
|
||||
Priority: optional
|
||||
Standards-Version: 3.9.2
|
||||
Build-Depends: debhelper (>= 9),
|
||||
subversion,
|
||||
python,
|
||||
g++-4.6,
|
||||
openjdk-6-jdk
|
||||
|
||||
Package: dart
|
||||
Architecture: amd64 i386
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: Dart SDK
|
||||
|
2
tools/linux_dist_support/debian/dart.install
Normal file
2
tools/linux_dist_support/debian/dart.install
Normal file
|
@ -0,0 +1,2 @@
|
|||
debian/tmp/out/dart usr/lib
|
||||
|
2
tools/linux_dist_support/debian/dart.links
Normal file
2
tools/linux_dist_support/debian/dart.links
Normal file
|
@ -0,0 +1,2 @@
|
|||
usr/lib/dart/bin/dart usr/bin/dart
|
||||
|
51
tools/linux_dist_support/debian/rules
Executable file
51
tools/linux_dist_support/debian/rules
Executable file
|
@ -0,0 +1,51 @@
|
|||
#!/usr/bin/make -f
|
||||
export DH_VERBOSE = 1
|
||||
|
||||
# Use DEB_BUILD_OPTIONS's parallel=n option (see Policy 4.9.1)
|
||||
ifneq (,$(findstring parallel,$(DEB_BUILD_OPTIONS)))
|
||||
PARALLEL_JOBS := $(shell echo $(DEB_BUILD_OPTIONS) | \
|
||||
sed -e 's/.*parallel=\([0-9]\+\).*/\1/')
|
||||
else
|
||||
PARALLEL_JOBS := 1
|
||||
endif
|
||||
|
||||
DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
|
||||
ifeq (amd64,$(DEB_HOST_ARCH_CPU))
|
||||
BUILD_TYPE += ReleaseX64
|
||||
else
|
||||
ifeq (i386,$(DEB_HOST_ARCH_CPU))
|
||||
BUILD_TYPE += ReleaseIA32
|
||||
else
|
||||
$(warning unsupported target arch $(DEB_HOST_ARCH_CPU) - continuing anyway)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Verbose?
|
||||
ifeq (1,$(DH_VERBOSE))
|
||||
BUILD_ARGS += V=1
|
||||
endif
|
||||
|
||||
%:
|
||||
dh $@
|
||||
|
||||
override_dh_auto_clean:
|
||||
echo $(DEB_BUILD_OPTIONS)
|
||||
rm -fr dart/out dart/Makefile
|
||||
find . -name *.tmp -execdir rm -f {} \;
|
||||
find . -name *.pyc -execdir rm -f {} \;
|
||||
find . -name *.mk -execdir rm -f {} \;
|
||||
find . -name *.Makefile -execdir rm -f {} \;
|
||||
|
||||
override_dh_auto_configure:
|
||||
GYP_GENERATORS=make python dart/tools/gyp_dart.py all
|
||||
|
||||
override_dh_auto_build:
|
||||
make -C dart -j$(PARALLEL_JOBS) \
|
||||
BUILDTYPE=$(BUILD_TYPE) $(BUILD_ARGS) create_sdk
|
||||
|
||||
override_dh_auto_install:
|
||||
mkdir -p debian/tmp/out
|
||||
cp -R dart/out/$(BUILD_TYPE)/dart-sdk debian/tmp/out
|
||||
mv debian/tmp/out/dart-sdk debian/tmp/out/dart
|
||||
dh_install
|
||||
dh_link
|
1
tools/linux_dist_support/debian/source/format
Normal file
1
tools/linux_dist_support/debian/source/format
Normal file
|
@ -0,0 +1 @@
|
|||
3.0 (quilt)
|
|
@ -339,6 +339,14 @@ def GetSVNRevision():
|
|||
if revision:
|
||||
return revision
|
||||
|
||||
# When building from tarball use tools/SVN_REVISION
|
||||
svn_revision_file = os.path.join(DART_DIR, 'tools', 'SVN_REVISION')
|
||||
try:
|
||||
with open(svn_revision_file) as fd
|
||||
return fd.read()
|
||||
except:
|
||||
pass
|
||||
|
||||
# Only fail on the buildbot in case of a SVN client version mismatch.
|
||||
user = GetUserName()
|
||||
if user != 'chrome-bot':
|
||||
|
|
Loading…
Reference in a new issue