fbde72ddd583078ef1d6230480b1b126f86dc4a5
[bbaumbach/samba-autobuild/.git] / source4 / build / scons / pidl.py
1 """SCons.Tool.pidl
2
3 Tool-specific initialization for pidl (Perl-based IDL compiler)
4
5 """
6
7 import SCons.Defaults
8 import SCons.Util
9 import SCons.Scanner
10
11 idl_scanner = SCons.Scanner.ClassicCPP("PIDLScan", '.idl', 'CPPPATH', r'depends\(([^,]+),+\)', SCons.Node.FS.default_fs)
12
13 def idl_emitter(target, source, env):
14         base, ext = SCons.Util.splitext(str(source[0]))
15         result = ['gen_ndr/ndr_%s.c' % base, 'gen_ndr/ndr_%s.h' % base]
16         return result, source
17
18 pidl_builder = SCons.Builder.Builder(action='$PIDLCOM',
19                                      emitter = idl_emitter,
20                                      src_suffix = '.idl',
21                                      suffix='.c',
22                                      scanner = idl_scanner)
23
24 def generate(env):
25         env['PIDL']          = env.Detect('pidl') or './pidl/pidl'
26         env['PIDLFLAGS']     = ['--outputdir', 'librpc/gen_ndr', '--ndr-header', '--ndr-parser']
27         env['PIDLCOM']       = '$PIDL $PIDLFLAGS -- $SOURCE'
28         env['BUILDERS']['NdrMarshaller'] = pidl_builder
29
30 def exists(env):
31         return env.Detect(['./pidl/pidl','pidl'])