diff options
Diffstat (limited to 'source4/build/pidl/test.pm')
-rw-r--r-- | source4/build/pidl/test.pm | 128 |
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; |