/** @page apreq_status STATUS

    2.10 released 11-Nov-08

Contributors looking for a mission:

    - just do an egrep on "TODO" or "XXX" and see what's there


CURRENT RELEASE NOTES:


RELEASE SHOWSTOPPERS:


CURRENT VOTES:

    - Should we switch to EU::MM for determining the full path to perl?
      The problem is that some folks move their perl binary post-installation,
      but never adjust Config.pm.  EU::MM is smart, by accepting a 
      full path in $^X or by searching the user's $PATH for $^X, before
      resorting to Config.pm.  However, if we change apreq2, we should also
      lobby test-dev to adopt the same solution for Apache::Test.  Otherwise
      our test suite will likely fail, even though the rest of the perl build
      system will presumably still work.

            +1: joes
             0:
            -1:

    - Drop ExtUtils::XSBuilder as the C API is fairly
      stable now.  The header parsing + xs generation stuff may be too 
      difficult for the community to maintain over ordinary .xs files.

            +1: pgollucci

TODO:

    - Get -libmodperl to work like it does in mod_perl land.

    - Get static builds working again.

    - Implement (some of) RFC 2184 in the multipart parser.

    - Dump automake, preferably replacing that with more stuff from
      httpd/apr's build system.

    - Move module/t to module/apache2/t.

    - Figure out how and where the apreq_xs_ headers, and typemap file,
      should be installed.

    - Write tests for the apache 1.3.x module.

    - Fix the broken make dependencies, especially in the module 
      and glue subdirs.  The libtool workaround (for OSX IIRC) 
      that copies module/.libs to module/t is especially bogus.

    - Round out the unit tests in library/t.  Ideally each
      API function should have its own tests, and each possible
      error status should be both tested & documented.  Also
      upgrade these tests to use the Apache::Test framework.

    - in glue/perl/t/apreq/cgi.t on Win32, printing to the error log
      hangs if the strings involved are about 10000 in size.
      This doesn't occur in the env/cgi tests - why?

    - Why must fprintf(stderr, ...), rather than
      apr_file_printf(err, ...), be used on Win32 in
      cgi_log() of src/apreq_env.c?

    - Get env/ (Apache::Test) tests to work for --with-apache2-src option.
      Also add a test to configure that prevents simultaneous use of
      --with-apache2-src and --with-apache2-apxs.

    - symbol exports files:
      -# aix needs .exp files

    - Install the html dox during "make install".  Should we do this 
      for the doxy manpages also?

    - Rework glue/perl build system to use apreq2-config instead of
      relying on paths like "../../src".


OPEN ISSUES:

    - Should we bundle an apr-based "application/xml" parser?  
      If so, how should we parse the xml data into an apr_table?


BUGS:

    - Fix build automake/libtool/autoconf build system so it works
      properly on OSX & AIX.


WISH LIST:

    - I [joes] wish folks would contribute some glue code for
      one of these:

      - php,
      - Rivet,
      - mod_dtcl, 
      - mod_python, 
      - mod_jk, 
      - tomcat,
      - mod_ruby,
      - mod_parrot.

*/
