git/contrib/buildsystems/Generators.pm
Johannes Schindelin e88919bfe2 contrib/buildsystems: ignore irrelevant files in Generators/
The Generators/ directory can contain spurious files such as editors'
backup files. Even worse, there could be .swp files which are not even
valid Perl scripts.

Let's just ignore anything but .pm files in said directory.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-07-29 14:51:42 -07:00

42 lines
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 unless ($gen =~ /\.pm$/);
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;