<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="configure.xml.meta">
<parentdocument href="./">Programs</parentdocument>

  <title>configure - Configure the source tree</title>

<summary>
    <p>The <code>configure</code> script configures the source tree
    for compiling and installing the Apache HTTP Server on your
    particular platform. Various options allow the compilation of a
    server corresponding to your personal requirements.</p>

    <p>This script, included in the root directory of the source
    distribution, is for compilation on Unix and Unix-like systems
    only. For other platforms, see the <a
    href="../platform/">platform</a> documentation.</p>
</summary>

<seealso><a href="../install.html">Compiling and Installing</a></seealso>

<section id="synopsis"><title>Synopsis</title>
    <p>You should call the <code>configure</code> script from within the
    root directory of the distribution.</p>

    <p><code><strong>./configure</strong> [<var>OPTION</var>]...
    [<var>VAR</var>=<var>VALUE</var>]...</code></p>

    <p>To assign environment variables (e.g. <code>CC</code>,
    <code>CFLAGS</code> ...), specify them as
    <code><var>VAR</var>=<var>VALUE</var></code>. See <a href="#env">below</a>
    for descriptions of some of the useful variables.</p>
</section>

<section id="options"><title>Options</title>
  <ul>
    <li><a href="#configurationoptions">Configuration options</a></li>
    <li><a href="#installationdirectories">Installation directories</a></li>
    <li><a href="#systemtypes">System types</a></li>
    <li><a href="#optionalfeatures">Optional features</a></li>
    <li><a href="#supportopt">Options for support programs</a></li>
  </ul>

  <section id="configurationoptions"><title>Configuration options</title>

    <p>The following options influence the behavior of
    <code>configure</code> itself.</p>

    <dl>
      <dt><code>-C</code></dt>
      <dt><code>--config-cache</code></dt>
      <dd>This is an alias for <code>--cache-file=config.cache</code></dd>

      <dt><code>--cache-file=<var>FILE</var></code></dt>
      <dd>The test results will be cached in file <var>FILE</var>.
        This option is disabled by default.</dd>

      <dt><code>-h</code></dt>
      <dt><code>--help [short|recursive]</code></dt>
      <dd>Output the help and exit. With the argument <code>short</code> only
        options specific to this package will displayed. The argument
        <code>recursive</code> displays the short help of all the included
        packages.</dd>

      <dt><code>-n</code></dt>
      <dt><code>--no-create</code></dt>
      <dd>The <code>configure</code> script is run normally but does
        not create output files. This is useful to check the test results
        before generating makefiles for compilation.</dd>

      <dt><code>-q</code></dt>
      <dt><code>--quiet</code></dt>
      <dd>Do not print <code>checking ...</code> messages during the
        configure process.</dd>

      <dt><code>--srcdir=<var>DIR</var></code></dt>
      <dd>Defines directory <var>DIR</var> to be the source file directory.
        Default is the directory where <code>configure</code> is located, or
        the parent directory.</dd>

      <dt><code>--silent</code></dt>
      <dd>Same as <code>--quiet</code></dd>

      <dt>-V</dt>
      <dt>--version</dt>
      <dd>Display copyright information and exit.</dd>
    </dl>
  </section>

  <section id="installationdirectories"><title>Installation
    directories</title>

    <p>These options define the installation directory. The installation
      tree depends on the selected layout.</p>

    <dl>
      <dt><code>--prefix=<var>PREFIX</var></code></dt>
      <dd>Install architecture-independent files in <var>PREFIX</var>.
        By default the installation directory is set to
        <code>/usr/local/apache2</code>.</dd>

      <dt><code>--exec-prefix=<var>EPREFIX</var></code></dt>
      <dd>Install architecture-dependent files in <var>EPREFIX</var>.
        By default the installation directory is set to the
        <var>PREFIX</var> directory.</dd>
    </dl>

    <p>By default, <code>make install</code> will install all the files in
      <code>/usr/local/apache2/bin</code>, <code>/usr/local/apache2/lib</code>
      etc. You can specify an installation prefix other than
      <code>/usr/local/apache2</code> using <code>--prefix</code>,
      for instance <code>--prefix=$HOME</code>.</p>

    <section id="layout"><title>Define a directory layout</title>
      <dl>
        <dt><code>--enable-layout=<var>LAYOUT</var></code></dt>
        <dd>Configure the source code and build scripts to assume an
          installation tree based on the layout <var>LAYOUT</var>. This allows
          you to separately specify the locations for each type of file within
          the Apache HTTP Server installation. The <code>config.layout</code>
          file contains several example configurations, and you can also create
          your own custom configuration following the examples. The different
          layouts in this file are grouped into <code>&lt;Layout
            FOO&gt;...&lt;/Layout&gt;</code> sections and referred to by name as
          in <code>FOO</code>. The default layout is <code>Apache</code>.</dd>
      </dl>
    </section>

    <section id="directoryfinetuning"><title>Fine tuning of the installation
      directories</title>

      <p>For better control of the installation directories, use the options
        below. Please note that the directory defaults are set by
        <code>autoconf</code> and are overwritten by the corresponding layout
        setting.</p>

      <dl>
        <!-- only apr-config and apu-config are installed at bindir.
        everything else is stored at sbindir. ==> clarify/change this -->
        <dt><code>--bindir=<var>DIR</var></code></dt>
        <dd>Install user executables in <var>DIR</var>. The user executables
          are supporting programs like <program>htpasswd</program>,
          <program>dbmmanage</program>, etc. which are useful for site
          administrators. By default <var>DIR</var> is set to
          <code><var>EPREFIX</var>/bin</code>.</dd>

        <dt><code>--datadir=<var>DIR</var></code></dt>
        <dd>Install read-only architecture-independent data in <var>DIR</var>.
          By default <code>datadir</code> is set to
          <code><var>PREFIX</var>/share</code>. This option is offered by
          <code>autoconf</code> and currently unused.</dd>

        <dt><code>--includedir=<var>DIR</var></code></dt>
        <dd>Install C header files in <var>DIR</var>. By default
          <code>includedir</code> is set to
          <code><var>EPREFIX</var>/include</code>.</dd>

        <dt><code>--infodir=<var>DIR</var></code></dt>
        <dd>Install info documentation in <var>DIR</var>.
          By default <code>infodir</code> is set to
          <code><var>PREFIX</var>/info</code>. This option is currently
          unused.</dd>

        <dt><code>--libdir=<var>DIR</var></code></dt>
        <dd>Install object code libraries in <var>DIR</var>. By default
          <code>libdir</code> is set to
          <code><var>EPREFIX</var>/lib</code>.</dd>

        <dt><code>--libexecdir=<var>DIR</var></code></dt>
        <dd>Install the program executables (i.e., shared modules) in
          <var>DIR</var>. By default <code>libexecdir</code> is set to
          <code><var>EPREFIX</var>/modules</code>.</dd>

        <dt><code>--localstatedir=<var>DIR</var></code></dt>
        <dd>Install modifiable single-machine data in <var>DIR</var>.
          By default <code>localstatedir</code> is set to
          <code><var>PREFIX</var>/var</code>. This option is offered by
          <code>autoconf</code> and currently unused.</dd>

        <dt><code>--mandir=<var>DIR</var></code></dt>
        <dd>Install the man documentation in <var>DIR</var>. By default
          <code>mandir</code> is set to
          <code><var>EPREFIX</var>/man</code>.</dd>

        <dt><code>--oldincludedir=<var>DIR</var></code></dt>
        <dd>Install C header files for non-gcc in <var>DIR</var>.
          By default <code>oldincludedir</code> is set to
          <code>/usr/include</code>. This option is offered by
          <code>autoconf</code> and currently unused.</dd>

        <dt><code>--sbindir=<var>DIR</var></code></dt>
        <dd>Install the system administrator executables in <var>DIR</var>.
          Those are server programs like <program>httpd</program>,
          <program>apachectl</program>, <program>suexec</program>, etc. which
          are necessary to run the Apache HTTP Server. By default
          <code>sbindir</code> is set to
          <code><var>EPREFIX</var>/sbin</code>.</dd>

        <dt><code>--sharedstatedir=<var>DIR</var></code></dt>
        <dd>Install modifiable architecture-independent data in <var>DIR</var>.
          By default <code>sharedstatedir</code> is set to
          <code><var>PREFIX</var>/com</code>. This option is offered by
          <code>autoconf</code> and currently unused.</dd>

        <dt><code>--sysconfdir=<var>DIR</var></code></dt>
        <dd>Install read-only single-machine data like the server configuration
          files <code>httpd.conf</code>, <code>mime.types</code>, etc. in
          <var>DIR</var>. By default <code>sysconfdir</code> is set to
          <code><var>PREFIX</var>/conf</code>.</dd>
      </dl>
    </section>
  </section>

  <section id="systemtypes"><title>System types</title>

    <p>These options are used to cross-compile the Apache HTTP Server to run on
      another system. In normal cases, when building and running the server on
      the same system, these options are not used.</p>

    <dl>
      <dt><code>--build=<var>BUILD</var></code></dt>
      <dd>Defines the system type of the system on which the tools are being
        built. It defaults to the result of the script
        <code>config.guess</code>.</dd>

      <dt><code>--host=<var>HOST</var></code></dt>
      <dd>Defines the system type of the system on which the server will run.
        <var>HOST</var> defaults to <var>BUILD</var>.</dd>

      <dt><code>--target=<var>TARGET</var></code></dt>
      <dd>Configure for building compilers for the system type
        <var>TARGET</var>. It defaults to <var>HOST</var>. This option is
        offered by <code>autoconf</code> and not necessary for the Apache HTTP
        Server.</dd>
    </dl>
  </section>

  <section id="optionalfeatures"><title>Optional Features</title>

    <p>These options are used to fine tune the features your HTTP server will
      have.</p>

    <section id="generaloptfeat"><title>General syntax</title>
      <p>Generally you can use the following syntax to enable or disable a
        feature:</p>

      <dl>
        <dt><code>--disable-<var>FEATURE</var></code></dt>
        <dd>Do not include <var>FEATURE</var>. This is the same as
          <code>--enable-<var>FEATURE</var>=no</code>.</dd>

        <dt><code>--enable-<var>FEATURE</var>[=<var>ARG</var>]</code></dt>
        <dd>Include <var>FEATURE</var>. The default value for <var>ARG</var>
          is <code>yes</code>.</dd>

        <dt><code>--enable-<var>MODULE</var>=shared</code></dt>
        <dd>The corresponding module will be build as DSO module.
            By default enabled modules are linked dynamically.</dd>

        <dt><code>--enable-<var>MODULE</var>=static</code></dt>
        <dd>The corresponding module will be linked statically.</dd>
      </dl>

      <note><title>Note</title>
        <code>configure</code> will not complain about
        <code>--enable-<var>foo</var></code> even if <var>foo</var> doesn't
        exist, so you need to type carefully.
      </note>
    </section>

    <section id="choosemodules"><title>Choosing modules to compile</title>
      <p>Most modules are compiled by default and have to be disabled
        explicitly or by using the keyword <code>few</code> 
        (see <code>--enable-modules</code>, <code>--enable-mods-shared</code>
        and <code>--enable-mods-static</code> below for further explanation)
        or <code>--enable-modules=none</code> to be removed as a group.</p>

        <p>Other modules are not compiled by default and have to be enabled
        explicitly or by using the keywords <code>all</code> or
        <code>reallyall</code> to be available.</p>

        <p>To find out which modules are compiled by default, run
        <code>./configure -h</code> or <code>./configure --help</code>
        and look under <code>Optional Features</code>.  Suppose you
        are interested in <code>mod_example1</code> and
        <code>mod_example2</code>, and you
        see this:</p>

        <example><pre>Optional Features:
  ...
  --disable-example1     example module 1
  --enable-example2      example module 2
  ...</pre></example>

        <p>Then <code>mod_example1</code> is enabled by default,
        and you would use <code>--disable-example1</code> to not
        compile it.  <code>mod_example2</code> is disabled by
        default, and you would use <code>--enable-example2</code>
        to compile it.</p>
    </section>

    <section id="mpms"><title>Multi-Processing Modules</title>
      <p><a href="../mpm.html">Multi-Processing Modules</a>, or MPMs, implement
        the basic behavior of the server.  A single MPM must be active in order
        for the server to function.  The list of available MPMs appears on the
        <a href="../mod/">module index page</a>.</p>

      <p>MPMs can be built as DSOs for dynamic loading or statically linked with
        the server, and are enabled using the following options:</p>

      <dl>
        <dt><code>--with-mpm=MPM</code></dt>
        <dd>
          <p>Choose the default MPM for your server.  If MPMs are built as DSO
            modules (see <code>--enable-mpms-shared</code>), this directive
            selects the MPM which will be loaded in the default configuration
            file.  Otherwise, this directive selects the only available MPM,
            which will be statically linked into the server.</p>
          <p>If this option is omitted, the <a href="../mpm.html#defaults">default
          MPM</a> for your operating system will be used.</p>
        </dd>

        <dt><code>--enable-mpms-shared=<var>MPM-LIST</var></code></dt>
        <dd>
          <p>Enable a list of MPMs as dynamic shared modules.  One of these
            modules must be loaded dynamically using the
            <directive module="mod_so">LoadModule</directive> directive.</p>
          <p><var>MPM-LIST</var> is a space-separated list of MPM names
            enclosed by quotation marks.  For example:</p>
          <example>
            --enable-mpms-shared='prefork worker'
          </example>
          <p>Additionally you can use the special keyword <code>all</code>,
            which will select all MPMs which support dynamic loading on the
            current platform and build them as DSO modules.  For example:</p>
          <example>
            --enable-mpms-shared=all
          </example>
	</dd>
      </dl>
    </section>

    <section id="modules"><title>Third-party modules</title>
      <p>To add additional third-party modules use the following options:</p>

      <dl>
        <dt><code>--with-module=<var>module-type</var>:<var>module-file</var>[,
          <var>module-type</var>:<var>module-file</var>]</code></dt>
        <dd><p>Add one or more third-party modules to the list of statically linked
            modules. The module source file <code><var>module-file</var></code>
            will be searched in the <code>modules/<var>module-type</var></code>
            subdirectory of your Apache HTTP server source tree. If it is not found
            there <code>configure</code> is considering <var>module-file</var> to be
            an absolute file path and tries to copy the source file into the
            <var>module-type</var> subdirectory. If the subdirectory doesn't
            exist it will be created and populated with a standard
            <code>Makefile.in</code>.</p>
          <p>This option is useful to add small external modules consisting of
            one source file. For more complex modules you should read the
            vendor's documentation.</p>
          <note><title>Note</title>
            If you want to build a DSO module instead of a statically linked
            use <program>apxs</program>.</note>
        </dd>
      </dl>
    </section>

    <section id="otheroptfeat"><title>Cumulative and other options</title>
      <dl>
        <dt><code>--enable-maintainer-mode</code></dt>
        <dd>Turn on debugging and compile time warnings
            and load all compiled modules.</dd>

        <dt><code>--enable-mods-shared=<var>MODULE-LIST</var></code></dt>
        <dd>
          <p>Defines a list of modules to be enabled and build as dynamic
            shared modules. This mean, these module have to be loaded
            dynamically by using the  <directive
            module="mod_so">LoadModule</directive> directive.</p>
          <p><var>MODULE-LIST</var> is a space separated list of modulenames
            enclosed by quotation marks. The module names are given without the
            preceding <code>mod_</code>. For example:</p>
          <example>
            --enable-mods-shared='headers rewrite dav'
          </example>
          <p>Additionally you can use the special keywords <code>reallyall</code>,
            <code>all</code>, <code>most</code> and <code>few</code>.
            For example,</p>
          <example>
            --enable-mods-shared=most
          </example>
          <p>will compile most modules and build them as DSO modules,</p>
          <example>
            --enable-mods-shared=few
          </example>
          <p>will only compile a very basic set of modules.</p>
          <p>The default set is <code>most</code>.</p>
            <!-- See <a href="../install/enabledmodules.html">Overview of
              enabled modules</a> for further information. -->
          <p>The <directive module="mod_so">LoadModule</directive> directives for
          the chosen modules will be automatically generated in the main
          configuration file. By default, all those directives will be commented
          out except for the modules that are either required or explicitly selected
          by a configure <code>--enable-foo</code> argument. You can change the set
          of loaded modules by activating or deactivating the <directive
          module="mod_so">LoadModule</directive> directives in
          <code>httpd.conf</code>. In addition the
          <directive module="mod_so">LoadModule</directive> directives for all
          built modules can be activated via the configure option
          <code>--enable-load-all-modules</code>.</p>
        </dd>

        <dt><code>--enable-mods-static=<var>MODULE-LIST</var></code></dt>
        <dd>This option behaves similar to <code>--enable-mods-shared</code>,
          but will link the given modules statically. This mean, these modules
          will always be present while running <program>httpd</program>. They need
          not be loaded with <directive
          module="mod_so">LoadModule</directive>.</dd>

        <dt><code>--enable-modules=<var>MODULE-LIST</var></code></dt>
        <dd>This option behaves like to <code>--enable-mods-shared</code>,
          and will also link the given modules dynamically. The special
          keyword <code>none</code> disables the build of all modules.</dd>

        <dt><code>--enable-v4-mapped</code></dt>
        <dd>Allow IPv6 sockets to handle IPv4 connections.</dd>

        <dt><code>--with-port=<var>PORT</var></code></dt>
        <dd>This defines the port on which <program>httpd</program> will listen.
          This port number is used when generating the configuration file
          <code>httpd.conf</code>. The default is 80.</dd>

        <dt><code>--with-program-name</code></dt>
        <dd>Define an alternative executable name. The default is
          <code>httpd</code>.</dd>
      </dl>
    </section>
  </section>

  <section id="packages"><title>Optional packages</title>
    <p>These options are used to define optional packages.</p>

    <section id="generalpackages"><title>General syntax</title>
      <p>Generally you can use the following syntax to define an optional
        package:</p>

      <dl>
        <dt><code>--with-<var>PACKAGE</var>[=<var>ARG</var>]</code></dt>
        <dd>Use the package <var>PACKAGE</var>. The default value for
          <var>ARG</var> is <code>yes</code>.</dd>

        <dt><code>--without-<var>PACKAGE</var></code></dt>
        <dd>Do not use the package <var>PACKAGE</var>. This is the same as
          <code>--with-<var>PACKAGE</var>=no</code>. This option is provided by
          <code>autoconf</code> but not very useful for the Apache HTTP
          Server.</dd>
      </dl>
    </section>

    <!-- options not known are passed to packages?
    are there other important options for packages? -->

    <section id="packageopt"><title>Specific packages</title>
      <dl>
        <dt><code>--with-apr=<var>DIR</var>|<var>FILE</var></code></dt>
        <dd>The <glossary ref="apr">Apache Portable Runtime</glossary> (APR)
          is part of the httpd
          source distribution and will automatically be build together with the
          HTTP server. If you want to use an already installed APR instead you
          have to tell <code>configure</code> the path to the
          <code>apr-config</code> script. You may set the absolute path and name
          or the directory to the installed APR. <code>apr-config</code> must
          exist within this directory or the subdirectory
          <code>bin</code>.</dd>

        <dt><code>--with-apr-util=<var>DIR</var>|<var>FILE</var></code></dt>
        <dd>The Apache Portable Runtime Utilities (APU) are part of the
          httpd source distribution and will automatically be build
          together with the HTTP server. If you want to use an already installed
          APU instead you have to tell <code>configure</code> the path to the
          <code>apu-config</code> script. You may set the absolute path and name
          or the directory to the installed APU. <code>apu-config</code> must
          exist within this directory or the subdirectory
          <code>bin</code>.</dd>

        <dt><code>--with-ssl=<var>DIR</var></code></dt>
        <dd>If <module>mod_ssl</module> has been enabled <code>configure</code>
          searches for an installed OpenSSL. You can set the directory path
          to the SSL/TLS toolkit instead.</dd>

        <dt><code>--with-z=<var>DIR</var></code></dt>
        <dd><code>configure</code> searches automatically for an installed
          <code>zlib</code> library if your source configuration requires one
          (e.g., when <module>mod_deflate</module> is enabled). You can set the
          directory path to the compression library instead.</dd>
      </dl>

      <p>Several features of the Apache HTTP Server, including
        <module>mod_authn_dbm</module> and <module>mod_rewrite</module>'s DBM
        <directive module="mod_rewrite">RewriteMap</directive> use simple
        key/value databases for quick lookups of information. SDBM is included
        in the APU, so this database is always available. If you would like to
        use other database types, use the following options to enable
        them:</p>

      <dl>
        <dt><code>--with-gdbm[=<var>path</var>]</code></dt>
        <dd>If no <var>path</var> is specified, <code>configure</code> will
          search for the include files and libraries of a GNU DBM
          installation in the usual search paths. An explicit
          <var>path</var> will cause <code>configure</code> to look in
          <code><var>path</var>/lib</code> and
          <code><var>path</var>/include</code> for the relevant files.
          Finally, the <var>path</var> may specify specific include and
          library paths separated by a colon.</dd>

        <dt><code>--with-ndbm[=<var>path</var>]</code></dt>
        <dd>Like <code>--with-gdbm</code>, but searches for a New DBM
          installation.</dd>

        <dt><code>--with-berkeley-db[=<var>path</var>]</code></dt>
        <dd>Like <code>--with-gdbm</code>, but searches for a Berkeley DB
          installation.</dd>
      </dl>

      <note><title>Note</title>
        <p>The DBM options are provided by the APU and passed through to its
          configuration script. They are useless when using an already
          installed APU defined by <code>--with-apr-util</code>.</p>
        <p>You may use more then one DBM implementation together with your
          HTTP server. The appropriated DBM type will be configured within
          the runtime configuration at each time.</p>
      </note>
    </section>
  </section>

  <section id="supportopt"><title>Options for support programs</title>
    <dl>
      <dt><code>--enable-static-support</code></dt>
      <dd>Build a statically linked version of the support binaries. This
        means, a stand-alone executable will be built with all the necessary
        libraries integrated. Otherwise the support binaries are linked
        dynamically by default.</dd>

      <dt><code>--enable-suexec</code></dt>
      <dd>Use this option to enable <program>
        suexec</program>, which allows you to set
        uid and gid for spawned processes. <strong>Do not use this
        option unless you understand all the security implications of
        running a suid binary on your server.</strong> Further options
        to configure <program>suexec</program> are described <a
        href="#suexec">below</a>.</dd>
    </dl>

    <p>It is possible to create a statically linked binary of a single
      support program by using the following options:</p>

    <dl>
      <dt><code>--enable-static-ab</code></dt>
      <dd>Build a statically linked version of <program>
        ab</program>.</dd>

      <!-- missing documentation for chechgid -->
      <dt><code>--enable-static-checkgid</code></dt>
      <dd>Build a statically linked version of <code>checkgid</code>.</dd>

      <dt><code>--enable-static-htdbm</code></dt>
      <dd>Build a statically linked version of <program>
        htdbm</program>.</dd>

      <dt><code>--enable-static-htdigest</code></dt>
      <dd>Build a statically linked version of <program>
        htdigest</program>.</dd>

      <dt><code>--enable-static-htpasswd</code></dt>
      <dd>Build a statically linked version of <program>
        htpasswd</program>.</dd>

      <dt><code>--enable-static-logresolve</code></dt>
      <dd>Build a statically linked version of <program>
        logresolve</program>.</dd>

      <dt><code>--enable-static-rotatelogs</code></dt>
      <dd>Build a statically linked version of <program>
        rotatelogs</program>.</dd>
    </dl>

    <section id="suexec">
      <title><code>suexec</code> configuration options</title>
      <p>The following options are used to fine tune the behavior of <program>
        suexec</program>. See <a
        href="suexec.html#install">Configuring and installing suEXEC</a>
        for further information.</p>

      <dl>
        <dt><code>--with-suexec-bin</code></dt>
        <dd>This defines the path to <program>suexec</program> binary.
        Default is <code>--sbindir</code> (see <a href="#directoryfinetuning"
        >Fine tuning of installation directories</a>).</dd>

        <dt><code>--with-suexec-caller</code></dt>
        <dd>This defines the user allowed to call <program>suexec</program>.
          It should be the same as the user under which
          <program>httpd</program> normally runs.</dd>

        <dt><code>--with-suexec-docroot</code></dt>
        <dd>This defines the directory tree under which <program>
          suexec</program> access is allowed for executables. Default value is
          <code>--datadir/htdocs</code>.</dd>

        <dt><code>--with-suexec-gidmin</code></dt>
        <dd>Define this as the lowest GID allowed to be a target user for
          <program>suexec</program>. The default value is 100.</dd>

        <dt><code>--with-suexec-logfile</code></dt>
        <dd>This defines the filename of the <program>suexec</program> logfile.
          By default the logfile is named <code>suexec_log</code> and located in
          <code>--logfiledir</code>.</dd>

        <dt><code>--with-suexec-safepath</code></dt>
        <dd>Define the value of the environment variable <code>PATH</code> to
          be set for processes started by <program>suexec</program>. Default
          value is <code>/usr/local/bin:/usr/bin:/bin</code>.</dd>

        <dt><code>--with-suexec-userdir</code></dt>
        <dd>This defines the subdirectory under the user's directory that
          contains all executables for which <program>suexec</program> access
          is allowed. This setting is necessary when you want to use
          <program>suexec</program> together with user-specific directories (as
          provided by <module>mod_userdir</module>). The default is
          <code>public_html</code>.</dd>

        <dt><code>--with-suexec-uidmin</code></dt>
        <dd>Define this as the lowest UID allowed to be a target user for
          <program>suexec</program>. The default value is 100.</dd>

        <dt><code>--with-suexec-umask</code></dt>
        <dd>Set <code>umask</code> for processes started by
          <program>suexec</program>. It defaults to your system settings.</dd>
      </dl>
    </section>
  </section>
</section>

<section id="env"><title>Environment variables</title>
  <p>There are some useful environment variables to override the choices made by
    <code>configure</code> or to help it to find libraries and programs with
    nonstandard names or locations.</p>

  <!-- are these all useful variables? -->
  <dl>
    <dt><code>CC</code></dt>
    <dd>Define the C compiler command to be used for compilation.</dd>

    <dt><code>CFLAGS</code></dt>
    <dd>Set C compiler flags you want to use for compilation.</dd>

    <dt><code>CPP</code></dt>
    <dd>Define the C preprocessor command to be used.</dd>

    <dt><code>CPPFLAGS</code></dt>
    <dd>Set C/C++ preprocessor flags, e.g. <code>-I<var>includedir</var></code>
      if you have headers in a nonstandard directory <var>includedir</var>.</dd>

    <dt><code>LDFLAGS</code></dt>
    <dd>Set linker flags, e.g. <code>-L<var>libdir</var></code> if you have
      libraries in a nonstandard directory <var>libdir</var>.</dd>
  </dl>
</section>
</manualpage>
