diff options
Diffstat (limited to 'source3/wscript')
-rw-r--r-- | source3/wscript | 120 |
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') |