
                          Apache HTTP Server

  Platform specific notes:
  ------------------------

================
  Darwin (OS X):
   Apache 2.0 relies heavily on the use of autoconf and libtool to
   provide a build environment.  Darwin provides these tools as part
   of the Developers Tools package. Under Darwin, however, GNUlibtool
   is installed as 'glibtool' to avoid conflicting with the Darwin
   'libtool' program.  Apache 2.0 knows about this so that's not
   a problem.

   As of OS X 10.2 (Jaguar), the bundled versions work perfectly. Partly
   this is due to the fact that /bin/sh is now 'bash' and not 'zsh' as
   well as the fact that the bundled versions are up-to-date: 
   autoconf 2.5.2 and (g)libtool 1.4.2.

   Earlier versions of OS X are not so fortunate, and the bundled tools
   are not only older versions, but also, for the most part, do not work
   well.  If you are interested in developing under Darwin, we
   recommend that you obtain and install replacement versions of what
   are normally installed on Darwin (and OS X, as of v10.1.5).  If
   you build your own versions of autoconf 2.52 and libtool 1.4.2, be
   aware that there are some Darwin specific patches to the official
   code that still must be applied for them to fully work.  A useful
   page to check out is:

      http://fink.sourceforge.net/doc/porting/libtool.php

   Pier Fumagalli also provides pre-built Darwin packages of the
   patched autoconf and libtool suites, available at:

      http://www.apache.org/~pier/macosx/

   You will note that GNU libtool should actually be installed as
   glibtool, to avoid conflict with a Darwin program of the same
   name.  Pier's packages have this change already.  All files are
   installed under /usr/local/ so to use these versions, and be sure
   that /usr/local/bin is earlier in your PATH.

   There have been some reports that autoconf 2.52 prevents Apache's
   build system from correctly handling passing multi-value envvars
   to the build system (eg: CFLAGS="-g -O3" ./configure),  causing
   errors.  Use of bash does not seem to help in this situation.  If
   this affects you, downgrading to autoconf 2.13 (which is installed
   on Darwin) will help.

==========
  FreeBSD:
   autoconf 2.52 creates scripts that are incompatible with the Posix
   shell implementation (/bin/sh) on FreeBSD.  Be sure to use v2.13
   of autoconf.

================
  HP-UX:
   The dlopen() system call in HP-UX has problems when loading/unloading
   C++ modules. The problem can be resolved by using shl_load() instead
   of dlopen(). This is fixed in the Apache 2.0.44 release.
   To enable loading of C++ modules, the httpd binary has to be linked with
   the following libraries :

   HP-UX (11.0 / 11i):
      When using shl_load        : "cpprt0_stub.s -lcl"
      When using dlopen          : "cpprt0_stub.s -lcl -lCsup"

   HP-UX (11i version 1.5 and greater):
      When using dlopen/shl_load : "cpprt0_stub.s -lcl -lunwind"

   The cpprt0_stub.s can be downloaded from the web site :
      http://h21007.www2.hp.com/hpux-devtools/CXX/hpux-devtools.0107/0083.html

   Compile cpprt0_stub.s with the PIC option
     cc -c +z cpprt0_stub.s
       - OR -
     gcc -c -fPIC cpprt0_stub.s

================
  AIX, using the vendor C compiler with optimization:
    There is an issue with compiling server/core.c with optimization enabled
    which has been seen with C for AIX 5.0.2.3 and above.  (5.0.2.0, 5.0.2.1,
    and 5.0.2.2 have an additional problem with Apache 2.0.x, so either upgrade 
    the compiler or don't use optimization in order to avoid it.)

    cc_r works fine with -O2 but xlc_r does not.  In order to use xlc_r with
    -O2, apply the patch at 

    http://www.apache.org/dist/httpd/patches/apply_to_2.0.49/aix_xlc_optimization.patch

    (That patch works with many recent levels of Apache 2+.)
