From 4be0ae794e4af2354d678fddd7bf1e822ffa9148 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 23 Sep 2005 16:32:52 +0000 Subject: r10456: More SCons fixes: - Add framework for fallback generating code - Move pread / pwrite replacement functions to libreplace - Support pidl builds correctly - Support asn1 builds correctly - Move OS-specific checks to lib/replace/SConscript (This used to be commit fbbfad0a1f7dedbf48e835a864f8285f283d72f3) --- source4/build/m4/rewrite.m4 | 5 +-- source4/build/scons/asn1.py | 9 +++-- source4/build/scons/fallback.py | 34 +++++++++++++++++ source4/build/scons/iconv.py | 81 ----------------------------------------- source4/build/scons/pidl.py | 30 ++++++++++++--- 5 files changed, 65 insertions(+), 94 deletions(-) create mode 100644 source4/build/scons/fallback.py delete mode 100644 source4/build/scons/iconv.py (limited to 'source4/build') diff --git a/source4/build/m4/rewrite.m4 b/source4/build/m4/rewrite.m4 index 8d72d852f4..9a61d2add0 100644 --- a/source4/build/m4/rewrite.m4 +++ b/source4/build/m4/rewrite.m4 @@ -102,7 +102,7 @@ AC_FUNC_MEMCMP AC_CHECK_FUNCS(setsid pipe crypt16 getauthuid) AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction) AC_CHECK_FUNCS(setgroups sysconf getpwanam srandom random srand rand usleep) -AC_CHECK_FUNCS(backtrace setbuffer pread pwrite) +AC_CHECK_FUNCS(backtrace setbuffer) # Assume non-shared by default and override below BLDSHARED="false" @@ -393,9 +393,6 @@ if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes]) fi - - - AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[ AC_TRY_COMPILE([#include #include ], diff --git a/source4/build/scons/asn1.py b/source4/build/scons/asn1.py index f0068e20dd..b8b7073151 100644 --- a/source4/build/scons/asn1.py +++ b/source4/build/scons/asn1.py @@ -17,17 +17,20 @@ def asn1_emitter(target,source,env): contents = node.get_contents() for j in output_re.findall(contents): targets.append(str(node.get_dir()) + '/asn1_' + j + '.c') + targets.append("%s/%s.h" % (str(node.get_dir()), env['ASN1PREFIX'])) return targets, source asn1_builder = SCons.Builder.Builder(action='$ASN1COM', src_suffix = '.asn1', suffix='.c', + single_source=True, emitter = asn1_emitter) def generate(env): - env['ASN1'] = './bin/asn1_compile' - env['ASN1COM'] = '$ASN1 $SOURCE' - env['BUILDERS']['ASN1'] = asn1_builder + env['ASN1'] = './bin/asn1_compile' + env['ASN1PREFIX'] = 'asn1' + env['ASN1COM'] = 'cd ${SOURCE.dir} && $ASN1 $ASN1PREFIX ${SOURCE.file}' + env['BUILDERS']['ASN1'] = asn1_builder def exists(env): return env.Detect('asn1_compile') diff --git a/source4/build/scons/fallback.py b/source4/build/scons/fallback.py new file mode 100644 index 0000000000..d8db9ec268 --- /dev/null +++ b/source4/build/scons/fallback.py @@ -0,0 +1,34 @@ +# Generate fallback configure + Makefile +# Copyright (C) 2005 Jelmer Vernooij + +# No support for: +# - cross-compilation +# - caching +# - config.status (?) + +import SCons.Defaults +import SCons.Util +import SCons.Tool + +# Configure structure: +# - Check for available tools first +# - Check for available tool capabilities (C99, volatile, etc) +# - Check for available `base' headers +# - Check for available types +# - Check for libs / headers +def configure_builder(target, source, env): + pass + +# Makefile structure: +# - Declare all variables first +# - Declare targets + dependencies + actions + +def makefile_builder(target, source, env): + pass + +def generate(env): + env['BUILDERS']['ConfigureScript'] = configure_builder + env['BUILDERS']['MakefileIn'] = makefile_in_builder + +def exists(env): + return 1 diff --git a/source4/build/scons/iconv.py b/source4/build/scons/iconv.py deleted file mode 100644 index 940e2d814d..0000000000 --- a/source4/build/scons/iconv.py +++ /dev/null @@ -1,81 +0,0 @@ -# Based on the M4 macro by Bruno Haible. - -def exists(env): - return True - -def generate(env): - env['custom_tests']['CheckIconv'] = CheckIconv - -def _CheckIconvPath(context,path): - # Some systems have iconv in libc, some have it in libiconv (OSF/1 and - # those with the standalone portable libiconv installed). - context.Message("checking for iconv in " + path) - - main = """ -int main() -{ - iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - return 0; -}""" - - have_giconv_iconv = context.TryLink(""" -#include -#include -""" + main, '.c') - if have_giconv_iconv: - context.Result(1) - return ("giconv.h", "") - - have_iconv_iconv = context.TryLink(""" -#include -#include -""" + main, '.c') - - if have_iconv_iconv: - context.Result(1) - return ("iconv.h", "") - - #FIXME: Add -lgiconv - have_giconv_lib_iconv = context.TryLink(""" -#include -#include -""" + main, '.c') - if have_giconv_lib_iconv: - context.Result(1) - return ("giconv.h", "-lgiconv") - - #FIXME: Add -liconv - have_iconv_lib_iconv = context.TryLink(""" -#include -#include -"""+main,'.c') - - if have_iconv_lib_iconv: - context.Result(1) - return ("iconv.h", "-liconv") - - return None - -def CheckIconv(context): - context.Message("checking for iconv") - - look_dirs = ['/usr','/usr/local','/sw'] - - for p in look_dirs: - _CheckIconvPath(context,p) #FIXME: Handle return value - - if context.TryRun(""" -#include -main() { - iconv_t cd = iconv_open("ASCII", "UCS-2LE"); - if (cd == 0 || cd == (iconv_t)-1) return -1; - return 0; -} -""", '.c'): - context.Result(1) - return (1,[]) - - context.Result(0) - return (0,[]) diff --git a/source4/build/scons/pidl.py b/source4/build/scons/pidl.py index b29584c756..0c5c16b0b5 100644 --- a/source4/build/scons/pidl.py +++ b/source4/build/scons/pidl.py @@ -10,7 +10,7 @@ import SCons.Scanner idl_scanner = SCons.Scanner.ClassicCPP("PIDLScan", '.idl', 'CPPPATH', r'depends\(([^,]+),+\)', SCons.Node.FS.default_fs) -def idl_emitter(target, source, env): +def ndr_emitter(target, source, env): result = [] for s in source: base, ext = SCons.Util.splitext(str(s).split('/')[-1]) @@ -19,16 +19,34 @@ def idl_emitter(target, source, env): result.append('gen_ndr/%s.h' % base) return result, source -pidl_builder = SCons.Builder.Builder(action='$PIDLCOM', - emitter = idl_emitter, +ndr_builder = SCons.Builder.Builder(action='$NDRCOM', + emitter = ndr_emitter, src_suffix = '.idl', scanner = idl_scanner) +def tdr_emitter(target, source, env): + result = [] + for s in source: + base, ext = SCons.Util.splitext(str(s).split('/')[-1]) + result.append('%s/tdr_%s.c' % (s.get_dir(), base)) + result.append('%s/tdr_%s.h' % (s.get_dir(), base)) + result.append('%s/%s.h' % (s.get_dir(), base)) + return result, source + +tdr_builder = SCons.Builder.Builder(action='$TDRCOM', + emitter = tdr_emitter, + src_suffix = '.idl', + single_source = True, + scanner = idl_scanner) + def generate(env): env['PIDL'] = env.Detect(['./pidl/pidl', 'pidl']) - env['PIDLFLAGS'] = ['--outputdir', 'librpc/gen_ndr', '--ndr-header', '--ndr-parser', '--header'] - env['PIDLCOM'] = '$PIDL $PIDLFLAGS -- $SOURCE' - env['BUILDERS']['NdrMarshaller'] = pidl_builder + env['NDRFLAGS'] = ['--outputdir', 'librpc/gen_ndr','--ndr-header', '--ndr-parser','--header'] + env['TDRFLAGS'] = ['--tdr-parser', '--tdr-header','--header'] + env['NDRCOM'] = '$PIDL $NDRFLAGS -- $SOURCES' + env['TDRCOM'] = 'cd ${SOURCE.dir} && $PIDL $TDRFLAGS -- ${SOURCE.file}' + env['BUILDERS']['NdrMarshaller'] = ndr_builder + env['BUILDERS']['TdrMarshaller'] = tdr_builder def exists(env): return env.Detect(['./pidl/pidl','pidl']) -- cgit