build: configure fixes for opensolaris
authorAndrew Tridgell <tridge@samba.org>
Tue, 23 Mar 2010 13:32:23 +0000 (09:32 -0400)
committerAndrew Tridgell <tridge@samba.org>
Tue, 6 Apr 2010 10:27:01 +0000 (20:27 +1000)
buildtools/wafsamba/samba_autoconf.py
lib/replace/wscript
nsswitch/wscript_configure
source4/heimdal_build/wscript_configure
source4/lib/tls/wscript

index b5da80f3a6a2a4531b22a8f5bbbd8a486b8b7f39..5a733b6f59338a574412f9ef7d915015161ff3e6 100644 (file)
@@ -69,14 +69,26 @@ def CHECK_HEADER(conf, h, add_headers=False):
 
 
 @conf
-def CHECK_HEADERS(conf, headers, add_headers=False):
-    '''check for a list of headers'''
+def CHECK_HEADERS(conf, headers, add_headers=False, together=False):
+    '''check for a list of headers
+
+    when together==True, then the headers accumulate within this test.
+    This is useful for interdependent headers
+    '''
     ret = True
+    if not add_headers and together:
+        saved_hlist = conf.env.hlist[:]
+        set_add_headers = True
+    else:
+        set_add_headers = add_headers
     for hdr in TO_LIST(headers):
-        if not CHECK_HEADER(conf, hdr, add_headers):
+        if not CHECK_HEADER(conf, hdr, set_add_headers):
             ret = False
+    if not add_headers and together:
+        conf.env.hlist = saved_hlist
     return ret
 
+
 def header_list(conf, headers=None):
     '''form a list of headers which exist, as a string'''
     hlist=[]
@@ -166,7 +178,7 @@ def CHECK_DECLS(conf, vars, reverse=False, headers=None):
     return ret
 
 
-def CHECK_FUNC(conf, f, link=None, lib='c', headers=None):
+def CHECK_FUNC(conf, f, link=None, lib=None, headers=None):
     '''check for a function'''
     define='HAVE_%s' % f.upper()
 
@@ -205,7 +217,7 @@ def CHECK_FUNC(conf, f, link=None, lib='c', headers=None):
 
 
 @conf
-def CHECK_FUNCS(conf, list, link=None, lib='c', headers=None):
+def CHECK_FUNCS(conf, list, link=None, lib=None, headers=None):
     '''check for a list of functions'''
     ret = True
     for f in TO_LIST(list):
@@ -241,7 +253,7 @@ def CHECK_CODE(conf, code, define,
                always=False, execute=False, addmain=True,
                add_headers=True, mandatory=False,
                headers=None, msg=None, cflags='', includes='# .',
-               local_include=True, lib='c', link=True,
+               local_include=True, lib=None, link=True,
                define_ret=False, quote=False):
     '''check if some code compiles and/or runs'''
 
@@ -261,9 +273,9 @@ def CHECK_CODE(conf, code, define,
         execute = 0
 
     if addmain:
-        fragment='#include "__confdefs.h"\n%s\n int main(void) { %s; return 0; }' % (hdrs, code)
+        fragment='#include "__confdefs.h"\n%s\n int main(void) { %s; return 0; }\n' % (hdrs, code)
     else:
-        fragment='#include "__confdefs.h"\n%s\n%s' % (hdrs, code)
+        fragment='#include "__confdefs.h"\n%s\n%s\n' % (hdrs, code)
 
     conf.write_config_header('__confdefs.h', top=True)
 
@@ -281,17 +293,27 @@ def CHECK_CODE(conf, code, define,
     else:
         type='cprogram'
 
-    if conf.check(fragment=fragment,
-                  execute=execute,
-                  define_name = define,
-                  mandatory = mandatory,
-                  ccflags=TO_LIST(cflags),
-                  includes=includes,
-                  lib=lib, # how do I make this conditional, so I can avoid the -lc?
-                  type=type,
-                  msg=msg,
-                  quote=quote,
-                  define_ret=define_ret):
+    if lib is not None:
+        uselib = TO_LIST(lib)
+    else:
+        uselib = []
+
+    ret = conf.check(fragment=fragment,
+                     execute=execute,
+                     define_name = define,
+                     mandatory = mandatory,
+                     ccflags=TO_LIST(cflags),
+                     includes=includes,
+                     uselib=uselib,
+                     type=type,
+                     msg=msg,
+                     quote=quote,
+                     define_ret=define_ret)
+    if not ret and CONFIG_SET(conf, define):
+        # sometimes conf.check() returns false, but it
+        # sets the define. Maybe a waf bug?
+        ret = True
+    if ret:
         if not define_ret:
             conf.DEFINE(define, 1)
         return True
@@ -431,6 +453,23 @@ def CHECK_C_PROTOTYPE(conf, function, prototype, define, headers=None):
                            msg='Checking C prototype for %s' % function)
 
 
+@conf
+def CHECK_LARGEFILE(conf):
+    '''see what we need for largefile support'''
+    if conf.CHECK_CODE('return !(sizeof(off_t) >= 8)',
+                       'HAVE_LARGEFILE',
+                       execute=True,
+                       msg='Checking for large file support'):
+        return True
+    if conf.CHECK_CODE('return !(sizeof(off_t) >= 8)',
+                       'HAVE_LARGEFILE',
+                       execute=True,
+                       cflags='-D_FILE_OFFSET_BITS=64',
+                       msg='Checking for -D_FILE_OFFSET_BITS=64'):
+        conf.DEFINE('_FILE_OFFSET_BITS', 64)
+        return True
+    return False
+
 
 
 #################################################
index b4ef65d28c7c24b17268fbfa620c2a8d02b869b1..39e75c06c7a72f4e1ba4bdf4a0e64da824508a07 100644 (file)
@@ -81,7 +81,6 @@ def configure(conf):
                     execute=True,
                     msg='Checking simple C program')
 
-
     # check for rpath
     if not conf.env.DISABLE_SHARED and conf.CHECK_RPATH_SUPPORT():
         conf.env.RPATH_ON_BUILD   = not Options.options.disable_rpath_build
@@ -101,9 +100,15 @@ def configure(conf):
     conf.DEFINE('_XOPEN_SOURCE_EXTENDED', 1, add_to_cflags=True)
     conf.DEFINE('LIBREPLACE_NETWORK_CHECKS', 1)
 
-    conf.CHECK_HEADERS('stdio.h sys/types.h sys/stat.h stdlib.h stddef.h memory.h string.h', add_headers=True)
+    # get the base headers we'll use for the rest of the tests
+    conf.CHECK_HEADERS('stdio.h sys/types.h sys/stat.h stdlib.h stddef.h memory.h string.h',
+                       add_headers=True)
     conf.CHECK_HEADERS('strings.h inttypes.h stdint.h unistd.h minix/config.h', add_headers=True)
     conf.CHECK_HEADERS('ctype.h standards.h stdbool.h stdint.h stdarg.h vararg.h', add_headers=True)
+
+    # see if we need special largefile flags
+    conf.CHECK_LARGEFILE()
+
     conf.CHECK_HEADERS('crypt.h locale.h acl/libacl.h compat.h')
     conf.CHECK_HEADERS('acl/libacl.h attr/xattr.h compat.h ctype.h dustat.h')
     conf.CHECK_HEADERS('fcntl.h fnmatch.h glob.h history.h krb5.h langinfo.h')
@@ -180,9 +185,9 @@ def configure(conf):
     conf.CHECK_TYPE_IN('sig_atomic_t', 'signal.h', define='HAVE_SIG_ATOMIC_T_TYPE')
 
     conf.CHECK_FUNCS_IN('''inet_ntoa inet_aton inet_ntop inet_pton connect gethostbyname
-                           getaddrinfo getnameinfo freeaddrinfo gai_strerror''',
+                           getaddrinfo getnameinfo freeaddrinfo gai_strerror socketpair''',
                         'socket nsl', checklibc=True,
-                        headers='sys/socket.h netinet/in.h arpa/inet.h')
+                        headers='sys/socket.h netinet/in.h arpa/inet.h netdb.h')
 
     conf.CHECK_CODE('''
                        struct sockaddr_storage sa_store;
@@ -197,6 +202,7 @@ def configure(conf):
                        freeaddrinfo(ai);
                        ''',
                     define='HAVE_IPV6',
+                    lib='nsl socket',
                     headers='sys/socket.h netdb.h netinet/in.h')
 
     # check if signal() takes a void function
@@ -218,7 +224,7 @@ def configure(conf):
     conf.CHECK_FUNCS('link readlink symlink realpath fdatasync snprintf vsnprintf')
     conf.CHECK_FUNCS('asprintf vasprintf setenv unsetenv strnlen strtoull __strtoull')
     conf.CHECK_FUNCS('strtouq strtoll __strtoll strtoq')
-    conf.CHECK_FUNCS('if_nametoindex socketpair')
+    conf.CHECK_FUNCS('if_nametoindex')
     conf.CHECK_FUNCS('dirfd getdirentries getdents syslog')
     conf.CHECK_FUNCS('gai_strerror get_current_dir_name')
     conf.CHECK_FUNCS('timegm getifaddrs freeifaddrs mmap setgroups setsid')
@@ -229,7 +235,7 @@ def configure(conf):
     conf.CHECK_FUNCS_IN('poptGetContext', 'popt')
     conf.CHECK_FUNCS_IN('res_search', 'resolv', checklibc=True,
                         headers='netinet/in.h arpa/nameser.h resolv.h')
-    conf.CHECK_FUNCS_IN('gettext', 'intl', checklibc=True)
+    conf.CHECK_FUNCS_IN('gettext', 'intl', checklibc=True, headers='libintl.h')
     conf.CHECK_FUNCS_IN('pthread_create', 'pthread', checklibc=True, headers='pthread.h')
 
     conf.CHECK_FUNCS_IN('crypt', 'crypt', checklibc=True)
@@ -252,6 +258,15 @@ def configure(conf):
     if conf.CONFIG_SET('HAVE_EPOLL_CREATE') and conf.CONFIG_SET('HAVE_SYS_EPOLL_H'):
         conf.DEFINE('HAVE_EPOLL', 1)
 
+    if not conf.CHECK_CODE('''#define LIBREPLACE_CONFIGURE_TEST_STRPTIME
+                      #include "$libreplacedir/test/strptime.c"''',
+                           define='HAVE_STRPTIME',
+                           msg='Checking for working strptime'):
+        conf.DEFINE('REPLACE_STRPTIME', 1)
+
+
+
+
     conf.CHECK_CODE('va_list ap1,ap2; va_copy(ap1,ap2)',
                     define="HAVE_VA_COPY",
                     msg="Checking for va_copy")
@@ -290,6 +305,7 @@ def configure(conf):
                            #include "test/getifaddrs.c"
                            ''' % method,
                            method,
+                           lib='nsl socket',
                            addmain=False,
                            execute=True):
             break
@@ -367,6 +383,10 @@ def build(bld):
 
     REPLACE_SOURCE = 'replace.c snprintf.c'
 
+
+    if bld.CONFIG_SET('REPLACE_STRPTIME'):
+        REPLACE_SOURCE += ' strptime.c'
+
     bld.SAMBA_LIBRARY('replace',
                       source=REPLACE_SOURCE,
                       group='base_libraries',
@@ -375,6 +395,7 @@ def build(bld):
     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,
                      deps='replace',
index cb559581e72d0f78d34cbdbc985471dba84a5ba9..3305bbf44e9d5aa60540b901bb8a5506a45edf19 100644 (file)
@@ -1,5 +1,4 @@
 conf.CHECK_HEADERS('nss.h nss_common.h ns_api.h')
 
-conf.CHECK_HEADERS('security/pam_appl.h')
-conf.CHECK_FUNCS_IN('pam_start', 'pam', checklibc=True)
-conf.CHECK_HEADERS('security/pam_modules.h pam/pam_modules.h')
+conf.CHECK_HEADERS('security/pam_appl.h security/pam_modules.h pam/pam_modules.h', together=True)
+conf.CHECK_FUNCS_IN('pam_start', 'pam', checklibc=True, headers='security/pam_appl.h')
index 0f28f23e55bb26189ee0c4cff7fbda7bfe4c4a2a..d3a2cb72539e367e5cbbb980a1bee867b77ea6fc 100644 (file)
@@ -9,7 +9,7 @@ conf.CHECK_HEADERS('''crypt.h errno.h inttypes.h netdb.h signal.h sys/bswap.h
                      sys/utsname.h time.h timezone.h ttyname.h netinet/in.h
                      netinet/in6.h netinet6/in6.h libintl.h''')
 
-conf.CHECK_HEADERS('curses.h term.h termcap.h')
+conf.CHECK_HEADERS('curses.h term.h termcap.h', together=True)
 
 conf.CHECK_FUNCS('''atexit cgetent getprogname setprogname gethostname
                     putenv rcmd readv sendmsg setitimer strlwr strncasecmp
@@ -29,6 +29,10 @@ conf.CHECK_FUNCS('bswap16')
 conf.CHECK_FUNCS('bswap32')
 
 conf.CHECK_TYPE('struct winsize', define='HAVE_STRUCT_WINSIZE', headers='sys/termios.h sys/ioctl.h')
+conf.CHECK_STRUCTURE_MEMBER('struct winsize', 'ws_xpixel',
+                                   define='HAVE_WS_XPIXEL', headers='sys/termios.h sys/ioctl.h')
+conf.CHECK_STRUCTURE_MEMBER('struct winsize', 'ws_ypixel',
+                                   define='HAVE_WS_YPIXEL', headers='sys/termios.h sys/ioctl.h')
 conf.DEFINE('HAVE_KRB_STRUCT_WINSIZE', 1)
 conf.DEFINE('VOID_RETSIGTYPE', 1)
 
index a993848cf992d3cd303bd7e75ccfbe55ce6df3e8..66cc762b988febb48cbc94374fec2069486da2b3 100644 (file)
@@ -17,6 +17,13 @@ def configure(conf):
 
     conf.CHECK_FUNCS_IN('gnutls_global_init', 'gnutls', headers='gnutls/gnutls.h')
 
+    conf.CHECK_VARIABLE('gnutls_x509_crt_set_version',
+                        headers='gnutls/gnutls.h gnutls/x509.h',
+                        define='HAVE_GNUTLS_X509_CRT_SET_VERSION')
+    conf.CHECK_VARIABLE('gnutls_x509_crt_set_subject_key_id',
+                        headers='gnutls/gnutls.h gnutls/x509.h',
+                        define='HAVE_GNUTLS_X509_CRT_SET_SUBJECT_KEY_ID')
+
     # check for gnutls_datum types
     conf.CHECK_TYPES('gnutls_datum gnutls_datum_t', headers='gnutls/gnutls.h')