summaryrefslogtreecommitdiff
path: root/source3/wscript
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2015-08-13 14:22:45 +0200
committerRalph Böhme <slow@samba.org>2015-08-20 16:06:21 +0200
commit43d1c92e6202b27db7f8b8820c55bffb2c486d4b (patch)
tree2984fb2ea903d6e51c2aea65ae5c4b399a71c0b5 /source3/wscript
parentd830cecd03697c68bdcc5f8eaf325abb7f0c425e (diff)
downloadsamba-43d1c92e6202b27db7f8b8820c55bffb2c486d4b.tar.gz
s3:wscript: make --with-{static,shared}-modules options more flexible
'!module' disables a non-required module for a static/shared build. '!DEFAULT' disables all modules defaulting to a static/shared build. '!FORCED' disables all (non-required) modules forced to a static/shared build. 'ALL' switches the default for all non forced modules from static to shared or from shared to static. The most specific specification wins e.g. --with-static-modules='!FORCED,!DEFAULT' --with-shared-modules='!FORCED,!DEFAULT' will only build modules which are required for the compilation. Might be useful if someone only wants to use client utils. --with-static-modules=ALL will build all modules statically linked. --with-static-modules='!DEFAULT,ALL' --with-shared-modules='!DEFAULT,ALL' might be useful for testing, it reverses the default build for all modules which can be build shared or static. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
Diffstat (limited to 'source3/wscript')
-rw-r--r--source3/wscript120
1 files changed, 94 insertions, 26 deletions
diff --git a/source3/wscript b/source3/wscript
index 2c4fe3bdb48..4918951476d 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -16,10 +16,24 @@ Options.default_prefix = '/usr/local/samba'
def set_options(opt):
opt.add_option('--with-static-modules',
- help=("Comma-separated list of names of modules to statically link in"),
+ help=("Comma-separated list of names of modules to statically link in. "+
+ "May include !module to disable 'module'. "+
+ "Can be '!FORCED' to disable all non-required static only modules. "+
+ "Can be '!DEFAULT' to disable all modules defaulting to a static build. "+
+ "Can be 'ALL' to build all default shared modules static. "+
+ "The most specific one wins, while the order is ignored "+
+ "and --with-static-modules is evaluated before "+
+ "--with-shared-modules"),
action="store", dest='static_modules', default=None)
opt.add_option('--with-shared-modules',
- help=("Comma-separated list of names of modules to build shared"),
+ help=("Comma-separated list of names of modules to build shared. "+
+ "May include !module to disable 'module'. "+
+ "Can be '!FORCED' to disable all non-required shared only modules. "+
+ "Can be '!DEFAULT' to disable all modules defaulting to a shared build. "+
+ "Can be 'ALL' to build all default static modules shared. "+
+ "The most specific one wins, while the order is ignored "+
+ "and --with-static-modules is evaluated before "+
+ "--with-shared-modules"),
action="store", dest='shared_modules', default=None)
opt.SAMBA3_ADD_OPTION('winbind')
@@ -69,6 +83,9 @@ def configure(conf):
default_static_modules = []
default_shared_modules = []
+ required_static_modules = []
+ forced_static_modules = []
+ forced_shared_modules = []
if Options.options.developer:
conf.ADD_CFLAGS('-DDEVELOPER -DDEBUG_PASSWORD')
@@ -77,6 +94,9 @@ def configure(conf):
if sys.platform != 'openbsd5':
conf.ADD_LDFLAGS("-Wl,--export-dynamic", testflags=True)
+ # We crash without vfs_default
+ required_static_modules.extend(TO_LIST('vfs_default'))
+
conf.CHECK_HEADERS('execinfo.h libexc.h libunwind.h netdb.h')
conf.CHECK_HEADERS('linux/falloc.h linux/ioctl.h')
@@ -469,7 +489,8 @@ return acl_get_perm_np(permset_d, perm);
'HAVE_ACL_GET_PERM_NP',
headers='sys/types.h sys/acl.h', link=True,
msg="Checking whether acl_get_perm_np() is available")
- default_static_modules.extend(TO_LIST('vfs_posixacl'))
+ # source3/lib/sysacls.c calls posixacl_sys_acl_get_file()
+ required_static_modules.extend(TO_LIST('vfs_posixacl'))
conf.CHECK_VARIABLE('ACL_EVERYONE', headers='sys/acl.h')
elif conf.CHECK_FUNCS_IN(['facl'], 'sec'):
Logs.info('Using solaris or UnixWare ACLs')
@@ -797,7 +818,8 @@ msg.msg_accrightslen = sizeof(fd);
conf.DEFINE('WITH_ADS', '1')
conf.env['HAVE_ADS'] = '1'
Logs.info("Building with Active Directory support.")
- default_shared_modules.extend(TO_LIST('idmap_ad idmap_rfc2307'))
+ # these have broken dependencies
+ forced_shared_modules.extend(TO_LIST('idmap_ad idmap_rfc2307'))
elif Options.options.with_ads == False:
Logs.info("Building without Active Directory support (--without-ads).")
else:
@@ -1573,25 +1595,26 @@ main() {
conf.fatal("Spotlight support requested but tracker-sparql library missing")
Logs.info("building with Spotlight support")
+ forced_static_modules.extend(TO_LIST('auth_domain auth_builtin auth_sam auth_winbind'))
default_static_modules.extend(TO_LIST('''pdb_smbpasswd pdb_tdbsam pdb_wbc_sam
- auth_sam auth_unix auth_winbind auth_wbc
- auth_domain auth_builtin vfs_default
+ auth_unix auth_wbc
nss_info_template idmap_tdb idmap_passdb
idmap_nss'''))
- default_shared_modules.extend(TO_LIST('''vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk
+ default_shared_modules.extend(TO_LIST('''
+ vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk
vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap
- vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2
- auth_script vfs_readahead vfs_xattr_tdb vfs_posix_eadb
+ vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2
+ vfs_readahead vfs_xattr_tdb vfs_posix_eadb
vfs_streams_xattr vfs_streams_depot vfs_acl_xattr vfs_acl_tdb
vfs_smb_traffic_analyzer vfs_preopen vfs_catia vfs_scannedonly
- vfs_media_harmony vfs_unityed_media vfs_fruit vfs_shell_snap
- vfs_commit
- vfs_worm
- vfs_crossrename vfs_linux_xfs_sgid
- vfs_time_audit idmap_autorid idmap_tdb2
- idmap_script
- idmap_rid idmap_hash'''))
+ vfs_media_harmony vfs_unityed_media vfs_fruit vfs_shell_snap
+ vfs_commit vfs_worm vfs_crossrename vfs_linux_xfs_sgid
+ vfs_time_audit
+ '''))
+ default_shared_modules.extend(TO_LIST('auth_script idmap_tdb2 idmap_script'))
+ # these have broken dependencies
+ forced_shared_modules.extend(TO_LIST('idmap_autorid idmap_rid idmap_hash'))
if Options.options.developer:
default_static_modules.extend(TO_LIST('charset_weird'))
@@ -1668,23 +1691,66 @@ main() {
replace_list_item(explicit_shared_modules, 'pdb_ldap', 'pdb_ldapsam')
replace_list_item(explicit_static_modules, 'pdb_ldap', 'pdb_ldapsam')
- final_static_modules = default_static_modules
- final_shared_modules = default_shared_modules
+ final_static_modules = []
+ final_static_modules.extend(TO_LIST(required_static_modules))
+ final_shared_modules = []
+
+ if '!FORCED' not in explicit_static_modules:
+ final_static_modules.extend(TO_LIST(forced_static_modules))
+ if '!FORCED' not in explicit_shared_modules:
+ final_shared_modules.extend(TO_LIST(forced_shared_modules))
+ if '!DEFAULT' not in explicit_static_modules:
+ final_static_modules.extend(TO_LIST(default_static_modules))
+ if '!DEFAULT' not in explicit_shared_modules:
+ final_shared_modules.extend(TO_LIST(default_shared_modules))
+
+ if 'ALL' in explicit_static_modules:
+ for m in default_shared_modules:
+ if m in final_shared_modules:
+ final_shared_modules.remove(m)
+ final_static_modules.append(m)
+ if 'ALL' in explicit_shared_modules:
+ for m in default_static_modules:
+ if m in final_static_modules:
+ final_static_modules.remove(m)
+ final_shared_modules.append(m)
for m in explicit_static_modules:
+ if m in ['ALL','!DEFAULT','!FORCED']:
+ continue
+ if m.startswith('!'):
+ m = m[1:]
+ if m in required_static_modules:
+ raise Utils.WafError('These modules are REQUIRED as static modules: %s' %
+ ' '.join(required_static_modules))
+ if m in final_static_modules:
+ final_static_modules.remove(m)
+ continue
+ if m in forced_shared_modules:
+ raise Utils.WafError('These modules MUST be configured as shared modules: %s' %
+ ' '.join(forced_shared_modules))
if m in final_shared_modules:
final_shared_modules.remove(m)
- final_static_modules.append(m)
+ if m not in final_static_modules:
+ final_static_modules.append(m)
for m in explicit_shared_modules:
+ if m in ['ALL','!DEFAULT','!FORCED']:
+ continue
+ if m.startswith('!'):
+ m = m[1:]
+ if m in final_shared_modules:
+ final_shared_modules.remove(m)
+ continue
+ if m in required_static_modules:
+ raise Utils.WafError('These modules are REQUIRED as static modules: %s' %
+ ' '.join(required_static_modules))
+ if m in forced_static_modules:
+ raise Utils.WafError('These module MUST be configured as static modules: %s' %
+ ' '.join(forced_static_modules))
if m in final_static_modules:
final_static_modules.remove(m)
- final_shared_modules.append(m)
-
- if ("auth_domain" not in final_static_modules) or \
- ("auth_builtin" not in final_static_modules) or \
- ("auth_sam" not in final_static_modules) or \
- ("auth_winbind" not in final_static_modules):
- raise Utils.WafError('These auth modules MUST be configured as static modules: auth_domain, auth_builtin, auth_sam, auth_winbind')
+ if m not in final_shared_modules:
+ final_shared_modules.append(m)
conf.env['static_modules'] = final_static_modules
conf.env['shared_modules'] = final_shared_modules
@@ -1728,6 +1794,8 @@ main() {
for entry in shared_list[p]:
conf.DEFINE('%s_init' % entry, 'samba_init_module')
conf.env[shared_env].append('%s' % entry)
+ Logs.info("%s: %s" % (static_env, ','.join(conf.env[static_env])))
+ Logs.info("%s: %s" % (shared_env, ','.join(conf.env[shared_env])))
conf.SAMBA_CONFIG_H('include/config.h')