<?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_so.xml.meta">

<name>mod_so</name>
<description>Loading of executable code and
modules into the server at start-up or restart time</description>
<status>Extension</status>
<sourcefile>mod_so.c</sourcefile>
<identifier>so_module</identifier>
<compatibility>This is a Base module (always included) on 
Windows</compatibility>

<summary>

    <p>On selected operating systems this module can be used to
    load modules into Apache at runtime via the <a
    href="../dso.html">Dynamic Shared Object</a> (DSO) mechanism,
    rather than requiring a recompilation.</p>

    <p>On Unix, the loaded code typically comes from shared object
    files (usually with <code>.so</code> extension), on Windows
    this may either the <code>.so</code> or <code>.dll</code>
    extension.</p>

    <note type="warning"><title>Warning</title>
    <p>Apache 1.3 modules cannot be directly used
    with Apache 2.0 - the module must be modified to dynamically
    load or compile into Apache 2.0.</p>
    </note>
</summary>

<section id="windows"><title>Creating Loadable Modules for Windows</title>

    <note><title>Note</title>
    <p>The module name format changed for Windows
    with Apache 1.3.15 and 2.0 - the modules are now named as
    mod_foo.so</p>

    <p>While mod_so still loads modules with
    ApacheModuleFoo.dll names, the new naming convention is
    preferred; if you are converting your loadable module for 2.0,
    please fix the name to this 2.0 convention.</p></note>

    <p>The Apache module API is unchanged between the Unix and
    Windows versions. Many modules will run on Windows with no or
    little change from Unix, although others rely on aspects of the
    Unix architecture which are not present in Windows, and will
    not work.</p>

    <p>When a module does work, it can be added to the server in
    one of two ways. As with Unix, it can be compiled into the
    server. Because Apache for Windows does not have the
    <code>Configure</code> program of Apache for Unix, the module's
    source file must be added to the ApacheCore project file, and
    its symbols must be added to the
    <code>os\win32\modules.c</code> file.</p>

    <p>The second way is to compile the module as a DLL, a shared
    library that can be loaded into the server at runtime, using
    the <code><directive>LoadModule</directive></code>
    directive. These module DLLs can be distributed and run on any
    Apache for Windows installation, without recompilation of the
    server.</p>

    <p>To create a module DLL, a small change is necessary to the
    module's source file: The module record must be exported from
    the DLL (which will be created later; see below). To do this,
    add the <code>AP_MODULE_DECLARE_DATA</code> (defined in the
    Apache header files) to your module's module record definition.
    For example, if your module has:</p>

<example>
    module foo_module;
</example>

    <p>Replace the above with:</p>
<example>
    module AP_MODULE_DECLARE_DATA foo_module;
</example>

    <p>Note that this will only be activated on Windows, so the
    module can continue to be used, unchanged, with Unix if needed.
    Also, if you are familiar with <code>.DEF</code> files, you can
    export the module record with that method instead.</p>

    <p>Now, create a DLL containing your module. You will need to
    link this against the libhttpd.lib export library that is
    created when the libhttpd.dll shared library is compiled. You
    may also have to change the compiler settings to ensure that
    the Apache header files are correctly located. You can find
    this library in your server root's modules directory. It is
    best to grab an existing module .dsp file from the tree to
    assure the build environment is configured correctly, or
    alternately compare the compiler and link options to your
    .dsp.</p>

    <p>This should create a DLL version of your module. Now simply
    place it in the <code>modules</code> directory of your server
    root, and use the <directive>LoadModule</directive>
    directive to load it.</p>

</section>

<directivesynopsis>
<name>LoadFile</name>
<description>Link in the named object file or library</description>
<syntax>LoadFile <em>filename</em> [<em>filename</em>] ...</syntax>
<contextlist>
<context>server config</context>
</contextlist>

<usage>

    <p>The LoadFile directive links in the named object files or
    libraries when the server is started or restarted; this is used
    to load additional code which may be required for some module
    to work. <em>Filename</em> is either an absolute path or
    relative to <a href="core.html#serverroot">ServerRoot</a>.</p>

    <p>For example:</p>

    <example>LoadFile libexec/libxmlparse.so</example>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>LoadModule</name>
<description>Links in the object file or library, and adds to the list
of active modules</description>
<syntax>LoadModule <em>module filename</em></syntax>
<contextlist>
<context>server config</context>
</contextlist>

<usage>
    <p>The LoadModule directive links in the object file or library
    <em>filename</em> and adds the module structure named
    <em>module</em> to the list of active modules. <em>Module</em>
    is the name of the external variable of type
    <code>module</code> in the file, and is listed as the <a
    href="module-dict.html#ModuleIdentifier">Module Identifier</a>
    in the module documentation. Example:</p>

    <example>
      LoadModule status_module modules/mod_status.so
    </example>

    <p>loads the named module from the modules subdirectory of the
    ServerRoot.</p>
</usage>

</directivesynopsis>
</modulesynopsis>

