build: improve autoconf macros
authorAndrew Tridgell <tridge@samba.org>
Wed, 17 Mar 2010 09:40:03 +0000 (20:40 +1100)
committerAndrew Tridgell <tridge@samba.org>
Tue, 6 Apr 2010 10:26:42 +0000 (20:26 +1000)
- enable headers to be specified
- enable both forms of DECL check
- more libreplace checks
- more heimdal checks
- more sysdep checks

buildtools/wafsamba/samba_autoconf.py
lib/replace/wscript
source4/heimdal_build/wscript_configure
source4/ntvfs/sysdep/wscript_configure

index 73ea4360a666db764afbe700e0dde99cc518250d..e5073a16ecd07c8eb4fa4580df57558227deea17 100644 (file)
@@ -55,14 +55,26 @@ def CHECK_TYPE(conf, t, alternate):
     return False
 
 @conf
-def CHECK_VARIABLE(conf, v, define=None, always=False):
+def CHECK_VARIABLE(conf, v, define=None, always=False, headers=None):
     hdrs=''
-    for h in conf.env.hlist:
+    if headers is not None:
+        hlist = headers.split()
+    else:
+        hlist = conf.env.hlist
+    for h in hlist:
         hdrs += '#include <%s>\n' % h
     if define is None:
         define = 'HAVE_%s' % v.upper()
     if conf.check(fragment=
-                  '%s\nint main(void) {void *_x; _x=(void *)&%s; return 0;}\n' % (hdrs, v),
+                  '''
+                  %s
+                  int main(void) {
+                    #ifndef %s
+                    void *_x; _x=(void *)&%s;
+                    #endif
+                    return 0;
+                  }\n
+                  ''' % (hdrs, v, v),
                   execute=0,
                   msg="Checking for variable %s" % v):
         conf.DEFINE(define, 1)
@@ -72,12 +84,19 @@ def CHECK_VARIABLE(conf, v, define=None, always=False):
         return False
 
 @conf
-def CHECK_DECLS(conf, vars):
+def CHECK_DECLS(conf, vars, reverse=False, headers=None):
     '''check a list of variable declarations, using the HAVE_DECL_xxx form
-       of define'''
+       of define
+
+       When reverse==True then use HAVE_xxx_DECL instead of HAVE_DECL_xxx
+       '''
     ret = True
     for v in vars.split():
-        if not CHECK_VARIABLE(conf, v, define='HAVE_DECL_%s' % v.upper()):
+        if not reverse:
+            define='HAVE_DECL_%s' % v.upper()
+        else:
+            define='HAVE_%s_DECL' % v.upper()
+        if not CHECK_VARIABLE(conf, v, define=define, headers=headers):
             ret = False
     return ret
 
index 4ca33fa93ab0361ef7a0762ecd84e8d06aed88f1..067b80edead60e8d51d3cf00e91ca553ef4363a0 100644 (file)
@@ -131,6 +131,9 @@ def configure(conf):
 
     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_cc(fragment='''
     #include <stdarg.h>
     va_list ap1,ap2;
index c53cd39d72705497a10ef77968a4589499606716..37e243cf660df32281a7decc7eb4174df901a31e 100644 (file)
@@ -24,7 +24,9 @@ conf.DEFINE('VOID_RETSIGTYPE', 1)
 conf.CHECK_VARIABLE('h_errno')
 
 # strangely enough, we need it with another define too
-conf.CHECK_VARIABLE('h_errno', define='HAVE_DECL_H_ERRNO')
+conf.CHECK_DECLS('h_errno')
+
+conf.CHECK_DECLS('_res')
 
 conf.CHECK_HEADERS('arpa/nameser.h dns.h')
 conf.CHECK_FUNCS_IN('res_search res_nsearch res_ndestroy dns_search dn_expand', 'resolv')
index 2d2064843e313bdc0eab70c1f859608a244270ff..6cfa4abe91470d2bc35ee56b9a4cfc2015e0ee62 100644 (file)
@@ -3,5 +3,7 @@ conf.CHECK_HEADERS('linux/inotify.h asm/unistd.h sys/inotify.h', add_headers=Fal
 conf.CHECK_FUNCS('inotify_init')
 
 conf.CHECK_VARIABLE('__NR_inotify_init')
-conf.CHECK_VARIABLE('F_SETLEASE')
-conf.CHECK_VARIABLE('SA_SIGINFO')
+conf.CHECK_DECLS('F_SETLEASE', headers='linux/fcntl.h', reverse=True)
+conf.CHECK_DECLS('SA_SIGINFO', headers='signal.h', reverse=True)
+
+conf.CHECK_DECLS('__NR_inotify_init', reverse=True, headers='asm/unistd.h')