diff options
author | Andrew Tridgell <tridge@samba.org> | 2010-03-24 12:56:30 +1100 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2010-04-06 20:27:04 +1000 |
commit | 7848344d55116e33b7f5a4bacce29eaab3fa99c9 (patch) | |
tree | 03a8fc1f9bfb5ebb70e8133516c915e2ed19ecda | |
parent | 3d5dda63e33283ac2762782fc921d469f2b3cda0 (diff) | |
download | samba-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-x | buildtools/testwaf.sh | 2 | ||||
-rw-r--r-- | buildtools/wafsamba/samba_autoconf.py | 3 | ||||
-rw-r--r-- | buildtools/wafsamba/wscript | 151 | ||||
-rw-r--r-- | lib/replace/wscript | 191 | ||||
-rw-r--r-- | source4/dynconfig/wscript | 1 | ||||
-rw-r--r-- | source4/wscript_build | 1 |
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() |