summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-03-24 12:56:30 +1100
committerAndrew Tridgell <tridge@samba.org>2010-04-06 20:27:04 +1000
commit7848344d55116e33b7f5a4bacce29eaab3fa99c9 (patch)
tree03a8fc1f9bfb5ebb70e8133516c915e2ed19ecda
parent3d5dda63e33283ac2762782fc921d469f2b3cda0 (diff)
downloadsamba-7848344d55116e33b7f5a4bacce29eaab3fa99c9.tar.gz
samba-7848344d55116e33b7f5a4bacce29eaab3fa99c9.tar.bz2
samba-7848344d55116e33b7f5a4bacce29eaab3fa99c9.zip
build: split out the base waf rules into buildtools/wafsamba/wscript
this stops lib/replace becoming a mess
-rwxr-xr-xbuildtools/testwaf.sh2
-rw-r--r--buildtools/wafsamba/samba_autoconf.py3
-rw-r--r--buildtools/wafsamba/wscript151
-rw-r--r--lib/replace/wscript191
-rw-r--r--source4/dynconfig/wscript1
-rw-r--r--source4/wscript_build1
6 files changed, 187 insertions, 162 deletions
diff --git a/buildtools/testwaf.sh b/buildtools/testwaf.sh
index f474456bf0..16c3198f08 100755
--- a/buildtools/testwaf.sh
+++ b/buildtools/testwaf.sh
@@ -10,7 +10,7 @@ for d in lib/replace lib/talloc lib/tevent lib/tdb source4/lib/ldb; do
pushd $d || exit 1
rm -rf bin
type waf
- waf configure --enable-developer --prefix=$PREFIX || exit 1
+ waf configure -C --enable-developer --prefix=$PREFIX || exit 1
time waf build || exit 1
time waf build || exit 1
waf install || exit 1
diff --git a/buildtools/wafsamba/samba_autoconf.py b/buildtools/wafsamba/samba_autoconf.py
index af09d72910..31106d7819 100644
--- a/buildtools/wafsamba/samba_autoconf.py
+++ b/buildtools/wafsamba/samba_autoconf.py
@@ -508,6 +508,9 @@ def SAMBA_CONFIG_H(conf, path=None):
conf.ADD_CFLAGS('-Wall -g -Wfatal-errors -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Werror-implicit-function-declaration -Wformat=2 -Wno-format-y2k',
testflags=True)
+ if Options.options.pedantic:
+ conf.ADD_CFLAGS('-W', testflags=True)
+
if path is None:
conf.write_config_header('config.h', top=True)
else:
diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript
new file mode 100644
index 0000000000..375c119070
--- /dev/null
+++ b/buildtools/wafsamba/wscript
@@ -0,0 +1,151 @@
+# this is a base set of waf rules that everything else pulls in first
+
+import sys, wafsamba
+import Options, os, preproc
+
+def set_options(opt):
+ opt.tool_options('compiler_cc')
+
+ opt.add_option('--libdir',
+ 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='${PREFIX}/bin')
+ opt.add_option('--sbindir',
+ help=("system admin executables [PREFIX/sbin]"),
+ action="store", dest='SBINDIR', default='${PREFIX}/sbin')
+ opt.add_option('--with-modulesdir',
+ help=("modules directory [PREFIX/modules]"),
+ action="store", dest='MODULESDIR', default='${PREFIX}/modules')
+ opt.add_option('--disable-shared',
+ help=("Disable all use of shared libraries"),
+ action="store_true", dest='disable_shared', default=False)
+ opt.add_option('--disable-rpath',
+ help=("Disable use of rpath for build binaries"),
+ action="store_true", dest='disable_rpath_build', default=False)
+ opt.add_option('--disable-rpath-install',
+ help=("Disable use of rpath for installed binaries"),
+ action="store_true", dest='disable_rpath_install', default=False)
+ opt.add_option('--enable-developer',
+ help=("Turn on developer warnings and debugging"),
+ action="store_true", dest='developer', default=False)
+ opt.add_option('--enable-gccdeps',
+ help=("Enable use gcc -MD dependency module"),
+ action="store_true", dest='enable_gccdeps', default=False)
+ opt.add_option('--timestamp-dependencies',
+ help=("use file timestamps instead of content for build dependencies (BROKEN)"),
+ action="store_true", dest='timestamp_dependencies', default=False)
+ opt.add_option('-C',
+ help='enable configure cacheing',
+ action='store_true', dest='enable_configure_cache')
+ opt.add_option('--pedantic',
+ help=("Enable even more compiler warnings"),
+ action='store_true', dest='pedantic', default=False)
+
+@wafsamba.runonce
+def configure(conf):
+ conf.env.hlist = []
+ conf.env.srcdir = conf.srcdir
+
+ if Options.options.timestamp_dependencies:
+ conf.ENABLE_TIMESTAMP_DEPENDENCIES()
+
+ conf.SETUP_CONFIGURE_CACHE(Options.options.enable_configure_cache)
+
+ # load our local waf extensions
+ conf.check_tool('wafsamba')
+
+ conf.CHECK_CC_ENV()
+
+ conf.check_tool('compiler_cc')
+
+ if Options.options.enable_gccdeps:
+ # don't enable gccdeps by default as it needs a very recent version gcc
+ conf.check_tool('gccdeps', tooldir=conf.srcdir + "/buildtools/wafsamba")
+
+ # 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.MODULESDIR = Options.options.MODULESDIR
+
+ conf.env.DISABLE_SHARED = Options.options.disable_shared
+
+ # see if we can compile and run a simple C program
+ conf.CHECK_CODE('printf("hello world\\n")',
+ define='HAVE_SIMPLE_C_PROG',
+ mandatory=True,
+ execute=True,
+ headers='stdio.h',
+ 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
+ conf.env.RPATH_ON_INSTALL = (conf.env.RPATH_ON_BUILD and
+ not Options.options.disable_rpath_install)
+ else:
+ conf.env.RPATH_ON_INSTALL = False
+ conf.env.RPATH_ON_BUILD = False
+
+ # we should use the PIC options in waf instead
+ conf.ADD_CFLAGS('-fPIC')
+
+ # check for pkgconfig
+ conf.check_cfg(atleast_pkgconfig_version='0.0.0')
+
+ conf.DEFINE('_GNU_SOURCE', 1, add_to_cflags=True)
+ conf.DEFINE('_XOPEN_SOURCE_EXTENDED', 1, add_to_cflags=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()
+
+ if 'HAVE_STDDEF_H' in conf.env and 'HAVE_STDLIB_H' in conf.env:
+ conf.DEFINE('STDC_HEADERS', 1)
+
+ conf.CHECK_HEADERS('sys/time.h time.h', together=True)
+
+ if 'HAVE_SYS_TIME_H' in conf.env and 'HAVE_TIME_H' in conf.env:
+ conf.DEFINE('TIME_WITH_SYS_TIME', 1)
+
+ conf.define('SHLIBEXT', "so", quote=True)
+
+ conf.CHECK_CODE('long one = 1; return ((char *)(&one))[0]',
+ execute=True,
+ define='WORDS_BIGENDIAN')
+
+ # check if signal() takes a void function
+ if conf.CHECK_CODE('return *(signal (0, 0)) (0) == 1',
+ define='RETSIGTYPE_INT',
+ execute=False,
+ headers='signal.h',
+ msg='Checking if signal handlers return int'):
+ conf.DEFINE('RETSIGTYPE', 'int')
+ else:
+ conf.DEFINE('RETSIGTYPE', 'void')
+
+ conf.CHECK_VARIABLE('__FUNCTION__', define='HAVE_FUNCTION_MACRO')
+
+ conf.CHECK_CODE('va_list ap1,ap2; va_copy(ap1,ap2)',
+ define="HAVE_VA_COPY",
+ msg="Checking for va_copy")
+
+ conf.CHECK_CODE('''
+ #define eprintf(...) fprintf(stderr, __VA_ARGS__)
+ eprintf("bla", "bar")
+ ''', define='HAVE__VA_ARGS__MACRO')
+
+ conf.SAMBA_BUILD_ENV()
+
+
+def build(bld):
+ bld.SETUP_BUILD_GROUPS()
+ bld.ENFORCE_GROUP_ORDERING()
+ bld.CHECK_PROJECT_RULES()
diff --git a/lib/replace/wscript b/lib/replace/wscript
index 483d60559d..e457c5f845 100644
--- a/lib/replace/wscript
+++ b/lib/replace/wscript
@@ -1,5 +1,3 @@
-#! /usr/bin/env python
-
srcdir = '../..'
blddir = 'bin'
@@ -9,106 +7,14 @@ import wafsamba
import Options, os, preproc
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='${PREFIX}/lib')
- opt.add_option('--bindir',
- help=("user executables [PREFIX/bin]"),
- action="store", dest='BINDIR', default='${PREFIX}/bin')
- opt.add_option('--sbindir',
- help=("system admin executables [PREFIX/sbin]"),
- action="store", dest='SBINDIR', default='${PREFIX}/sbin')
- opt.add_option('--disable-shared',
- help=("Disable all use of shared libraries"),
- action="store_true", dest='disable_shared', default=False)
- opt.add_option('--disable-rpath',
- help=("Disable use of rpath for build binaries"),
- action="store_true", dest='disable_rpath_build', default=False)
- opt.add_option('--disable-rpath-install',
- help=("Disable use of rpath for installed binaries"),
- action="store_true", dest='disable_rpath_install', default=False)
- opt.add_option('--enable-developer',
- help=("Turn on developer warnings and debugging"),
- action="store_true", dest='developer', default=False)
- opt.add_option('--enable-gccdeps',
- help=("Enable use gcc -MD dependency module"),
- action="store_true", dest='enable_gccdeps', default=False)
- opt.add_option('--timestamp-dependencies',
- help=("use file timestamps instead of content for build dependencies (BROKEN)"),
- action="store_true", dest='timestamp_dependencies', default=False)
- opt.add_option('-C',
- help='enable configure cacheing',
- action='store_true', dest='enable_configure_cache')
- opt.add_option('--pedantic',
- help=("Enable even more compiler warnings"),
- action='store_true', dest='pedantic', default=False)
+ opt.recurse('../../buildtools/wafsamba')
@wafsamba.runonce
def configure(conf):
- conf.env.hlist = []
- conf.env.srcdir = conf.srcdir
-
- if Options.options.timestamp_dependencies:
- conf.ENABLE_TIMESTAMP_DEPENDENCIES()
-
- conf.SETUP_CONFIGURE_CACHE(Options.options.enable_configure_cache)
-
- # load our local waf extensions
- conf.check_tool('wafsamba', tooldir=conf.srcdir + "/buildtools/wafsamba")
-
- conf.CHECK_CC_ENV()
-
- conf.check_tool('compiler_cc')
+ conf.sub_config('../../buildtools/wafsamba')
- if Options.options.enable_gccdeps:
- # don't enable gccdeps by default as it needs a very recent version gcc
- conf.check_tool('gccdeps', tooldir=conf.srcdir + "/buildtools/wafsamba")
-
- # 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.DISABLE_SHARED = Options.options.disable_shared
-
- # see if we can compile and run a simple C program
- conf.CHECK_CODE('#include "test/simple.c"\n',
- addmain=False,
- define='HAVE_SIMPLE_C_PROG',
- mandatory=True,
- 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
- conf.env.RPATH_ON_INSTALL = (conf.env.RPATH_ON_BUILD and
- not Options.options.disable_rpath_install)
- else:
- conf.env.RPATH_ON_INSTALL = False
- conf.env.RPATH_ON_BUILD = False
-
- # we should use the PIC options in waf instead
- conf.ADD_CFLAGS('-fPIC')
-
- # check for pkgconfig
- conf.check_cfg(atleast_pkgconfig_version='0.0.0')
-
- conf.DEFINE('_GNU_SOURCE', 1, add_to_cflags=True)
- conf.DEFINE('_XOPEN_SOURCE_EXTENDED', 1, add_to_cflags=True)
conf.DEFINE('LIBREPLACE_NETWORK_CHECKS', 1)
- # 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')
@@ -121,7 +27,7 @@ def configure(conf):
conf.CHECK_HEADERS('sys/vfs.h sys/xattr.h termio.h termios.h')
conf.CHECK_HEADERS('sys/wait.h sys/stat.h malloc.h grp.h')
conf.CHECK_HEADERS('sys/select.h setjmp.h utime.h sys/syslog.h syslog.h')
- conf.CHECK_HEADERS('sys/time.h time.h stdarg.h vararg.h sys/mount.h mntent.h')
+ conf.CHECK_HEADERS('stdarg.h vararg.h sys/mount.h mntent.h')
conf.CHECK_HEADERS('stropts.h unix.h string.h strings.h sys/param.h limits.h')
conf.CHECK_HEADERS('''sys/socket.h netinet/in.h netdb.h arpa/inet.h netinet/in_systm.h
netinet/ip.h netinet/tcp.h netinet/in_ip.h
@@ -143,14 +49,6 @@ def configure(conf):
conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h')
conf.CHECK_HEADERS('syscall.h sys/syscall.h inttypes.h')
- if 'HAVE_STDDEF_H' in conf.env and 'HAVE_STDLIB_H' in conf.env:
- conf.DEFINE('STDC_HEADERS', 1)
-
- if 'HAVE_SYS_TIME_H' in conf.env and 'HAVE_TIME_H' in conf.env:
- conf.DEFINE('TIME_WITH_SYS_TIME', 1)
-
- conf.define('SHLIBEXT', "so", quote=True)
-
conf.CHECK_TYPES('"long long" intptr_t uintptr_t ptrdiff_t')
conf.CHECK_TYPES('comparison_fn_t bool')
conf.CHECK_TYPE('_Bool', define='HAVE__Bool')
@@ -171,11 +69,6 @@ def configure(conf):
conf.CHECK_TYPE('volatile int', define='HAVE_VOLATILE')
conf.CHECK_TYPE('uint_t', 'unsigned int')
- conf.CHECK_CODE('long one = 1; return ((char *)(&one))[0]',
- execute=True,
- define='WORDS_BIGENDIAN')
-
-
conf.CHECK_TYPES('socklen_t', headers='sys/socket.h')
conf.CHECK_TYPE_IN('struct ifaddrs', 'ifaddrs.h')
conf.CHECK_TYPE_IN('struct addrinfo', 'netdb.h')
@@ -208,12 +101,6 @@ def configure(conf):
lib='nsl socket',
headers='sys/socket.h netdb.h netinet/in.h')
- # check if signal() takes a void function
- if conf.CHECK_CODE('return *(signal (0, 0)) (0) == 1', define='RETSIGTYPE_INT', msg='Checking return type of signal handlers'):
- conf.DEFINE('RETSIGTYPE', 'int')
- else:
- conf.DEFINE('RETSIGTYPE', 'void')
-
# these may be builtins, so we need the link=False strategy
conf.CHECK_FUNCS('strdup memmem printf memset memcpy memmove strcpy strncpy bzero', link=False)
@@ -252,8 +139,6 @@ def configure(conf):
conf.CHECK_VARIABLE('rl_event_hook', define='HAVE_DECL_RL_EVENT_HOOK', always=True,
headers='readline.h readline/readline.h readline/history.h')
- conf.CHECK_VARIABLE('__FUNCTION__', define='HAVE_FUNCTION_MACRO')
-
conf.CHECK_DECLS('snprintf vsnprintf asprintf vasprintf')
conf.CHECK_DECLS('dirfd', reverse=True, headers='dirent.h')
@@ -275,17 +160,6 @@ def configure(conf):
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")
-
- conf.CHECK_CODE('''
- #define eprintf(...) fprintf(stderr, __VA_ARGS__)
- eprintf("bla", "bar")
- ''', define='HAVE__VA_ARGS__MACRO')
-
conf.CHECK_CODE('gettimeofday(NULL, NULL)', 'HAVE_GETTIMEOFDAY_TZ', execute=False)
conf.CHECK_CODE('#include "test/snprintf.c"',
@@ -294,32 +168,8 @@ def configure(conf):
addmain=False,
msg="Checking for C99 vsnprintf")
- if Options.options.pedantic and conf.CHECK_CFLAGS('-W'):
- conf.ADD_CFLAGS('-W')
-
- conf.SAMBA_CONFIG_H()
conf.SAMBA_BUILD_ENV()
- # look for a method of finding the list of network interfaces
- for method in ['HAVE_IFACE_GETIFADDRS', 'HAVE_IFACE_AIX', 'HAVE_IFACE_IFCONF', 'HAVE_IFACE_IFREQ']:
- if conf.CHECK_CODE('''
- #define %s 1
- #define NO_CONFIG_H 1
- #define AUTOCONF_TEST 1
- #define SOCKET_WRAPPER_NOT_REPLACE
- #include "replace.c"
- #include "inet_ntop.c"
- #include "snprintf.c"
- #include "getifaddrs.c"
- #define getifaddrs_test main
- #include "test/getifaddrs.c"
- ''' % method,
- method,
- lib='nsl socket',
- addmain=False,
- execute=True):
- break
-
conf.CHECK_CODE('''
typedef struct {unsigned x;} FOOBAR;
#define X_FOOBAR(x) ((FOOBAR) { x })
@@ -383,6 +233,33 @@ def configure(conf):
cflags=conf.env.VISIBILITY_CFLAGS,
define='HAVE_VISIBILITY_ATTR')
+ 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)
+
+
+ # look for a method of finding the list of network interfaces
+ for method in ['HAVE_IFACE_GETIFADDRS', 'HAVE_IFACE_AIX', 'HAVE_IFACE_IFCONF', 'HAVE_IFACE_IFREQ']:
+ if conf.CHECK_CODE('''
+ #define %s 1
+ #define NO_CONFIG_H 1
+ #define AUTOCONF_TEST 1
+ #define SOCKET_WRAPPER_NOT_REPLACE
+ #include "replace.c"
+ #include "inet_ntop.c"
+ #include "snprintf.c"
+ #include "getifaddrs.c"
+ #define getifaddrs_test main
+ #include "test/getifaddrs.c"
+ ''' % method,
+ method,
+ lib='nsl socket',
+ addmain=False,
+ execute=True):
+ break
+
if conf.CHECK_FUNCS('getpass getpassphrase'):
# if we have both, then we prefer getpassphrase
conf.DEFINE('REPLACE_GETPASS_BY_GETPASSPHRASE', 1)
@@ -395,13 +272,11 @@ def configure(conf):
cflags='-DNO_CONFIG_H')
conf.sub_config('system')
+ conf.SAMBA_CONFIG_H()
def build(bld):
- # 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()
+ bld.BUILD_SUBDIR('../../buildtools/wafsamba')
REPLACE_SOURCE = 'replace.c snprintf.c'
@@ -443,5 +318,3 @@ def build(bld):
bld.SAMBA_SUBSYSTEM('LIBREPLACE_GETPASS', 'getpass.c',
enabled=bld.CONFIG_SET('REPLACE_GETPASS'))
-
- bld.CHECK_PROJECT_RULES()
diff --git a/source4/dynconfig/wscript b/source4/dynconfig/wscript
index 4fa8fd332f..3b64503677 100644
--- a/source4/dynconfig/wscript
+++ b/source4/dynconfig/wscript
@@ -3,7 +3,6 @@ import string, Utils, Options
# 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'],
diff --git a/source4/wscript_build b/source4/wscript_build
index 35af55fe24..b5f80e2bcd 100644
--- a/source4/wscript_build
+++ b/source4/wscript_build
@@ -118,5 +118,4 @@ bld.BUILD_SUBDIR('heimdal_build')
bld.BUILD_SUBDIR('lib/smbreadline')
bld.BUILD_SUBDIR('../codepages')
-bld.ENFORCE_GROUP_ORDERING()