summaryrefslogtreecommitdiff
path: root/examples/winexe/wscript_build
blob: ecad3772461b8d3d69b9f3ea0dbce699acda2107 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python

import samba_utils

def generate_winexesvc_c_from_exe(t):
    src = t.inputs[0].bldpath(t.env)
    tgt = t.outputs[0].bldpath(t.env)
    fn = t.env.SAMBA_GENERATOR_VARS['WINEXE_FN']
    src_blob = samba_utils.load_file(src)

    def c_array(src):
        N = 0
        result = ''
        while src:
            l = src[:8]
            src = src[8:]
            h = ' '.join(["0x%02X," % ord(x) for x in l])
            result += "\t\t%s\n" % (h)
        return result

    src_array = c_array(src_blob)

    contents = '''
#include "replace.h"
#include "lib/util/data_blob.h"

const DATA_BLOB *%s(void);
const DATA_BLOB *%s(void)
{
\tstatic const uint8_t array[] = {
%s
\t};
\tstatic const DATA_BLOB blob = {
\t\t.data = discard_const_p(uint8_t, array),
\t\t.length = ARRAY_SIZE(array),
\t};
\treturn &blob;
}
''' % (fn, fn, src_array)

    ret = samba_utils.save_file(tgt, contents)
    assert(ret == True)

winexesvc_binaries = ''

if bld.env.WINEXE_CC_WIN32:
    bld.SAMBA_GENERATOR(
        'winexesvc32_exe',
        source='winexesvc.c',
        target='winexesvc32.exe',
        rule='${WINEXE_CC_WIN32} ${SRC} -o ${TGT} ${WINEXE_LDFLAGS}')
    vars = {"WINEXE_FN": "winexesvc32_exe_binary"}
    bld.SAMBA_GENERATOR(
        'winexesvc32_exe_binary',
        source='winexesvc32.exe',
        target='winexesvc32_exe_binary.c',
        group='build_source',
        vars=vars,
        rule=generate_winexesvc_c_from_exe)
    winexesvc_binaries += ' winexesvc32_exe_binary.c'

if bld.env.WINEXE_CC_WIN64:
    bld.SAMBA_GENERATOR(
        'winexesvc64_exe',
        source='winexesvc.c',
        target='winexesvc64.exe',
        rule='${WINEXE_CC_WIN64} ${SRC} -o ${TGT} ${WINEXE_LDFLAGS}')
    vars = {"WINEXE_FN": "winexesvc64_exe_binary"}
    bld.SAMBA_GENERATOR(
        'winexesvc64_exe_binary',
        source='winexesvc64.exe',
        target='winexesvc64_exe_binary.c',
        group='build_source',
        vars=vars,
        rule=generate_winexesvc_c_from_exe)
    winexesvc_binaries += ' winexesvc64_exe_binary.c'

if winexesvc_binaries != '':
    bld.SAMBA3_BINARY('winexe',
                      source='winexe.c ' + winexesvc_binaries,
                      deps='''
                          popt
                          samba-credentials
                          LOADPARM_CTX
                          libsmb
                          msrpc3
                      ''')