summaryrefslogtreecommitdiff
path: root/source4/build/pidl/test.pm
blob: ba86d8eb10aaedff9442ca13294e8fdc554fffc1 (plain)
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
# 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;