| 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; |