From 0f15dd04afe2012f39bf899b66c6dbef4aa8bd6b Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 13 Feb 2015 13:05:51 +0800 Subject: [PATCH] Put compiled coffee sources into asar archive --- atom.gyp | 51 ++++++++++++++------------------ atom/common/node_bindings.cc | 2 +- tools/coffee2asar.py | 56 ++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 31 deletions(-) create mode 100755 tools/coffee2asar.py diff --git a/atom.gyp b/atom.gyp index 826248c54..84d80239b 100644 --- a/atom.gyp +++ b/atom.gyp @@ -625,40 +625,31 @@ { 'target_name': 'compile_coffee', 'type': 'none', - 'sources': [ - '<@(coffee_sources)', - ], - 'rules': [ + 'actions': [ { - 'rule_name': 'coffee', - 'extension': 'coffee', + 'action_name': 'compile_coffee', + 'variables': { + 'conditions': [ + ['OS=="mac"', { + 'resources_path': '<(PRODUCT_DIR)/<(product_name).app/Contents/Resources', + },{ + 'resources_path': '<(PRODUCT_DIR)/resources', + }], + ], + }, 'inputs': [ - 'tools/compile-coffee.py', + '<@(coffee_sources)', ], - 'conditions': [ - ['OS=="mac"', { - 'outputs': [ - '<(PRODUCT_DIR)/<(product_name).app/Contents/Resources/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).js', - ], - 'action': [ - 'python', - 'tools/compile-coffee.py', - '<(RULE_INPUT_PATH)', - '<(PRODUCT_DIR)/<(product_name).app/Contents/Resources/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).js', - ], - },{ # OS=="mac" - 'outputs': [ - '<(PRODUCT_DIR)/resources/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).js', - ], - 'action': [ - 'python', - 'tools/compile-coffee.py', - '<(RULE_INPUT_PATH)', - '<(PRODUCT_DIR)/resources/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).js', - ], - }], # OS=="win" or OS=="linux" + 'outputs': [ + '<(resources_path)/atom.asar', ], - }, + 'action': [ + 'python', + 'tools/coffee2asar.py', + '<@(_outputs)', + '<@(_inputs)', + ], + } ], }, # target compile_coffee { diff --git a/atom/common/node_bindings.cc b/atom/common/node_bindings.cc index 7e9c8ffdc..cd13a6551 100644 --- a/atom/common/node_bindings.cc +++ b/atom/common/node_bindings.cc @@ -169,7 +169,7 @@ node::Environment* NodeBindings::CreateEnvironment( exec_path.DirName().Append(FILE_PATH_LITERAL("resources")); #endif base::FilePath script_path = - resources_path.Append(FILE_PATH_LITERAL("atom")) + resources_path.Append(FILE_PATH_LITERAL("atom.asar")) .Append(is_browser_ ? FILE_PATH_LITERAL("browser") : FILE_PATH_LITERAL("renderer")) .Append(FILE_PATH_LITERAL("lib")) diff --git a/tools/coffee2asar.py b/tools/coffee2asar.py new file mode 100755 index 000000000..9581715f0 --- /dev/null +++ b/tools/coffee2asar.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +import os +import shutil +import subprocess +import sys +import tempfile + + +SOURCE_ROOT = os.path.dirname(os.path.dirname(__file__)) + + +def main(): + archive = sys.argv[1] + coffee_source_files = sys.argv[2:] + + output_dir = tempfile.mkdtemp() + compile_coffee(coffee_source_files, output_dir) + call_asar(archive, output_dir) + shutil.rmtree(output_dir) + + +def compile_coffee(coffee_source_files, output_dir): + for source_file in coffee_source_files: + output_filename = os.path.splitext(source_file)[0] + '.js' + output_path = os.path.join(output_dir, output_filename) + call_compile_coffee(source_file, output_path) + + +def call_compile_coffee(source_file, output_filename): + compile_coffee = os.path.join(SOURCE_ROOT, 'tools', 'compile-coffee.py') + subprocess.check_call([sys.executable, compile_coffee, source_file, + output_filename]) + + +def call_asar(archive, output_dir): + js_dir = os.path.join(output_dir, 'atom') + asar = os.path.join(SOURCE_ROOT, 'node_modules', 'asar', 'bin', 'asar') + subprocess.check_call([find_node(), asar, 'pack', js_dir, archive]) + + +def find_node(): + WINDOWS_NODE_PATHs = [ + 'C:/Program Files (x86)/nodejs', + 'C:/Program Files/nodejs', + ] + os.environ['PATH'].split(os.pathsep) + + if sys.platform in ['win32', 'cygwin']: + for path in WINDOWS_NODE_PATHs: + full_path = os.path.join(path, 'node.exe') + if os.path.exists(full_path): + return full_path + return 'node' + +if __name__ == '__main__': + sys.exit(main())