blob: 90239cf17e6d685d3a2cc0e1b1f0c6d4c4dfd65b [file] [log] [blame]
#!/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.
import StringIO
import os
import sys
from os.path import join
def _print_gypi_files(out, name, files):
out.write(" '%s': [\n" % name)
for filename in files:
out.write(''' r'%s',%s''' % (filename, '\n'))
out.write(" ],\n")
def _close(file_name, output):
if not isinstance(output, StringIO.StringIO):
output.close()
return
new_text = output.getvalue()
output.close()
with open(file_name, 'r') as f:
old_text = f.read()
if old_text == new_text:
return
with open(file_name, 'w') as f:
f.write(new_text)
def _make_output(fileName):
if os.path.exists(fileName):
return StringIO.StringIO()
else:
return file(fileName, 'w')
def GenerateGypiFile(sources, outputFile):
gypi = _make_output(outputFile)
gypi.write("{\n 'variables': {\n")
_print_gypi_files(gypi, 'sources', sources)
gypi.write(" },\n}\n")
_close(outputFile, gypi)
def _list_sources(path, extension):
sources = []
for fullpath, dirs, filenames in os.walk(path):
# Skip directories that start with a dot, such as ".svn".
remove_me = [d for d in dirs if d.startswith('.')]
for d in remove_me:
dirs.remove(d)
for filename in filenames:
if (filename.endswith(extension)):
sources.append(os.path.relpath(join(fullpath, filename),
start='editor/build/generated/'))
sources.sort()
return sources
def _list_pkgs(path):
result = None
for dirpath, dirnames, filenames in os.walk(path):
result = dirnames[:] # Copy array.
del dirnames[:] # Stop recursion by clearing array.
return result
def _split_sources(path, extension):
result = []
count = 100
segment = -1
sources = None
for source in _list_sources(path, extension):
if count == 100:
count = 0
segment += 1
sources = []
result.append(('chunk%s' % segment, sources))
sources.append(source)
count += 1
return result
def _print_pkg_action(pkg, out):
print >> out, """
{
'includes': [
'%(pkg)s_sources.gypi',
],
'action_name': '%(pkg)s_action',
'inputs': [
'%(pkg)s_sources.gypi',
'<@(sources)',
],
'outputs': [
'<(SHARED_INTERMEDIATE_DIR)/editor_deps/%(pkg)s.stamp',
],
'action': [
'python',
'../../../tools/create_timestamp_file.py',
'<@(_outputs)',
],
'message': 'Creating %(pkg)s time stamp.',
},
""" % {'pkg':pkg}
def Main(argv):
# move up to the parent 'dart' directory
base_directory = join(os.path.dirname(argv[0]), '..', '..')
os.chdir(base_directory)
pkg_dir = join('editor', 'tools', 'plugins')
out_dir = join('editor', 'build', 'generated')
if not os.path.exists(out_dir):
os.mkdir(out_dir)
with open(join(out_dir, 'editor_deps.gyp'), 'w') as gyp:
stamps = []
print >> gyp, """
{
'targets': [
{
'target_name': 'editor_deps',
'type': 'none',
'actions': ["""
for pkg, sources in _split_sources(pkg_dir, '.java'):
GenerateGypiFile(sources, join(out_dir, '%s_sources.gypi' % pkg))
_print_pkg_action(pkg, gyp)
stamps.append("'<(SHARED_INTERMEDIATE_DIR)/editor_deps/%s.stamp'" % pkg)
print >> gyp, """
{
'action_name': 'editor_stamp_action',
'inputs': [
%s,
],
'outputs': [
'<(SHARED_INTERMEDIATE_DIR)/editor_deps/editor.stamp',
],
'action': [
'python',
'../../../tools/create_timestamp_file.py',
'<@(_outputs)',
],
'message': 'Creating editor time stamp.',
},
],
},
],
}
""" % (",\n".join(stamps))
if __name__ == '__main__':
sys.exit(Main(sys.argv))