Prepare gitweb for mod_perl specific support in CGI compatibility mode (Apache::Registry/ModPerl::Registry or Apache::PerlRun/ModPerl::PerlRun) by storing request (an argument to a handler) in $r variable, for later use. The idea is to have gitweb run as CGI script, under mod_perl 1.0 and under mod_perl 2.0 without modifications, while being able to make use of mod_perl capabilities. Define MP_GEN constant and set it to 0 if mod_perl is not available, to 1 if running under mod_perl 1.0, and 2 for mod_perl 2.0. It is later used in BEGIN block to load appropriate mod_perl modules; for now the one in which request is defined, and the one with status and HTTP constants. Based on "Porting Apache:: Perl Modules from mod_perl 1.0 to 2.0" document http://perl.apache.org/docs/2.0/user/porting/porting.html chapter "Making Code Conditional on Running mod_perl Version". Use "if (MP_GEN)" for checking if gitweb is run under mod_perl; later on we will use "if ($r)" for that. Signed-off-by: Jakub Narebski <jnareb@xxxxxxxxx> --- A bit of RFC, because I'm not sure if "my $r" or "our $r" should be used (in script which makes use of subroutines; under Registry those would end as nested subroutines). Perhaps we should import everything? gitweb/gitweb.perl | 28 +++++++++++++++++++++++++++- 1 files changed, 27 insertions(+), 1 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 3888563..9983e9e 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -18,10 +18,36 @@ use File::Find qw(); use File::Basename qw(basename); binmode STDOUT, ':utf8'; +# Set the constant MP_GEN to 0 if mod_perl is not available, +# to 1 if running under mod_perl 1.0 +# and 2 for mod_perl 2.0 +use constant { + MP_GEN => ($ENV{'MOD_PERL'} + ? ( exists $ENV{'MOD_PERL_API_VERSION'} and + $ENV{'MOD_PERL_API_VERSION'} >= 2 ) ? 2 : 1 + : 0), +}; + BEGIN { - CGI->compile() if $ENV{MOD_PERL}; + # use appropriate mod_perl modules (conditional use) + if (MP_GEN == 2) { + require Apache2::RequestRec; + require Apache2::Const; + Apache2::Const->import(-compile => qw(:common :http)); + } elsif (MP_GEN == 1) { + require Apache; + require Apache::Constants; + Apache::Constants->import(qw(:common :http)); + } + + # precompile CGI for mod_perl + CGI->compile() if MP_GEN; } +# mod_perl request +my $r; +$r = shift @_ if MP_GEN; + our $cgi = new CGI; our $version = "++GIT_VERSION++"; our $my_url = $cgi->url(); -- 1.4.4.3 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html