src
into src/main
src
have moved to src/modules/standard
support
directory is now in
src/support
src/include/compat.h
both for the list of
renamed symbol names and for a way to get source backward
compatibility in existing third-party module sources.src/os
directory. Currently this contains information for unix, OS/2
and Windows 32 platforms.Configuration
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 src/modules
.Configure
, such as additional libraries
required.Configure
.configure
replaced the old top-level
Makefile
and
src/helpers/InstallApache
stuff.src/Configuration
then running
Configure
and make
. In earlier
version of Apache before 1.3, the line added to Configuration
looked like this:
Module status_module mod_status.oFrom 1.3 onwards, the
AddModule
line should be
used instead, and typically looks like this:
AddModule modules/standard/mod_status.oThe argument to AddModule is the path, relative to
src
, to the module file's source or object file.
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:
mod_foo.c
into the directory
src/modules/extra
src
directory and add the
following line to Configuration
AddModule modules/extra/mod_foo.o
./Configure
make
src
directory, and if the module required any
additional compilation options (such as libraries) they would
have to be added to Configuration
. Also the user
would have to be told the module's structure name to add on the
Module line of Configuration
.
From Apache 1.3 onwards, module authors can make use of these new features:
Configuration
command AddModule
which only requires a path to the module source or object
filesrc/modules
is
recommended.apxs
support tool can be used to compile the
module into a dynamic shared object
(DSO), install it into the existing Apache installation
and optionally activating it in the Apache
httpd.conf
file. The only requirement is that
Apache has DSO-support for the used platform and the module
mod_so
was built
into the server binary httpd
.src/modules
directory
of their Apache source tree. This will create a new directory
src/modules/mod_demo
. Then they need to add the
following line to the Configuration
file:
AddModule modules/mod_demo/mod_demo.othen run
Configure
and make
as
normal.
The mod_demo/Makefile.tmpl
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:
mod_demo.o: mod_demo.c $(INCDIR)/httpd.h $(INCDIR)/http_protocol.hWhen the user runs
Configure
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.
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
mod_demo/Makefile
and do not
include a mod_demo/Makefile.tmpl
. If
Configure
sees a Makefile.tmpl
it
assumes it is safe to overwrite any existing
Makefile
.
See the Apache src/modules/standard
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 src/modules/proxy
and
src/modules/example
for examples of modules built
using custom makefiles (to build a library and an object file,
respectively).
Configure
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:
/* * 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 */Note that this is contained inside a C language comment to hide it from the compiler. Anything between the lines which contains
MODULE-DEFINITION-START
and
MODULE-DEFINITION-END
is used by
Configure
. The Name:
line gives the
module's structure name. This is not really necessary in this
case since if not present Configure
will guess at
a name based on the filename (e.g., 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).
The lines between ConfigStart
and
ConfigEnd
as executed by Configure
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.
See the default distribution's mod_auth_dbm.c for an example of an embedded module definition.
.module
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
MODULE-DEFINITION-START
etc. For example:
Name: demo_module ConfigStart LIBS="$LIBS $DBM_LIB" if [ "X$DBM_LIB" != "X" ]; then echo " + using $DBM_LIB for mod_demo" fi ConfigEndSee the default distribution's mod_auth_db.module for an example of a separate module definition file.