stas 2003/08/08 13:38:20
Modified: . Changes Added: lib/Apache porting.pm Log: new package Apache::porting to make it easier to port mp1 code to mp2 Revision Changes Path 1.1 modperl-2.0/lib/Apache/porting.pm Index: porting.pm =================================================================== package Apache::porting; use strict; use warnings FATAL => 'all'; use Carp 'croak'; use ModPerl::MethodLookup (); use Apache::ServerUtil; use Apache::Const -compile => 'OK'; our $AUTOLOAD; ### methods ### # handle: # - removed and replaced methods # - hinting the package names in which methods reside my %avail_methods = map { $_ => 1 } (ModPerl::MethodLookup::avail_methods(), ModPerl::MethodLookup::avail_methods_compat()); # XXX: unfortunately it doesn't seem to be possible to install # *UNIVERSAL::AUTOLOAD at the server startup, httpd segfaults, # child_init seems to be the first stage where it works. Apache->server->push_handlers(PerlChildInitHandler => \&porting_autoload); sub porting_autoload { *UNIVERSAL::AUTOLOAD = sub { # This is a porting module, no compatibility layers are allowed in # this zone croak("Apache::porting can't be used with Apache::compat") if exists $ENV{"Apache/compat.pm"}; (my $method = $AUTOLOAD) =~ s/.*:://; # we skip DESTROY methods return if $method eq 'DESTROY'; # we don't handle methods that we don't know about croak "Undefined subroutine $AUTOLOAD called" unless defined $method && exists $avail_methods{$method}; my ($hint, @modules) = ModPerl::MethodLookup::lookup_method($method, @_); $hint ||= "Can't find method $AUTOLOAD"; croak $hint; }; return Apache::OK; } ### packages ### # handle: # - removed and replaced packages my %packages = ( 'Apache::Constants' => [qw(Apache::Const)], 'Apache::Table' => [qw(APR::Table)], 'Apache::File' => [qw(Apache::Response Apache::RequestRec)], 'Apache' => [qw(ModPerl::Util Apache::Module)], ); BEGIN { sub my_require { my $package = $_[0]; $package =~ s|/|::|g; $package =~ s|.pm$||; # this picks the original require (which could be overriden # elsewhere, so we don't lose that) because we haven't # overriden it yet return require $_[0] unless $packages{$package}; my $msg = "mod_perl 2.0 API doesn't include package '$package'."; my @replacements = @{ $packages{$package}||[] }; if (@replacements) { $msg .= " The package '$package' has moved to " . join " ", map qq/'$_'/, @replacements; } croak $msg; }; *CORE::GLOBAL::require = sub (*) { my_require($_[0])}; } 1; 1.206 +3 -0 modperl-2.0/Changes Index: Changes =================================================================== RCS file: /home/cvs/modperl-2.0/Changes,v retrieving revision 1.205 retrieving revision 1.206 diff -u -r1.205 -r1.206 --- Changes 7 Aug 2003 16:29:19 -0000 1.205 +++ Changes 8 Aug 2003 20:38:20 -0000 1.206 @@ -12,6 +12,9 @@ =item 1.99_10-dev +new package Apache::porting to make it easier to port mp1 code to mp2 +[Stas] + new Apache::Build methods: mpm_name(), mpm_is_threaded(). use them in the top-level Makefile.PL to require 5.8.0/ithreads if mpm requires threads. [Stas]