X-Git-Url: http://git.samba.org/?a=blobdiff_plain;f=source3%2Fwscript;h=82cb8582bd9c3b4d949408958fa28710f54b97a6;hb=42d5b06d7ab2226598e98ebf3df94723f2f9b093;hp=819ea9bb6633d921bd1fc8a60b19b989e39bd21e;hpb=eafb7e33bcb78e87dc3781fc2c9bf9a31f5281b2;p=samba.git diff --git a/source3/wscript b/source3/wscript index 819ea9bb663..82cb8582bd9 100644 --- a/source3/wscript +++ b/source3/wscript @@ -11,15 +11,29 @@ import build.charset import samba_utils, samba_version import samba3 -Options.default_prefix = '/usr/local/samba' +default_prefix = 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') @@ -28,7 +42,6 @@ def set_options(opt): opt.SAMBA3_ADD_OPTION('cups', with_name="enable", without_name="disable") opt.SAMBA3_ADD_OPTION('iprint', with_name="enable", without_name="disable") opt.SAMBA3_ADD_OPTION('pam') - opt.SAMBA3_ADD_OPTION('pam_smbpass') opt.SAMBA3_ADD_OPTION('quotas') opt.SAMBA3_ADD_OPTION('sendfile-support') opt.SAMBA3_ADD_OPTION('utmp') @@ -52,25 +65,26 @@ def set_options(opt): opt.SAMBA3_ADD_OPTION('fake-kaserver', help=("Include AFS fake-kaserver support"), default=False) - opt.add_option('--with-ctdb-dir', - help=("Directory under which ctdb is installed"), - action="store", dest='ctdb_dir', default=None) - opt.add_option('--enable-old-ctdb', - help=("enable building against (too) old version of ctdb (default=false)"), - action="store_true", dest='enable_old_ctdb', default=False) - opt.add_option('--with-libcephfs', help=("Directory under which libcephfs is installed"), action="store", dest='libcephfs_dir', default=None) opt.SAMBA3_ADD_OPTION('glusterfs', with_name="enable", without_name="disable", default=True) + opt.add_option('--enable-vxfs', + help=("enable support for VxFS (default=no)"), + action="store_true", dest='enable_vxfs', default=False) + + opt.SAMBA3_ADD_OPTION('spotlight', with_name="enable", without_name="disable", default=False) def configure(conf): from samba_utils import TO_LIST 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') @@ -79,14 +93,17 @@ 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') + conf.CHECK_HEADERS('linux/falloc.h linux/ioctl.h') conf.CHECK_FUNCS('getcwd fchown chmod fchmod mknod') conf.CHECK_FUNCS('strtol strchr strupr chflags') conf.CHECK_FUNCS('getrlimit fsync fdatasync setpgid') conf.CHECK_FUNCS('setsid glob strpbrk crypt16 getauthuid') - conf.CHECK_FUNCS('sigprocmask sigblock sigaction sigset innetgr') + conf.CHECK_FUNCS('innetgr') conf.CHECK_FUNCS('initgroups select poll rdchk getgrnam getgrent pathconf') conf.CHECK_FUNCS('setpriv setgidx setuidx setgroups syscall sysconf') conf.CHECK_FUNCS('atexit grantpt posix_openpt fallocate posix_fallocate') @@ -109,9 +126,6 @@ def configure(conf): conf.CHECK_DECLS('fdatasync', reverse=True) conf.CHECK_DECLS('readahead', reverse=True, headers='fcntl.h') - if conf.CONFIG_SET('HAVE_LONG_LONG'): - conf.DEFINE('HAVE_LONGLONG', 1) - if conf.CHECK_CODE(''' #if defined(HAVE_UNISTD_H) #include @@ -209,27 +223,32 @@ main() { conf.fatal('libarchive support requested, but no suitable pkgconfig found') # check for DMAPI libs - Logs.info("Checking for DMAPI library existence") - conf.env['dmapi_lib'] = '' - samba_dmapi_lib = '' - if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'dm'): - samba_dmapi_lib = 'dm' + if Options.options.with_dmapi == False: + have_dmapi = False else: - if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'jfsdm'): - samba_dmapi_lib = 'jfsdm' + have_dmapi = True + Logs.info("Checking for DMAPI library existence") + samba_dmapi_lib = '' + if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'dm'): + samba_dmapi_lib = 'dm' else: - if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'dmapi'): - samba_dmapi_lib = 'dmapi' + if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'jfsdm'): + samba_dmapi_lib = 'jfsdm' else: - if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'xdsm'): - samba_dmapi_lib = 'xdsm' - # only bother to test headers and compilation when a candidate - # library has been found - if Options.options.with_dmapi == True and samba_dmapi_lib == '': - conf.fatal('DMAPI support requested, but no suitable DMAPI library found') - else: - conf.CHECK_HEADERS('sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h dmapi.h') - conf.CHECK_CODE(''' + if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'dmapi'): + samba_dmapi_lib = 'dmapi' + else: + if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'xdsm'): + samba_dmapi_lib = 'xdsm' + # only bother to test headers and compilation when a candidate + # library has been found + if samba_dmapi_lib == '': + have_dmapi = False + broken_dmapi = "no suitable DMAPI library found" + + if have_dmapi: + conf.CHECK_HEADERS('sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h dmapi.h') + conf.CHECK_CODE(''' #include /* needed by Tru64 */ #include /* needed by AIX */ #ifdef HAVE_XFS_DMAPI_H @@ -259,17 +278,28 @@ int main(int argc, char **argv) return 0; } ''', - 'USE_DMAPI', - addmain=False, - execute=False, - lib=samba_dmapi_lib, - msg='Checking whether DMAPI lib '+samba_dmapi_lib+' can be used') - - if conf.CONFIG_SET('USE_DMAPI'): - conf.env['dmapi_lib'] = samba_dmapi_lib + 'USEABLE_DMAPI_LIBRARY', + addmain=False, + execute=False, + lib=samba_dmapi_lib, + msg='Checking whether DMAPI lib '+samba_dmapi_lib+' can be used') + if not conf.CONFIG_SET('USEABLE_DMAPI_LIBRARY'): + have_dmapi = False + broken_dmapi = "no usable DMAPI library found" + + if have_dmapi: + Logs.info("Building with DMAPI support.") + conf.env['dmapi_lib'] = samba_dmapi_lib + conf.DEFINE('USE_DMAPI', 1) + else: + if Options.options.with_dmapi == False: + Logs.info("Building without DMAPI support (--without-dmapi).") + elif Options.options.with_dmapi == True: + Logs.error("DMAPI support not available: " + broken_dmapi) + conf.fatal('DMAPI support requested but not found.'); else: - if Options.options.with_dmapi == True: - conf.fatal('DMAPI support requested but not found'); + Logs.warn("Building without DMAPI support: " + broken_dmapi) + conf.env['dmapi_lib'] = '' # Check for various members of the stat structure conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_blocks', define='HAVE_STAT_ST_BLOCKS', @@ -310,34 +340,34 @@ int main(int argc, char **argv) headers='sys/capability.h', msg="Checking whether POSIX capabilities are available") - # Check for int16, uint16, int32 and uint32 in rpc/types.h included from - # rpc/rpc.h. This is *really* broken but some systems (DEC OSF1) do this. - # -- JRA. - if conf.CONFIG_SET("HAVE_RPC_RPC_H"): - conf.CHECK_TYPE('int16', headers='rpc/rpc.h', - define='HAVE_INT16_FROM_RPC_RPC_H', - msg="Checking for int16 typedef included by rpc/rpc.h") - conf.CHECK_CODE('uint16 testvar;', 'HAVE_INT16_FROM_RPC_RPC_H', - headers='sys/types.h rpc/rpc.h', - msg="Checking for uint16 typedef included by rpc/rpc.h") - conf.CHECK_CODE('int32 testvar;', 'HAVE_INT16_FROM_RPC_RPC_H', - headers='sys/types.h rpc/rpc.h', - msg="Checking for int32 typedef included by rpc/rpc.h") - conf.CHECK_CODE('uint32 testvar;', 'HAVE_INT16_FROM_RPC_RPC_H', - headers='sys/types.h rpc/rpc.h', - msg="Checking for uint32 typedef included by rpc/rpc.h") conf.CHECK_CODE('int i;', 'BROKEN_NISPLUS_INCLUDE_FILES', headers='sys/types.h sys/acl.h rpcsvc/nis.h', msg="Checking for broken nisplus include files") # Check if the compiler will optimize out functions conf.CHECK_CODE(''' -if (0) { - this_function_does_not_exist(); -} else { - return 1; +#include +size_t __unsafe_string_function_usage_here_size_t__(void); +#define CHECK_STRING_SIZE(d, len) (sizeof(d) != (len) && sizeof(d) != sizeof(char *)) +static size_t push_string_check_fn(void *dest, const char *src, size_t dest_len) { + return 0; +} + +#define push_string_check(dest, src, dest_len) \ + (CHECK_STRING_SIZE(dest, dest_len) \ + ? __unsafe_string_function_usage_here_size_t__() \ + : push_string_check_fn(dest, src, dest_len)) + +int main(int argc, char **argv) { + char outbuf[1024]; + char *p = outbuf; + const char *foo = "bar"; + p += 31 + push_string_check(p + 31, foo, sizeof(outbuf) - (p + 31 - outbuf)); + return 0; }''', 'HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS', - msg="Checking if the compiler will optimize out functions") + addmain=False, + add_headers=False, + msg="Checking if the compiler will optimize out functions") # Check if the compiler supports the LL suffix on long long integers # AIX needs this @@ -370,7 +400,7 @@ rdchk _read __read _readdir __readdir _seekdir __seekdir select setenv setgidx setgroups setlocale setluid setmntent setpgid setpriv setsid setuidx -shmget shm_open sigaction sigblock sigprocmask sigset +shmget shm_open _stat __stat statvfs strcasecmp strchr strpbrk strsignal strtol strupr sysconf sysctl sysctlbyname __sys_llseek syslog _telldir __telldir timegm @@ -458,7 +488,9 @@ 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') conf.DEFINE('HAVE_SOLARIS_UNIXWARE_ACLS',1) @@ -490,6 +522,19 @@ return acl_get_perm_np(permset_d, perm); 'HAVE_LINUX_FALLOCATE', msg="Checking whether the Linux 'fallocate' function is available", headers='unistd.h sys/types.h fcntl.h linux/falloc.h') + conf.CHECK_CODE(''' + int ret = fallocate(0, FALLOC_FL_PUNCH_HOLE, 0, 10);''', + 'HAVE_FALLOC_FL_PUNCH_HOLE', + msg="Checking whether Linux 'fallocate' supports hole-punching", + headers='unistd.h sys/types.h fcntl.h linux/falloc.h') + + conf.CHECK_CODE(''' + int ret = lseek(0, 0, SEEK_HOLE); + ret = lseek(0, 0, SEEK_DATA);''', + 'HAVE_LSEEK_HOLE_DATA', + msg="Checking whether lseek supports hole/data seeking", + headers='unistd.h sys/types.h') + conf.CHECK_CODE(''' ssize_t err = readahead(0,0,0x80000);''', 'HAVE_LINUX_READAHEAD', @@ -517,7 +562,7 @@ return acl_get_perm_np(permset_d, perm); conf.CHECK_CODE('struct aiocb a; return aio_return(&a);', 'HAVE_AIO_RETURN', msg='Checking for aio_return', headers='aio.h', lib='aio rt') conf.CHECK_CODE('struct aiocb a; return aio_error(&a);', 'HAVE_AIO_ERROR', msg='Checking for aio_error', headers='aio.h', lib='aio rt') conf.CHECK_CODE('struct aiocb a; return aio_cancel(1, &a);', 'HAVE_AIO_CANCEL', msg='Checking for aio_cancel', headers='aio.h', lib='aio rt') - conf.CHECK_CODE('const struct aiocb * const a[1]; struct timespec t; return aio_suspend(&a, 1, &t);', 'HAVE_AIO_SUSPEND', msg='Checking for aio_suspend', headers='aio.h', lib='aio rt') + conf.CHECK_CODE('const struct aiocb * const a[1]; struct timespec t; return aio_suspend(a, 1, &t);', 'HAVE_AIO_SUSPEND', msg='Checking for aio_suspend', headers='aio.h', lib='aio rt') if not conf.CONFIG_SET('HAVE_AIO'): conf.DEFINE('HAVE_NO_AIO', '1') else: @@ -561,11 +606,11 @@ msg.msg_controllen = sizeof(control_un.control); conf.CHECK_CODE(''' struct msghdr msg; int fd; -msg.msg_acctrights = (caddr_t) &fd; -msg.msg_acctrightslen = sizeof(fd); +msg.msg_accrights = (caddr_t) &fd; +msg.msg_accrightslen = sizeof(fd); ''', - 'HAVE_STRUCT_MSGHDR_MSG_ACCTRIGHTS', - msg='Checking if we can use msg_acctrights for passing file descriptors', + 'HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS', + msg='Checking if we can use msg_accrights for passing file descriptors', headers='sys/types.h stdlib.h stddef.h sys/socket.h sys/un.h') if Options.options.with_winbind: @@ -573,7 +618,6 @@ msg.msg_acctrightslen = sizeof(fd); conf.DEFINE('WITH_WINBIND', '1') conf.find_program('awk', var='AWK') - conf.find_program('perl', var='PERL') conf.CHECK_HEADERS('asm/types.h') @@ -615,7 +659,7 @@ msg.msg_acctrightslen = sizeof(fd); # we would normally use --libs here, but cups-config incorrectly adds # gssapi_krb5 and other libraries to its --libs output. That breaks the use # of an in-tree heimdal kerberos - conf.check_cfg(path=conf.env.CUPS_CONFIG, args="--cflags --ldflags", + conf.CHECK_CFG(path=conf.env.CUPS_CONFIG, args="--cflags --ldflags", package="", uselib_store="CUPS") conf.CHECK_HEADERS('cups/cups.h cups/language.h', lib='cups') conf.CHECK_FUNCS_IN('httpConnect httpConnectEncrypt', 'cups') @@ -773,6 +817,8 @@ msg.msg_acctrightslen = sizeof(fd); conf.DEFINE('WITH_ADS', '1') conf.env['HAVE_ADS'] = '1' Logs.info("Building with Active Directory support.") + # 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: @@ -919,9 +965,6 @@ int i; i = PAM_RADIO_TYPE; conf.DEFINE('WITH_PAM', 1) conf.DEFINE('WITH_PAM_MODULES', 1) - if Options.options.with_pam_smbpass: - conf.env.with_pam_smbpass = True - seteuid = False # @@ -1434,310 +1477,15 @@ main() { conf.DEFINE('WITH_QUOTAS', '1') # - # checking for clustering extensions (CTDB) + # cluster support (CTDB) # - if Options.options.with_cluster_support == False: - # configure is called with --without-cluster-support, - # so don't check for and build w/o ctdb support. - have_cluster_support = False - + if not Options.options.with_cluster_support: + Logs.info("building without cluster support (--without-cluster-support)") + conf.env.with_ctdb = False else: - - have_cluster_support = True - ctdb_broken = "" - CTDB_CFLAGS = "" - - srcdir = os.path.realpath(conf.srcdir) - if 'EXTRA_INCLUDES' in conf.env: - includes = ' '.join(conf.env['EXTRA_INCLUDES']).replace('#', srcdir + '/') - else: - includes = '' - - if Options.options.ctdb_dir: - CTDB_INCLUDE = Options.options.ctdb_dir + '/include' - else: - CTDB_INCLUDE = conf.srcdir + '/ctdb/include' - includes = includes + ' ' + CTDB_INCLUDE - - if not conf.env.USING_SYSTEM_TDB: - includes = includes + ' ' + srcdir + '/lib/tdb/include' - - if not conf.env.USING_SYSTEM_TALLOC: - includes = includes + ' ' + srcdir + '/lib/talloc' - - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #define private #error __USED_RESERVED_WORD_private__ - #include - #include - #include - - int main(void) - { - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for header ctdb.h') - if ok: - CTDB_CFLAGS += ' -DHAVE_CTDB_H=1' - else: - have_cluster_support = False - ctdb_broken = "ctdb.h is required for cluster support" - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #define private #error __USED_RESERVED_WORD_private__ - #include - #include - #include - #include - - int main(void) - { - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for header ctdb_private.h') - if ok: - CTDB_CFLAGS += ' -DHAVE_CTDB_PRIVATE_H=1' - else: - have_cluster_support = False - ctdb_broken = "ctdb_private.h is required for cluster support" - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #define private #error __USED_RESERVED_WORD_private__ - #include - #include - #include - #include - - int main(void) - { - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for header ctdb_protocol.h') - if ok: - CTDB_CFLAGS += ' -DHAVE_CTDB_PROTOCOL_H=1' - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #include - #include - #include - #include - - int main(void) - { - int i = (int)CTDB_CONTROL_TRANS3_COMMIT; - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for transaction support (TRANS3_COMMIT control)') - if ok: - CTDB_CFLAGS += ' -DHAVE_CTDB_CONTROL_TRANS3_COMMIT_DECL=1' - else: - have_cluster_support = False - ctdb_broken = "ctdb transaction support missing or too old" - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #include - #include - #include - #include - - int main(void) - { - int i = (int)CTDB_CONTROL_SCHEDULE_FOR_DELETION; - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for SCHEDULE_FOR_DELETION control') - if ok: - CTDB_CFLAGS += ' -DHAVE_CTDB_CONTROL_SCHEDULE_FOR_DELETION_DECL=1' - else: - if not Options.options.enable_old_ctdb: - have_cluster_support = False - ctdb_broken = "SCHEDULE_FOR_DELETION control missing" - else: - Logs.warn("ignoring missing SCHEDULE_FOR_DELETION control (--enable-old-ctdb)") - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #include - #include - #include - - int main(void) - { - int i = (int)CTDB_WANT_READONLY; - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for CTDB readonly records support') - if ok: - CTDB_CFLAGS += ' -DHAVE_CTDB_WANT_READONLY_DECL=1' - else: - if not Options.options.enable_old_ctdb: - have_cluster_support = False - ctdb_broken = "support for CTDB readonly records missing" - else: - Logs.warn("ignoring missing READONLY support (--enable-old-ctdb)") - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #include - #include - #include - #include - - int main(void) - { - struct ctdb_control_tcp _x; - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for ctdb ipv4 support') - if ok: - CTDB_CFLAGS += ' -DHAVE_STRUCT_CTDB_CONTROL_TCP=1' - else: - have_cluster_support = False - ctdb_broken = "missing struct ctdb_control_tcp" - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #include - #include - #include - #include - - int main(void) - { - struct ctdb_control_tcp_addr _x; - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for ctdb ipv6 support') - if ok: - CTDB_CFLAGS += ' -DHAVE_STRUCT_CTDB_CONTROL_TCP_ADDR=1' - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: - ok = conf.CHECK_CODE(''' - #define NO_CONFIG_H - #include "replace.h" - #include "system/wait.h" - #include "system/network.h" - #include - #include - #include - #include - - int main(void) - { - int i = (int)CTDB_CONTROL_CHECK_SRVIDS; - return 0; - } - ''', - 'HAVE_CTDB_CHECK_CODE', - addmain=False, - includes=includes, - msg='Checking for CHECK_SRVIDS control') - if ok: - CTDB_CFLAGS += ' -DHAVE_CTDB_CONTROL_CHECK_SRVIDS_DECL=1' - else: - if not Options.options.enable_old_ctdb: - have_cluster_support = False - ctdb_broken = "CHECK_SRVIDS control missing" - else: - Logs.warn("ignoring missing CHECK_SRVIDS control (--enable-old-ctdb)") - - conf.CONFIG_RESET('HAVE_CTDB_CHECK_CODE') - conf.undefine('HAVE_CTDB_CHECK_CODE') - if have_cluster_support: Logs.info("building with cluster support") - conf.env['CTDB_CFLAGS'] = CTDB_CFLAGS - conf.env['CTDB_INCLUDE'] = CTDB_INCLUDE - else: - if Options.options.with_cluster_support == False: - Logs.info("building without cluster support (--without-cluster-support)") - elif Options.options.with_cluster_support == True: - Logs.error("Cluster support not available: " + ctdb_broken) - conf.fatal("Cluster support not found, but --with-cluster-support was specified") - else: - Logs.info("building without cluster support: " + ctdb_broken) - conf.env['CTDB_CFLAGS'] = '' - - - conf.CHECK_CODE('__attribute__((destructor)) static void cleanup(void) { }', - 'HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR', - addmain=False, - link=False, - msg='Checking whether we can compile with __attribute__((destructor))') + conf.env.with_ctdb = True + conf.DEFINE('CLUSTER_SUPPORT', 1) conf.CHECK_CODE('void seekdir(DIR *d, long loc) { return; }', 'SEEKDIR_RETURNS_VOID', @@ -1746,6 +1494,7 @@ main() { if Options.options.with_profiling_data: conf.DEFINE('WITH_PROFILE', 1); + conf.CHECK_FUNCS('getrusage', headers="sys/time.h sys/resource.h") if Options.options.with_pthreadpool: if conf.CONFIG_SET('HAVE_PTHREAD'): @@ -1754,9 +1503,6 @@ main() { Logs.warn("pthreadpool support cannot be enabled when pthread support was not found") conf.undefine('WITH_PTHREADPOOL') - if conf.CHECK_HEADERS('gpfs_gpl.h'): - conf.DEFINE('HAVE_GPFS', '1') - if (conf.CHECK_HEADERS('linux/ioctl.h sys/ioctl.h linux/fs.h') and conf.CHECK_DECLS('FS_IOC_GETFLAGS FS_COMPR_FL', headers='linux/fs.h')): conf.DEFINE('HAVE_LINUX_IOCTL', '1') @@ -1770,7 +1516,7 @@ main() { conf.DEFINE('HAVE_CEPH', '1') if Options.options.with_glusterfs: - conf.check_cfg(package='glusterfs-api', args='"glusterfs-api >= 4" --cflags --libs', + conf.CHECK_CFG(package='glusterfs-api', args='"glusterfs-api >= 4" --cflags --libs', msg='Checking for glusterfs-api >= 4', uselib_store="GFAPI") conf.CHECK_HEADERS('api/glfs.h', lib='gfapi') conf.CHECK_LIB('gfapi', shlib=True) @@ -1784,6 +1530,15 @@ main() { conf.SET_TARGET_TYPE('gfapi', 'EMPTY') conf.undefine('HAVE_GLUSTERFS') + if Options.options.enable_vxfs: + conf.DEFINE('HAVE_VXFS', '1') + + if conf.CHECK_CFG(package='dbus-1', args='--cflags --libs', + msg='Checking for dbus', uselib_store="DBUS-1"): + if (conf.CHECK_HEADERS('dbus/dbus.h', lib='dbus-1') + and conf.CHECK_LIB('dbus-1', shlib=True)): + conf.DEFINE('HAVE_DBUS', '1') + conf.env.build_regedit = False if not Options.options.with_regedit == False: conf.PROCESS_SEPARATE_RULE('system_ncurses') @@ -1810,27 +1565,45 @@ main() { else: conf.fatal('AFS headers not available, but --with-fake-kaserver was specified') - - + conf.env['libtracker']='' + conf.env.with_spotlight = False + if Options.options.with_spotlight: + versions = ['1.0', '0.16', '0.14'] + for version in versions: + testlib = 'tracker-sparql-' + version + if conf.CHECK_CFG(package=testlib, + args='--cflags --libs', + mandatory=False): + conf.SET_TARGET_TYPE(testlib, 'SYSLIB') + conf.env['libtracker'] = testlib + conf.env.with_spotlight = True + conf.DEFINE('WITH_SPOTLIGHT', '1') + break + + if not conf.env.with_spotlight: + 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_commit - vfs_worm - vfs_crossrename vfs_linux_xfs_sgid - vfs_time_audit idmap_autorid idmap_tdb2 - idmap_ad - idmap_rid idmap_hash idmap_rfc2307''')) + vfs_preopen vfs_catia + vfs_media_harmony vfs_unityed_media vfs_fruit vfs_shell_snap + vfs_commit vfs_worm vfs_crossrename vfs_linux_xfs_sgid + vfs_time_audit vfs_offline + ''')) + 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')) @@ -1854,7 +1627,7 @@ main() { if conf.CONFIG_SET('HAVE_STATFS_F_FSID'): default_shared_modules.extend(TO_LIST('vfs_fileid')) - if (conf.CONFIG_SET('HAVE_STRUCT_MSGHDR_MSG_CONTROL') or conf.CONFIG_SET('HAVE_STRUCT_MSGHDR_MSG_ACCTRIGHTS')): + if (conf.CONFIG_SET('HAVE_STRUCT_MSGHDR_MSG_CONTROL') or conf.CONFIG_SET('HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS')): default_shared_modules.extend(TO_LIST('vfs_aio_fork')) if Options.options.with_pthreadpool: @@ -1873,20 +1646,24 @@ main() { default_static_modules.extend(TO_LIST('charset_macosxfs')) if conf.CONFIG_SET('HAVE_GPFS'): - default_shared_modules.extend(TO_LIST('vfs_gpfs')) + default_shared_modules.extend(TO_LIST('vfs_gpfs')) - if conf.CONFIG_SET('HAVE_LINUX_IOCTL'): + if (conf.CONFIG_SET('HAVE_LINUX_IOCTL') + and conf.CONFIG_SET('HAVE_BASENAME') and conf.CONFIG_SET('HAVE_DIRNAME')): default_shared_modules.extend(TO_LIST('vfs_btrfs')) - if conf.CONFIG_SET('SAMBA_FAM_LIBS'): - default_shared_modules.extend(TO_LIST('vfs_notify_fam')) - if conf.CONFIG_SET("HAVE_CEPH"): default_shared_modules.extend(TO_LIST('vfs_ceph')) if conf.CONFIG_SET('HAVE_GLUSTERFS'): default_shared_modules.extend(TO_LIST('vfs_glusterfs')) + if conf.CONFIG_SET('HAVE_VXFS'): + default_shared_modules.extend(TO_LIST('vfs_vxfs')) + + if conf.CONFIG_SET('HAVE_DBUS'): + default_shared_modules.extend(TO_LIST('vfs_snapper')) + explicit_shared_modules = TO_LIST(Options.options.shared_modules, delimiter=',') explicit_static_modules = TO_LIST(Options.options.static_modules, delimiter=',') @@ -1903,23 +1680,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 @@ -1963,6 +1783,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')