summaryrefslogtreecommitdiff
path: root/source4/build/scons
diff options
context:
space:
mode:
Diffstat (limited to 'source4/build/scons')
-rw-r--r--source4/build/scons/iconv.py75
-rw-r--r--source4/build/scons/pidl.py32
-rw-r--r--source4/build/scons/proto.py26
3 files changed, 133 insertions, 0 deletions
diff --git a/source4/build/scons/iconv.py b/source4/build/scons/iconv.py
new file mode 100644
index 0000000000..ef82dc475d
--- /dev/null
+++ b/source4/build/scons/iconv.py
@@ -0,0 +1,75 @@
+# Based on the M4 macro by Bruno Haible.
+
+def _CheckIconvPath(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 <stdlib.h>
+#include <giconv.h>
+""" + main, '.c')
+ if have_giconv_iconv:
+ context.Result(1)
+ return ("giconv.h", "")
+
+ have_iconv_iconv = context.TryLink("""
+#include <stdlib.h>
+#include <iconv.h>
+""" + main, '.c')
+
+ if have_iconv_iconv:
+ context.Result(1)
+ return ("iconv.h", "")
+
+ #FIXME: Add -lgiconv
+ have_giconv_lib_iconv = context.TryLink("""
+#include <stdlib.h>
+#include <giconv.h>
+""" + main, '.c')
+ if have_giconv_lib_iconv:
+ context.Result(1)
+ return ("giconv.h", "-lgiconv")
+
+ #FIXME: Add -liconv
+ have_iconv_lib_iconv = context.TryLink("""
+#include <stdlib.h>
+#include <iconv.h>
+"""+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(p) #FIXME: Handle return value
+
+ if context.TryRun("""
+#include <iconv.h>
+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
new file mode 100644
index 0000000000..c0c29d2035
--- /dev/null
+++ b/source4/build/scons/pidl.py
@@ -0,0 +1,32 @@
+"""SCons.Tool.pidl
+
+Tool-specific initialization for pidl (Perl-based IDL compiler)
+
+"""
+
+import SCons.Defaults
+import SCons.Scanner.IDL
+import SCons.Util
+
+idl_scanner = SCons.Scanner.IDL.IDLScan()
+
+pidl_builder = SCons.Builder.Builder(action='$PIDLCOM',
+ src_suffix = '.idl',
+ suffix='.c',
+ scanner = idl_scanner)
+
+def generate(env):
+ env['PIDL'] = 'pidl'
+ env['PIDLCPP'] = env['CPP']
+ env['PIDLFLAGS'] = []
+ env['PIDLCOM'] = 'CPP=$PIDLCPP $PIDL $PIDLFLAGS -- $SOURCE'
+ env['BUILDERS']['NdrMarshaller'] = pidl_builder
+
+def exists(env):
+ if (env.Detect('./pidl/pidl')):
+ return 1
+
+ if (env.Detect('pidl')):
+ return 1
+
+ return 0
diff --git a/source4/build/scons/proto.py b/source4/build/scons/proto.py
new file mode 100644
index 0000000000..6a53bfb4ab
--- /dev/null
+++ b/source4/build/scons/proto.py
@@ -0,0 +1,26 @@
+"""SCons.Tool.proto
+
+Tool-specific initialization for mkproto (C Proto File generator)
+
+"""
+
+import SCons.Defaults
+import SCons.Scanner.C
+import SCons.Util
+
+c_scanner = SCons.Scanner.C.CScan()
+
+proto_builder = SCons.Builder.Builder(action='$PROTOCOM',
+ src_suffix = '.idl',
+ suffix='.h',
+ scanner = c_scanner)
+
+def generate(env):
+ env['MKPROTO'] = './script/mkproto.sh'
+ env['PROTOCOM'] = '$MKPROTO "$PERL" -h _PROTO_H_ ${TARGETS[0]} $SOURCE'
+ env['BUILDERS']['ProtoHeader'] = proto_builder
+
+def exists(env):
+ return env.Detect('./script/mkproto.sh')
+
+