Hi,
recently I stumbled upon a curious thing. A freshly unpacked modperl
aborted compilation after compiling in src/modules/perl. These are the
symptoms:
- during perl Makefile.PL:
...
WARNING: #define AP_SERVER_MAJORVERSION_NUMBER 2
is not a known parameter.
Checking if your kit is complete...
Looks good
Writing Makefile for Apache2::Reload
!!! no default argument defined for argument: #define
AP_SERVER_MAJORVERSION_NUMBER 2
at ./Makefile.PL line 60
WARNING: #define AP_SERVER_MAJORVERSION_NUMBER 2
is not a known parameter.
Checking if your kit is complete...
Looks good
- and then in make:
...
cp lib/Apache2/porting.pm blib/lib/Apache2/porting.pm
make[1]: Entering directory
`/usr/src/packages/BUILD/mod_perl-2.0.5threading3/Apache-Reload'
Makefile:14: *** empty variable name. Stop.
make[1]: Leaving directory
`/usr/src/packages/BUILD/mod_perl-2.0.5threading3/Apache-Reload'
make: *** [subdirs] Error 2
A second call of "perl Makefile.PL; make" made it work normally.
I could track it down to $_ being used as loop variable and overwritten
by a function called in that loop in ModPerl::MM.
There are obviously 2 ways to fix that. First, introduce a local loop
variable and second, ensure $_ is not changed inside a function unless
this is the purpose of the function.
What is the way to go? Or are both ways ok?
This patch introduces $o as loop variable instead of $_. For me the
@default_opts loop was the culprit but I have changed all loops in
WriteMakefile().
Index: lib/ModPerl/MM.pm
===================================================================
--- lib/ModPerl/MM.pm (revision 806134)
+++ lib/ModPerl/MM.pm (working copy)
@@ -132,22 +132,22 @@
my_import(__PACKAGE__);
# set top-level WriteMakefile's values if weren't set already
- for (@default_opts) {
- $args{$_} = get_def_opt($_) unless exists $args{$_}; # already defined
+ for my $o (@default_opts) {
+ $args{$o} = get_def_opt($o) unless exists $args{$o}; # already defined
}
# set dynamic_lib-level WriteMakefile's values if weren't set already
$args{dynamic_lib} ||= {};
my $dlib = $args{dynamic_lib};
- for (@default_dlib_opts) {
- $dlib->{$_} = get_def_opt($_) unless exists $dlib->{$_};
+ for my $o (@default_dlib_opts) {
+ $dlib->{$o} = get_def_opt($o) unless exists $dlib->{$o};
}
# set macro-level WriteMakefile's values if weren't set already
$args{macro} ||= {};
my $macro = $args{macro};
- for (@default_macro_opts) {
- $macro->{$_} = get_def_opt($_) unless exists $macro->{$_};
+ for my $o (@default_macro_opts) {
+ $macro->{$o} = get_def_opt($o) unless exists $macro->{$o};
}
ExtUtils::MakeMaker::WriteMakefile(%args);
And this one prevents inc() from changing $_:
Index: lib/Apache2/Build.pm
===================================================================
--- lib/Apache2/Build.pm (revision 806134)
+++ lib/Apache2/Build.pm (working copy)
@@ -2068,6 +2068,7 @@
}
sub inc {
+ local $_;
my @includes = map { "-I$_" } @{ shift->includes };
"@includes";
}
The attached patch contains these 2 plus a fix for the typo mentioned
in my previous mail.
Can I apply it to trunk?
Torsten
Index: lib/ModPerl/MM.pm
===================================================================
--- lib/ModPerl/MM.pm (revision 806134)
+++ lib/ModPerl/MM.pm (working copy)
@@ -132,22 +132,22 @@
my_import(__PACKAGE__);
# set top-level WriteMakefile's values if weren't set already
- for (@default_opts) {
- $args{$_} = get_def_opt($_) unless exists $args{$_}; # already defined
+ for my $o (@default_opts) {
+ $args{$o} = get_def_opt($o) unless exists $args{$o}; # already defined
}
# set dynamic_lib-level WriteMakefile's values if weren't set already
$args{dynamic_lib} ||= {};
my $dlib = $args{dynamic_lib};
- for (@default_dlib_opts) {
- $dlib->{$_} = get_def_opt($_) unless exists $dlib->{$_};
+ for my $o (@default_dlib_opts) {
+ $dlib->{$o} = get_def_opt($o) unless exists $dlib->{$o};
}
# set macro-level WriteMakefile's values if weren't set already
$args{macro} ||= {};
my $macro = $args{macro};
- for (@default_macro_opts) {
- $macro->{$_} = get_def_opt($_) unless exists $macro->{$_};
+ for my $o (@default_macro_opts) {
+ $macro->{$o} = get_def_opt($o) unless exists $macro->{$o};
}
ExtUtils::MakeMaker::WriteMakefile(%args);
Index: lib/ModPerl/BuildMM.pm
===================================================================
--- lib/ModPerl/BuildMM.pm (revision 806134)
+++ lib/ModPerl/BuildMM.pm (working copy)
@@ -76,9 +76,9 @@
$build ||= build_config();
ModPerl::MM::my_import(__PACKAGE__);
- my $inc;
+ my $inc = $args{INC} || '';
$inc = $args{INC} if $args{INC};
- $inc = " " . $build->inc;
+ $inc .= " " . $build->inc;
if (my $glue_inc = $build->{MP_XS_GLUE_DIR}) {
for (split /\s+/, $glue_inc) {
$inc .= " -I$_";
Index: lib/Apache2/Build.pm
===================================================================
--- lib/Apache2/Build.pm (revision 806134)
+++ lib/Apache2/Build.pm (working copy)
@@ -2068,6 +2068,7 @@
}
sub inc {
+ local $_;
my @includes = map { "-I$_" } @{ shift->includes };
"@includes";
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]