#$Id: VersionUtil.pm,v 1.3 2006/01/17 01:36:51 naoya Exp $
package ModPerl::VersionUtil;
use strict;
use warnings;
use base qw/Class::Data::Inheritable/;

our $VERSION = '0.03';

BEGIN {
    __PACKAGE__->mk_classdata($_)
        for qw/mp_version mp_version_string is_mp is_mp1 is_mp19 is_mp2/;

    if (my $version = $ENV{MOD_PERL}) {
        # Note: This environment variable could be set in an external script called from mod_perl,
        # so don't presume we are in mod_perl just yet.

        ($version) = $version =~ /^\S+\/(\d+(?:[\.\_]\d+)+)/;
        __PACKAGE__->mp_version_string($version);

        $version =~ s/_//g;
        $version =~ s/(\.[^.]+)\./$1/g;
        __PACKAGE__->mp_version($version);

        if ($ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2 && exists $INC{'Apache2/RequestRec.pm'}) {
            __PACKAGE__->is_mp(1);
            __PACKAGE__->is_mp2(1)
        } elsif (exists $INC{'Apache.pm'}) {
            __PACKAGE__->is_mp(1);
            if ( $version >= 1.9901 ) {
                __PACKAGE__->is_mp19(1);
            } elsif ( $version >= 1.24 ) {
                __PACKAGE__->is_mp1(1);
            }
        }
    }
}

1;

__END__

=head1 NAME

ModPerl::VersionUtil - Makes it easier to investigate your mod_perl
version.

=head1 SYNOPSIS

  use ModPerl::VersionUtil;

  if (ModPerl::VersionUtil->is_mp) {
    print "It's running under mod_perl.";
    print "mod_perl version: " . ModPerl::VersionUtil->mp_version_string;
  }

  if (ModPerl::VersionUtil->is_mp2) {
    require Apache2 ();
    require Apache2::RequestRec();
    require Apache2::RequestIO ();
  } elsif (ModPerl::VersionUtil->is_mp19) {
    require Apache2;
    require Apache::RequestRec();
    require Apache::RequestIO ();
  } elsif (ModPerl::VersionUtil->is_mp1) {
    require Apache;
  }

=head1 DESCRIPTION

This module helps you to investigate your mod_perl version easily.

=head1 METHODS

=over 4

=item is_mp

Returns true if your application is running under mod_perl.

=item is_mp1

Returns true if your mod_perl version is 1.0.

=item is_mp19

Returns true if your mod_perl version is 1.9 which is incompatible
with 2.0.

=item is_mp2

Returns true if your mod_perl version is 2.0 or higher.

=item mp_version

Returns your mod_perl version as number. (e.g. '1.99920')

=item mp_version_string

Returns your mod_perl version as string. (e.g. '1.999.20')

=head1 ACKNOWLEDGEMENTS

Craig Manley E<lt>CMANLEY@cpan.orgE<gt> gave me a code to handle an
external scripts correctly.

=head1 AUTHOR

Naoya Ito, E<lt>naoya@bloghackers.netE<gt>

Some codes are borrowed from the L<Catalyst> web application framework
which can handle any versions of mod_perl elegantly.

=head1 COPYRIGHT AND LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut