build: neater way to find libreplace and start on tevent waf build
authorAndrew Tridgell <tridge@samba.org>
Wed, 17 Mar 2010 09:31:46 +0000 (20:31 +1100)
committerAndrew Tridgell <tridge@samba.org>
Tue, 6 Apr 2010 10:26:33 +0000 (20:26 +1000)
lib/replace/wafsamba.py
lib/replace/wscript
lib/talloc/wscript
lib/tdb/wscript
lib/tevent/wscript [new file with mode: 0644]

index 07eb1c9cfc575fbc618368767fcd8b0dd264984b..f0f4910d155497b7d4fb130b0f65ceb2614ca05d 100644 (file)
@@ -16,13 +16,13 @@ def DEFUN(conf, d, v):
 
 @conf
 def CHECK_HEADERS(conf, list):
-    for hdr in list.rsplit(' '):
+    for hdr in list.split():
         if conf.check(header_name=hdr):
             conf.env.hlist.append(hdr)
 
 @conf
 def CHECK_TYPES(conf, list):
-    for t in list.rsplit(' '):
+    for t in list.split():
         conf.check(type_name=t, header_name=conf.env.hlist)
 
 @conf
@@ -37,15 +37,24 @@ def CHECK_TYPE(conf, t, alternate):
 
 @conf
 def CHECK_FUNCS(conf, list):
-    for f in list.rsplit(' '):
+    for f in list.split():
         conf.check(function_name=f, header_name=conf.env.hlist)
 
 @conf
 def CHECK_FUNCS_IN(conf, list, library):
     if conf.check(lib=library, uselib_store=library):
-        for f in list.rsplit(' '):
+        for f in list.split():
             conf.check(function_name=f, lib=library, header_name=conf.env.hlist)
 
+#################################################
+# write out config.h in the right directory
+@conf
+def SAMBA_CONFIG_H(conf):
+    import os
+    if os.path.normpath(conf.curdir) == os.path.normpath(conf.srcdir):
+        conf.write_config_header('config.h')
+
+
 ################################################################
 # magic rpath handling
 #
@@ -60,6 +69,16 @@ def set_rpath(bld):
         bld.env.append_value('RPATH', '-Wl,-rpath=build/default')
 Build.BuildContext.set_rpath = set_rpath
 
+
+################################################################
+# create a list of files by pre-pending each with a subdir name
+def SUBDIR(bld, subdir, list):
+    ret = ''
+    for l in list.split():
+        ret = ret + subdir + '/' + l + ' '
+    return ret
+Build.BuildContext.SUBDIR = SUBDIR
+
 ################################################################
 # this will contain the set of includes needed per Samba library
 Build.BuildContext.SAMBA_LIBRARY_INCLUDES = {}
@@ -72,7 +91,7 @@ Build.BuildContext.SAMBA_LIBRARY_DEPS = {}
 # return a include list for a set of library dependencies
 def SAMBA_LIBRARY_INCLUDE_LIST(bld, libdeps):
     ret = bld.curdir + ' '
-    for l in libdeps.rsplit(' '):
+    for l in libdeps.split():
         if l in bld.SAMBA_LIBRARY_INCLUDES:
             ret = ret + bld.SAMBA_LIBRARY_INCLUDES[l] + ' '
     return ret
@@ -81,13 +100,15 @@ Build.BuildContext.SAMBA_LIBRARY_INCLUDE_LIST = SAMBA_LIBRARY_INCLUDE_LIST
 
 #################################################################
 # define a Samba library
-def SAMBA_LIBRARY(bld, libname, source_list, libdeps='', include_list=''):
-    ilist = bld.SAMBA_LIBRARY_INCLUDE_LIST(libdeps) + include_list
+def SAMBA_LIBRARY(bld, libname, source_list,
+                  libdeps='', include_list='.', vnum=None):
+    ilist = bld.SAMBA_LIBRARY_INCLUDE_LIST(libdeps) + bld.SUBDIR(bld.curdir, include_list)
     bld(
         features = 'cc cshlib',
         source = source_list,
         target=libname,
-        includes=ilist)
+        includes='. ' + ilist,
+        vnum=vnum)
     bld.SAMBA_LIBRARY_INCLUDES[libname] = ilist
 Build.BuildContext.SAMBA_LIBRARY = SAMBA_LIBRARY
 
@@ -99,19 +120,19 @@ def SAMBA_BINARY(bld, binname, source_list, libdeps='', include_list=''):
         source = source_list,
         target = binname,
         uselib_local = libdeps,
-        includes = bld.SAMBA_LIBRARY_INCLUDE_LIST(libdeps) + include_list)
+        includes = '. ' + bld.SAMBA_LIBRARY_INCLUDE_LIST(libdeps) + include_list)
 Build.BuildContext.SAMBA_BINARY = SAMBA_BINARY
 
 ############################################################
-# this overrides the normal -v debug output to be in a nice
-# unix like format. Thanks to ita on #waf for this
+# this overrides the 'waf -v' debug output to be in a nice
+# unix like format instead of a python list.
+# Thanks to ita on #waf for this
 def exec_command(self, cmd, **kw):
-    import Utils
-    from Logs import debug
+    import Utils, Logs
     _cmd = cmd
     if isinstance(cmd, list):
         _cmd = ' '.join(cmd)
-    debug('runner: %s' % _cmd)
+    Logs.debug('runner: %s' % _cmd)
     if self.log:
         self.log.write('%s\n' % cmd)
         kw['log'] = self.log
@@ -121,6 +142,20 @@ def exec_command(self, cmd, **kw):
     except AttributeError:
         self.cwd = kw['cwd'] = self.bldnode.abspath()
     return Utils.exec_command(cmd, **kw)
-
-import Build
 Build.BuildContext.exec_command = exec_command
+
+
+######################################################
+# this is used as a decorator to make functions only
+# run once. Based on the idea from
+# http://stackoverflow.com/questions/815110/is-there-a-decorator-to-simply-cache-function-return-values
+runonce_ret = {}
+def runonce(function):
+    def wrapper(*args):
+        if args in runonce_ret:
+            return runonce_ret[args]
+        else:
+            ret = function(*args)
+            runonce_ret[args] = ret
+            return ret
+    return wrapper
index 6fc49e57dc80ed717976d2fdee3ba051cd3e87bc..e4eebdf6de5d7edca3bbc335dc9273ad5947ab95 100644 (file)
@@ -1,7 +1,7 @@
 srcdir = '.'
 blddir = 'build'
 
-import Options, os
+import Options, os, wafsamba
 
 def set_options(opt):
     opt.tool_options('compiler_cc')
@@ -9,6 +9,7 @@ def set_options(opt):
                    help=("Disable use of rpath"),
                    action="store_true", dest='disable_rpath', default=False)
 
+@wafsamba.runonce
 def configure(conf):
     conf.env.hlist = []
 
@@ -20,7 +21,7 @@ def configure(conf):
     conf.DEFUN('_XOPEN_SOURCE_EXTENDED', 1)
     conf.DEFUN('LIBREPLACE_NETWORK_CHECKS', 1)
 
-    conf.CHECK_HEADERS('unistd.h sys/types.h stdlib.h stdio.h')
+    conf.CHECK_HEADERS('unistd.h sys/types.h stdlib.h stdio.h stddef.h')
     conf.CHECK_HEADERS('sys/wait.h sys/stat.h malloc.h grp.h')
     conf.CHECK_HEADERS('crypt.h dlfcn.h dl.h standards.h stdbool.h stdint.h')
     conf.CHECK_HEADERS('sys/select.h setjmp.h utime.h sys/syslog.h syslog.h')
@@ -31,6 +32,9 @@ def configure(conf):
     conf.CHECK_HEADERS('sys/uio.h ifaddrs.h direct.h dirent.h')
     conf.CHECK_HEADERS('windows.h winsock2.h ws2tcpip.h')
 
+    if 'HAVE_STDDEF_H' in conf.env and 'HAVE_STDLIB_H' in conf.env:
+        conf.DEFUN('STDC_HEADERS', 1)
+
     conf.check(type_name='long long')
     conf.CHECK_TYPES('intptr_t uintptr_t ptrdiff_t')
     conf.CHECK_TYPES('comparison_fn_t socklen_t bool')
@@ -68,6 +72,20 @@ def configure(conf):
 
     conf.CHECK_FUNCS_IN('dlopen dlsym dlerror dlclose', 'dl')
 
+    conf.check_cc(fragment='''
+    #include <stdarg.h>
+    va_list ap1,ap2;
+    va_copy(ap1,ap2);
+    int main(void)
+    { return 0; }''',
+                define_name="HAVE_VA_COPY",
+               execute=0,
+               link=0,
+                define_ret=0,
+                quote=0,
+               msg="Checking for va_copy")
+
+
     # we could also put code fragments like this in separate files,
     # for example in test/snprintf.c
     conf.check_cc(fragment='''
@@ -110,7 +128,7 @@ main() { foo("hello"); }
                 quote=0,
                msg="Checking for C99 vsnprintf")
 
-    conf.write_config_header('config.h')
+    conf.SAMBA_CONFIG_H()
 
 def build(bld):
     bld.set_rpath()
index bcbb844a971ffc265da62b4987e1532014950f65..989a8a8b41c161486b4d64cc9e91866efd4b82f3 100644 (file)
@@ -1,18 +1,24 @@
+VERSION = '2.0.1'
+
 srcdir = '.'
 blddir = 'build'
 
+LIBREPLACE_DIR='../replace'
+
 def set_options(opt):
-    opt.recurse('../replace')
+    opt.recurse(LIBREPLACE_DIR)
 
 def configure(conf):
-    conf.recurse('../replace')
+    conf.sub_config(LIBREPLACE_DIR)
+    conf.SAMBA_CONFIG_H()
 
 def build(bld):
-    bld.recurse('../replace')
+    bld.add_subdirs(LIBREPLACE_DIR)
 
     bld.SAMBA_LIBRARY('talloc',
                       'talloc.c',
-                      'replace')
+                      libdeps='replace',
+                      vnum=VERSION)
 
     bld.SAMBA_BINARY('talloc_testsuite',
                      'testsuite.c testsuite_main.c',
index 4115593de63dcac734c90448ec2645bb1958168c..c746af6def02af71df9b88c73b5c397007f36e27 100644 (file)
@@ -1,23 +1,30 @@
+VERSION='1.2.1'
+
 srcdir = '.'
 blddir = 'build'
 
+LIBREPLACE_DIR='../replace'
+
 def set_options(opt):
-    opt.recurse('../talloc')
+    opt.recurse(LIBREPLACE_DIR)
 
 def configure(conf):
-    conf.recurse('../talloc')
+    conf.sub_config(LIBREPLACE_DIR)
+    conf.SAMBA_CONFIG_H()
 
 def build(bld):
-    bld.recurse('../talloc')
+    bld.add_subdirs(LIBREPLACE_DIR)
 
-    COMMON_SOURCE = '''common/check.c common/error.c common/tdb.c common/traverse.c
-                       common/freelistcheck.c common/lock.c common/dump.c common/freelist.c
-                       common/io.c common/open.c  common/transaction.c'''
+    COMMON_SRC = bld.SUBDIR('common',
+                            '''check.c error.c tdb.c traverse.c
+                            freelistcheck.c lock.c dump.c freelist.c
+                            io.c open.c transaction.c''')
 
     bld.SAMBA_LIBRARY('tdb',
-                      COMMON_SOURCE,
-                      'replace talloc',
-                      'include')
+                      COMMON_SRC,
+                      libdeps='replace talloc',
+                      include_list='include',
+                      vnum=VERSION)
 
     bld.SAMBA_BINARY('tdbtorture',
                      'tools/tdbtorture.c',
diff --git a/lib/tevent/wscript b/lib/tevent/wscript
new file mode 100644 (file)
index 0000000..87d6037
--- /dev/null
@@ -0,0 +1,30 @@
+VERSION = '0.9.8'
+
+srcdir = '.'
+blddir = 'build'
+
+LIBREPLACE_DIR='../replace'
+
+def set_options(opt):
+    opt.recurse(LIBREPLACE_DIR)
+
+def configure(conf):
+    conf.sub_config(LIBREPLACE_DIR)
+
+    conf.CHECK_HEADERS('sys/epoll.h')
+    conf.CHECK_FUNCS('epoll_create')
+
+    conf.SAMBA_CONFIG_H()
+
+def build(bld):
+    bld.add_subdirs(LIBREPLACE_DIR)
+
+    SRC = '''tevent.c tevent_debug.c tevent_epoll.c tevent_fd.c tevent_immediate.c
+             tevent_queue.c tevent_req.c tevent_select.c
+             tevent_signal.c tevent_standard.c tevent_timed.c tevent_util.c tevent_wakeup.c'''
+
+
+    bld.SAMBA_LIBRARY('tevent',
+                      SRC,
+                      libdeps='replace talloc',
+                      vnum=VERSION)