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):
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']:
debug('deps: removed duplicate dependencies')
-
######################################################################
# this provides a way to save our dependency calculations between runs
savedeps_version = 3
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")
#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:
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'''
# 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
add_samba_attributes(bld, tgt_list)
if load_samba_deps(bld, tgt_list):
+ add_install_deps(bld, tgt_list)
return
print "Checking project rules ..."
save_samba_deps(bld, tgt_list)
+ add_install_deps(bld, tgt_list)
+
print "Project rules pass"
if link_name:
t.link_name = link_name
- if install_path is None:
- install_path = '${LIBDIR}'
- install_path = SUBST_VARS_RECURSIVE(install_path, bld.env)
-
# we don't need the double libraries if rpath is off
if (bld.env.RPATH_ON_INSTALL == False and
bld.env.RPATH_ON_BUILD == False):
install_target = bundled_name
else:
install_target = bundled_name + '.inst'
+ if install:
+ t.install_target = install_target
+
+ if install_path is None:
+ install_path = '${LIBDIR}'
+ install_path = SUBST_VARS_RECURSIVE(install_path, bld.env)
if install and install_target != bundled_name:
# create a separate install library, which may have
deps = TO_LIST(deps)
deps.append(obj_target)
- bld(
+ t = bld(
features = features + ' symlink_bin',
source = [],
target = binname,
install_target = binname
else:
install_target = binname + '.inst'
+ if install:
+ t.install_target = install_target
if install and install_target != binname:
# we create a separate 'install' binary, which