浏览代码

Merge pull request #17836 from eska014/detect-emconfig

Detect and configure JavaScript build per Emscripten configuration file
Rémi Verschelde 7 年之前
父节点
当前提交
3ef85ddb8d
共有 1 个文件被更改,包括 15 次插入5 次删除
  1. 15 5
      platform/javascript/detect.py

+ 15 - 5
platform/javascript/detect.py

@@ -12,7 +12,7 @@ def get_name():
 
 
 def can_build():
-    return 'EMSCRIPTEN_ROOT' in os.environ or 'EMSCRIPTEN' in os.environ
+    return 'EM_CONFIG' in os.environ or os.path.exists(os.path.expanduser('~/.emscripten'))
 
 
 def get_opts():
@@ -67,10 +67,20 @@ def configure(env):
     ## Compiler configuration
 
     env['ENV'] = os.environ
-    if 'EMSCRIPTEN_ROOT' in os.environ:
-        env.PrependENVPath('PATH', os.environ['EMSCRIPTEN_ROOT'])
-    elif 'EMSCRIPTEN' in os.environ:
-        env.PrependENVPath('PATH', os.environ['EMSCRIPTEN'])
+
+    em_config_file = os.getenv('EM_CONFIG') or os.path.expanduser('~/.emscripten')
+    if not os.path.exists(em_config_file):
+        raise RuntimeError("Emscripten configuration file '%s' does not exist" % em_config_file)
+    with open(em_config_file) as f:
+        em_config = {}
+        try:
+            # Emscripten configuration file is a Python file with simple assignments.
+            exec(f.read(), em_config)
+        except StandardError as e:
+            raise RuntimeError("Emscripten configuration file '%s' is invalid:\n%s" % (em_config_file, e))
+    if 'EMSCRIPTEN_ROOT' not in em_config:
+        raise RuntimeError("'EMSCRIPTEN_ROOT' missing in Emscripten configuration file '%s'" % em_config_file)
+    env.PrependENVPath('PATH', em_config['EMSCRIPTEN_ROOT'])
 
     env['CC'] = 'emcc'
     env['CXX'] = 'em++'