1
0
mirror of https://github.com/samba-team/samba.git synced 2025-06-24 15:17:06 +03:00
Jelmer Vernooij 59b13f9a1d r9460: - Move pidl to lib/. This fixes standalone installation of pidl.
- Update the README
- Allow building the docs stand-alone
(This used to be commit b56084ce251ab7a35dd1422f38de258e8e1e1477)
2007-10-10 13:34:17 -05:00

170 lines
3.3 KiB
Perl

# Simple system for running tests against pidl
# (C) 2005 Jelmer Vernooij <jelmer@samba.org>
# Published under the GNU General Public License
package Parse::Pidl::Test;
use strict;
use Parse::Pidl::Util;
use Getopt::Long;
my $cc = $ENV{CC};
my @cflags = split / /, $ENV{CFLAGS};
my @ldflags = split / /, $ENV{LDFLAGS};
$cc = "cc" if ($cc eq "");
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);
';
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,$idl_path, $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) = @_;
return system($cc, @cflags, '-I.', '-Iinclude', '-c', $filename);
}
sub link_files($$)
{
my ($exe_name,$objs) = @_;
return system($cc, @ldflags, '-Lbin', '-lrpc', '-o', $exe_name, @$objs);
}
sub test_idl($$$$)
{
my ($name,$settings,$idl,$c) = @_;
$| = 1;
print "Running $name... ";
my $outputdir = $settings->{OutputDir};
my $c_filename = $outputdir."/".$name."_test.c";
my $idl_filename = $outputdir."/".$name."_idl.idl";
my $exe_filename = $outputdir."/".$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-Compiler'}, $settings->{'IDL-Arguments'}) == -1);
my @srcs = ($c_filename);
push (@srcs, @{$settings->{'ExtraFiles'}});
foreach (@srcs) {
next unless /\.c$/;
return -1 if (compile_cfile($_) == -1);
}
my @objs;
foreach (@srcs) {
if (/\.c$/) { s/\.c$/\.o/g; }
push(@objs, $_);
}
return -1 if (link_files($exe_filename, \@objs) == -1);
my $ret = system("./$exe_filename");
if ($ret != 0) {
$ret = $? >> 8;
print "failed with return value $ret\n";
return $ret;
}
unless ($settings->{Keep}) {
unlink(@srcs, @objs, $exe_filename, $idl_filename);
}
print "Ok\n";
return $ret;
}
sub GetSettings($)
{
my $settings = {
OutputDir => ".",
'IDL-Compiler' => "./pidl"
};
my %opts = ();
GetOptions('idl-compiler=s' => \$settings->{'IDL-Compiler'},
'outputdir=s' => \$settings->{OutputDir},
'keep' => \$settings->{Keep},
'help' => sub { ShowHelp(); exit 1; } );
return %$settings;
}
sub ShowHelp()
{
print " --idl-compiler=PATH-TO-PIDL Override path to IDL compiler\n";
print " --outputdir=OUTPUTDIR Write temporary files to OUTPUTDIR rather then .\n";
print " --keep Keep intermediate files after running test";
print " --help Show this help message\n";
}
1;