summaryrefslogtreecommitdiff
path: root/usr.sbin/httpd/htdocs/manual/sourcereorg.html
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/httpd/htdocs/manual/sourcereorg.html')
-rw-r--r--usr.sbin/httpd/htdocs/manual/sourcereorg.html312
1 files changed, 312 insertions, 0 deletions
diff --git a/usr.sbin/httpd/htdocs/manual/sourcereorg.html b/usr.sbin/httpd/htdocs/manual/sourcereorg.html
new file mode 100644
index 00000000000..6c47ae972df
--- /dev/null
+++ b/usr.sbin/httpd/htdocs/manual/sourcereorg.html
@@ -0,0 +1,312 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<TITLE>Source Re-organisation</TITLE>
+</HEAD>
+
+<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
+<BODY
+ BGCOLOR="#FFFFFF"
+ TEXT="#000000"
+ LINK="#0000FF"
+ VLINK="#000080"
+ ALINK="#FF0000"
+>
+<DIV ALIGN="CENTER">
+ <IMG SRC="images/sub.gif" ALT="[APACHE DOCUMENTATION]">
+ <H3>
+ Apache HTTP Server Version 1.3
+ </H3>
+</DIV>
+
+<H1 ALIGN="CENTER">Source Re-organisation</H1>
+
+As of 1.3, the Apache source directories have been re-organised. This
+re-organisation is designed to simplify the directory structure,
+make it easier to add additional modules, and to give module authors
+a way of specifying compile time options or distribute binary
+modules.
+
+<H2>Summary of Changes</H2>
+
+The source changes are:
+<UL>
+ <LI>The non-module source files have moved from <CODE>src</CODE> into
+ <CODE>src/main</CODE>
+ </LI>
+ <LI>The module source files previously in <CODE>src</CODE> have moved
+ to <CODE>src/modules/standard</CODE>
+ </LI>
+ <LI>The <CODE>support</CODE> directory is now in <CODE>src/support</CODE>
+ </LI>
+ <LI>The existing symbol names used for global Apache function and variable
+ identifiers have been renamed in the source. This way namespace conflicts
+ are avoided when linking Apache with third-party libraries. See the file
+ <CODE>src/include/compat.h</CODE> both for the list of renamed symbol
+ names and for a way to get source backward compatibility in existing
+ third-party module sources.
+ </LI>
+</UL>
+
+In addition, the following enhancements have been made:
+
+<UL>
+ <LI>OS abstractions can be added in the <CODE>src/os</CODE> directory.
+ Currently this contains information for unix, OS/2 and Windows 32
+ platforms.
+ </LI>
+ <LI><CODE>Configuration</CODE> syntax has been simplified for adding new
+ modules. Users no longer need to enter the module's structure name.
+ In addition, new modules can be located anywhere on the
+ file system, or typically in new or existing directories under
+ <CODE>src/modules</CODE>.
+ </LI>
+ <LI>Module authors can give simpler instructions for adding their modules
+ to Apache compilation. They can also now provide compile time information
+ required by <CODE>Configure</CODE>, such as additional libraries
+ required.
+ </LI>
+ <LI>Module authors can distribute pre-compiled (.a or .o) versions of their
+ modules if required, along with a "module definition file" which
+ contains the information required by <CODE>Configure</CODE>.
+ </LI>
+ <LI>All the sub-directories (main, modules/* and os/*) are built as
+ libraries.
+ </LI>
+ <LI>The new Apache Autoconf-style Interface (APACI) script named
+ <CODE>configure</CODE> replaced the old top-level <CODE>Makefile</CODE>
+ and <CODE>src/helpers/InstallApache</CODE> stuff.
+ </LI>
+</UL>
+
+<H2>Adding Modules</H2>
+
+Modules are added to Apache by adding a reference to them in
+<CODE>src/Configuration</CODE> then running <CODE>Configure</CODE> and
+<CODE>make</CODE>. In earlier version of Apache before 1.3, the
+line added to Configuration looked like this:
+
+<PRE>
+ Module status_module mod_status.o
+</PRE>
+
+From 1.3 onwards, the <CODE>AddModule</CODE> line should be used
+instead, and typically looks like this:
+
+<PRE>
+ AddModule modules/standard/mod_status.o
+</PRE>
+
+The argument to AddModule is the path, relative to <CODE>src</CODE>, to
+the module file's source or object file.
+
+<P>
+
+Normally when adding a module you should follow the instructions of
+the module author. However if the module comes as a single source
+file, say mod_foo.c, then the recommended way to add the module to
+Apache is as follows:
+
+<UL>
+ <LI>Put <CODE>mod_foo.c</CODE> into the directory
+ <CODE>src/modules/extra</CODE>
+ </LI>
+ <LI>Go to the <CODE>src</CODE> directory and add the following line
+ to <CODE>Configuration</CODE><BR>
+ <CODE>AddModule modules/extra/mod_foo.o</CODE>
+ </LI>
+ <LI>Run <CODE>./Configure</CODE></LI>
+ <LI>Run <CODE>make</CODE></LI>
+</UL>
+
+<H2>New Facilities for Module Authors</H2>
+
+In previous releases of Apache, new modules were added to the
+<CODE>src</CODE> directory, and if the module required any additional
+compilation options (such as libraries) they would have to be added
+to <CODE>Configuration</CODE>. Also the user would have to be
+told the module's structure name to add on the Module line
+of <CODE>Configuration</CODE>.
+
+<P>
+
+From Apache 1.3 onwards, module authors can make use of these new features:
+
+<UL>
+ <LI>Simplified <CODE>Configuration</CODE> command AddModule which only
+ requires a path to the module source or object file
+ </LI>
+ <LI>If the module requires compile time options (such as extra
+ libraries) these can be specified in the module file source
+ or an external "module definition file".
+ </LI>
+ <LI>If a module is distributed as binary (.o or .a) then an external
+ "module definition file" can also be distributed which gives
+ the information Configure needs to add the module, such as extra
+ libraries and the module's structure name.
+ <LI>Modules can be installed anywhere on the file system, although a directory
+ under <CODE>src/modules</CODE> is recommended.
+ </LI>
+ <LI>If the module is in its own directory, Apache can automatically
+ create a Makefile to build the module given a file containing
+ the module's dependencies.
+ </LI>
+ <LI>For building a third-party module <STRONG>outside</STRONG> the
+ Apache source tree the new <CODE>apxs</CODE> support tool can be
+ used to compile the module into a <A HREF="dso.html">dynamic
+ shared object (DSO)</A>, install it into the existing Apache
+ installation and optionally activating it in the Apache
+ <CODE>httpd.conf</CODE> file. The only requirement is that
+ Apache has DSO-support for the used platform and the module
+ <CODE><A HREF="mod/mod_so.html">mod_so</A></CODE> was built into
+ the server binary <CODE>httpd</CODE>.
+ </LI>
+</UL>
+
+The rest of this document shows how to package modules for Apache 1.3
+and later and what to tell end-users of the module.
+
+<H3>Building a simple source distribution</H3>
+
+Consider a simple add-on module, distributed as a single file. For
+example, say it is called mod_demo.c. The archive for this module
+should consist of two files, in a suitable directory name. For
+example:
+
+<UL>
+ <LI>mod_demo/mod_demo.c
+ <LI>mod_demo/Makefile.tmpl
+</UL>
+
+(Of course end-user instructions, README's, etc can also be supplied
+in the archive). The end user should be told to extract this archive
+in the <CODE>src/modules</CODE> directory of their Apache source
+tree. This will create a new directory
+<CODE>src/modules/mod_demo</CODE>. Then they need to add the following
+line to the <CODE>Configuration</CODE> file:
+
+<PRE>
+ AddModule modules/mod_demo/mod_demo.o
+</PRE>
+
+then run <CODE>Configure</CODE> and <CODE>make</CODE> as normal.
+
+<P>
+
+The <CODE>mod_demo/Makefile.tmpl</CODE> should contain the dependencies
+of the module source. For example, a simple module which just interfaces to
+some standard Apache module API functions might look this this:
+
+<PRE>
+ mod_demo.o: mod_demo.c $(INCDIR)/httpd.h $(INCDIR)/http_protocol.h
+</PRE>
+
+When the user runs <CODE>Configure</CODE> Apache will create a full
+makefile to build this module. If this module also requires
+some additional built-time options to be given, such as libraries,
+see the next section.
+<P>
+
+If the module also comes with header files, these can be added to the
+archive. If the module consists of multiple source files it can be
+built into a library file using a supplied makefile. In this case,
+distribute the makefile as <CODE>mod_demo/Makefile</CODE> and <STRONG>do
+not</STRONG> include a <CODE>mod_demo/Makefile.tmpl</CODE>. If
+<CODE>Configure</CODE> sees a <CODE>Makefile.tmpl</CODE> it assumes it
+is safe to overwrite any existing <CODE>Makefile</CODE>.
+
+<P>
+
+See the Apache <CODE>src/modules/standard</CODE> for an example of a
+module directory where the makefile is created automatically from a
+Makefile.tmpl file (note that this directory also shows how to
+distribute multiple modules in a single directory). See
+<CODE>src/modules/proxy</CODE> and <CODE>src/modules/example</CODE>
+for examples of modules built using custom makefiles (to build a
+library and an object file, respectively).
+
+<H3>Adding Compile time Information</H3>
+
+Apache source files (or module definition files, see below) can
+contain information used by <CODE>Configure</CODE> to add compile-time
+options such as additional libraries. For example, if mod_demo in the
+example above also requires that Apache be linked against a DBM
+library, then the following text could be inserted into the mod_demo.c
+source:
+
+<PRE>
+/*
+ * Module definition information - the part between the -START and -END
+ * lines below is used by Configure. This could be stored in a separate
+ * instead.
+ *
+ * MODULE-DEFINITION-START
+ * Name: demo_module
+ * ConfigStart
+ LIBS="$LIBS $DBM_LIB"
+ if [ "X$DBM_LIB" != "X" ]; then
+ echo " + using $DBM_LIB for mod_demo"
+ fi
+ * ConfigEnd
+ * MODULE-DEFINITION-END
+ */
+</PRE>
+
+Note that this is contained inside a C language comment to hide it
+from the compiler. Anything between the lines which contains
+<CODE>MODULE-DEFINITION-START</CODE> and
+<CODE>MODULE-DEFINITION-END</CODE> is used by <CODE>Configure</CODE>.
+The <CODE>Name:</CODE> line gives the module's structure name. This is
+not really necessary in this case since if not present
+<CODE>Configure</CODE> will guess at a name based on the filename
+(<EM>e.g.</EM>, given "mod_demo" it will remove the leading "mod_" and append
+"_module" to get a structure name. This works with all modules
+distributed with Apache).
+
+<P>
+
+The lines between <CODE>ConfigStart</CODE> and <CODE>ConfigEnd</CODE>
+as executed by <CODE>Configure</CODE> and can be used to add
+compile-time options and libraries. In this case it adds the DBM
+library (from $DBM_LIB) to the standard compilation libraries ($LIB)
+and displays a message.
+
+<P>
+
+See the default distribution's mod_auth_dbm.c for an example of
+an embedded module definition.
+
+<H3>Module Definition Information for Binary Distribitions</H3>
+
+If the module is to be distributed as binary (object or library) rather
+than source, it is not possible to add the module definition
+information to the source file. In this case it can be placed in a
+separate file which has the same base name as the object or library
+file, but with a <CODE>.module</CODE> extension. So, for example, if
+the distributed module object file is mod_demo.o, the module
+definition file should be called mod_demo.module. It contains the same
+information as above, but does not need to be inside a C comment or
+delimited with <CODE>MODULE-DEFINITION-START</CODE> <EM>etc.</EM> For example:
+
+<PRE>
+Name: demo_module
+ConfigStart
+ LIBS="$LIBS $DBM_LIB"
+ if [ "X$DBM_LIB" != "X" ]; then
+ echo " + using $DBM_LIB for mod_demo"
+ fi
+ConfigEnd
+</PRE>
+
+See the default distribution's mod_auth_db.module for an example of
+a separate module definition file.
+
+<HR>
+ <H3 ALIGN="CENTER">
+ Apache HTTP Server Version 1.3
+ </H3>
+
+<A HREF="./"><IMG SRC="images/index.gif" ALT="Index"></A>
+
+</BODY>
+</HTML>