diff options
-rwxr-xr-x | emcc | 24 | ||||
-rwxr-xr-x | tests/runner.py | 19 |
2 files changed, 43 insertions, 0 deletions
@@ -174,6 +174,10 @@ Options that are modified or new in %s include: list of arguments, for example, <cmd> of "python processor.py" will cause a python script to be run. + --pre-js <file> A file whose contents are added before the + generated code + --post-js <file> A file whose contents are added after the + generated code --compress <on> 0: Do not compress the generated JavaScript's whitespace (default if closure compiler will not be run) @@ -324,6 +328,8 @@ try: llvm_opts = None closure = None js_transform = None + pre_js = None + post_js = None compress_whitespace = None embed_files = [] ignore_dynamic_linking = False @@ -355,6 +361,16 @@ try: js_transform = newargs[i+1] newargs[i] = '' newargs[i+1] = '' + elif newargs[i].startswith('--pre-js'): + check_bad_eq(newargs[i]) + pre_js = open(newargs[i+1]).read() + newargs[i] = '' + newargs[i+1] = '' + elif newargs[i].startswith('--post-js'): + check_bad_eq(newargs[i]) + post_js = open(newargs[i+1]).read() + newargs[i] = '' + newargs[i+1] = '' elif newargs[i].startswith('--compress'): check_bad_eq(newargs[i]) compress_whitespace = int(newargs[i+1]) @@ -700,6 +716,14 @@ try: open(final, 'w').write(src) if DEBUG: save_intermediate('embedded_files') + # Apply pre and postjs files + if pre_js or post_js: + if DEBUG: print >> sys.stderr, 'emcc: applying pre/postjses' + src = open(final).read() + final += '.pp.js' + open(final, 'w').write((pre_js or '') + src + (post_js or '')) + if DEBUG: save_intermediate('pre/post') + # Apply a source code transformation, if requested if js_transform: shutil.copyfile(final, final + '.tr.js') diff --git a/tests/runner.py b/tests/runner.py index 5d7345fd..3b295ed2 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -6199,6 +6199,25 @@ f.close() self.assertContained('*hello from lib\n|hello from lib|\n*', run_js(os.path.join(self.get_dir(), 'a.out.js'))) + def test_emcc_js_link(self): + open(os.path.join(self.get_dir(), 'main.cpp'), 'w').write(''' + #include <stdio.h> + int main() { + printf("hello from main\\n"); + return 0; + } + ''') + open(os.path.join(self.get_dir(), 'before.js'), 'w').write(''' + var MESSAGE = 'hello from js'; + if (typeof Module != 'undefined') throw 'This code should run before anything else!'; + ''') + open(os.path.join(self.get_dir(), 'after.js'), 'w').write(''' + print(MESSAGE); + ''') + + Popen([EMCC, os.path.join(self.get_dir(), 'main.cpp'), '--pre-js', 'before.js', '--post-js', 'after.js']).communicate() + self.assertContained('hello from main\nhello from js\n', run_js(os.path.join(self.get_dir(), 'a.out.js'))) + def test_eliminator(self): input = open(path_from_root('tools', 'eliminator', 'eliminator-test.js')).read() expected = open(path_from_root('tools', 'eliminator', 'eliminator-test-output.js')).read() |