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

<!--
 Copyright 2002-2005 The Apache Software Foundation or its licensors, as
 applicable.

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

<modulesynopsis metafile="mod_example.xml.meta">

<name>mod_example</name>
<description>Illustrates the Apache module API</description>
<status>Experimental</status>
<sourcefile>mod_example.c</sourcefile>
<identifier>example_module</identifier>

<summary>
    <p>Some files in the <code>modules/experimental</code> directory
    under the Apache distribution directory tree are provided as an
    example to those that wish to write modules that use the Apache
    API.</p>

    <p>The main file is <code>mod_example.c</code>, which
    illustrates all the different callback mechanisms and call
    syntaxes. By no means does an add-on module need to include
    routines for all of the callbacks - quite the contrary!</p>

    <p>The example module is an actual working module. If you link
    it into your server, enable the "example-handler" handler for a
    location, and then browse to that location, you will see a
    display of some of the tracing the example module did as the
    various callbacks were made.</p>
</summary>

<section id="compiling"><title>Compiling the example module</title>

    <p>To include the example module in your server, follow the
    steps below:</p>

    <ol>
      <li>
        Run <program>configure</program> with <code>--enable-example</code>
        option.</li>

      <li>Make the server (run "<code>make</code>").</li>
    </ol>

    <p>To add another module of your own:</p>

    <ol type="A">
      <li><code>cp modules/experimental/mod_example.c
      modules/new_module/<em>mod_myexample.c</em></code></li>

      <li>Modify the file.</li>

      <li>Create <code>modules/new_module/config.m4</code>.
        <ol>
          <li>Add <code>APACHE_MODPATH_INIT(new_module)</code>.</li>
          <li>Copy APACHE_MODULE line with "example" from
            <code>modules/experimental/config.m4</code>.</li>
          <li>Replace the first argument "example" with <em>myexample</em>.</li>
          <li>Replace the second argument with brief description of your module.
            It will be used in <code>configure --help</code>.</li>
          <li>If your module needs additional C compiler flags, linker flags or
            libraries, add them to CFLAGS, LDFLAGS and LIBS accordingly.
            See other <code>config.m4</code> files in modules directory for
            examples.</li>
          <li>Add <code>APACHE_MODPATH_FINISH</code>.</li>
        </ol>
      </li>

      <li>Create <code>module/new_module/Makefile.in</code>.
      If your module doesn't need special build instructions,
      all you need to have in that file is
      <code>include $(top_srcdir)/build/special.mk</code>.</li>

      <li>Run ./buildconf from the top-level directory.</li>

      <li>Build the server with --enable-myexample</li>

    </ol>
</section>

<section id="using"><title>Using the <code>mod_example</code> Module</title>

    <p>To activate the example module, include a block similar to
    the following in your <code>httpd.conf</code> file:</p>
<example>
   &lt;Location /example-info&gt;<br />
       SetHandler example-handler<br />
   &lt;/Location&gt;
</example>

    <p>As an alternative, you can put the following into a <a
    href="core.html#accessfilename"><code>.htaccess</code></a> file
    and then request the file "test.example" from that location:</p>
<example>
   AddHandler example-handler .example
</example>

    <p>After reloading/restarting your server, you should be able
    to browse to this location and see the brief display mentioned
    earlier.</p>
</section>

<directivesynopsis>
<name>Example</name>
<description>Demonstration directive to illustrate the Apache module
API</description>
<syntax>Example</syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>

<usage>
    <p>The <directive>Example</directive> directive just sets a demonstration
    flag which the example module's content handler displays. It
    takes no arguments. If you browse to an URL to which the
    example content-handler applies, you will get a display of the
    routines within the module and how and in what order they were
    called to service the document request. The effect of this
    directive one can observe under the point "<code>Example
    directive declared here: YES/NO</code>".</p>
</usage>
</directivesynopsis>

</modulesynopsis>
