diff --git a/.autom4te.cfg b/.autom4te.cfg new file mode 100644 index 0000000000..2ba53f26cd --- /dev/null +++ b/.autom4te.cfg @@ -0,0 +1,7 @@ +## ------------------ ## +## User Preferences. ## +## ------------------ ## + +begin-language: "Autoconf" +args: --warnings=no-syntax +end-language: "Autoconf" diff --git a/Make.rules.in b/Make.rules.in index f70a07aadb..18c74b9e8f 100644 --- a/Make.rules.in +++ b/Make.rules.in @@ -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@ @@ -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 diff --git a/Makefile.in b/Makefile.in index c621c1ced8..6a1c155fd0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,3 @@ -CC=@CC@ @SET_MAKE@ top_builddir=. @@ -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@ @@ -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 @@ -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 diff --git a/NEWS b/NEWS index 193175b4ca..2607bc689d 100644 --- a/NEWS +++ b/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 @@ -103,6 +103,7 @@ CVS - Bug 2540 - Fails to disable mod_delay if no DelayTable file exists. - Bug 2541 - 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 -------------------------------- diff --git a/configure.in b/configure.in index ad9f3d0763..704cc84f27 100644 --- a/configure.in +++ b/configure.in @@ -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` @@ -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; @@ -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" @@ -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; @@ -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 @@ -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" @@ -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) @@ -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) @@ -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 diff --git a/modules/Makefile.in b/modules/Makefile.in index 3e8df4066e..84d9ddc74c 100644 --- a/modules/Makefile.in +++ b/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 @@ -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