aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-05-23 18:25:54 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-05-23 18:25:54 -0700
commit2f8ca9a8c98cd77c57a5fff49874f64f67a1df55 (patch)
treeb633a61ccb611a89133b9f773c14cd75094f93a2
parent41ea37201c7b0c2aaec8631a09c7754b36a83d4c (diff)
properly expand response files in EXPORTED_FUNCTIONS, which is used before compiler.js
-rwxr-xr-xtests/runner.py22
-rw-r--r--tools/shared.py7
2 files changed, 28 insertions, 1 deletions
diff --git a/tests/runner.py b/tests/runner.py
index a6b90f8d..335d7d4b 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -8620,6 +8620,28 @@ def process(filename):
shutil.move(self.in_dir('src.cpp.o.js'), self.in_dir('pgoed2.js'))
assert open('pgoed.js').read() == open('pgoed2.js').read()
+ def test_exported_response(self):
+ if self.emcc_args is None: return self.skip('requires emcc')
+
+ src = r'''
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ extern "C" {
+ int other_function() { return 5; }
+ }
+
+ int main() {
+ printf("waka!\n");
+ return 0;
+ }
+ '''
+ open('exps', 'w').write('["_main","_other_function"]')
+
+ self.emcc_args += ['-s', 'EXPORTED_FUNCTIONS=@exps']
+ self.do_run(src, '''waka!''')
+ assert 'other_function' in open('src.cpp.o.js').read()
+
def test_add_function(self):
if self.emcc_args is None: return self.skip('requires emcc')
diff --git a/tools/shared.py b/tools/shared.py
index 321fa073..dd448b31 100644
--- a/tools/shared.py
+++ b/tools/shared.py
@@ -631,6 +631,11 @@ def unique_ordered(values): # return a list of unique values in an input list, w
return True
return filter(check, values)
+def expand_response(data):
+ if type(data) == str and data[0] == '@':
+ return json.loads(open(data[1:]).read())
+ return data
+
# Settings. A global singleton. Not pretty, but nicer than passing |, settings| everywhere
class Settings:
@@ -1097,7 +1102,7 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' % { 'winfix': '' if not WINDOWS e
@staticmethod
def get_safe_internalize():
- exports = ','.join(map(lambda exp: exp[1:], Settings.EXPORTED_FUNCTIONS))
+ exports = ','.join(map(lambda exp: exp[1:], expand_response(Settings.EXPORTED_FUNCTIONS)))
# internalize carefully, llvm 3.2 will remove even main if not told not to
return ['-internalize', '-internalize-public-api-list=' + exports]