git/contrib/buildsystems/Generators.pm

43 строки
1.1 KiB
Perl

package Generators;
require Exporter;
use strict;
use File::Basename;
no strict 'refs';
use vars qw($VERSION @AVAILABLE);
our $VERSION = '1.00';
our(@ISA, @EXPORT, @EXPORT_OK, @AVAILABLE);
@ISA = qw(Exporter);
BEGIN {
local(*D);
my $me = $INC{"Generators.pm"};
die "Couldn't find myself in \@INC, which is required to load the generators!" if ("$me" eq "");
$me = dirname($me);
if (opendir(D,"$me/Generators")) {
foreach my $gen (readdir(D)) {
next if ($gen =~ /^\.\.?$/);
require "${me}/Generators/$gen";
$gen =~ s,\.pm,,;
push(@AVAILABLE, $gen);
}
closedir(D);
my $gens = join(', ', @AVAILABLE);
}
push @EXPORT_OK, qw(available);
}
sub available {
return @AVAILABLE;
}
sub generate {
my ($gen, $git_dir, $out_dir, $rel_dir, %build_structure) = @_;
return eval("Generators::${gen}::generate(\$git_dir, \$out_dir, \$rel_dir, \%build_structure)") if grep(/^$gen$/, @AVAILABLE);
die "Generator \"${gen}\" is not available!\nAvailable generators are: @AVAILABLE\n";
}
1;