summaryrefslogtreecommitdiff
path: root/source4/build/pidl/test.pm
diff options
context:
space:
mode:
Diffstat (limited to 'source4/build/pidl/test.pm')
-rw-r--r--source4/build/pidl/test.pm128
1 files changed, 128 insertions, 0 deletions
diff --git a/source4/build/pidl/test.pm b/source4/build/pidl/test.pm
new file mode 100644
index 0000000000..ba86d8eb10
--- /dev/null
+++ b/source4/build/pidl/test.pm
@@ -0,0 +1,128 @@
+# Simple system for running tests against pidl
+# (C) 2005 Jelmer Vernooij <jelmer@samba.org>
+# Published under the GNU General Public License
+
+package Test;
+
+use strict;
+use util;
+
+my $idl_path = "./build/pidl/pidl.pl";
+
+sub generate_cfile($$$)
+{
+ my ($filename, $fragment, $incfiles) = @_;
+
+ unless (open (OUT, ">$filename")) {
+ print STDERR "Unable to open $filename\n";
+ return -1;
+ }
+ print OUT '
+/* This file was autogenerated. All changes made will be lost! */
+#include "include/includes.h"
+ ';
+
+ foreach (@$incfiles) {
+ print OUT "#include \"$_\"\n";
+ }
+
+ print OUT '
+int main(int argc, char **argv)
+{
+ TALLOC_CTX *mem_ctx = talloc_init(NULL);
+ int ndr_flags = 0;
+ ';
+ print OUT $fragment;
+ print OUT "\treturn 0;\n}\n";
+ close OUT;
+
+ return 0;
+}
+
+sub generate_idlfile($$)
+{
+ my ($filename,$fragment) = @_;
+
+ unless (open(OUT, ">$filename")) {
+ print STDERR "Unable to open $filename\n";
+ return -1;
+ }
+
+ print OUT '
+[uuid("1-2-3-4-5")] interface test_if
+{
+';
+ print OUT $fragment;
+ print OUT "\n}\n";
+ close OUT;
+
+ return 0;
+}
+
+sub compile_idl($$)
+{
+ my ($filename,$idlargs) = @_;
+
+ my @args = @$idlargs;
+ push (@args, $filename);
+
+ unless (system($idl_path, @args) == 0) {
+ print STDERR "Error compiling IDL file $filename: $!\n";
+ return -1;
+ }
+}
+
+sub compile_cfile($)
+{
+ my ($filename) = @_;
+
+ print "Compiling C file $filename\n";
+
+ return system("cc", '-I.', '-Iinclude', '-c', $filename);
+}
+
+sub link_files($$)
+{
+ my ($exe_name,$objs) = @_;
+
+ return system("cc", '-I.', '-Iinclude', '-Lbin', '-lrpc', '-o', $exe_name, @$objs);
+}
+
+sub test_idl($$$$)
+{
+ my ($name,$settings,$idl,$c) = @_;
+
+ $| = 1;
+
+ print "Running test $name... ";
+
+ my $c_filename = $name."_test.c";
+ my $idl_filename = $name."_idl.idl";
+ my $exe_filename = $name."_exe";
+
+ return -1 if (generate_cfile($c_filename, $c, $settings->{IncludeFiles}) == -1);
+
+ return -1 if (generate_idlfile($idl_filename, $idl) == -1);
+
+ return -1 if (compile_idl($idl_filename, $settings->{'IDL-Arguments'}) == -1);
+
+ my @srcs = ($c_filename);
+ push (@srcs, @{$settings->{'ExtraFiles'}});
+
+# foreach (@srcs) {
+# return -1 if (compile_cfile($_) == -1);
+# }
+
+ return -1 if (link_files($exe_filename, \@srcs) == -1);
+
+ my $ret = system("./$exe_filename");
+ if ($ret != 0) {
+ print STDERR "$name failed with return value $ret\n";
+ }
+
+ print "Ok\n";
+
+ return $ret;
+}
+
+1;