1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-30 06:50:24 +03:00

build: Add duplicate symbol checking as part of make test

This ensures we do not get duplicate symbols again, when run as
./configure.developer on non-build farm machines.

Andrew Bartlett

Autobuild-User: Andrew Bartlett <abartlet@samba.org>
Autobuild-Date: Thu Sep  8 13:37:40 CEST 2011 on sn-devel-104
This commit is contained in:
Andrew Bartlett 2011-09-08 19:07:47 +10:00
parent 3346af1675
commit 30e11d55b5
5 changed files with 32 additions and 10 deletions

View File

@ -13,20 +13,20 @@ uninstall:
$(WAF) uninstall
test:
$(WAF) test $(TEST_OPTIONS)
$(WAF) test --dup-symbol-check $(TEST_OPTIONS)
help:
@echo NOTE: to run extended waf options use $(WAF_BINARY) or modify your PATH
$(WAF) --help
subunit-test:
$(WAF) test --filtered-subunit $(TEST_OPTIONS)
$(WAF) test --dup-symbol-check --filtered-subunit $(TEST_OPTIONS)
testenv:
$(WAF) test --testenv $(TEST_OPTIONS)
$(WAF) test --dup-symbol-check --testenv $(TEST_OPTIONS)
quicktest:
$(WAF) test --quick $(TEST_OPTIONS)
$(WAF) test --dup-symbol-check --quick $(TEST_OPTIONS)
dist:
touch .tmplock

View File

@ -567,7 +567,7 @@ def symbols_whyneeded(task):
Logs.info("target '%s' uses symbols %s from '%s'" % (target, overlap, subsystem))
def report_duplicate(bld, binname, sym, libs):
def report_duplicate(bld, binname, sym, libs, fail_on_error):
'''report duplicated symbols'''
if sym in ['_init', '_fini']:
return
@ -577,10 +577,13 @@ def report_duplicate(bld, binname, sym, libs):
libnames.append(bld.env.library_dict[lib])
else:
libnames.append(lib)
print("%s: Symbol %s linked in multiple libraries %s" % (binname, sym, libnames))
if fail_on_error:
raise Utils.WafError("%s: Symbol %s linked in multiple libraries %s" % (binname, sym, libnames))
else:
print("%s: Symbol %s linked in multiple libraries %s" % (binname, sym, libnames))
def symbols_dupcheck_binary(bld, binname):
def symbols_dupcheck_binary(bld, binname, fail_on_error):
'''check for duplicated symbols in one binary'''
libs = get_libs_recursive(bld, binname, set())
@ -596,10 +599,10 @@ def symbols_dupcheck_binary(bld, binname):
if len(symmap[sym]) > 1:
for libpath in symmap[sym]:
if libpath in bld.env.library_dict:
report_duplicate(bld, binname, sym, symmap[sym])
report_duplicate(bld, binname, sym, symmap[sym], fail_on_error)
break
def symbols_dupcheck(task):
def symbols_dupcheck(task, fail_on_error=False):
'''check for symbols defined in two different subsystems'''
bld = task.env.bld
tgt_list = get_tgt_list(bld)
@ -610,9 +613,13 @@ def symbols_dupcheck(task):
for t in tgt_list:
if t.samba_type == 'BINARY':
binname = os_path_relpath(t.link_task.outputs[0].abspath(bld.env), os.getcwd())
symbols_dupcheck_binary(bld, binname)
symbols_dupcheck_binary(bld, binname, fail_on_error)
def symbols_dupcheck_fatal(task):
'''check for symbols defined in two different subsystems (and fail if duplicates are found)'''
symbols_dupcheck(task, fail_on_error=True)
def SYMBOL_CHECK(bld):
'''check our dependency lists'''
@ -636,3 +643,12 @@ def SYMBOL_CHECK(bld):
Build.BuildContext.SYMBOL_CHECK = SYMBOL_CHECK
def DUP_SYMBOL_CHECK(bld):
if Options.options.DUP_SYMBOLCHECK and bld.env.DEVELOPER and not bld.env.BUILD_FARM:
'''check for duplicate symbols'''
bld.SET_BUILD_GROUP('syslibcheck')
task = bld(rule=symbols_dupcheck_fatal, always=True, name='symbol duplicate checking')
task.env.bld = bld
Build.BuildContext.DUP_SYMBOL_CHECK = DUP_SYMBOL_CHECK

View File

@ -121,6 +121,10 @@ def set_options(opt):
help=("check symbols in object files against project rules"),
action='store_true', dest='SYMBOLCHECK', default=False)
gr.add_option('--dup-symbol-check',
help=("check for duplicate symbols in object files and system libs (must be configured with --enable-developer)"),
action='store_true', dest='DUP_SYMBOLCHECK', default=False)
gr.add_option('--why-needed',
help=("TARGET:DEPENDENCY check why TARGET needs DEPENDENCY"),
action='store', type='str', dest='WHYNEEDED', default=None)

View File

@ -52,6 +52,7 @@ def configure(conf):
if Options.options.developer:
conf.ADD_CFLAGS('-DDEVELOPER -DDEBUG_PASSWORD')
conf.env.DEVELOPER = True
# this enables smbtorture.static for s3 in the build farm
conf.env.BUILD_FARM = Options.options.BUILD_FARM or os.environ.get('RUN_FROM_BUILD_FARM')

View File

@ -123,3 +123,4 @@ bld.RECURSE('source3')
bld.RECURSE('testsuite/headers')
bld.SYMBOL_CHECK()
bld.DUP_SYMBOL_CHECK()