talloc: release 2.4.2
[Samba.git] / examples / winexe / wscript_build
blob364683405c251c6b4c2c5d7c73c6dcd4bbefbb24
1 #!/usr/bin/env python
3 import samba_utils
5 def generate_winexesvc_c_from_exe(t):
6 '''generate a C source file with the contents of the given binary'''
7 src = t.inputs[0].bldpath(t.env)
8 tgt = t.outputs[0].bldpath(t.env)
9 fn = t.env.SAMBA_GENERATOR_VARS['WINEXE_FN']
11 try:
12 with open(src, 'rb') as f:
13 src_blob = f.read()
14 f.close()
15 except:
16 print('Failed to read %s to convert to C array' % (src))
17 return -1
19 def c_array(src):
20 N = 0
21 result = ''
22 while src:
23 l = src[:8]
24 src = src[8:]
25 # Even files opened in binary mode are read as type "str" in
26 # Python 2, so we need to get the integer ordinal of each
27 # character in the string before we try to convert it to hex.
28 if isinstance(l, str):
29 h = ' '.join(["0x%02X," % ord(x) for x in l])
30 # Files opened in binary mode are read as type "bytes" in
31 # Python 3, so we can convert each individual integer in the
32 # array of bytes to hex directly.
33 else:
34 h = ' '.join(["0x%02X," % x for x in l])
35 result += "\t\t%s\n" % (h)
36 return result
38 src_array = c_array(src_blob)
39 if len(src_array) <= 0:
40 print('Failed to convert %s to C array' % (src))
41 return -1
43 contents = '''
44 #include "replace.h"
45 #include "lib/util/data_blob.h"
47 const DATA_BLOB *%s(void);
48 const DATA_BLOB *%s(void)
50 \tstatic const uint8_t array[] = {
52 \t};
53 \tstatic const DATA_BLOB blob = {
54 \t\t.data = discard_const_p(uint8_t, array),
55 \t\t.length = ARRAY_SIZE(array),
56 \t};
57 \treturn &blob;
59 ''' % (fn, fn, src_array)
61 if not samba_utils.save_file(tgt, contents):
62 print('Failed to write C source file %s' % (tgt))
63 return -1
64 return 0
66 winexesvc_binaries = ''
68 bld.SAMBA_GENERATOR(
69 'winexesvc32_exe',
70 source='winexesvc.c',
71 target='winexesvc32.exe',
72 rule='${WINEXE_CC_WIN32} ${SRC} -o ${TGT} ${WINEXE_LDFLAGS}',
73 enabled=bld.env.build_winexe and bld.env.WINEXE_CC_WIN32)
75 vars = {"WINEXE_FN": "winexesvc32_exe_binary"}
76 bld.SAMBA_GENERATOR(
77 'winexesvc32_exe_binary',
78 source='winexesvc32.exe',
79 target='winexesvc32_exe_binary.c',
80 group='build_source',
81 vars=vars,
82 rule=generate_winexesvc_c_from_exe,
83 enabled=bld.env.build_winexe and bld.env.WINEXE_CC_WIN32)
85 if bld.env.WINEXE_CC_WIN32:
86 winexesvc_binaries += ' winexesvc32_exe_binary.c'
88 bld.SAMBA_GENERATOR(
89 'winexesvc64_exe',
90 source='winexesvc.c',
91 target='winexesvc64.exe',
92 rule='${WINEXE_CC_WIN64} ${SRC} -o ${TGT} ${WINEXE_LDFLAGS}',
93 enabled=bld.env.build_winexe and bld.env.WINEXE_CC_WIN64)
95 vars = {"WINEXE_FN": "winexesvc64_exe_binary"}
96 bld.SAMBA_GENERATOR(
97 'winexesvc64_exe_binary',
98 source='winexesvc64.exe',
99 target='winexesvc64_exe_binary.c',
100 group='build_source',
101 vars=vars,
102 rule=generate_winexesvc_c_from_exe,
103 enabled=bld.env.build_winexe and bld.env.WINEXE_CC_WIN64)
105 if bld.env.WINEXE_CC_WIN64:
106 winexesvc_binaries += ' winexesvc64_exe_binary.c'
108 if winexesvc_binaries != '':
109 bld.SAMBA3_BINARY('winexe',
110 source='winexe.c ' + winexesvc_binaries,
111 deps='''
112 CMDLINE_S3
113 samba-credentials
114 LOADPARM_CTX
115 libsmb
116 msrpc3
117 ''',
118 enabled=bld.env.build_winexe)