From d06df81df21adfaa10497369f06e5d4f51b57611 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 1 Apr 2010 09:49:46 +1100 Subject: build: fixed the dependencies of the install targets we want the install targets to have identical calculated dependencies to the build targets. --- buildtools/wafsamba/samba_deps.py | 50 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) (limited to 'buildtools/wafsamba/samba_deps.py') diff --git a/buildtools/wafsamba/samba_deps.py b/buildtools/wafsamba/samba_deps.py index 31062e71a8..19cd451161 100644 --- a/buildtools/wafsamba/samba_deps.py +++ b/buildtools/wafsamba/samba_deps.py @@ -310,6 +310,13 @@ def add_samba_attributes(bld, tgt_list): t.samba_deps_extended = t.samba_deps[:] t.samba_includes_extended = TO_LIST(t.samba_includes)[:] t.ccflags = getattr(t, 'samba_cflags', '') + install_target = getattr(t, 'install_target', None) + if install_target: + t2 = bld.name_to_obj(install_target, bld.env) + t2.sname = install_target + t2.samba_type = t.samba_type + t2.samba_abspath = t2.path.abspath(bld.env) + t2.ccflags = t.ccflags def build_direct_deps(bld, tgt_list): @@ -621,6 +628,7 @@ def calculate_final_deps(bld, tgt_list, loops): if t.sname in t.final_objects: t.final_objects.remove(t.sname) + # find any library loops for t in tgt_list: if t.samba_type in ['LIBRARY', 'PYTHON']: @@ -674,7 +682,6 @@ def calculate_final_deps(bld, tgt_list, loops): debug('deps: removed duplicate dependencies') - ###################################################################### # this provides a way to save our dependency calculations between runs savedeps_version = 3 @@ -734,6 +741,7 @@ def save_samba_deps(bld, tgt_list): denv.store(depsfile) + def load_samba_deps(bld, tgt_list): '''load a previous set of build dependencies if possible''' depsfile = os.path.join(bld.bdir, "sambadeps") @@ -775,15 +783,22 @@ def load_samba_deps(bld, tgt_list): #print '%s: \ntdeps=%s \nodeps=%s' % (t.sname, tdeps, olddeps) return False - # put outputs in place + tgt_list_extended = tgt_list[:] for t in tgt_list: + install_target = getattr(t, 'install_target', None) + if install_target: + t2 = bld.name_to_obj(install_target, bld.env) + tgt_list_extended.append(t2) + + # put outputs in place + for t in tgt_list_extended: if not t.sname in denv.output: continue tdeps = denv.output[t.sname] for a in tdeps: setattr(t, a, tdeps[a]) # put output env vars in place - for t in tgt_list: + for t in tgt_list_extended: if not t.sname in denv.outenv: continue tdeps = denv.outenv[t.sname] for a in tdeps: @@ -793,6 +808,30 @@ def load_samba_deps(bld, tgt_list): return True + +def add_install_deps(bld, tgt_list): + '''add attributes for install libs/binaries + + This ensures that all the install targets have identical dependencies + to the build targets. + ''' + for t in tgt_list[:]: + install_target = getattr(t, 'install_target', None) + if install_target: + t2 = bld.name_to_obj(install_target, bld.env) + if not t2: + print('install_target %s not found for %s' % (install_target, t.sname)) + sys.exit(1) + tgt_list.append(t2) + for attr in savedeps_outputs: + v = getattr(t, attr, None) + if v: + setattr(t2, attr, v) + for attr in savedeps_outenv: + if attr in t.env: + t2.env[attr] = t.env[attr] + + def check_project_rules(bld): '''check the project rules - ensuring the targets are sane''' @@ -803,6 +842,8 @@ def check_project_rules(bld): # build a list of task generators we are interested in tgt_list = [] for tgt in targets: + if tgt.endswith('.inst'): + continue type = targets[tgt] if not type in ['SUBSYSTEM', 'MODULE', 'BINARY', 'LIBRARY', 'ASN1', 'PYTHON']: continue @@ -815,6 +856,7 @@ def check_project_rules(bld): add_samba_attributes(bld, tgt_list) if load_samba_deps(bld, tgt_list): + add_install_deps(bld, tgt_list) return print "Checking project rules ..." @@ -846,6 +888,8 @@ def check_project_rules(bld): save_samba_deps(bld, tgt_list) + add_install_deps(bld, tgt_list) + print "Project rules pass" -- cgit