From a2b4d7e8ebf24bc65cceb38bf23d8d8dc3307d27 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 29 Mar 2010 00:08:38 +1100 Subject: [PATCH] s4-waf: ensure we don't end up with mixed versions of talloc/tdb/tevent --- buildtools/wafsamba/samba_bundled.py | 16 +++++++++++++++- lib/tevent/wscript | 2 +- source4/lib/ldb/wscript | 3 ++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/buildtools/wafsamba/samba_bundled.py b/buildtools/wafsamba/samba_bundled.py index 47c6a836d63..b2d1b0ef143 100644 --- a/buildtools/wafsamba/samba_bundled.py +++ b/buildtools/wafsamba/samba_bundled.py @@ -46,7 +46,7 @@ Options.Handler.BUNDLED_EXTENSION_DEFAULT = BUNDLED_EXTENSION_DEFAULT @runonce @conf def CHECK_BUNDLED_SYSTEM(conf, libname, minversion='0.0.0', - checkfunctions=None, headers=None): + checkfunctions=None, headers=None, onlyif=None): '''check if a library is available as a system library. this first tries via pkg-config, then if that fails tries by testing for a specified function in the specified lib @@ -56,6 +56,20 @@ def CHECK_BUNDLED_SYSTEM(conf, libname, minversion='0.0.0', found = 'FOUND_SYSTEMLIB_%s' % libname if found in conf.env: return conf.env[found] + + # see if the library should only use a system version if another dependent + # system version is found. That prevents possible use of mixed library + # versions + if onlyif: + for syslib in TO_LIST(onlyif): + f = 'FOUND_SYSTEM_%s' % syslib + if not f in conf.env: + if 'NONE' in conf.env.BUNDLED_LIBS or '!'+libname in conf.env.BUNDLED_LIBS: + print('ERROR: Use of system library %s depends on missing system library %s' % (libname, syslib)) + sys.exit(1) + conf.env[found] = False + return False + # try pkgconfig first if conf.check_cfg(package=libname, args='"%s >= %s" --cflags --libs' % (libname, minversion), diff --git a/lib/tevent/wscript b/lib/tevent/wscript index e6ef67a8d67..a84dad663c4 100644 --- a/lib/tevent/wscript +++ b/lib/tevent/wscript @@ -22,7 +22,7 @@ def configure(conf): conf.sub_config(LIBREPLACE_DIR) conf.sub_config(LIBTALLOC_DIR) - if conf.CHECK_BUNDLED_SYSTEM('tevent', minversion=VERSION): + if conf.CHECK_BUNDLED_SYSTEM('tevent', minversion=VERSION, onlyif='talloc'): conf.define('USING_SYSTEM_TEVENT', 1) if conf.CHECK_FUNCS('epoll_create', headers='sys/epoll.h'): diff --git a/source4/lib/ldb/wscript b/source4/lib/ldb/wscript index e0269d76077..ffbb68e4b88 100644 --- a/source4/lib/ldb/wscript +++ b/source4/lib/ldb/wscript @@ -31,7 +31,8 @@ def configure(conf): if not s4_build: - if conf.CHECK_BUNDLED_SYSTEM('ldb', minversion=VERSION): + if conf.CHECK_BUNDLED_SYSTEM('ldb', minversion=VERSION, + onlyif='talloc tdb tevent'): conf.define('USING_SYSTEM_LDB', 1) # we need this for the ldap backend conf.CHECK_FUNCS_IN('ber_flush ldap_open', 'lber ldap', headers='lber.h ldap.h', mandatory=True) -- 2.34.1