Changeset 988 for vendor/current/source3/wscript
- Timestamp:
- Nov 24, 2016, 1:14:11 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/source3/wscript
r860 r988 1 #! /usr/bin/env python 2 3 srcdir = '..' 4 blddir = 'bin' 5 6 APPNAME='samba' 7 VERSION=None 1 #!/usr/bin/env python 2 3 srcdir=".." 8 4 9 5 import sys, os … … 16 12 import samba3 17 13 14 default_prefix = Options.default_prefix = '/usr/local/samba' 15 18 16 def set_options(opt): 19 if not os.getenv('TOPLEVEL_BUILD'):20 opt.BUILTIN_DEFAULT('NONE')21 opt.PRIVATE_EXTENSION_DEFAULT('s3')22 opt.RECURSE('../lib/replace')23 opt.RECURSE('build')24 opt.RECURSE('selftest')25 opt.RECURSE('../lib/nss_wrapper')26 opt.RECURSE('../lib/socket_wrapper')27 opt.RECURSE('../lib/tevent')28 opt.RECURSE('../lib/tdb')29 17 30 18 opt.add_option('--with-static-modules', 31 help=("Comma-separated list of names of modules to statically link in"), 19 help=("Comma-separated list of names of modules to statically link in. "+ 20 "May include !module to disable 'module'. "+ 21 "Can be '!FORCED' to disable all non-required static only modules. "+ 22 "Can be '!DEFAULT' to disable all modules defaulting to a static build. "+ 23 "Can be 'ALL' to build all default shared modules static. "+ 24 "The most specific one wins, while the order is ignored "+ 25 "and --with-static-modules is evaluated before "+ 26 "--with-shared-modules"), 32 27 action="store", dest='static_modules', default=None) 33 28 opt.add_option('--with-shared-modules', 34 help=("Comma-separated list of names of modules to build shared"), 29 help=("Comma-separated list of names of modules to build shared. "+ 30 "May include !module to disable 'module'. "+ 31 "Can be '!FORCED' to disable all non-required shared only modules. "+ 32 "Can be '!DEFAULT' to disable all modules defaulting to a shared build. "+ 33 "Can be 'ALL' to build all default static modules shared. "+ 34 "The most specific one wins, while the order is ignored "+ 35 "and --with-static-modules is evaluated before "+ 36 "--with-shared-modules"), 35 37 action="store", dest='shared_modules', default=None) 36 opt.add_option('--enable-selftest',37 help=("enable options necessary for selftest"),38 action="store_true", dest='enable_selftest', default=False)39 38 40 39 opt.SAMBA3_ADD_OPTION('winbind') 41 opt.SAMBA3_ADD_OPTION('swat')42 40 opt.SAMBA3_ADD_OPTION('ads') 43 opt.SAMBA3_ADD_OPTION('krb5')44 41 opt.SAMBA3_ADD_OPTION('ldap') 45 42 opt.SAMBA3_ADD_OPTION('cups', with_name="enable", without_name="disable") 46 43 opt.SAMBA3_ADD_OPTION('iprint', with_name="enable", without_name="disable") 47 opt.SAMBA3_ADD_OPTION('merged-build', with_name="enable", without_name="disable")48 44 opt.SAMBA3_ADD_OPTION('pam') 49 opt.SAMBA3_ADD_OPTION('pam_smbpass')50 45 opt.SAMBA3_ADD_OPTION('quotas') 51 opt.SAMBA3_ADD_OPTION('sys-quotas')52 46 opt.SAMBA3_ADD_OPTION('sendfile-support') 53 47 opt.SAMBA3_ADD_OPTION('utmp') 54 opt.SAMBA3_ADD_OPTION('pthreadpool', with_name="enable", without_name="disable" )48 opt.SAMBA3_ADD_OPTION('pthreadpool', with_name="enable", without_name="disable", default=True) 55 49 opt.SAMBA3_ADD_OPTION('avahi', with_name="enable", without_name="disable") 56 50 opt.SAMBA3_ADD_OPTION('iconv') … … 59 53 opt.SAMBA3_ADD_OPTION('syslog') 60 54 opt.SAMBA3_ADD_OPTION('automount') 61 opt.SAMBA3_ADD_OPTION('aio-support') 62 opt.SAMBA3_ADD_OPTION('profiling-data') 63 64 opt.SAMBA3_ADD_OPTION('cluster-support') 65 66 opt.add_option('--with-ctdb-dir', 67 help=("Directory under which ctdb is installed"), 68 action="store", dest='ctdb_dir', default=None) 69 opt.add_option('--enable-old-ctdb', 70 help=("enable building against (too) old version of ctdb (default=false)"), 71 action="store_true", dest='enable_old_ctdb', default=False) 72 73 55 opt.SAMBA3_ADD_OPTION('dmapi', default=None) # None means autodetection 56 opt.SAMBA3_ADD_OPTION('fam', default=None) # None means autodetection 57 opt.SAMBA3_ADD_OPTION('profiling-data', default=False) 58 opt.SAMBA3_ADD_OPTION('libarchive', default=None) 59 60 opt.SAMBA3_ADD_OPTION('cluster-support', default=None) 61 62 opt.SAMBA3_ADD_OPTION('regedit', default=None) 63 64 opt.SAMBA3_ADD_OPTION('fake-kaserver', 65 help=("Include AFS fake-kaserver support"), default=False) 66 67 opt.add_option('--with-libcephfs', 68 help=("Directory under which libcephfs is installed"), 69 action="store", dest='libcephfs_dir', default=None) 70 71 opt.SAMBA3_ADD_OPTION('glusterfs', with_name="enable", without_name="disable", default=True) 72 73 opt.add_option('--enable-vxfs', 74 help=("enable support for VxFS (default=no)"), 75 action="store_true", dest='enable_vxfs', default=False) 76 77 opt.SAMBA3_ADD_OPTION('spotlight', with_name="enable", without_name="disable", default=False) 74 78 75 79 def configure(conf): 76 80 from samba_utils import TO_LIST 77 81 78 if not conf.env.toplevel_build:79 version = samba_version.load_version(env=conf.env)80 conf.DEFINE('CONFIG_H_IS_FROM_SAMBA', 1)81 conf.DEFINE('_SAMBA_BUILD_', version.MAJOR, add_to_cflags=True)82 conf.DEFINE('HAVE_CONFIG_H', 1, add_to_cflags=True)82 default_static_modules = [] 83 default_shared_modules = [] 84 required_static_modules = [] 85 forced_static_modules = [] 86 forced_shared_modules = [] 83 87 84 88 if Options.options.developer: … … 86 90 conf.env.developer = True 87 91 88 if Options.options.with_swat: 89 conf.env['build_swat'] = True 90 91 if not conf.env.toplevel_build: 92 conf.RECURSE('../lib/replace') 93 conf.RECURSE('build') 94 conf.RECURSE('../lib/tdb') 95 conf.RECURSE('../lib/talloc') 96 conf.RECURSE('../lib/tevent') 97 conf.RECURSE('../lib/popt') 98 conf.RECURSE('../lib/nss_wrapper') 99 conf.RECURSE('../lib/socket_wrapper') 100 conf.RECURSE('../lib/zlib') 101 conf.RECURSE('../libcli/smbreadline') 102 conf.RECURSE('../lib/util') 103 104 conf.ADD_EXTRA_INCLUDES('''#source3 #source3/include #lib/replace''') 105 if not conf.env.USING_SYSTEM_TDB: 106 conf.ADD_EXTRA_INCLUDES('#lib/tdb/include') 107 if not conf.env.USING_SYSTEM_TEVENT: 108 conf.ADD_EXTRA_INCLUDES('#lib/tevent') 109 if not conf.env.USING_SYSTEM_TALLOC: 110 conf.ADD_EXTRA_INCLUDES('#lib/talloc') 111 if not conf.env.USING_SYSTEM_POPT: 112 conf.ADD_EXTRA_INCLUDES('#lib/popt') 113 114 conf.ADD_LDFLAGS("-Wl,--export-dynamic", testflags=True) 92 if sys.platform != 'openbsd5': 93 conf.ADD_LDFLAGS("-Wl,--export-dynamic", testflags=True) 94 95 # We crash without vfs_default 96 required_static_modules.extend(TO_LIST('vfs_default')) 115 97 116 98 conf.CHECK_HEADERS('execinfo.h libexc.h libunwind.h netdb.h') 117 conf.CHECK_HEADERS('linux/falloc.h ')118 119 conf.CHECK_FUNCS('getcwd fchown chmod fchmod mknod mknod64')99 conf.CHECK_HEADERS('linux/falloc.h linux/ioctl.h') 100 101 conf.CHECK_FUNCS('getcwd fchown chmod fchmod mknod') 120 102 conf.CHECK_FUNCS('strtol strchr strupr chflags') 121 103 conf.CHECK_FUNCS('getrlimit fsync fdatasync setpgid') 122 104 conf.CHECK_FUNCS('setsid glob strpbrk crypt16 getauthuid') 123 conf.CHECK_FUNCS(' sigprocmask sigblock sigaction sigsetinnetgr')105 conf.CHECK_FUNCS('innetgr') 124 106 conf.CHECK_FUNCS('initgroups select poll rdchk getgrnam getgrent pathconf') 125 conf.CHECK_FUNCS('setpriv setgidx setuidx setgroups sysc onf stat64 fstat64')126 conf.CHECK_FUNCS(' lstat64 fopen64 atexit grantpt posix_openpt lseek64 ftruncate64 fallocate fallocate64 posix_fallocate posix_fallocate64')127 conf.CHECK_FUNCS('fseeko fseek64 fseeko64 ftell64 ftello64setluid')107 conf.CHECK_FUNCS('setpriv setgidx setuidx setgroups syscall sysconf') 108 conf.CHECK_FUNCS('atexit grantpt posix_openpt fallocate posix_fallocate') 109 conf.CHECK_FUNCS('fseeko setluid') 128 110 conf.CHECK_FUNCS('getpwnam', headers='sys/types.h pwd.h') 129 conf.CHECK_FUNCS(' opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64')130 conf.CHECK_FUNCS('f dopendir fdopendir64')131 conf.CHECK_FUNCS('getpwent_r getdents64setenv strcasecmp fcvt fcvtl')132 conf.CHECK_FUNCS('syslog vsyslog timegm setlocale nl_langinfo')111 conf.CHECK_FUNCS('fdopendir') 112 conf.CHECK_FUNCS('fstatat') 113 conf.CHECK_FUNCS('getpwent_r setenv strcasecmp fcvt fcvtl') 114 conf.CHECK_FUNCS('syslog vsyslog timegm setlocale') 133 115 conf.CHECK_FUNCS_IN('nanosleep', 'rt') 134 116 conf.CHECK_FUNCS('lutimes futimes utimensat futimens') … … 137 119 conf.CHECK_FUNCS('shmget') 138 120 conf.CHECK_FUNCS_IN('shm_open', 'rt', checklibc=True) 139 conf.CHECK_FUNCS('gettext dgettext bindtextdomain textdomain')140 121 #FIXME: for some reason this one still fails 141 122 conf.CHECK_FUNCS_IN('yp_get_default_domain', 'nsl') 142 123 conf.CHECK_FUNCS_IN('dn_expand _dn_expand __dn_expand', 'resolv') 124 conf.CHECK_FUNCS_IN('dn_expand', 'inet') 143 125 conf.CHECK_DECLS('fdatasync', reverse=True) 144 126 conf.CHECK_DECLS('readahead', reverse=True, headers='fcntl.h') 145 146 if conf.CONFIG_SET('HAVE_LONG_LONG'):147 conf.DEFINE('HAVE_LONGLONG', 1)148 127 149 128 if conf.CHECK_CODE(''' … … 151 130 #include <unistd.h> 152 131 #endif 153 long ret = splice(0,0,1,0,400, 0);132 long ret = splice(0,0,1,0,400,SPLICE_F_MOVE); 154 133 ''', 155 134 'HAVE_LINUX_SPLICE', … … 157 136 conf.CHECK_DECLS('splice', reverse=True, headers='fcntl.h') 158 137 159 # Check for inotify support 160 conf.CHECK_HEADERS('linux/inotify.h asm/unistd.h sys/inotify.h') 161 conf.CHECK_FUNCS('inotify_init') 162 if "HAVE_INOTIFY_INIT" in conf.env: 163 if "HAVE_LINUX_INOTIFY_H" in conf.env or "HAVE_SYS_INOTIFY_H" in conf.env: 164 conf.DEFINE('HAVE_INOTIFY', 1) 138 # Check for inotify support (Skip if we are SunOS) 139 #NOTE: illumos provides sys/inotify.h but is not an exact match for linux 140 host_os = sys.platform 141 if host_os.rfind('sunos') == -1: 142 conf.CHECK_HEADERS('sys/inotify.h') 143 if "HAVE_SYS_INOTIFY_H" in conf.env: 144 conf.DEFINE('HAVE_INOTIFY', 1) 165 145 166 146 # Check for kernel change notify support … … 200 180 #include <sys/file.h> 201 181 #ifndef LOCK_MAND 202 #define LOCK_MAND 203 #define LOCK_READ 182 #define LOCK_MAND 32 183 #define LOCK_READ 64 204 184 #endif 205 185 main() { 206 186 exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0); 207 187 }''', 'HAVE_KERNEL_SHARE_MODES', addmain=False, execute=True, 208 msg="Checking for krenel share modes") 188 msg="Checking for kernel share modes") 189 190 # check for fam libs 191 samba_fam_libs=None 192 check_for_fam=False 193 if Options.options.with_fam is None: 194 check_for_fam=True 195 elif Options.options.with_fam == True: 196 check_for_fam=True 197 198 if check_for_fam and conf.CHECK_HEADERS('fam.h'): 199 if conf.CHECK_FUNCS_IN('FAMOpen2', 'fam'): 200 samba_fam_libs='fam' 201 elif conf.CHECK_FUNCS_IN('FAMOpen2', 'fam C'): 202 samba_fam_libs='fam C' 203 conf.CHECK_TYPE('enum FAMCodes', headers='fam.h', 204 define='HAVE_FAM_H_FAMCODES_TYPEDEF', 205 msg='Checking whether enum FAMCodes is available') 206 conf.CHECK_FUNCS_IN('FAMNoExists', 'fam') 207 208 if samba_fam_libs is not None: 209 conf.DEFINE('SAMBA_FAM_LIBS', samba_fam_libs) 210 else: 211 if Options.options.with_fam == True: 212 conf.fatal('FAM support requested, but no suitable FAM library found') 213 elif check_for_fam: 214 Logs.warn('no suitable FAM library found') 215 216 # check for libarchive (tar command in smbclient) 217 # None means autodetect, True/False means enable/disable 218 conf.SET_TARGET_TYPE('archive', 'EMPTY') 219 if Options.options.with_libarchive is not False: 220 libarchive_mandatory = Options.options.with_libarchive == True 221 Logs.info("Checking for libarchive existence") 222 if conf.CHECK_HEADERS('archive.h') and conf.CHECK_LIB('archive', shlib=True): 223 conf.CHECK_FUNCS_IN('archive_read_support_filter_all archive_read_free', 'archive') 224 elif libarchive_mandatory: 225 conf.fatal('libarchive support requested, but not found') 226 227 # check for DMAPI libs 228 if Options.options.with_dmapi == False: 229 have_dmapi = False 230 else: 231 have_dmapi = True 232 Logs.info("Checking for DMAPI library existence") 233 samba_dmapi_lib = '' 234 if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'dm'): 235 samba_dmapi_lib = 'dm' 236 else: 237 if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'jfsdm'): 238 samba_dmapi_lib = 'jfsdm' 239 else: 240 if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'dmapi'): 241 samba_dmapi_lib = 'dmapi' 242 else: 243 if conf.CHECK_FUNCS_IN('dm_get_eventlist', 'xdsm'): 244 samba_dmapi_lib = 'xdsm' 245 # only bother to test headers and compilation when a candidate 246 # library has been found 247 if samba_dmapi_lib == '': 248 have_dmapi = False 249 broken_dmapi = "no suitable DMAPI library found" 250 251 if have_dmapi: 252 conf.CHECK_HEADERS('sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h dmapi.h') 253 conf.CHECK_CODE(''' 254 #include <time.h> /* needed by Tru64 */ 255 #include <sys/types.h> /* needed by AIX */ 256 #ifdef HAVE_XFS_DMAPI_H 257 #include <xfs/dmapi.h> 258 #elif defined(HAVE_SYS_DMI_H) 259 #include <sys/dmi.h> 260 #elif defined(HAVE_SYS_JFSDMAPI_H) 261 #include <sys/jfsdmapi.h> 262 #elif defined(HAVE_SYS_DMAPI_H) 263 #include <sys/dmapi.h> 264 #elif defined(HAVE_DMAPI_H) 265 #include <dmapi.h> 266 #endif 267 268 /* This link test is designed to fail on IRI 6.4, but should 269 * succeed on Linux, IRIX 6.5 and AIX. 270 */ 271 int main(int argc, char **argv) 272 { 273 char * version; 274 dm_eventset_t events; 275 /* This doesn't take an argument on IRIX 6.4. */ 276 dm_init_service(&version); 277 /* IRIX 6.4 expects events to be a pointer. */ 278 DMEV_ISSET(DM_EVENT_READ, events); 279 280 return 0; 281 } 282 ''', 283 'USEABLE_DMAPI_LIBRARY', 284 addmain=False, 285 execute=False, 286 lib=samba_dmapi_lib, 287 msg='Checking whether DMAPI lib '+samba_dmapi_lib+' can be used') 288 if not conf.CONFIG_SET('USEABLE_DMAPI_LIBRARY'): 289 have_dmapi = False 290 broken_dmapi = "no usable DMAPI library found" 291 292 if have_dmapi: 293 Logs.info("Building with DMAPI support.") 294 conf.env['dmapi_lib'] = samba_dmapi_lib 295 conf.DEFINE('USE_DMAPI', 1) 296 else: 297 if Options.options.with_dmapi == False: 298 Logs.info("Building without DMAPI support (--without-dmapi).") 299 elif Options.options.with_dmapi == True: 300 Logs.error("DMAPI support not available: " + broken_dmapi) 301 conf.fatal('DMAPI support requested but not found.'); 302 else: 303 Logs.warn("Building without DMAPI support: " + broken_dmapi) 304 conf.env['dmapi_lib'] = '' 209 305 210 306 # Check for various members of the stat structure 211 conf.CHECK_TYPES('blksize_t blkcnt_t')212 307 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_blocks', define='HAVE_STAT_ST_BLOCKS', 213 308 headers='sys/stat.h') … … 215 310 headers='sys/stat.h') 216 311 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_flags', define='HAVE_STAT_ST_FLAGS', 217 headers='sys/types.h sys/stat.h unistd.h') 312 headers='sys/types.h sys/stat.h unistd.h') 313 314 if "HAVE_BLKCNT_T" in conf.env: 315 conf.CHECK_CODE(''' 316 static int test_array[1 - 2 * !(((long int)(sizeof(blkcnt_t))) <= 4)];''', 317 'SIZEOF_BLKCNT_T_4', 318 headers='replace.h sys/types.h sys/stat.h unistd.h', 319 msg="Checking whether blkcnt_t is 32 bit") 320 321 # If sizeof is 4 it can't be 8 322 if "HAVE_BLKCNT_T" in conf.env: 323 if not conf.CONFIG_SET('SIZEOF_BLKCNT_T_4'): 324 conf.CHECK_CODE(''' 325 static int test_array[1 - 2 * !(((long int)(sizeof(blkcnt_t))) <= 8)];''', 326 'SIZEOF_BLKCNT_T_8', 327 headers='replace.h sys/types.h sys/stat.h unistd.h', 328 msg="Checking whether blkcnt_t is 64 bit") 218 329 219 330 # Check for POSIX capability support … … 232 343 msg="Checking whether POSIX capabilities are available") 233 344 234 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from235 # rpc/rpc.h. This is *really* broken but some systems (DEC OSF1) do this.236 # -- JRA.237 if conf.CONFIG_SET("HAVE_RPC_RPC_H"):238 conf.CHECK_TYPE('int16', headers='rpc/rpc.h',239 define='HAVE_INT16_FROM_RPC_RPC_H',240 msg="Checking for int16 typedef included by rpc/rpc.h")241 conf.CHECK_CODE('uint16 testvar;', 'HAVE_INT16_FROM_RPC_RPC_H',242 headers='sys/types.h rpc/rpc.h',243 msg="Checking for uint16 typedef included by rpc/rpc.h")244 conf.CHECK_CODE('int32 testvar;', 'HAVE_INT16_FROM_RPC_RPC_H',245 headers='sys/types.h rpc/rpc.h',246 msg="Checking for int32 typedef included by rpc/rpc.h")247 conf.CHECK_CODE('uint32 testvar;', 'HAVE_INT16_FROM_RPC_RPC_H',248 headers='sys/types.h rpc/rpc.h',249 msg="Checking for uint32 typedef included by rpc/rpc.h")250 345 conf.CHECK_CODE('int i;', 'BROKEN_NISPLUS_INCLUDE_FILES', 251 346 headers='sys/types.h sys/acl.h rpcsvc/nis.h', … … 254 349 # Check if the compiler will optimize out functions 255 350 conf.CHECK_CODE(''' 256 if (0) { 257 this_function_does_not_exist(); 258 } else { 259 return 1; 351 #include <sys/types.h> 352 size_t __unsafe_string_function_usage_here_size_t__(void); 353 #define CHECK_STRING_SIZE(d, len) (sizeof(d) != (len) && sizeof(d) != sizeof(char *)) 354 static size_t push_string_check_fn(void *dest, const char *src, size_t dest_len) { 355 return 0; 356 } 357 358 #define push_string_check(dest, src, dest_len) \ 359 (CHECK_STRING_SIZE(dest, dest_len) \ 360 ? __unsafe_string_function_usage_here_size_t__() \ 361 : push_string_check_fn(dest, src, dest_len)) 362 363 int main(int argc, char **argv) { 364 char outbuf[1024]; 365 char *p = outbuf; 366 const char *foo = "bar"; 367 p += 31 + push_string_check(p + 31, foo, sizeof(outbuf) - (p + 31 - outbuf)); 368 return 0; 260 369 }''', 'HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS', 261 msg="Checking if the compiler will optimize out functions") 370 addmain=False, 371 add_headers=False, 372 msg="Checking if the compiler will optimize out functions") 262 373 263 374 # Check if the compiler supports the LL suffix on long long integers … … 268 379 269 380 conf.CHECK_FUNCS(''' 270 _acl __acl add_proplist_entry atexit attr_getf attr_list attr_listf 271 attropen attr_remove attr_removef attr_set attr_setf backtrace_symbols 272 bindtextdomain _chdir __chdir chflags chmod _close __close _closedir 273 __closedir closedir64 creat64 crypt16 delproplist devnm dgettext dirfd 381 _acl __acl atexit 382 _chdir __chdir chflags chmod _close __close _closedir 383 __closedir crypt16 devnm dirfd 274 384 DNSServiceRegister _dup __dup _dup2 __dup2 endmntent execl 275 extattr_delete_fd extattr_delete_link extattr_get_fd extattr_get_file 276 extattr_get_link extattr_list_fd extattr_list_file extattr_list_link 277 extattr_set_fd extattr_set_file extattr_set_link _facl __facl _fchdir 385 _facl __facl _fchdir 278 386 __fchdir fchmod fchown _fcntl __fcntl fcvt fcvtl fdatasync 279 fdelproplist fgetea fgetproplist fgetxattr flistea flistxattr fopen64 280 _fork __fork fremoveea fremovexattr fseeko fseek64 fseeko64 fsetea 281 fsetproplist fsetxattr _fstat __fstat fstat64 _fstat64 __fstat64 fsync 282 ftell64 ftello64 ftruncate64 futimens futimes __fxstat getauthuid 283 getcwd _getcwd __getcwd getdents __getdents getdents64 getdirentries 387 _fork __fork fseeko 388 fsetxattr _fstat __fstat fsync 389 futimens futimes __fxstat getauthuid 390 getcwd _getcwd __getcwd getdents __getdents getdirentries 284 391 getgrent getgrnam getgrouplist getgrset getmntent getpagesize 285 getp roplist get_proplist_entry getpwanam getpwent_r getrlimit gettext392 getpwanam getpwent_r getrlimit 286 393 glob grantpt hstrerror initgroups innetgr 287 inotify_init lgetea lgetxattr listea listxattr llistea llistxattr 288 llseek _llseek __llseek lremoveea lremovexattr _lseek __lseek lseek64 289 lsetea lsetxattr _lstat __lstat lstat64 _lstat64 __lstat64 lutimes 290 __lxstat memalign mknod mknod64 mlock mlockall munlock munlockall 291 nl_langinfo _open __open open64 _open64 __open64 _opendir __opendir 292 opendir64 pathconf poll posix_fallocate posix_fallocate64 293 posix_memalign prctl pread _pread __pread pread64 _pread64 __pread64 294 pwrite _pwrite __pwrite pwrite64 _pwrite64 295 __pwrite64 rdchk _read __read _readdir __readdir readdir64 _readdir64 296 __readdir64 removeea removexattr rewinddir64 _seekdir __seekdir 297 seekdir64 select setea setenv setgidx setgroups setlocale setluid 298 setmntent setpgid setpriv setproplist setsid setuidx 299 setxattr shmget shm_open sigaction sigblock sigprocmask sigset 300 sizeof_proplist_entry _stat __stat stat64 _stat64 __stat64 statvfs 301 strcasecmp strchr strpbrk strsignal strtol strupr sysconf sysctlbyname 302 __sys_llseek syslog _telldir __telldir telldir64 textdomain timegm 394 llseek _llseek __llseek _lseek __lseek 395 _lstat __lstat lutimes 396 __lxstat memalign mknod mlock mlockall munlock munlockall 397 _open __open _opendir __opendir 398 pathconf poll posix_fallocate 399 posix_memalign pread _pread __pread 400 pwrite _pwrite __pwrite 401 rdchk _read __read _readdir __readdir 402 _seekdir __seekdir 403 select setenv setgidx setgroups setlocale setluid 404 setmntent setpgid setpriv setsid setuidx 405 shmget shm_open 406 _stat __stat statvfs 407 strcasecmp strchr strpbrk strsignal strtol strupr sysconf sysctl sysctlbyname 408 __sys_llseek syslog _telldir __telldir timegm 303 409 utimensat vsyslog _write __write __xstat 304 410 ''') … … 308 414 # FIXME: these should be tests for features, but the old build system just 309 415 # checks for OSes. 310 import sys311 416 host_os = sys.platform 312 417 Logs.info("building on %s" % host_os) … … 325 430 elif (host_os.rfind('darwin') > -1): 326 431 conf.DEFINE('DARWINOS', 1) 432 conf.ADD_CFLAGS('-fno-common') 327 433 conf.DEFINE('STAT_ST_BLOCKSIZE', '512') 328 conf.ADD_CFLAGS('-fno-common')329 434 elif (host_os.rfind('freebsd') > -1): 435 conf.DEFINE('FREEBSD', 1) 330 436 if conf.CHECK_HEADERS('sunacl.h'): 331 conf. define('HAVE_FREEBSD_SUNACL_H', '1')332 conf.CHECK_FUNCS_IN( 'acl', 'sunacl')437 conf.DEFINE('HAVE_FREEBSD_SUNACL_H', '1') 438 conf.CHECK_FUNCS_IN(['acl'], 'sunacl') 333 439 conf.DEFINE('STAT_ST_BLOCKSIZE', '512') 334 elif (host_os.rfind('netbsd') > -1): 440 elif (host_os.rfind('irix') > -1): 441 conf.DEFINE('IRIX', 1) 335 442 conf.DEFINE('STAT_ST_BLOCKSIZE', '512') 336 elif (host_os.rfind('openbsd') > -1): 443 elif (host_os.rfind('aix') > -1): 444 conf.DEFINE('AIX', 1) 445 conf.DEFINE('STAT_ST_BLOCKSIZE', 'DEV_BSIZE') 446 elif (host_os.rfind('hpux') > -1): 447 conf.DEFINE('HPUX', 1) 448 conf.DEFINE('STAT_ST_BLOCKSIZE', '8192') 449 elif (host_os.rfind('osf') > -1): 450 conf.DEFINE('OSF1', 1) 337 451 conf.DEFINE('STAT_ST_BLOCKSIZE', '512') 338 elif (host_os.rfind('sunos') > -1): 339 conf.DEFINE('STAT_ST_BLOCKSIZE', '512') 452 340 453 # FIXME: Add more checks here. 341 454 else: 342 Logs.warn("Unknown host_os '%s', please report this to samba-technical@samba.org" % host_os) 343 344 #FIXME: add more checks 455 conf.DEFINE('STAT_ST_BLOCKSIZE', '512') 456 345 457 if Options.options.with_acl_support: 346 if host_os.rfind('linux') > -1: 347 conf.CHECK_FUNCS_IN('acl_get_file', 'acl') 348 conf.CHECK_FUNCS_IN('getxattr', 'attr') 458 if (host_os.rfind('hpux') > -1): 459 Logs.info('Using HPUX ACLs') 460 conf.DEFINE('HAVE_HPUX_ACLS',1) 461 conf.DEFINE('POSIX_ACL_NEEDS_MASK',1) 462 default_static_modules.extend(TO_LIST('vfs_hpuxacl')) 463 elif (host_os.rfind('aix') > -1): 464 Logs.info('Using AIX ACLs') 465 conf.DEFINE('HAVE_AIX_ACLS',1) 466 default_static_modules.extend(TO_LIST('vfs_aixacl vfs_aixacl2')) 467 elif (host_os.rfind('darwin') > -1): 468 Logs.warn('ACLs on Darwin currently not supported') 469 conf.fatal("ACL support not available on Darwin/MacOS. " 470 "Use --without-acl-support for building without " 471 "ACL support. " 472 "ACL support is required to change permissions " 473 "from Windows clients.") 474 else: 475 conf.CHECK_FUNCS_IN(['acl_get_file'], 'acl') 349 476 if conf.CHECK_CODE(''' 350 477 acl_t acl; … … 355 482 'HAVE_POSIX_ACLS', 356 483 headers='sys/types.h sys/acl.h', link=False, 357 484 msg="Checking for POSIX ACL support") : 358 485 conf.CHECK_CODE(''' 359 486 acl_permset_t permset_d; … … 364 491 headers='sys/types.h sys/acl.h', link=True, 365 492 msg="Checking whether acl_get_perm_np() is available") 366 else: 367 conf.DEFINE('HAVE_NO_ACLS', 1) 368 conf.SET_TARGET_TYPE('acl', 'EMPTY') 369 else: 370 conf.DEFINE('HAVE_NO_ACLS', 1) 371 conf.SET_TARGET_TYPE('acl', 'EMPTY') 493 # source3/lib/sysacls.c calls posixacl_sys_acl_get_file() 494 required_static_modules.extend(TO_LIST('vfs_posixacl')) 495 conf.CHECK_VARIABLE('ACL_EVERYONE', headers='sys/acl.h') 496 elif conf.CHECK_FUNCS_IN(['facl'], 'sec'): 497 Logs.info('Using solaris or UnixWare ACLs') 498 conf.DEFINE('HAVE_SOLARIS_UNIXWARE_ACLS',1) 499 default_static_modules.extend(TO_LIST('vfs_solarisacl')) 500 elif conf.CHECK_FUNCS_IN(['acl_get_fd'], 'pacl'): 501 Logs.info('Using Tru64 ACLs') 502 conf.DEFINE('HAVE_TRU64_ACLS',1) 503 default_static_modules.extend(TO_LIST('vfs_tru64acl')) 504 else: 505 conf.fatal("ACL support not found. Try installing libacl1-dev " 506 "or libacl-devel. " 507 "Otherwise, use --without-acl-support to build " 508 "without ACL support. " 509 "ACL support is required to change permissions from " 510 "Windows clients.") 372 511 373 512 if conf.CHECK_FUNCS('dirfd'): … … 376 515 conf.CHECK_CODE('struct statfs fsd; fsid_t fsid = fsd.f_fsid; return statfs(".", &fsd);', 377 516 'HAVE_STATFS_F_FSID', 378 msg="vfs_fileid :checking for statfs() and struct statfs.f_fsid",517 msg="vfs_fileid checking for statfs() and struct statfs.f_fsid", 379 518 headers='sys/types.h sys/statfs.h', 380 519 execute=True) … … 382 521 if conf.CONFIG_SET('HAVE_FALLOCATE'): 383 522 conf.CHECK_CODE(''' 384 #if defined(HAVE_UNISTD_H) 385 #include <unistd.h> 386 #endif 387 #include <sys/types.h> 388 #define _GNU_SOURCE 389 #include <fcntl.h> 390 #if defined(HAVE_LINUX_FALLOC_H) 391 #include <linux/falloc.h> 392 #endif 393 int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);''', 394 'HAVE_LINUX_FALLOCATE', 395 msg="Checking whether the Linux 'fallocate' function is available") 396 if conf.CONFIG_SET('HAVE_FALLOCATE64'): 523 int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);''', 524 'HAVE_LINUX_FALLOCATE', 525 msg="Checking whether the Linux 'fallocate' function is available", 526 headers='unistd.h sys/types.h fcntl.h linux/falloc.h') 397 527 conf.CHECK_CODE(''' 398 #if defined(HAVE_UNISTD_H) 399 #include <unistd.h> 400 #endif 401 #include <sys/types.h> 402 #define _GNU_SOURCE 403 #include <fcntl.h> 404 #if defined(HAVE_LINUX_FALLOC_H) 405 #include <linux/falloc.h> 406 #endif 407 int ret = fallocate64(0, FALLOC_FL_KEEP_SIZE, 0, 10);''', 408 'HAVE_LINUX_FALLOCATE64', 409 msg="Checking whether the Linux 'fallocate64' function is available") 528 int ret = fallocate(0, FALLOC_FL_PUNCH_HOLE, 0, 10);''', 529 'HAVE_FALLOC_FL_PUNCH_HOLE', 530 msg="Checking whether Linux 'fallocate' supports hole-punching", 531 headers='unistd.h sys/types.h fcntl.h linux/falloc.h') 532 410 533 conf.CHECK_CODE(''' 411 #if defined(HAVE_UNISTD_H) 412 #include <unistd.h> 413 #endif 414 #include <fcntl.h> 415 ssize_t err = readahead(0,0,0x80000);''', 416 'HAVE_LINUX_READAHEAD', 417 msg="Checking whether Linux readahead is available") 534 int ret = lseek(0, 0, SEEK_HOLE); 535 ret = lseek(0, 0, SEEK_DATA);''', 536 'HAVE_LSEEK_HOLE_DATA', 537 msg="Checking whether lseek supports hole/data seeking", 538 headers='unistd.h sys/types.h') 539 540 conf.CHECK_CODE(''' 541 ssize_t err = readahead(0,0,0x80000);''', 542 'HAVE_LINUX_READAHEAD', 543 msg="Checking whether Linux readahead is available", 544 headers='unistd.h fcntl.h') 418 545 conf.CHECK_DECLS('readahead', headers='fcntl.h', always=True) 419 546 420 conf.CHECK_CODE(''' 421 #include <sys/types.h> 422 #include <sys/socket.h>], 423 struct ucred cred; 424 socklen_t cred_len; 425 int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);''', 426 'HAVE_PEERCRED', 427 msg="Checking whether we can use SO_PEERCRED to get socket credentials") 428 429 conf.CHECK_CODE(''' 430 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))) 431 #include <sys/types.h> 432 #else 433 __COMPILE_ERROR_ 434 #endif 435 int i;''', 436 'HAVE_EXPLICIT_LARGEFILE_SUPPORT', 437 msg="Checking whether large file support can be enabled") 438 439 if Options.options.with_aio_support: 440 conf.CHECK_FUNCS_IN('aio_read', 'aio') 441 conf.CHECK_FUNCS_IN('aio_read', 'rt') 442 conf.CHECK_CODE('struct aiocb a; return aio_read(&a);', 443 'HAVE_AIO', 444 msg='Checking for asynchronous io support', 445 headers='sys/types.h aio.h', 446 lib='aio rt') 447 conf.CHECK_CODE('struct aiocb64 a; return aio_read64(&a);', 448 'HAVE_AIO64', 449 msg='Checking for 64-bit asynchronous io support', 450 headers='sys/types.h aio.h', 451 lib='aio rt') 452 if conf.CONFIG_SET('HAVE_AIO64'): 453 conf.DEFINE('HAVE_AIOCB64', '1') 454 conf.DEFINE('WITH_AIO', '1') 455 elif conf.CONFIG_SET('HAVE_AIO'): 456 conf.DEFINE('WITH_AIO', '1') 457 if conf.CONFIG_SET('HAVE_AIO'): 458 conf.CHECK_CODE('struct aiocb a; return aio_read(&a);', 'HAVE_AIO_READ', msg='Checking for aio_read', headers='aio.h', lib='aio rt') 459 conf.CHECK_CODE('struct aiocb a; return aio_write(&a);', 'HAVE_AIO_WRITE', msg='Checking for aio_write', headers='aio.h', lib='aio rt') 460 conf.CHECK_CODE('struct aiocb a; return aio_fsync(1, &a);', 'HAVE_AIO_FSYNC', msg='Checking for aio_fsync', headers='aio.h', lib='aio rt') 461 conf.CHECK_CODE('struct aiocb a; return aio_return(&a);', 'HAVE_AIO_RETURN', msg='Checking for aio_return', headers='aio.h', lib='aio rt') 462 conf.CHECK_CODE('struct aiocb a; return aio_error(&a);', 'HAVE_AIO_ERROR', msg='Checking for aio_error', headers='aio.h', lib='aio rt') 463 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') 464 conf.CHECK_CODE('struct aiocb a; return aio_suspend(&a, 1, NULL);', 'HAVE_AIO_SUSPEND', msg='Checking for aio_suspend', headers='aio.h', lib='aio rt') 465 if conf.CONFIG_SET('HAVE_AIO64'): 466 conf.CHECK_CODE('struct aiocb a; return aio_read64(&a);', 'HAVE_AIO_READ64', msg='Checking for aio_read64', headers='aio.h', lib='aio rt') 467 conf.CHECK_CODE('struct aiocb a; return aio_write64(&a);', 'HAVE_AIO_WRITE64', msg='Checking for aio_write64', headers='aio.h', lib='aio rt') 468 conf.CHECK_CODE('struct aiocb a; return aio_fsync64(1, &a);', 'HAVE_AIO_FSYNC64', msg='Checking for aio_fsync64', headers='aio.h', lib='aio rt') 469 conf.CHECK_CODE('struct aiocb a; return aio_return64(&a);', 'HAVE_AIO_RETURN64', msg='Checking for aio_return64', headers='aio.h', lib='aio rt') 470 conf.CHECK_CODE('struct aiocb a; return aio_error64(&a);', 'HAVE_AIO_ERROR64', msg='Checking for aio_error64', headers='aio.h', lib='aio rt') 471 conf.CHECK_CODE('struct aiocb a; return aio_cancel64(1, &a);', 'HAVE_AIO_CANCEL64', msg='Checking for aio_cancel64', headers='aio.h', lib='aio rt') 472 conf.CHECK_CODE('struct aiocb a; return aio_suspend64(&a, 1, NULL);', 'HAVE_AIO_SUSPEND64', msg='Checking for aio_suspend64', headers='aio.h', lib='aio rt') 473 if not conf.CONFIG_SET('HAVE_AIO'): 474 conf.DEFINE('HAVE_NO_AIO', '1') 475 else: 476 conf.DEFINE('HAVE_NO_AIO', '1') 547 conf.CHECK_CODE('int fd = openat(AT_FDCWD, ".", O_RDONLY);', 548 'HAVE_OPENAT', 549 msg='Checking for openat', 550 headers='fcntl.h') 551 552 if host_os.rfind('linux') > -1: 553 conf.CHECK_FUNCS_IN('io_submit', 'aio') 554 conf.CHECK_CODE(''' 555 struct io_event ioev; 556 struct iocb *ioc; 557 io_context_t ctx; 558 struct timespec ts; 559 int fd; 560 char *buf; 561 fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 562 io_queue_init(128,&ctx); 563 io_prep_pwrite(ioc, 1, buf, 1, 0); 564 io_prep_pread(ioc, 1, buf, 1, 0); 565 io_set_eventfd(ioc, fd); 566 io_set_callback(ioc, (io_callback_t)(0)); 567 io_submit(ctx, 1, &ioc); 568 io_getevents(ctx, 1, 1, &ioev, &ts); 569 ''', 570 'HAVE_LINUX_KERNEL_AIO', 571 msg='Checking for linux kernel asynchronous io support', 572 headers='unistd.h stdlib.h sys/types.h fcntl.h sys/eventfd.h libaio.h', 573 lib='aio') 477 574 478 575 conf.CHECK_CODE(''' 479 576 struct msghdr msg; 480 577 union { 481 578 struct cmsghdr cm; 482 579 char control[CMSG_SPACE(sizeof(int))]; 483 580 } control_un; … … 485 582 msg.msg_controllen = sizeof(control_un.control); 486 583 ''', 487 'HAVE_MSGHDR_MSG_CONTROL',488 489 584 'HAVE_STRUCT_MSGHDR_MSG_CONTROL', 585 msg='Checking if we can use msg_control for passing file descriptors', 586 headers='sys/types.h stdlib.h stddef.h sys/socket.h sys/un.h') 490 587 conf.CHECK_CODE(''' 491 588 struct msghdr msg; 492 589 int fd; 493 msg.msg_acc trights = (caddr_t) &fd;494 msg.msg_acc trightslen = sizeof(fd);590 msg.msg_accrights = (caddr_t) &fd; 591 msg.msg_accrightslen = sizeof(fd); 495 592 ''', 496 'HAVE_MSGHDR_MSG_ACCTRIGHTS',497 msg='Checking if we can use msg_acctrights for passing file descriptors',498 593 'HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS', 594 msg='Checking if we can use msg_accrights for passing file descriptors', 595 headers='sys/types.h stdlib.h stddef.h sys/socket.h sys/un.h') 499 596 500 597 if Options.options.with_winbind: … … 503 600 504 601 conf.find_program('awk', var='AWK') 505 conf.find_program('perl', var='PERL')506 507 # Darwin has extra options to xattr-family functions508 conf.CHECK_CODE('getxattr(0, 0, 0, 0, 0, 0);',509 'XATTR_ADD_OPT',510 msg="Checking whether xattr interface takes additional options",511 headers='sys/types.h attr/xattr.h sys/xattr.h')512 602 513 603 conf.CHECK_HEADERS('asm/types.h') … … 551 641 # gssapi_krb5 and other libraries to its --libs output. That breaks the use 552 642 # of an in-tree heimdal kerberos 553 conf.check_cfg(path=conf.env.CUPS_CONFIG, args="--cflags --ldflags",554 package="", uselib_store=" cups")643 conf.CHECK_CFG(path=conf.env.CUPS_CONFIG, args="--cflags --ldflags", 644 package="", uselib_store="CUPS") 555 645 conf.CHECK_HEADERS('cups/cups.h cups/language.h', lib='cups') 556 646 conf.CHECK_FUNCS_IN('httpConnect httpConnectEncrypt', 'cups') … … 565 655 566 656 if Options.options.with_iprint: 567 657 if conf.CONFIG_SET('HAVE_CUPS'): 568 658 conf.DEFINE('HAVE_IPRINT', '1') 569 659 else: … … 576 666 # Check for LDAP 577 667 if Options.options.with_ldap: 578 conf.CHECK_HEADERS('ldap.h lber.h ')668 conf.CHECK_HEADERS('ldap.h lber.h ldap_pvt.h') 579 669 conf.CHECK_TYPE('ber_tag_t', 'unsigned int', headers='ldap.h lber.h') 580 670 conf.CHECK_FUNCS_IN('ber_scanf ber_sockbuf_add_io', 'lber') … … 586 676 define='HAVE_LBER_LOG_PRINT_FN', headers='lber.h') 587 677 588 conf.CHECK_FUNCS_IN('ldap_init ldap_init ialize ldap_set_rebind_proc', 'ldap')678 conf.CHECK_FUNCS_IN('ldap_init ldap_init_fd ldap_initialize ldap_set_rebind_proc', 'ldap') 589 679 conf.CHECK_FUNCS_IN('ldap_add_result_entry', 'ldap') 590 680 … … 599 689 600 690 # last but not least, if ldap_init() exists, we want to use ldap 601 if conf.CONFIG_SET('HAVE_LDAP_INIT') :691 if conf.CONFIG_SET('HAVE_LDAP_INIT') and conf.CONFIG_SET('HAVE_LDAP_H'): 602 692 conf.DEFINE('HAVE_LDAP', '1') 603 693 conf.DEFINE('LDAP_DEPRECATED', '1') … … 608 698 conf.CONFIG_SET('HAVE_LDAP_OPT_SOCKBUF'): 609 699 conf.DEFINE('HAVE_LDAP_SASL_WRAPPING', '1') 700 else: 701 conf.fatal("LDAP support not found. " 702 "Try installing libldap2-dev or openldap-devel. " 703 "Otherwise, use --without-ldap to build without " 704 "LDAP support. " 705 "LDAP support is required for the LDAP passdb backend, " 706 "LDAP idmap backends and ADS. " 707 "ADS support improves communication with " 708 "Active Directory domain controllers.") 610 709 else: 611 710 conf.SET_TARGET_TYPE('ldap', 'EMPTY') 612 711 conf.SET_TARGET_TYPE('lber', 'EMPTY') 613 712 614 # Check for kerberos 615 have_gssapi=False 616 if Options.options.with_krb5 and not conf.env.toplevel_build: 617 Logs.info("Looking for kerberos features") 618 conf.find_program('krb5-config', var='KRB5_CONFIG') 619 if conf.env.KRB5_CONFIG: 620 conf.check_cfg(path="krb5-config", args="--cflags --libs", 621 package="gssapi", uselib_store="krb5") 622 conf.CHECK_HEADERS('krb5.h krb5/locate_plugin.h', lib='krb5') 623 conf.CHECK_HEADERS('gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h com_err.h', lib='krb5') 624 625 if conf.CONFIG_SET('HAVE_KRB5_LOCATE_PLUGIN_H'): 626 conf.env['WINBIND_KRB5_LOCATOR'] = 'bin/winbind_krb5_locator.so' 627 628 conf.CHECK_FUNCS_IN('_et_list', 'com_err') 629 conf.CHECK_FUNCS_IN('krb5_encrypt_data', 'k5crypto') 630 conf.CHECK_FUNCS_IN('crypto', 'des_set_key') 631 conf.CHECK_FUNCS_IN('copy_Authenticator', 'asn1') 632 conf.CHECK_FUNCS_IN('roken_getaddrinfo_hostspec', 'roken') 633 if conf.CHECK_FUNCS_IN('gss_display_status', 'gssapi') or \ 634 conf.CHECK_FUNCS_IN('gss_display_status', 'gssapi_krb5'): 635 have_gssapi=True 636 conf.CHECK_FUNCS_IN('gss_wrap_iov', 'gssapi gssapi_krb5 krb5') 637 conf.CHECK_FUNCS_IN('krb5_mk_req_extended krb5_kt_compare', 'krb5') 638 conf.CHECK_FUNCS(''' 639 krb5_set_real_time krb5_set_default_in_tkt_etypes krb5_set_default_tgs_enctypes 640 krb5_set_default_tgs_ktypes krb5_principal2salt krb5_use_enctype 641 krb5_string_to_key krb5_get_pw_salt krb5_string_to_key_salt krb5_auth_con_setkey 642 krb5_auth_con_setuseruserkey krb5_get_permitted_enctypes 643 krb5_get_default_in_tkt_etypes krb5_free_data_contents 644 krb5_principal_get_comp_string krb5_free_unparsed_name 645 krb5_free_keytab_entry_contents krb5_kt_free_entry krb5_krbhst_init 646 krb5_krbhst_get_addrinfo krb5_c_enctype_compare krb5_enctypes_compatible_keys 647 krb5_crypto_init krb5_crypto_destroy krb5_decode_ap_req free_AP_REQ 648 krb5_verify_checksum krb5_c_verify_checksum krb5_principal_compare_any_realm 649 krb5_parse_name_norealm krb5_princ_size krb5_get_init_creds_opt_set_pac_request 650 krb5_get_renewed_creds krb5_get_kdc_cred krb5_free_error_contents 651 initialize_krb5_error_table krb5_get_init_creds_opt_alloc 652 krb5_get_init_creds_opt_free krb5_get_init_creds_opt_get_error 653 krb5_enctype_to_string krb5_fwd_tgt_creds krb5_auth_con_set_req_cksumtype 654 krb5_get_creds_opt_alloc krb5_get_creds_opt_set_impersonate krb5_get_creds 655 krb5_get_credentials_for_user krb5_get_host_realm krb5_free_host_realm''', 656 lib='krb5 k5crypto') 657 conf.CHECK_DECLS('''krb5_get_credentials_for_user 658 krb5_auth_con_set_req_cksumtype''', 659 headers='krb5.h', always=True) 660 conf.CHECK_VARIABLE('AP_OPTS_USE_SUBKEY', headers='krb5.h') 661 conf.CHECK_VARIABLE('KV5M_KEYTAB', headers='krb5.h') 662 conf.CHECK_VARIABLE('KRB5_KU_OTHER_CKSUM', headers='krb5.h') 663 conf.CHECK_VARIABLE('KRB5_KEYUSAGE_APP_DATA_CKSUM', headers='krb5.h') 664 conf.CHECK_VARIABLE('ENCTYPE_AES128_CTS_HMAC_SHA1_96', headers='krb5.h') 665 conf.CHECK_VARIABLE('ENCTYPE_AES256_CTS_HMAC_SHA1_96', headers='krb5.h') 666 conf.CHECK_STRUCTURE_MEMBER('krb5_keytab_entry', 'key', headers='krb5.h', 667 define='HAVE_KRB5_KEYTAB_ENTRY_KEY') 668 conf.CHECK_STRUCTURE_MEMBER('krb5_keytab_entry', 'keyblock', headers='krb5.h', 669 define='HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK') 670 conf.CHECK_STRUCTURE_MEMBER('krb5_address', 'magic', headers='krb5.h', 671 define='HAVE_MAGIC_IN_KRB5_ADDRESS') 672 conf.CHECK_STRUCTURE_MEMBER('krb5_address', 'addrtype', headers='krb5.h', 673 define='HAVE_ADDRTYPE_IN_KRB5_ADDRESS') 674 conf.CHECK_STRUCTURE_MEMBER('krb5_ticket', 'enc_part2', headers='krb5.h', 675 define='HAVE_KRB5_TKT_ENC_PART2') 676 conf.CHECK_STRUCTURE_MEMBER('krb5_creds', 'keyblock', headers='krb5.h', 677 define='HAVE_KRB5_KEYBLOCK_IN_CREDS') 678 conf.CHECK_STRUCTURE_MEMBER('krb5_creds', 'session', headers='krb5.h', 679 define='HAVE_KRB5_SESSION_IN_CREDS') 680 conf.CHECK_STRUCTURE_MEMBER('krb5_ap_req', 'ticket', headers='krb5.h', 681 define='HAVE_TICKET_POINTER_IN_KRB5_AP_REQ') 682 683 conf.CHECK_TYPE('krb5_encrypt_block', headers='krb5.h') 684 685 conf.CHECK_CODE(''' 686 krb5_ticket ticket; 687 krb5_kvno kvno; 688 krb5_enctype enctype; 689 enctype = ticket.enc_part.enctype; 690 kvno = ticket.enc_part.kvno; 691 ''', 692 'KRB5_TICKET_HAS_KEYINFO', 693 headers='krb5.h', link=False, 694 msg="Checking whether the krb5_ticket structure contains the kvno and enctype") 695 conf.CHECK_CODE(''' 696 krb5_context ctx; 697 krb5_get_init_creds_opt *opt = NULL; 698 krb5_get_init_creds_opt_free(ctx, opt); 699 ''', 700 'KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT', 701 headers='krb5.h', link=False, 702 msg="Checking whether krb5_get_init_creds_opt_free takes a context argument") 703 conf.CHECK_CODE('krb5_mk_error(0,0,0)', 704 'HAVE_SHORT_KRB5_MK_ERROR_INTERFACE', 705 headers='krb5.h', link=False, 706 msg="Checking whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal") 707 conf.CHECK_CODE(''' 708 const krb5_data *pkdata; 709 krb5_context context; 710 krb5_principal principal; 711 pkdata = krb5_princ_component(context, principal, 0); 712 ''', 713 'HAVE_KRB5_PRINC_COMPONENT', 714 headers='krb5.h', lib='krb5', 715 msg="Checking whether krb5_princ_component is available") 716 717 conf.CHECK_CODE(''' 718 int main(void) { 719 char buf[256]; 720 krb5_enctype_to_string(1, buf, 256); 721 return 0; 722 }''', 723 'HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG', 724 headers='krb5.h', lib='krb5 k5crypto', 725 addmain=False, cflags='-Werror', 726 msg="Checking whether krb5_enctype_to_string takes size_t argument") 727 728 conf.CHECK_CODE(''' 729 int main(void) { 730 krb5_context context = NULL; 731 char *str = NULL; 732 krb5_enctype_to_string(context, 1, &str); 733 if (str) free (str); 734 return 0; 735 }''', 736 'HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG', 737 headers='krb5.h stdlib.h', lib='krb5', 738 addmain=False, cflags='-Werror', 739 msg="Checking whether krb5_enctype_to_string takes krb5_context argument") 740 conf.CHECK_CODE(''' 741 int main(void) { 742 krb5_context ctx = NULL; 743 krb5_principal princ = NULL; 744 const char *str = krb5_princ_realm(ctx, princ)->data; 745 return 0; 746 }''', 747 'HAVE_KRB5_PRINC_REALM', 748 headers='krb5.h', lib='krb5', 749 addmain=False, 750 msg="Checking whether the macro krb5_princ_realm is defined") 751 conf.CHECK_CODE(''' 752 int main(void) { 753 krb5_context context; 754 krb5_principal principal; 755 const char *realm; realm = krb5_principal_get_realm(context, principal); 756 return 0; 757 }''', 758 'HAVE_KRB5_PRINCIPAL_GET_REALM', 759 headers='krb5.h', lib='krb5', 760 addmain=False, 761 msg="Checking whether krb5_principal_get_realm is defined") 762 if conf.CHECK_CODE('''krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);''', 763 'KRB5_VERIFY_CHECKSUM_ARGS', 764 headers='krb5.h', lib='krb5', 765 msg="Checking whether krb5_verify_checksum takes 7 arguments"): 766 conf.DEFINE('KRB5_VERIFY_CHECKSUM_ARGS', '7') 767 else: 768 conf.DEFINE('KRB5_VERIFY_CHECKSUM_ARGS', '6') 769 770 conf.CHECK_CODE(''' 771 krb5_enctype enctype; 772 enctype = ENCTYPE_ARCFOUR_HMAC_MD5; 773 ''', 774 '_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5', 775 headers='krb5.h', lib='krb5', 776 msg="Checking whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available"); 777 conf.CHECK_CODE(''' 778 krb5_keytype keytype; 779 keytype = KEYTYPE_ARCFOUR_56; 780 ''', 781 '_HAVE_KEYTYPE_ARCFOUR_56', 782 headers='krb5.h', lib='krb5', 783 msg="Checking whether the HAVE_KEYTYPE_ARCFOUR_56 key type definition is available"); 784 if conf.CONFIG_SET('_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5') and conf.CONFIG_SET('_HAVE_KEYTYPE_ARCFOUR_56'): 785 conf.DEFINE('HAVE_ENCTYPE_ARCFOUR_HMAC_MD5', '1') 786 787 conf.CHECK_CODE(''' 788 krb5_enctype enctype; 789 enctype = ENCTYPE_ARCFOUR_HMAC; 790 ''', 791 'HAVE_ENCTYPE_ARCFOUR_HMAC', 792 headers='krb5.h', lib='krb5', 793 msg="Checking whether the ENCTYPE_ARCFOUR_HMAC key type definition is available"); 794 795 conf.CHECK_CODE(''' 796 krb5_context context; 797 krb5_keytab keytab; 798 krb5_init_context(&context); 799 return krb5_kt_resolve(context, "WRFILE:api", &keytab); 800 ''', 801 'HAVE_WRFILE_KEYTAB', 802 headers='krb5.h', lib='krb5', execute=True, 803 msg="Checking whether the WRFILE:-keytab is supported"); 804 805 # Check for KRB5_DEPRECATED handling 806 conf.CHECK_CODE('''#define KRB5_DEPRECATED 1 807 #include <krb5.h>''', 808 'HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER', addmain=False, 809 link=False, 810 msg="Checking for KRB5_DEPRECATED define taking an identifier") 811 elif conf.env.toplevel_build: 812 # setup the right defines for a in-tree heimdal build 813 Logs.info("Using in-tree heimdal kerberos defines") 814 conf.define('HAVE_GSSAPI', 1) 815 conf.define('HAVE_GSSAPI_GSSAPI_H', 1) 816 conf.define('HAVE_AP_OPTS_USE_SUBKEY', 1) 817 conf.define('HAVE_KRB5_ADDRESSES', 1) 818 conf.define('HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK', 1) 819 conf.define('HAVE_KRB5_SET_REAL_TIME', 1) 820 conf.define('HAVE_COM_ERR_H', 1) 821 conf.define('HAVE_ADDR_TYPE_IN_KRB5_ADDRESS', 1) 822 conf.define('HAVE_GSS_DISPLAY_STATUS', 1) 823 conf.define('HAVE_LIBGSSAPI', 1) 824 conf.define('HAVE_ADDR_TYPE_IN_KRB5_ADDRESS', 1) 825 conf.define('HAVE_CHECKSUM_IN_KRB5_CHECKSUM', 1) 826 conf.define('HAVE_DECL_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE', 0) 827 conf.define('HAVE_DECL_KRB5_GET_CREDENTIALS_FOR_USER', 0) 828 conf.define('HAVE_E_DATA_POINTER_IN_KRB5_ERROR', 1) 829 conf.define('HAVE_INITIALIZE_KRB5_ERROR_TABLE', 1) 830 conf.define('HAVE_KRB5_ADDRESSES', 1) 831 conf.define('HAVE_KRB5_AUTH_CON_SETKEY', 1) 832 conf.define('HAVE_KRB5_CRYPTO', 1) 833 conf.define('HAVE_KRB5_CRYPTO_DESTROY', 1) 834 conf.define('HAVE_KRB5_CRYPTO_INIT', 1) 835 conf.define('HAVE_KRB5_C_ENCTYPE_COMPARE', 1) 836 conf.define('HAVE_KRB5_C_VERIFY_CHECKSUM', 1) 837 conf.define('HAVE_FREE_AP_REQ', 1) 838 conf.define('HAVE_KRB5_DECODE_AP_REQ', 1) 839 conf.define('HAVE_KRB5_ENCTYPES_COMPATIBLE_KEYS', 1) 840 conf.define('HAVE_KRB5_ENCTYPE_TO_STRING', 1) 841 conf.define('HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG', 1) 842 conf.define('HAVE_KRB5_FREE_ERROR_CONTENTS', 1) 843 conf.define('HAVE_KRB5_FREE_HOST_REALM', 1) 844 conf.define('HAVE_KRB5_FWD_TGT_CREDS', 1) 845 conf.define('HAVE_KRB5_GET_CREDS', 1) 846 conf.define('HAVE_KRB5_GET_CREDS_OPT_ALLOC', 1) 847 conf.define('HAVE_KRB5_GET_CREDS_OPT_SET_IMPERSONATE', 1) 848 conf.define('HAVE_KRB5_GET_DEFAULT_IN_TKT_ETYPES', 1) 849 conf.define('HAVE_KRB5_GET_HOST_REALM', 1) 850 conf.define('HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC', 1) 851 conf.define('HAVE_KRB5_GET_INIT_CREDS_OPT_FREE', 1) 852 conf.define('HAVE_KRB5_GET_INIT_CREDS_OPT_GET_ERROR', 1) 853 conf.define('HAVE_KRB5_GET_INIT_CREDS_OPT_SET_PAC_REQUEST', 1) 854 conf.define('HAVE_KRB5_GET_KDC_CRED', 1) 855 conf.define('HAVE_KRB5_GET_PW_SALT', 1) 856 conf.define('HAVE_KRB5_GET_RENEWED_CREDS', 1) 857 conf.define('HAVE_KRB5_KEYBLOCK_KEYVALUE', 1) 858 conf.define('HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK', 1) 859 conf.define('HAVE_KRB5_KRBHST_GET_ADDRINFO', 1) 860 conf.define('HAVE_KRB5_KRBHST_INIT', 1) 861 conf.define('HAVE_KRB5_KT_COMPARE', 1) 862 conf.define('HAVE_KRB5_KT_FREE_ENTRY', 1) 863 conf.define('HAVE_KRB5_KU_OTHER_CKSUM', 1) 864 conf.define('HAVE_KRB5_LOCATE_PLUGIN_H', 1) 865 conf.define('HAVE_KRB5_MK_REQ_EXTENDED', 1) 866 conf.define('HAVE_KRB5_PRINCIPAL_COMPARE_ANY_REALM', 1) 867 conf.define('HAVE_KRB5_PRINCIPAL_GET_COMP_STRING', 1) 868 conf.define('HAVE_KRB5_PRINCIPAL_GET_REALM', 1) 869 conf.define('HAVE_KRB5_REALM_TYPE', 1) 870 conf.define('HAVE_KRB5_SESSION_IN_CREDS', 1) 871 conf.define('HAVE_KRB5_SET_DEFAULT_IN_TKT_ETYPES', 1) 872 conf.define('HAVE_KRB5_SET_REAL_TIME', 1) 873 conf.define('HAVE_KRB5_STRING_TO_KEY', 1) 874 conf.define('HAVE_KRB5_STRING_TO_KEY_SALT', 1) 875 conf.define('HAVE_KRB5_VERIFY_CHECKSUM', 1) 876 conf.define('HAVE_LIBKRB5', 1) 877 conf.define('KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT', 1) 878 conf.define('KRB5_VERIFY_CHECKSUM_ARGS', 6) 879 conf.define('HAVE_ETYPE_IN_ENCRYPTEDDATA', 1) 880 conf.define('KRB5_PRINC_REALM_RETURNS_REALM', 1) 881 conf.define('HAVE_KRB5_PRINCIPAL_GET_REALM', 1) 882 conf.define('HAVE_KRB5_H', 1) 883 conf.define('HAVE_ENCTYPE_ARCFOUR_HMAC_MD5', 1) 884 conf.define('HAVE_AP_OPTS_USE_SUBKEY', 1) 885 conf.define('HAVE_ENCTYPE_ARCFOUR_HMAC_MD5', 1) 886 conf.define('HAVE_ENCTYPE_ARCFOUR_HMAC', 1) 713 if Options.options.with_ads == False: 714 use_ads = False 715 use_ads_krb5 = False 716 use_ads_ldap = False 887 717 else: 888 conf.SET_TARGET_TYPE('krb5', 'EMPTY') 889 conf.SET_TARGET_TYPE('gssapi', 'EMPTY') 890 conf.SET_TARGET_TYPE('gssapi_krb5', 'EMPTY') 891 conf.SET_TARGET_TYPE('com_err', 'EMPTY') 892 conf.SET_TARGET_TYPE('k5crypto', 'EMPTY') 893 894 if Options.options.with_ads: 895 use_ads=True 718 use_ads = True 719 use_ads_krb5 = True 720 use_ads_ldap = True 896 721 if not conf.CONFIG_SET('HAVE_ENCTYPE_ARCFOUR_HMAC_MD5') and \ 897 722 not conf.CONFIG_SET('HAVE_ENCTYPE_ARCFOUR_HMAC'): 898 723 Logs.warn("arcfour-hmac-md5 encryption type not found in -lkrb5") 899 use_ads =False724 use_ads_krb5 = False 900 725 if not conf.CONFIG_SET('HAVE_KRB5_MK_REQ_EXTENDED'): 901 726 Logs.warn("krb5_mk_req_extended not found in -lkrb5") 902 use_ads=False 727 use_ads_krb5 = False 728 if not conf.CONFIG_SET('HAVE_KRB5_GET_HOST_REALM'): 729 Logs.warn("krb5_get_host_realm not found in -lkrb5") 730 use_ads_krb5 = False 731 if not conf.CONFIG_SET('HAVE_KRB5_FREE_HOST_REALM'): 732 Logs.warn("krb5_free_host_realm not found in -lkrb5") 733 use_ads_krb5 = False 734 if not conf.CONFIG_SET('HAVE_KRB5_FWD_TGT_CREDS'): 735 Logs.warn("krb5_fwd_tgt_creds found in -lkrb5") 736 use_ads_krb5 = False 737 if not conf.CONFIG_SET('HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC'): 738 Logs.warn("krb5_get_init_creds_opt_alloc not found in -lkrb5") 739 use_ads_krb5 = False 740 if not conf.CONFIG_SET('KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT'): 741 Logs.warn("krb5_get_init_creds_opt_free was not found or was too old in -lkrb5") 742 use_ads_krb5 = False 743 if not conf.CONFIG_SET('HAVE_KRB5_GET_RENEWED_CREDS'): 744 Logs.warn("krb5_get_renewed_creds not found in -lkrb5") 745 use_ads_krb5 = False 746 if not conf.CONFIG_SET('HAVE_KRB5_PRINCIPAL_COMPARE_ANY_REALM'): 747 Logs.warn("krb5_principal_compare_any_realm not found in -lkrb5") 748 use_ads_krb5 = False 749 if not conf.CONFIG_SET('HAVE_KRB5_C_STRING_TO_KEY') and \ 750 not conf.CONFIG_SET('HAVE_KRB5_STRING_TO_KEY_SALT'): 751 Logs.warn("krb5_c_string_to_key not found in -lkrb5") 752 use_ads_krb5 = False 903 753 if not conf.CONFIG_SET('HAVE_KRB5_PRINCIPAL2SALT') and \ 904 754 not conf.CONFIG_SET('HAVE_KRB5_GET_PW_SALT'): 905 755 Logs.warn("no CREATE_KEY_FUNCTIONS detected") 906 use_ads =False756 use_ads_krb5 = False 907 757 if not conf.CONFIG_SET('HAVE_KRB5_GET_PERMITTED_ENCTYPES') and \ 908 758 not conf.CONFIG_SET('HAVE_KRB5_GET_DEFAULT_IN_TKT_ETYPES'): 909 759 Logs.warn("no GET_ENCTYPES_FUNCTIONS detected") 910 use_ads =False760 use_ads_krb5 = False 911 761 if not conf.CONFIG_SET('HAVE_KRB5_KT_FREE_ENTRY') and \ 912 762 not conf.CONFIG_SET('HAVE_KRB5_FREE_KEYTAB_ENTRY_CONTENTS'): 913 763 Logs.warn("no KT_FREE_FUNCTION detected") 914 use_ads=False 915 if not conf.CONFIG_SET('HAVE_KRB5_C_VERIFY_CHECKSUM') and \ 916 not conf.CONFIG_SET('HAVE_KRB5_VERIFY_CHECKSUM'): 917 Logs.warn("no KRB5_VERIFY_CHECKSUM_FUNCTION detected") 918 use_ads=False 919 if not conf.CONFIG_SET('KRB5_TICKET_HAS_KEYINFO'): 920 # We only need the following functions if we can't get the enctype 921 # and kvno out of the ticket directly (ie. on Heimdal). 922 if not conf.CONFIG_SET('HAVE_FREE_AP_REQ'): 923 Logs.warn("no KRB5_AP_REQ_FREE_FUNCTION detected") 924 use_ads=False 925 if not conf.CONFIG_SET('HAVE_KRB5_DECODE_AP_REQ'): 926 Logs.warn("no KRB5_AP_REQ_DECODING_FUNCTION detected") 927 use_ads=False 928 if use_ads: 929 conf.DEFINE('WITH_ADS', '1') 764 use_ads_krb5 = False 765 if not conf.CONFIG_SET('HAVE_KRB5_C_VERIFY_CHECKSUM'): 766 Logs.warn("krb5_c_verify_checksum_compare not found in -lkrb5") 767 use_ads_krb5 = False 768 769 # We don't actually use 770 # gsskrb5_extract_authz_data_from_sec_context, but it is a 771 # clue that this Heimdal, which does the PAC processing we 772 # need on the standard gss_inquire_sec_context_by_oid 773 if not conf.CONFIG_SET('HAVE_GSS_GET_NAME_ATTRIBUTE') and \ 774 not (conf.CONFIG_SET('HAVE_GSSKRB5_EXTRACT_AUTHZ_DATA_FROM_SEC_CONTEXT') and \ 775 conf.CONFIG_SET('HAVE_GSS_INQUIRE_SEC_CONTEXT_BY_OID')): 776 Logs.warn("need either gss_get_name_attribute or gsskrb5_extract_authz_data_from_sec_context and gss_inquire_sec_context_by_oid in -lgssapi for PAC support") 777 use_ads_krb5 = False 778 779 if not conf.CONFIG_SET('HAVE_GSS_KRB5_EXPORT_LUCID_SEC_CONTEXT'): 780 Logs.warn("need gss_krb5_export_lucid_sec_context for SPNEGO and gss_wrap support") 781 use_ads_krb5 = False 782 783 if use_ads_krb5: 930 784 conf.DEFINE('HAVE_KRB5', '1') 931 if have_gssapi: 932 conf.DEFINE('HAVE_GSSAPI', '1') 933 if conf.CONFIG_SET('HAVE_LDAP'): 934 conf.env['HAVE_ADS'] = '1' 785 conf.env['HAVE_KRB5'] = '1' 935 786 else: 936 Logs.warn("krb5 libs don't have all features required for Active Directory support")937 787 conf.undefine('HAVE_KRB5_H') 938 788 conf.undefine('HAVE_GSSAPI_H') 939 789 conf.undefine('HAVE_GSSAPI_GSSAPI_GENERIC_H') 940 790 conf.undefine('HAVE_GSSAPI_GSSAPI_H') 791 use_ads = False 792 793 if not conf.CONFIG_SET('HAVE_LDAP'): 794 use_ads = False 795 use_ads_ldap = False 796 797 if use_ads: 798 conf.DEFINE('WITH_ADS', '1') 799 conf.env['HAVE_ADS'] = '1' 800 Logs.info("Building with Active Directory support.") 801 # these have broken dependencies 802 forced_shared_modules.extend(TO_LIST('idmap_ad idmap_rfc2307')) 803 elif Options.options.with_ads == False: 804 Logs.info("Building without Active Directory support (--without-ads).") 805 else: 806 if not use_ads_krb5: 807 Logs.warn("Active Directory support not available: krb5 libs don't have all required features") 808 if not use_ads_ldap: 809 Logs.warn("Active Directory support not available: LDAP support is not available.") 810 if Options.options.with_ads: 811 conf.fatal("Active Directory support not found. Use --without-ads " 812 "for building without Active Directory support. " 813 "ADS support improves communication with " 814 "Active Directory domain controllers.") 815 else: 816 # this is the auto-mode case 817 Logs.warn("Building without Active Directory support.") 818 941 819 942 820 if Options.options.with_utmp: 821 conf.env.with_utmp = True 822 if not conf.CHECK_HEADERS('utmp.h'): conf.env.with_utmp = False 943 823 conf.CHECK_FUNCS('pututline pututxline updwtmp updwtmpx getutmpx getutxent') 944 824 conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_name', headers='utmp.h', … … 960 840 conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_exit.e_exit', headers='utmp.h', 961 841 define='HAVE_UT_UT_EXIT') 962 conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_addr_v6', headers='utmp.h',963 define='HAVE_UT_UT_ADDR_V6')964 conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_addr', headers='utmp.h',965 define='HAVE_UT_UT_ADDR')966 842 conf.CHECK_STRUCTURE_MEMBER('struct utmpx', 'ut_syslen', headers='utmpx.h', 967 843 define='HAVE_UX_UT_SYSLEN') … … 969 845 'PUTUTLINE_RETURNS_UTMP', headers='utmp.h', 970 846 msg="Checking whether pututline returns pointer") 971 conf.DEFINE('WITH_UTMP', 1) 847 conf.CHECK_SIZEOF(['((struct utmp *)NULL)->ut_line'], headers='utmp.h', 848 define='SIZEOF_UTMP_UT_LINE', critical=False) 849 if not conf.CONFIG_SET('SIZEOF_UTMP_UT_LINE'): 850 conf.env.with_utmp = False 851 elif int(conf.env.SIZEOF_UTMP_UT_LINE) < 15: 852 conf.env.with_utmp = False 853 if conf.env.with_utmp: 854 conf.DEFINE('WITH_UTMP', 1) 855 else: 856 Logs.warn("--with-utmp but utmp support not sufficient") 972 857 973 858 if Options.options.with_avahi: … … 1003 888 conf.CHECK_HEADERS('pam/pam_ext.h pam/_pam_macros.h') 1004 889 conf.CHECK_FUNCS_IN('pam_vsyslog', 'pam') 1005 890 conf.CHECK_CODE(''' 1006 891 #if defined(HAVE_SECURITY_PAM_APPL_H) 1007 892 #include <security/pam_appl.h> … … 1014 899 lib='pam', 1015 900 msg="Checking whether PAM_RHOST is available"); 1016 901 conf.CHECK_CODE(''' 1017 902 #if defined(HAVE_SECURITY_PAM_APPL_H) 1018 903 #include <security/pam_appl.h> … … 1025 910 lib='pam', 1026 911 msg="Checking whether PAM_TTY is available"); 1027 912 conf.CHECK_CODE(''' 1028 913 #if (!defined(LINUX)) 1029 914 … … 1063 948 1064 949 seteuid = False 950 951 # 952 # Ensure we select the correct set of system calls on Linux. 953 # 954 if (host_os.rfind('linux') > -1): 955 conf.CHECK_CODE(''' 956 #if defined(HAVE_UNISTD_H) 957 #include <unistd.h> 958 #endif 959 #include <stdlib.h> 960 #include <stdio.h> 961 #include <sys/types.h> 962 #include <errno.h> 963 964 #ifdef HAVE_SYS_PRIV_H 965 #include <sys/priv.h> 966 #endif 967 #ifdef HAVE_SYS_ID_H 968 #include <sys/id.h> 969 #endif 970 971 #if defined(HAVE_SYSCALL_H) 972 #include <syscall.h> 973 #endif 974 975 #if defined(HAVE_SYS_SYSCALL_H) 976 #include <sys/syscall.h> 977 #endif 978 979 syscall(SYS_setresuid32, -1, -1, -1); 980 syscall(SYS_setresgid32, -1, -1, -1); 981 syscall(SYS_setreuid32, -1, -1); 982 syscall(SYS_setregid32, -1, -1); 983 syscall(SYS_setuid32, -1); 984 syscall(SYS_setgid32, -1); 985 syscall(SYS_setgroups32, 0, NULL); 986 ''', 987 'USE_LINUX_32BIT_SYSCALLS', 988 msg="Checking whether Linux should use 32-bit credential calls"); 989 990 if (conf.CONFIG_SET('USE_LINUX_32BIT_SYSCALLS')): 991 seteuid = conf.CHECK_CODE(''' 992 #define AUTOCONF_TEST 1 993 #define USE_LINUX_THREAD_CREDENTIALS 1 994 #define USE_LINUX_32BIT_SYSCALLS 1 995 #include "../lib/util/setid.c" 996 #include "./lib/util_sec.c" 997 ''', 998 'USE_LINUX_THREAD_CREDENTIALS', 999 addmain=False, 1000 execute=True, 1001 msg="Checking whether we can use Linux thread-specific credentials with 32-bit system calls") 1002 else: 1003 seteuid = conf.CHECK_CODE(''' 1004 #define AUTOCONF_TEST 1 1005 #define USE_LINUX_THREAD_CREDENTIALS 1 1006 #include "../lib/util/setid.c" 1007 #include "./lib/util_sec.c" 1008 ''', 1009 'USE_LINUX_THREAD_CREDENTIALS', 1010 addmain=False, 1011 execute=True, 1012 msg="Checking whether we can use Linux thread-specific credentials") 1065 1013 if not seteuid: 1066 1014 seteuid = conf.CHECK_CODE(''' 1067 #define AUTOCONF_TEST 1 1068 #define USE_SETREUID 1 1069 #include "./lib/util_sec.c" 1070 ''', 1071 'USE_SETREUID', 1072 addmain=False, 1073 execute=True, 1074 msg="Checking whether setreuid is available") 1015 #define AUTOCONF_TEST 1 1016 #define USE_SETREUID 1 1017 #include "../lib/util/setid.c" 1018 #include "./lib/util_sec.c" 1019 ''', 1020 'USE_SETREUID', 1021 addmain=False, 1022 execute=True, 1023 msg="Checking whether setreuid is available") 1075 1024 if not seteuid: 1076 1025 seteuid = conf.CHECK_CODE(''' 1077 #define AUTOCONF_TEST 1 1078 #define USE_SETRESUID 1 1079 #include "./lib/util_sec.c" 1080 ''', 1081 'USE_SETRESUID', 1082 addmain=False, 1083 execute=True, 1084 msg="Checking whether setresuid is available") 1026 #define AUTOCONF_TEST 1 1027 #define USE_SETRESUID 1 1028 #include "../lib/util/setid.c" 1029 #include "./lib/util_sec.c" 1030 ''', 1031 'USE_SETRESUID', 1032 addmain=False, 1033 execute=True, 1034 msg="Checking whether setresuid is available") 1085 1035 if not seteuid: 1086 1036 seteuid = conf.CHECK_CODE(''' 1087 #define AUTOCONF_TEST 1 1088 #define USE_SETEUID 1 1089 #include "./lib/util_sec.c" 1090 ''', 1091 'USE_SETEUID', 1092 addmain=False, 1093 execute=True, 1094 msg="Checking whether seteuid is available") 1037 #define AUTOCONF_TEST 1 1038 #define USE_SETEUID 1 1039 #include "../lib/util/setid.c" 1040 #include "./lib/util_sec.c" 1041 ''', 1042 'USE_SETEUID', 1043 addmain=False, 1044 execute=True, 1045 msg="Checking whether seteuid is available") 1095 1046 if not seteuid: 1096 1047 seteuid = conf.CHECK_CODE(''' 1097 #define AUTOCONF_TEST 1 1098 #define USE_SETUIDX 1 1099 #include "./lib/util_sec.c" 1100 ''', 1101 'USE_SETUIDX', 1102 addmain=False, 1103 execute=True, 1104 mandatory=True, 1105 msg="Checking whether setuidx is available") 1048 #define AUTOCONF_TEST 1 1049 #define USE_SETUIDX 1 1050 #include "../lib/util/setid.c" 1051 #include "./lib/util_sec.c" 1052 ''', 1053 'USE_SETUIDX', 1054 addmain=False, 1055 execute=True, 1056 mandatory=True, 1057 msg="Checking whether setuidx is available") 1106 1058 if Options.options.with_dnsupdate: 1107 conf.CHECK_HEADERS('uuid/uuid.h') 1108 conf.CHECK_FUNCS_IN('uuid_generate', 'uuid') 1109 if not conf.CONFIG_SET('HAVE_UUID_UUID_H') and not conf.CONFIG_SET('HAVE_UUID_GENERATE'): 1110 Logs.warn("--with-dnsupdate=yes but uuid support not sufficient") 1111 elif not conf.CONFIG_SET('HAVE_GSSAPI'): 1059 if not conf.CONFIG_SET('HAVE_KRB5'): 1112 1060 Logs.warn("--with-dnsupdate=yes but gssapi support not sufficient") 1113 1061 else: 1114 1062 conf.DEFINE('WITH_DNS_UPDATES', 1) 1115 else:1116 conf.SET_TARGET_TYPE('uuid', 'EMPTY')1117 1063 conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h') 1118 1064 if Options.options.developer: … … 1124 1070 #include <linux/netlink.h> 1125 1071 ''', 1126 1072 'HAVE_LINUX_NETLINK_H', 1127 1073 msg="Checking whether Linux netlink is available"): 1074 1128 1075 conf.CHECK_CODE(''' 1129 1076 #include <bits/sockaddr.h> … … 1131 1078 #include <linux/rtnetlink.h> 1132 1079 ''', 1133 'HAVE_LINUX_RTNETLINK_H', 1134 msg='Checking whether Linux rtnetlink is available') 1135 if conf.CHECK_TYPE('struct dirent64', headers='sys/types.h dirent.h') and conf.CONFIG_SET('HAVE_READDIR64'): 1136 conf.DEFINE('HAVE_STRUCT_DIRENT64', '1') 1137 else: 1138 conf.undefine('HAVE_STRUCT_DIRENT64') 1080 'HAVE_LINUX_RTNETLINK_H', 1081 msg='Checking whether Linux rtnetlink is available') 1139 1082 1140 1083 conf.CHECK_CODE(''' 1141 1084 #include "../tests/fcntl_lock.c" 1142 1085 ''', 1143 'HAVE_FCNTL_LOCK', 1144 addmain=False, 1145 execute=True, 1146 msg='Checking whether fcntl locking is available') 1147 1148 conf.CHECK_CODE(''' 1149 #include "../tests/fcntl_lock64.c" 1086 'HAVE_FCNTL_LOCK', 1087 addmain=False, 1088 execute=True, 1089 msg='Checking whether fcntl locking is available') 1090 1091 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT. 1092 if not conf.CHECK_CODE(''' 1093 #define _XOPEN_SOURCE 600 1094 #include <stdlib.h> 1095 #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)) 1096 #error probably broken posix_fallocate 1097 #endif 1150 1098 ''', 1151 'HAVE_BROKEN_FCNTL64_LOCKS', 1152 addmain=False, 1153 execute=True, 1154 msg='Checking whether fcntl64 locks are broken') 1155 1156 if not conf.CONFIG_SET('HAVE_BROKEN_FCNTL64_LOCKS'): 1157 conf.CHECK_CODE(''' 1158 #if defined(HAVE_UNISTD_H) 1159 #include <unistd.h> 1160 #endif 1161 #include <stdio.h> 1162 #include <stdlib.h> 1163 1164 #ifdef HAVE_FCNTL_H 1165 #include <fcntl.h> 1166 #endif 1167 1168 #ifdef HAVE_SYS_FCNTL_H 1169 #include <sys/fcntl.h> 1170 #endif 1171 main() { struct flock64 fl64; 1172 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64) 1173 exit(0); 1174 #else 1175 exit(1); 1176 #endif 1177 } 1178 ''', 1179 'HAVE_STRUCT_FLOCK64', 1180 addmain=False, 1181 execute=True, 1182 msg="Checking whether the flock64 struct is available") 1099 '_HAVE_UNBROKEN_POSIX_FALLOCATE', 1100 msg='Checking for broken posix_fallocate'): 1101 conf.DEFINE('HAVE_BROKEN_POSIX_FALLOCATE', '1') 1102 1183 1103 1184 1104 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_mtim.tv_nsec', 1185 1105 define='HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC') # Linux, Solaris 1186 1106 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_mtimensec', 1187 1107 define='HAVE_STRUCT_STAT_ST_MTIMENSEC') # BSD, if defined _POSIX_SOURCE 1188 1108 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_mtimespec.tv_nsec', 1189 1109 define='HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC') # BSD, if not defined _POSIX_SOURCE 1190 1110 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_mtime_n', 1191 1111 define='HAVE_STRUCT_STAT_ST_MTIME_N') # AIX 1192 1112 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_umtime', 1193 1113 define='HAVE_STRUCT_STAT_ST_UMTIME') # Tru64 1194 1114 if conf.CONFIG_SET('HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC') or \ 1195 1115 conf.CONFIG_SET('HAVE_STRUCT_STAT_ST_MTIMENSEC') or \ … … 1201 1121 # recent FreeBSD, NetBSD have creation timestamps called birthtime: 1202 1122 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_birthtime', 1203 1123 define='HAVE_STRUCT_STAT_ST_BIRTHTIME') 1204 1124 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_birthtimespec.tv_nsec', 1205 1125 define='HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC') 1206 1126 conf.CHECK_STRUCTURE_MEMBER('struct stat', 'st_birthtimensec', 1207 1127 define='HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC') 1208 1128 1209 1129 conf.CHECK_CODE(''' 1210 #if defined(HAVE_UNISTD_H)1211 #include <unistd.h>1212 #endif1213 #include <fcntl.h>],1214 1130 ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED); 1215 1131 ''', 1216 'HAVE_POSIX_FADVISE', 1217 msg='Checking whether posix_fadvise is available') 1132 'HAVE_POSIX_FADVISE', 1133 msg='Checking whether posix_fadvise is available', 1134 headers='unistd.h fcntl.h') 1218 1135 1219 1136 for v in ['_SC_NGROUPS_MAX', '_SC_NPROC_ONLN', '_SC_NPROCESSORS_ONLN', '_SC_PAGESIZE' ]: 1220 1137 conf.CHECK_CODE(''' 1221 #include <unistd.h> 1222 return sysconf(%s) == -1 ? 1 : 0; 1223 ''' % v, 1224 'SYSCONF%s' % v, 1225 msg='Checking whether sysconf(%s) is available' % v) 1226 1227 conf.CHECK_DECLS('__NR_inotify_init', reverse=True, headers='asm/unistd.h') 1138 #include <unistd.h> 1139 return sysconf(%s) == -1 ? 1 : 0; 1140 ''' % v, 1141 'SYSCONF%s' % v, 1142 msg='Checking whether sysconf(%s) is available' % v) 1228 1143 1229 1144 conf.CHECK_CODE(''' … … 1231 1146 #include <unistd.h> 1232 1147 syscall(SYS_initgroups, 16, NULL, NULL, 0); 1233 1234 1235 1148 ''', 1149 'HAVE_DARWIN_INITGROUPS', 1150 msg='Checking whether to use the Darwin-specific initgroups system call') 1236 1151 1237 1152 conf.CHECK_CODE('''struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));''', 1238 1239 1240 1153 'HAVE_UTIMBUF', 1154 headers='sys/types.h utime.h', 1155 msg='Checking whether struct utimbuf is available') 1241 1156 1242 1157 if conf.CHECK_CODE('''struct sigevent s;''', 1243 1244 1245 1158 'HAVE_STRUCT_SIGEVENT', 1159 headers='sys/types.h stdlib.h stddef.h signal.h', 1160 msg='Checking whether we have the struct sigevent'): 1246 1161 conf.CHECK_STRUCTURE_MEMBER('struct sigevent', 'sigev_value.sival_ptr', 1247 1248 1162 define='HAVE_STRUCT_SIGEVENT_SIGEV_VALUE_SIVAL_PTR', 1163 headers='signal.h'); 1249 1164 conf.CHECK_STRUCTURE_MEMBER('struct sigevent', 'sigev_value.sigval_ptr', 1250 1251 1165 define='HAVE_STRUCT_SIGEVENT_SIGEV_VALUE_SIGVAL_PTR', 1166 headers='signal.h'); 1252 1167 1253 1168 if os.path.exists('/proc/sys/kernel/core_pattern'): … … 1257 1172 #include <time.h> 1258 1173 main() { 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1174 struct tm *tm; 1175 if (sizeof(time_t) == 8) { 1176 time_t max_time = 0x7fffffffffffffffll; 1177 tm = gmtime(&max_time); 1178 /* This should fail with 32-bit tm_year. */ 1179 if (tm == NULL) { 1180 /* Max time_t that works with 32-bit int tm_year in struct tm. */ 1181 max_time = 67768036191676799ll; 1182 tm = gmtime(&max_time); 1183 if (tm) { 1184 exit(0); 1185 } 1186 } 1187 } 1188 exit(1); 1274 1189 }''', 1275 1276 1277 1278 1190 '__TIME_T_MAX', 1191 addmain=False, 1192 execute=True, 1193 msg="Checking for the maximum value of the 'time_t' type"): 1279 1194 conf.DEFINE('TIME_T_MAX', '67768036191676799ll') 1280 1195 … … 1286 1201 main() { dev_t dev = makedev(1,2); return 0; } 1287 1202 ''', 1288 1289 1290 1203 'HAVE_MAKEDEV', 1204 addmain=False, 1205 msg='Checking whether the macro for makedev is available') 1291 1206 1292 1207 conf.CHECK_CODE(''' … … 1296 1211 1297 1212 void exit_on_core(int ignored) { 1298 1213 exit(1); 1299 1214 } 1300 1215 1301 1216 main() { 1302 1303 1304 1305 1217 char *newpath; 1218 signal(SIGSEGV, exit_on_core); 1219 newpath = realpath("/tmp", NULL); 1220 exit((newpath != NULL) ? 0 : 1); 1306 1221 } 1307 1222 ''', 1308 1309 1310 1311 1223 'REALPATH_TAKES_NULL', 1224 addmain=False, 1225 execute=True, 1226 msg='Checking whether the realpath function allows a NULL argument') 1312 1227 1313 1228 conf.CHECK_CODE('''#include "../tests/ftruncate.c"''', 1314 'HAVE_FTRUNCATE_EXTEND', 1315 msg='Checking for ftruncate extend', 1316 addmain=False, 1317 execute=True) 1318 if os.getenv('RUN_FROM_BUILD_FARM'): 1319 Logs.info("enabling buildfarm hacks") 1320 conf.DEFINE('ENABLE_BUILD_FARM_HACKS', '1') 1229 'HAVE_FTRUNCATE_EXTEND', 1230 msg='Checking for ftruncate extend', 1231 addmain=False, 1232 execute=True) 1321 1233 1322 1234 if Options.options.with_sendfile_support: 1323 1235 if (host_os.rfind('linux') > -1) or (host_os.rfind('gnu') > -1) or (host_os.rfind('k*bsd*-gnu') > -1) or (host_os.rfind('kopensolaris*-gnu') > -1): 1324 1236 conf.CHECK_CODE(''' 1325 int tofd, fromfd; 1326 off64_t offset; 1327 size_t total; 1328 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); 1329 ''', 1330 '_HAVE_SENDFILE64', 1331 headers='sys/sendfile', 1332 msg='Checking for linux sendfile64 support') 1333 conf.CHECK_CODE(''' 1334 int tofd, fromfd; 1335 off_t offset; 1336 size_t total; 1337 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); 1338 ''', 1339 '_HAVE_SENDFILE', 1340 headers='sys/sendfile', 1341 msg='Checking for linux sendfile support') 1342 1343 # Try and cope with broken Linux sendfile.... 1344 conf.CHECK_CODE('''#if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64) 1345 #undef _FILE_OFFSET_BITS 1346 #endif 1347 #include <sys/sendfile.h> 1348 int tofd, fromfd; 1349 off_t offset; 1350 size_t total; 1351 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); 1352 ''', 1353 '_HAVE_BROKEN_LINUX_SENDFILE', 1354 msg='Checking for broken linux sendfile support') 1355 if conf.CONFIG_SET('_HAVE_SENDFILE64'): 1356 conf.DEFINE('HAVE_SENDFILE64', '1') 1357 conf.DEFINE('LINUX_SENDFILE_API', '1') 1358 conf.DEFINE('WITH_SENDFILE', '1') 1359 elif conf.CONFIG_SET('_HAVE_SENDFILE'): 1237 int tofd, fromfd; 1238 off_t offset; 1239 size_t total; 1240 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); 1241 ''', 1242 '_HAVE_SENDFILE', 1243 headers='sys/sendfile.h', 1244 msg='Checking for linux sendfile support') 1245 1246 if conf.CONFIG_SET('_HAVE_SENDFILE'): 1360 1247 conf.DEFINE('HAVE_SENDFILE', '1') 1361 1248 conf.DEFINE('LINUX_SENDFILE_API', '1') 1362 1249 conf.DEFINE('WITH_SENDFILE', '1') 1363 elif conf.CONFIG_SET('_HAVE_BROKEN_LINUX_SENDFILE'): 1364 conf.DEFINE('LINUX_BROKEN_SENDFILE_API', '1') 1365 conf.DEFINE('WITH_SENDFILE', '1') 1366 elif (host_os.rfind('freebsd') > -1) or (host_os.rfind('dragonfly') > -1): 1250 elif (host_os.rfind('freebsd') > -1) or (host_os.rfind('dragonfly') > -1): 1367 1251 conf.CHECK_CODE(''' 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1252 #include <sys/types.h> 1253 #include <unistd.h> 1254 #include <sys/socket.h> 1255 #include <sys/uio.h> 1256 int fromfd, tofd, ret, total=0; 1257 off_t offset, nwritten; 1258 struct sf_hdtr hdr; 1259 struct iovec hdtrl; 1260 hdr.headers = &hdtrl; 1261 hdr.hdr_cnt = 1; 1262 hdr.trailers = NULL; 1263 hdr.trl_cnt = 0; 1264 hdtrl.iov_base = NULL; 1265 hdtrl.iov_len = 0; 1266 ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0) 1267 ''', 1268 '_HAVE_SENDFILE', 1269 msg='Checking for freebsd sendfile support') 1386 1270 if conf.CONFIG_SET('_HAVE_SENDFILE'): 1387 1271 conf.DEFINE('HAVE_SENDFILE', '1') 1388 1272 conf.DEFINE('FREEBSD_SENDFILE_API', '1') 1389 1273 conf.DEFINE('WITH_SENDFILE', '1') 1390 elif (host_os.rfind('hpux') > -1):1274 elif (host_os.rfind('darwin') > -1): 1391 1275 conf.CHECK_CODE(''' 1392 #include <sys/socket.h> 1393 #include <sys/uio.h> 1394 int fromfd, tofd; 1395 size_t total=0; 1396 struct iovec hdtrl[2]; 1397 ssize_t nwritten; 1398 off64_t offset; 1399 hdtrl[0].iov_base = 0; 1400 hdtrl[0].iov_len = 0; 1401 nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); 1402 ''', 1403 '_HAVE_SENDFILE64', 1404 msg='Checking for hpux sendfile64 support') 1276 #include <sys/types.h> 1277 #include <sys/socket.h> 1278 #include <sys/uio.h> 1279 int fromfd, tofd, ret; 1280 off_t offset, nwritten; 1281 struct sf_hdtr hdr; 1282 struct iovec hdtrl; 1283 hdr.headers = &hdtrl; 1284 hdr.hdr_cnt = 1; 1285 hdr.trailers = (void *)0; 1286 hdr.trl_cnt = 0; 1287 hdtrl.iov_base = (void *)0; 1288 hdtrl.iov_len = 0; 1289 ret = sendfile(fromfd, tofd, offset, &nwritten, &hdr, 0); 1290 ''', 1291 '_HAVE_SENDFILE', 1292 msg='Checking for darwin sendfile support') 1293 if conf.CONFIG_SET('_HAVE_SENDFILE'): 1294 conf.DEFINE('HAVE_SENDFILE', '1') 1295 conf.DEFINE('DARWIN_SENDFILE_API', '1') 1296 conf.DEFINE('WITH_SENDFILE', '1') 1297 elif (host_os.rfind('hpux') > -1) or (host_os.rfind('osf') > -1): 1405 1298 conf.CHECK_CODE(''' 1406 #include <sys/socket.h> 1407 #include <sys/uio.h> 1408 int fromfd, tofd; 1409 size_t total=0; 1410 struct iovec hdtrl[2]; 1411 ssize_t nwritten; 1412 off_t offset; 1413 hdtrl[0].iov_base = 0; 1414 hdtrl[0].iov_len = 0; 1415 nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); 1416 ''', 1417 '_HAVE_SENDFILE', 1418 msg='Checking for hpux sendfile support') 1419 if conf.CONFIG_SET('_HAVE_SENDFILE64'): 1420 conf.DEFINE('HAVE_SENDFILE64', '1') 1421 conf.DEFINE('HPUX_SENDFILE_API', '1') 1422 conf.DEFINE('WITH_SENDFILE', '1') 1423 elif conf.CONFIG_SET('_HAVE_SENDFILE'): 1299 #include <sys/socket.h> 1300 #include <sys/uio.h> 1301 int fromfd, tofd; 1302 size_t total=0; 1303 struct iovec hdtrl[2]; 1304 ssize_t nwritten; 1305 off_t offset; 1306 hdtrl[0].iov_base = 0; 1307 hdtrl[0].iov_len = 0; 1308 nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); 1309 ''', 1310 '_HAVE_SENDFILE', 1311 msg='Checking for osf/hpux sendfile support') 1312 if conf.CONFIG_SET('_HAVE_SENDFILE'): 1424 1313 conf.DEFINE('HAVE_SENDFILE', '1') 1425 1314 conf.DEFINE('HPUX_SENDFILE_API', '1') 1426 1315 conf.DEFINE('WITH_SENDFILE', '1') 1427 1316 elif (host_os.rfind('solaris') > -1): 1428 1317 conf.CHECK_FUNCS_IN('sendfile', 'sendfilev') 1429 1318 conf.CHECK_CODE(''' 1430 #include <sys/sendfile.h> 1431 int sfvcnt; 1432 size_t xferred; 1433 struct sendfilevec vec[2]; 1434 ssize_t nwritten; 1435 int tofd; 1436 sfvcnt = 2; 1437 vec[0].sfv_fd = SFV_FD_SELF; 1438 vec[0].sfv_flag = 0; 1439 vec[0].sfv_off = 0; 1440 vec[0].sfv_len = 0; 1441 vec[1].sfv_fd = 0; 1442 vec[1].sfv_flag = 0; 1443 vec[1].sfv_off = 0; 1444 vec[1].sfv_len = 0; 1445 nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred); 1446 ''', 1447 '_HAVE_SENDFILEV64', 1448 msg='Checking for solaris sendfilev64 support') 1449 conf.CHECK_CODE(''' 1450 #include <sys/sendfile.h>, 1451 int sfvcnt; 1452 size_t xferred; 1453 struct sendfilevec vec[2]; 1454 ssize_t nwritten; 1455 int tofd; 1456 sfvcnt = 2; 1457 vec[0].sfv_fd = SFV_FD_SELF; 1458 vec[0].sfv_flag = 0; 1459 vec[0].sfv_off = 0; 1460 vec[0].sfv_len = 0; 1461 vec[1].sfv_fd = 0; 1462 vec[1].sfv_flag = 0; 1463 vec[1].sfv_off = 0; 1464 vec[1].sfv_len = 0; 1465 nwritten = sendfilev(tofd, vec, sfvcnt, &xferred); 1466 ''', 1467 '_HAVE_SENDFILEV', 1468 msg='Checking for solaris sendfilev support') 1469 if conf.CONFIG_SET('_HAVE_SENDFILEV64'): 1470 conf.DEFINE('HAVE_SENDFILEV64', '1') 1471 conf.DEFINE('SOLARIS_SENDFILE_API', '1') 1472 conf.DEFINE('WITH_SENDFILE', '1') 1473 elif conf.CONFIG_SET('_HAVE_SENDFILEV'): 1319 #include <sys/sendfile.h>, 1320 int sfvcnt; 1321 size_t xferred; 1322 struct sendfilevec vec[2]; 1323 ssize_t nwritten; 1324 int tofd; 1325 sfvcnt = 2; 1326 vec[0].sfv_fd = SFV_FD_SELF; 1327 vec[0].sfv_flag = 0; 1328 vec[0].sfv_off = 0; 1329 vec[0].sfv_len = 0; 1330 vec[1].sfv_fd = 0; 1331 vec[1].sfv_flag = 0; 1332 vec[1].sfv_off = 0; 1333 vec[1].sfv_len = 0; 1334 nwritten = sendfilev(tofd, vec, sfvcnt, &xferred); 1335 ''', 1336 '_HAVE_SENDFILEV', 1337 msg='Checking for solaris sendfilev support') 1338 if conf.CONFIG_SET('_HAVE_SENDFILEV'): 1474 1339 conf.DEFINE('HAVE_SENDFILEV', '1') 1475 1340 conf.DEFINE('SOLARIS_SENDFILE_API', '1') 1476 1341 conf.DEFINE('WITH_SENDFILE', '1') 1477 1342 elif (host_os.rfind('aix') > -1): 1478 1343 conf.CHECK_CODE(''' 1479 #include <sys/socket.h> 1480 int fromfd, tofd; 1481 size_t total=0; 1482 struct sf_parms hdtrl; 1483 ssize_t nwritten; 1484 off64_t offset; 1485 hdtrl.header_data = 0; 1486 hdtrl.header_length = 0; 1487 hdtrl.file_descriptor = fromfd; 1488 hdtrl.file_offset = 0; 1489 hdtrl.file_bytes = 0; 1490 hdtrl.trailer_data = 0; 1491 hdtrl.trailer_length = 0; 1492 nwritten = send_file(&tofd, &hdtrl, 0); 1493 ''', 1494 '_HAVE_SENDFILE', 1495 msg='Checking for AIX send_file support') 1344 #include <sys/socket.h> 1345 int fromfd, tofd; 1346 size_t total=0; 1347 struct sf_parms hdtrl; 1348 ssize_t nwritten; 1349 hdtrl.header_data = 0; 1350 hdtrl.header_length = 0; 1351 hdtrl.file_descriptor = fromfd; 1352 hdtrl.file_offset = 0; 1353 hdtrl.file_bytes = 0; 1354 hdtrl.trailer_data = 0; 1355 hdtrl.trailer_length = 0; 1356 nwritten = send_file(&tofd, &hdtrl, 0); 1357 ''', 1358 '_HAVE_SENDFILE', 1359 msg='Checking for AIX send_file support') 1496 1360 if conf.CONFIG_SET('_HAVE_SENDFILE'): 1497 1361 conf.DEFINE('HAVE_SENDFILE', '1') … … 1499 1363 conf.DEFINE('WITH_SENDFILE', '1') 1500 1364 1501 conf.CHECK_CODE('''enum TDB_ERROR err = TDB_ERR_NESTING''', 1502 'HAVE_TDB_ERR_NESTING', 1503 headers='tdb.h', 1504 msg='Checking whether we have TDB_ERR_NESTING') 1365 # Check for getcwd allowing a NULL arg. 1366 conf.CHECK_CODE(''' 1367 #include <unistd.h> 1368 main() { 1369 char *s = getcwd(NULL,0); 1370 exit(s != NULL ? 0 : 1); 1371 }''', 'GETCWD_TAKES_NULL', addmain=False, execute=True, 1372 msg="getcwd takes a NULL argument") 1373 1505 1374 1506 1375 # UnixWare 7.x has its getspnam in -lgen … … 1509 1378 conf.CHECK_FUNCS_IN('getspnam', 'sec') 1510 1379 1380 legacy_quota_libs = '' 1511 1381 if Options.options.with_quotas: 1512 1382 # For quotas on Veritas VxFS filesystems 1513 1383 conf.CHECK_HEADERS('sys/fs/vx_quota.h') 1514 # For quotas on Linux XFS filesystems1515 conf.CHECK_HEADERS('linux/dqblk_xfs.h')1516 1384 # For sys/quota.h and linux/quota.h 1517 1385 conf.CHECK_HEADERS('sys/quota.h') 1518 1386 # For quotas on BSD systems 1387 conf.CHECK_HEADERS('ufs/ufs/quota.h') 1388 # For quotas on Linux XFS filesystems 1389 if conf.CHECK_HEADERS('xfs/xqm.h'): 1390 conf.DEFINE('HAVE_XFS_QUOTAS', '1') 1391 else: 1392 # For Irix XFS 1393 conf.CHECK_CODE(''' 1394 #include "confdefs.h" 1395 #ifdef HAVE_SYS_TYPES_H 1396 #include <sys/types.h> 1397 #endif 1398 #ifdef HAVE_ASM_TYPES_H 1399 #include <asm/types.h> 1400 #endif 1401 #include <sys/quota.h> 1402 int i = Q_XGETQUOTA;''', 1403 define='HAVE_XFS_QUOTAS', 1404 msg='for XFS QUOTA in <sys/quota.h>', 1405 execute=False, 1406 local_include=False) 1407 1408 # For IRIX like dqb_isoftlimit instead of dqb_fsoftlimit in struc dqblk 1409 conf.CHECK_STRUCTURE_MEMBER('struct dqblk', 'dqb_fsoftlimit', define='HAVE_DQB_FSOFTLIMIT', 1410 headers='sys/quota.h') 1411 #darwin style quota bytecount 1412 conf.CHECK_STRUCTURE_MEMBER('struct dqblk', 'dqb_curbytes', define='HAVE_STRUCT_DQBLK_DQB_CURBYTES', 1413 headers='sys/quota.h') 1414 if conf.CHECK_HEADERS('rpcsvc/rquota.h'): 1415 conf.DEFINE('HAVE_NFS_QUOTAS', '1') 1416 conf.CHECK_STRUCTURE_MEMBER('struct getquota_rslt', 'getquota_rslt_u', 1417 define='HAVE_GETQUOTA_RSLT_GETQUOTA_RSLT_U', 1418 headers='rpcsvc/rquota.h') 1419 1420 if (host_os.rfind('linux') > -1): 1421 conf.DEFINE('HAVE_QUOTACTL_LINUX', '1') 1422 elif not conf.CONFIG_SET("HAVE_XFS_QUOTAS"): 1423 if not conf.CHECK_CODE(''' 1424 #define HAVE_QUOTACTL_4A 1 1425 #define AUTOCONF_TEST 1 1426 #include "../tests/sysquotas.c" 1427 ''', 1428 cflags=conf.env['WERROR_CFLAGS'], 1429 define='HAVE_QUOTACTL_4A', 1430 msg='for QUOTACTL_4A: long quotactl(int cmd, char *special, qid_t id, caddr_t addr)', 1431 execute=True, 1432 addmain=False): 1433 1434 conf.CHECK_CODE(''' 1435 #define HAVE_QUOTACTL_4B 1 1436 #define AUTOCONF_TEST 1 1437 #include "../tests/sysquotas.c" 1438 ''', 1439 cflags=conf.env['WERROR_CFLAGS'], 1440 define='HAVE_QUOTACTL_4B', 1441 msg='for QUOTACTL_4B: int quotactl(const char *path, int cmd, int id, char *addr)', 1442 execute=True, 1443 addmain=False) 1444 1445 conf.CHECK_CODE(''' 1446 clnt_create("", RQUOTAPROG, RQUOTAVERS, "udp"); 1447 ''', 1448 headers="rpc/rpc.h rpc/types.h rpcsvc/rquota.h rpc/nettype.h rpc/xdr.h", 1449 define='HAVE_NFS_QUOTAS', 1450 msg='for NFS QUOTAS', 1451 execute=True, 1452 local_include=False) 1453 1454 if conf.CONFIG_SET('HAVE_QUOTACTL_LINUX') or \ 1455 conf.CONFIG_SET('HAVE_QUOTACTL_4A') or \ 1456 conf.CONFIG_SET('HAVE_QUOTACTL_4B') or \ 1457 conf.CONFIG_SET('HAVE_XFS_QUOTAS'): 1458 conf.DEFINE('HAVE_SYS_QUOTAS', '1') 1459 conf.DEFINE('WITH_QUOTAS', '1') 1460 1461 # 1462 # check if Legacy quota code can be brought in 1463 # if standard interfaces are not supported 1464 # 1465 if not conf.CONFIG_SET('WITH_QUOTAS'): 1466 if host_os.rfind('sunos5') > -1: 1467 conf.DEFINE('SUNOS5', '1') 1468 legacy_quota_libs = 'nsl' 1469 conf.CHECK_CODE(''' 1470 #define WITH_QUOTAS 1 1471 #define AUTOCONF_TEST 1 1472 #include "../tests/oldquotas.c" 1473 ''', 1474 cflags=conf.env['WERROR_CFLAGS'], 1475 define='WITH_QUOTAS', 1476 lib=legacy_quota_libs, 1477 msg='Checking whether legacy quota code can be used', 1478 execute=False, 1479 addmain=False) 1480 if not conf.CONFIG_SET('WITH_QUOTAS'): 1481 legacy_quota_libs = '' 1482 conf.env['legacy_quota_libs'] = legacy_quota_libs 1519 1483 1520 1484 # 1521 # c hecking for clustering extensions(CTDB)1485 # cluster support (CTDB) 1522 1486 # 1523 1487 if not Options.options.with_cluster_support: 1524 have_cluster_support = False1525 1488 Logs.info("building without cluster support (--without-cluster-support)") 1489 conf.env.with_ctdb = False 1526 1490 else: 1527 1528 if Options.options.ctdb_dir:1529 conf.ADD_EXTRA_INCLUDES(Options.options.ctdb_dir + '/include')1530 1531 srcdir = os.path.realpath(conf.srcdir)1532 if 'EXTRA_INCLUDES' in conf.env:1533 includes = ' '.join(conf.env['EXTRA_INCLUDES']).replace('#', srcdir + '/')1534 else:1535 includes = ''1536 1537 have_cluster_support = True1538 ctdb_broken = ""1539 1540 conf.CHECK_CODE('''1541 #define NO_CONFIG_H1542 #include "replace.h"1543 #include "system/wait.h"1544 #include "system/network.h"1545 #define private #error __USED_RESERVED_WORD_private__1546 #include <talloc.h>1547 #include <tdb.h>1548 #include <ctdb.h>1549 1550 int main(void)1551 {1552 return 0;1553 }1554 ''',1555 'HAVE_CTDB_H',1556 addmain=False,1557 includes=includes,1558 msg='Checking for header ctdb.h')1559 1560 if not conf.CONFIG_SET('HAVE_CTDB_H'):1561 have_cluster_support = False1562 ctdb_broken = "ctdb.h is required for cluster support"1563 1564 if have_cluster_support:1565 conf.CHECK_CODE('''1566 #define NO_CONFIG_H1567 #include "replace.h"1568 #include "system/wait.h"1569 #include "system/network.h"1570 #define private #error __USED_RESERVED_WORD_private__1571 #include <talloc.h>1572 #include <tdb.h>1573 #include <ctdb.h>1574 #include <ctdb_private.h>1575 1576 int main(void)1577 {1578 return 0;1579 }1580 ''',1581 'HAVE_CTDB_PRIVATE_H',1582 addmain=False,1583 includes=includes,1584 msg='Checking for header ctdb_private.h')1585 1586 if not conf.CONFIG_SET('HAVE_CTDB_PRIVATE_H'):1587 have_cluster_support = False1588 ctdb_broken = "ctdb_private.h is required for cluster support"1589 1590 if have_cluster_support:1591 conf.CHECK_CODE('''1592 #define NO_CONFIG_H1593 #include "replace.h"1594 #include "system/wait.h"1595 #include "system/network.h"1596 #include <talloc.h>1597 #include <tdb.h>1598 #include <ctdb.h>1599 #include <ctdb_private.h>1600 1601 int main(void)1602 {1603 int i = (int)CTDB_CONTROL_TRANS3_COMMIT;1604 return 0;1605 }1606 ''',1607 'HAVE_CTDB_CONTROL_TRANS3_COMMIT_DECL',1608 addmain=False,1609 includes=includes,1610 msg='Checking for transaction support (TRANS3_COMMIT control)')1611 1612 if not conf.CONFIG_SET('HAVE_CTDB_CONTROL_TRANS3_COMMIT_DECL'):1613 have_cluster_support = False1614 ctdb_broken = "ctdb transaction support missing or too old"1615 1616 if have_cluster_support:1617 conf.CHECK_CODE('''1618 #define NO_CONFIG_H1619 #include "replace.h"1620 #include "system/wait.h"1621 #include "system/network.h"1622 #include <talloc.h>1623 #include <tdb.h>1624 #include <ctdb.h>1625 #include <ctdb_private.h>1626 1627 int main(void)1628 {1629 int i = (int)CTDB_CONTROL_SCHEDULE_FOR_DELETION;1630 return 0;1631 }1632 ''',1633 'HAVE_CTDB_CONTROL_SCHEDULE_FOR_DELETION_DECL',1634 addmain=False,1635 includes=includes,1636 msg='Checking for SCHEDULE_FOR_DELETION control')1637 1638 if not conf.CONFIG_SET('HAVE_CTDB_CONTROL_SCHEDULE_FOR_DELETION_DECL'):1639 if not Options.options.enable_old_ctdb:1640 have_cluster_support = False1641 ctdb_broken = "SCHEDULE_FOR_DELETION control missing"1642 else:1643 Logs.warn("ignoring missing SCHEDULE_FOR_DELETION control (--enable-old-ctdb)")1644 1645 if have_cluster_support:1646 conf.CHECK_CODE('''1647 #define NO_CONFIG_H1648 #include "replace.h"1649 #include "system/wait.h"1650 #include "system/network.h"1651 #include <talloc.h>1652 #include <tdb.h>1653 #include <ctdb.h>1654 #include <ctdb_private.h>1655 1656 int main(void)1657 {1658 struct ctdb_control_tcp _x;1659 return 0;1660 }1661 ''',1662 'HAVE_STRUCT_CTDB_CONTROL_TCP',1663 addmain=False,1664 includes=includes,1665 msg='Checking for ctdb ipv4 support')1666 1667 if not conf.CONFIG_SET('HAVE_STRUCT_CTDB_CONTROL_TCP'):1668 have_cluster_support = False1669 ctdb_broken = "missing struct ctdb_control_tcp"1670 1671 if have_cluster_support:1672 conf.CHECK_CODE('''1673 #define NO_CONFIG_H1674 #include "replace.h"1675 #include "system/wait.h"1676 #include "system/network.h"1677 #include <talloc.h>1678 #include <tdb.h>1679 #include <ctdb.h>1680 #include <ctdb_private.h>1681 1682 int main(void)1683 {1684 struct ctdb_control_tcp_addr _x;1685 return 0;1686 }1687 ''',1688 'HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR',1689 addmain=False,1690 includes=includes,1691 msg='Checking for ctdb ipv6 support')1692 1693 if have_cluster_support:1694 1491 Logs.info("building with cluster support") 1695 conf.DEFINE('CLUSTER_SUPPORT', 1); 1696 else: 1697 if not Options.options.with_cluster_support: 1698 Logs.info("building without cluster support") 1699 else: 1700 Logs.warn("building without cluster support: " + ctdb_broken) 1701 conf.undefine('CLUSTER_SUPPORT') 1702 1703 1704 1705 conf.CHECK_CODE('__attribute__((destructor)) static void cleanup(void) { }', 1706 'HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR', 1707 addmain=False, 1708 link=False, 1709 msg='Checking whether we can compile with __attribute__((destructor))') 1492 conf.env.with_ctdb = True 1493 conf.DEFINE('CLUSTER_SUPPORT', 1) 1710 1494 1711 1495 conf.CHECK_CODE('void seekdir(DIR *d, long loc) { return; }', 1712 1713 1714 1496 'SEEKDIR_RETURNS_VOID', 1497 headers='sys/types.h dirent.h', 1498 msg='Checking whether seekdir returns void') 1715 1499 1716 1500 if Options.options.with_profiling_data: 1717 1501 conf.DEFINE('WITH_PROFILE', 1); 1718 1719 PTHREAD_CFLAGS='error' 1720 PTHREAD_LDFLAGS='error' 1721 1722 if PTHREAD_LDFLAGS == 'error': 1723 if conf.CHECK_FUNCS_IN('pthread_attr_init', 'pthread'): 1724 PTHREAD_CFLAGS='-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS' 1725 PTHREAD_LDFLAGS='-lpthread' 1726 if PTHREAD_LDFLAGS == 'error': 1727 if conf.CHECK_FUNCS_IN('pthread_attr_init', 'pthreads'): 1728 PTHREAD_CFLAGS='-D_THREAD_SAFE' 1729 PTHREAD_LDFLAGS='-lpthreads' 1730 if PTHREAD_LDFLAGS == 'error': 1731 if conf.CHECK_FUNCS_IN('pthread_attr_init', 'c_r'): 1732 PTHREAD_CFLAGS='-D_THREAD_SAFE -pthread' 1733 PTHREAD_LDFLAGS='-pthread' 1734 if PTHREAD_LDFLAGS == 'error': 1735 if conf.CHECK_FUNC('pthread_attr_init'): 1736 PTHREAD_CFLAGS='-D_REENTRANT' 1737 PTHREAD_LDFLAGS='-lpthread' 1738 # especially for HP-UX, where the CHECK_FUNC macro fails to test for 1739 # pthread_attr_init. On pthread_mutex_lock it works there... 1740 if PTHREAD_LDFLAGS == 'error': 1741 if conf.CHECK_FUNCS_IN('pthread_mutex_lock', 'pthread'): 1742 PTHREAD_CFLAGS='-D_REENTRANT' 1743 PTHREAD_LDFLAGS='-lpthread' 1744 1745 if PTHREAD_CFLAGS != 'error' and PTHREAD_LDFLAGS != 'error': 1746 conf.ADD_CFLAGS(PTHREAD_CFLAGS) 1747 conf.ADD_LDFLAGS(PTHREAD_LDFLAGS) 1748 conf.CHECK_HEADERS('pthread.h') 1749 conf.DEFINE('HAVE_PTHREAD', '1') 1750 1751 if conf.CHECK_HEADERS('gpfs_gpl.h'): 1752 conf.DEFINE('HAVE_GPFS', '1') 1753 1754 default_static_modules=TO_LIST('''pdb_smbpasswd pdb_tdbsam pdb_wbc_sam 1755 auth_sam auth_unix auth_winbind auth_wbc auth_server 1756 auth_domain auth_builtin vfs_default 1502 conf.CHECK_FUNCS('getrusage', headers="sys/time.h sys/resource.h") 1503 1504 if Options.options.with_pthreadpool: 1505 if conf.CONFIG_SET('HAVE_PTHREAD'): 1506 conf.DEFINE('WITH_PTHREADPOOL', '1') 1507 else: 1508 Logs.warn("pthreadpool support cannot be enabled when pthread support was not found") 1509 conf.undefine('WITH_PTHREADPOOL') 1510 1511 if (conf.CHECK_HEADERS('linux/ioctl.h sys/ioctl.h linux/fs.h') and 1512 conf.CHECK_DECLS('FS_IOC_GETFLAGS FS_COMPR_FL', headers='linux/fs.h')): 1513 conf.DEFINE('HAVE_LINUX_IOCTL', '1') 1514 1515 conf.env['CCFLAGS_CEPHFS'] = "-D_FILE_OFFSET_BITS=64" 1516 if Options.options.libcephfs_dir: 1517 conf.env['CPPPATH_CEPHFS'] = Options.options.libcephfs_dir + '/include' 1518 conf.env['LIBPATH_CEPHFS'] = Options.options.libcephfs_dir + '/lib' 1519 1520 if conf.CHECK_HEADERS('cephfs/libcephfs.h', False, False, 'cephfs') and conf.CHECK_LIB('cephfs'): 1521 conf.DEFINE('HAVE_CEPH', '1') 1522 1523 if Options.options.with_glusterfs: 1524 conf.CHECK_CFG(package='glusterfs-api', args='"glusterfs-api >= 4" --cflags --libs', 1525 msg='Checking for glusterfs-api >= 4', uselib_store="GFAPI") 1526 conf.CHECK_HEADERS('api/glfs.h', lib='gfapi') 1527 conf.CHECK_LIB('gfapi', shlib=True) 1528 1529 if conf.CONFIG_SET('HAVE_API_GLFS_H'): 1530 conf.DEFINE('HAVE_GLUSTERFS', '1') 1531 else: 1532 conf.SET_TARGET_TYPE('gfapi', 'EMPTY') 1533 conf.undefine('HAVE_GLUSTERFS') 1534 else: 1535 conf.SET_TARGET_TYPE('gfapi', 'EMPTY') 1536 conf.undefine('HAVE_GLUSTERFS') 1537 1538 if Options.options.enable_vxfs: 1539 conf.DEFINE('HAVE_VXFS', '1') 1540 1541 if conf.CHECK_CFG(package='dbus-1', args='--cflags --libs', 1542 msg='Checking for dbus', uselib_store="DBUS-1"): 1543 if (conf.CHECK_HEADERS('dbus/dbus.h', lib='dbus-1') 1544 and conf.CHECK_LIB('dbus-1', shlib=True)): 1545 conf.DEFINE('HAVE_DBUS', '1') 1546 1547 conf.env.build_regedit = False 1548 if not Options.options.with_regedit == False: 1549 conf.PROCESS_SEPARATE_RULE('system_ncurses') 1550 if conf.CONFIG_SET('HAVE_NCURSES'): 1551 conf.env.build_regedit = True 1552 1553 if conf.env.build_regedit: 1554 Logs.info("building regedit") 1555 else: 1556 if Options.options.with_regedit == False: 1557 Logs.info("not building regedit (--without-regedit)") 1558 elif Options.options.with_regedit == True: 1559 Logs.error("ncurses not available, cannot build regedit") 1560 conf.fatal("ncurses not available, but --with-regedit was specified") 1561 else: 1562 Logs.info("ncurses not available, not building regedit") 1563 1564 conf.CHECK_FUNCS_IN('DES_pcbc_encrypt', 'crypto') 1565 if Options.options.with_fake_kaserver == True: 1566 conf.CHECK_HEADERS('afs/param.h afs/stds.h', together=True) 1567 conf.CHECK_HEADERS('afs/param.h afs/stds.h', together=True) 1568 if (conf.CONFIG_SET('HAVE_AFS_PARAM_H') and conf.CONFIG_SET('HAVE_AFS_STDS_H') and conf.CONFIG_SET('HAVE_DES_PCBC_ENCRYPT')): 1569 conf.DEFINE('WITH_FAKE_KASERVER', '1') 1570 else: 1571 conf.fatal('AFS headers not available, but --with-fake-kaserver was specified') 1572 1573 conf.env['libtracker']='' 1574 conf.env.with_spotlight = False 1575 if Options.options.with_spotlight: 1576 versions = ['1.0', '0.16', '0.14'] 1577 for version in versions: 1578 testlib = 'tracker-sparql-' + version 1579 if conf.CHECK_CFG(package=testlib, 1580 args='--cflags --libs', 1581 mandatory=False): 1582 conf.SET_TARGET_TYPE(testlib, 'SYSLIB') 1583 conf.env['libtracker'] = testlib 1584 conf.env.with_spotlight = True 1585 conf.DEFINE('WITH_SPOTLIGHT', '1') 1586 break 1587 1588 if not conf.env.with_spotlight: 1589 conf.fatal("Spotlight support requested but tracker-sparql library missing") 1590 Logs.info("building with Spotlight support") 1591 1592 forced_static_modules.extend(TO_LIST('auth_domain auth_builtin auth_sam auth_winbind')) 1593 default_static_modules.extend(TO_LIST('''pdb_smbpasswd pdb_tdbsam pdb_wbc_sam 1594 auth_unix auth_wbc 1757 1595 nss_info_template idmap_tdb idmap_passdb 1758 idmap_nss''') 1759 1760 default_shared_modules=TO_LIST('''vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk 1596 idmap_nss''')) 1597 1598 default_shared_modules.extend(TO_LIST(''' 1599 vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk 1761 1600 vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap 1762 vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP8501763 charset_CP437 auth_script vfs_readahead vfs_xattr_tdb1601 vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 1602 vfs_readahead vfs_xattr_tdb vfs_posix_eadb 1764 1603 vfs_streams_xattr vfs_streams_depot vfs_acl_xattr vfs_acl_tdb 1765 vfs_smb_traffic_analyzer vfs_preopen vfs_catia vfs_scannedonly 1766 vfs_crossrename vfs_linux_xfs_sgid 1767 vfs_time_audit idmap_autorid''') 1604 vfs_preopen vfs_catia 1605 vfs_media_harmony vfs_unityed_media vfs_fruit vfs_shell_snap 1606 vfs_commit vfs_worm vfs_crossrename vfs_linux_xfs_sgid 1607 vfs_time_audit vfs_offline 1608 ''')) 1609 default_shared_modules.extend(TO_LIST('auth_script idmap_tdb2 idmap_script')) 1610 # these have broken dependencies 1611 forced_shared_modules.extend(TO_LIST('idmap_autorid idmap_rid idmap_hash')) 1768 1612 1769 1613 if Options.options.developer: 1770 default_static_modules.extend(TO_LIST('pdb_ads auth_netlogond')) 1771 default_shared_modules.extend(TO_LIST('charset_weird perfcount_test')) 1772 1773 if Options.options.with_acl_support and conf.CONFIG_SET('HAVE_POSIX_ACLS'): 1774 default_static_modules.extend(TO_LIST('vfs_posixacl')) 1614 default_static_modules.extend(TO_LIST('charset_weird')) 1615 default_shared_modules.extend(TO_LIST('perfcount_test')) 1616 default_shared_modules.extend(TO_LIST('vfs_skel_opaque vfs_skel_transparent vfs_shadow_copy_test')) 1617 default_shared_modules.extend(TO_LIST('auth_skel pdb_test')) 1618 default_shared_modules.extend(TO_LIST('vfs_fake_dfq')) 1619 1620 if Options.options.enable_selftest or Options.options.developer: 1621 default_shared_modules.extend(TO_LIST('vfs_fake_acls vfs_nfs4acl_xattr')) 1622 1623 if conf.CONFIG_SET('AD_DC_BUILD_IS_ENABLED'): 1624 default_static_modules.extend(TO_LIST('pdb_samba_dsdb auth_samba4 vfs_dfs_samba4')) 1775 1625 1776 1626 if conf.CONFIG_SET('HAVE_FREEBSD_SUNACL_H'): 1777 1627 default_shared_modules.extend(TO_LIST('vfs_zfsacl')) 1778 1628 1779 1629 if conf.CONFIG_SET('HAVE_DIRFD_DECL'): 1780 1630 default_shared_modules.extend(TO_LIST('vfs_syncops vfs_dirsort')) 1781 1631 1782 1632 if conf.CONFIG_SET('HAVE_STATFS_F_FSID'): 1783 default_shared_modules.extend(TO_LIST('vfs_fileid')) 1784 1785 if conf.CONFIG_SET('HAVE_AIO') and (conf.CONFIG_SET('HAVE_MSGHDR_MSG_CONTROL') or conf.CONFIG_SET('HAVE_MSGHDR_MSG_ACCTRIGHTS')): 1786 default_shared_modules.extend(TO_LIST('vfs_aio_fork')) 1633 default_shared_modules.extend(TO_LIST('vfs_fileid')) 1634 1635 if (conf.CONFIG_SET('HAVE_STRUCT_MSGHDR_MSG_CONTROL') or conf.CONFIG_SET('HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS')): 1636 default_shared_modules.extend(TO_LIST('vfs_aio_fork')) 1637 1638 if Options.options.with_pthreadpool: 1639 default_shared_modules.extend(TO_LIST('vfs_aio_pthread')) 1640 1641 if conf.CONFIG_SET('HAVE_LINUX_KERNEL_AIO'): 1642 default_shared_modules.extend(TO_LIST('vfs_aio_linux')) 1787 1643 1788 1644 if conf.CONFIG_SET('HAVE_LDAP'): 1789 default_static_modules.extend(TO_LIST('pdb_ldap idmap_ldap'))1645 default_static_modules.extend(TO_LIST('pdb_ldapsam idmap_ldap')) 1790 1646 1791 1647 if conf.CONFIG_SET('DARWINOS'): 1792 default_shared_modules.extend(TO_LIST('charset_macosxfs'))1648 default_static_modules.extend(TO_LIST('charset_macosxfs')) 1793 1649 1794 1650 if conf.CONFIG_SET('HAVE_GPFS'): 1795 default_shared_modules.extend(TO_LIST('vfs_gpfs vfs_gpfs_hsm_notify')) 1651 default_shared_modules.extend(TO_LIST('vfs_gpfs')) 1652 1653 if (conf.CONFIG_SET('HAVE_LINUX_IOCTL') 1654 and conf.CONFIG_SET('HAVE_BASENAME') and conf.CONFIG_SET('HAVE_DIRNAME')): 1655 default_shared_modules.extend(TO_LIST('vfs_btrfs')) 1656 1657 if conf.CONFIG_SET("HAVE_CEPH"): 1658 default_shared_modules.extend(TO_LIST('vfs_ceph')) 1659 1660 if conf.CONFIG_SET('HAVE_GLUSTERFS'): 1661 default_shared_modules.extend(TO_LIST('vfs_glusterfs')) 1662 1663 if conf.CONFIG_SET('HAVE_VXFS'): 1664 default_shared_modules.extend(TO_LIST('vfs_vxfs')) 1665 1666 if conf.CONFIG_SET('HAVE_DBUS'): 1667 default_shared_modules.extend(TO_LIST('vfs_snapper')) 1796 1668 1797 1669 explicit_shared_modules = TO_LIST(Options.options.shared_modules, delimiter=',') 1798 1670 explicit_static_modules = TO_LIST(Options.options.static_modules, delimiter=',') 1799 1671 1800 final_static_modules = default_static_modules 1801 final_shared_modules = default_shared_modules 1672 def replace_list_item(lst, item, value): 1673 try: 1674 idx = lst.index(item) 1675 lst[idx] = value 1676 except: 1677 pass 1678 # PDB module file name should have the same name as module registers itself 1679 # In Autoconf build we export LDAP passdb module as ldapsam but WAF build 1680 # was always exporting pdb_ldap. In order to support existing packages 1681 # allow referring to pdb_ldapsam as pdb_ldap but use proper name internally. 1682 replace_list_item(explicit_shared_modules, 'pdb_ldap', 'pdb_ldapsam') 1683 replace_list_item(explicit_static_modules, 'pdb_ldap', 'pdb_ldapsam') 1684 1685 final_static_modules = [] 1686 final_static_modules.extend(TO_LIST(required_static_modules)) 1687 final_shared_modules = [] 1688 1689 if '!FORCED' not in explicit_static_modules: 1690 final_static_modules.extend(TO_LIST(forced_static_modules)) 1691 if '!FORCED' not in explicit_shared_modules: 1692 final_shared_modules.extend(TO_LIST(forced_shared_modules)) 1693 if '!DEFAULT' not in explicit_static_modules: 1694 final_static_modules.extend(TO_LIST(default_static_modules)) 1695 if '!DEFAULT' not in explicit_shared_modules: 1696 final_shared_modules.extend(TO_LIST(default_shared_modules)) 1697 1698 if 'ALL' in explicit_static_modules: 1699 for m in default_shared_modules: 1700 if m in final_shared_modules: 1701 final_shared_modules.remove(m) 1702 final_static_modules.append(m) 1703 if 'ALL' in explicit_shared_modules: 1704 for m in default_static_modules: 1705 if m in final_static_modules: 1706 final_static_modules.remove(m) 1707 final_shared_modules.append(m) 1802 1708 1803 1709 for m in explicit_static_modules: 1710 if m in ['ALL','!DEFAULT','!FORCED']: 1711 continue 1712 if m.startswith('!'): 1713 m = m[1:] 1714 if m in required_static_modules: 1715 raise Utils.WafError('These modules are REQUIRED as static modules: %s' % 1716 ' '.join(required_static_modules)) 1717 if m in final_static_modules: 1718 final_static_modules.remove(m) 1719 continue 1720 if m in forced_shared_modules: 1721 raise Utils.WafError('These modules MUST be configured as shared modules: %s' % 1722 ' '.join(forced_shared_modules)) 1804 1723 if m in final_shared_modules: 1805 1724 final_shared_modules.remove(m) 1806 final_static_modules.append(m) 1725 if m not in final_static_modules: 1726 final_static_modules.append(m) 1807 1727 for m in explicit_shared_modules: 1728 if m in ['ALL','!DEFAULT','!FORCED']: 1729 continue 1730 if m.startswith('!'): 1731 m = m[1:] 1732 if m in final_shared_modules: 1733 final_shared_modules.remove(m) 1734 continue 1735 if m in required_static_modules: 1736 raise Utils.WafError('These modules are REQUIRED as static modules: %s' % 1737 ' '.join(required_static_modules)) 1738 if m in forced_static_modules: 1739 raise Utils.WafError('These module MUST be configured as static modules: %s' % 1740 ' '.join(forced_static_modules)) 1808 1741 if m in final_static_modules: 1809 1742 final_static_modules.remove(m) 1810 final_shared_modules.append(m) 1743 if m not in final_shared_modules: 1744 final_shared_modules.append(m) 1811 1745 1812 1746 conf.env['static_modules'] = final_static_modules … … 1850 1784 if p in shared_list: 1851 1785 for entry in shared_list[p]: 1852 conf.DEFINE('%s_init' % entry, ' init_samba_module')1786 conf.DEFINE('%s_init' % entry, 'samba_init_module') 1853 1787 conf.env[shared_env].append('%s' % entry) 1788 Logs.info("%s: %s" % (static_env, ','.join(conf.env[static_env]))) 1789 Logs.info("%s: %s" % (shared_env, ','.join(conf.env[shared_env]))) 1854 1790 1855 1791 conf.SAMBA_CONFIG_H('include/config.h') … … 1863 1799 os.system(cmd) 1864 1800 1865 if not os.getenv('TOPLEVEL_BUILD'):1866 def wildcard_cmd(cmd):1867 '''called on a unknown command'''1868 from samba_wildcard import run_named_build_task1869 run_named_build_task(cmd)1870 def main():1871 from samba_wildcard import wildcard_main1872 wildcard_main(wildcard_cmd)1873 Scripting.main = main
Note:
See TracChangeset
for help on using the changeset viewer.