stas 2004/08/15 03:08:30
Modified: . Changes
lib/ModPerl BuildMM.pm
todo release
Log:
pod manpages are now glued to all .pm files for which .pod exists
Revision Changes Path
1.447 +3 -0 modperl-2.0/Changes
Index: Changes
===================================================================
RCS file: /home/cvs/modperl-2.0/Changes,v
retrieving revision 1.446
retrieving revision 1.447
diff -u -u -r1.446 -r1.447
--- Changes 15 Aug 2004 00:20:34 -0000 1.446
+++ Changes 15 Aug 2004 10:08:30 -0000 1.447
@@ -12,6 +12,9 @@
=item 1.99_15-dev
+pod manpages are now glued to all .pm files for which .pod exists
+[Stas]
+
Apache::RequestIO::sendfile() now indicates which file it has failed
to open on failure. [Stas]
1.19 +71 -14 modperl-2.0/lib/ModPerl/BuildMM.pm
Index: BuildMM.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/lib/ModPerl/BuildMM.pm,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -u -r1.18 -r1.19
--- BuildMM.pm 1 Aug 2004 19:44:00 -0000 1.18
+++ BuildMM.pm 15 Aug 2004 10:08:30 -0000 1.19
@@ -21,6 +21,7 @@
use Cwd ();
use File::Spec::Functions qw(catdir catfile splitdir);
use File::Basename;
+use File::Find;
use Apache::Build ();
use ModPerl::MM;
@@ -170,7 +171,8 @@
my $self = shift;
my $string = $self->MM::top_targets;
- ModPerl::MM::add_dep_after(\$string, "pure_all", pm_to_blib => 'glue_pods');
+ ModPerl::MM::add_dep_after(\$string, "pure_all",
+ linkext => 'glue_pods');
return $string;
}
@@ -182,21 +184,72 @@
my @targets = ();
- # add the code to glue the existing pods to the .pm files in blib
- my @target = ('glue_pods:');
+ # reasons for glueing pods to the respective .pm files:
+ # - manpages will get installed over the mp1 manpages and vice
+ # versa. glueing pods avoids creation of manpages, but may be we
+ # could just tell make to skip manpages creation?
+ # if pods are installed directly they need to be also redirected,
+ # some into Apache2/ others (e.g. Apache2) not
+
+ # add the code to glue the existing pods to the .pm files in blib.
+ # create a dependency on pm_to_blib subdirs linkext targets to
+ # allow 'make -j'
+ my @target = ('glue_pods: pm_to_blib subdirs linkext');
if (-d $doc_root) {
- while (my ($pm, $blib) = each %{$self->{PM}}) {
- my $pod = catdir(
- (splitdir($blib))[-2 .. -1]);
- $pod =~ s/\.pm/\.pod/;
- my $podpath = catfile $doc_root, $pod;
- next unless -r $podpath;
-
- push @target,
- '$(FULLPERL) -I$(INST_LIB) ' .
- "-I$apache_test_dir -MModPerl::BuildMM " .
- "-e ModPerl::BuildMM::glue_pod $pm $podpath $blib";
+ my $build = build_config();
+
+ # those living in modperl-2.0/lib are already nicely mapped
+ my %pms = %{ $self->{PM} };
+
+ my $cwd = Cwd::getcwd();
+ my $blib_dir = catdir qw(blib lib);
+ $blib_dir = catdir $blib_dir, "Apache2"
+ if $build->{MP_INST_APACHE2};
+
+ # those autogenerated under WrapXS/
+ # those living under xs/
+ # those living under ModPerl-Registry/lib/
+ my @src = ('WrapXS', 'xs', catdir(qw(ModPerl-Registry lib)));
+
+ for my $base (@src) {
+ chdir $base;
+ my @files = ();
+ find({ no_chdir => 1,
+ wanted => sub { push @files, $_ if /.pm$/ },
+ }, ".");
+ chdir $cwd;
+
+ for (@files) {
+ my $pm = catfile $base, $_;
+ my $blib;
+ if ($base =~ /^(xs|WrapXS)/) {
+ my @segm = splitdir $_;
+ splice @segm, -2, 1; # xs/APR/Const/Const.pm
+ splice @segm, -2, 1 if /APR.pm/; # odd case
+ $blib = catfile $blib_dir, @segm;
+ }
+ else {
+ $blib = catfile $blib_dir, $_;
+ }
+ $pms{$pm} = $blib;
+ }
+ }
+
+ while (my($pm, $blib) = each %pms) {
+ my @segm = splitdir $blib;
+ for my $i (1..2) {
+ # try APR.pm and APR/Bucket.pm
+ my $pod = catdir(@segm[-$i .. -1]);
+ $pod =~ s/\.pm/\.pod/;
+ my $podpath = catfile $doc_root, $pod;
+ next unless -r $podpath;
+
+ push @target,
+ '$(FULLPERL) -I$(INST_LIB) ' .
+ "-I$apache_test_dir -MModPerl::BuildMM " .
+ "-e ModPerl::BuildMM::glue_pod $pm $podpath $blib";
+ }
}
push @target, $self->{NOECHO} . '$(TOUCH) $@';
@@ -221,6 +274,9 @@
die "expecting 3 arguments: pm, pod, dst" unless @ARGV == 3;
my($pm, $pod, $dst) = @ARGV;
+ die "glue_pod: can't find $pm" unless -e $pm;
+ die "glue_pod: can't find $dst" unless -e $dst;
+
# have we already glued the doc?
exit 0 unless -s $pm == -s $dst;
@@ -232,6 +288,7 @@
chmod $rw_mode, $dst or die "Can't chmod $rw_mode $dst: $!";
open my $pod_fh, "<$pod" or die "Can't open $pod: $!";
open my $dst_fh, ">>$dst" or die "Can't open $dst: $!";
+ print $dst_fh "\n"; # must add one line separation
print $dst_fh (<$pod_fh>);
close $pod_fh;
close $dst_fh;
1.47 +0 -11 modperl-2.0/todo/release
Index: release
===================================================================
RCS file: /home/cvs/modperl-2.0/todo/release,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -u -r1.46 -r1.47
--- release 15 Aug 2004 07:55:52 -0000 1.46
+++ release 15 Aug 2004 10:08:30 -0000 1.47
@@ -48,17 +48,6 @@
the issues and thinks he knows how to fix it, he just needs the time.
owner: geoff
-* it looks like glue_pod is not working anymore, consider dropping it
- completely and simply install .pod files along with .pm ones. In
- which case we need to arrange for Makefile.PL to traverse into
- docs/api/ and grab those pod files. See how the Template package
- does that.
-
- in any case we now have .pod manpages for non-existing .pm files, so
- in case we don't install .pod files as is, we may need to make a
- special case for those .pod files. So it's probably better to just
- install all .pod files w/o glueing them to .pm files.
-
* some autogenerated record accessors shouldn't be get/set but only
get (e.g. Apache->server->is_virtual(1) is wrong). Need to add a new
flag supported by MapUtil and map files, where we can say which