Skip to content

Commit

Permalink
Bug#2549 - Allow contrib modules to be built from multiple source files.
Browse files Browse the repository at this point in the history
  • Loading branch information
castaglia committed Jan 1, 2005
1 parent 0571b3d commit 00af6fd
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 34 deletions.
7 changes: 7 additions & 0 deletions .autom4te.cfg
@@ -0,0 +1,7 @@
## ------------------ ##
## User Preferences. ##
## ------------------ ##

begin-language: "Autoconf"
args: --warnings=no-syntax
end-language: "Autoconf"
14 changes: 14 additions & 0 deletions Make.rules.in
Expand Up @@ -8,11 +8,23 @@ localstatedir=@localstatedir@
rundir=@localstatedir@/proftpd
mandir=@mandir@

CC=@CC@
PLATFORM=@OSREL@ @OSTYPE@
LDFLAGS=@LDFLAGS@ @LIBDIRS@
LIBEXECDIR=@LIBEXECDIR@
LIBS=@LIBRARIES@ @LIBS@
LIBTOOL=@LIBTOOL@
CURSES_LIBS=@CURSES_LIBS@

INSTALL=@INSTALL@
INSTALL_USER=@install_user@
INSTALL_GROUP=@install_group@
INSTALL_BIN=$(INSTALL) @INSTALL_STRIP@ -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755
INSTALL_SBIN=$(INSTALL) @INSTALL_STRIP@ -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755
INSTALL_MAN=$(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0644

RM=rm -f

# Directory include paths.
#
INCLUDES=-I.. -I$(top_srcdir)/include @INCLUDES@
Expand All @@ -38,9 +50,11 @@ BUILD_OBJS=src/main.o src/timers.o src/sets.o src/pool.o src/table.o \
src/display.o src/auth.o src/fsio.o src/mkhome.o src/ctrls.o \
src/event.o src/var.o

SHARED_MODULE_DIRS=@SHARED_MODULE_DIRS@
SHARED_MODULE_OBJS=@SHARED_MODULE_OBJS@
BUILD_SHARED_MODULE_OBJS=@BUILD_SHARED_MODULE_OBJS@

STATIC_MODULE_DIRS=@STATIC_MODULE_DIRS@
STATIC_MODULE_OBJS=@STATIC_MODULE_OBJS@
BUILD_STATIC_MODULE_OBJS=@BUILD_STATIC_MODULE_OBJS@ modules/module_glue.o

Expand Down
16 changes: 3 additions & 13 deletions Makefile.in
@@ -1,4 +1,3 @@
CC=@CC@
@SET_MAKE@

top_builddir=.
Expand All @@ -11,19 +10,10 @@ include ./Make.rules

DIRS=@ADDL_DIRS@
EXEEXT=@EXEEXT@
INSTALL=@INSTALL@
INSTALL_DEPS=@INSTALL_DEPS@
LIBTOOL=@LIBTOOL@
LIBTOOL_DEPS=@LIBTOOL_DEPS@
LIBLTDL=@LIBLTDL@

INSTALL_USER=@install_user@
INSTALL_GROUP=@install_group@

INSTALL_BIN=$(INSTALL) @INSTALL_STRIP@ -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755
INSTALL_SBIN=$(INSTALL) @INSTALL_STRIP@ -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755
INSTALL_MAN=$(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0644

MAIN_LDFLAGS=@MAIN_LDFLAGS@
MAIN_LIBS=@MAIN_LIBS@

Expand All @@ -45,8 +35,8 @@ src: include/buildstamp.h dummy
cd src/ && $(MAKE) src

modules: include/buildstamp.h dummy
cd modules/ && $(MAKE) static-modules
test -z "$(SHARED_MODULE_OBJS)" || (cd modules/ && $(MAKE) shared-modules)
cd modules/ && $(MAKE) static
@test -z "$(SHARED_MODULE_OBJS)" -a -z "$(SHARED_MODULE_DIRS)" || (cd modules/ && $(MAKE) shared)

utils: include/buildstamp.h dummy
cd utils/ && $(MAKE) utils
Expand Down Expand Up @@ -94,7 +84,7 @@ install-proftpd: proftpd $(DESTDIR)$(localstatedir) $(DESTDIR)$(sysconfdir) $(DE
-chown -h $(INSTALL_USER):$(INSTALL_GROUP) $(DESTDIR)$(sbindir)/in.proftpd

install-modules: $(DESTDIR)$(libexecdir)
test -z "$(SHARED_MODULE_OBJS)" || (cd modules/ && $(MAKE) install)
@test -z "$(SHARED_MODULE_OBJS)" -a -z "$(SHARED_MODULE_DIRS)" || (cd modules/ && $(MAKE) install)

install-utils: $(DESTDIR)$(sbindir) $(DESTDIR)$(bindir)
$(INSTALL_BIN) ftpcount $(DESTDIR)$(bindir)/ftpcount
Expand Down
3 changes: 2 additions & 1 deletion NEWS
@@ -1,4 +1,4 @@
$Id: NEWS,v 1.639 2004-12-30 22:51:40 castaglia Exp $
$Id: NEWS,v 1.640 2005-01-01 03:02:05 castaglia Exp $

-----------------------------------------------------------------------------
More details on the bugs listed below can be found by using the bug number
Expand Down Expand Up @@ -103,6 +103,7 @@ CVS
- Bug 2540 - Fails to disable mod_delay if no DelayTable file exists.
- Bug 2541 - <Directory ~user> path resolved at startup time, rather than at
session time.
- Bug 2549 - Allow contrib modules to be built from multiple source files.

1.2.10 - Released 04-Sep-2004
--------------------------------
Expand Down
90 changes: 88 additions & 2 deletions configure.in
Expand Up @@ -106,10 +106,17 @@ if test $ac_cv_prog_gcc = yes; then
fi

dnl We substitute these in the man page templates.
if test x$exec_prefix = xNONE; then
if test x$exec_prefix = xNONE ; then
exec_prefix=$prefix
fi

if test x$prefix = xNONE ; then
prefix=/usr/local
bindir=/usr/local/bin
libexecdir=/usr/local/libexec
sbindir=/usr/local/sbin
fi

BINDIR=`eval echo $bindir`
AC_SUBST(BINDIR)
INCLUDEDIR=`eval echo $includedir`
Expand Down Expand Up @@ -1421,12 +1428,64 @@ dnl Add the proftpd support library
LIBS="-lsupp $LIBS"

dnl Module handling.
ac_shared_module_dirs=
ac_static_module_dirs=
GLUE_MODULE_OBJS="$ac_core_modules $ac_static_modules"

for module in $ac_shared_modules ; do
moduledir=`echo "$module" | sed -e 's/\.la$//'`;

if test -f $srcdir/modules/$src -o -f $srcdir/contrib/$src; then
continue

elif test -d $srcdir/modules/$moduledir; then
ac_shared_module_dirs="$ac_shared_module_dirs modules/$moduledir";
ac_shared_modules=`echo "$ac_shared_modules" | sed -e "s/$module//"`

elif test -d $srcdir/contrib/$moduledir; then
ac_shared_module_dirs="$ac_shared_module_dirs contrib/$moduledir";
ac_shared_modules=`echo "$ac_shared_modules" | sed -e "s/$module//"`
fi
done

for module in $ac_static_modules ; do
moduledir=`echo "$module" | sed -e 's/\.o$//'`;

if test -f $srcdir/modules/$src -o -f $srcdir/contrib/$src; then
continue

elif test -d $srcdir/modules/$moduledir; then
ac_static_module_dirs="$ac_static_module_dirs modules/$moduledir";
ac_static_modules=`echo "$ac_static_modules" | sed -e "s/$module//"`

elif test -d $srcdir/contrib/$moduledir; then
ac_static_module_dirs="$ac_static_module_dirs contrib/$moduledir";
ac_static_modules=`echo "$ac_static_modules" | sed -e "s/$module//"`
fi
done

dnl Yes, I know that this is not recommended Autoconf practice. I doubt,
dnl though, that many users will require the use of
dnl `./configure --help=recursive' to see all of the options.
if test ! -z "$ac_shared_module_dirs" ; then
AC_CONFIG_SUBDIRS($ac_shared_module_dirs)
else
ac_shared_module_dirs="\"\""
fi

if test ! -z "$ac_static_module_dirs" ; then
AC_CONFIG_SUBDIRS($ac_static_module_dirs)
else
ac_static_module_dirs="\"\""
fi

for module in $ac_shared_modules; do
if test x"$enable_dso" != xyes ; then
echo "cannot build shared modules without DSO support -- aborting"
exit 1
fi

moduledir=`echo "$module" | sed -e 's/\.la$//'`;
src=`echo "$module" | sed -e 's/\.la$//'`.c;
srcinc=`echo "$module" | sed -e 's/\.la$//'`.h;

Expand All @@ -1445,7 +1504,8 @@ for module in $ac_shared_modules; do
cd $olddir
fi

dnl Need to handle the $Libraries$ tag in shared modules
elif test -d $srcdir/modules/$moduledir -o -d $srcdir/contrib/$moduledir; then
continue

else
echo "source file '$srcdir/modules/$src' cannot be found -- aborting"
Expand All @@ -1455,6 +1515,7 @@ done

for module in $ac_static_modules; do
addonlibs=""
moduledir=`echo "$module" | sed -e 's/\.o$//'`;
src=`echo "$module" | sed -e 's/\.o$//'`.c;
srcinc=`echo "$module" | sed -e 's/\.o$//'`.h;

Expand Down Expand Up @@ -1502,6 +1563,9 @@ for module in $ac_static_modules; do
adir=`cat $srcdir/modules/$src | grep "\\\$Directories:" | sed -e 's/^.*\$Directories: \(.*\)\\$/\1/'`
test x"$adir" = x || ac_addl_dirs="$adir $ac_addl_dirs"

elif test -d $srcdir/modules/$moduledir -o -d $srcdir/contrib/$moduledir; then
continue

else
echo "source file '$srcdir/modules/$src' cannot be found -- aborting"
exit 1
Expand All @@ -1518,11 +1582,13 @@ ADDL_DIRS="$ac_addl_dirs"
INCLUDES="$ac_build_addl_includes"
LIBDIRS="$ac_build_addl_libdirs"
LIBRARIES="$ac_build_addl_libs"
SHARED_MODULE_DIRS="$ac_shared_module_dirs"
if test ! -z "$ac_shared_modules" ; then
SHARED_MODULE_OBJS="$ac_shared_modules"
else
SHARED_MODULE_OBJS="\"\""
fi
STATIC_MODULE_DIRS="$ac_static_module_dirs"
STATIC_MODULE_OBJS="$ac_core_modules $ac_static_modules"
BUILD_SHARED_MODULE_OBJS="$ac_build_shared_modules"
BUILD_STATIC_MODULE_OBJS="$ac_build_core_modules $ac_build_static_modules"
Expand Down Expand Up @@ -1577,6 +1643,7 @@ dnl tests to fail).
PR_CHECK_CC_OPT(Wno-long-double)

dnl And finally, generate the appropriate Make* and config.h
AC_SUBST(GLUE_MODULE_OBJS)
AC_SUBST(INSTALL_STRIP)
AC_SUBST(INCLTDL)
AC_SUBST(INSTALL_DEPS)
Expand All @@ -1588,7 +1655,9 @@ AC_SUBST(MAIN_LDFLAGS)
AC_SUBST(MAIN_LIBS)
AC_SUBST(MODULE_DEPS)
AC_SUBST(MODULE_LDFLAGS)
AC_SUBST(SHARED_MODULE_DIRS)
AC_SUBST(SHARED_MODULE_OBJS)
AC_SUBST(STATIC_MODULE_DIRS)
AC_SUBST(STATIC_MODULE_OBJS)
AC_SUBST(BUILD_SHARED_MODULE_OBJS)
AC_SUBST(BUILD_STATIC_MODULE_OBJS)
Expand All @@ -1608,3 +1677,20 @@ AC_OUTPUT(lib/Makefile
utils/ftpwho.1
Makefile Make.rules,
[echo timestamp > stamp-h])

dnl After everything has been generated, we need to double-check for
dnl header files in the module directories.
for moduledir in $ac_shared_module_dirs $ac_static_module_dirs; do
srcinc=`echo "$moduledir" | sed -e 's/^.*\///'`.h;

if test -d $srcdir/$moduledir ; then
if test ! -f $srcdir/include/$srcinc ; then
if test -f $srcdir/$moduledir/$srcinc ; then
olddir=`pwd`
cd $srcdir/include
ln -s ../$moduledir/$srcinc $srcinc
cd $olddir
fi
fi
fi
done
46 changes: 28 additions & 18 deletions modules/Makefile.in
@@ -1,26 +1,18 @@
CC=@CC@
@SET_MAKE@

top_builddir=@top_builddir@
top_srcdir=@top_srcdir@
srcdir=@srcdir@

LIBEXECDIR=@LIBEXECDIR@
LIBTOOL=@LIBTOOL@
GLUE_MODULE_OBJS=@GLUE_MODULE_OBJS@
SHARED_CFLAGS=-DPR_SHARED_MODULE
SHARED_LDFLAGS=-avoid-version -export-dynamic -module
VPATH=@srcdir@

INSTALL=@INSTALL@
INSTALL_USER=@install_user@
INSTALL_GROUP=@install_group@
INSTALL_BIN=$(INSTALL) @INSTALL_STRIP@ -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755

# In case make doesn't provide this
RM=rm -f

include ../Make.rules

.PHONY: ""

all:
@echo "Running make from top level directory."
cd .. && $(MAKE) all
Expand All @@ -36,22 +28,40 @@ Makefile: Makefile.in ../config.status
$(LIBTOOL) --mode=link $(CC) -o $@ -rpath $(LIBEXECDIR) $(LDFLAGS) $(SHARED_LDFLAGS) $(basename $@).lo `cat $(top_srcdir)/modules/$(basename $@).c | grep '$$Libraries:' | sed -e 's/^.*\$$Libraries: \(.*\)\\$$/\1/'`

module_glue.c: module_glue.c.tmpl $(STATIC_MODULE_OBJS)
srcdir=$(srcdir) $(srcdir)/glue.sh $(STATIC_MODULE_OBJS)

shared-modules: $(SHARED_MODULE_OBJS)

static-modules: $(STATIC_MODULE_OBJS) module_glue.o
srcdir=$(srcdir) $(srcdir)/glue.sh $(GLUE_MODULE_OBJS)

shared: $(SHARED_MODULE_OBJS)
@dirs="$(SHARED_MODULE_DIRS)"; \
for dir in $$dirs; do \
(cd $(top_srcdir)/$$dir/ && $(MAKE) shared); \
done

static: $(STATIC_MODULE_OBJS) module_glue.o
@dirs="$(STATIC_MODULE_DIRS)"; \
for dir in $$dirs; do \
module=`echo "$$dir" | sed -e 's/^.*\///'`; \
(cd $(top_srcdir)/$$dir/ && $(MAKE) static); \
cp $(top_srcdir)/$$dir/$$module.o .; \
done

install:
$(LIBTOOL) --mode=install $(INSTALL_BIN) $(SHARED_MODULE_OBJS) $(LIBEXECDIR)
@dirs="$(SHARED_MODULE_DIRS)"; \
for dir in $$dirs; do\
cd $(top_srcdir)/$$dir/ && $(MAKE) install; \
done

clean:
rm -f *.o module_glue.c
$(RM) *.o module_glue.c
$(LIBTOOL) --mode=clean $(RM) $(SHARED_MODULE_OBJS)
$(LIBTOOL) --mode=clean $(RM) `echo $(SHARED_MODULE_OBJS) | sed 's/\.la$\/.lo/g'`
@dirs="$(SHARED_MODULE_DIRS) $(STATIC_MODULE_DIRS)"; \
for dir in $$dirs; do\
cd $(top_srcdir)/$$dir/ && $(MAKE) clean; \
done

depend:
rm -f module_glue.c
$(RM) module_glue.c
makedepend $(CPPFLAGS) -Y *.c 2>/dev/null
makedepend $(CPPFLAGS) -Y -fMakefile.in *.c 2>/dev/null

Expand Down

0 comments on commit 00af6fd

Please sign in to comment.