ctdb-daemon: Use ctdb_parse_node_address() in ctdbd
[samba4-gss.git] / third_party / waf / waflib / extras / c_emscripten.py
blobe1ac494f4484fa8325107fa79440dc558249214d
1 #!/usr/bin/env python
2 # -*- coding: utf-8 vi:ts=4:noexpandtab
4 import subprocess, shlex, sys
6 from waflib.Tools import ccroot, gcc, gxx
7 from waflib.Configure import conf
8 from waflib.TaskGen import after_method, feature
10 from waflib.Tools.compiler_c import c_compiler
11 from waflib.Tools.compiler_cxx import cxx_compiler
13 for supported_os in ('linux', 'darwin', 'gnu', 'aix'):
14 c_compiler[supported_os].append('c_emscripten')
15 cxx_compiler[supported_os].append('c_emscripten')
18 @conf
19 def get_emscripten_version(conf, cc):
20 """
21 Emscripten doesn't support processing '-' like clang/gcc
22 """
24 dummy = conf.cachedir.parent.make_node("waf-emscripten.c")
25 dummy.write("")
26 cmd = cc + ['-dM', '-E', '-x', 'c', dummy.abspath()]
27 env = conf.env.env or None
28 try:
29 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
30 out = p.communicate()[0]
31 except Exception as e:
32 conf.fatal('Could not determine emscripten version %r: %s' % (cmd, e))
34 if not isinstance(out, str):
35 out = out.decode(sys.stdout.encoding or 'latin-1')
37 k = {}
38 out = out.splitlines()
39 for line in out:
40 lst = shlex.split(line)
41 if len(lst)>2:
42 key = lst[1]
43 val = lst[2]
44 k[key] = val
46 if not ('__clang__' in k and 'EMSCRIPTEN' in k):
47 conf.fatal('Could not determine the emscripten compiler version.')
49 conf.env.DEST_OS = 'generic'
50 conf.env.DEST_BINFMT = 'elf'
51 conf.env.DEST_CPU = 'asm-js'
52 conf.env.CC_VERSION = (k['__clang_major__'], k['__clang_minor__'], k['__clang_patchlevel__'])
53 return k
55 @conf
56 def find_emscripten(conf):
57 cc = conf.find_program(['emcc'], var='CC')
58 conf.get_emscripten_version(cc)
59 conf.env.CC = cc
60 conf.env.CC_NAME = 'emscripten'
61 cxx = conf.find_program(['em++'], var='CXX')
62 conf.env.CXX = cxx
63 conf.env.CXX_NAME = 'emscripten'
64 conf.find_program(['emar'], var='AR')
66 def configure(conf):
67 conf.find_emscripten()
68 conf.find_ar()
69 conf.gcc_common_flags()
70 conf.gxx_common_flags()
71 conf.cc_load_tools()
72 conf.cc_add_flags()
73 conf.cxx_load_tools()
74 conf.cxx_add_flags()
75 conf.link_add_flags()
76 conf.env.ARFLAGS = ['rcs']
77 conf.env.cshlib_PATTERN = '%s.js'
78 conf.env.cxxshlib_PATTERN = '%s.js'
79 conf.env.cstlib_PATTERN = '%s.a'
80 conf.env.cxxstlib_PATTERN = '%s.a'
81 conf.env.cprogram_PATTERN = '%s.html'
82 conf.env.cxxprogram_PATTERN = '%s.html'
83 conf.env.CXX_TGT_F = ['-c', '-o', '']
84 conf.env.CC_TGT_F = ['-c', '-o', '']
85 conf.env.CXXLNK_TGT_F = ['-o', '']
86 conf.env.CCLNK_TGT_F = ['-o', '']
87 conf.env.append_value('LINKFLAGS',['-Wl,--enable-auto-import'])