You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by "Ralf S. Engelschall" <rs...@apache.org> on 1998/03/13 08:27:58 UTC
cvs commit: apache-1.3/src/modules/proxy Makefile.tmpl
rse 98/03/12 23:27:58
Modified: . STATUS
src CHANGES Configure
src/modules/proxy Makefile.tmpl
Log:
Support for building library-based modules (mod_proxy) as shared objects and
support for the situation where all modules of a modules/ subdir are build as
shared objects (mod_example).
Revision Changes Path
1.185 +1 -0 apache-1.3/STATUS
Index: STATUS
===================================================================
RCS file: /export/home/cvs/apache-1.3/STATUS,v
retrieving revision 1.184
retrieving revision 1.185
diff -u -r1.184 -r1.185
--- STATUS 1998/03/12 11:30:07 1.184
+++ STATUS 1998/03/13 07:27:51 1.185
@@ -79,6 +79,7 @@
* Fix for rputs() which did not calculate r->sent_bodyct properly. PR#1900
* Don't tweak TZ envvar if the user has specified an explicit one. PR#1888
* Ralf's mod_so changes to keep track of loaded modules ourself.
+ * Ralf's support for building shared objects even for library-style modules
Available Patches:
1.702 +7 -0 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.701
retrieving revision 1.702
diff -u -r1.701 -r1.702
--- CHANGES 1998/03/12 10:28:52 1.701
+++ CHANGES 1998/03/13 07:27:53 1.702
@@ -1,5 +1,12 @@
Changes with Apache 1.3b6
+ *) Added support for building shared objects even for library-style modules
+ (which are build from more than one object file). This now provides the
+ ability to build mod_proxy as a shared object module. Additionally
+ modules like mod_example are now also supported for shared object
+ building because the generated Makefiles now no longer assume there is at
+ least one statically linked module. [Ralf S. Engelschall]
+
*) API: Clarify usage of content_type, handler, content_encoding,
content_language and content_languages fields in request_rec. They
must always be lowercased; and the strings pointed to shouldn't
1.205 +41 -15 apache-1.3/src/Configure
Index: Configure
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/Configure,v
retrieving revision 1.204
retrieving revision 1.205
diff -u -r1.204 -r1.205
--- Configure 1998/03/11 23:58:03 1.204
+++ Configure 1998/03/13 07:27:54 1.205
@@ -926,6 +926,21 @@
SEEN[pp[2]] = 1
}
}'`
+MODDIRS_NO_SO=`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.
@@ -1061,6 +1076,11 @@
do
if [ -f modules/$moddir/Makefile.tmpl ] ; then
AUTODIRS="$AUTODIRS modules/$moddir"
+ fi
+done
+for moddir in $MODDIRS_NO_SO
+do
+ if [ -f modules/$moddir/Makefile.tmpl ] ; then
AUTOLIBS="$AUTOLIBS modules/$moddir/lib$moddir.a"
fi
done
@@ -1237,28 +1257,32 @@
INCDIR=../../include
EOF
if [ -f $moddir/Makefile.libdir ]; then
- # it's responsible for the rest of its Makefile
- :
- else
basedir=`echo $moddir | sed 's@^[^/]*/@@g'`
awk >> $moddir/Makefile < $tmpfile '
- BEGIN {
- printf "OBJS="
+ ($2 ~ /^modules\/'$basedir'\//) {
+ split($2, pp, "/");
+ split(pp[3], parts, ".");
+ libext=parts[2];
}
+ END {
+ printf "LIBEXT=%s\n", libext;
+ }'
+ # it's responsible for the rest of its Makefile...
+ else
+ basedir=`echo $moddir | sed 's@^[^/]*/@@g'`
+ OBJS=`awk < $tmpfile '
($1 == "Module" && $3 ~ /^modules\/'$basedir'\//) {
split ($3, pp, "/")
printf "%s ", pp[3]
}
- END {
- printf "\n"
- }'
-
- $CAT << 'EOF' >> $moddir/Makefile
-
-all: lib shlib
-
-EOF
- echo "LIB=lib$basedir.a" >> $moddir/Makefile
+ '`
+ echo "OBJS=$OBJS" >> $moddir/Makefile
+ if [ ".$OBJS" != . ]; then
+ echo "LIB=lib$basedir.a" >> $moddir/Makefile
+ else
+ # essential!
+ echo "LIB=" >> $moddir/Makefile
+ fi
awk >> $moddir/Makefile < $tmpfile '
($1 == "SharedModule" && $2 ~ /^modules\/'$basedir'\//) {
split($2, pp, "/")
@@ -1274,6 +1298,8 @@
}'
$CAT << 'EOF' >> $moddir/Makefile
+
+all: lib shlib
lib: $(LIB)
1.6 +32 -6 apache-1.3/src/modules/proxy/Makefile.tmpl
Index: Makefile.tmpl
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/modules/proxy/Makefile.tmpl,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Makefile.tmpl 1998/03/02 07:05:56 1.5
+++ Makefile.tmpl 1998/03/13 07:27:57 1.6
@@ -1,20 +1,46 @@
-LIB=libproxy.a
-OBJS=mod_proxy.o proxy_cache.o proxy_connect.o proxy_ftp.o proxy_http.o \
- proxy_util.o
+
+LIB=libproxy.$(LIBEXT)
+
+OBJS=\
+ mod_proxy.o \
+ proxy_cache.o proxy_connect.o proxy_ftp.o proxy_http.o proxy_util.o
+SHLIB_OBJS=\
+ mod_proxy.so-o \
+ proxy_cache.so-o proxy_connect.so-o proxy_ftp.so-o proxy_http.so-o proxy_util.so-o
+
INCDIR=../../include
-all: $(LIB)
+all: lib
-$(LIB): $(OBJS)
+lib: $(LIB)
+
+libproxy.a: $(OBJS)
rm -f $@
ar cr $@ $(OBJS)
$(RANLIB) $@
+libproxy.so: $(SHLIB_OBJS)
+ rm -f $@
+ $(LD) $(LDFLAGS_SHLIB) -o $@ $(SHLIB_OBJS)
+
+# 1. extension .o for shared objects cannot be used here because
+# first these files aren't still shared objects and second we
+# have to use a different name to trigger the different
+# implicit Make rule
+# 2. extension -so.o (as used elsewhere) cannot be used because
+# the suffix feature of Make really wants just .x, so we use
+# extension .so-o
+
+.SUFFIXES: .o .so-o
+
.c.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $(SPACER) $<
+.c.so-o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $(CFLAGS_SHLIB) $(SPACER) -o $*.so-o $<
+
clean:
- rm -f *.o $(LIB)
+ rm -f $(OBJS) $(SHLIB_OBJS) $(LIB)
# 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