s4-waf: merge in the latest changes from master
[samba.git] / buildtools / wafsamba / samba_asn1.py
1 # samba ASN1 rules
2
3 from TaskGen import before
4 import Build, os
5 from samba_utils import *
6 from samba_autoconf import *
7
8
9 def SAMBA_ASN1(bld, name, source,
10                options='',
11                directory='',
12                option_file=None,
13                includes=''):
14     '''Build a ASN1 file using the asn1 compiler.
15        This will produce 2 output files'''
16     bname = os.path.basename(source)[0:-5];
17     dname = os.path.dirname(source)
18     asn1name = "%s_asn1" % bname
19
20     if not SET_TARGET_TYPE(bld, name, 'ASN1'):
21         return
22
23     # for ASN1 compilation, I always put it in build_source, as it doesn't make
24     # sense elsewhere
25     bld.SET_BUILD_GROUP('build_source')
26
27     out_files = []
28     out_files.append("../heimdal/%s/asn1_%s_asn1.x" % (directory, bname))
29     out_files.append("../heimdal/%s/%s_asn1.hx" % (directory, bname))
30     out_files.append("../heimdal/%s/%s_asn1-priv.hx" % (directory, bname))
31
32     # the ${TGT[0].parent.abspath(env)} expression gives us the parent directory of
33     # the first target in the build directory
34     # SRC[0].abspath(env) gives the absolute path to the source directory for the first
35     # source file. Note that in the case of a option_file, we have more than
36     # one source file
37     cd_rule = 'cd ${TGT[0].parent.abspath(env)}'
38     asn1_rule = cd_rule + ' && ${BLDBIN}/asn1_compile ${OPTION_FILE} ${ASN1OPTIONS} --one-code-file ${SRC[0].abspath(env)} ${ASN1NAME}'
39
40     source = TO_LIST(source)
41     source.append('asn1_compile')
42
43     if option_file is not None:
44         source.append(option_file)
45
46     t = bld(rule=asn1_rule,
47             ext_out = '.x',
48             before = 'cc',
49             on_results = True,
50             shell = True,
51             source = source,
52             target = out_files,
53             name=name + '_ASN1')
54
55     t.env.ASN1NAME     = asn1name
56     t.env.ASN1OPTIONS  = options
57     t.env.BLDBIN       = os.path.normpath(os.path.join(bld.srcnode.abspath(bld.env), '..'))
58     if option_file is not None:
59         t.env.OPTION_FILE = "--option-file=%s" % os.path.normpath(os.path.join(bld.curdir, option_file))
60
61     cfile = out_files[0][0:-2] + '.c'
62     hfile = out_files[1][0:-3] + '.h',
63     hpriv = out_files[2][0:-3] + '.h',
64
65     # now generate a .c file from the .x file
66     t = bld(rule='''( echo '#include "config.h"' && cat ${SRC} ) > ${TGT}''',
67             source = out_files[0],
68             target = cfile,
69             shell = True,
70             on_results=True,
71             ext_out = '.c',
72             ext_in = '.x',
73             depends_on = name + '_ASN1',
74             name = name + '_C')
75
76     # and generate a .h file from the .hx file
77     t = bld(rule='cp ${SRC} ${TGT}',
78             source = out_files[1],
79             ext_out = '.c',
80             ext_in = '.x',
81             on_results=True,
82             target = hfile,
83             depends_on = name + '_ASN1',
84             name = name + '_H')
85
86     # and generate a .h file from the .hx file
87     t = bld(rule='cp ${SRC} ${TGT}',
88             source = out_files[2],
89             ext_out = '.c',
90             ext_in = '.x',
91             on_results=True,
92             target = hpriv,
93             depends_on = name + '_ASN1',
94             name = name + '_PRIV_H')
95
96     bld.SET_BUILD_GROUP('main')
97
98     includes = TO_LIST(includes)
99     includes.append(os.path.dirname(out_files[0]))
100
101     t = bld(features       = 'cc',
102             source         = cfile,
103             target         = name,
104             samba_cflags   = CURRENT_CFLAGS(bld, name, ''),
105             depends_on     = '',
106             samba_deps     = TO_LIST('HEIMDAL_ROKEN'),
107             samba_includes = includes,
108             local_include  = True)
109
110 Build.BuildContext.SAMBA_ASN1 = SAMBA_ASN1