<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>configure - Configure the source tree - Apache HTTP Server Version 2.4</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.4</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>configure - Configure the source tree</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/programs/configure.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/programs/configure.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ko/programs/configure.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/programs/configure.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div>

    <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>
</div>
<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#env">Environment variables</a></li>
</ul><h3>See also</h3><ul class="seealso"><li><a href="../install.html">Compiling and Installing</a></li><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
    <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>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="options" id="options">Options</a></h2>
  <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>

  <h3><a name="configurationoptions" id="configurationoptions">Configuration options</a></h3>

    <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>
  

  <h3><a name="installationdirectories" id="installationdirectories">Installation
    directories</a></h3>

    <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>

    <h4><a name="layout" id="layout">Define a directory layout</a></h4>
      <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>
    

    <h4><a name="directoryfinetuning" id="directoryfinetuning">Fine tuning of the installation
      directories</a></h4>

      <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>
        
        <dt><code>--bindir=<var>DIR</var></code></dt>
        <dd>Install user executables in <var>DIR</var>. The user executables
          are supporting programs like <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code>,
          <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code>, 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 <code class="program"><a href="../programs/httpd.html">httpd</a></code>,
          <code class="program"><a href="../programs/apachectl.html">apachectl</a></code>, <code class="program"><a href="../programs/suexec.html">suexec</a></code>, 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>
    
  

  <h3><a name="systemtypes" id="systemtypes">System types</a></h3>

    <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>
  

  <h3><a name="optionalfeatures" id="optionalfeatures">Optional Features</a></h3>

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

    <h4><a name="generaloptfeat" id="generaloptfeat">General syntax</a></h4>
      <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 built as a 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>

      <div class="note"><h3>Note</h3>
        <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.
      </div>
    

    <h4><a name="choosemodules" id="choosemodules">Choosing modules to compile</a></h4>
      <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>

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

        <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>
    

    <h4><a name="mpms" id="mpms">Multi-Processing Modules</a></h4>
      <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
            <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive.</p>
          <p><var>MPM-LIST</var> is a space-separated list of MPM names
            enclosed by quotation marks.  For example:</p>
          <div class="example"><p><code>
            --enable-mpms-shared='prefork worker'
          </code></p></div>
          <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>
          <div class="example"><p><code>
            --enable-mpms-shared=all
          </code></p></div>
	</dd>
      </dl>
    

    <h4><a name="modules" id="modules">Third-party modules</a></h4>
      <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>
          <div class="note"><h3>Note</h3>
            If you want to build a DSO module instead of a statically linked
            use <code class="program"><a href="../programs/apxs.html">apxs</a></code>.</div>
        </dd>
      </dl>
    

    <h4><a name="otheroptfeat" id="otheroptfeat">Cumulative and other options</a></h4>
      <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  <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> 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>
          <div class="example"><p><code>
            --enable-mods-shared='headers rewrite dav'
          </code></p></div>
          <p>Additionally you can use the special keywords <code>reallyall</code>,
            <code>all</code>, <code>most</code> and <code>few</code>.
            For example,</p>
          <div class="example"><p><code>
            --enable-mods-shared=most
          </code></p></div>
          <p>will compile most modules and build them as DSO modules,</p>
          <div class="example"><p><code>
            --enable-mods-shared=few
          </code></p></div>
          <p>will only compile a very basic set of modules.</p>
          <p>The default set is <code>most</code>.</p>
            
          <p>The <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> 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 <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directives in
          <code>httpd.conf</code>. In addition the
          <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> 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 <code class="program"><a href="../programs/httpd.html">httpd</a></code>. They need
          not be loaded with <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>.</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 <code class="program"><a href="../programs/httpd.html">httpd</a></code> 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>
    
  

  <h3><a name="packages" id="packages">Optional packages</a></h3>
    <p>These options are used to define optional packages.</p>

    <h4><a name="generalpackages" id="generalpackages">General syntax</a></h4>
      <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>
    

    

    <h4><a name="packageopt" id="packageopt">Specific packages</a></h4>
      <dl>
        <dt><code>--with-apr=<var>DIR</var>|<var>FILE</var></code></dt>
        <dd>The <a class="glossarylink" href="../glossary.html#apr" title="see glossary">Apache Portable Runtime</a> (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 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> 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 <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> is enabled). You can set the
          directory path to the compression library instead.</dd>
      </dl>

      <p>Several features of the Apache HTTP Server, including
        <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> and <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>'s DBM
        <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> 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>

      <div class="note"><h3>Note</h3>
        <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>
      </div>
    
  

  <h3><a name="supportopt" id="supportopt">Options for support programs</a></h3>
    <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 <code class="program"><a href="../programs/suexec.html">suexec</a></code>, 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 <code class="program"><a href="../programs/suexec.html">suexec</a></code> 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 <code class="program"><a href="../programs/ab.html">ab</a></code>.</dd>

      
      <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 <code class="program"><a href="../programs/htdbm.html">htdbm</a></code>.</dd>

      <dt><code>--enable-static-htdigest</code></dt>
      <dd>Build a statically linked version of <code class="program"><a href="../programs/htdigest.html">htdigest</a></code>.</dd>

      <dt><code>--enable-static-htpasswd</code></dt>
      <dd>Build a statically linked version of <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code>.</dd>

      <dt><code>--enable-static-logresolve</code></dt>
      <dd>Build a statically linked version of <code class="program"><a href="../programs/logresolve.html">logresolve</a></code>.</dd>

      <dt><code>--enable-static-rotatelogs</code></dt>
      <dd>Build a statically linked version of <code class="program"><a href="../programs/rotatelogs.html">rotatelogs</a></code>.</dd>
    </dl>

    <h4><a name="suexec" id="suexec"><code>suexec</code> configuration options</a></h4>
      
      <p>The following options are used to fine tune the behavior of <code class="program"><a href="../programs/suexec.html">suexec</a></code>. 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 <code class="program"><a href="../programs/suexec.html">suexec</a></code> 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 <code class="program"><a href="../programs/suexec.html">suexec</a></code>.
          It should be the same as the user under which
          <code class="program"><a href="../programs/httpd.html">httpd</a></code> normally runs.</dd>

        <dt><code>--with-suexec-docroot</code></dt>
        <dd>This defines the directory tree under which <code class="program"><a href="../programs/suexec.html">suexec</a></code> 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
          <code class="program"><a href="../programs/suexec.html">suexec</a></code>. The default value is 100.</dd>

        <dt><code>--with-suexec-logfile</code></dt>
        <dd>This defines the filename of the <code class="program"><a href="../programs/suexec.html">suexec</a></code> 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 <code class="program"><a href="../programs/suexec.html">suexec</a></code>. 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 <code class="program"><a href="../programs/suexec.html">suexec</a></code> access
          is allowed. This setting is necessary when you want to use
          <code class="program"><a href="../programs/suexec.html">suexec</a></code> together with user-specific directories (as
          provided by <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>). 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
          <code class="program"><a href="../programs/suexec.html">suexec</a></code>. The default value is 100.</dd>

        <dt><code>--with-suexec-umask</code></dt>
        <dd>Set <code>umask</code> for processes started by
          <code class="program"><a href="../programs/suexec.html">suexec</a></code>. It defaults to your system settings.</dd>
      </dl>
    
  
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="env" id="env">Environment variables</a></h2>
  <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>

  
  <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>
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/programs/configure.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/programs/configure.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ko/programs/configure.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/programs/configure.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.4/programs/configure.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else { 
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2025 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>