From 391f953c586d16271d6b2fbba38023e686c907a1 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 24 Feb 2010 17:39:23 +1100 Subject: build: added build groups --- lib/replace/wafsamba.py | 118 ++++++++++++++++++++++++++++-------------------- source4/wscript_build | 5 ++ 2 files changed, 75 insertions(+), 48 deletions(-) diff --git a/lib/replace/wafsamba.py b/lib/replace/wafsamba.py index 82dd174f9b..cb0f40cb70 100644 --- a/lib/replace/wafsamba.py +++ b/lib/replace/wafsamba.py @@ -424,6 +424,7 @@ def SAMBA_LIBRARY(bld, libname, source_list, ilist = bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + bld.SUBDIR(bld.curdir, include_list) ilist = bld.NORMPATH(ilist) + bld.SET_BUILD_GROUP('main') bld( features = 'cc cshlib', source = source_list, @@ -431,6 +432,7 @@ def SAMBA_LIBRARY(bld, libname, source_list, uselib_local = localdeps, uselib = sysdeps, add_objects = add_objects, + ccflags = CURRENT_CFLAGS(bld, cflags), includes='. ' + bld.env['BUILD_DIRECTORY'] + '/default ' + ilist, vnum=vnum) @@ -438,6 +440,7 @@ def SAMBA_LIBRARY(bld, libname, source_list, soext="" if vnum is not None: soext = '.' + vnum.split('.')[0] + bld.SET_BUILD_GROUP('final') bld( source = 'lib%s.so' % libname, rule = 'ln -sf ../${SRC}%s %s/lib%s.so%s' % @@ -459,14 +462,14 @@ def SAMBA_BINARY(bld, binname, source_list, modules=None, installdir=None, ldflags=None, - cflags=None, + cflags='', autoproto=None, use_hostcc=None, compiler=None, + group='main', manpages=None): ilist = '. ' + bld.env['BUILD_DIRECTORY'] + '/default ' + bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + ' ' + include_list ilist = bld.NORMPATH(ilist) - ccflags = '' if not SET_TARGET_TYPE(bld, binname, 'BINARY'): return @@ -478,8 +481,9 @@ def SAMBA_BINARY(bld, binname, source_list, for m in modules.split(): bld.ASSERT(m in cache, "No init_function defined for module '%s' in binary '%s'" % (m, binname)) - ccflags += ' -DSTATIC_%s_MODULES="%s"' % (m, cache[m]) + cflags += ' -DSTATIC_%s_MODULES="%s"' % (m, cache[m]) + bld.SET_BUILD_GROUP(group) bld( features = 'cc cprogram', source = source_list, @@ -487,7 +491,7 @@ def SAMBA_BINARY(bld, binname, source_list, uselib_local = localdeps, uselib = sysdeps, includes = ilist, - ccflags = ccflags, + ccflags = CURRENT_CFLAGS(bld, cflags), add_objects = add_objects, top=True) # put a link to the binary in bin/ @@ -517,18 +521,19 @@ def SAMBA_PYTHON(bld, name, source_list, Build.BuildContext.SAMBA_PYTHON = SAMBA_PYTHON -################################################################### -# declare the ASN1 build pattern -@runonce -def SAMBA_ASN1_PATTERN(bld): - bld( - name = 'asn1_compile', - rule = 'echo ASN1_COMPILE ${SRC} > {$TGT}', - shall = True, - ext_in = '.asn1', - ext_out = '.c', - reentrant = True, - install = False) +################################################################################ +# a dummy asn1 task, that actually just copies the asn1 file to a .c and .h file +Task.simple_task_type('asn1', + '../heimdal_build/asn1_compile_wrapper.sh \$(builddir) $dirname \$(ASN1C) \$(call abspath,\$(heimdalsrcdir)/$file) $prefix $options', + color='BLUE', ext_out='.c', + shell = True) + +@extension('.asn1') +def process_asn1(self, node): + cc_node = node.change_ext('.c') + h_node = node.change_ext('.h') + self.create_task('asn1', node, [cc_node, h_node]) + self.allnodes.append(cc_node) ################################################################# @@ -536,25 +541,14 @@ def SAMBA_ASN1_PATTERN(bld): def SAMBA_ASN1(bld, name, source, options='', directory=''): - import string - if not SET_TARGET_TYPE(bld, name, 'ASN1'): return - - cfile = string.replace(source, '.asn1', '.c') - - # declare the pattern rule - SAMBA_ASN1_PATTERN(bld) - - bld(source=source) - + debug("runner: SAMBA_ASN1 name='%s' source='%s'" % (name, source)) bld( - features = 'cc cshlib', - source = cfile, - target = name, - uselib = '', - after = 'asn1_compile' - ) + features = 'cc', + source = source, + target = name + ) Build.BuildContext.SAMBA_ASN1 = SAMBA_ASN1 @@ -576,22 +570,30 @@ def SAMBA_ERRTABLE(bld, name, source, Build.BuildContext.SAMBA_ERRTABLE = SAMBA_ERRTABLE +from TaskGen import extension +Task.simple_task_type('idl', '../../pidl/pidl --header --ndr-parser --server --client --python --dcom-proxy --com-header -- ${SRC}', color='BLUE', ext_out='.c') + +@extension('.idl') +def process_idl(self, node): + c_node = node.change_ext('.c') + h_node = node.change_ext('.h') + self.create_task('idl', node, [c_node, h_node]) + + # reinject the c node to the list of nodes to process + self.allnodes.append(c_node) + ################################################################# # define a PIDL target def SAMBA_PIDL(bld, directory, source): pidl = "../../pidl/pidl" idl_dir = os.path.dirname(source) base = os.path.basename(string.replace(source, '.idl', '')) - rule = "pidl --outputdir %s --header --ndr-parser --server --client --python --dcom-proxy --com-header --includedir %s -- %s" % (directory, idl_dir, source) + rule = "%s --outputdir %s --header --ndr-parser --server --client --python --dcom-proxy --com-header --includedir %s -- %s" % (pidl, directory, idl_dir, source) output = '%s/ndr_%s.c' % (directory, base) tname = 'PIDL_%s' % base.upper() bld( - rule = rule, - source = source, - target = output, - name = 'pidl_compile' - ) - + features = 'cc', + source = source) Build.BuildContext.SAMBA_PIDL = SAMBA_PIDL @@ -608,6 +610,7 @@ Build.BuildContext.SAMBA_PIDL_LIST = SAMBA_PIDL_LIST # build a C prototype file automatically def AUTOPROTO(bld, header, source_list): if header is not None: + bld.SET_BUILD_GROUP('prototypes') bld( source = source_list, target = header, @@ -625,7 +628,7 @@ def SAMBA_MODULE(bld, modname, source_list, init_function=None, autoproto=None, aliases=None, - cflags=None, + cflags='', output_type=None): if not SET_TARGET_TYPE(bld, modname, 'MODULE'): @@ -640,14 +643,12 @@ def SAMBA_MODULE(bld, modname, source_list, ilist = bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + bld.SUBDIR(bld.curdir, include_list) ilist = bld.NORMPATH(ilist) + bld.SET_BUILD_GROUP('main') bld( features = 'cc', source = source_list, target=modname, -# we don't supply dependencies here, as this is just a compile, not a link -# uselib_local = localdeps, -# uselib = sysdeps, -# add_objects = add_objects, + ccflags = CURRENT_CFLAGS(bld, cflags), includes='. ' + bld.env['BUILD_DIRECTORY'] + '/default ' + ilist) Build.BuildContext.SAMBA_MODULE = SAMBA_MODULE @@ -682,14 +683,12 @@ def SAMBA_SUBSYSTEM(bld, modname, source_list, ilist = bld.SAMBA_LIBRARY_INCLUDE_LIST(deps) + bld.SUBDIR(bld.curdir, include_list) ilist = bld.NORMPATH(ilist) + bld.SET_BUILD_GROUP(group) bld( features = 'cc', source = source_list, target=modname, -# we don't supply dependencies here, as this is just a compile, not a link -# uselib_local = localdeps, -# uselib = sysdeps, -# add_objects = add_objects, + ccflags = CURRENT_CFLAGS(bld, cflags), includes='. ' + bld.env['BUILD_DIRECTORY'] + '/default ' + ilist) Build.BuildContext.SAMBA_SUBSYSTEM = SAMBA_SUBSYSTEM @@ -753,3 +752,26 @@ def add_extra_targets(): import Utils setattr(Utils.g_module, 'list', cmd_list) + +########################################################### +# setup build groups used to ensure that the different build +# phases happen consecutively +@runonce +def SETUP_BUILD_GROUPS(bld): + bld.env['USING_BUILD_GROUPS'] = True + bld.add_group('setup') + bld.add_group('build_compilers') + bld.add_group('build_source') + bld.add_group('prototypes') + bld.add_group('main') + bld.add_group('final') +Build.BuildContext.SETUP_BUILD_GROUPS = SETUP_BUILD_GROUPS + + +########################################################### +# set the current build group +def SET_BUILD_GROUP(bld, group): + if not 'USING_BUILD_GROUPS' in bld.env: + return + bld.set_group(group) +Build.BuildContext.SET_BUILD_GROUP = SET_BUILD_GROUP diff --git a/source4/wscript_build b/source4/wscript_build index b1a59a0408..ebe2dba6d8 100644 --- a/source4/wscript_build +++ b/source4/wscript_build @@ -1,5 +1,10 @@ # top level waf build script for samba4 +# create separate build groups for building the asn1 and et compiler, then +# building the C from ASN1 and IDL, and finally the main build process +bld.SETUP_BUILD_GROUPS() + + bld.PREDECLARE('LIBNDR', 'LIBRARY') bld.PREDECLARE('LIBSAMBA-UTIL', 'LIBRARY') bld.PREDECLARE('torture', 'LIBRARY') -- cgit