1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-27 03:21:53 +03:00
samba-mirror/buildtools/wafsamba/wscript
Stefan Metzmacher 3b8d9cd87e Revert "wafsamba: use -D_XOPEN_SOURCE=700 for the build"
This reverts commit 3408c942ab.

This seems to cause more problems than it tries to solve.

And Mac OS 10.4 doesn't need it anymore
(after commit bd6d76d776).

metze
2010-05-14 15:21:45 +02:00

292 lines
12 KiB
Python

#!/usr/bin/env python
# this is a base set of waf rules that everything else pulls in first
import sys, wafsamba, Configure
import Options, os, preproc
from samba_utils import *
from optparse import SUPPRESS_HELP
# this forces configure to be re-run if any of the configure
# sections of the build scripts change. We have to check
# for this in sys.argv as options have not yet been parsed when
# we need to set this. This is off by default until some issues
# are resolved related to WAFCACHE. It will need a lot of testing
# before it is enabled by default.
if '--enable-auto-reconfigure' in sys.argv:
Configure.autoconfig = True
def set_options(opt):
opt.tool_options('compiler_cc')
opt.tool_options('gnu_dirs')
gr = opt.option_group('library handling options')
gr.add_option('--bundled-libraries',
help=("comma separated list of bundled libraries. May include !LIBNAME to disable bundling a library. Can be 'NONE' or 'ALL' [auto]"),
action="store", dest='BUNDLED_LIBS', default='')
extension_default = Options.options['BUNDLED_EXTENSION_DEFAULT']
gr.add_option('--bundled-library-extension',
help=("name extension for bundled libraries [%s]" % extension_default),
action="store", dest='BUNDLED_EXTENSION', default=extension_default)
extension_exception = Options.options['BUNDLED_EXTENSION_EXCEPTION']
gr.add_option('--bundled-extension-exception',
help=("comman separated list of libraries to not apply extension to [%s]" % extension_exception),
action="store", dest='BUNDLED_EXTENSION_EXCEPTION', default=extension_exception)
builtin_defauilt = Options.options['BUILTIN_LIBRARIES_DEFAULT']
gr.add_option('--builtin-libraries',
help=("command separated list of libraries to build directly into binaries [%s]" % builtin_defauilt),
action="store", dest='BUILTIN_LIBRARIES', default=builtin_defauilt)
gr.add_option('--minimum-library-version',
help=("list of minimum system library versions (LIBNAME1:version,LIBNAME2:version)"),
action="store", dest='MINIMUM_LIBRARY_VERSION', default='')
gr.add_option('--disable-shared',
help=("Disable all use of shared libraries"),
action="store_true", dest='disable_shared', default=False)
gr.add_option('--disable-rpath',
help=("Disable use of rpath for build binaries"),
action="store_true", dest='disable_rpath_build', default=False)
gr.add_option('--disable-rpath-install',
help=("Disable use of rpath for installed binaries"),
action="store_true", dest='disable_rpath_install', default=False)
gr.add_option('--nonshared-binary',
help=("Disable use of shared libs for the listed binaries"),
action="store", dest='NONSHARED_BINARIES', default='')
opt.add_option('--with-modulesdir',
help=("modules directory [PREFIX/modules]"),
action="store", dest='MODULESDIR', default='${PREFIX}/modules')
gr = opt.option_group('developer options')
gr.add_option('-C',
help='enable configure cacheing',
action='store_true', dest='enable_configure_cache')
gr.add_option('--enable-auto-reconfigure',
help='enable automatic reconfigure on build',
action='store_true', dest='enable_auto_reconfigure')
gr.add_option('--enable-developer',
help=("Turn on developer warnings and debugging"),
action="store_true", dest='developer', default=False)
gr.add_option('--picky-developer',
help=("Treat all warnings as errors (enable -Werror)"),
action="store_true", dest='picky_developer', default=False)
gr.add_option('--fatal-errors',
help=("Stop compilation on first error (enable -Wfatal-errors)"),
action="store_true", dest='fatal_errors', default=False)
gr.add_option('--enable-gccdeps',
help=("Enable use of gcc -MD dependency module"),
action="store_true", dest='enable_gccdeps', default=False)
gr.add_option('--timestamp-dependencies',
help=("use file timestamps instead of content for build dependencies (BROKEN)"),
action="store_true", dest='timestamp_dependencies', default=False)
gr.add_option('--pedantic',
help=("Enable even more compiler warnings"),
action='store_true', dest='pedantic', default=False)
gr.add_option('--abi-check',
help=("Check ABI signatures for libraries"),
action='store_true', dest='ABI_CHECK', default=False)
gr.add_option('--abi-check-disable',
help=("Disable ABI checking (used with --enable-developer)"),
action='store_true', dest='ABI_CHECK_DISABLE', default=False)
gr.add_option('--abi-update',
help=("Update ABI signature files for libraries"),
action='store_true', dest='ABI_UPDATE', default=False)
gr = opt.add_option_group('cross compilation options')
gr.add_option('--cross-compile',
help=("configure for cross-compilation"),
action='store_true', dest='CROSS_COMPILE', default=False)
gr.add_option('--cross-execute',
help=("command prefix to use for cross-execution in configure"),
action='store', dest='CROSS_EXECUTE', default='')
gr.add_option('--cross-answers',
help=("answers to cross-compilation configuration (auto modified)"),
action='store', dest='CROSS_ANSWERS', default='')
gr.add_option('--hostcc',
help=("set host compiler when cross compiling"),
action='store', dest='HOSTCC', default=False)
# we use SUPPRESS_HELP for these, as they are ignored, and are there only
# to allow existing RPM spec files to work
opt.add_option('--build',
help=SUPPRESS_HELP,
action='store', dest='AUTOCONF_BUILD', default='')
opt.add_option('--host',
help=SUPPRESS_HELP,
action='store', dest='AUTOCONF_HOST', default='')
opt.add_option('--program-prefix',
help=SUPPRESS_HELP,
action='store', dest='AUTOCONF_PROGRAM_PREFIX', default='')
opt.add_option('--disable-dependency-tracking',
help=SUPPRESS_HELP,
action='store_true', dest='AUTOCONF_DISABLE_DEPENDENCY_TRACKING', 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('gnu_dirs')
conf.check_tool('wafsamba')
conf.CHECK_CC_ENV()
conf.check_tool('compiler_cc')
# we need git for 'waf dist'
conf.find_program('git', var='GIT')
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 or '${PREFIX}/lib'
conf.env.BINDIR = Options.options.BINDIR or '${PREFIX}/bin'
conf.env.SBINDIR = Options.options.SBINDIR or '${PREFIX}/sbin'
conf.env.MODULESDIR = Options.options.MODULESDIR
conf.env.BUNDLED_LIBS = Options.options.BUNDLED_LIBS.split(',')
conf.env.BUILTIN_LIBRARIES = Options.options.BUILTIN_LIBRARIES.split(',')
conf.env.DISABLE_SHARED = Options.options.disable_shared
conf.env.NONSHARED_BINARIES = Options.options.NONSHARED_BINARIES.split(',')
conf.env.BUNDLED_EXTENSION = Options.options.BUNDLED_EXTENSION
conf.env.BUNDLED_EXTENSION_EXCEPTION = Options.options.BUNDLED_EXTENSION_EXCEPTION.split(',')
conf.env.CROSS_COMPILE = Options.options.CROSS_COMPILE
conf.env.CROSS_EXECUTE = Options.options.CROSS_EXECUTE
conf.env.CROSS_ANSWERS = Options.options.CROSS_ANSWERS
conf.env.HOSTCC = Options.options.HOSTCC
conf.env.AUTOCONF_BUILD = Options.options.AUTOCONF_BUILD
conf.env.AUTOCONF_HOST = Options.options.AUTOCONF_HOST
conf.env.AUTOCONF_PROGRAM_PREFIX = Options.options.AUTOCONF_PROGRAM_PREFIX
if (conf.env.AUTOCONF_HOST and
conf.env.AUTOCONF_BUILD and
conf.env.AUTOCONF_BUILD != conf.env.AUTOCONF_HOST):
Logs.error('ERROR: Mismatch between --build and --host. Please use --cross-compile instead')
sys.exit(1)
if conf.env.AUTOCONF_PROGRAM_PREFIX:
Logs.error('ERROR: --program-prefix not supported')
sys.exit(1)
# enable ABI checking for developers
conf.env.ABI_CHECK = Options.options.ABI_CHECK or Options.options.developer
if Options.options.ABI_CHECK_DISABLE:
conf.env.ABI_CHECK = False
conf.CHECK_COMMAND(['uname', '-a'],
msg='Checking build system',
define='BUILD_SYSTEM',
on_target=False)
conf.CHECK_UNAME()
# see if we can compile and run a simple C program
conf.CHECK_CODE('printf("hello world")',
define='HAVE_SIMPLE_C_PROG',
mandatory=True,
execute=True,
headers='stdio.h',
msg='Checking simple C program')
# see if we can build shared libs
if not conf.CHECK_LIBRARY_SUPPORT():
conf.env.DISABLE_SHARED = True
# check for rpath
if not conf.env.DISABLE_SHARED and conf.CHECK_LIBRARY_SUPPORT(rpath=True):
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', testflags=True)
conf.CHECK_INLINE()
# 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)
conf.CHECK_HEADERS('limits.h assert.h')
# 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):
# give a more useful message if the source directory has moved
relpath = os_path_relpath(bld.curdir, bld.srcnode.abspath())
if relpath.find('../') != -1:
Logs.error('bld.curdir %s is not a child of %s' % (bld.curdir, bld.srcnode.abspath()))
raise Utils.WafError('''The top source directory has moved. Please run distclean and reconfigure''')
bld.CHECK_MAKEFLAGS()
bld.SETUP_BUILD_GROUPS()
bld.ENFORCE_GROUP_ORDERING()
bld.CHECK_PROJECT_RULES()