mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
96 lines
3.1 KiB
Python
96 lines
3.1 KiB
Python
# samba ASN1 rules
|
|
|
|
from TaskGen import before
|
|
import Build, os
|
|
from samba_utils import *
|
|
from samba_autoconf import *
|
|
|
|
|
|
def SAMBA_ASN1(bld, name, source,
|
|
options='',
|
|
directory='',
|
|
option_file=None,
|
|
includes=''):
|
|
'''Build a ASN1 file using the asn1 compiler.
|
|
This will produce 2 output files'''
|
|
bname = os.path.basename(source)[0:-5];
|
|
dname = os.path.dirname(source)
|
|
asn1name = "%s_asn1" % bname
|
|
|
|
if not SET_TARGET_TYPE(bld, name, 'ASN1'):
|
|
return
|
|
|
|
# for ASN1 compilation, I always put it in build_source, as it doesn't make
|
|
# sense elsewhere
|
|
bld.SET_BUILD_GROUP('build_source')
|
|
|
|
out_files = []
|
|
out_files.append("../heimdal/%s/asn1_%s_asn1.x" % (directory, bname))
|
|
out_files.append("../heimdal/%s/%s_asn1.hx" % (directory, bname))
|
|
|
|
# the ${TGT[0].parent.abspath(env)} expression gives us the parent directory of
|
|
# the first target in the build directory
|
|
# SRC[0].abspath(env) gives the absolute path to the source directory for the first
|
|
# source file. Note that in the case of a option_file, we have more than
|
|
# one source file
|
|
cd_rule = 'cd ${TGT[0].parent.abspath(env)}'
|
|
asn1_rule = cd_rule + ' && ${BLDBIN}/asn1_compile ${OPTION_FILE} ${ASN1OPTIONS} --one-code-file ${SRC[0].abspath(env)} ${ASN1NAME}'
|
|
|
|
source = TO_LIST(source)
|
|
source.append('asn1_compile')
|
|
|
|
if option_file is not None:
|
|
source.append(option_file)
|
|
|
|
t = bld(rule=asn1_rule,
|
|
ext_out = '.x',
|
|
before = 'cc',
|
|
shell = True,
|
|
source = source,
|
|
target = out_files,
|
|
name=name + '_ASN1')
|
|
|
|
t.env.ASN1NAME = asn1name
|
|
t.env.ASN1OPTIONS = options
|
|
t.env.BLDBIN = os.path.normpath(os.path.join(bld.srcnode.abspath(bld.env), '..'))
|
|
if option_file is not None:
|
|
t.env.OPTION_FILE = "--option-file=%s" % os.path.normpath(os.path.join(bld.curdir, option_file))
|
|
|
|
cfile = out_files[0][0:-2] + '.c'
|
|
hfile = out_files[1][0:-3] + '.h',
|
|
|
|
# now generate a .c file from the .x file
|
|
t = bld(rule='''( echo '#include "config.h"' && cat ${SRC} ) > ${TGT}''',
|
|
source = out_files[0],
|
|
target = cfile,
|
|
shell = True,
|
|
ext_out = '.c',
|
|
ext_in = '.x',
|
|
depends_on = name + '_ASN1',
|
|
name = name + '_C')
|
|
|
|
# and generate a .h file from the .hx file
|
|
t = bld(rule='cp ${SRC} ${TGT}',
|
|
source = out_files[1],
|
|
ext_out = '.c',
|
|
ext_in = '.x',
|
|
target = hfile,
|
|
depends_on = name + '_ASN1',
|
|
name = name + '_H')
|
|
|
|
bld.SET_BUILD_GROUP('main')
|
|
|
|
includes = TO_LIST(includes)
|
|
includes.append(os.path.dirname(out_files[0]))
|
|
|
|
t = bld(features = 'cc',
|
|
source = cfile,
|
|
target = name,
|
|
samba_cflags = CURRENT_CFLAGS(bld, name, ''),
|
|
depends_on = '',
|
|
samba_deps = TO_LIST('HEIMDAL_ROKEN'),
|
|
samba_includes = includes,
|
|
local_include = True)
|
|
|
|
Build.BuildContext.SAMBA_ASN1 = SAMBA_ASN1
|