summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-03-28 16:38:27 +1100
committerAndrew Tridgell <tridge@samba.org>2010-04-06 20:27:13 +1000
commitbfbf43cc36ab360b34b49d7e07c2f594e2b7e7c9 (patch)
tree35e0b133c53a859c90962d0678b0e5218943b6f8
parent505e902436b2a31a7b828fdeddf599339d0229e5 (diff)
downloadsamba-bfbf43cc36ab360b34b49d7e07c2f594e2b7e7c9.tar.gz
samba-bfbf43cc36ab360b34b49d7e07c2f594e2b7e7c9.tar.bz2
samba-bfbf43cc36ab360b34b49d7e07c2f594e2b7e7c9.zip
s4-waf: support the use of system libraries
distros can set --bundled-libraries=NONE to force use of all system libraries. If the right version isn't found then configure will fail. Users may choose which libraries to use from the system, and which to use bundled libs. The default is to try system libs, and use them if their version matches the one in the source tree.
-rw-r--r--buildtools/wafsamba/samba_autoconf.py17
-rw-r--r--buildtools/wafsamba/samba_bundled.py15
-rw-r--r--buildtools/wafsamba/wscript6
-rw-r--r--lib/talloc/wscript15
-rw-r--r--lib/tdb/wscript15
-rw-r--r--lib/tevent/wscript13
-rw-r--r--source4/lib/ldb/wscript18
7 files changed, 71 insertions, 28 deletions
diff --git a/buildtools/wafsamba/samba_autoconf.py b/buildtools/wafsamba/samba_autoconf.py
index b2f1d82040..ff2fa012c4 100644
--- a/buildtools/wafsamba/samba_autoconf.py
+++ b/buildtools/wafsamba/samba_autoconf.py
@@ -399,8 +399,9 @@ def CHECK_LIB(conf, libs, mandatory=False):
(ccflags, ldflags) = library_flags(conf, lib)
if not conf.check(lib=lib, uselib_store=lib, ccflags=ccflags, ldflags=ldflags):
- conf.ASSERT(not mandatory,
- "Mandatory library '%s' not found for functions '%s'" % (lib, list))
+ if mandatory:
+ print("Mandatory library '%s' not found for functions '%s'" % (lib, list))
+ sys.exit(1)
# if it isn't a mandatory library, then remove it from dependency lists
SET_TARGET_TYPE(conf, lib, 'EMPTY')
ret = False
@@ -449,8 +450,9 @@ def CHECK_FUNCS_IN(conf, list, library, mandatory=False, checklibc=False, header
conf.CHECK_LIB(liblist)
for lib in liblist[:]:
if not GET_TARGET_TYPE(conf, lib) == 'SYSLIB':
- conf.ASSERT(not mandatory,
- "Mandatory library '%s' not found for functions '%s'" % (lib, list))
+ if mandatory:
+ print("Mandatory library '%s' not found for functions '%s'" % (lib, list))
+ sys.exit(1)
# if it isn't a mandatory library, then remove it from dependency lists
liblist.remove(lib)
continue
@@ -462,6 +464,11 @@ def CHECK_FUNCS_IN(conf, list, library, mandatory=False, checklibc=False, header
return ret
+@conf
+def IN_LAUNCH_DIR(conf):
+ '''return True if this rule is being run from the launch directory'''
+ return os.path.realpath(conf.curdir) == os.path.realpath(Options.launch_dir)
+
#################################################
# write out config.h in the right directory
@@ -469,7 +476,7 @@ def CHECK_FUNCS_IN(conf, list, library, mandatory=False, checklibc=False, header
def SAMBA_CONFIG_H(conf, path=None):
# we don't want to produce a config.h in places like lib/replace
# when we are building projects that depend on lib/replace
- if os.path.realpath(conf.curdir) != os.path.realpath(Options.launch_dir):
+ if not IN_LAUNCH_DIR(conf):
return
if Options.options.developer:
diff --git a/buildtools/wafsamba/samba_bundled.py b/buildtools/wafsamba/samba_bundled.py
index d4dbe221db..2a6d75f7c9 100644
--- a/buildtools/wafsamba/samba_bundled.py
+++ b/buildtools/wafsamba/samba_bundled.py
@@ -40,3 +40,18 @@ def BUNDLED_EXTENSION_DEFAULT(opt, extension, noextenion=''):
Options.options['BUNDLED_EXTENSION_DEFAULT'] = extension
Options.options['BUNDLED_EXTENSION_EXCEPTION'] = noextenion
Options.Handler.BUNDLED_EXTENSION_DEFAULT = BUNDLED_EXTENSION_DEFAULT
+
+
+@conf
+def CHECK_BUNDLED_SYSTEM(conf, libname, minversion='0.0.0'):
+ if 'ALL' in conf.env.BUNDLED_LIBS or libname in conf.env.BUNDLED_LIBS:
+ return False
+ if conf.check_cfg(package=libname,
+ args='"%s >= %s" --cflags --libs' % (libname, minversion),
+ msg='Checking for system %s >= %s' % (libname, minversion)):
+ conf.SET_TARGET_TYPE(libname, 'SYSLIB')
+ return True
+ if 'NONE' in conf.env.BUNDLED_LIBS or '!'+libname in conf.env.BUNDLED_LIBS:
+ print('ERROR: System library %s of version %s not found, and bundling disabled' % (libname, minversion))
+ sys.exit(1)
+ return False
diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript
index 315c3e58a9..1ff0fd3cb3 100644
--- a/buildtools/wafsamba/wscript
+++ b/buildtools/wafsamba/wscript
@@ -12,7 +12,7 @@ def set_options(opt):
opt.tool_options('gnu_dirs')
opt.add_option('--bundled-libraries',
- help=("list of bundled libraries. Can be 'NONE' or 'ALL' [auto]"),
+ help=("comma separated list of bundled libraries. May include !LIBNAME to disable bundling a library. Can be 'NONE' or 'ALL' [auto]"),
action="store", dest='BUNDLED_LIBS', default='')
extension_default = Options.options['BUNDLED_EXTENSION_DEFAULT']
@@ -22,12 +22,12 @@ def set_options(opt):
extension_exception = Options.options['BUNDLED_EXTENSION_EXCEPTION']
opt.add_option('--bundled-extension-exception',
- help=("list of libraries to not apply extension to [%s]" % extension_exception),
+ help=("comman separated list of libraries to not apply extension to [%s]" % extension_exception),
action="store", dest='BUNDLED_EXTENSION_EXCEPTION', default=extension_exception)
builtin_defauilt = Options.options['BUILTIN_LIBRARIES_DEFAULT']
opt.add_option('--builtin-libraries',
- help=("list of libraries to build directly into binaries [%s]" % builtin_defauilt),
+ help=("command separated list of libraries to build directly into binaries [%s]" % builtin_defauilt),
action="store", dest='BUILTIN_LIBRARIES', default=builtin_defauilt)
opt.add_option('--libdir',
diff --git a/lib/talloc/wscript b/lib/talloc/wscript
index 6d16e15d53..be21bde18c 100644
--- a/lib/talloc/wscript
+++ b/lib/talloc/wscript
@@ -18,15 +18,22 @@ def set_options(opt):
def configure(conf):
conf.sub_config(LIBREPLACE_DIR)
+
+ if conf.CHECK_BUNDLED_SYSTEM('talloc', minversion=VERSION):
+ conf.define('USING_SYSTEM_TALLOC', 1)
+
conf.SAMBA_CONFIG_H()
+
+
def build(bld):
bld.BUILD_SUBDIR(LIBREPLACE_DIR)
- bld.SAMBA_LIBRARY('talloc',
- 'talloc.c',
- deps='replace',
- vnum=VERSION)
+ if not bld.CONFIG_SET('USING_SYSTEM_TALLOC'):
+ bld.SAMBA_LIBRARY('talloc',
+ 'talloc.c',
+ deps='replace',
+ vnum=VERSION)
bld.SAMBA_BINARY('talloc_testsuite',
'testsuite.c testsuite_main.c',
diff --git a/lib/tdb/wscript b/lib/tdb/wscript
index e146ba79b0..365c384201 100644
--- a/lib/tdb/wscript
+++ b/lib/tdb/wscript
@@ -19,6 +19,10 @@ def set_options(opt):
def configure(conf):
conf.sub_config(LIBREPLACE_DIR)
+
+ if conf.CHECK_BUNDLED_SYSTEM('tdb', minversion=VERSION):
+ conf.define('USING_SYSTEM_TDB', 1)
+
conf.SAMBA_CONFIG_H()
def build(bld):
@@ -29,11 +33,12 @@ def build(bld):
freelistcheck.c lock.c dump.c freelist.c
io.c open.c transaction.c''')
- bld.SAMBA_LIBRARY('tdb',
- COMMON_SRC,
- deps='replace rt',
- includes='include',
- vnum=VERSION)
+ if not bld.CONFIG_SET('USING_SYSTEM_TDB'):
+ bld.SAMBA_LIBRARY('tdb',
+ COMMON_SRC,
+ deps='replace rt',
+ includes='include',
+ vnum=VERSION)
bld.SAMBA_BINARY('tdbtorture',
'tools/tdbtorture.c',
diff --git a/lib/tevent/wscript b/lib/tevent/wscript
index f017581fae..e6ef67a8d6 100644
--- a/lib/tevent/wscript
+++ b/lib/tevent/wscript
@@ -22,6 +22,9 @@ def configure(conf):
conf.sub_config(LIBREPLACE_DIR)
conf.sub_config(LIBTALLOC_DIR)
+ if conf.CHECK_BUNDLED_SYSTEM('tevent', minversion=VERSION):
+ conf.define('USING_SYSTEM_TEVENT', 1)
+
if conf.CHECK_FUNCS('epoll_create', headers='sys/epoll.h'):
conf.DEFINE('HAVE_EPOLL', 1)
@@ -38,7 +41,9 @@ def build(bld):
if bld.CONFIG_SET('HAVE_EPOLL'):
SRC += ' tevent_epoll.c'
- bld.SAMBA_LIBRARY('tevent',
- SRC,
- deps='replace talloc',
- vnum=VERSION)
+ if not bld.CONFIG_SET('USING_SYSTEM_TEVENT'):
+ bld.SAMBA_LIBRARY('tevent',
+ SRC,
+ deps='replace talloc',
+ enabled= not bld.CONFIG_SET('USING_SYSTEM_TEVENT'),
+ vnum=VERSION)
diff --git a/source4/lib/ldb/wscript b/source4/lib/ldb/wscript
index ad875374db..97e345b834 100644
--- a/source4/lib/ldb/wscript
+++ b/source4/lib/ldb/wscript
@@ -27,7 +27,10 @@ def configure(conf):
s4_build = getattr(conf.env, '_SAMBA_BUILD_', 0) == 4
+
if not s4_build:
+ if conf.CHECK_BUNDLED_SYSTEM('ldb', minversion=VERSION):
+ 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)
@@ -130,13 +133,14 @@ def build(bld):
if s4_build:
ldb_deps += ' LDBSAMBA POPT_CREDENTIALS POPT_SAMBA LIBCMDLINE_CREDENTIALS gensec'
- bld.SAMBA_LIBRARY('ldb',
- COMMON_SRC + ' ' + LDB_MAP_SRC,
- deps=ldb_deps,
- includes='include',
- public_headers='include/ldb.h include/ldb_errors.h',
- pc_files='ldb.pc',
- vnum=VERSION)
+ if not bld.CONFIG_SET('USING_SYSTEM_LDB'):
+ bld.SAMBA_LIBRARY('ldb',
+ COMMON_SRC + ' ' + LDB_MAP_SRC,
+ deps=ldb_deps,
+ includes='include',
+ public_headers='include/ldb.h include/ldb_errors.h',
+ pc_files='ldb.pc',
+ vnum=VERSION)
bld.SAMBA_SUBSYSTEM('LIBLDB_CMDLINE',
'tools/ldbutil.c tools/cmdline.c',