
                          Apache HTTP Server

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

================
  Darwin (OS X):
   Apache 2 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 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.52 and (g)libtool 1.4.2.

   You will note that GNU libtool should actually be installed as
   glibtool, to avoid conflict with a Darwin program of the same
   name.

   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.

   With Leopard (at least up to 10.5.2), when running configure
   you will likely see errors such as:

      rm: conftest.dSYM: is a directory

   This is a known issue and will be fixed in a later version of the
   autoconf suite. These errors can be safely ignored.

   For later versions of OS X, (10.8 and 10.9), be sure to have Xcode
   AND Xcode Command Line Tools installed. httpd will built both with
   gcc and clang.
   
==========
  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.

   Threaded MPMs are not supported on FreeBSD 4.x.  Current releases of
   FreeBSD 5.x (5.2 or later) support threaded MPMs correctly.  You must pass
   '--enable-threads=yes' to APR's configure in order to enable threads.
   Additionally, you must use libthr or libkse via libmap.conf as the default
   libc_r is still broken as of this writing.  Please consult the man page for
   libmap.conf for more details about configuring libthr or libkse.
================
  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+.)

================
  Solaris:

    On Solaris, better performance may be achieved by using the Sun Studio
    compiler instead of gcc.  As of version 11, it is now free (registration
    required).  Download the compiler from:

    http://developers.sun.com/prodtech/cc/downloads/index.jsp

    If you use Sun Studio, the following compiler flags (CFLAGS) are
    recommended:

      -XO4 -xchip=generic

================
  Ubuntu:

    You will need to ensure that you have either libtool 1.5.6
    or 2.2.6b, or later. Expat 2.0.1 and PCRE 8.02 are also
    recommended to be installed. If building PCRE from source,
    you'll also need g++.
