s3-waf: added build subdir for dynconfig generation
authorAndrew Tridgell <tridge@samba.org>
Wed, 24 Mar 2010 00:26:49 +0000 (18:26 -0600)
committerAndrew Tridgell <tridge@samba.org>
Tue, 6 Apr 2010 10:27:04 +0000 (20:27 +1000)
source3/build/dynconfig.py [new file with mode: 0644]
source3/build/wscript [new file with mode: 0644]
source3/wscript

diff --git a/source3/build/dynconfig.py b/source3/build/dynconfig.py
new file mode 100644 (file)
index 0000000..e7f5202
--- /dev/null
@@ -0,0 +1,62 @@
+import string, Utils
+
+# list of directory options to offer in configure
+dir_options = {
+    'with-piddir'                         : [ '${PREFIX}/var/run', 'where to put pid files' ],
+    'with-modulesdir'                     : [ '${PREFIX}/modules', 'Where to put dynamically loadable modules' ],
+    'with-privatedir'                     : [ '${PREFIX}/private', 'Where to put sam.ldb and other private files' ],
+    'with-winbindd-socket-dir'            : [ '${PREFIX}/var/lib/winbindd', 'winbind socket directory' ],
+    'with-winbindd-privileged-socket-dir' : [ '${PREFIX}/var/lib/winbindd_privileged', 'winbind privileged socket directory'],
+    'with-ntp-signd-socket-dir'           : [ '${PREFIX}/var/run/ntp_signd', 'NTP signed directory'],
+    'with-lockdir'                        : [ '${PREFIX}/var/locks', 'where to put lock files' ],
+    'with-codepagedir'                    : [ '${PREFIX}/lib/samba', 'where to put codepages' ],
+    'with-privatedir'                     : [ '${PREFIX}/private', 'where to put smbpasswd' ],
+    'with-cachedir'                       : [ '${PREFIX}/var/locks', 'where to put temporary cache files' ]
+    }
+
+# list of cflags to use for dynconfig.c
+dyn_cflags = {
+    'CONFIGFILE'                     : '${SYSCONFDIR}/smb.conf',
+    'BINDIR'                         : '${BINDIR}',
+    'SBINDIR'                        : '${SBINDIR}',
+    'LIBDIR'                         : '${LIBDIR}',
+    'STATEDIR'                       : '${LOCALSTATEDIR}',
+    'LMHOSTSFILE'                    : '${SYSCONFDIR}/lmhosts',
+    'LOCKDIR'                        : '${LOCALSTATEDIR}/locks',
+    'PIDDIR'                         : '${LOCALSTATEDIR}/run',
+    'DATADIR'                        : '${DATADIR}',
+    'LOGFILEBASE'                    : '${LOCALSTATEDIR}',
+    'CONFIGDIR'                      : '${SYSCONFDIR}',
+    'NCALRPCDIR'                     : '${LOCALSTATEDIR}/ncalrpc',
+    'SWATDIR'                        : '${DATADIR}/swat',
+    'PRIVATE_DIR'                    : '${PRIVATEDIR}',
+    'MODULESDIR'                     : '${PREFIX}/modules',
+    'SETUPDIR'                       : '${DATADIR}/setup',
+    'WINBINDD_PRIVILEGED_SOCKET_DIR' : '${WINBINDD_PRIVILEGED_SOCKET_DIR}',
+    'WINBINDD_SOCKET_DIR'            : '${WINBINDD_SOCKET_DIR}',
+    'NTP_SIGND_SOCKET_DIR'           : '${NTP_SIGND_SOCKET_DIR}',
+    'CODEPAGEDIR'                    : '${CODEPAGEDIR}',
+    'CACHEDIR'                       : '${CACHEDIR}',
+    'SMB_PASSWD_FILE'                : '${PRIVATEDIR}/smbpasswd',
+    }
+
+def get_varname(v):
+    '''work out a variable name from a configure option name'''
+    if v.startswith('with-'):
+        v = v[5:]
+    v = v.upper()
+    v = string.replace(v, '-', '_')
+    return v
+
+
+def dynconfig_cflags(bld):
+    '''work out the extra CFLAGS for dynconfig.c'''
+    cflags = []
+    for f in dyn_cflags.keys():
+        # substitute twice, as we could have substitutions containing variables
+        v = Utils.subst_vars(dyn_cflags[f], bld.env)
+        v = Utils.subst_vars(v, bld.env)
+        bld.ASSERT(v != '', "Empty dynconfig value for %s" % f)
+        bld.ASSERT(v.find('${') == -1, "Unsubstituted variable in %s : %s : %s" % (f, dyn_cflags[f], v))
+        cflags.append('-D%s="%s"' % (f, v))
+    return cflags
diff --git a/source3/build/wscript b/source3/build/wscript
new file mode 100644 (file)
index 0000000..67c6dc7
--- /dev/null
@@ -0,0 +1,30 @@
+import Options
+from dynconfig import *
+
+def set_options(opt):
+    # get all the basic GNU options from the gnu_dirs tool
+    opt.tool_options('gnu_dirs')
+    for option in dir_options.keys():
+        default = dir_options[option][0]
+        help    = dir_options[option][1]
+        varname = get_varname(option)
+        opt.add_option('--%s' % option,
+                       help=(help + ' [%s]' % default),
+                       action="store", dest=varname, default=default)
+
+def configure(conf):
+    # get all the basic GNU options from the gnu_dirs tool
+    conf.check_tool('gnu_dirs')
+    for option in dir_options.keys():
+        varname = get_varname(option)
+        value = getattr(Options.options, varname, None)
+        conf.ASSERT(value is not None, "Missing configure option %s" % varname)
+        conf.ASSERT(varname not in conf.env, "Variable %s already defined" % varname)
+        conf.env[varname] = value
+
+def build(bld):
+    cflags = dynconfig_cflags(bld)
+    bld.SAMBA_SUBSYSTEM('DYNCONFIG',
+                        '../dynconfig.c',
+                        deps='replace talloc tdb',
+                        cflags=cflags)
index 4f9fe7e3a8fbb771048632d91594d2c57fc51dc0..2047fdd6caf18d6db164cb22e967cfea775f884b 100644 (file)
@@ -9,6 +9,7 @@ import wafsamba, Options
 
 def set_options(opt):
     opt.recurse('../lib/replace')
+    opt.recurse('build')
     opt.recurse('../lib/nss_wrapper')
     opt.recurse('../lib/socket_wrapper')
     opt.recurse('../lib/uid_wrapper')
@@ -33,6 +34,10 @@ def configure(conf):
     conf.ADD_EXTRA_INCLUDES('#source3 #source3/include #lib/replace #lib/talloc #lib/tevent #source3/libaddns #source3/librpc')
 
     conf.sub_config('../lib/replace')
+    conf.sub_config('build')
+    conf.sub_config('../lib/tdb')
+    conf.sub_config('../lib/talloc')
+    conf.sub_config('../lib/tevent')
     conf.sub_config('../lib/nss_wrapper')
     conf.sub_config('../lib/socket_wrapper')
     conf.sub_config('../lib/uid_wrapper')