1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# 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 "failed with return value $ret\n";
return $ret;
}
print "Ok\n";
return $ret;
}
1;
|