mirror of
https://github.com/dart-lang/sdk
synced 2024-09-22 18:23:41 +00:00
c7d5711688
Cleans up Python Code in Build Tools TEST: build everything and run tests BUG: https://code.google.com/p/dart/issues/detail?id=19592 R=ricow@google.com Review URL: https://codereview.chromium.org//350483003 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38573 260f80e4-7a28-3924-810f-c04153c831b5
224 lines
5.9 KiB
Python
224 lines
5.9 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright (c) 2013, 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.
|
|
#
|
|
# A script which will be invoked from gyp to create a build of the editor.
|
|
#
|
|
# Usage: ./tools/create_editor.py
|
|
# [--mode <mode>] [--arch <arch>] [--out <output>] [--build <build>]
|
|
#
|
|
# DO NOT CALL THIS SCRIPT DIRECTLY, instead invoke:
|
|
# ./tools/build.py -mrelease editor
|
|
|
|
import glob
|
|
import optparse
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import utils
|
|
import zipfile
|
|
|
|
from os.path import join
|
|
|
|
OUTPUT = None
|
|
BUILD = None
|
|
|
|
OS_CONFIG = {
|
|
'win32': 'win32, win32',
|
|
'linux': 'linux, gtk',
|
|
'macos': 'macosx, cocoa'
|
|
}
|
|
|
|
ARCH_CONFIG = {
|
|
'ia32': 'x86',
|
|
'x64': 'x86_64'
|
|
}
|
|
|
|
def AntPath():
|
|
parent = join('third_party', 'apache_ant', '1.8.4', 'bin')
|
|
if utils.IsWindows():
|
|
return join(parent, 'ant.bat')
|
|
else:
|
|
return join(parent, 'ant')
|
|
|
|
|
|
def ProcessEditorArchive(arch, archive, outDir):
|
|
tempDir = join(GetEditorTemp(), 'editor.out')
|
|
try:
|
|
os.makedirs(tempDir)
|
|
except OSError:
|
|
# Directory already exists.
|
|
pass
|
|
|
|
if utils.IsWindows():
|
|
f = zipfile.ZipFile(archive)
|
|
f.extractall(tempDir)
|
|
f.close()
|
|
else:
|
|
subprocess.call(['unzip', '-q', archive, '-d', tempDir])
|
|
|
|
if arch == 'x64':
|
|
if utils.GuessOS() == 'macos':
|
|
inifile = join(tempDir, 'dart', 'DartEditor.app', 'Contents', 'MacOS',
|
|
'DartEditor.ini')
|
|
else:
|
|
inifile = join(tempDir, 'dart', 'DartEditor.ini')
|
|
Modify64BitDartEditorIni(inifile)
|
|
|
|
for src in glob.glob(join(tempDir, 'dart', '*')):
|
|
shutil.move(src, outDir)
|
|
|
|
shutil.rmtree(tempDir)
|
|
os.unlink(archive)
|
|
|
|
|
|
def Modify64BitDartEditorIni(iniFilePath):
|
|
f = open(iniFilePath, 'r')
|
|
lines = f.readlines()
|
|
f.close()
|
|
lines[lines.index('-Xms40m\n')] = '-Xms256m\n'
|
|
lines[lines.index('-Xmx1024m\n')] = '-Xmx2000m\n'
|
|
# Add -d64 to give better error messages to user in 64 bit mode.
|
|
lines[lines.index('-vmargs\n')] = '-vmargs\n-d64\n'
|
|
f = open(iniFilePath, 'w')
|
|
f.writelines(lines)
|
|
f.close()
|
|
|
|
|
|
def GetEditorTemp():
|
|
return join(BUILD, 'editor.build.temp')
|
|
|
|
|
|
def GetDownloadCache():
|
|
return GetEclipseBuildRoot()
|
|
|
|
|
|
def GetEclipseBuildRoot():
|
|
return join(BUILD, 'editor.build.cache')
|
|
|
|
|
|
def GetSdkPath():
|
|
return join(os.path.dirname(OUTPUT), 'dart-sdk')
|
|
|
|
|
|
def GetOutputParent():
|
|
return os.path.dirname(os.path.dirname(OUTPUT))
|
|
|
|
|
|
def BuildOptions():
|
|
options = optparse.OptionParser(usage='usage: %prog [options] <output>')
|
|
options.add_option("-m", "--mode", metavar='[debug,release]')
|
|
options.add_option("-a", "--arch", metavar='[ia32,x64]')
|
|
options.add_option("-o", "--out")
|
|
options.add_option("-b", "--build")
|
|
return options
|
|
|
|
|
|
def Main():
|
|
global OUTPUT
|
|
global BUILD
|
|
|
|
parser = BuildOptions()
|
|
(options, args) = parser.parse_args()
|
|
|
|
if args:
|
|
parser.print_help()
|
|
return 1
|
|
|
|
osName = utils.GuessOS()
|
|
mode = 'debug'
|
|
arch = utils.GuessArchitecture()
|
|
|
|
if not options.build:
|
|
print >> sys.stderr, 'Error: no --build option specified'
|
|
exit(1)
|
|
else:
|
|
BUILD = options.build
|
|
|
|
if not options.out:
|
|
print >> sys.stderr, 'Error: no --out option specified'
|
|
exit(1)
|
|
else:
|
|
# TODO(devoncarew): Currently we scrape the output path to determine the
|
|
# mode and arch. This is fragile and should moved into one location
|
|
# (utils.py?) or made more explicit.
|
|
OUTPUT = options.out
|
|
mode = ('release', 'debug')['Debug' in OUTPUT]
|
|
arch = ('ia32', 'x64')['X64' in OUTPUT]
|
|
|
|
# Use explicit mode and arch information.
|
|
if options.mode:
|
|
mode = options.mode
|
|
if options.arch:
|
|
arch = options.arch
|
|
|
|
OUTPUT = os.path.abspath(OUTPUT)
|
|
BUILD = os.path.abspath(BUILD)
|
|
|
|
print "\nBuilding the editor"
|
|
print " config : %s, %s, %s" % (osName, arch, mode)
|
|
print " output : %s" % OUTPUT
|
|
|
|
# Clean the editor output directory.
|
|
print '\ncleaning %s' % OUTPUT
|
|
shutil.rmtree(OUTPUT, True)
|
|
|
|
# These are the valid eclipse build configurations that we can produce.
|
|
# We synthesize these up from the OS_CONFIG and ARCH_CONFIG information.
|
|
# macosx, cocoa, x86 & macosx, cocoa, x86_64
|
|
# win32, win32, x86 & win32, win32, x86_64
|
|
# linux, gtk, x86 & linux, gtk, x86_64
|
|
|
|
buildConfig = OS_CONFIG[osName] + ', ' + ARCH_CONFIG[arch]
|
|
|
|
print "\ninvoking build_rcp.xml with buildConfig = [%s]\n" % buildConfig
|
|
|
|
sys.stdout.flush()
|
|
sys.stderr.flush()
|
|
|
|
buildScript = join('editor', 'tools', 'features',
|
|
'com.google.dart.tools.deploy.feature_releng',
|
|
'build_rcp.xml')
|
|
build_cmd = [AntPath(),
|
|
'-lib',
|
|
join('third_party', 'bzip2', 'bzip2.jar'),
|
|
'-Dbuild.out=' + OUTPUT,
|
|
'-Dbuild.configs=' + buildConfig,
|
|
'-Dbuild.root=' + GetEclipseBuildRoot(),
|
|
'-Dbuild.downloads=' + GetDownloadCache(),
|
|
'-Dbuild.source=' + os.path.abspath('editor'),
|
|
'-Dbuild.dart.sdk=' + GetSdkPath(),
|
|
'-Dbuild.no.properties=true',
|
|
'-Dbuild.channel=' + utils.GetChannel(),
|
|
'-Dbuild.revision=' + utils.GetSVNRevision(),
|
|
'-Dbuild.version.qualifier=' + utils.GetEclipseVersionQualifier(),
|
|
'-Ddart.version.full=' + utils.GetVersion(),
|
|
'-buildfile',
|
|
buildScript]
|
|
print build_cmd
|
|
buildRcpStatus = subprocess.call(build_cmd, shell=utils.IsWindows())
|
|
|
|
if buildRcpStatus != 0:
|
|
sys.exit(buildRcpStatus)
|
|
|
|
# build_rcp.xml will put the built editor archive in the OUTPUT directory
|
|
# (dart-editor-macosx.cocoa.x86.zip). It contains the editor application in a
|
|
# dart/ subdirectory. We unzip the contents of the archive into OUTPUT. It
|
|
# will use the ../dart-sdk directory as its SDK.
|
|
archives = glob.glob(join(OUTPUT, 'd*.zip'))
|
|
|
|
if archives:
|
|
ProcessEditorArchive(arch, archives[0], OUTPUT)
|
|
|
|
if os.path.exists(GetEditorTemp()):
|
|
shutil.rmtree(GetEditorTemp())
|
|
|
|
print('\nEditor build successful')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(Main())
|