Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Nov 2005 21:39:05 +0300
From:      Eugene Gladchenko <eugene@donpac.ru>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/89387: undefined MOD_PERL_API_VERSION in www/p5-Apache-DBI
Message-ID:  <20051121183905.GA67651@so.inet.rnd.cbr.ru>
Resent-Message-ID: <200511211840.jALIeQun063368@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         89387
>Category:       ports
>Synopsis:       undefined MOD_PERL_API_VERSION in www/p5-Apache-DBI
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Nov 21 18:40:26 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Eugene Gladchenko
>Release:        FreeBSD 5.4-RELEASE-p3 i386
>Organization:
>Environment:
System: FreeBSD cops.gladchenko.ru 5.4-RELEASE-p3 FreeBSD 5.4-RELEASE-p3 #5: Tue Jul 5 15:19:55 MSD 2005
>Description:
	When using www/apache13-modperl with Apache::DBI loaded by startup.pl
	I get the following error messages upon starting Apache:

	Use of uninitialized value in numeric eq (==) at
	/usr/local/lib/perl5/site_perl/5.8.7/Apache/DBI.pm line 211.
	Use of uninitialized value in numeric eq (==) at
	/usr/local/lib/perl5/site_perl/5.8.7/Apache/DBI.pm line 35.

	I've modified the existing patch patch-mp2-api a little to get rid of
	these. I just had to add a few "if exists $ENV{MOD_PERL_API_VERSION}".
>How-To-Repeat:
	Run "apachectl start" and see the error message.
>Fix:

--- patch-mp2-api begins here ---
--- AuthDBI.pm.orig	Mon May 23 09:53:24 2005
+++ AuthDBI.pm	Mon May 23 09:55:38 2005
@@ -6,13 +6,13 @@
 # 2: full debug output
 $Apache::AuthDBI::DEBUG = 0;
 
-use constant MP2 => $mod_perl::VERSION >= 1.99;
+use constant MP2 => $ENV{MOD_PERL_API_VERSION} == 2 ? 1 : 0;
  
 BEGIN {
   my @constants = qw( OK AUTH_REQUIRED FORBIDDEN DECLINED SERVER_ERROR );
   if (MP2) {
-    require Apache::Const;
-    import Apache::Const @constants;
+    require Apache2::Const;
+    import Apache2::Const @constants;
   }
   else {
     require Apache::Constants;
@@ -25,7 +25,9 @@
 
 sub push_handlers {
   if ( MP2 ) {
-    Apache->server->push_handlers(@_);
+    require Apache2::ServerUtil;
+    my $s = Apache2::ServerUtil->server;
+    $s->push_handlers(@_);
   }
   else {
     Apache->push_handlers(@_);
--- DBI.pm.orig	Mon May 23 09:49:38 2005
+++ DBI.pm	Mon May 23 10:08:40 2005
@@ -4,6 +4,7 @@
 # $Id: DBI.pm,v 1.12 2004/02/18 00:18:50 ask Exp $
 
 BEGIN { eval { require Apache } }
+BEGIN { eval { require mod_perl2; require Apache2::Module; } }
 use DBI ();
 use Carp qw(carp);
 
@@ -31,11 +32,19 @@
 sub connect_on_init { 
     # provide a handler which creates all connections during server startup
 
-    # TODO - Should check for mod_perl 2 and do the right thing there
-    carp "Apache.pm was not loaded\n" and return unless $INC{'Apache.pm'};
-    if(!@ChildConnect and Apache->can('push_handlers')) {
-        Apache->push_handlers(PerlChildInitHandler => \&childinit);
+    if (exists $ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2) {
+	if (!@ChildConnect) {
+	    require Apache2::ServerUtil;
+	    my $s = Apache2::ServerUtil->server;
+	    $s->push_handlers(PerlChildInitHandler => \&childinit);
+	}
+    } else {
+	carp "Apache.pm was not loaded\n" and return unless $INC{'Apache.pm'};
+	if (!@ChildConnect and Apache->can('push_handlers')) {
+	    Apache->push_handlers(PerlChildInitHandler => \&childinit);
+	}
     }
+
     # store connections
     push @ChildConnect, [@_];
 }
@@ -93,10 +102,16 @@
 
     # this PerlCleanupHandler is supposed to initiate a rollback after the script has finished if AutoCommit is off.
     my $needCleanup = ($Idx =~ /AutoCommit[^\d]+0/) ? 1 : 0;
-    # TODO - Fix mod_perl 2.0 here
     if(!$Rollback{$Idx} and $needCleanup and Apache->can('push_handlers')) {
         print STDERR "$prefix push PerlCleanupHandler \n" if $Apache::DBI::DEBUG > 1;
-        Apache->push_handlers("PerlCleanupHandler", \&cleanup);
+	if (exists $ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2) {
+		require Apache2::ServerUtil;
+		my $s = Apache2::ServerUtil->server;
+		$s->push_handlers('PerlCleanupHandler', \&cleanup);
+	} else {
+		Apache->push_handlers('PerlCleanupHandler', \&cleanup);
+	}
+	
         # make sure, that the rollback is called only once for every 
         # request, even if the script calls connect more than once
         $Rollback{$Idx} = 1;
@@ -193,9 +208,21 @@
 
 
 # prepare menu item for Apache::Status
-
-Apache::Status->menu_item(
-
+if (exists $ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2) {
+    Apache2::Status->menu_item(
+    'DBI' => 'DBI connections',
+    sub {
+        my($r, $q) = @_;
+        my(@s) = qw(<TABLE><TR><TD>Datasource</TD><TD>Username</TD></TR>);
+        for (keys %Connected) {
+            push @s, '<TR><TD>', join('</TD><TD>', (split($;, $_))[0,1]), "</TD></TR>\n";
+        }
+        push @s, '</TABLE>';
+        return \@s;
+    }
+    ) if Apache2::Module::loaded('Apache2::Status');
+} else {
+    Apache::Status->menu_item(
     'DBI' => 'DBI connections',
     sub {
         my($r, $q) = @_;
@@ -206,10 +233,10 @@
         push @s, '</TABLE>';
         return \@s;
    }
-
-) if ($INC{'Apache.pm'}                      # is Apache.pm loaded?
+   ) if ($INC{'Apache.pm'}		      # is Apache.pm loaded?
       and Apache->can('module')               # really?
       and Apache->module('Apache::Status'));  # Apache::Status too?
+}
 
 1;
 
--- patch-mp2-api ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051121183905.GA67651>