When passing a PREFIX=/foo/bar to Makefile.PL, all the perl .pm will get installed
under /foo/bar/lib/site_perl/perl-version/perl-arch but mod_perl.so isn't aware of
that. So, mod_perl will refuse to start, failing to locate Apache.pm. My first
way around this was to PerlRequire a file before anything else and push
/foo/bar/lib/site_perl/perl-version/perl-arch
on the @INC path, but it's not very elegant.
This patches automatically makes sure the PREFIX path, if specified, is placed first
in the @INC
path.
--
+-----------------------------------------------+
| Philippe M. Chiasson <[EMAIL PROTECTED]> |
| SmartWorker http://www.smartworker.org |
| IM : gozerhbe ICQ : gozer/18279998 |
| 64.8% computer corrupt according to |
| http://www.freespeech.org/ljk/purity.html |
+-----------------------------------------------+
You're much more likely to be knocked down by a snowball
than by an equivalent number of snowflakes.
-- Larry Wall
perl -e '$$=\${gozer};{$_=unpack(P26,pack(L,$$));/^Just Another Perl
Hacker!\n$/&&print||$$++&&redo}'
Index: src/modules/perl/mod_perl.c
===================================================================
RCS file: /home/cvs/modperl-1/src/modules/perl/mod_perl.c,v
retrieving revision 1.136
diff -u -U10 -b -B -I'$Id' -I'$Revision' -r1.136 mod_perl.c
--- src/modules/perl/mod_perl.c 2001/04/17 22:01:18 1.136
+++ src/modules/perl/mod_perl.c 2001/05/25 17:23:49
@@ -758,20 +758,25 @@
value would cause perl to try to free() something from the original env.
This crashed free(). */
my_setenv("MODPERL_ENV_FIXUP", "0");
my_setenv("MODPERL_ENV_FIXUP", NULL);
{
dTHR;
TAINT_NOT; /* At this time all is safe */
}
+#ifdef MOD_PERL_PREFIX
+ av_unshift(GvAV(incgv),1);
+ av_store(GvAV(incgv), 0, newSVpv(MOD_PERL_PREFIX,0));
+#endif
+
#ifdef APACHE_PERL5LIB
perl_incpush(APACHE_PERL5LIB);
#else
av_push(GvAV(incgv), newSVpv(server_root_relative(p,""),0));
av_push(GvAV(incgv), newSVpv(server_root_relative(p,"lib/perl"),0));
#endif
/* *CORE::GLOBAL::exit = \&Apache::exit */
if(gv_stashpv("CORE::GLOBAL", FALSE)) {
GV *exitgp = gv_fetchpv("CORE::GLOBAL::exit", TRUE, SVt_PVCV);
Index: apaci/mod_perl.config.sh
===================================================================
RCS file: /home/cvs/modperl-1/apaci/mod_perl.config.sh,v
retrieving revision 1.23
diff -u -U10 -b -B -I'$Id' -I'$Revision' -r1.23 mod_perl.config.sh
--- apaci/mod_perl.config.sh 2001/01/29 18:11:41 1.23
+++ apaci/mod_perl.config.sh 2001/05/25 17:20:11
@@ -175,20 +175,25 @@
perl_static_srcs="$param_PERL_STATIC_SRCS"
perl_static_objs="`echo $param_PERL_STATIC_SRCS | sed -e 's:\.c:.o:g'`"
perl_static_objs_pic="`echo $param_PERL_STATIC_SRCS | sed -e 's:\.c:.lo:g'`"
#
# determine defines
#
perl_defs=''
perl_defs="$perl_defs -DMOD_PERL_VERSION=\\\"$param_MOD_PERL_VERSION\\\""
perl_defs="$perl_defs
-DMOD_PERL_STRING_VERSION=\\\"mod_perl/$param_MOD_PERL_VERSION\\\""
+
+if [ ".$param_MOD_PERL_PREFIX" != . ]; then
+ perl_defs="$perl_defs -DMOD_PERL_PREFIX=\\\"$param_MOD_PERL_PREFIX\\\""
+fi
+
perl_defs="$perl_defs"
OIFS="$IFS" IFS="$DIFS"
for hook in \
DISPATCH CHILD_INIT CHILD_EXIT POST_READ_REQUEST TRANS HEADER_PARSER \
ACCESS AUTHEN AUTHZ TYPE FIXUP HANDLER LOG INIT CLEANUP STACKED_HANDLERS \
METHOD_HANDLERS DIRECTIVE_HANDLERS SECTIONS RESTART SSI TRACE THREADS; do
eval "val=\$param_PERL_${hook}"
case $hook in
TRACE|THREADS )
if [ ".$val" = .yes ]; then
Index: Makefile.PL
===================================================================
RCS file: /home/cvs/modperl-1/Makefile.PL,v
retrieving revision 1.184
diff -u -U10 -b -B -I'$Id' -I'$Revision' -r1.184 Makefile.PL
--- Makefile.PL 2001/05/01 17:08:25 1.184
+++ Makefile.PL 2001/05/25 17:16:20
@@ -221,20 +221,21 @@
$ADD_MODULE = "";
$PERL_DIRECTIVE_HANDLERS = 0;
$PERL_TABLE_API = 0;
$PERL_LOG_API = 0;
$PERL_URI_API = 0;
$PERL_UTIL_API = 0;
$PERL_FILE_API = 0;
$PERL_CONNECTION_API = 1; #these two were split out late in the game
$PERL_SERVER_API = 1; #so they are on by default
$PERL_RUN_XS = 0;
+$MOD_PERL_PREFIX;
my %experimental = map { $_,1 } qw{
PERL_AUTOPRELOAD
PERL_DSO_UNLOAD
PERL_STARTUP_DONE_CHECK
PERL_RUN_XS
PERL_MARK_WHERE
DO_INTERNAL_REDIRECT
PERL_TIE_SCRIPTNAME
PERL_STASH_POST_DATA
@@ -329,20 +330,27 @@
$win32_args{$k} = ($k eq 'DEBUG' or $k eq 'EAPI') ? 1 : $v;
}
else {
push @mm_args, $_;
}
next;
}
unless (/^(PERL|APACHE)/ or is_mp_arg($k)) {
push @mm_args, $_;
}
+
+ if($k eq 'PREFIX')
+ {
+ use File::Spec;
+ $MOD_PERL_PREFIX =
+File::Spec->catfile($v,'lib','site_perl',$Config{'version'},$Config{'archname'});
+ }
+
$v = 1 unless defined $v;
if($experimental{$k}) {
$experimental{$k}++;
$PERL_EXTRA_CFLAGS .= " -D${k}=1";
}
${$k} = $v, next if defined ${$k};
$callback_hooks{$k} = $v if exists $callback_hooks{$k};
}
my $win32_auto = ($vcpp and $win32_args{APACHE_SRC}) ? 1 : 0;
@@ -2263,20 +2271,27 @@
##
# mod_perl version
MOD_PERL_VERSION = $VERSION
# Perl interpreter to use
PERL = $^X
LIBPERL = $LIBPERL
$static_targets
+
+EOF
+
+print $apaci_cfg <<EOF if defined $MOD_PERL_PREFIX;
+
+# mod_perl installation prefix
+MOD_PERL_PREFIX = $MOD_PERL_PREFIX
EOF
for (qw(PERL_SECTIONS PERL_SSI PERL_TRACE)) {
my $yes_no = $$_ ? "yes" : "no";
print $apaci_cfg "$_ = $yes_no\n";
}
$yes_no = 'no';
$yes_no = 'yes' if $USE_THREADS;