This is mod_perl version 2.0

*** Prerequisites ***

Apache:
  Dynamic mod_perl (DSO):    Apache 2.0.47 - 2.4.12.
  Static mod_perl:           Apache 2.0.51 - 2.4.12.

  Newer Apache versions may work with this version of mod_perl.  If
  not, the svn version likely will, which can be obtained from:
  http://perl.apache.org/download/source.html#Development_mod_perl_2_0_Source_Distribution

Perl: 
  Any stable version of Perl currently in support by the Perl community,
  as described in recent Perl distributions' "perlpolicy.pod" document,
  EXCEPT THAT Perl 5.22.x is currently not supported due to the problem
  reported in https://rt.cpan.org/Ticket/Display.html?id=101962
  We hope to address that in the next release (2.0.10).

  Newer Perl versions may work with this version of mod_perl.  If not,
  the svn version likely will (see above).

  Many older Perl versions also work with this version of mod_perl:
  Perls back to version 5.8.2 (and possibly earlier in some build
  configurations) are currently believed to work, but this is not
  guaranteed to be the case, either now or in the future.

C compiler:
  The mod_perl source currently uses GNU89 inline semantics on GCC, but
  GCC 5 defaults to newer C99 semantics.  If you see MP_INLINE related
  warnings during the build and missing symbols when starting the test
  suite, adding "-fgnu89-inline" to MP_CCOPTS may help.
  There are also some reports of this happening with the Clang compiler,
  where the corresponding option to try is "-std=gnu89".

*** Status ***

mod_perl is currently considered stable.

Four test scripts are currently known to fail with Apache 2.4.x on Windows:

  t/protocol/echo_block.t (Fails tests 2-3)
  t/protocol/echo_nonblock.t (Fails test 2)
  t/protocol/echo_timeout.t (Fails tests 2-5)
  t/protocol/pseudo_http.t (Fails tests 3-8 and 11-13)

*** Documentation ***

Documentation can be found in the docs/ directory. Currently they
don't get installed on 'make install'. Certain API documentation can
be found in docs/api/.  The online version is at
http://perl.apache.org/docs/2.0/.

*** Todo ***

mod_perl-2.0 is not 100% feature complete with the 1.xx version.
See the files in the todo/ directory for what remains to be done. Some
of those features will be implemented after 2.0 is released. The goal
is to empty the file todo/release and document/test/verify the API
that's going to be supported by 2.0. More API will be supported post
2.0 release.

*** Support ***

For comments, questions, bug-reports, etc., join the mod_perl users
list by sending mail to modperl-subscribe@perl.apache.org.

When reporting bugs please follow the instructions at:
http://perl.apache.org/docs/2.0/user/help/help.html#Reporting_Problems

For announcements join the mod_perl announce list by sending mail to
announce-subscribe@perl.apache.org.

*** Developers ***

Development discussion takes place on dev (at) perl.apache.org

*** Authors ***

mod_perl-2.0 was designed and written by Doug MacEachern, with
contributions from many others (see Changes files).
