<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.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.
-->

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

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

<summary>
    <p>The files in the <code>modules/examples</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_hooks.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-hooks-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_hooks module</title>

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

    <ol>
      <li>
        Run <program>configure</program> with <code>--enable-example-hooks</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/examples/mod_example_hooks.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_hooks" from
            <code>modules/examples/config.m4</code>.</li>
          <li>Replace the first argument "example_hooks" 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_hooks</code> Module</title>

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

    <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>
<highlight language="config">
   AddHandler example-hooks-handler .example
</highlight>

    <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>
<override>Options</override>

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