Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(409)

Unified Diff: runtime/tools/create_archive.py

Issue 1411853003: Service isolate requests Observatory assets from embedder (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/vmservice_patch.dart ('k') | runtime/vm/bootstrap_natives.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/tools/create_archive.py
diff --git a/runtime/tools/create_archive.py b/runtime/tools/create_archive.py
new file mode 100644
index 0000000000000000000000000000000000000000..dcb6a9008a06e0d7b01198b42cfdc18a7d675b02
--- /dev/null
+++ b/runtime/tools/create_archive.py
@@ -0,0 +1,140 @@
+# Copyright (c) 2015, 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.
+#
+# This python script creates a tar archive and a C++ source file which contains
+# the tar archive as an array of bytes.
+
+import os
+import sys
+from os.path import join, splitext
+import time
+from optparse import OptionParser
+from datetime import date
+import tarfile
+import tempfile
+
+def makeArchive(tar_path, client_root, files):
+ tar = tarfile.open(tar_path, mode='w')
+ for input_file_name in files:
+ # Chop off client_root.
+ archive_file_name = input_file_name[ len(client_root) : ]
+ # Open input file and add it to the archive.
+ with open(input_file_name, 'rb') as input_file:
+ tarInfo = tarfile.TarInfo(name=archive_file_name)
+ input_file.seek(0,2)
+ tarInfo.size = input_file.tell()
+ input_file.seek(0)
+ tar.addfile(tarInfo, fileobj=input_file)
+ tar.close()
+
+def writeCCFile(output_file,
+ outer_namespace,
+ inner_namespace,
+ name,
+ tar_archive,
+ ):
+ cc_text = '''
+// Copyright (c) %d, 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.
+
+''' % date.today().year
+ cc_text += 'namespace %s {\n' % outer_namespace
+ if inner_namespace != None:
+ cc_text += 'namespace %s {\n' % inner_namespace
+ cc_text += '\n\n'
+ # Write the archive.
+ cc_text += 'static const char %s_[] = {\n ' % name
+ lineCounter = 0
+ for byte in tar_archive:
+ cc_text += r" '\x%02x'," % ord(byte)
+ lineCounter += 1
+ if lineCounter == 10:
+ cc_text += '\n '
+ lineCounter = 0
+ if lineCounter != 0:
+ cc_text += '\n '
+ cc_text += '};\n'
+ cc_text += '\nunsigned int %s_len = %d;\n' % (name, len(tar_archive))
+ cc_text += '\nconst char* %s = %s_;\n' % (name, name)
+ if inner_namespace != None:
+ cc_text += '} // namespace %s\n' % inner_namespace
+ cc_text += '} // namespace %s\n' % outer_namespace
+
+ open(output_file, 'w').write(cc_text)
+
+def main(args):
+ try:
+ # Parse input.
+ parser = OptionParser()
+ parser.add_option("--output",
+ action="store", type="string",
+ help="output file name")
+ parser.add_option("--tar_output",
+ action="store", type="string",
+ help="tar output file name")
+ parser.add_option("--outer_namespace",
+ action="store", type="string",
+ help="outer C++ namespace",
+ default="dart")
+ parser.add_option("--inner_namespace",
+ action="store", type="string",
+ help="inner C++ namespace",
+ default="bin")
+ parser.add_option("--name",
+ action="store", type="string",
+ help="name of tar archive symbol")
+ parser.add_option("--client_root",
+ action="store", type="string",
+ help="root directory client resources")
+
+ (options, args) = parser.parse_args()
+ if not options.output:
+ sys.stderr.write('--output not specified\n')
+ return -1
+ if not options.tar_output:
+ sys.stderr.write('--tar_output not specified\n')
+ return -1
+ if not options.name:
+ sys.stderr.write('--name not specified\n')
+ return -1
+ if not options.client_root:
+ sys.stderr.write('--client_root not specified')
+ return -1
+
+ files = [ ]
+
+ for dirname, dirnames, filenames in os.walk(options.client_root):
+ # strip out all dot files.
+ filenames = [f for f in filenames if not f[0] == '.']
+ dirnames[:] = [d for d in dirnames if not d[0] == '.']
+ for f in filenames:
+ src_path = os.path.join(dirname, f)
+ if (os.path.isdir(src_path)):
+ continue
+ files.append(src_path)
+
+ # Write out archive.
+ makeArchive(options.tar_output, options.client_root, files)
+
+ # Read it back in.
+ with open(options.tar_output, 'rb') as tar_file:
+ tar_archive = tar_file.read()
+
+ # Write CC file.
+ writeCCFile(options.output,
+ options.outer_namespace,
+ options.inner_namespace,
+ options.name,
+ tar_archive)
+ return 0
+
+ except Exception, inst:
+ sys.stderr.write('create_resources.py exception\n')
+ sys.stderr.write(str(inst))
+ sys.stderr.write('\n')
+ return -1
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
« no previous file with comments | « runtime/lib/vmservice_patch.dart ('k') | runtime/vm/bootstrap_natives.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698