You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Paul Sutton <pa...@ukweb.com> on 1997/07/03 00:05:02 UTC

New configure

Here is a first draft of a new configure script which makes the changes
previous discussed (moving core source files to a subdirectory, moving
modules files, adding os abstraction files, auto-configuring modules).

Apart from the moved source files and less cluttered /src directoory, the
only important user-visible change is a new directive in Configuration.
Lines such as 

  Module    auth_module    mod_auth.o

can be replaced with AddModule directives, like this

  AddModule                modules/standard/mod_auth.o

This removes the need to duplicate the structure name ("auth_module") in
Configuration - the new Configure will try and find this out for itself. 
It can get this from a separate file (mod_auth.module) or by reading the
.c source if available. If all else fails, it converts mod_SOMETHING.o
into SOMETHING_module (this works on all distributed modules). Also
handles modules specified as (say) modules/proxy/libproxy.a. 

The module file (.module) or the .c can include shell script commands
which get executed as part of the configure process. For example, the
following would be added to mod_auth_dbm.c to auto-configure in a DBM
library:

  ConfigStart
    LIBS="$LIBS $DBM_LIB"
  ConfigEnd

Modules specified by AddModule can exist anywhere on the file system, but
if they live in modules/SOMETHING, a suitable makefile will be
auto-generated if Makefile.tmpl exists in that directory.

Ok, here are the instructions for converting a standard Apache src
directory into something that works with this new Configure. The patch
files and new files mentioned are listed after the instructions.
Because of the number of new and moved files and directories I cannot
supply a simple patch.

//pcs

-----------

# update Configure and Configuration.tmpl
cd src
cp Configuration.tmpl Configuration
patch < Configure.patch
patch < Configuration.patch
patch < src.patch

# create os-abstraction files (empty for now) and new Makefile.tmpl
mkdir os
mkdir os/unix
touch os/unix/os.h
touch os/unix/os.c
# add os/unix/Makefile.tmpl

# move /support into /src/support, update the Makefile.tmpl
mkdir support
cp ../support/* support
cd support
patch < support.patch

# move modules into modules/standard, add new Makefile.tmpl
mkdir modules/standard
mv mod_*.[ch] modules/standard
# add modules/standard/Makefile.tmpl

# move all other source files in core, add new Makefile.tmpl
mkdir core
mv *.[ch] core
# add core/Makefile.tmpl

That's it! Now you can run ./Configure, the make as normal (hopefully). 

-----

Configure.patch:

--- old/Configure	Wed Jul  2 21:02:14 1997
+++ Configure	Wed Jul  2 22:37:45 1997
@@ -16,6 +16,8 @@
 
 file=Configuration
 tmpfile=htconf.$$
+tmpfile2=$tmpfile.2
+tmpfile3=$tmpfile.3
 makefile_tmpl=Makefile.tmpl
 
 while [ "x$1" != "x" ]; do
@@ -57,6 +59,7 @@
 # Check for syntax errors...
 
 if egrep -v '^%?Module[ 	]+[A-Za-z0-9_]+[ 	]+[^ 	]+$' $tmpfile \
+   | egrep -v '^%?AddModule[ 	]+[^ 	]+$' \
    | grep -v = > /dev/null
 then
    echo "Syntax error --- The configuration file is used only to"
@@ -72,35 +75,6 @@
 if [ -f Makefile ] ; then mv Makefile Makefile.bak; fi
 if [ -f modules.c ] ; then mv modules.c modules.c.bak; fi
 
-sed -e 's/_module//' $tmpfile | awk >modules.c '\
-   BEGIN { modules[n++] = "core" ; pmodules[pn++] = "core"} \
-   /^Module/ { modules[n++] = $2 ; pmodules[pn++] = $2 } \
-   /^%Module/ { pmodules[pn++] = $2 } \
-   END { print "/* modules.c --- automatically generated by Apache"; \
-	 print " * configuration script.  DO NOT HAND EDIT!!!!!"; \
-	 print " */"; \
-	 print ""; \
-	 print "#include \"httpd.h\""; \
-	 print "#include \"http_config.h\""; \
-	 print ""; \
-	 for (i = 0; i < pn; ++i) { \
-	     printf ("extern module %s_module;\n", pmodules[i]); \
-	 } \
-	 print ""; \
-	 print "module *prelinked_modules[] = {"; \
-	 for (i = 0; i < n; ++i) { \
-	     printf "  &%s_module,\n", modules[i]; \
-	 } \
-	 print "  NULL"; \
-	 print "};"; \
-	 print "module *preloaded_modules[] = {"; \
-	 for (i = 0; i < pn; ++i) { \
-	     printf "  &%s_module,\n", pmodules[i]; \
-	 } \
-	 print "  NULL"; \
-	 print "};"; \
-   }'
-
 #
 # Add module set only
 #
@@ -111,16 +85,6 @@
 echo "# is re-run" >> Makefile
 echo "#" >> Makefile
 
-awk >>Makefile <$tmpfile '\
-   /^Module/ { modules[n++] = $3 } \
-   /^%Module/ { modules[n++] = $3 } \
-   END { print "MODULES=\\"; \
-	 for (i = 0; i < n; ++i) { \
-	     if (i < n-1) printf ("  %s \\\n", modules[i]); \
-	     else printf ("  %s\n", modules[i]); \
-	 } \
-	 print "" \
-       }'
 #
 # Now add Makefile additions and Rules
 #
@@ -158,7 +122,7 @@
 
 # Preset DBM_LIB. Can be overridden on a per-platform basis.
 
-DBM_LIB="-ldbm"
+DBM_LIB="-lgdbm"
 
 #
 # Look for ranlib. Do it early in case we want to override it below
@@ -185,6 +149,7 @@
 
 #
 SHELL="/bin/sh"
+OSDIR="os/unix"
 
 case "$PLAT" in
     *MPE/iX*)
@@ -522,6 +487,7 @@
 # Now that _that's_ done, get on with it
 #
 
+SRCDIR=`pwd`
 echo " + configured for $OS platform"
 
 #
@@ -561,29 +527,173 @@
 fi
 
 #
-# Are they using the status monitor module? If so, check
-# for STATUS rule...
+# Find out what modules we want and try and configure things for them
+# Module lines can look like this:
 #
-STAT_MOD="mod_status"
-if grep "$STAT_MOD" Makefile > /dev/null; then
-    if [ "$RULE_STATUS" = "yes" ]; then
-	CFLAGS="$CFLAGS -DSTATUS"
-    fi
-fi
-
-#
-# Are they using dbm auth? If so, add DBM library.
+#  Module  name_module    some/path/mod_name[.[oa]]
+#  AddModule              some/path/mod_name[.[oa]]
 #
-if grep mod_auth_dbm Makefile > /dev/null; then
-    LIBS="$LIBS $DBM_LIB"
-fi
+# In both cases, the some/path can either be an arbitrary path (including
+# an absolue path), or a path like "modules/DIR", in which case we _might_
+# auto-generate a Makefile in modules/DIR (see later).
+#
+# The first case is the original style, where we give the module's
+# name as well as it's binary file location - either a .o or .a.
+#
+# The second format is new, and means we do not repeat the module
+# name, which is already part of the module source or definition.
+# The way we find the module name (and other optional information about
+# the module) is like this:
+#
+#  1 If extension is not given or is .c, assume .o was given and goto 3
+#  2 If extension if .module, go to D1
+#  3 If extension is .o, look for a corresponding .c file and if
+#      found, go to C1
+#  4 If no .c file was found, look for a .module file (Apache module
+#      definition file). If found, go to D1
+#  5 Assume module name is the "name" part of "mod_name", as in
+#      name_module.
+#
+# If a C file is found:
+#
+# C1 Look for module name given by an MODULE: line (e.g. MODULE: name_module)
+#      If found assume module contains a definition, and go to D1
+# C2 If not found, look for a module name given on the declaration of the
+#      module structure (e.g. module name_module).
+# C3 If neither given, go to 4 above.
+#
+# If a definition file is found, or a .c file includes a module definition:
+#
+# D1 Get the module name from the MODULE: name= line
+# D2 Get other module options (libraries etc). To be done later.
+#
+
+# For now, we will convert the AddModule lines into Module format
+# lines, so the rest of Configure can do its stuff without too much
+# additional hackery. It would be nice to reduce the number of times
+# we have to awk the $tmpfile, though.
+
+# MODFILES contains a list of module filenames (could be .c, .o, .a
+#    or .module files) from AddModule lines only
+# MODDIRS contains a list of subdirectories under 'modules' which
+#    contain modules we want to build from both AddModule and Module
+#    lines
+
+MODFILES=`awk <$tmpfile '$1 == "AddModule" { printf "%s ", $2 }'`
+MODDIRS=`awk < $tmpfile '\
+	($1 == "Module" && $3 ~ /^modules\//) { \
+	    split ($3, pp, "/"); \
+	if (! SEEN[pp[2]]) { printf "%s ", pp[2]; SEEN[pp[2]] = 1; } \
+    	} \
+	($1 == "AddModule" && $2 ~ /^modules\//) { \
+	    split ($2, pp, "/"); \
+	if (! SEEN[pp[2]]) { printf "%s ", pp[2]; SEEN[pp[2]] = 1; } \
+    	} \
+'`
+
+#
+# Now autoconfigure each of the modules specified by AddModule.
+# Use tmpfile2 for the module definition file, and tmpfile3 for the
+# shell commands to be executed for this module.
+#
+
+for modfile in $MODFILES ; do
+#	echo Trying to find $modfile
+	rm -f $tmpfile2 $tmpfile3
+	modname=
+
+	ext=`echo $modfile | sed 's/^.*\.//'`
+	modbase=`echo $modfile | sed 's/\.[^.]*$//'`
+	if [ x$ext = x$modfile ]; then ext=o; modbase=$modfile; modfile=$modbase.o; fi
+	if [ x$ext = x ] ; then ext=o; modbase=$modfile; fi
+
+	# modbase is the path+filename without extension, ext is the
+	# extension given, or if none, o
+#	echo bas=$modbase ext=$ext
+
+	if [ -r $modbase.module ] ; then
+		cat $modbase.module > $tmpfile2
+	elif [ -e $modbase.c ] ; then
+		# Guess module structure name in case there is not
+		# module definition in this file
+		modname=`grep '^module .*;' $modbase.c | head -1 |\
+			sed 's/^module[ 	]*//' | \
+			sed 's/[ 	]*;[ 	]*$//'`
+		# Get any module definition part
+		if fgrep "MODULE-DEFINITION-" $modbase.c > /dev/null; then
+		cat $modbase.c | \
+		sed '1,/MODULE-DEFINITION-START/d;/MODULE-DEFINITION-END/,$d' \
+			> $tmpfile2
+		fi
+	fi		
+	if [ -r $tmpfile2 ] ; then
+		# Read a module definition from .module or .c
+		modname=`fgrep "Name:" $tmpfile2 | sed 's/^.*Name:[ 	]*//'`
+		cat $tmpfile2 | sed '1,/ConfigStart/d;/ConfigEnd/,$d' > \
+			$tmpfile3
+		. $tmpfile3
+		rm -f $tmpfile2 $tmpfile3
+		ext=o
+	fi
+	if [ -z "$modname" ] ; then
+		modname=`echo $modbase | sed 's/^.*\///' | \
+			sed 's/^mod_//' | sed 's/^lib//' | sed 's/$/_module/'`
+	fi
+	echo "Adding Module $modname $modbase.$ext"
+#	echo "Module $modname $modbase.$ext" >>$tmpfile
+done
+
+# $tmpfile now contains Module lines for all the modules we want
+
+# create modules.c
+
+sed -e 's/_module//' $tmpfile | awk >modules.c '\
+   BEGIN { modules[n++] = "core" ; pmodules[pn++] = "core"} \
+   /^Module/ { modules[n++] = $2 ; pmodules[pn++] = $2 } \
+   /^%Module/ { pmodules[pn++] = $2 } \
+   END { print "/* modules.c --- automatically generated by Apache"; \
+	 print " * configuration script.  DO NOT HAND EDIT!!!!!"; \
+	 print " */"; \
+	 print ""; \
+	 print "#include \"httpd.h\""; \
+	 print "#include \"http_config.h\""; \
+	 print ""; \
+	 for (i = 0; i < pn; ++i) { \
+	     printf ("extern module %s_module;\n", pmodules[i]); \
+	 } \
+	 print ""; \
+	 print "module *prelinked_modules[] = {"; \
+	 for (i = 0; i < n; ++i) { \
+	     printf "  &%s_module,\n", modules[i]; \
+	 } \
+	 print "  NULL"; \
+	 print "};"; \
+	 print "module *preloaded_modules[] = {"; \
+	 for (i = 0; i < pn; ++i) { \
+	     printf "  &%s_module,\n", pmodules[i]; \
+	 } \
+	 print "  NULL"; \
+	 print "};"; \
+   }'
 
+# Add the module targets to the Makefile
+
+awk >>Makefile <$tmpfile '\
+   /^Module/ { modules[n++] = $3 } \
+   /^%Module/ { modules[n++] = $3 } \
+   END { print "MODULES=\\"; \
+	 for (i = 0; i < n; ++i) { \
+	     if (i < n-1) printf ("  %s \\\n", modules[i]); \
+	     else printf ("  %s\n", modules[i]); \
+	 } \
+	 print "" \
+       }'
 #
 # Now HS's POSIX regex implementation if needed/wanted
 #
 if [ "$RULE_WANTHSREGEX" = "yes" ]; then
     REGLIB="regex/libregex.a"
-    INCLUDES="$INCLUDES -Iregex"
+    INCLUDES="$INCLUDES -I${SRCDIR}/regex"
 fi
 
 #
@@ -616,23 +726,32 @@
     echo "OPTIM=$OPTIM" >> Makefile.config
 fi
 echo "CFLAGS1=$CFLAGS">> Makefile.config
-echo "INCLUDES1=$INCLUDES">> Makefile.config
+echo "INCLUDES1=$INCLUDES -I${SRCDIR}/core">> Makefile.config
 echo "LIBS1=$LIBS">> Makefile.config
 echo "LDFLAGS1=$LDFLAGS">> Makefile.config
 echo "BROKEN_BPRINTF_FLAGS=$OSBPRINTF">> Makefile.config
 echo "REGLIB=$REGLIB">> Makefile.config
 echo "RANLIB=$RANLIB">> Makefile.config
 echo "SHELL=$SHELL">> Makefile.config
+echo "OSOBJ=${SRCDIR}/$OSDIR/os.o">> Makefile.config
+echo "OSDIR=${SRCDIR}/$OSDIR">> Makefile.config
 echo >> Makefile.config
 echo "#### End of Configure created section ####">> Makefile.config
 
+cp $OSDIR/os.h core/os.h
 
 # Now (finish) creating the makefiles
 cat Makefile.config >> Makefile
 sed -e "s#@@Configuration@@#$file#" "$makefile_tmpl" >>Makefile
 awk >>Makefile <$tmpfile \
    '($1 == "Module" && $3 ~ /modules\//) { printf "%s: modules/last-built ; @cat /dev/null\n\n", $3, $3}'
-cat Makefile.config ../support/Makefile.tmpl > ../support/Makefile
+
+# directories to create makefiles in
+MAKEDIRS="support core $OSDIR"
+for dir in $MAKEDIRS ; do
+	echo Creating Makefile in $dir
+	cat Makefile.config $dir/Makefile.tmpl > $dir/Makefile
+done
 
 cat << EOF > modules/Makefile
 # 
@@ -651,17 +770,14 @@
 echo "INCLUDES2=$INCLUDES2">> modules/Makefile
 echo "MOD_CFLAGS=\$(INCLUDES2) \$(AUX_CFLAGS)">> modules/Makefile
 
-awk >> modules/Makefile < $tmpfile '\
-   BEGIN {printf "MODULES="} \
-   ($1 == "Module" && $3 ~ /modules\//) {split ($3, pp, "/"); printf "%s ", pp[2]} \
-   END {printf "\n"}'
-
-awk >> modules/Makefile < $tmpfile '\
-   BEGIN {printf "CLEANERS="} \
-   ($1 == "Module" && $3 ~ /modules\//) {split ($3, pp, "/"); printf "%s_clean ", pp[2]} \
-   END {printf "\n"}'
+CLEANERS=""
+for i in $MODDIRS ; do
+	CLEANERS="$CLEANERS${i}_clean "
+done
 
 cat << EOF >> modules/Makefile
+MODULES=$MODDIRS
+CLEANERS=$CLEANERS
 
 default: \$(MODULES)
 	@echo "Done building module subdirectories"
@@ -669,14 +785,54 @@
 clean: \$(CLEANERS)
 	@echo "Done cleaning module subdirectories"
 
-placeholder \$(MODULES): ForceMe
+\$(MODULES): ForceMe
 	(cd \$@; \$(MAKE) CC=\$(CC) AUX_CFLAGS='\$(MOD_CFLAGS)' RANLIB='\$(RANLIB)')
 
 ForceMe:
 
 EOF
 
-awk >>modules/Makefile <$tmpfile \
-   '($1 == "Module" && $3 ~ /modules\//) { split ($3, pp, "/"); \
-   printf "%s_clean:\n\t(cd %s; $(MAKE) clean)\n\n", pp[2], pp[2]}'
+(
+for i in $MODDIRS ; do
+	echo "${i}_clean:"
+	echo "	(cd ${i}; \$(MAKE) clean)"
+	echo ""
+done
+) >> modules/Makefile
+
+for moddir in $MODDIRS ; do
+	if [ ! -e modules/$moddir/Makefile.tmpl ] ; then
+		continue
+	fi
+	echo "Creating Makefile in modules/$moddir"
+
+	cat Makefile.config > modules/$moddir/Makefile
+	awk >> modules/$moddir/Makefile < $tmpfile '\
+	    BEGIN { printf "OBJS=" }\
+	    ($1 == "Module" && $3 ~ /^modules\/'$moddir'\//) { \
+		split ($3, pp, "/"); \
+		printf "%s ", pp[3]; \
+	    	} \
+	   END {printf "\n"}'
+
+	cat << 'EOF' >> modules/$moddir/Makefile
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+INCDIR=../../core
+
+all:	$(OBJS)
+
+.c.o:
+	$(CC) -c $(INCLUDES) $(CFLAGS) $(SPACER) $<
+
+clean:
+	rm -f $(OBJS)
+
+EOF
+cat >> modules/$moddir/Makefile < modules/$moddir/Makefile.tmpl
+
+done
+
 

------------------------------------------

Configuration.patch:

--- old/Configuration	Wed Jul  2 21:02:08 1997
+++ Configuration	Wed Jul  2 22:36:44 1997
@@ -42,7 +42,7 @@
 # the C compiler, and set OPTIM to '-O2'
 #
 EXTRA_CFLAGS=
-EXTRA_LDFLAGS=
+EXTRA_LFLAGS=
 EXTRA_LIBS=
 EXTRA_INCLUDES=
 
@@ -125,24 +125,24 @@
 ## passed to CGI/SSI scripts.  It is listed first (lowest priority) since
 ## it does not do per-request stuff.
 
-Module env_module          mod_env.o
+AddModule                 modules/standard/mod_env.o
 
 ## mod_dld defines commands that allow other modules to be loaded
 ## dynamically (at runtime).  This module is for experimental use only.
 
-# Module dld_module          mod_dld.o
+# AddModule                 modules/optional/mod_dld.o
 
 ##
 ## Request logging modules
 ##
 
-Module config_log_module   mod_log_config.o
+AddModule                 modules/standard/mod_log_config.o
 
 ## Optional modules for NCSA user-agent/referer logging compatibility
 ## We recommend, however, that you just use the configurable access_log.
 
-# Module agent_log_module    mod_log_agent.o
-# Module referer_log_module  mod_log_referer.o
+# AddModule                 modules/optional/mod_log_agent.o
+# AddModule                 modules/optional/mod_log_referer.o
 
 ##
 ## Type checking modules
@@ -151,8 +151,8 @@
 ## magic type handlers (the latter is obsoleted by mod_actions).
 ## mod_negotiation allows content selection based on the Accept* headers.
 
-Module mime_module         mod_mime.o
-Module negotiation_module  mod_negotiation.o
+AddModule                 modules/standard/mod_mime.o
+AddModule                 modules/standard/mod_negotiation.o
 
 ##
 ## Content delivery modules
@@ -162,20 +162,20 @@
 ## STATUS=yes (see the Rules section near the start of this file) to allow
 ## full status information.  Check conf/access.conf on how to enable this.
 
-# Module status_module       mod_status.o
+# AddModule                 modules/optional/mod_status.o
 
 ## The Info module displays configuration information for the server and 
 ## all included modules. It's very useful for debugging.
 
-# Module info_module         mod_info.o
+# AddModule                 modules/optional/mod_info.o
 
 ## mod_include translates server-side include (SSI) statements in text files.
 ## mod_dir handles requests on directories and directory indexes.
 ## mod_cgi handles CGI scripts.
 
-Module includes_module     mod_include.o
-Module dir_module          mod_dir.o
-Module cgi_module          mod_cgi.o
+AddModule                 modules/standard/mod_include.o
+AddModule                 modules/standard/mod_dir.o
+AddModule                 modules/standard/mod_cgi.o
 
 ## The asis module implemented ".asis" file types, which allow the embedding
 ## of HTTP headers at the beginning of the document.  mod_imap handles internal 
@@ -183,9 +183,9 @@
 ## CGI scripts which act as "handlers" for particular files, for example to
 ## automatically convert every GIF to another file type.
 
-Module asis_module         mod_asis.o
-Module imap_module         mod_imap.o
-Module action_module       mod_actions.o
+AddModule                 modules/standard/mod_asis.o
+AddModule                 modules/standard/mod_imap.o
+AddModule                 modules/standard/mod_actions.o
 
 ##
 ## URL translation modules.
@@ -193,42 +193,42 @@
 ## The UserDir module for selecting resource directories by user name
 ## and a common prefix, e.g., /~<user> , /usr/web/<user> , etc.
 
-Module userdir_module      mod_userdir.o
+AddModule                 modules/standard/mod_userdir.o
 
 ## The proxy module enables the server to act as a proxy for outside
 ## http and ftp services. It's not as complete as it could be yet.
 ## NOTE: You do not want this module UNLESS you are running a proxy;
 ##       it is not needed for normal (origin server) operation.
 
-# Module proxy_module        modules/proxy/libproxy.a
+# AddModule                 modules/proxy/libproxy.a
 
 ## The Alias module provides simple URL translation and redirection.
 
-Module alias_module        mod_alias.o
+AddModule                 modules/standard/mod_alias.o
 
 ## mod_rewrite allows for powerful URI-to-URI and URI-to-filename mapping,
 ## using regular expressions.
 
-# Module rewrite_module      mod_rewrite.o
+# AddModule                 modules/optional/mod_rewrite.o
 
 ##
 ## Access control and authentication modules. 
 ##
-Module access_module       mod_access.o
-Module auth_module         mod_auth.o
+AddModule                 modules/standard/mod_access.o
+AddModule                 modules/standard/mod_auth.o
 
 ## The anon_auth module allows for anonymous-FTP-style username/ 
 ## password authentication.
 
-# Module anon_auth_module    mod_auth_anon.o
+# AddModule                 modules/standard/mod_auth_anon.o
 
 ## db_auth and dbm_auth work with Berkeley DB files - make sure there
 ## is support for DBM files on your system.  You may need to grab the GNU
 ## "gdbm" package if not and possibly adjust EXTRA_LIBS. (This may be
 ## done by Configure at a later date)
 
-# Module db_auth_module      mod_auth_db.o
-# Module dbm_auth_module     mod_auth_dbm.o
+# AddModule                 modules/standard/mod_auth_db.o
+# AddModule                 modules/standard/mod_auth_dbm.o
 
 ## msql_auth checks against an mSQL database.  You must have mSQL installed
 ## and an "msql.h" available for this to even compile.  Additionally,
@@ -239,29 +239,29 @@
 ## This depends on your installation of mSQL. (This may be done by Configure
 ## at a later date)
 
-# Module msql_auth_module    mod_auth_msql.o
+# AddModule                 modules/standard/mod_auth_msql.o
 
 ## "digest" implements HTTP Digest Authentication rather than the less 
 ## secure Basic Auth used by the other modules.
 
-# Module digest_module       mod_digest.o
+# AddModule                 modules/optional/mod_digest.o
 
 ## Optional response header manipulation modules. 
 ##
 ## cern_meta mimics the behavior of the CERN web server with regards to 
 ## metainformation files.  
 
-# Module cern_meta_module    mod_cern_meta.o
+# AddModule                 modules/optional/mod_cern_meta.o
 
 ## The expires module can apply Expires: headers to resources,
 ## as a function of access time or modification time.
 
-# Module expires_module      mod_expires.o
+# Module expires_module      modules/optional/mod_expires.o
 
 ## The headers module can set arbitrary HTTP response headers,
 ## as configured in server, vhost, access.conf or .htaccess configs
 
-# Module headers_module      mod_headers.o
+# AddModule                 modules/optional/mod_headers.o
 
 ## Miscellaneous modules
 ##
@@ -273,17 +273,17 @@
 ## You do not need this, or any other module to allow your site
 ## to use Cookies.  This module is for user tracking only
 
-# Module usertrack_module      mod_usertrack.o
+# AddModule                 modules/optional/mod_usertrack.o
 
 ## The example module, which demonstrates the use of the API.  See
 ## the file modules/example/README for details.  This module should
 ## only be used for testing -- DO NOT ENABLE IT on a production server.
 
-# Module example_module      modules/example/mod_example.o
+# AddModule                 modules/example/mod_example.o
 
 ## mod_browser lets you set environment variables based on the User-Agent
 ## string in the request; this is useful for conditional HTML, for example.
 ## Since it is also used to detect buggy browsers for workarounds, it
 ## should be the last (highest priority) module.
 
-Module browser_module      mod_browser.o
+AddModule                  modules/standard/mod_browser

----------------------------

support.patch:

*** support/Makefile.tmpl	Thu Mar 13 12:14:14 1997
--- Makefile.tmpl	Wed Jul  2 22:14:08 1997
***************
*** 6,12 ****
  CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
  LIBS=$(EXTRA_LIBS) $(LIBS1)
  INCLUDES=-I../src -I../src/regex $(INCLUDES1) $(EXTRA_INCLUDES)
! LFLAGS=$(LFLAGS1) $(EXTRA_LFLAGS)
  
  .c.o: 
  	$(CC) -c $(CFLAGS) $(INCLUDES) $<
--- 6,12 ----
  CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
  LIBS=$(EXTRA_LIBS) $(LIBS1)
  INCLUDES=-I../src -I../src/regex $(INCLUDES1) $(EXTRA_INCLUDES)
! LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
  
  .c.o: 
  	$(CC) -c $(CFLAGS) $(INCLUDES) $<
***************
*** 16,25 ****
  all: $(TARGETS)
  
  htpasswd: htpasswd.c
! 	$(CC) $(CFLAGS) htpasswd.c -o htpasswd $(LIBS)
  
  htdigest: htdigest.c
! 	$(CC) $(CFLAGS) htdigest.c -o htdigest
  
  httpd_monitor: httpd_monitor.c
  	$(CC) $(INCLUDES) $(CFLAGS) httpd_monitor.c -o httpd_monitor
--- 16,25 ----
  all: $(TARGETS)
  
  htpasswd: htpasswd.c
! 	$(CC) $(INCLUDES) $(CFLAGS) htpasswd.c -o htpasswd $(LIBS)
  
  htdigest: htdigest.c
! 	$(CC) $(INCLUDES) $(CFLAGS) htdigest.c -o htdigest
  
  httpd_monitor: httpd_monitor.c
  	$(CC) $(INCLUDES) $(CFLAGS) httpd_monitor.c -o httpd_monitor

--------------------------------

src.patch:

*** /home/paul/remote-cvs/apache/src/Makefile.tmpl	Wed Jul  2 22:31:38 1997
--- Makefile.tmpl	Wed Jul  2 22:13:47 1997
***************
*** 8,22 ****
  INCLUDES=$(INCLUDES1) $(EXTRA_INCLUDES)
  LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
  
! OBJS= alloc.o http_main.o http_core.o http_config.o http_request.o \
!   http_log.o http_protocol.o rfc1413.o util.o util_script.o modules.o buff.o\
!   md5c.o util_md5.o explain.o http_bprintf.o util_date.o util_snprintf.o\
    $(MODULES)
  
  .c.o:
  	$(CC) -c $(INCLUDES) $(CFLAGS) $(SPACER) $<
  
! all: @@Configuration@@ httpd
  
  @@Configuration@@: Configuration.tmpl
  	@echo "@@Configuration@@ older than Configuration.tmpl, or doesn't exist."
--- 8,28 ----
  INCLUDES=$(INCLUDES1) $(EXTRA_INCLUDES)
  LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
  
! OBJS= \
!   core/alloc.o core/http_main.o core/http_core.o \
!   core/http_config.o core/http_request.o core/http_log.o \
!   core/http_protocol.o core/rfc1413.o core/util.o \
!   core/util_script.o core/buff.o core/md5c.o \
!   core/util_md5.o core/explain.o core/http_bprintf.o \
!   core/util_date.o core/util_snprintf.o \
!   modules.o \
!   $(OSOBJ) \
    $(MODULES)
  
  .c.o:
  	$(CC) -c $(INCLUDES) $(CFLAGS) $(SPACER) $<
  
! all: @@Configuration@@ os-dir core-dir modules/last-built httpd 
  
  @@Configuration@@: Configuration.tmpl
  	@echo "@@Configuration@@ older than Configuration.tmpl, or doesn't exist."
***************
*** 25,32 ****
  	@echo "If not, you will at least have to touch @@Configuration@@."
  	@false
  
! httpd: $(REGLIB) $(OBJS)
! 	$(CC) $(LDFLAGS)  -o httpd $(OBJS) $(REGLIB) $(LIBS)
  
  regex/libregex.a:
  	(cd regex; $(MAKE) lib CC=$(CC) AUX_CFLAGS='$(CFLAGS)' RANLIB='$(RANLIB)')
--- 31,38 ----
  	@echo "If not, you will at least have to touch @@Configuration@@."
  	@false
  
! httpd: $(REGLIB) modules.o
! 	$(CC) $(LDFLAGS)  -o httpd $(OBJS) $(LIBS) $(REGLIB)
  
  regex/libregex.a:
  	(cd regex; $(MAKE) lib CC=$(CC) AUX_CFLAGS='$(CFLAGS)' RANLIB='$(RANLIB)')
***************
*** 35,44 ****
  	(cd modules; \
  	$(MAKE) CC=$(CC) AUX_CFLAGS='$(CFLAGS)' RANLIB='$(RANLIB)')
  
  clean:
! 	rm -f httpd *.o core
  	cd regex; $(MAKE) clean
  	cd modules; $(MAKE) clean
  
  dist.tar: 
  	# Assure a semi-sensible configuration going out...
--- 41,63 ----
  	(cd modules; \
  	$(MAKE) CC=$(CC) AUX_CFLAGS='$(CFLAGS)' RANLIB='$(RANLIB)')
  
+ support: support-dir
+ 
+ support-dir:
+ 	cd support; $(MAKE)
+ 
+ core-dir:
+ 	cd core; $(MAKE)
+ 
+ os-dir:	
+ 	cd $(OSDIR); $(MAKE)
+ 
  clean:
! 	rm -f httpd $(OBJS) 
! 	cd core; $(MAKE) clean
  	cd regex; $(MAKE) clean
  	cd modules; $(MAKE) clean
+ 	cd support; $(MAKE) clean
  
  dist.tar: 
  	# Assure a semi-sensible configuration going out...
***************
*** 51,163 ****
  http_bprintf.o: http_bprintf.c
  	$(CC) -c $(INCLUDES) $(CFLAGS) $(BROKEN_BPRINTF_FLAGS) http_bprintf.c
  
- # We really don't expect end users to use this rule.  It works only with
- # gcc, and rebuilds Makefile.tmpl.  You have to re-run Configure after
- # using it.
- depend:
- 	sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
- 	    && $(CC) -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile..new \
- 	    && mv Makefile.tmpl Makefile.tmpl.bak \
- 	    && mv Makefile.new Makefile.tmpl
- 
  #Dependencies
  
  $(OBJS): Makefile
  
! # DO NOT REMOVE
! alloc.o: alloc.c httpd.h conf.h alloc.h buff.h multithread.h
! buff.o: buff.c httpd.h conf.h alloc.h buff.h http_main.h
! explain.o: explain.c explain.h
! http_bprintf.o: http_bprintf.c httpd.h conf.h alloc.h buff.h
! http_config.o: http_config.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_core.h http_log.h http_request.h \
!  http_conf_globals.h explain.h
! http_core.o: http_core.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_core.h http_protocol.h http_conf_globals.h http_main.h \
!  http_log.h rfc1413.h util_md5.h md5.h scoreboard.h
! http_log.o: http_log.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_core.h http_log.h
! http_main.o: http_main.c httpd.h conf.h alloc.h buff.h http_main.h \
!  http_log.h http_config.h http_protocol.h http_request.h \
!  http_conf_globals.h http_core.h scoreboard.h multithread.h explain.h
! http_protocol.o: http_protocol.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_core.h http_protocol.h http_main..h http_log.h \
!  util_date.h
! http_request.o: http_request.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_request.h http_core.h http_protocol.h http_log.h \
!  http_main.h scoreboard.h
! md5c.o: md5c.c md5.h
! mod_access.o: mod_access.c httpd.h conf.h alloc.h buff.h http_core.h \
!  http_config.h http_log.h http_request.h
! mod_actions.o: mod_actions.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_request.h http_core.h http_protocol.h http_main.h \
!  http_log.h util_script.h
! mod_alias.o: mod_alias.c httpd.h conf.h alloc.h buff.h http_config.h
! mod_asis.o: mod_asis.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_protocol.h http_log.h util_script.h http_main.h http_request.h
! mod_auth.o: mod_auth.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_core.h http_log.h http_protocol.h
! mod_auth_anon.o: mod_auth_anon.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_core.h http_log.h http_protocol.h
! mod_auth_db.o: mod_auth_db.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_core.h http_log.h http_protocol.h
! mod_auth_dbm.o: mod_auth_dbm.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_core.h http_log.h http_protocol.h
! mod_auth_msql.o: mod_auth_msql.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_core.h http_log.h http_protocol.h
! mod_browser.o: mod_browser.c httpd.h conf.h alloc.h buff.h \
!  http_config.h
! mod_cern_meta.o: mod_cern_meta.c httpd.h conf.h alloc.h buff.h \
!  http_config.h util_script.h http_log.h http_request.h
! mod_cgi.o: mod_cgi.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_request.h http_core.h http_protocol.h http_main.h http_log.h \
!  util_script.h http_conf_globals.h
! mod_digest.o: mod_digest.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_core.h http_log.h http_protocol.h util_md5.h md5.h
! mod_dir.o: mod_dir.c httpd.h conf.h alloc..h buff.h http_config.h \
!  http_core.h http_request.h http_protocol.h http_log.h http_main.h \
!  util_script.h
! mod_dld.o: mod_dld.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_conf_globals.h
! mod_env.o: mod_env.c httpd.h conf.h alloc.h buff.h http_config.h
! mod_expires.o: mod_expires.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_log.h
! mod_headers.o: mod_headers.c httpd.h conf.h alloc.h buff.h \
!  http_config.h
! mod_imap.o: mod_imap.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_request.h http_core.h http_protocol.h http_main.h http_log.h \
!  util_script.h
! mod_include.o: mod_include.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_request.h http_core.h http_protocol.h http_log.h \
!  http_main.h util_script.h
! mod_info.o: mod_info.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_core.h http_log.h http_main.h http_protocol.h util_script.h \
!  http_conf_globals.h
! mod_log_agent.o: mod_log_agent.c httpd.h conf.h alloc.h buff.h \
!  http_config.h
! mod_log_config.o: mod_log_config.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_core.h
! mod_log_referer.o: mod_log_referer.c httpd.h conf.h alloc.h buff.h \
!  http_config.h
! mod_mime.o: mod_mime.c httpd.h conf.h alloc.h buff.h http_config.h
! mod_negotiation.o: mod_negotiation.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_request.h http_core.h http_log.h util_script.h
! mod_rewrite.o: mod_rewrite.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_request.h http_core.h http_log.h mod_rewrite.h
! mod_status.o: mod_status.c httpd.h conf.h alloc.h buff.h http_config.h \
!  http_core.h http_protocol.h http_main.h util_script.h scoreboard.h \
!  http_log.h
! mod_userdir.o: mod_userdir.c httpd.h conf.h alloc.h buff.h \
!  http_config.h
! mod_usertrack.o: mod_usertrack.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_core.h
! modules.o: modules.c httpd.h conf.h alloc.h buff.h http_config.h
! rfc1413.o: rfc1413.c httpd.h conf.h alloc.h buff.h http_log.h \
!  rfc1413.h http_main.h
! util.o: util.c httpd.h conf.h alloc.h buff.h http_conf_globals.h
! util_date.o: util_date.c util_date.h
! util_md5.o: util_md5.c httpd.h conf.h alloc.h buff.h util_md5.h md5.h
! util_script.o: util_script.c httpd.h conf.h alloc.h buff.h \
!  http_config.h http_conf_globals.h http_main.h http_log.h \
!  http_protocol.h http_core.h http_request.h util_script.h
! util_snprintf.o: util_snprintf.c conf.h
--- 70,77 ----
  http_bprintf.o: http_bprintf.c
  	$(CC) -c $(INCLUDES) $(CFLAGS) $(BROKEN_BPRINTF_FLAGS) http_bprintf.c
  
  #Dependencies
  
  $(OBJS): Makefile
  
! modules.o: core/httpd.h core/http_config.h


--------------------------------

New os/unix/Makefile.tmpl:

CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
LIBS=$(EXTRA_LIBS) $(LIBS1)
INCLUDES=$(INCLUDES1) $(EXTRA_INCLUDES)
LFLAGS=$(LFLAGS1) $(EXTRA_LFLAGS)
INCDIR=../../core

OBJS=	os.o

all:	$(OBJS)

.c.o:
	$(CC) -c $(INCLUDES) $(CFLAGS) $(SPACER) $<

clean:
	rm -f $(OBJS)

os.o:	os.c

--------------------------------

New core/Makefile.tmpl:

# Apache makefile suffix for core files

# This is combined with the information in the "Configuration" file
# by the configure script to make the actual Makefile.

CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
LIBS=$(EXTRA_LIBS) $(LIBS1)
INCLUDES=$(INCLUDES1) $(EXTRA_INCLUDES)
LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)

OBJS= alloc.o http_main.o http_core.o http_config.o http_request.o \
  http_log.o http_protocol.o rfc1413.o util.o util_script.o buff.o\
  md5c.o util_md5.o explain.o http_bprintf.o util_date.o util_snprintf.o

.c.o:
	$(CC) -c $(INCLUDES) $(CFLAGS) $(SPACER) $<

all: $(OBJS)

clean:
	rm -f $(OBJS) 

# Work around broken compilers
http_bprintf.o: http_bprintf.c
	$(CC) -c $(INCLUDES) $(CFLAGS) $(BROKEN_BPRINTF_FLAGS) http_bprintf.c

#Dependencies

$(OBJS): 

alloc.o: conf.h alloc.h
buff.o: conf.h alloc.h buff.h
explain.o: explain.h
http_bprintf.o: conf.h alloc.h buff.h
http_config.o: httpd.h http_config.h http_core.h http_log.h http_request.h \
               http_conf_globals.h explain.h
http_core.o: httpd.h http_config.h http_core.h http_protocol.h scoreboard.h \
             http_conf_globals.h http_main.h http_log.h rfc1413.h util_md5.h
http_log.o: httpd.h http_config.h http_core.h http_log.h
http_main.o: httpd.h http_config.h http_core.h http_log.h http_request.h \
             http_conf_globals.h http_protocol.h http_main.h scoreboard.h \
             explain.h
http_protocol.o: httpd.h http_config.h http_core.h http_protocol.h \
                 http_main.h http_log.h util_date.h
http_request.o: httpd.h http_config.h http_request.h http_core.h \
                http_protocol.h http_log.h http_main.h scoreboard.h
md5c.o: md5.h
rfc1413.o: httpd.h http_log.h rfc1413.h
util.o: httpd.h http_conf_globals.h
util_date.o: util_date.h
util_md5.o: httpd.h util_md5.h
util_script.o: httpd.h http_config.h http_conf_globals.h http_main.h \
               http_log.h http_protocol.h http_core.h http_request.h \
               util_script.h
util_snprintf.o: httpd.h

httpd.h: conf.h alloc.h buff.h
util_md5.h: md5.h

---------------------------

New modules/standard/Makefile.tmpl:

mod_access.o: $(INCDIR)/httpd.h $(INCDIR)/http_core.h \
              $(INCDIR)/http_config.h $(INCDIR)/http_log.h

mod_actions.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_request.h $(INCDIR)/http_core.h \
              $(INCDIR)/http_protocol.h $(INCDIR)/http_main.h \
              $(INCDIR)/http_log.h $(INCDIR)/util_script.h

mod_alias.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h

mod_asis.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_protocol.h $(INCDIR)/http_log.h \
              $(INCDIR)/util_script.h $(INCDIR)/http_main.h \
              $(INCDIR)/http_request.h

mod_auth.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_core.h $(INCDIR)/http_log.h \
              $(INCDIR)/http_protocol.h

mod_browser.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h

mod_cgi.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_request.h $(INCDIR)/http_core.h \
              $(INCDIR)/http_protocol.h $(INCDIR)/http_main.h \
              $(INCDIR)/http_log.h $(INCDIR)/util_script.h 

mod_dir.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_core.h $(INCDIR)/http_request.h \
              $(INCDIR)/http_protocol.h $(INCDIR)/http_log.h \
              $(INCDIR)/http_main.h $(INCDIR)/util_script.h \

mod_env.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h

mod_imap.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_request.h $(INCDIR)/http_core.h \
              $(INCDIR)/http_protocol.h $(INCDIR)/http_main.h \
              $(INCDIR)/http_log.h $(INCDIR)/util_script.h

mod_include.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_request.h $(INCDIR)/http_core.h \
              $(INCDIR)/http_log.h $(INCDIR)/http_protocol.h \
              $(INCDIR)/http_main.h $(INCDIR)/util_script.h

mod_log_config.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_core.h

mod_mime.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h

mod_negotiation.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h \
              $(INCDIR)/http_request.h $(INCDIR)/http_core.h \
              $(INCDIR)/http_log.h

mod_userdir.o: $(INCDIR)/httpd.h $(INCDIR)/http_config.h




Re: New configure

Posted by Dean Gaudet <dg...@arctic.org>.
Whenever you do this please provide a list:

oldname newname

from that we can construct a perl script which will rearrange a checked
out tree ... actually what's easiest for people with work in progress is
to generate a patch of their work, then apply a s#Index: oldname#Index: 
newname# sed to the patch, check out a new copy of the code and then apply
the patch to it. 

Dean

On Wed, 9 Jul 1997, Paul Sutton wrote:

> On Mon, 7 Jul 1997, Dean Gaudet wrote:
> > My only comment on the patch is that I'm not sure the dependencies were
> > done right.  But that's probably because Paul started with a copy of the
> > Makefile from before I reran the dependencies.  In any event it's not the
> > end of the world, we can work around it easily.
> 
> Yeah I used stock 1.2.0 for the basis then just re-merged changes to
> Configure. I'd actually quite like to get the make process to auto-create
> the dependencies but I don't think it can be done portably... 
> 
> > If this happens, it's time to split the repositories. 
> 
> I'm +1 on splitting the repository and moving the source files in the new
> one before 1.3. I.e. real soon now. I'm keen to get some OS abstraction
> stuff into the core but cannot do it until we've setup the new directory
> structure complete with os-specific directories. 
> 
> That makes it +1 from Dean, Brian and myself. I know there are some
> concerns from others, but no outright vetoes. Unless there is a serious
> objection I think we should plan on doing this asap - say this weekend. It
> alters _no_ Apache code - only file locations and "Configure" - so it
> shouldn't cause code related problems.
> 
> //pcs
> 
> 
> 
> 
> 
> 
> 


Re: New configure

Posted by Paul Sutton <pa...@ukweb.com>.
On Mon, 7 Jul 1997, Dean Gaudet wrote:
> My only comment on the patch is that I'm not sure the dependencies were
> done right.  But that's probably because Paul started with a copy of the
> Makefile from before I reran the dependencies.  In any event it's not the
> end of the world, we can work around it easily.

Yeah I used stock 1.2.0 for the basis then just re-merged changes to
Configure. I'd actually quite like to get the make process to auto-create
the dependencies but I don't think it can be done portably... 

> If this happens, it's time to split the repositories. 

I'm +1 on splitting the repository and moving the source files in the new
one before 1.3. I.e. real soon now. I'm keen to get some OS abstraction
stuff into the core but cannot do it until we've setup the new directory
structure complete with os-specific directories. 

That makes it +1 from Dean, Brian and myself. I know there are some
concerns from others, but no outright vetoes. Unless there is a serious
objection I think we should plan on doing this asap - say this weekend. It
alters _no_ Apache code - only file locations and "Configure" - so it
shouldn't cause code related problems.

//pcs







Re: New configure

Posted by Dean Gaudet <dg...@arctic.org>.
I really like this, and I would like to see it happen in 1.3. 

My only comment on the patch is that I'm not sure the dependencies were
done right.  But that's probably because Paul started with a copy of the
Makefile from before I reran the dependencies.  In any event it's not the
end of the world, we can work around it easily.

If this happens, it's time to split the repositories. 

Dean

On Wed, 2 Jul 1997, Paul Sutton wrote:

> Here is a first draft of a new configure script which makes the changes
> previous discussed (moving core source files to a subdirectory, moving
> modules files, adding os abstraction files, auto-configuring modules).