# $Id$ # Handle the set of ".pm" files for mod_perl # Copyright (C) 2005 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; exactly version 2 of June 1991 is required # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA package My::ModPerlPm; require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; }; our $CVS_ID=q$Id$; use strict; use warnings; use Carp qw(cluck confess); use Exporter; our @EXPORT=qw(); our @ISA=qw(Exporter); # $args{"sub"}=sub { $_[0]->{"module"...}; }; sub list($%) { my($self,%args)=@_; my $filename="make -s MODPERL_PM-print|"; local *F; open F,$filename or confess "$filename: $!"; local $_; my @r; while () { next if !s/^MODPERL_PM:([^:]+)://; my $subdir=$1; for (split) { my %r; $r{"url"}=$subdir."/".$_; $r{"url"}=~s{^[.](/.*[.]pm)$}{$1} or confess "Invalid project: subdir=$subdir base=$_"; $r{"module"}=$r{"url"}; $r{"module"}=~s{^/}{} or confess "Relative module: ".$r{"module"}; $r{"file"}=$r{"module"}; $r{"module"}=~s{/}{::}g; $r{"module"}=~s{[.]pm$}{} or confess; -r $r{"file"} or do { warn "FIXME: Non-existing file \"".$r{"file"}."\" for URL: ".$r{"url"}; next; }; do { &{$_}(\%r) if $_; } for $args{"sub"}; push @r,\%r; } } close F or confess "$filename: $!"; cluck "No modules?" if !@r; return @r; } 1;