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;