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;

Reply via email to