build: check for offset_t and pw*_r functions
[nivanova/samba-autobuild/.git] / lib / replace / wscript
index 2d06afb35db8055da4049affc415cb6bb52d2177..8990240316ec569ec8cb3e2baf18cd570cd572ac 100644 (file)
@@ -1,19 +1,25 @@
+#! /usr/bin/env python
+
 srcdir = '../..'
 blddir = 'bin'
 
-import Options, os, wafsamba
+import sys
+sys.path.insert(0, srcdir+"/buildtools/wafsamba")
+import wafsamba
+import Options, os
 
 def set_options(opt):
     opt.tool_options('compiler_cc')
+    # TODO: we are not yet obeying these default paths at install time
     opt.add_option('--libdir',
-                   help=("object code libraries [PREFIX/lib]"),
-                   action="store", dest='LIBDIR', default=None)
+                   help=("object code libraries [PREFIX/lib"),
+                   action="store", dest='LIBDIR', default='${PREFIX}/lib')
     opt.add_option('--bindir',
                    help=("user executables [PREFIX/bin]"),
-                   action="store", dest='BINDIR', default=None)
+                   action="store", dest='BINDIR', default='${PREFIX}/bin')
     opt.add_option('--sbindir',
                    help=("system admin executables [PREFIX/sbin]"),
-                   action="store", dest='SBINDIR', default=None)
+                   action="store", dest='SBINDIR', default='${PREFIX}/sbin')
     opt.add_option('--enable-rpath',
                    help=("Enable use of rpath for installed binaries"),
                    action="store_true", dest='enable_rpath', default=False)
@@ -24,21 +30,26 @@ def set_options(opt):
 @wafsamba.runonce
 def configure(conf):
     conf.env.hlist = []
+    conf.env.srcdir = conf.srcdir
 
     # load our local waf extensions
-    conf.check_tool('wafsamba', tooldir=conf.curdir)
-
-    conf.CONFIG_PATH('LIBDIR', '/lib')
-    conf.CONFIG_PATH('BINDIR', '/bin')
-    conf.CONFIG_PATH('SBINDIR', '/sbin')
+    conf.check_tool('wafsamba', tooldir=conf.srcdir + "/buildtools/wafsamba")
 
     conf.check_tool('compiler_cc')
 
-    conf.env['RPATH_ON_INSTALL'] = Options.options.enable_rpath
+    # make the install paths available in environment
+    conf.env.LIBDIR = Options.options.LIBDIR
+    conf.env.BINDIR = Options.options.BINDIR
+    conf.env.SBINDIR = Options.options.SBINDIR
+
+    conf.env.RPATH_ON_INSTALL = Options.options.enable_rpath
+
+    # check for pkgconfig
+    conf.check_cfg(atleast_pkgconfig_version='0.0.0')
 
-    conf.DEFUN('_GNU_SOURCE', 1)
-    conf.DEFUN('_XOPEN_SOURCE_EXTENDED', 1)
-    conf.DEFUN('LIBREPLACE_NETWORK_CHECKS', 1)
+    conf.DEFINE('_GNU_SOURCE', 1)
+    conf.DEFINE('_XOPEN_SOURCE_EXTENDED', 1)
+    conf.DEFINE('LIBREPLACE_NETWORK_CHECKS', 1)
 
     conf.CHECK_HEADERS('unistd.h sys/types.h stdlib.h stdio.h stddef.h')
     conf.CHECK_HEADERS('ctype.h locale.h acl/libacl.h compat.h')
@@ -60,17 +71,20 @@ def configure(conf):
     conf.CHECK_HEADERS('netinet/ip.h netinet/tcp.h netinet/in_ip.h sys/sockio.h sys/un.h')
     conf.CHECK_HEADERS('sys/uio.h ifaddrs.h direct.h dirent.h')
     conf.CHECK_HEADERS('windows.h winsock2.h ws2tcpip.h')
+    conf.CHECK_HEADERS('resolv.h libintl.h errno.h')
+    conf.CHECK_HEADERS('gcrypt.h getopt.h iconv.h')
+    conf.CHECK_HEADERS('sys/inotify.h memory.h nss.h popt.h sasl/sasl.h')
+    conf.CHECK_HEADERS('security/pam_appl.h sys/inotify.h zlib.h asm/unistd.h')
 
     if 'HAVE_STDDEF_H' in conf.env and 'HAVE_STDLIB_H' in conf.env:
-        conf.DEFUN('STDC_HEADERS', 1)
+        conf.DEFINE('STDC_HEADERS', 1)
 
     if 'HAVE_SYS_TIME_H' in conf.env and 'HAVE_TIME_H' in conf.env:
-        conf.DEFUN('TIME_WITH_SYS_TIME', 1)
+        conf.DEFINE('TIME_WITH_SYS_TIME', 1)
 
     conf.define('SHLIBEXT', "so", quote=True)
 
-    conf.check(type_name='long long')
-    conf.CHECK_TYPES('intptr_t uintptr_t ptrdiff_t')
+    conf.CHECK_TYPES('"long long" intptr_t uintptr_t ptrdiff_t')
     conf.CHECK_TYPES('comparison_fn_t socklen_t bool')
 
     conf.CHECK_TYPE('int8_t', 'char')
@@ -85,6 +99,7 @@ def configure(conf):
     conf.CHECK_TYPE('ino_t', 'unsigned')
     conf.CHECK_TYPE('loff_t', 'off_t')
     conf.CHECK_TYPE('bool', 'off_t')
+    conf.CHECK_TYPE('offset_t', 'loff_t')
 
     conf.CHECK_TYPE_IN('struct ifaddrs', 'ifaddrs.h')
     conf.CHECK_TYPE_IN('struct addrinfo', 'netdb.h')
@@ -101,11 +116,29 @@ def configure(conf):
     conf.CHECK_FUNCS('asprintf vasprintf setenv unsetenv strnlen strtoull __strtoull')
     conf.CHECK_FUNCS('strtouq strtoll __strtoll strtoq memmem printf memset memcpy')
     conf.CHECK_FUNCS('connect gethostbyname if_nametoindex socketpair')
-    conf.CHECK_FUNCS('inet_ntoa inet_ntop dirfd getdirentries getdents syslog')
-    conf.CHECK_FUNCS('timegm getifaddrs freeifaddrs')
+    conf.CHECK_FUNCS('inet_ntoa inet_aton inet_ntop inet_pton')
+    conf.CHECK_FUNCS('dirfd getdirentries getdents syslog epoll getaddrinfo')
+    conf.CHECK_FUNCS('timegm getifaddrs freeifaddrs mmap setgroups setsid')
+    conf.CHECK_FUNCS('getgrent_r getgrgid_r getgrnam_r getgrouplist getpagesize')
+    conf.CHECK_FUNCS('getpwent_r getpwnam_r getpwuid_r')
+
 
     conf.CHECK_FUNCS_IN('dlopen dlsym dlerror dlclose', 'dl')
     conf.CHECK_FUNCS_IN('poptGetContext', 'popt')
+    conf.CHECK_FUNCS_IN('res_search', 'resolv')
+    conf.CHECK_FUNCS_IN('gettext', 'intl')
+
+    conf.CHECK_FUNCS_IN('crypt', 'crypt', checklibc=True)
+
+    conf.CHECK_VARIABLE('rl_event_hook', define='HAVE_DECL_RL_EVENT_HOOK', always=True)
+
+    conf.CHECK_DECLS('snprintf vsnprintf asprintf vasprintf')
+
+    conf.CHECK_DECLS('dirfd environ errno getgrent_r getpwent_r', reverse=True)
+    conf.CHECK_DECLS('pread pwrite setenv setresgid setresuid', reverse=True)
+
+    conf.CHECK_SIZEOF('char int "long long" long off_t short size_t ssize_t')
+    conf.CHECK_SIZEOF('void*', define='SIZEOF_VOID_P')
 
     conf.check_cc(fragment='''
     #include <stdarg.h>
@@ -172,14 +205,35 @@ main() { foo("hello"); }
 def build(bld):
     bld.set_rpath()
 
+    # libreplace needs to put the library in the right build groups
+    # as libreplace is a base library for everything, even for our
+    # compilers, we need libreplace to build very early
+    bld.SETUP_BUILD_GROUPS()
+
     REPLACE_SOURCE = 'replace.c snprintf.c'
 
     bld.SAMBA_LIBRARY('replace',
-                      REPLACE_SOURCE)
+                      source=REPLACE_SOURCE,
+                      group='base_libraries')
 
     TEST_SOURCES = '''test/testsuite.c test/main.c test/strptime.c
                       test/os2_delete.c test/getifaddrs.c'''
 
     bld.SAMBA_BINARY('replace_testsuite',
                      TEST_SOURCES,
-                     'replace')
+                     deps='replace')
+
+    NET_SOURCES = []
+    if bld.CONFIG_SET('HAVE_INET_NTOA'):  NET_SOURCES.append('inet_ntoa.c')
+    if bld.CONFIG_SET('HAVE_INET_ATON'):  NET_SOURCES.append('inet_aton.c')
+    if bld.CONFIG_SET('HAVE_INET_NTOP'):  NET_SOURCES.append('inet_ntop.c')
+    if bld.CONFIG_SET('HAVE_INET_PTON'):  NET_SOURCES.append('inet_pton.c')
+    if bld.CONFIG_SET('HAVE_SOCKETPAIR'): NET_SOURCES.append('socketpair.c')
+
+    bld.SAMBA_SUBSYSTEM('LIBREPLACE_NETWORK', NET_SOURCES)
+
+
+    CRYPT_SOURCES = []
+    if not 'HAVE_CRYPT' in bld.env: CRYPT_SOURCES.append('crypt.c')
+
+    bld.SAMBA_SUBSYSTEM('LIBREPLACE_EXT', CRYPT_SOURCES)