This commit is contained in:
Graeme Walker 2007-04-10 12:00:00 +00:00
parent 446ba5e515
commit ed23b3c747
369 changed files with 20467 additions and 10938 deletions

View File

@ -1,6 +1,21 @@
E-MailRelay Change Log
======================
1.4 -> 1.5
----------
* New installation and configuration GUI using TrollTech Qt 4.x ("./configure --enable-gui")
* Default address verifier accepts all addresses as valid and never treats them as local mailboxes.
* Fix for server exit bug when failing to send data down a newly accepted connection.
* Spooled content files can be left in the parent directory to save diskspace when using "--pop-by-name".
* Client protocol improved for the case where there are no valid recipients.
* New "--syslog" switch to override "--no-syslog".
* New "--filter-timeout" switch added.
* Support for "--foo=bar" switch syntax (ie. with "=").
* Multiple listening interfaces allowed with a comma-separated "--interface" list.
* New "--filter" utility called "emailrelay-filter-copy" to support "--pop-by-name".
* Documentation also created in docbook format (requires xmlto).
* Windows installation document revised.
1.3.3 -> 1.4
------------
* POP3 server (enable with "--pop", disable at build-time with "./configure --disable-pop").

23
INSTALL
View File

@ -1,17 +1,17 @@
Introduction
============
What follows are generic installation instructions for doing a
GNU-style "./configure; make; make install-strip" installation from
source under Linux, FreeBSD etc. The Windows installation instructions
are in a separate document.
With the exception of this introduction this document contains generic
installation instructions for doing a GNU-style
"./configure; make; sudo make install" installation from source under Linux,
FreeBSD etc. The Windows installation instructions are in a separate document,
"doc/windows.txt".
The E-MailRelay "configure" script provides a few extra switches,
which are shown in the output of "./configure --help". The most
important of these is "--enable-fhs", which overrides all other
The E-MailRelay "configure" script provides a few extra confiruation
switches, which are shown in the output of "./configure --help". The
most important of these is "--enable-fhs", which overrides all other
directory modifiers, forcing compliance with the File Hierarchy
Standard. This switch is used in building the RPMs, and may become the
default in future releases.
Standard.
There are also a set of variables which can be defined on the
"configure" command line for controlling all the installation
@ -23,8 +23,9 @@ refer to the E-MailRelay reference document under "Files and directories".
compiler-specific help in the relevant lib/<compiler> directory.
The E-MailRelay user guide describes what needs to be done after the
"make install" in order to get the emailrelay daemon to start up at
boot-time, automatically forward e-mail and bounce failed mail.
"make install" in order to get the emailrelay daemon to start up at boot-time,
automatically forward e-mail and bounce failed mail. You could also try running
the configuration GUI program, "emailrelay-gui", if available.
Basic Installation
==================

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
@ -18,7 +18,7 @@
##
#
EXTRA_DIST = emailrelay.spec ChangeLog
SUBDIRS = src bin lib doc etc
SUBDIRS = src bin lib etc doc
e_doc_DATA = NEWS README changelog.gz
CLEANFILES = changelog.gz
changelog.gz: ChangeLog

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -14,15 +14,11 @@
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -45,21 +41,30 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno configure.status.lineno
mkinstalldirs = $(mkdir_p)
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(e_docdir)"
e_docDATA_INSTALL = $(INSTALL_DATA)
DATA = $(e_doc_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
@ -75,8 +80,6 @@ GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -100,9 +103,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -113,10 +118,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -125,52 +130,67 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
#
#
EXTRA_DIST = emailrelay.spec ChangeLog
SUBDIRS = src bin lib doc etc
SUBDIRS = src bin lib etc doc
e_doc_DATA = NEWS README changelog.gz
CLEANFILES = changelog.gz
all: config.h
@ -214,7 +234,7 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
config.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) stamp-h1; \
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
else :; fi
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@ -227,13 +247,12 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
distclean-hdr:
-rm -f config.h stamp-h1
uninstall-info-am:
install-e_docDATA: $(e_doc_DATA)
@$(NORMAL_INSTALL)
test -z "$(e_docdir)" || $(mkdir_p) "$(DESTDIR)$(e_docdir)"
test -z "$(e_docdir)" || $(MKDIR_P) "$(DESTDIR)$(e_docdir)"
@list='$(e_doc_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
f=$(am__strip_dir) \
echo " $(e_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_docdir)/$$f'"; \
$(e_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_docdir)/$$f"; \
done
@ -241,7 +260,7 @@ install-e_docDATA: $(e_doc_DATA)
uninstall-e_docDATA:
@$(NORMAL_UNINSTALL)
@list='$(e_doc_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(e_docdir)/$$f'"; \
rm -f "$(DESTDIR)$(e_docdir)/$$f"; \
done
@ -253,7 +272,13 @@ uninstall-e_docDATA:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -265,15 +290,20 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@ -294,7 +324,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -319,14 +349,16 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if (etags --etags-include --version) >/dev/null 2>&1; then \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
@ -336,9 +368,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -364,23 +398,22 @@ distclean-tags:
distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
test -d $(distdir) || mkdir $(distdir)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -391,15 +424,19 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| mkdir "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="../$(top_distdir)" \
distdir="../$(distdir)/$$subdir" \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
am__remove_distdir=: \
am__skip_length_check=: \
distdir) \
|| exit 1; \
fi; \
@ -407,18 +444,18 @@ distdir: $(DISTFILES)
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-tarZ: distdir
$(AMTAR) chof - $(distdir) | compress -c >$(distdir).tar.Z
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
@ -431,7 +468,7 @@ dist-zip: distdir
$(am__remove_distdir)
dist dist-all: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
@ -440,13 +477,13 @@ dist dist-all: distdir
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | unshar ;;\
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
@ -482,7 +519,7 @@ distcheck: dist
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
@ -507,7 +544,7 @@ all-am: Makefile $(DATA) config.h
installdirs: installdirs-recursive
installdirs-am:
for dir in "$(DESTDIR)$(e_docdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-recursive
install-exec: install-exec-recursive
@ -529,7 +566,7 @@ clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -555,12 +592,20 @@ info-am:
install-data-am: install-e_docDATA
install-dvi: install-dvi-recursive
install-exec-am:
install-html: install-html-recursive
install-info: install-info-recursive
install-man:
install-pdf: install-pdf-recursive
install-ps: install-ps-recursive
installcheck-am:
maintainer-clean: maintainer-clean-recursive
@ -581,25 +626,26 @@ ps: ps-recursive
ps-am:
uninstall-am: uninstall-e_docDATA uninstall-info-am uninstall-local
uninstall-am: uninstall-e_docDATA uninstall-local
uninstall-info: uninstall-info-recursive
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
check-am clean clean-generic clean-recursive ctags \
ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
dist-tarZ dist-zip distcheck distclean distclean-generic \
distclean-hdr distclean-recursive distclean-tags \
distcleancheck distdir distuninstallcheck dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-e_docDATA install-exec install-exec-am \
install-info install-info-am install-man install-strip \
installcheck installcheck-am installdirs installdirs-am \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am uninstall-e_docDATA uninstall-info-am \
uninstall-local
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-tags distcleancheck \
distdir distuninstallcheck dvi dvi-am html html-am info \
info-am install install-am install-data install-data-am \
install-dvi install-dvi-am install-e_docDATA install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
uninstall-e_docDATA uninstall-local
changelog.gz: ChangeLog
if test -n "$(GZIP)" ; then $(GZIP) -c $(top_srcdir)/ChangeLog > changelog.tmp && mv changelog.tmp changelog.gz ; fi

67
README
View File

@ -14,48 +14,55 @@ Because of its functional simplicity E-MailRelay is easy to configure, typically
only requiring the address of the target SMTP server to be put on the command
line.
E-MailRelay can also run as a POP3 server.
E-MailRelay can also run as a POP3 server. Messages received over SMTP can be
automatically dropped into several independent POP3 mailboxes.
C++ source code is available for Linux, FreeBSD, MacOS X etc, and Windows.
Distribution is under the GNU General Public License.
Quick start
-----------
To run the program as a proxy use the "--as-proxy" command-line switch followed
by the address of the target SMTP server. If you want to edit or filter e-mail
as it passes through the proxy then specify your pre-processor program with the
"--filter" switch. You can optionally change the listening port number using
"--port" and the spool directory using "--spool-dir".
To use E-MailRelay in store-and-forward mode use the "--as-server" switch to
start the storage daemon in the background, and then trigger delivery of spooled
messages by running with the "--as-client" switch and the address of the target
host.
For example, to start up a local proxy that passes messages to some "addsig"
script and then forwards them to an MTA running on "smarthost", use a command
like this:
For example, to start a storage daemon listening on port 10025 use a command like
this:
emailrelay --as-proxy smarthost:smtp --filter $HOME/bin/addsig --spool-dir $HOME/tmp
emailrelay --as-server --port 10025 --spool-dir /tmp
To use E-MailRelay as a store-and-forward MTA use the "--as-server" switch
to start the storage daemon in the background. And then trigger delivery of
spooled messages by running emailrelay with the "--as-client" switch followed
by the address of the target SMTP server.
And then to forward the spooled mail to "smarthost" run something like this:
For example, to start a storage daemon listening on port 10025 use a command
like this:
emailrelay --as-client smarthost:smtp --spool-dir /tmp
emailrelay --as-server --port 10025 --spool-dir $HOME/tmp
To get behaviour more like a proxy you can add the "--poll" switch so that
messages are forwarded continuously rather than on-demand. This example starts a
store-and-forward server that forwards spooled-up e-mail every hour:
And then to forward the spooled mail to "smarthost" run somthing like this:
emailrelay --as-server --poll 3600 --forward-to smarthost:smtp
emailrelay --as-client smarthost:smtp --spool-dir $HOME/tmp
For a proxy server that forwards each message as it is being received, without
any delay, you can use the "--as-proxy" mode:
To run E-MailRelay as a POP server without SMTP you can use a command like this:
emailrelay --as-proxy smarthost:smtp
If you want to edit or filter e-mail as it passes through the proxy then specify
your pre-processor program with the "--filter" switch, something like this:
emailrelay --as-proxy smarthost:smtp --filter /usr/local/bin/addsig
To run E-MailRelay as a POP server without SMTP use "--pop" and "--no-smtp":
emailrelay --pop --no-smtp --log --close-stderr
The "emailrelay-submit" utility can be used to put messages straight into the
spool directory.
spool directory so that the POP clients can fetch them.
By default E-MailRelay will always reject connections from remote machines. To
allow connections from anywhere use the "--remote-clients" switch.
Note that by default E-MailRelay will always reject connections from remote
machines. To allow connections from anywhere use the "--remote-clients" switch,
but please consider the implications if your machine is connected to the
internet.
For more information on the command-line options refer to the reference guide
or run:
@ -79,10 +86,10 @@ Source code documentation will be generated when building from source if
Configurations
--------------
Recent releases were developed on SuSE Linux 9.0 using:
* linux 2.6.11
* gcc 3.3.3
* autoconf 2.59
Recent releases were developed on Ubuntu Linux 7.04 using:
* linux 2.6.20
* gcc 4.1.2
* autoconf 2.61
and on Windows NT4 SP6 using:
* MSVC 6.0 SP3
@ -93,7 +100,7 @@ The code was originally developed on SuSE Linux 7.1 using:
* glibc 2.2.4 (libc.so.6)
* autoconf 2.52
and to Windows 98 using:
and on Windows 98 using:
* MSVC 6.0
Versions of the code have also been built successfully on:
@ -108,10 +115,12 @@ Versions of the code have also been built successfully on:
* Windows NT 4.0 using MSVC 6.0
* Windows NT 4.0 using Cygwin (DLL 1.3.22) and gcc 3.2
* Windows NT 4.0 using MinGW 2.0.0 and gcc 3.2
* Windows XP using MinGW 3.1.0 gcc 3.4.2
Feedback
--------
Please feel free to e-mail the author at
"mailto:graeme_walker@users.sourceforge.net".
"mailto:graeme_walker@users.sourceforge.net" or the SourceForge mailing list
"mailto:emailrelay-help@lists.sourceforge.net".

View File

@ -1,4 +1,4 @@
dnl Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
dnl Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
dnl
dnl This program is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU General Public License
@ -202,17 +202,42 @@ then
fi
])
dnl enable-fastbuild
dnl enable-gui
dnl
AC_DEFUN([ENABLE_FASTBUILD],
AC_DEFUN([ENABLE_GUI],
[
if test "$enable_fastbuild" = "yes"
qt4="no"
qt4moc="no"
if test "$enable_gui" = "no"
then
CXX="`pwd`/bin/fastbuild.sh"
chmod +x "$CXX"
AR="`pwd`/bin/fastbuild.sh"
RANLIB="true"
AC_DEFINE(HAVE_GUI,0,[Define to enable gui code])
else
PKG_CHECK_MODULES(QT,QtGui >= 4.0.1,[qt4=yes],[AC_MSG_RESULT([no])])
if test "$qt4" = "yes"
then
MOC="${e_qtmoc}"
AC_PATH_PROG(MOC,moc)
AC_MSG_CHECKING([moc is for qt 4])
if test x$GREP = x ; then GREP=grep ; fi
if test -x "$MOC" -a "`$MOC -v 2>&1 | $GREP 'Qt 4'`" != "" ; then
AC_MSG_RESULT([yes])
qt4moc="yes"
else
AC_MSG_RESULT([no])
fi
else
QT_LIBS=""
AC_SUBST(QT_LIBS)
fi
fi
if test "$qt4moc" = "yes"
then
AC_DEFINE(HAVE_GUI,1,[Define to enable gui code])
else
AC_DEFINE(HAVE_GUI,0,[Define to enable gui code])
fi
AC_SUBST(MOC)
AM_CONDITIONAL(GUI,test x$enable_gui != xno -a x$qt4moc = xyes )
])
dnl enable-pop

832
aclocal.m4 vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
@ -18,12 +18,12 @@
##
#
EXTRA_DIST = emailrelay-doxygen-filter.sh_ emailrelay-test.sh_ emailrelay-soak.sh_ emailrelay.sh_ txt2html.sh_ txt2mu.sh_ mu2html.sh_ expand.sh_ emailrelay-notify.sh_ emailrelay-resubmit.sh_ emailrelay-deliver.sh_ emailrelay-process.sh_ emailrelay-runperl.js emailrelay-resubmit.js fastbuild.sh emailrelay-submit.sh_
noinst_cleanup = emailrelay-doxygen-filter.sh emailrelay-test.sh emailrelay-soak.sh
noinst_SCRIPTS = emailrelay-doxygen-filter.sh emailrelay-test.sh emailrelay-soak.sh emailrelay-runperl.js emailrelay-resubmit.js
EXTRA_DIST = emailrelay-test.sh_ emailrelay-soak.sh_ emailrelay.sh_ txt2html.sh_ txt2mu.sh_ mu2html.sh_ mu2docbook.sh_ expand.sh_ emailrelay-notify.sh_ emailrelay-resubmit.sh_ emailrelay-deliver.sh_ emailrelay-process.sh_ emailrelay-runperl.js emailrelay-resubmit.js emailrelay-submit.sh_
noinst_cleanup = emailrelay-test.sh emailrelay-soak.sh
noinst_SCRIPTS = emailrelay-test.sh emailrelay-soak.sh emailrelay-runperl.js emailrelay-resubmit.js
e_init_SCRIPTS = emailrelay
e_examples_DATA = emailrelay-process.sh emailrelay-notify.sh emailrelay-deliver.sh emailrelay-resubmit.sh emailrelay-submit.sh
work_scripts = txt2mu.sh mu2html.sh expand.sh txt2html.sh emailrelay.sh
work_scripts = txt2mu.sh mu2html.sh mu2docbook.sh expand.sh txt2html.sh emailrelay.sh
CLEANFILES = $(noinst_cleanup) $(e_init_SCRIPTS) $(e_examples_DATA) $(work_scripts)

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -18,15 +18,11 @@
#
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -45,20 +41,25 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(e_initdir)" "$(DESTDIR)$(e_examplesdir)"
am__installdirs = "$(DESTDIR)$(e_initdir)" \
"$(DESTDIR)$(e_examplesdir)"
e_initSCRIPT_INSTALL = $(INSTALL_SCRIPT)
SCRIPTS = $(e_init_SCRIPTS) $(noinst_SCRIPTS)
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
e_examplesDATA_INSTALL = $(INSTALL_DATA)
DATA = $(e_examples_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -82,9 +83,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -95,10 +98,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -107,53 +110,68 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
EXTRA_DIST = emailrelay-doxygen-filter.sh_ emailrelay-test.sh_ emailrelay-soak.sh_ emailrelay.sh_ txt2html.sh_ txt2mu.sh_ mu2html.sh_ expand.sh_ emailrelay-notify.sh_ emailrelay-resubmit.sh_ emailrelay-deliver.sh_ emailrelay-process.sh_ emailrelay-runperl.js emailrelay-resubmit.js fastbuild.sh emailrelay-submit.sh_
noinst_cleanup = emailrelay-doxygen-filter.sh emailrelay-test.sh emailrelay-soak.sh
noinst_SCRIPTS = emailrelay-doxygen-filter.sh emailrelay-test.sh emailrelay-soak.sh emailrelay-runperl.js emailrelay-resubmit.js
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = emailrelay-test.sh_ emailrelay-soak.sh_ emailrelay.sh_ txt2html.sh_ txt2mu.sh_ mu2html.sh_ mu2docbook.sh_ expand.sh_ emailrelay-notify.sh_ emailrelay-resubmit.sh_ emailrelay-deliver.sh_ emailrelay-process.sh_ emailrelay-runperl.js emailrelay-resubmit.js emailrelay-submit.sh_
noinst_cleanup = emailrelay-test.sh emailrelay-soak.sh
noinst_SCRIPTS = emailrelay-test.sh emailrelay-soak.sh emailrelay-runperl.js emailrelay-resubmit.js
e_init_SCRIPTS = emailrelay
e_examples_DATA = emailrelay-process.sh emailrelay-notify.sh emailrelay-deliver.sh emailrelay-resubmit.sh emailrelay-submit.sh
work_scripts = txt2mu.sh mu2html.sh expand.sh txt2html.sh emailrelay.sh
work_scripts = txt2mu.sh mu2html.sh mu2docbook.sh expand.sh txt2html.sh emailrelay.sh
CLEANFILES = $(noinst_cleanup) $(e_init_SCRIPTS) $(e_examples_DATA) $(work_scripts)
TESTS = emailrelay-test.sh
SUFFIXES = .sh_ .sh
@ -192,7 +210,7 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-e_initSCRIPTS: $(e_init_SCRIPTS)
@$(NORMAL_INSTALL)
test -z "$(e_initdir)" || $(mkdir_p) "$(DESTDIR)$(e_initdir)"
test -z "$(e_initdir)" || $(MKDIR_P) "$(DESTDIR)$(e_initdir)"
@list='$(e_init_SCRIPTS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
if test -f $$d$$p; then \
@ -209,13 +227,12 @@ uninstall-e_initSCRIPTS:
echo " rm -f '$(DESTDIR)$(e_initdir)/$$f'"; \
rm -f "$(DESTDIR)$(e_initdir)/$$f"; \
done
uninstall-info-am:
install-e_examplesDATA: $(e_examples_DATA)
@$(NORMAL_INSTALL)
test -z "$(e_examplesdir)" || $(mkdir_p) "$(DESTDIR)$(e_examplesdir)"
test -z "$(e_examplesdir)" || $(MKDIR_P) "$(DESTDIR)$(e_examplesdir)"
@list='$(e_examples_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
f=$(am__strip_dir) \
echo " $(e_examplesDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_examplesdir)/$$f'"; \
$(e_examplesDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_examplesdir)/$$f"; \
done
@ -223,7 +240,7 @@ install-e_examplesDATA: $(e_examples_DATA)
uninstall-e_examplesDATA:
@$(NORMAL_UNINSTALL)
@list='$(e_examples_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(e_examplesdir)/$$f'"; \
rm -f "$(DESTDIR)$(e_examplesdir)/$$f"; \
done
@ -235,7 +252,7 @@ CTAGS:
check-TESTS: $(TESTS)
@failed=0; all=0; xfail=0; xpass=0; skip=0; \
@failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \
srcdir=$(srcdir); export srcdir; \
list=' $(TESTS) '; \
if test -n "$$list"; then \
@ -246,7 +263,7 @@ check-TESTS: $(TESTS)
if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
all=`expr $$all + 1`; \
case " $(XFAIL_TESTS) " in \
*" $$tst "*) \
*$$ws$$tst$$ws*) \
xpass=`expr $$xpass + 1`; \
failed=`expr $$failed + 1`; \
echo "XPASS: $$tst"; \
@ -258,7 +275,7 @@ check-TESTS: $(TESTS)
elif test $$? -ne 77; then \
all=`expr $$all + 1`; \
case " $(XFAIL_TESTS) " in \
*" $$tst "*) \
*$$ws$$tst$$ws*) \
xfail=`expr $$xfail + 1`; \
echo "XFAIL: $$tst"; \
;; \
@ -289,41 +306,40 @@ check-TESTS: $(TESTS)
skipped=""; \
if test "$$skip" -ne 0; then \
skipped="($$skip tests were not run)"; \
test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \
test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
dashes="$$skipped"; \
fi; \
report=""; \
if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
report="Please report to $(PACKAGE_BUGREPORT)"; \
test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \
test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
dashes="$$report"; \
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
echo "$$dashes"; \
echo "$$banner"; \
test -n "$$skipped" && echo "$$skipped"; \
test -n "$$report" && echo "$$report"; \
test -z "$$skipped" || echo "$$skipped"; \
test -z "$$report" || echo "$$report"; \
echo "$$dashes"; \
test "$$failed" -eq 0; \
else :; fi
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -340,7 +356,7 @@ check: check-am
all-am: Makefile $(SCRIPTS) $(DATA)
installdirs:
for dir in "$(DESTDIR)$(e_initdir)" "$(DESTDIR)$(e_examplesdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
@ -362,7 +378,7 @@ clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -388,12 +404,20 @@ info-am:
install-data-am: install-data-local install-e_examplesDATA \
install-e_initSCRIPTS
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -413,19 +437,23 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-e_examplesDATA uninstall-e_initSCRIPTS \
uninstall-info-am uninstall-local
uninstall-local
.MAKE: install-am install-strip
.PHONY: all all-am check check-TESTS check-am clean clean-generic \
distclean distclean-generic distdir dvi dvi-am html html-am \
info info-am install install-am install-data install-data-am \
install-data-local install-e_examplesDATA \
install-e_initSCRIPTS install-exec install-exec-am \
install-info install-info-am install-man install-strip \
installcheck installcheck-am installdirs maintainer-clean \
install-data-local install-dvi install-dvi-am \
install-e_examplesDATA install-e_initSCRIPTS install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am uninstall uninstall-am \
uninstall-e_examplesDATA uninstall-e_initSCRIPTS \
uninstall-info-am uninstall-local
uninstall-local
.sh_.sh:

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@ -22,9 +22,7 @@
# emailrelay-deliver.sh
#
# Looks for local mail in the E-MailRelay spool directory, and delivers
# it using 'procmail'. Note that the only local mail should be for the local
# postmaster, since E-MailRelay will not accept mail for any other
# local recipient.
# it using 'procmail'.
#
# usage: emailrelay-deliver.sh [<spool-dir>]
#

View File

@ -1,203 +0,0 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# ===
#
# A doxygen filter.
#
awk="gawk"
if test "`echo a | ${awk} '{print}'`" != "a"
then
awk="nawk"
fi 2>/dev/null
# PreFilter()
# Removes banner comments (including legalese) from the top of the file.
#
PreFilter()
{
${awk} ' BEGIN {
in_start = 1
}
{
if( in_start && !match( $0 , "^//" ) )
in_start = 0
if( !in_start )
print
} '
}
# SourceFilter()
# Adds doxygen annotation for implementation class comments.
#
SourceFilter()
{
${awk} ' BEGIN { in_class_comment = 0 }
{
start = match( $0 , "// Class:" ) == 1
end = match( $0 , "class" ) == 1
if( !in_class_comment && start )
{
in_class_comment = 1
print "/**"
}
else if( !in_class_comment )
{
print
}
else if( end )
{
in_class_comment = 0
print " */"
print
}
else
{
sub( "^// Description: " , "" )
sub( "^// See also: " , "\\see " )
sub( "^//" , "" )
printf( " * %s\n" , $0 )
}
}
'
}
# HeaderFilter()
# Adds doxygen annotation to header-file comments.
#
HeaderFilter()
{
${awk} ' BEGIN {
was_comment_line = 0
was_code_line = 0
re_namespace = "^[[:space:]]*namespace"
re_comment = "^[[:space:]]*//"
re_code = "^[[:space:]]*///"
}
{
is_namespace_line = match($0,re_namespace)
is_comment_line = match($0,re_comment)
re_comment_length = RLENGTH
is_code_line = match($0,re_code)
re_code_length = RLENGTH
if( is_namespace_line )
{
printf( "/*! \\namespace %s */\n" , $2 )
}
if( is_code_line )
{
sub( "///" , "//" )
}
if( is_comment_line )
{
indent = substr( $0 , 1 , re_comment_length-2 )
sub( "Class: " , "\\class " )
sub( "Typedef: .*" , "" )
sub( "Description: " , "" )
sub( "See also: " , "\\see " )
if( was_comment_line )
sub( re_comment , indent " " )
else if( length(indent) )
sub( re_comment , indent "/**<" )
else
sub( re_comment , indent "/** " )
}
if( is_code_line && !was_code_line )
{
print indent "\\code"
}
if( was_code_line && !is_code_line )
{
print indent "\\endcode"
}
if( was_comment_line && !is_comment_line )
{
print indent "*/"
}
print
was_comment_line = is_comment_line
was_code_line = is_code_line
} '
}
# PostFilter()
# Deals with nested-class descriptions with a format like "class Foo // comment".
#
PostFilter()
{
${awk} '
{
if( match( $0 , "^[[:space:]]*class[[:space:]][^/]*//" ) ||
match( $0 , "^[[:space:]]*union[[:space:]][^/]*//" ) ||
match( $0 , "^[[:space:]]*struct[[:space:]][^/]*//" ) )
{
class = substr( $0 , 1 , RLENGTH-2 )
description = substr( $0 , RLENGTH+1 )
printf( " /** %s */\n" , description )
printf( "%s\n" , class )
}
else
{
print
}
} '
}
BasicFilter()
{
cat
echo '/* \\file */'
}
name="`basename \"${1}\"`"
type="`echo \"${name}\" | ${awk} -F . '{print $NF}'`"
classes="`fgrep '// Class:' \"${1}\" | wc -l`"
if test "${name}" = "md5.h" -o "${name}" = "md5.cpp"
then
cat "${1}"
elif test "${name}" = "gdef.h" -o "${name}" = "gnet.h"
then
cat "${1}" | BasicFilter
elif test "${type}" = "cpp" -a "${classes}" -eq 0
then
cat "${1}" | BasicFilter
elif test "${type}" = "cpp" -a "${classes}" -gt 0
then
cat "${1}" | SourceFilter | PostFilter
else
cat "${1}" | PreFilter | HeaderFilter | PostFilter
fi

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,32 +17,26 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// emailrelay-resubmit.js
//
// Looks for all failed e-mails in the E-MailRelay spool directory
// and resubmits them. However, if an e-mail has been retried five
// times already then it is not resubmitted again.
//
// usage: cscript //nologo emailrelay-resubmit.js [<spool-dir>]
//
///
/// \file emailrelay-resubmit.js
///
// configuration
//
/// configuration
///
var cfg_store = "__SPOOL_DIR__" ;
var cfg_retry_limit = 5 ;
var cfg_debug = true ;
// parse the command line
//
/// parse the command line
///
var args = WScript.Arguments
if( args.length >= 1 )
{
cfg_store = args(0) ;
}
// debugging
//
/// debugging
///
function debug( line )
{
if( cfg_debug )
@ -51,8 +45,8 @@ function debug( line )
}
}
// check the spool directory
//
/// check the spool directory
///
var fso = WScript.CreateObject( "Scripting.FileSystemObject" ) ;
if( ! fso.FolderExists( cfg_store ) )
{
@ -60,20 +54,20 @@ if( ! fso.FolderExists( cfg_store ) )
WScript.Quit( 1 ) ;
}
// for each file...
//
/// for each file...
///
var folder = fso.GetFolder( cfg_store ) ;
var re_reason = new RegExp( "MailRelay-Reason: " , "" ) ;
var re_bad = new RegExp( ".*\.bad" , "i" ) ;
var iter = new Enumerator( folder.Files ) ;
for( ; ! iter.atEnd() ; iter.moveNext() )
{
// if a failed envelope file...
///< if a failed envelope file...
var path = new String(iter.item()) ;
debug( "path: " + path ) ;
if( path.match(re_bad) )
{
// count the failure lines
///< count the failure lines
var stream = fso.OpenTextFile( path , 1 ) ;
var failures = 0 ;
while( !stream.AtEndOfStream )
@ -89,7 +83,7 @@ for( ; ! iter.atEnd() ; iter.moveNext() )
debug( "failures: " + failures ) ;
if( failures < cfg_retry_limit )
{
// remove the ".bad" suffix
///< remove the ".bad" suffix
var new_path = path.substr( 0 , path.length-4 ) ;
debug( "rename: " + path + " -> " + new_path ) ;
fso.MoveFile( path , new_path ) ;

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,47 +17,28 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// emailrelay-runperl.js
//
// An example JavaScript wrapper that runs a perl script for E-MailRelay.
// The name of the perl script is hard-coded below: edit as necessary.
//
// This JavaScript can be installed as an E-MailRelay "--filter" program
// using an E-MailRelay command-line something like this:
//
// emailrelay --as-server --filter "c:/winnt/system32/cscript.exe //nologo c:/program\ files/emailrelay/emailrelay-runperl.js"
//
// Note the use of "cscript.exe" to execute the JavaScript, and the backslash
// to escape the space in the path.
//
// The e-mail's content file is fed to the perl script's standard input.
// The perl code is expected to process this to its standard output and then
// terminate with a zero exit code.
//
// The implementation of this JavaScript makes use of "CMD.EXE", which may be
// not be available on some versions of Windows.
//
// Edit the next two lines as necessary, but avoid spaces in paths:
///
/// \file emailrelay-runperl.js
///
var cfg_perl="perl -S -T -w"
var cfg_perl_script="spamassassin"
// parse our command line
/// parse our command line
var args = WScript.Arguments
var filename = args(0)
// prepare a command using CMD.EXE to do file redirection
/// prepare a command using CMD.EXE to do file redirection
var cmd_in = "\"" + filename + "\""
var cmd_out = "\"" + filename + ".tmp\""
var cmd_err = "\"" + filename + ".err\""
var cmd_perl = "cmd /c " + cfg_perl + " " + cfg_perl_script
var cmd = cmd_perl + " < " + cmd_in + " > " + cmd_out + " 2> " + cmd_err
// run the command
/// run the command
var sh = WScript.CreateObject("WScript.Shell")
var rc = sh.Run( cmd , 0 , true )
// check the file redirection
/// check the file redirection
var fs = WScript.CreateObject("Scripting.FileSystemObject")
if( !fs.FileExists(filename+".tmp") || !fs.FileExists(filename+".err") )
{
@ -65,7 +46,7 @@ if( !fs.FileExists(filename+".tmp") || !fs.FileExists(filename+".err") )
WScript.Quit( 2 )
}
// success or failure
/// success or failure
if( rc == 0 )
{
fs.DeleteFile( filename )

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,108 +0,0 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# ===
#
# fastbuild.sh
#
# A complier stub for doing fastbuilds, where each executable
# is compiled from a single source-file containing a long
# list of source-file includes.
#
# This script will probably not work on weird o/s's. It
# was developed on SUSE 9.0.
#
Ar()
{
echo fastbuild: creating empty library "${2}"
touch "${2}"
}
ReallyCompile()
{
source_="${1}"
new_="${2}"
shift
shift
echo fastbuild: compiling "${new_}" instead of "${source_}"
g++ `echo $@ | sed "s/${source_}/${new_}/g"`
}
OutputFilter()
{
tr '\t' ' ' | sed 's/.* -o //' | sed 's/ .*//'
}
Skip()
{
source_="${1}"
shift
output_="`echo $@ | OutputFilter`"
echo fastbuild: skipping "${source}"
touch "${output_}"
}
Compile()
{
source="`echo $@ | sed 's/.* //'`"
case "${source}" in
main.cpp) ReallyCompile "${source}" emailrelay-fastbuild.cpp "$@" ;;
passwd.cpp) ReallyCompile "${source}" passwd-fastbuild.cpp "$@" ;;
submit.cpp) ReallyCompile "${source}" submit-fastbuild.cpp "$@" ;;
*) Skip "${source}" "$@" ;;
esac
}
ReallyLink()
{
echo fastbuild: linking $2 into $1
g++ -o "${1}" "${2}"
}
Link()
{
output_="`echo $@ | OutputFilter`"
output_name_="`basename \"${output_}\"`"
echo fastbuild: linking "${output_name_}"
case "${output_name_}" in
emailrelay) ReallyLink ${output_} main.o ;;
emailrelay-submit) ReallyLink ${output_} submit.o ;;
emailrelay-passwd) ReallyLink ${output_} passwd.o ;;
*) echo fastbuild: error: unrecognised target binary >&2 ;;
esac
}
if test "${1}" = "cru"
then
Ar "$@"
:
elif test "`echo $@ | grep '\.cpp *$' | wc -l`" -ne 0
then
Compile "$@"
:
elif test "`echo $@ | grep -- '-o *[-a-z][-a-z]* ' | wc -l`" -ne 0
then
Link "$@"
:
else
echo fastbuild: unrecognised command line
g++ "$@"
fi

315
bin/mu2docbook.sh_ Normal file
View File

@ -0,0 +1,315 @@
#!/bin/sh
#
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# ===
#
# mu2docbook.sh
#
# Mark-up to docbook converter. Converts the output of "txt2mu.sh"
# into docbook markup.
#
# Does some in-line formatting independently of the line-based
# mark-up in the input. For example, it converts quoted words into
# "<em></em>" tags, and it converts "*foo* [bar]" text into
# hypertext links.
#
# The "-x" flag suppresses the output of the xml header. This is
# useful when the output is to be spliced into another document.
#
# usage: mu2docbook.sh [-a <awk>] [{-x|--head|--tail}] [<title>]
#
# (If the title is not supplied then the input is copied
# to a temporary file in order to extract the H1 header
# text for the title.)
#
awk="gawk"
if test "${1}" = "-a"
then
shift
if test "${1}" != "" ; then awk="${1}" ; fi
shift
fi
full="1"
if test "${1}" = "-x"
then
full="0"
shift
fi
op=""
if test "${1}" = "--head"
then
shift
op="head"
elif test "${1}" = "--tail"
then
shift
op="tail"
fi
title="${1}"
Head()
{
echo '' | ${awk} -v prefix="`basename $0`" -v title="${1}" -v full="${2}" '
BEGIN {
if( full )
{
dtd_name="-//OASIS//DTD DocBook XML V4.1.2//EN"
dtd_ref="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
qq="\""
printf( "%s\n" , "<?xml version=\"1.0\"?>" )
printf( "<!DOCTYPE article PUBLIC \"%s\" \"%s\">\n" , dtd_name , dtd_ref )
printf( "<article>\n" )
printf( " <articleinfo>\n" ) ;
printf( " <title>%s</title>\n" , title )
printf( " </articleinfo>\n" )
}
} '
}
Tail()
{
echo '' | ${awk} -v prefix="`basename $0`" -v title="${1}" -v full="${2}" '
BEGIN {
if( full )
{
printf( "</article>\n" )
}
} '
}
Body()
{
${awk} -v prefix="`basename $0`" -v title="${1}" -v full="${2}" '
function arg1( type )
{
sub( "[^,]*," , "" , type )
sub( ",.*" , "" , type )
return type
}
function arg2( type )
{
sub( "[^,]*," , "" , type )
sub( "[^,]*," , "" , type )
sub( ",.*" , "" , type )
return type
}
function escape( line )
{
gsub( "&" , "\\&amp;" , line )
gsub( "<" , "\\&lt;" , line )
gsub( ">" , "\\&gt;" , line )
return line
}
function dequote( line )
{
quote = "\""
not_quote = "[^" quote "]"
start_tag="<emphasis>"
end_tag="</emphasis>"
gsub( quote not_quote "*" quote , start_tag "&" end_tag , line )
gsub( start_tag quote , start_tag , line )
gsub( quote end_tag , end_tag , line )
return line
}
function fn( line )
{
gsub( "[^[:space:]][^[:space:]]*\\(\\)" , "<literal>&</literal>" , line )
return line
}
{
pos = index( $0 , ":" )
type = substr( $0 , 1 , pos )
tail = substr( $0 , pos+1 )
etail_raw = escape(tail)
etail = fn(dequote(escape(tail)))
# h1
if( match(type,"^h1[:,]") )
{
if( done_h2 )
printf( " </section>\n" )
if( done_h1 )
printf( " </section>\n" )
printf( " <section><title>%s</title>\n" , etail )
done_h1 = 1
done_h2 = 0
}
# h2
else if( match(type,"^h2[:,]") )
{
if( done_h2 )
printf( " </section>\n" , etail )
printf( " <section><title>%s</title>\n" , etail )
done_h2 = 1
}
# item
else if( match(type,"^item,1[:,]") )
printf( " <itemizedlist>\n <listitem><para>%s</para></listitem>\n" , etail )
else if( match(type,"^item[:,]") )
printf( " <listitem><para>%s</para></listitem>\n" , etail )
else if( match(type,"^item-end[:,]") )
printf( " </itemizedlist>\n" , etail )
# item-numbered
else if( match(type,"^item-numbered,1[:,]") )
printf( " <orderedlist>\n <listitem><para>%s</para></listitem>\n" , etail )
else if( match(type,"^item-numbered[:,]") )
printf( " <listitem><para>%s</para></listitem>\n" , etail )
else if( match(type,"^item-numbered-end[:,]") )
printf( " </orderedlist>\n" , etail )
# item-outer
else if( match(type,"^item-outer,1[:,]") )
printf( " <itemizedlist>\n <listitem><para>%s\n" , etail )
else if( match(type,"^item-outer[:,]") )
printf( " </para></listitem>\n <listitem><para>%s\n" , etail )
else if( match(type,"^item-outer-end[:,]") )
printf( " </para></listitem>\n </itemizedlist>\n" , etail )
# item-inner
else if( match(type,"^item-inner,1[:,]") )
printf( " <itemizedlist>\n <listitem><para>%s</para></listitem>\n" , etail )
else if( match(type,"^item-inner[:,]") )
printf( " <listitem><para>%s</para></listitem>\n" , etail )
else if( match(type,"^item-inner-end[:,]") )
printf( " </itemizedlist>\n" , etail )
# item-name
else if( match(type,"^item-name,1[:,]") )
printf( " <variablelist>\n <varlistentry><term>%s</term>\n" , etail )
else if( match(type,"^item-name[:,]") )
printf( " </varlistentry>\n <varlistentry><term>%s</term>\n" , etail )
else if( match(type,"^item-name-end[:,]") )
printf( " </varlistentry>\n </variablelist>\n" , etail )
# item-detail
else if( match(type,"^item-detail,1[:,]") )
printf( " <listitem><para>\n %s\n" , etail )
else if( match(type,"^item-detail[:,]") )
printf( " %s\n" , etail )
else if( match(type,"^item-detail-end[:,]") )
printf( " </para></listitem>\n" )
else if( match(type,"^item-detail-blank[:,]") )
printf( " </para><para>\n" )
# code
else if( match(type,"^code,1[:,]") )
printf( " <programlisting>%s" , etail_raw )
else if( match(type,"^code[:,]") )
printf( "\n%s" , etail_raw )
else if( match(type,"^code-end[:,]") )
printf( "</programlisting>\n" )
# text
else if( match(type,"^text,1[:,]") )
printf( " <para>\n %s\n" , etail )
else if( match(type,"^text[:,]") )
printf( " %s\n" , etail )
else if( match(type,"^text-end[:,]") )
printf( " </para>\n" )
# footer-text
else if( match(type,"^footer,1[:,]") )
printf( " <para>\n %s\n" , etail )
else if( match(type,"^footer[:,]") )
printf( " %s\n" , etail )
else if( match(type,"^footer-end[:,]") )
printf( " </para>\n" )
# citation-text
else if( match(type,"^citation,1[:,]") )
printf( " <p class=\"citation\">\n %s\n" , etail )
else if( match(type,"^citation[:,]") )
printf( " %s\n" , etail )
else if( match(type,"^citation-end[:,]") )
printf( " </p>\n" )
# author-text
else if( match(type,"^author,1[:,]") )
printf( " <para>\n %s\n" , etail )
else if( match(type,"^author[:,]") )
printf( " %s\n" , etail )
else if( match(type,"^author-end[:,]") )
printf( " </para>\n" )
# html
else if( match(type,"^html[:,]") )
printf( "%s\n" , tail )
# image
else if( match(type,"^image[:,]") )
printf( "<graphic fileref=\"%s\"/>\n" , tail )
# blank
else if( match(type,"^blank[:,]") )
printf( "\n" )
# ignore
else if( match(type,"^ignore") )
printf( "" )
else if( match(type,"[^[:space:]]") )
printf( "%s: unrecognised mark-up tag on line %d: \"%s\"\n" , prefix , NR , type )>"/dev/fd/2"
}
END {
if( done_h2 )
printf( " </section>\n" )
if( done_h1 )
printf( " </section>\n" )
} '
Tail
}
Main()
{
Head "${title}" "${full}"
Body "${title}" "${full}"
Tail "${title}" "${full}"
}
Anchorise()
{
sed 's/\*\([^\*]*\)\* \[\([^]]*\)\]/<ulink url="\2">\1<\/ulink>/g'
}
if test "${op}" = "head"
then
Head "${title}" "${full}"
elif test "${op}" = "tail"
then
Tail "${title}" "${full}"
elif test "${title}" = ""
then
tmp="`basename $0`.tmp"
${awk} '{print}' > ${tmp}
title="`${awk} '/^h1/ { sub(\"[^:]*:\",\"\") ; print ; exit }' ${tmp}`"
${awk} '{print}' ${tmp} | Main "${title}" "${full}" | Anchorise
rm -f ${tmp}
else
Main "${title}" "${full}" | Anchorise
fi

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@ -16,6 +16,9 @@
/* Define if gmtime_r in time.h */
#undef HAVE_GMTIME_R
/* Define to enable gui code */
#undef HAVE_GUI
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
@ -72,6 +75,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the <zlib.h> header file. */
#undef HAVE_ZLIB_H
/* Name of package */
#undef PACKAGE

6759
configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
dnl Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
dnl Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
dnl
dnl This program is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU General Public License
@ -21,7 +21,7 @@ dnl Process this file with autoconf to produce a configure script.
dnl
AC_INIT(src/gsmtp/gsmtp.h)
AM_INIT_AUTOMAKE(emailrelay,1.4)
AM_INIT_AUTOMAKE(emailrelay,1.5)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
@ -33,6 +33,7 @@ AC_PROG_CXX
AC_PROG_RANLIB
AC_PROG_INSTALL
AC_PROG_AWK
AC_PROG_GREP
AC_CHECK_PROGS(MAKE,make gmake)
AC_CHECK_PROGS(AR,ar gar)
AC_CHECK_PROGS(GZIP,gzip)
@ -46,6 +47,7 @@ dnl
AC_LANG_C
AC_SEARCH_LIBS(gethostbyname,nsl)
AC_SEARCH_LIBS(connect,socket)
AC_SEARCH_LIBS(compress2,z)
dnl ===
dnl check for header files, functions and typedefs...
@ -55,6 +57,7 @@ AC_HEADER_DIRENT
AC_HEADER_TIME
AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(sys/time.h)
AC_CHECK_HEADERS(zlib.h)
AC_CHECK_FUNCS(glob)
AC_LANG_CPLUSPLUS
ACLOCAL_TYPE_SOCKLEN_T
@ -66,18 +69,17 @@ ACLOCAL_CHECK_GMTIME_R
ACLOCAL_CHECK_LOCALTIME_R
ACLOCAL_CHECK_SETGROUPS
dnl ===
dnl initialise aclocal/pkg.m4...
dnl
PKG_PROG_PKG_CONFIG(0.9.0)
dnl ===
dnl "--enable-debug"
dnl
AC_ARG_ENABLE(debug,AC_HELP_STRING([--enable-debug],[enable extra debug messages at compile-time (default disabled)]))
ENABLE_DEBUG
dnl ===
dnl "--enable-fastbuild"
dnl
AC_ARG_ENABLE(fastbuild,AC_HELP_STRING([--enable-fastbuild],[enable faster building (default disabled); requires --disable-dependency-tracking]))
ENABLE_FASTBUILD
dnl ===
dnl "--enable-pop"
dnl
@ -90,6 +92,12 @@ dnl
AC_ARG_ENABLE(ipv6,AC_HELP_STRING([--enable-ipv6],[enable ipv6 (default disabled)]))
ENABLE_IPV6
dnl ===
dnl "--enable-gui"
dnl
AC_ARG_ENABLE(gui,AC_HELP_STRING([--enable-gui],[enable configuration gui (requires Qt4) (default auto)]))
ENABLE_GUI
dnl ===
dnl "--with-workshop"
dnl
@ -121,6 +129,8 @@ AC_SUBST(e_spooldir)
if test "$e_spooldir" = "" ; then e_spooldir="$localstatedir/spool/emailrelay" ; fi
AC_SUBST(e_examplesdir)
if test "$e_examplesdir" = "" ; then e_examplesdir="$libexecdir" ; fi
AC_SUBST(e_qtmoc)
if test "$e_qtmoc" = "" ; then e_qtmoc="moc" ; fi
ENABLE_FHS
dnl ===
@ -131,5 +141,5 @@ SET_MAKE=""
dnl ===
dnl generate files...
dnl
AC_OUTPUT(Makefile src/Makefile src/glib/Makefile src/gnet/Makefile src/gsmtp/Makefile src/gpop/Makefile src/main/Makefile src/win32/Makefile lib/Makefile lib/gcc2.95/Makefile lib/msvc6.0/Makefile lib/sunpro5/Makefile bin/Makefile doc/Makefile etc/Makefile)
AC_OUTPUT(Makefile src/Makefile src/glib/Makefile src/gnet/Makefile src/gsmtp/Makefile src/gpop/Makefile src/main/Makefile src/win32/Makefile src/gui/Makefile lib/Makefile lib/gcc2.95/Makefile lib/msvc6.0/Makefile lib/sunpro5/Makefile bin/Makefile doc/Makefile etc/Makefile)

122
depcomp
View File

@ -1,9 +1,10 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2003-11-08.23
scriptversion=2006-10-15.18
# Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
# Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -17,8 +18,8 @@ scriptversion=2003-11-08.23
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@ -43,17 +44,18 @@ Environment variables:
depmode Dependency tracking mode.
source Source file read by `PROGRAMS ARGS'.
object Object file output by `PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputing dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit 0
exit $?
;;
-v | --v*)
echo "depcomp $scriptversion"
exit 0
exit $?
;;
esac
@ -61,18 +63,10 @@ if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# `libtool' can also be set to `yes' or `no'.
if test -z "$depfile"; then
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
dir=`echo "$object" | sed 's,/.*$,/,'`
if test "$dir" = "$object"; then
dir=
fi
# FIXME: should be _deps on DOS.
depfile="$dir.deps/$base"
fi
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
@ -98,7 +92,20 @@ gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
## the command line argument order; so add the flags where they
## appear in depend2.am. Note that the slowdown incurred here
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
for arg
do
case $arg in
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
*) set fnord "$@" "$arg" ;;
esac
shift # fnord
shift # $arg
done
"$@"
stat=$?
if test $stat -eq 0; then :
else
@ -283,6 +290,46 @@ icc)
rm -f "$tmpdepfile"
;;
hp2)
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
# compilers, which have integrated preprocessors. The correct option
# to use with these is +Maked; it writes dependencies to a file named
# 'foo.d', which lands next to the object file, wherever that
# happens to be.
# Much of this is similar to the tru64 case; see comments there.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir.libs/$base.d
"$@" -Wc,+Maked
else
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir$base.d
"$@" +Maked
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
# Add `dependent.h:' lines.
sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile" "$tmpdepfile2"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
@ -294,27 +341,43 @@ tru64)
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1="$dir.libs/$base.lo.d"
tmpdepfile2="$dir.libs/$base.d"
# With Tru64 cc, shared objects can also be used to make a
# static library. This mechanism is used in libtool 1.4 series to
# handle both shared and static libraries in a single compilation.
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
#
# With libtool 1.5 this exception was removed, and libtool now
# generates 2 separate objects for the 2 libraries. These two
# compilations output dependencies in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
# automatically cleaned when .libs/ is deleted, while ignoring
# the former would cause a distcleancheck panic.
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
tmpdepfile2=$dir$base.o.d # libtool 1.5
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
tmpdepfile1="$dir$base.o.d"
tmpdepfile2="$dir$base.d"
tmpdepfile1=$dir$base.o.d
tmpdepfile2=$dir$base.d
tmpdepfile3=$dir$base.d
tmpdepfile4=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
exit $stat
fi
if test -f "$tmpdepfile1"; then
tmpdepfile="$tmpdepfile1"
else
tmpdepfile="$tmpdepfile2"
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a tab and a space in the [].
@ -458,7 +521,8 @@ cpp)
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
@ -25,64 +25,88 @@ man_files_out=emailrelay.1.gz emailrelay-passwd.1.gz emailrelay-poke.1.gz emailr
html_files_in=doxygen_header.html
html_files_thru=index.html emailrelay-man.html $(stylesheet)
html_files_out=readme.html developer.html reference.html userguide.html windows.html changelog.html
docbook_files_out=emailrelay.docbook
png_files=gsmtp-classes.png gnet-classes.png sequence-1.png sequence-2.png sequence-3.png sequence-4.png gnet-client.png gsmtp-serverprotocol.png gsmtp-scannerclient.png auth.png
EXTRA_DIST = $(man_files_in) $(txt_files) $(html_files_in) $(html_files_thru) $(png_files)
noinst_SCRIPTS = .dox
noinst_SCRIPTS = .dox .docbook
man1_MANS = $(man_files_in)
#man1_DATA = $(man_files_out)
e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(png_files)
CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) doxygen/*
e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(png_files) $(docbook_files_out)
CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) $(docbook_files_out) doxygen/* *.db *.mu docbook/*
SUFFIXES = .txt .html
SUFFIXES = .txt .html .db .mu
filter=$(top_builddir)/bin/emailrelay-doxygen-filter.sh
filter_src=$(top_srcdir)/bin/emailrelay-doxygen-filter.sh_
converter=$(top_builddir)/bin/txt2html.sh
converter_src=$(top_srcdir)/bin/txt2html.sh_
converter_helper1=$(top_builddir)/bin/txt2mu.sh
converter_helper1_src=$(top_srcdir)/bin/txt2mu.sh_
converter_helper2=$(top_builddir)/bin/mu2html.sh
converter_helper2_src=$(top_srcdir)/bin/mu2html.sh_
converter_helper3=$(top_builddir)/bin/expand.sh
converter_helper3_src=$(top_srcdir)/bin/expand.sh_
converter_html=$(top_builddir)/bin/txt2html.sh
converter_html_src=$(top_srcdir)/bin/txt2html.sh_
converter_txt2mu=$(top_builddir)/bin/txt2mu.sh
converter_txt2mu_src=$(top_srcdir)/bin/txt2mu.sh_
converter_mu2html=$(top_builddir)/bin/mu2html.sh
converter_mu2html_src=$(top_srcdir)/bin/mu2html.sh_
converter_expand=$(top_builddir)/bin/expand.sh
converter_expand_src=$(top_srcdir)/bin/expand.sh_
converter_mu2docbook=$(top_builddir)/bin/mu2docbook.sh
converter_mu2docbook_src=$(top_srcdir)/bin/mu2docbook.sh_
.txt.html:
$(converter) -a "$(AWK)" $(top_srcdir)/doc/$*.txt $(stylesheet) > $*.html
$(converter_html) -a "$(AWK)" $(top_srcdir)/doc/$*.txt $(stylesheet) > $*.html
$(filter): $(filter_src)
cp $(filter_src) $(filter)
chmod ugo+x $(filter)
.txt.mu:
$(converter_txt2mu) -a "$(AWK)" $(top_srcdir)/doc/$*.txt > $*.mu
$(converter): $(converter_src) $(converter_helper1) $(converter_helper2) $(converter_helper3)
cp $(converter_src) $(converter)
chmod ugo+x $(converter)
.mu.db:
$(converter_mu2docbook) -a "$(AWK)" -x < $(top_builddir)/doc/$*.mu > $*.db
$(converter_helper1): $(converter_helper1_src)
cp $(converter_helper1_src) $(converter_helper1)
chmod ugo+x $(converter_helper1)
$(converter_html): $(converter_html_src) $(converter_txt2mu) $(converter_mu2html) $(converter_expand)
cp $(converter_html_src) $(converter_html)
chmod ugo+x $(converter_html)
$(converter_helper2): $(converter_helper2_src)
cp $(converter_helper2_src) $(converter_helper2)
chmod ugo+x $(converter_helper2)
head.db: $(converter_mu2docbook)
$(converter_mu2docbook) --head "E-MailRelay" > head.db.tmp && mv -f head.db.tmp head.db
$(converter_helper3): $(converter_helper3_src)
cp $(converter_helper3_src) $(converter_helper3)
chmod ugo+x $(converter_helper3)
tail.db: $(converter_mu2docbook)
$(converter_mu2docbook) --tail > tail.db.tmp && mv -f tail.db.tmp tail.db
.dox: $(filter)
emailrelay.docbook: head.db tail.db userguide.db reference.db developer.db
cat head.db userguide.db reference.db developer.db tail.db > emailrelay.docbook
.docbook: emailrelay.docbook
-xmlto -o docbook html emailrelay.docbook && touch .docbook && cp *.png docbook/
$(converter_docbook): $(converter_docbook_src) $(converter_mu2docbook)
cp $(converter_docbook_src) $(converter_db)
chmod ugo+x $(converter_docbook)
$(converter_txt2mu): $(converter_txt2mu_src)
cp $(converter_txt2mu_src) $(converter_txt2mu)
chmod ugo+x $(converter_txt2mu)
$(converter_mu2html): $(converter_mu2html_src)
cp $(converter_mu2html_src) $(converter_mu2html)
chmod ugo+x $(converter_mu2html)
$(converter_expand): $(converter_expand_src)
cp $(converter_expand_src) $(converter_expand)
chmod ugo+x $(converter_expand)
$(converter_mu2docbook): $(converter_mu2docbook_src)
cp $(converter_mu2docbook_src) $(converter_mu2docbook)
chmod ugo+x $(converter_mu2docbook)
.dox:
if test "$(HAVE_DOXYGEN)" = "yes" ; then cat $(top_srcdir)/src/main/doxygen.cfg | sed "s:__TOP_SRC__:$(top_srcdir):g" | sed "s:__TOP_BUILD__:$(top_builddir):g" | doxygen - && touch .dox ; else echo no doxygen ; fi
emailrelay-man.html: emailrelay.1
if test "$(HAVE_MAN2HTML)" = "yes" ; then man2html emailrelay.1 < /dev/null > emailrelay-man.html.tmp && mv emailrelay-man.html.tmp emailrelay-man.html ; fi
developer.html reference.html userguide.html: $(converter)
developer.html reference.html userguide.html: $(converter_html)
readme.html: $(top_srcdir)/README $(converter)
$(converter) -a "$(AWK)" $(top_srcdir)/README $(stylesheet) > readme.html
developer.mu reference.mu userguide.mu: $(converter_txt2mu)
changelog.html: $(top_srcdir)/ChangeLog $(converter)
$(converter) -a "$(AWK)" $(top_srcdir)/ChangeLog $(stylesheet) > changelog.html
readme.html: $(top_srcdir)/README $(converter_html)
$(converter_html) -a "$(AWK)" $(top_srcdir)/README $(stylesheet) > readme.html
changelog.html: $(top_srcdir)/ChangeLog $(converter_html)
$(converter_html) -a "$(AWK)" $(top_srcdir)/ChangeLog $(stylesheet) > changelog.html
emailrelay.1.gz : emailrelay.1
if test -n "$(GZIP)" ; then $(GZIP) -c $(top_srcdir)/doc/emailrelay.1 > emailrelay.1.gz ; fi

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -18,15 +18,11 @@
#
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -45,7 +41,7 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SCRIPTS = $(noinst_SCRIPTS)
@ -55,12 +51,16 @@ man1dir = $(mandir)/man1
am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(e_docdir)"
NROFF = nroff
MANS = $(man1_MANS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
e_docDATA_INSTALL = $(INSTALL_DATA)
DATA = $(e_doc_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -84,9 +84,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -97,10 +99,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -109,47 +111,62 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
stylesheet = emailrelay.css
txt_files = developer.txt reference.txt userguide.txt windows.txt
man_files_in = emailrelay.1 emailrelay-passwd.1 emailrelay-poke.1 emailrelay-submit.1
@ -157,28 +174,28 @@ man_files_out = emailrelay.1.gz emailrelay-passwd.1.gz emailrelay-poke.1.gz emai
html_files_in = doxygen_header.html
html_files_thru = index.html emailrelay-man.html $(stylesheet)
html_files_out = readme.html developer.html reference.html userguide.html windows.html changelog.html
docbook_files_out = emailrelay.docbook
png_files = gsmtp-classes.png gnet-classes.png sequence-1.png sequence-2.png sequence-3.png sequence-4.png gnet-client.png gsmtp-serverprotocol.png gsmtp-scannerclient.png auth.png
EXTRA_DIST = $(man_files_in) $(txt_files) $(html_files_in) $(html_files_thru) $(png_files)
noinst_SCRIPTS = .dox
noinst_SCRIPTS = .dox .docbook
man1_MANS = $(man_files_in)
#man1_DATA = $(man_files_out)
e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(png_files)
CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) doxygen/*
SUFFIXES = .txt .html
filter = $(top_builddir)/bin/emailrelay-doxygen-filter.sh
filter_src = $(top_srcdir)/bin/emailrelay-doxygen-filter.sh_
converter = $(top_builddir)/bin/txt2html.sh
converter_src = $(top_srcdir)/bin/txt2html.sh_
converter_helper1 = $(top_builddir)/bin/txt2mu.sh
converter_helper1_src = $(top_srcdir)/bin/txt2mu.sh_
converter_helper2 = $(top_builddir)/bin/mu2html.sh
converter_helper2_src = $(top_srcdir)/bin/mu2html.sh_
converter_helper3 = $(top_builddir)/bin/expand.sh
converter_helper3_src = $(top_srcdir)/bin/expand.sh_
e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(png_files) $(docbook_files_out)
CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) $(docbook_files_out) doxygen/* *.db *.mu docbook/*
SUFFIXES = .txt .html .db .mu
converter_html = $(top_builddir)/bin/txt2html.sh
converter_html_src = $(top_srcdir)/bin/txt2html.sh_
converter_txt2mu = $(top_builddir)/bin/txt2mu.sh
converter_txt2mu_src = $(top_srcdir)/bin/txt2mu.sh_
converter_mu2html = $(top_builddir)/bin/mu2html.sh
converter_mu2html_src = $(top_srcdir)/bin/mu2html.sh_
converter_expand = $(top_builddir)/bin/expand.sh
converter_expand_src = $(top_srcdir)/bin/expand.sh_
converter_mu2docbook = $(top_builddir)/bin/mu2docbook.sh
converter_mu2docbook_src = $(top_srcdir)/bin/mu2docbook.sh_
all: all-am
.SUFFIXES:
.SUFFIXES: .txt .html
.SUFFIXES: .txt .html .db .mu
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@ -208,10 +225,9 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
@ -256,10 +272,10 @@ uninstall-man1:
done
install-e_docDATA: $(e_doc_DATA)
@$(NORMAL_INSTALL)
test -z "$(e_docdir)" || $(mkdir_p) "$(DESTDIR)$(e_docdir)"
test -z "$(e_docdir)" || $(MKDIR_P) "$(DESTDIR)$(e_docdir)"
@list='$(e_doc_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
f=$(am__strip_dir) \
echo " $(e_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_docdir)/$$f'"; \
$(e_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_docdir)/$$f"; \
done
@ -267,7 +283,7 @@ install-e_docDATA: $(e_doc_DATA)
uninstall-e_docDATA:
@$(NORMAL_UNINSTALL)
@list='$(e_doc_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(e_docdir)/$$f'"; \
rm -f "$(DESTDIR)$(e_docdir)/$$f"; \
done
@ -279,22 +295,21 @@ CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -310,7 +325,7 @@ check: check-am
all-am: Makefile $(SCRIPTS) $(MANS) $(DATA)
installdirs:
for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(e_docdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
@ -332,7 +347,7 @@ clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -357,12 +372,20 @@ info-am:
install-data-am: install-data-local install-e_docDATA install-man
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man: install-man1
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -381,59 +404,86 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-e_docDATA uninstall-info-am uninstall-local \
uninstall-man
uninstall-am: uninstall-e_docDATA uninstall-local uninstall-man
uninstall-man: uninstall-man1
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am \
install-data-local install-e_docDATA install-exec \
install-exec-am install-info install-info-am install-man \
install-man1 install-strip installcheck installcheck-am \
install-data-local install-dvi install-dvi-am \
install-e_docDATA install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-man1 install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-e_docDATA uninstall-info-am \
uninstall-local uninstall-man uninstall-man1
uninstall-am uninstall-e_docDATA uninstall-local uninstall-man \
uninstall-man1
.txt.html:
$(converter) -a "$(AWK)" $(top_srcdir)/doc/$*.txt $(stylesheet) > $*.html
$(converter_html) -a "$(AWK)" $(top_srcdir)/doc/$*.txt $(stylesheet) > $*.html
$(filter): $(filter_src)
cp $(filter_src) $(filter)
chmod ugo+x $(filter)
.txt.mu:
$(converter_txt2mu) -a "$(AWK)" $(top_srcdir)/doc/$*.txt > $*.mu
$(converter): $(converter_src) $(converter_helper1) $(converter_helper2) $(converter_helper3)
cp $(converter_src) $(converter)
chmod ugo+x $(converter)
.mu.db:
$(converter_mu2docbook) -a "$(AWK)" -x < $(top_builddir)/doc/$*.mu > $*.db
$(converter_helper1): $(converter_helper1_src)
cp $(converter_helper1_src) $(converter_helper1)
chmod ugo+x $(converter_helper1)
$(converter_html): $(converter_html_src) $(converter_txt2mu) $(converter_mu2html) $(converter_expand)
cp $(converter_html_src) $(converter_html)
chmod ugo+x $(converter_html)
$(converter_helper2): $(converter_helper2_src)
cp $(converter_helper2_src) $(converter_helper2)
chmod ugo+x $(converter_helper2)
head.db: $(converter_mu2docbook)
$(converter_mu2docbook) --head "E-MailRelay" > head.db.tmp && mv -f head.db.tmp head.db
$(converter_helper3): $(converter_helper3_src)
cp $(converter_helper3_src) $(converter_helper3)
chmod ugo+x $(converter_helper3)
tail.db: $(converter_mu2docbook)
$(converter_mu2docbook) --tail > tail.db.tmp && mv -f tail.db.tmp tail.db
.dox: $(filter)
emailrelay.docbook: head.db tail.db userguide.db reference.db developer.db
cat head.db userguide.db reference.db developer.db tail.db > emailrelay.docbook
.docbook: emailrelay.docbook
-xmlto -o docbook html emailrelay.docbook && touch .docbook && cp *.png docbook/
$(converter_docbook): $(converter_docbook_src) $(converter_mu2docbook)
cp $(converter_docbook_src) $(converter_db)
chmod ugo+x $(converter_docbook)
$(converter_txt2mu): $(converter_txt2mu_src)
cp $(converter_txt2mu_src) $(converter_txt2mu)
chmod ugo+x $(converter_txt2mu)
$(converter_mu2html): $(converter_mu2html_src)
cp $(converter_mu2html_src) $(converter_mu2html)
chmod ugo+x $(converter_mu2html)
$(converter_expand): $(converter_expand_src)
cp $(converter_expand_src) $(converter_expand)
chmod ugo+x $(converter_expand)
$(converter_mu2docbook): $(converter_mu2docbook_src)
cp $(converter_mu2docbook_src) $(converter_mu2docbook)
chmod ugo+x $(converter_mu2docbook)
.dox:
if test "$(HAVE_DOXYGEN)" = "yes" ; then cat $(top_srcdir)/src/main/doxygen.cfg | sed "s:__TOP_SRC__:$(top_srcdir):g" | sed "s:__TOP_BUILD__:$(top_builddir):g" | doxygen - && touch .dox ; else echo no doxygen ; fi
emailrelay-man.html: emailrelay.1
if test "$(HAVE_MAN2HTML)" = "yes" ; then man2html emailrelay.1 < /dev/null > emailrelay-man.html.tmp && mv emailrelay-man.html.tmp emailrelay-man.html ; fi
developer.html reference.html userguide.html: $(converter)
developer.html reference.html userguide.html: $(converter_html)
readme.html: $(top_srcdir)/README $(converter)
$(converter) -a "$(AWK)" $(top_srcdir)/README $(stylesheet) > readme.html
developer.mu reference.mu userguide.mu: $(converter_txt2mu)
changelog.html: $(top_srcdir)/ChangeLog $(converter)
$(converter) -a "$(AWK)" $(top_srcdir)/ChangeLog $(stylesheet) > changelog.html
readme.html: $(top_srcdir)/README $(converter_html)
$(converter_html) -a "$(AWK)" $(top_srcdir)/README $(stylesheet) > readme.html
changelog.html: $(top_srcdir)/ChangeLog $(converter_html)
$(converter_html) -a "$(AWK)" $(top_srcdir)/ChangeLog $(stylesheet) > changelog.html
emailrelay.1.gz : emailrelay.1
if test -n "$(GZIP)" ; then $(GZIP) -c $(top_srcdir)/doc/emailrelay.1 > emailrelay.1.gz ; fi

View File

@ -72,8 +72,8 @@ State transition diagrams:
Sequence diagrams:
* *Proxy mode forwarding* [sequence-3.png]
* *Scanning* [sequence-4.png]
* *ProtocolMessage::prepare() returns false* [sequence-1.png]
* *ProtocolMessage::prepare() returns true* [sequence-2.png]
* ProtocolMessage::prepare() *returns false* [sequence-1.png]
* ProtocolMessage::prepare() *returns true* [sequence-2.png]
Directory structure
-------------------
@ -154,27 +154,14 @@ these cases there are three source files per header. For example, "gsocket.cpp",
Compile-time features
---------------------
The following compile-time features can be enabled with some effort:
Compile-time features can normally be selected with switches passed to the
"configure" script. These include the following:
# IPv6
* Debug-level logging ("--enable-debug")
* IPv6 (Linux only) ("--enable-ipv6")
* Configuration GUI ("--enable-gui")
IPv6 is supported at compile-time by selecting source files in the "src/gnet"
directory ending "_ipv6.cpp" rather than "_ipv4.cpp". The code has been tested
to a limited extent on Linux.
# Verbose logging
Verbose logging is enabled by defining the pre-processor symbol "_DEBUG".
The configure script's "--enable-debug" switch can be used to do this.
(See "src/glib/glog.h".)
# Multiple listening ports
The server can be made to listen on several different addresses. Look at the
"Server" constructor in "src/main/gsmtpserver.cpp", set the boolean variable
"normal" to false and then edit the hard-coded address strings as needed. If
the addresses need different port numbers then pass them to bind() in the third
parameter.
Use "./configure --help" to see a complete list.
Windows build
-------------
@ -183,15 +170,9 @@ the "emailrelay.dws" workspace.
Makefiles for the *MinGW* [http://www.mingw.org/] system (gcc on Windows) are
also provided. If building from cygwin start by creating a "/mingw" mount to
your MinGW installation directory (eg. "mount -u c:/sw/mingw /mingw"), and then
your MinGW installation directory (eg. "mount -u c:/opt/mingw /mingw"), and then
run "make -f mingw.mak" from the E-MailRelay "src" directory.
Style
-----
The commenting style used in header files is compatible with doxygen if passed
through the simple awk-based pre-processor "emailrelay-doxygen-filter.sh". A
"make" in the "doc" directory will run doxygen if it is found on your path.
Patterns
--------
Gang-of-four Design Patterns (ISBN 0-201-63361-2):
@ -276,4 +257,4 @@ to reassign a std::auto_ptr<>.
Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.

View File

@ -68,7 +68,7 @@ have been successfully delivered to the next-hop server.
<H2>OPTIONS</H2>
<DL COMPACT>
<DT><B>-a,--admin </B><I>admin-port</I>
<DT><B>-a, --admin </B><I>&lt;admin-port&gt;</I>
<DD>
Enables the administration interface and specifies its listening port number.
@ -80,23 +80,23 @@ Enables the terminate command on the admin interface.
<DD>
Disables the smtp vrfy command and sends less verbose smtp responses.
<DT><B>-q,--as-client </B><I>host:port</I>
<DT><B>-q, --as-client </B><I>&lt;host:port&gt;</I>
<DD>
Runs as a client, forwarding spooled mail to &lt;host&gt;: equivalent to <I>--log</I> <I>--no-syslog</I> <I>--no-daemon</I> <I>--dont-serve</I> <I>--forward</I> <I>--forward-to</I>.
<DT><B>-y,--as-proxy </B><I>host:port</I>
<DT><B>-y, --as-proxy </B><I>&lt;host:port&gt;</I>
<DD>
Runs as a proxy: equivalent to <I>--log</I> <I>--close-stderr</I> <I>--immediate</I> <I>--forward-to</I>.
<DT><B>-d, --as-server </B>
<DD>
Runs as a server: equivalent to <I>--log</I> <I>--close-stderr</I> <I>--postmaster</I>.
<DT><B>-C,--client-auth </B><I>file</I>
Runs as a server: equivalent to <I>--log</I> <I>--close-stderr</I>.
<DT><B>-C, --client-auth </B><I>&lt;file&gt;</I>
<DD>
Enables smtp authentication with remote server, using the given secrets file.
<DT><B>-Y,--client-filter </B><I>program</I>
<DT><B>-Y, --client-filter </B><I>&lt;program&gt;</I>
<DD>
Specifies an external program to process messages when they are forwarded.
@ -104,7 +104,7 @@ Specifies an external program to process messages when they are forwarded.
<DD>
Closes the standard error stream after start-up.
<DT><B>-U,--connection-timeout </B><I>time</I>
<DT><B>-U, --connection-timeout </B><I>&lt;time&gt;</I>
<DD>
Sets the timeout (in seconds) when connecting to a remote server (default is 40).
@ -112,7 +112,7 @@ Sets the timeout (in seconds) when connecting to a remote server (default is 40)
<DD>
Generates debug-level logging if compiled-in.
<DT><B>-D,--domain </B><I>fqdn</I>
<DT><B>-D, --domain </B><I>&lt;fqdn&gt;</I>
<DD>
Sets an override for the host's fully qualified domain name.
@ -120,15 +120,19 @@ Sets an override for the host's fully qualified domain name.
<DD>
Disables acting as a server on any port (part of <I>--as-client</I> and usually used with <I>--forward</I>).
<DT><B>-z,--filter </B><I>program</I>
<DT><B>-z, --filter </B><I>&lt;program&gt;</I>
<DD>
Specifies an external program to process messages as they are stored.
<DT><B>-W, --filter-timeout </B><I>&lt;time&gt;</I>
<DD>
Sets the timeout (in seconds) for running the <I>--filter</I> processor.
<DT><B>-f, --forward </B>
<DD>
Forwards stored mail on startup (requires <I>--forward-to</I>).
<DT><B>-o,--forward-to </B><I>host:port</I>
<DT><B>-o, --forward-to </B><I>&lt;host:port&gt;</I>
<DD>
Specifies the remote smtp server (required by <I>--forward</I>, <I>--poll</I>, <I>--immediate</I> and <I>--admin</I>).
@ -140,7 +144,7 @@ Displays help text and exits.
<DD>
Enables immediating forwarding of messages as soon as they are received (requires <I>--forward-to</I>).
<DT><B>-I,--interface </B><I>ip-address</I>
<DT><B>-I, --interface </B><I>&lt;ip-address&gt;</I>
<DD>
Defines the listening interface for new connections.
@ -163,20 +167,20 @@ Disables listening for smtp connections (usually used with <I>--admin</I> or <I>
<DT><B>-n, --no-syslog </B>
<DD>
Disables syslog output.
<DT><B>-i,--pid-file </B><I>pid-file</I>
Disables syslog output (always overridden by <I>--syslog</I>).
<DT><B>-i, --pid-file </B><I>&lt;pid-file&gt;</I>
<DD>
Defines a file for storing the daemon process-id.
<DT><B>-O,--poll </B><I>period</I>
<DT><B>-O, --poll </B><I>&lt;period&gt;</I>
<DD>
Enables polling with the specified period (requires <I>--forward-to</I>).
Enables polling of the spool directory for messages to be forwarded with the specified period (requires <I>--forward-to</I>).
<DT><B>-B, --pop </B>
<DD>
Enables the pop server if compiled-in.
<DT><B>-F,--pop-auth </B><I>file</I>
<DT><B>-F, --pop-auth </B><I>&lt;file&gt;</I>
<DD>
Defines the pop server secrets file (default is <I>/etc/emailrelay.auth</I>).
@ -188,47 +192,47 @@ Modifies the pop spool directory according to the user name (requires <I>--pop</
<DD>
Disables message deletion via pop (requires <I>--pop</I>).
<DT><B>-E,--pop-port </B><I>port</I>
<DT><B>-E, --pop-port </B><I>&lt;port&gt;</I>
<DD>
Specifies the pop listening port number (requires <I>--pop</I>).
<DT><B>-p,--port </B><I>port</I>
<DT><B>-p, --port </B><I>&lt;port&gt;</I>
<DD>
Specifies the smtp listening port number.
<DT><B>-P,--postmaster </B>
<DD>
Allows delivery to the postmaster but rejects all other local mailbox addresses.
<DT><B>-r, --remote-clients </B>
<DD>
Allows remote clients to connect.
<DT><B>-T,--response-timeout </B><I>time</I>
<DT><B>-T, --response-timeout </B><I>&lt;time&gt;</I>
<DD>
Sets the response timeout (in seconds) when talking to a remote server (default is 1800).
<DT><B>-R,--scanner </B><I>host:port</I>
<DT><B>-R, --scanner </B><I>&lt;host:port&gt;</I>
<DD>
Specifies an external network server to process messages when they are stored.
<DT><B>-S,--server-auth </B><I>file</I>
<DT><B>-S, --server-auth </B><I>&lt;file&gt;</I>
<DD>
Enables authentication of remote clients, using the given secrets file.
<DT><B>-s,--spool-dir </B><I>dir</I>
<DT><B>-s, --spool-dir </B><I>&lt;dir&gt;</I>
<DD>
Specifies the spool directory (default is <I>/var/spool/emailrelay</I>).
<DT><B>-u,--user </B><I>username</I>
<DT><B>-k, --syslog </B>
<DD>
Names the effective user to switch to when started as root (default is <I>daemon</I>).
Force syslog output if logging is enabled (overrides <I>--no-syslog</I>).
<DT><B>-u, --user </B><I>&lt;username&gt;</I>
<DD>
Names the effective user to switch to if started as root (default is <I>daemon</I>).
<DT><B>-v, --verbose </B>
<DD>
Generates more verbose output (works with <I>--help</I> and <I>--log</I>).
<DT><B>-Z,--verifier </B><I>program</I>
<DT><B>-Z, --verifier </B><I>&lt;program&gt;</I>
<DD>
Specifies an external program for address verification.
@ -252,40 +256,13 @@ GNU style...
/usr/local/libexec/emailrelay
<BR>
/usr/local/libexec/emailrelay-deliver.sh
<BR>
/usr/local/libexec/emailrelay-notify.sh
<BR>
/usr/local/libexec/emailrelay-poke
<BR>
/usr/local/libexec/emailrelay-process.sh
/usr/local/libexec/emailrelay-*.sh
<BR>
/usr/local/libexec/emailrelay-resubmit.js
<BR>
/usr/local/libexec/emailrelay-resubmit.sh
<BR>
/usr/local/libexec/emailrelay-runperl.js
<BR>
/usr/local/libexec/emailrelay-submit.sh
<BR>
/usr/local/man/man1/emailrelay.1.gz
<BR>
/usr/local/man/man1/emailrelay-passwd.1.gz
<BR>
/usr/local/man/man1/emailrelay-poke.1.gz
<BR>
/usr/local/man/man1/emailrelay-submit.1.gz
/usr/local/man/man1/emailrelay*.1.gz
<BR>
/usr/local/sbin/emailrelay
@ -297,57 +274,15 @@ GNU style...
/usr/local/sbin/emailrelay-submit
<BR>
/usr/local/share/emailrelay/doc/changelog.gz
<BR>
/usr/local/share/emailrelay/doc/changelog.html
<BR>
/usr/local/share/emailrelay/doc/developer.html
<BR>
/usr/local/share/emailrelay/doc/developer.txt
<BR>
/usr/local/share/emailrelay/doc/emailrelay.css
<BR>
/usr/local/share/emailrelay/doc/emailrelay-man.html
/usr/local/share/emailrelay/doc/*
<BR>
/usr/local/share/emailrelay/doc/index.html
<BR>
/usr/local/share/emailrelay/doc/NEWS
<BR>
/usr/local/share/emailrelay/doc/*.png
<BR>
/usr/local/share/emailrelay/doc/README
<BR>
/usr/local/share/emailrelay/doc/readme.html
<BR>
/usr/local/share/emailrelay/doc/reference.html
<BR>
/usr/local/share/emailrelay/doc/reference.txt
<BR>
/usr/local/share/emailrelay/doc/userguide.html
<BR>
/usr/local/share/emailrelay/doc/userguide.txt
<BR>
/usr/local/share/emailrelay/doc/windows.html
<BR>
/usr/local/share/emailrelay/doc/windows.txt
<BR>
/usr/local/var/spool/emailrelay/emailrelay.*.content
<BR>
@ -378,82 +313,19 @@ FHS style...
/usr/sbin/emailrelay-submit
<BR>
/usr/share/doc/emailrelay/changelog.gz
/usr/share/doc/emailrelay/*
<BR>
/usr/share/doc/emailrelay/changelog.html
<BR>
/usr/share/doc/emailrelay/developer.html
<BR>
/usr/share/doc/emailrelay/developer.txt
<BR>
/usr/share/doc/emailrelay/emailrelay.css
<BR>
/usr/share/doc/emailrelay/emailrelay-man.html
<BR>
/usr/share/doc/emailrelay/examples/emailrelay-deliver.sh
<BR>
/usr/share/doc/emailrelay/examples/emailrelay-notify.sh
<BR>
/usr/share/doc/emailrelay/examples/emailrelay-process.sh
<BR>
/usr/share/doc/emailrelay/examples/emailrelay-resubmit.sh
<BR>
/usr/share/doc/emailrelay/examples/emailrelay-submit.sh
/usr/share/doc/emailrelay/examples/emailrelay-*.sh
<BR>
/usr/share/doc/emailrelay/index.html
<BR>
/usr/share/doc/emailrelay/NEWS
<BR>
/usr/share/doc/emailrelay/*.png
<BR>
/usr/share/doc/emailrelay/README
<BR>
/usr/share/doc/emailrelay/readme.html
<BR>
/usr/share/doc/emailrelay/reference.html
<BR>
/usr/share/doc/emailrelay/reference.txt
<BR>
/usr/share/doc/emailrelay/userguide.html
<BR>
/usr/share/doc/emailrelay/userguide.txt
<BR>
/usr/share/doc/emailrelay/windows.html
<BR>
/usr/share/doc/emailrelay/windows.txt
<BR>
/usr/share/man/man1/emailrelay.1.gz
<BR>
/usr/share/man/man1/emailrelay-passwd.1.gz
<BR>
/usr/share/man/man1/emailrelay-poke.1.gz
<BR>
/usr/share/man/man1/emailrelay-submit.1.gz
/usr/share/man/man1/emailrelay*.1.gz
<BR>
/var/spool/emailrelay/emailrelay.*.content
@ -502,7 +374,7 @@ Graeme Walker, mailto:<A HREF="mailto:graeme_walker@users.sourceforge.net">graem
This document was created by
<A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
using the manual pages.<BR>
Time: 23:24:49 GMT, January 08, 2006
Time: 18:17:41 GMT, April 09, 2007
</BODY>
</HTML>
<!-- Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->
<!-- Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->

View File

@ -1,4 +1,4 @@
.\" Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
.\"
.\" This program is free software; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License

View File

@ -1,4 +1,4 @@
.\" Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
.\"
.\" This program is free software; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License

View File

@ -1,4 +1,4 @@
.\" Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
.\"
.\" This program is free software; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License

View File

@ -1,4 +1,4 @@
.\" Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
.\"
.\" This program is free software; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License
@ -55,7 +55,7 @@ server. Messages are only fully accepted from the sender once they
have been successfully delivered to the next-hop server.
.SH OPTIONS
.TP
.B \-a,--admin \fIadmin-port\fR
.B \-a, --admin \fI<admin-port>\fR
Enables the administration interface and specifies its listening port number.
.TP
.B \-Q, --admin-terminate
@ -64,43 +64,46 @@ Enables the terminate command on the admin interface.
.B \-A, --anonymous
Disables the smtp vrfy command and sends less verbose smtp responses.
.TP
.B \-q,--as-client \fIhost:port\fR
.B \-q, --as-client \fI<host:port>\fR
Runs as a client, forwarding spooled mail to <host>: equivalent to \fI--log\fR \fI--no-syslog\fR \fI--no-daemon\fR \fI--dont-serve\fR \fI--forward\fR \fI--forward-to\fR.
.TP
.B \-y,--as-proxy \fIhost:port\fR
.B \-y, --as-proxy \fI<host:port>\fR
Runs as a proxy: equivalent to \fI--log\fR \fI--close-stderr\fR \fI--immediate\fR \fI--forward-to\fR.
.TP
.B \-d, --as-server
Runs as a server: equivalent to \fI--log\fR \fI--close-stderr\fR \fI--postmaster\fR.
Runs as a server: equivalent to \fI--log\fR \fI--close-stderr\fR.
.TP
.B \-C,--client-auth \fIfile\fR
.B \-C, --client-auth \fI<file>\fR
Enables smtp authentication with remote server, using the given secrets file.
.TP
.B \-Y,--client-filter \fIprogram\fR
.B \-Y, --client-filter \fI<program>\fR
Specifies an external program to process messages when they are forwarded.
.TP
.B \-e, --close-stderr
Closes the standard error stream after start-up.
.TP
.B \-U,--connection-timeout \fItime\fR
.B \-U, --connection-timeout \fI<time>\fR
Sets the timeout (in seconds) when connecting to a remote server (default is 40).
.TP
.B \-g, --debug
Generates debug-level logging if compiled-in.
.TP
.B \-D,--domain \fIfqdn\fR
.B \-D, --domain \fI<fqdn>\fR
Sets an override for the host's fully qualified domain name.
.TP
.B \-x, --dont-serve
Disables acting as a server on any port (part of \fI--as-client\fR and usually used with \fI--forward\fR).
.TP
.B \-z,--filter \fIprogram\fR
.B \-z, --filter \fI<program>\fR
Specifies an external program to process messages as they are stored.
.TP
.B \-W, --filter-timeout \fI<time>\fR
Sets the timeout (in seconds) for running the \fI--filter\fR processor.
.TP
.B \-f, --forward
Forwards stored mail on startup (requires \fI--forward-to\fR).
.TP
.B \-o,--forward-to \fIhost:port\fR
.B \-o, --forward-to \fI<host:port>\fR
Specifies the remote smtp server (required by \fI--forward\fR, \fI--poll\fR, \fI--immediate\fR and \fI--admin\fR).
.TP
.B \-h, --help
@ -109,7 +112,7 @@ Displays help text and exits.
.B \-m, --immediate
Enables immediating forwarding of messages as soon as they are received (requires \fI--forward-to\fR).
.TP
.B \-I,--interface \fIip-address\fR
.B \-I, --interface \fI<ip-address>\fR
Defines the listening interface for new connections.
.TP
.B \-l, --log
@ -125,18 +128,18 @@ Does not detach from the terminal.
Disables listening for smtp connections (usually used with \fI--admin\fR or \fI--pop\fR).
.TP
.B \-n, --no-syslog
Disables syslog output.
Disables syslog output (always overridden by \fI--syslog\fR).
.TP
.B \-i,--pid-file \fIpid-file\fR
.B \-i, --pid-file \fI<pid-file>\fR
Defines a file for storing the daemon process-id.
.TP
.B \-O,--poll \fIperiod\fR
Enables polling with the specified period (requires \fI--forward-to\fR).
.B \-O, --poll \fI<period>\fR
Enables polling of the spool directory for messages to be forwarded with the specified period (requires \fI--forward-to\fR).
.TP
.B \-B, --pop
Enables the pop server if compiled-in.
.TP
.B \-F,--pop-auth \fIfile\fR
.B \-F, --pop-auth \fI<file>\fR
Defines the pop server secrets file (default is \fI/etc/emailrelay.auth\fR).
.TP
.B \-J, --pop-by-name
@ -145,37 +148,37 @@ Modifies the pop spool directory according to the user name (requires \fI--pop\f
.B \-G, --pop-no-delete
Disables message deletion via pop (requires \fI--pop\fR).
.TP
.B \-E,--pop-port \fIport\fR
.B \-E, --pop-port \fI<port>\fR
Specifies the pop listening port number (requires \fI--pop\fR).
.TP
.B \-p,--port \fIport\fR
.B \-p, --port \fI<port>\fR
Specifies the smtp listening port number.
.TP
.B \-P,--postmaster
Allows delivery to the postmaster but rejects all other local mailbox addresses.
.TP
.B \-r, --remote-clients
Allows remote clients to connect.
.TP
.B \-T,--response-timeout \fItime\fR
.B \-T, --response-timeout \fI<time>\fR
Sets the response timeout (in seconds) when talking to a remote server (default is 1800).
.TP
.B \-R,--scanner \fIhost:port\fR
.B \-R, --scanner \fI<host:port>\fR
Specifies an external network server to process messages when they are stored.
.TP
.B \-S,--server-auth \fIfile\fR
.B \-S, --server-auth \fI<file>\fR
Enables authentication of remote clients, using the given secrets file.
.TP
.B \-s,--spool-dir \fIdir\fR
.B \-s, --spool-dir \fI<dir>\fR
Specifies the spool directory (default is \fI/var/spool/emailrelay\fR).
.TP
.B \-u,--user \fIusername\fR
Names the effective user to switch to when started as root (default is \fIdaemon\fR).
.B \-k, --syslog
Force syslog output if logging is enabled (overrides \fI--no-syslog\fR).
.TP
.B \-u, --user \fI<username>\fR
Names the effective user to switch to if started as root (default is \fIdaemon\fR).
.TP
.B \-v, --verbose
Generates more verbose output (works with \fI--help\fR and \fI--log\fR).
.TP
.B \-Z,--verifier \fIprogram\fR
.B \-Z, --verifier \fI<program>\fR
Specifies an external program for address verification.
.TP
.B \-V, --version
@ -189,29 +192,11 @@ GNU style...
.br
/usr/local/libexec/emailrelay
.br
/usr/local/libexec/emailrelay-deliver.sh
.br
/usr/local/libexec/emailrelay-notify.sh
.br
/usr/local/libexec/emailrelay-poke
.br
/usr/local/libexec/emailrelay-process.sh
/usr/local/libexec/emailrelay-*.sh
.br
/usr/local/libexec/emailrelay-resubmit.js
.br
/usr/local/libexec/emailrelay-resubmit.sh
.br
/usr/local/libexec/emailrelay-runperl.js
.br
/usr/local/libexec/emailrelay-submit.sh
.br
/usr/local/man/man1/emailrelay.1.gz
.br
/usr/local/man/man1/emailrelay-passwd.1.gz
.br
/usr/local/man/man1/emailrelay-poke.1.gz
.br
/usr/local/man/man1/emailrelay-submit.1.gz
/usr/local/man/man1/emailrelay*.1.gz
.br
/usr/local/sbin/emailrelay
.br
@ -219,40 +204,12 @@ GNU style...
.br
/usr/local/sbin/emailrelay-submit
.br
/usr/local/share/emailrelay/doc/changelog.gz
.br
/usr/local/share/emailrelay/doc/changelog.html
.br
/usr/local/share/emailrelay/doc/developer.html
.br
/usr/local/share/emailrelay/doc/developer.txt
.br
/usr/local/share/emailrelay/doc/emailrelay.css
.br
/usr/local/share/emailrelay/doc/emailrelay-man.html
/usr/local/share/emailrelay/doc/*
.br
/usr/local/share/emailrelay/doc/index.html
.br
/usr/local/share/emailrelay/doc/NEWS
.br
/usr/local/share/emailrelay/doc/*.png
.br
/usr/local/share/emailrelay/doc/README
.br
/usr/local/share/emailrelay/doc/readme.html
.br
/usr/local/share/emailrelay/doc/reference.html
.br
/usr/local/share/emailrelay/doc/reference.txt
.br
/usr/local/share/emailrelay/doc/userguide.html
.br
/usr/local/share/emailrelay/doc/userguide.txt
.br
/usr/local/share/emailrelay/doc/windows.html
.br
/usr/local/share/emailrelay/doc/windows.txt
.br
/usr/local/var/spool/emailrelay/emailrelay.*.content
.br
/usr/local/var/spool/emailrelay/emailrelay.*.envelope
@ -273,57 +230,15 @@ FHS style...
.br
/usr/sbin/emailrelay-submit
.br
/usr/share/doc/emailrelay/changelog.gz
/usr/share/doc/emailrelay/*
.br
/usr/share/doc/emailrelay/changelog.html
.br
/usr/share/doc/emailrelay/developer.html
.br
/usr/share/doc/emailrelay/developer.txt
.br
/usr/share/doc/emailrelay/emailrelay.css
.br
/usr/share/doc/emailrelay/emailrelay-man.html
.br
/usr/share/doc/emailrelay/examples/emailrelay-deliver.sh
.br
/usr/share/doc/emailrelay/examples/emailrelay-notify.sh
.br
/usr/share/doc/emailrelay/examples/emailrelay-process.sh
.br
/usr/share/doc/emailrelay/examples/emailrelay-resubmit.sh
.br
/usr/share/doc/emailrelay/examples/emailrelay-submit.sh
/usr/share/doc/emailrelay/examples/emailrelay-*.sh
.br
/usr/share/doc/emailrelay/index.html
.br
/usr/share/doc/emailrelay/NEWS
.br
/usr/share/doc/emailrelay/*.png
.br
/usr/share/doc/emailrelay/README
.br
/usr/share/doc/emailrelay/readme.html
.br
/usr/share/doc/emailrelay/reference.html
.br
/usr/share/doc/emailrelay/reference.txt
.br
/usr/share/doc/emailrelay/userguide.html
.br
/usr/share/doc/emailrelay/userguide.txt
.br
/usr/share/doc/emailrelay/windows.html
.br
/usr/share/doc/emailrelay/windows.txt
.br
/usr/share/man/man1/emailrelay.1.gz
.br
/usr/share/man/man1/emailrelay-passwd.1.gz
.br
/usr/share/man/man1/emailrelay-poke.1.gz
.br
/usr/share/man/man1/emailrelay-submit.1.gz
/usr/share/man/man1/emailrelay*.1.gz
.br
/var/spool/emailrelay/emailrelay.*.content
.br

View File

@ -87,6 +87,8 @@ h1
img
{
border-width: 0px ;
border-style: none ; /* check */
margin-left: 8% ;
}
@ -210,7 +212,5 @@ span.span-mailto
#img-sourceforge
{
border-width: 0px ;
border-style: none ; /* check */
}

View File

@ -21,4 +21,4 @@
</div>
</body>
</html>
<!-- Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->
<!-- Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->

View File

@ -29,7 +29,7 @@ where <switch> is:
Runs as a proxy: equivalent to "--log --close-stderr --immediate --forward-to".
# --as-server (-d)
Runs as a server: equivalent to "--log --close-stderr --postmaster".
Runs as a server: equivalent to "--log --close-stderr".
# --client-auth (-C)
Enables smtp authentication with remote server, using the given secrets file.
@ -55,6 +55,9 @@ where <switch> is:
# --filter (-z)
Specifies an external program to process messages as they are stored.
# --filter-timeout (-W)
Sets the timeout (in seconds) for running the --filter processor.
# --forward (-f)
Forwards stored mail on startup (requires --forward-to).
@ -83,13 +86,13 @@ where <switch> is:
Disables listening for smtp connections (usually used with --admin or --pop).
# --no-syslog (-n)
Disables syslog output.
Disables syslog output (always overridden by --syslog).
# --pid-file (-i)
Defines a file for storing the daemon process-id.
# --poll (-O)
Enables polling with the specified period (requires --forward-to).
Enables polling of the spool directory for messages to be forwarded with the specified period (requires --forward-to).
# --pop (-B)
Enables the pop server if compiled-in.
@ -109,9 +112,6 @@ where <switch> is:
# --port (-p)
Specifies the smtp listening port number.
# --postmaster (-P)
Allows delivery to the postmaster but rejects all other local mailbox addresses.
# --remote-clients (-r)
Allows remote clients to connect.
@ -127,8 +127,11 @@ where <switch> is:
# --spool-dir (-s)
Specifies the spool directory (default is "/var/spool/emailrelay").
# --syslog (-k)
Force syslog output if logging is enabled (overrides --no-syslog).
# --user (-u)
Names the effective user to switch to when started as root (default is "daemon").
Names the effective user to switch to if started as root (default is "daemon").
# --verbose (-v)
Generates more verbose output (works with --help and --log).
@ -142,26 +145,6 @@ where <switch> is:
Under Windows there are a few differences. Use "--help --verbose"
to see the complete list.
If no command-line switches are supplied at all then the default
behaviour is:
* to run as a daemon, detached from the terminal
* listen on the standard SMTP port (25)
* store e-mail messages in "/usr/local/var/spool/emailrelay" or "/var/spool/emailrelay"
* reject connections from remote clients
* disable the administration interface
* generate no logging or diagnostic messages
Adding the "--as-server" switch makes sure that logging is enabled and that the
standard error stream is closed.
To forward spooled messages the "--as-client" switch is provided to run the
program
* in foreground, exiting when all spooled mail has been processed
* taking spooled mail from "/usr/local/var/spool/emailrelay" or "/var/spool/emailrelay"
* without listening on any port
* with error, warning and information messages sent to stderr
* without using syslog
Message store
-------------
Mail messages are stored as text files in the configured spool directory. Each
@ -187,76 +170,6 @@ a "local" suffix.
If a message cannot be forwarded the envelope file is given a "bad" suffix,
and the failure reason is written into the file.
SMTP issues
-----------
# Authentication:
The AUTH extension is supported, providing the CRAM-MD5 and LOGIN mechanisms.
# Local delivery:
In server mode (ie. with "--postmaster") recipient addresses like
"postmaster", "postmaster@localhost" and "postmaster@fqdn" (where "fqdn" is
the host's fully qualified domain name) are treated as the local postmaster,
resulting in local delivery rather than mail forwarding. Recipient addresses
other than "postmaster" addresses with no "at" sign (@) or ending in
"@localhost" will be rejected at the time the message is submitted by the
client.
Delivery of mail to a local "postmaster" is a feature of E-MailRelay which is
provided for completeness and for comformance to the SMTP specification. But
note that the E-MailRelay daemon does not actually deliver mail to the
postmaster mailbox. All it does is create an envelope and content file in
the spool directory with a ".local" suffix. Some external system, such as a
shell script run from cron calling "procmail", should be used to process the
".local" files. An example script is provided.
# Timeouts:
A simple client-side timeout is implemented which will abort the transaction
if the server fails to respond to any of the client's SMTP commands within
the given time period.
# Message loops:
Message loops are not detected.
# Eight bit messages:
The 8BITMIME SMTP extension is supported, however no attempt is made to
re-encode 8-bit messages into 7-bit messages if the next-hop server
does not.
Administration interface
------------------------
If enabled with the "--admin" command line switch, the E-MailRelay server will
provide a network interface for performing administration tasks. This is a
simple command-line interface which is compatible with "telnet":
$ emailrelay --as-server --port 125 --forward-to localhost:25 --admin 10026
$ telnet localhost 10026
E-MailRelay> help
E-MailRelay> quit
The "flush" command is used to get the E-MailRelay server to forward spooled
mail to the next SMTP server, as an alternative to running
"emailrelay --as-client" as a separate process. In proxy mode it is a way of
getting the proxy server to scan the spool-directory for new messages.
The utility program "emailrelay-poke" can be used to issue the "flush"
command to an E-MailRelay server. For example:
$ emailrelay --as-server --port 125 --forward-to localhost:25 --admin 10026
$ emailrelay-poke 10026
$ echo $?
To use the "flush" command the next SMTP server address must have been defined
on the "emailrelay" command line at start-up using the "--forward-to" switch.
Also, the "list" command lists the messages in the spool directory, "info"
provides network status information and activity statistics, and "notify"
enables asynchronous event notification.
Mail processing
---------------
The "--filter" command-line switch allows you to specify a mail pre-processor
@ -344,7 +257,7 @@ For Windows this example can be rewritten in JavaScript:
Windows pre-processor programs written in JavaScript can be run using
"cscript", with an E-MailRelay "--filter" switch something like this:
--filter "c:/winnt/system32/cscript.exe //nologo c:/program\ files/emailrelay/filter.js"
--filter "c:/windows/system32/cscript.exe //nologo c:/program\ files/emailrelay/filter.js"
Note how the space character in the path is escaped with a backslash.
@ -355,7 +268,7 @@ message appears as an attachment within a plaintext bearer message.
E-MailRelay also has a "--client-filter" switch that enables pre-processing of
messages just before they are forwarded, rather then after they are stored. The
problem is that by then it is too late to notify the SMTP client of any
disadvantage is that by then it is too late to notify the SMTP client of any
processing failures, so in many applications using "--filter" is more useful.
Bear in mind the following points when writing "--filter" programs:
@ -374,40 +287,33 @@ used to specify the IP address and port that the scanner server is listening
on. E-MailRelay connects to this address and then uses a simple line-based
dialog as each e-mail message is received. E-MailRelay sends the full path of
the message content file, and the scanner is expected to respond with "ok" if
the message is to be accepted, or an error message. No source code is provided
for a scanner process in this release, but *Python's* [http://python.org]
support for threads and sockets would make it a good choice of language.
the message is to be accepted, or an error message.
Address verification
--------------------
In server mode (or more accurately when "--postmater" is in effect) addresses
for incoming e-mails received in "RCPT" or "VRFY" commands are accepted as valid
if they contain an at sign ("@") or if they are some sort of local "postmaster"
address: "postmaster", "postmaster@localhost" or "postmaster@<fqdn>". Other
addresses without an at sign are rejected.
In proxy mode (more accurately without "--postmaster") all addresses are
accepted as valid, whatever they look like.
This is normally what you want for a proxy or store-and-forward MTA because the
delivery address can only be fully verified once the message gets to the last
machine in the chain and the message is finally delivered into a mailbox.
However, the default behaviour can be modified by using an external verifier
program, specified with the "--verifier" command-line switch, so that you get
to choose which addresses are accepted as valid and which are rejected.
By default the E-MailRelay server will accept all addresses for incoming e-mails
as valid. However, this default behaviour can be modified by using an external
verifier program, specified with the "--verifier" command-line switch, so that
you get to choose which addresses are accepted as valid and which are rejected.
The external verifier program is passed a command-line containing: (1) the full
address, (2) the user-name part of the address in upper-case, (3) the host-name
part in upper-case, (4) the local host's fully qualified domain name in
upper-case, (5) the current "MAIL" command's "FROM:" address or the empty string
for the "VRFY" command, (6) the IP address of the client connection, (7) the
e-mail address as supplied by the remote client, (2) the user-name part of the
address in upper-case, (3) the host-name part in upper-case, (4) the local
host's fully qualified domain name in upper-case, (5) the "MAIL" command's
"FROM:" address as supplied by the client or the empty string in the case of the
"VRFY" command, (6) the IP address of the client connection, (7) the
authentication mechanism used by the client ("NONE" if trusted), and (8) either
the authentication name or the fourth field from authentication secrets file if
a trusted IP address:
a trusted IP address.
So, for example, a verifier script called "myverifier" might be run with the
following command-line:
myverifier me@myhost.mydomain ME MYHOST.MYDOMAIN MYHOST.MYDOMAIN bob@other.net 192.168.0.1 LOGIN bob
The verifier program is expected to generate two lines of output on the standard
output stream and then terminate with a specific exit code.
For valid non-local addresses the first line of output is ignored, the second
line should be copied from the first command-line argument, and the exit
value should be one.
@ -429,6 +335,9 @@ then exit with a value of zero.
echo postmaster
exit 0
(In practice local delivery just means that the message files in the spool
directory are copied and given a ".local" filename suffix.)
For invalid addresses the exit value should be greater than one, and anything
written to the standard output is taken as the failure reason. (Only the few
few thousand characters are read from the verifier's standard output stream; any
@ -453,7 +362,7 @@ If the exit code is 100 then the connection is aborted immediately.
exit 100
In this more complete example all addresses are accepted as long as they contain
an at sign:
an "at" character:
#!/bin/sh
# address verifier -- accept only if containing an at sign
@ -502,6 +411,167 @@ or in JavaScript:
If this verifier script is used with a suitable "--server-auth" file then it can
be used to prevent open relay without restricting authenticated clients.
Authentication
--------------
E-MailRelay supports the SMTP "AUTH" extension, as defined in RFC2554, on both
the server-side and client-side.
The authentication mechanisms currently supported are:
# "LOGIN"
Passwords are stored in clear-text, sent over the network in clear-text, and
are replayable. This is a widely used mechanism, but officially obsolete.
# "CRAM-MD5" mechanism
Passwords are not stored in clear-text, not sent over the network, and are
not replayable. Defined in RFC2195.
Authentication is enabled with the "--client-auth" and "--server-auth"
command-line switches. The switch parameter is the name of a "secrets" file,
containing usernames and passwords:
emailrelay --as-server --server-auth /etc/emailrelay-clients.auth
emailrelay --as-client myisp.net:smtp --client-auth /etc/emailrelay-myisp.auth
The secrets file has a line-based format: blank lines are ignored and the hash
character (#) is used for comments.
Lines have four white-space delimited fields:
* "mechanism"
* "client-or-server"
* "userid"
* "secret"
The "mechanism" field must be "LOGIN", "APOP" or "CRAM-MD5" (case-insensitive);
the "client-or-server" field must be "client" or "server"; the "userid" field is
xtext-encoded user identifier; and the "secret" field is the xtext-encoded
"LOGIN" password, or the "CRAM-MD5" key.
The "xtext" encoding scheme is defined properly in RFC1891, but basically it
says that non alphanumeric characters should be represented in hexadecimal as
"+XX".
The client-side secrets file specified with "--client-auth" is used when
E-MailRelay acts as a client to talk to a remove server. The file should contain
at least one "LOGIN client" or "CRAM-MD5 client" entry.
A server-side secrets file specified with "--server-auth" is used when a remote
client tries to authenticate with the E-MailRelay server. The file should
normally contain several "LOGIN server" or "CRAM-MD5 server" entries.
The same secrets file may be specified for both "--client-auth" and
"--server-auth" switches.
The "CRAM-MD5" keys can be generated using the "emailrelay-passwd" utility.
As an example, the following secrets file defines "jsmith" as the username to be
used when E-MailRelay authenticates with a remote SMTP server, and defines two
usernames ("user1" and "user2") which can be used by clients when they
authenticate with the E-MailRelay server:
#
# emailrelay secrets file
#
LOGIN client jsmith my+20password
LOGIN server user1 secret
LOGIN server user2 e+3Dmc2
A "CRAM-MD5" version would look like this:
#
# emailrelay secrets file
#
CRAM-MD5 client jsmith 688498119.2977922305.1278051807.3015243256.2216875978.2833592318.2902375592.3156808220
CRAM-MD5 server user1 4059553961.2316091643.3282746241.1444639637.3735501773.3404060330.2760590371.1201092398
CRAM-MD5 server user2 2798539199.3144534242.3784876256.2879973305.2327113479.216533878.2436460291.2361831919
When using the "LOGIN" mechanism you have to store plaintext passwords in a
file. This is a bad thing. You should at least make sure that the secrets file
has tight permissions, and that the passwords in it are not also used for
anything important.
On the server side authentication is advertised by E-MailRealy in the response
to the SMTP "EHLO" command if the "--server-auth" command-line switch is used.
Authentication by the client is then mandatory unless the client's IP address is
configured as a trusted address.
Trusted IP addresses are configured with lines in the secrets file having "NONE"
in the first field, "server" in the second field, a wildcarded IP address in
the third field, and an arbitrary keyword in the fourth field. The keyword field
is passed to any external address verifier program specified by the "--verifier"
command-line switch; it is not used for any other purpose.
For example this secrets file allows any client connecting from the
192.168.0.0/24 domain to connect without authentication desipte the
"--server-auth" switch:
#
# emailrelay secrets file
#
NONE server 192.168.0.* localdomain
LOGIN server user1 secret
LOGIN server user2 e+3Dmc2
On the client side authentication is performed when E-MailRelay has connected to
a server which implements the AUTH extension with one of the supported
mechanisms. If client authentication is enabled (with the "--client-auth"
switch) but the remote server does not support the AUTH extension, or does not
support the LOGIN or CRAM-MD5 mechanism, then E-MailRelay will fail the first
message and terminate with an error message.
Note that some ISPs require separate POP/IMAP authentication before SMTP access
from a particular IP address is allowed. This type of POP-before-SMTP
authentication can be done outside the E-MailRelay system by POP/IMAP utilities
such as "fetchmail".
Pop server
----------
If E-MailRelay has been built with POP3 support then the "--help --verbose"
output will show several additional command-line switches:
# --pop
Enables the POP3 server.
# --pop-port <port>
Changes the POP3 listening port from its default of 110.
# --pop-auth <path>
Changes the authentication secrets file. The default is typically
"/etc/emailrelay.auth".
The format of the authentication secrets file is the same as for
"--server-auth" and the same file can be used for both SMTP and POP3
authentication.
"APOP server" entries are used for "APOP" authentication, "LOGIN server"
entries are used for "USER/PASS" authentication, and "CRAM-MD5" entries are
used for "AUTH" authentication.
Note that the basic POP3 protocol defines only "APOP" and "USER/PASS"
authentication, so some POP client programs may not be able to cope with
CRAM-MD5 authentication using the POP3 "AUTH" extension.
# --pop-by-name
Modifies the POP spool directory according to the name used by the client
to authenticate with the E-MailRelay server. The client name is used as a
sub-directory off the standard spool directory. So, for example, if a client
authenticates as "bob" then the POP3 server will serve messages from the "bob"
sub-directory, "/var/spool/emailrelay/bob".
If E-MailRelay finds only the envelope file in the sub-directory and not the
content file then it will look for the content file in the main spool
directory, eg. "/var/spool/emailrelay". This feature can be used to save
diskspace if serving the same message to multiple POP clients.
# --pop-no-delete
Disables message deletion: the POP3 DELE command will appear to succeed, but
no files will be deleted from the spool directory.
Security issues
---------------
A significant security concern is the use of external mail pre-processors and
@ -545,8 +615,7 @@ Some other points are:
# remote clients
By default connections to the SMTP and administrative ports will be rejected
if they come from remote machines.
By default connections will be rejected if they come from remote machines.
# remote configuration
@ -561,7 +630,7 @@ Some other points are:
# file permissions
After a normal installation the spool directory is has ownership of
"root.daemon" with permissions of "-rwxrwxr-x". Messages files are created
"root.daemon" with permissions of "-rwxrwxr-x" and messages files are created
with permissions of "-rw-rw----". This allows normal users to list messages
files but not read them.
@ -579,162 +648,35 @@ from somewhere else. [..] Real [..] security lies [..] in end-to-end methods
The "Authentication" section below also relates to security.
Authentication
--------------
E-MailRelay supports the ESMTP "AUTH" extension, as defined in RFC2554, on both
the server-side and client-side.
Administration interface
------------------------
If enabled with the "--admin" command line switch, the E-MailRelay server will
provide a network interface for performing administration tasks. This is a
simple command-line interface which is compatible with "telnet":
The authentication mechanisms currently supported are:
# "LOGIN"
$ emailrelay --as-server --port 125 --forward-to localhost:25 --admin 10026
$ telnet localhost 10026
E-MailRelay> help
E-MailRelay> quit
Passwords are stored in clear-text, sent over the network in clear-text, and
are replayable. This is a widely used mechanism, but officially obsolete.
The "flush" command is used to get the E-MailRelay server to forward spooled
mail to the next SMTP server, as an alternative to running
"emailrelay --as-client" as a separate process. In proxy mode it is a way of
getting the proxy server to scan the spool-directory for new messages.
# "CRAM-MD5" mechanism
The utility program "emailrelay-poke" can be used to issue the "flush"
command to an E-MailRelay server. For example:
Passwords are not stored in clear-text, not sent over the network, and are
not replayable. Defined in RFC2195.
$ emailrelay --as-server --port 125 --forward-to localhost:25 --admin 10026
$ emailrelay-poke 10026
$ echo $?
Authentication is enabled with the "--client-auth" and "--server-auth"
command-line switches. The switch parameter is the name of a "secrets" file,
containing usernames and passwords:
To use the "flush" command the next SMTP server address must have been defined
on the "emailrelay" command line at start-up using the "--forward-to" switch.
emailrelay --as-server --server-auth /etc/client-secrets.txt
emailrelay --as-client myisp.net:smtp --client-auth /etc/myisp-secret.txt
The secrets file has a line-based format: blank lines are ignored and the hash
character (#) is used for comments.
Lines have four white-space delimited fields:
* "mechanism"
* "client-or-server"
* "userid"
* "secret"
The "mechanism" field must be "LOGIN", "APOP" or "CRAM-MD5" (case-insensitive);
the "client-or-server" field must be "client" or "server"; the "userid" field is
xtext-encoded user identifier; and the "secret" field is the xtext-encoded
"LOGIN" password, or the "CRAM-MD5" key.
The "xtext" encoding scheme is defined properly in RFC1891, but basically it
says that non alphanumeric characters should be represented in hexadecimal as
"+XX".
The client-side secrets file specified with "--client-auth" is used when
E-MailRelay talks to a remove server. The file should contain at least one
"LOGIN client" or "CRAM-MD5 client" entry.
A server-side secrets file specified with "--server-auth" is used when a remote
client tries to authenticate with E-MailRelay. The file should normally contain
several "LOGIN server" or "CRAM-MD5 server" entries.
The same secrets file may be specified for both "--client-auth" and
"--server-auth" switches.
The "CRAM-MD5" keys can be generated using the "emailrelay-passwd" utility.
As an example, the following secrets file defines "jsmith" as the username to be
used when E-MailRelay authenticates with a remote SMTP server, and defines two
usernames ("user1" and "user2") which can be used by clients when they
authenticate with the E-MailRelay server:
#
# emailrelay secrets file
#
LOGIN client jsmith my+20password
LOGIN server user1 secret
LOGIN server user2 e+3Dmc2
A "CRAM-MD5" version would look like this:
#
# emailrelay secrets file
#
CRAM-MD5 client jsmith 688498119.2977922305.1278051807.3015243256.2216875978.2833592318.2902375592.3156808220
CRAM-MD5 server user1 4059553961.2316091643.3282746241.1444639637.3735501773.3404060330.2760590371.1201092398
CRAM-MD5 server user2 2798539199.3144534242.3784876256.2879973305.2327113479.216533878.2436460291.2361831919
When using the "LOGIN" you have to store plaintext passwords in a file. This is
a bad thing. You should at least make sure that the secrets file has tight
permissions, and that the passwords in it are not also used for anything
important.
On the server side authentication is advertised by E-MailRealy in the response
to the SMTP "EHLO" command if the "--server-auth" command-line switch is used.
Authentication by the client is mandatory unless the client's IP address is
configured as a trusted address. If the client does authenticate then the
authenticated user-id is stored with the message and then passed on to the next
SMTP server using an "AUTH=userid" parameter on the SMTP "MAIL FROM" command.
Trusted IP addresses are configured with lines in the secrets file having "NONE"
in the first field, "server" in the second field, a wildcarded IP address in
the third field, and an arbitrary keyword in the fourth field. The keyword
is passed to any external address verifier program specified by the "--verifier"
command-line switch.
For example this secrets file allows any client connecting from the
192.168.0.0/24 domain to connect without authentication desipte the
"--server-auth" switch:
#
# emailrelay secrets file
#
NONE server 192.168.0.* localdomain
LOGIN server user1 secret
LOGIN server user2 e+3Dmc2
On the client side authentication is performed when E-MailRelay has connected to
a server which implements the AUTH extension with one of the supported
mechanisms. If client authentication is enabled (with the "--client-auth"
switch) but the server does not support the AUTH extension, or does not support
the LOGIN or CRAM-MD5 mechanism, then E-MailRelay will fail the first message
and terminate with an error message.
Note that some ISPs require separate POP/IMAP authentication before SMTP access
from a particular IP address is allowed. This type of POP-before-SMTP
authentication can be done outside the E-MailRelay system by POP/IMAP utilities
such as "fetchmail".
Pop server
----------
If E-MailRelay has been built with POP3 support then the "--help --verbose"
output will show several new command-line switches:
# --pop
Enables the POP3 server.
# --pop-port <port>
Changes the POP3 listening port from its default of 110.
# --pop-auth <path>
Changes the authentication secrets file. The default is typically
"/etc/emailrelay.auth".
The format of the authentication secrets file is the same as for
"--server-auth" and the same file can be used for both SMTP and POP3
authentication.
"APOP server" entries are used for "APOP" authentication, "LOGIN server"
entries are used for "USER/PASS" authentication, and "CRAM-MD5" entries are
used for "AUTH" authentication.
Note that the basic POP3 protocol defines only "APOP" and "USER/PASS"
authentication, so some POP3 client programs may not be able to cope with
CRAM-MD5 authentication using the POP3 "AUTH" extension.
# --pop-by-name
Modifies the spool directory according to the client authentication name.
The client name is used as a sub-directory off the standard spool directory.
So, for example, if a client authenticates as "bob" then the POP3 server
will serve messages from the "/var/spool/emailrelay/bob" directory.
# --pop-no-delete
Disables message deletion. The POP3 DELE command will appear to succeed, but
no files will be deleted from the spool directory.
Also, the "list" command lists the messages in the spool directory, "info"
provides network status information and activity statistics, and "notify"
enables asynchronous event notification.
Files and directories
---------------------
@ -743,38 +685,15 @@ following locations:
* /usr/local/etc/emailrelay.conf
* /usr/local/etc/emailrelay.conf.template
* /usr/local/libexec/emailrelay
* /usr/local/libexec/emailrelay-deliver.sh
* /usr/local/libexec/emailrelay-notify.sh
* /usr/local/libexec/emailrelay-poke
* /usr/local/libexec/emailrelay-process.sh
* /usr/local/libexec/emailrelay-resubmit.js
* /usr/local/libexec/emailrelay-resubmit.sh
* /usr/local/libexec/emailrelay-runperl.js
* /usr/local/libexec/emailrelay-submit.sh
* /usr/local/man/man1/emailrelay.1.gz
* /usr/local/man/man1/emailrelay-passwd.1.gz
* /usr/local/man/man1/emailrelay-poke.1.gz
* /usr/local/man/man1/emailrelay-submit.1.gz
* /usr/local/libexec/emailrelay-*.sh
* /usr/local/man/man1/emailrelay*.1.gz
* /usr/local/sbin/emailrelay
* /usr/local/sbin/emailrelay-passwd
* /usr/local/sbin/emailrelay-submit
* /usr/local/share/emailrelay/doc/changelog.gz
* /usr/local/share/emailrelay/doc/changelog.html
* /usr/local/share/emailrelay/doc/developer.html
* /usr/local/share/emailrelay/doc/developer.txt
* /usr/local/share/emailrelay/doc/emailrelay.css
* /usr/local/share/emailrelay/doc/emailrelay-man.html
* /usr/local/share/emailrelay/doc/*
* /usr/local/share/emailrelay/doc/index.html
* /usr/local/share/emailrelay/doc/NEWS
* /usr/local/share/emailrelay/doc/*.png
* /usr/local/share/emailrelay/doc/README
* /usr/local/share/emailrelay/doc/readme.html
* /usr/local/share/emailrelay/doc/reference.html
* /usr/local/share/emailrelay/doc/reference.txt
* /usr/local/share/emailrelay/doc/userguide.html
* /usr/local/share/emailrelay/doc/userguide.txt
* /usr/local/share/emailrelay/doc/windows.html
* /usr/local/share/emailrelay/doc/windows.txt
* /usr/local/var/spool/emailrelay/emailrelay.*.content
* /usr/local/var/spool/emailrelay/emailrelay.*.envelope
@ -791,32 +710,11 @@ locations:
* /usr/sbin/emailrelay
* /usr/sbin/emailrelay-passwd
* /usr/sbin/emailrelay-submit
* /usr/share/doc/emailrelay/changelog.gz
* /usr/share/doc/emailrelay/changelog.html
* /usr/share/doc/emailrelay/developer.html
* /usr/share/doc/emailrelay/developer.txt
* /usr/share/doc/emailrelay/emailrelay.css
* /usr/share/doc/emailrelay/emailrelay-man.html
* /usr/share/doc/emailrelay/examples/emailrelay-deliver.sh
* /usr/share/doc/emailrelay/examples/emailrelay-notify.sh
* /usr/share/doc/emailrelay/examples/emailrelay-process.sh
* /usr/share/doc/emailrelay/examples/emailrelay-resubmit.sh
* /usr/share/doc/emailrelay/examples/emailrelay-submit.sh
* /usr/share/doc/emailrelay/*
* /usr/share/doc/emailrelay/examples/emailrelay-*.sh
* /usr/share/doc/emailrelay/index.html
* /usr/share/doc/emailrelay/NEWS
* /usr/share/doc/emailrelay/*.png
* /usr/share/doc/emailrelay/README
* /usr/share/doc/emailrelay/readme.html
* /usr/share/doc/emailrelay/reference.html
* /usr/share/doc/emailrelay/reference.txt
* /usr/share/doc/emailrelay/userguide.html
* /usr/share/doc/emailrelay/userguide.txt
* /usr/share/doc/emailrelay/windows.html
* /usr/share/doc/emailrelay/windows.txt
* /usr/share/man/man1/emailrelay.1.gz
* /usr/share/man/man1/emailrelay-passwd.1.gz
* /usr/share/man/man1/emailrelay-poke.1.gz
* /usr/share/man/man1/emailrelay-submit.1.gz
* /usr/share/man/man1/emailrelay*.1.gz
* /var/spool/emailrelay/emailrelay.*.content
* /var/spool/emailrelay/emailrelay.*.envelope
@ -838,19 +736,25 @@ and create the E-MailRelay spool directory as "/tmp/spool" rather than
"/usr/local/var/spool/emailrelay".
The default spool directory path which is built into the executables and scripts
comes from "configure", via the makefiles. So after running "configure" with a
different spool directory do a "make clean" in at least "src/main" and "bin".
comes from "configure" via the makefiles.
Even though the "--enable-fhs" switch overrides all other directory specifiers
during the build process, it is still possible to change the installation root
directory using "make install DESTDIR=<root>" or "DESTDIR=<root> make -e install".
However, this will not affect the default directory paths built into the scripts
and executables, so they will have to be explicitly defined at run-time.
But note that this will not affect the default spool directory path built into
the scripts and executables so the correct spool directory will have to be
specified at run-time with the "--spool-dir" switch.
The "emailrelay" start/stop script in "init.d" creates a pid file in "/var/run"
if the directory exists, or in "/tmp" otherwise.
If building the configuration GUI then you may need to set the "PKG_CONFIG_PATH"
environment variable to point to the ".pc" files in the Qt "lib" directory and
set the "e_qtmoc" configure variable to point to the Qt "moc" utility. You
may also need to set the correct library directory for Qt if it is wrong in
the ".pc" file by setting "LDFLAGS":
export QT=/usr/local/qt4
LDFLAGS=-L$QT/lib PKG_CONFIG_PATH=$QT/lib ./configure --enable-gui e_qtmoc="$QT/bin/moc"
Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.

View File

@ -8,11 +8,11 @@ server. It runs on Unix-like operating systems (including Linux), and on
Windows.
When used as proxy server the E-MailRelay program ("emailrelay") runs in the
background and accepts e-mail from front-ends (KMail, Outlook etc.) or from
the outside world, using the SMTP protocol. As soon as an e-mail message is
received it is forwarded on to the next SMTP server for onward delivery. This
becomes more useful when you add in your own message processing: as each
message is received it can be passed one of your programs for editing,
background and accepts e-mail from local e-mail client programs (KMail, Outlook
etc.) or from the outside world, using the SMTP protocol. As soon as an e-mail
message is received it is forwarded on to the next SMTP server for onward
delivery. This becomes more useful when you add in your own message processing:
as each message is received it can be passed one of your programs for editing,
filtering, encrypting etc.
When used as a store-and-forward transfer agent E-MailRelay runs in two modes:
@ -31,7 +31,7 @@ server, regardless of any message addressing or DNS redirects.
E-MailRelay is not a delivery agent. Some programs like "fetchmail" send
locally-addressed e-mail to the local SMTP server in order to deliver them to
local mailboxes. E-MailRelay will not normally do this.
local system mailboxes. E-MailRelay will not normally do this.
Why use it?
-----------
@ -56,41 +56,47 @@ Typical applications of E-MailRelay include:
Running E-MailRelay
-------------------
To run the program as a proxy use the "--as-proxy" command-line switch followed
by the address of the target SMTP server. If you want to edit or filter e-mail
as it passes through the proxy then specify your pre-processor program with the
"--filter" switch. You can optionally change the listening port number using
"--port" and the spool directory using "--spool-dir".
To use E-MailRelay in store-and-forward mode use the "--as-server" switch to
start the storage daemon in the background, and then trigger delivery of spooled
messages by running with the "--as-client" switch and the address of the target
host.
For example, to start up a local proxy that passes messages to some "addsig"
script and then forwards them to an MTA running on "smarthost", use a command
like this:
For example, to start a storage daemon listening on port 10025 use a command like
this:
emailrelay --as-proxy smarthost:smtp --filter $HOME/bin/addsig --spool-dir $HOME/tmp
emailrelay --as-server --port 10025 --spool-dir /tmp
To use E-MailRelay as a store-and-forward MTA use the "--as-server" switch
to start the storage daemon in the background. And then trigger delivery of
spooled messages by running emailrelay with the "--as-client" switch followed
by the address of the target SMTP server.
And then to forward the spooled mail to "smarthost" run something like this:
For example, to start a storage daemon listening on port 10025 use a command
like this:
emailrelay --as-client smarthost:smtp --spool-dir /tmp
emailrelay --as-server --port 10025 --spool-dir $HOME/tmp
To get behaviour more like a proxy you can add the "--poll" switch so that
messages are forwarded continuously rather than on-demand. This example starts a
store-and-forward server that forwards spooled-up e-mail every hour:
And then to forward the spooled mail to "smarthost" run somthing like this:
emailrelay --as-server --poll 3600 --forward-to smarthost:smtp
emailrelay --as-client smarthost:smtp --spool-dir $HOME/tmp
For a proxy server that forwards each message as it is being received, without
any delay, you can use the "--as-proxy" mode:
To run E-MailRelay as a POP server without SMTP you can use a command like this:
emailrelay --as-proxy smarthost:smtp
If you want to edit or filter e-mail as it passes through the proxy then specify
your pre-processor program with the "--filter" switch, something like this:
emailrelay --as-proxy smarthost:smtp --filter /usr/local/bin/addsig
To run E-MailRelay as a POP server without SMTP use "--pop" and "--no-smtp":
emailrelay --pop --no-smtp --log --close-stderr
The "emailrelay-submit" utility can be used to put messages straight into the
spool directory.
spool directory so that the POP clients can fetch them.
By default E-MailRelay will always reject connections from remote machines. To
allow connections from anywhere use the "--remote-clients" switch.
Note that by default E-MailRelay will always reject connections from remote
machines. To allow connections from anywhere use the "--remote-clients" switch,
but please consider the implications if your machine is connected to the
internet.
For more information on the command-line options refer to the reference guide
or run:
@ -188,9 +194,10 @@ If you create "ip-up.local" yourself remember to make it executable.
Notification of failed e-mails
------------------------------
If e-mail messages become corrupted or inaccessible within the spool directory
then they will get failed within the E-MailRelay system, with the envelope files
in the spool directory ending up with a ".bad" suffix.
If e-mail messages corrupted or inaccessible within the spool directory
(typically becuase the disk is full) then they will get failed within the
E-MailRelay system, with the envelope files in the spool directory ending up
with a ".bad" suffix.
If you are not too worried about getting failed mail to bounce, or if you do not
have a suitable delivery agent, then a simple check in your ".profile" script
@ -312,17 +319,24 @@ stream ("stderr"). To get the server to log onto stderr, replace the
"--as-server" command-line switch with "--log --no-syslog". Refer to the
reference guide for more information.
Reporting problems
------------------
Please report any problems you have, but please always say what operating system
and version of E-MailRelay are using, and include as much logging information
as possible.
Preventing open mail relay
--------------------------
If you are running E-MailRelay as a server with a permanent connection to the
Internet it is important to prevent open mail relay. By default open mail
relaying is not possible because E-MailRelay does not accept IP connections from
remote clients. However, if the "--remote-clients" switch is used then you need
to be more careful. One option is to require all clients to authenticate, by
using the "--server-auth" switch. But if you need local clients, such as your
own e-mail front-end, to connect without authentication then you will need to
put those trusted IP addresses in the secrets file with an authentication
mechanism of "NONE". Refer to the reference guide for more information.
Internet it is important to prevent open mail relay because this can be
exploited by spammers. By default open mail relaying is not possible because
E-MailRelay does not accept IP connections from remote clients. However, if the
"--remote-clients" switch is used then you need to be more careful. One option
is to require all clients to authenticate, by using the "--server-auth" switch.
But if you need local clients, such as your own e-mail front-end, to connect
without authentication then you will need to put those trusted IP addresses in
the secrets file with an authentication mechanism of "NONE". Refer to the
reference guide for more information.
Taking it one stage further, you may want to allow clients to connect from any
IP address without authentication, but only allow them to send mail to local
@ -487,4 +501,4 @@ maximise throughput.
Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.

View File

@ -1,105 +1,51 @@
E-MailRelay Windows installation
================================
Introduction
------------
E-MailRelay has been developed on Linux and the documentation relates to
Unix-like operating systems rather than Microsoft Windows. This document
was written from the perspective of setting up E-MailRelay as a
store-and-forward MTA on Windows 98 and it may or may not be relevant to more
up-to-date versions of Windows.
Setup program
-------------
Installing E-MailRelay on Windows should be straightfowrard if you have
self-extracting archive program "emailrelay-setup.exe". Make sure that the setup
program is in a writeable directory with plenty of space on the disk because
when you run it is will extract an installation GUI program plus dependent DLLs
in into the same directory.
Quick start
------------
In summary, the Windows installation process is as follows:
* Unpack the zip file to "Program Files\emailrelay".
* Create a spool directory under "<windir>\spool", eg. "c:\win98\spool\emailrelay".
* Create a shortcut to the E-MailRelay executable in "Start->Programs->StartUp".
* Add "storage-daemon" configuration options such as "--as-server" to the "StartUp" shortcut's command line.
* Create a shortcut to the executable on the taskbar and/or desktop.
* Add "forwarding-client" configuration options such as "--as-client smtp.myisp.com:smtp" to the taskbar/desktop shortcut's command line.
* Configure your e-mail client (eg. Outlook) to use SMTP on the local machine for outgoing e-mail.
* Run the forwarding client from the taskbar/desktop shortcut once connected to the Internet.
The installation GUI program will take you through the installation options and
then install the run-time files into your chosen directory.
These steps are described in more detail below.
Manual installation
-------------------
In summary, the manual installation process for Windows for when you do not have
the self-extracting setup program, is as follows:
* Create a new program directory "Program Files\emailrelay"
* Unzip into "Program Files\emailrelay"
* Create a new spool directory "<windir>\spool\emailrelay"
* Create a new text file, eg. "c:\emailrelay.auth", to contain account details
* Add your ISP account details to "emailrelay.auth" with a line like "login client myaccount mypassword"
* Drag "emailrelay.exe" onto the desktop to create a shortcut for the server.
* Drag again to create a shortcut for the forwarding client.
* Add "--as-server --verbose" to the server shortcut properties.
* Add "--as-client myisp.net:smtp --hidden --client-auth c:/emailrelay.auth" to the client shortcut.
On versions of Windows that support services you could also try using Microsoft's
"srvany.exe" utility to run emailrelay as a service; you will need to add the
"--hidden" and "--no-daemon" switches to the E-MailRelay command-line for this.
Move shortcuts to "Startup" folders as necessary. Or try using Microsoft's
"srvany.exe" utility to run emailrelay as a service; you will need to use the
"--hidden" and "--no-daemon" switches on the E-MailRelay command-line for this.
Unpacking
---------
To start the installation process you will need to extract the files from
the "zip" archive. If you have "WinZip" installed then double-clicking on
the E-MailRelay "zip" file should start WinZip and open the archive.
From WinZip you can press the "Extract" button, or use the "Actions->Extract"
menu option. In the "Extract to" box you can type the full path of a new
sub-directory under "Program Files" which will hold the extracted files, eg.
"C:\Program Files\emailrelay". WinZip will create the sub-directory
("emailrelay") if necessary.
Server configuration
--------------------
Once the files are unpacked you need to create a shortcut to the E-MailRelay
executable in the Start menu's "StartUp" folder. This will make sure that the
E-MailRelay server is started automatically when you next boot the machine and
log in.
One way to do this is to open up the "Program Files\emailrelay" folder using
Windows Explorer or "My Computer", and open a second folder window for the
Start menu. To open thes second "Start menu" window: (1) right-click on a
blank part of the taskbar, (2) select "Properties" from the popup menu, (3)
select the "Start Menu Programs" tab, and (4) press the "Advanced..."
button. In the Start menu window go down into the "Programs" folder and then
into "StartUp". Then simply drag the "emailrelay.exe" file from one window
to the other using the right mouse button. When you drop the file, select
the "Create Shortcut Here" option on the pop-up menu.
You can then configure the E-MailRelay server by adding configuration options
to the shortcut's command line. The server should work okay without this step,
but there may be options you want to add. Refer to the userguide and reference
manual for more information on what configuration options are available.
To add configuration options right-click on the new shortcut which you have
created in the "Start menu" window. Select "Properties" from the pop-up menu,
and then select the "Shortcut" tab in the properties dialog box. The "Target"
box should contain the name of the E-MailRelay executable. Add any additional
configuration options after the executable name, separated by a space.
Client configuration
--------------------
Once the server is configured the next step is to create an icon on the desktop
(or taskbar) which you can use to start the E-MailRelay forwarding client once
you are connected to the Internet.
You can do this by simply dragging the E-MailRelay executable file from the
"Program Files\emailrelay" folder onto the desktop. Then right click on the new
icon and select "Properties" from the pop-up menu.
Again the "Target" box should contain the path of the E-MailRelay executable,
and you should add configuration options at the end, separated by a space. As a
minumum you will need to add "--as-client myisp:smtp", where "myisp" is replaced
with the hostname of your ISP's SMTP server.
Preparation
Diagnostics
-----------
To complete the installation you should create a spool directory to hold your
e-mail messages while you are off-line. By default E-MailRelay will look for a
directory "<windir>\spool\emailrelay", where "<windir>" is the path of your main
windows directory, typically "c:\win98" for Windows 98.
* Set the environment variable "GLOGOUTPUT_DIR" to (eg.) "c:\temp" and look for "glog.txt"
* Add "--log --log-time --verbose --syslog" to the E-MailRelay command-lines.
* Check the event log (run "eventvwr.exe") for errors and warnings.
* Check the spool directory for ".bad" envelope files -- remove the suffix to retry.
Finally you will need to configure your e-mail client program to use the local
E-MailRelay server for outgoing mail. Where it asks for the name of the SMTP
server for outgoing mail you should tell it to use "localhost" or "127.0.0.1".
Building from source
--------------------
E-MailRelay can be compiled using Microsoft Visual C++ (MSVC) 6 or MinGW,
although the installation/configuration GUI can only be built with MinGW because
of its dependence on Qt.
Uninstall
---------
To uninstall just delete the files under "Program Files\emailrelay" and
"<windir>\spool\emailrelay", and remove any taskbar, desktop or
"Start->Programs->StartUp" shortcuts.
There is a workspace file for MSVC 6 in the "src" directory. For MinGW please
follow the guidelines in "mingw-common.mak" also in the "src" directory.
Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.

View File

@ -1,11 +1,11 @@
Summary: Simple e-mail message transfer agent and proxy using SMTP
Name: emailrelay
Version: 1.4
Version: 1.5
Release: 1
License: GPL
Group: System Environment/Daemons
URL: http://emailrelay.sourceforge.net/
Source: http://kent.dl.sourceforge.net/sourceforge/emailrelay/emailrelay-src-1.4.tar.gz
Source: http://kent.dl.sourceforge.net/sourceforge/emailrelay/emailrelay-src-1.5.tar.gz
BuildRoot: /tmp/emailrelay-install
%description
@ -20,7 +20,8 @@ Because of its functional simplicity E-MailRelay is easy to configure, typically
only requiring the address of the target SMTP server to be put on the command
line.
E-MailRelay can also run as a POP3 server.
E-MailRelay can also run as a POP3 server. Messages received over SMTP can be
automatically dropped into several independent POP3 mailboxes.
C++ source code is available for Linux, FreeBSD, MacOS X etc, and Windows.
Distribution is under the GNU General Public License.
@ -53,32 +54,11 @@ test "$RPM_BUILD_ROOT" = "/" || rm -rf "$RPM_BUILD_ROOT"
/usr/sbin/emailrelay
/usr/sbin/emailrelay-passwd
/usr/sbin/emailrelay-submit
/usr/share/doc/emailrelay/changelog.gz
/usr/share/doc/emailrelay/changelog.html
/usr/share/doc/emailrelay/developer.html
/usr/share/doc/emailrelay/developer.txt
/usr/share/doc/emailrelay/emailrelay.css
/usr/share/doc/emailrelay/emailrelay-man.html
/usr/share/doc/emailrelay/examples/emailrelay-deliver.sh
/usr/share/doc/emailrelay/examples/emailrelay-notify.sh
/usr/share/doc/emailrelay/examples/emailrelay-process.sh
/usr/share/doc/emailrelay/examples/emailrelay-resubmit.sh
/usr/share/doc/emailrelay/examples/emailrelay-submit.sh
/usr/share/doc/emailrelay/*
/usr/share/doc/emailrelay/examples/emailrelay-*.sh
/usr/share/doc/emailrelay/index.html
/usr/share/doc/emailrelay/NEWS
/usr/share/doc/emailrelay/*.png
/usr/share/doc/emailrelay/README
/usr/share/doc/emailrelay/readme.html
/usr/share/doc/emailrelay/reference.html
/usr/share/doc/emailrelay/reference.txt
/usr/share/doc/emailrelay/userguide.html
/usr/share/doc/emailrelay/userguide.txt
/usr/share/doc/emailrelay/windows.html
/usr/share/doc/emailrelay/windows.txt
/usr/share/man/man1/emailrelay.1.gz
/usr/share/man/man1/emailrelay-passwd.1.gz
/usr/share/man/man1/emailrelay-poke.1.gz
/usr/share/man/man1/emailrelay-submit.1.gz
/usr/share/man/man1/emailrelay*.1.gz
/var/spool/emailrelay/
%changelog

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -14,15 +14,11 @@
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -41,18 +37,22 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(sysconfdir)"
sysconfDATA_INSTALL = $(INSTALL_DATA)
DATA = $(sysconf_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -76,9 +76,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -89,10 +91,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -101,47 +103,62 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
#
#
@ -179,13 +196,12 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
install-sysconfDATA: $(sysconf_DATA)
@$(NORMAL_INSTALL)
test -z "$(sysconfdir)" || $(mkdir_p) "$(DESTDIR)$(sysconfdir)"
test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)"
@list='$(sysconf_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
f=$(am__strip_dir) \
echo " $(sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(sysconfdir)/$$f'"; \
$(sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(sysconfdir)/$$f"; \
done
@ -193,7 +209,7 @@ install-sysconfDATA: $(sysconf_DATA)
uninstall-sysconfDATA:
@$(NORMAL_UNINSTALL)
@list='$(sysconf_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(sysconfdir)/$$f'"; \
rm -f "$(DESTDIR)$(sysconfdir)/$$f"; \
done
@ -205,22 +221,21 @@ CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -236,7 +251,7 @@ check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(sysconfdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
@ -257,7 +272,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -284,12 +299,20 @@ install-data-am:
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-dvi: install-dvi-am
install-exec-am: install-sysconfDATA
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -308,16 +331,20 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-info-am uninstall-sysconfDATA
uninstall-am: uninstall-sysconfDATA
.MAKE: install-am install-data-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip install-sysconfDATA installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-info-am uninstall-sysconfDATA
install install-am install-data install-data-am \
install-data-hook install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip install-sysconfDATA \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am uninstall uninstall-am uninstall-sysconfDATA
install-data-hook:
if test -f "$(DESTDIR)$(sysconfdir)/emailrelay.conf" ; then : ; else cp "$(DESTDIR)$(sysconfdir)/emailrelay.conf.template" "$(DESTDIR)$(sysconfdir)/emailrelay.conf" ; fi

View File

@ -32,7 +32,8 @@
# Format: interface <ip-address>
# Description: Specifies an interface to listen on. The default is to listen
# on all interfaces (INADDR_ANY). Using a specific interface can make it harder
# for clients on other sub-networks to connect, so improving security.
# for clients on other sub-networks to connect, so improving security. Up to
# three interface addresses can be spefified using comma separators.
#
#interface 192.168.0.10
@ -110,7 +111,8 @@
# Name: poll
# Format: poll <period>
# Description: Enables polling with the specified period. Requires --forward-to.
# Description: Enables polling of the spool directory for new messages with the
# specified period. Requires --forward-to.
#
#poll 120

View File

@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2004-02-15.20
scriptversion=2006-10-14.15
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@ -39,15 +39,24 @@ scriptversion=2004-02-15.20
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# from scratch.
nl='
'
IFS=" "" $nl"
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
if test -z "$doit"; then
doit_exec=exec
else
doit_exec=$doit
fi
# put in absolute paths if you don't have them in your path; or use env. vars.
# Put in absolute file names if you don't have them in your path;
# or use environment vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
@ -58,10 +67,13 @@ stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
transformbasename=
transform_arg=
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
posix_glob=
posix_mkdir=
# Desired mode of installed file.
mode=0755
chmodcmd=$chmodprog
chowncmd=
chgrpcmd=
stripcmd=
@ -70,23 +82,27 @@ mvcmd="$mvprog"
src=
dst=
dir_arg=
dstarg=
no_target_directory=
usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 -d DIRECTORIES...
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
In the second, create the directory path DIR.
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
-b=TRANSFORMBASENAME
-c copy source (using $cpprog) instead of moving (using $mvprog).
-c (ignored)
-d create directories instead of installing files.
-g GROUP $chgrp installed files to GROUP.
-m MODE $chmod installed files to MODE.
-o USER $chown installed files to USER.
-s strip installed files (using $stripprog).
-t=TRANSFORM
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
--help display this help and exit.
--version display version info and exit.
@ -94,14 +110,9 @@ Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
"
while test -n "$1"; do
while test $# -ne 0; do
case $1 in
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
-c) instcmd=$cpprog
shift
-c) shift
continue;;
-d) dir_arg=true
@ -113,11 +124,17 @@ while test -n "$1"; do
shift
continue;;
--help) echo "$usage"; exit 0;;
--help) echo "$usage"; exit $?;;
-m) chmodcmd="$chmodprog $2"
-m) mode=$2
shift
shift
case $mode in
*' '* | *' '* | *'
'* | *'*'* | *'?'* | *'['*)
echo "$0: invalid mode: $mode" >&2
exit 1;;
esac
continue;;
-o) chowncmd="$chownprog $2"
@ -129,14 +146,30 @@ while test -n "$1"; do
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
-t) dstarg=$2
shift
shift
continue;;
--version) echo "$0 $scriptversion"; exit 0;;
-T) no_target_directory=true
shift
continue;;
*) # When -d is used, all remaining arguments are directories to create.
test -n "$dir_arg" && break
--version) echo "$0 $scriptversion"; exit $?;;
--) shift
break;;
-*) echo "$0: invalid option: $1" >&2
exit 1;;
*) break;;
esac
done
if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
@ -148,11 +181,9 @@ while test -n "$1"; do
shift # arg
dstarg=$arg
done
break;;
esac
done
fi
if test -z "$1"; then
if test $# -eq 0; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
@ -162,6 +193,33 @@ if test -z "$1"; then
exit 0
fi
if test -z "$dir_arg"; then
trap '(exit $?); exit' 1 2 13 15
# Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps.
case $mode in
# Optimize common cases.
*644) cp_umask=133;;
*755) cp_umask=22;;
*[0-7])
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw='% 200'
fi
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
*)
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw=,u+rw
fi
cp_umask=$mode$u_plus_rw;;
esac
fi
for src
do
# Protect names starting with `-'.
@ -171,16 +229,12 @@ do
if test -n "$dir_arg"; then
dst=$src
src=
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
else
if test -d "$dst"; then
instcmd=:
chmodcmd=
else
instcmd=$mkdirprog
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
@ -202,96 +256,234 @@ do
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
dst=$dst/`basename "$src"`
if test -n "$no_target_directory"; then
echo "$0: $dstarg: Is a directory" >&2
exit 1
fi
dstdir=$dst
dst=$dstdir/`basename "$src"`
dstdir_status=0
else
# Prefer dirname, but fall back on a substitute if dirname fails.
dstdir=`
(dirname "$dst") 2>/dev/null ||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$dst" : 'X\(//\)[^/]' \| \
X"$dst" : 'X\(//\)$' \| \
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$dst" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'
`
test -d "$dstdir"
dstdir_status=$?
fi
fi
# This sed command emulates the dirname command.
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
obsolete_mkdir_used=false
# Make sure that the destination directory exists.
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
# Create intermediate dirs using mode 755 as modified by the umask.
# This is like FreeBSD 'install' as of 1997-10-28.
umask=`umask`
case $stripcmd.$umask in
# Optimize common cases.
*[2367][2367]) mkdir_umask=$umask;;
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
# Skip lots of stat calls in the usual case.
if test ! -d "$dstdir"; then
defaultIFS='
'
IFS="${IFS-$defaultIFS}"
*[0-7])
mkdir_umask=`expr $umask + 22 \
- $umask % 100 % 40 + $umask % 20 \
- $umask % 10 % 4 + $umask % 2
`;;
*) mkdir_umask=$umask,go-w;;
esac
# With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then
mkdir_mode=-m$mode
else
mkdir_mode=
fi
posix_mkdir=false
case $umask in
*[123567][0-7][0-7])
# POSIX mkdir -p sets u+wx bits regardless of umask, which
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
if (umask $mkdir_umask &&
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writeable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
ls_ld_tmpdir=`ls -ld "$tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
rmdir "$tmpdir/d" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
fi
trap '' 0;;
esac;;
esac
if
$posix_mkdir && (
umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
)
then :
else
# The umask is ridiculous, or mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go.
case $dstdir in
/*) prefix=/ ;;
-*) prefix=./ ;;
*) prefix= ;;
esac
case $posix_glob in
'')
if (set -f) 2>/dev/null; then
posix_glob=true
else
posix_glob=false
fi ;;
esac
oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS=/
$posix_glob && set -f
set fnord $dstdir
shift
$posix_glob && set +f
IFS=$oIFS
pathcomp=
prefixes=
while test $# -ne 0 ; do
pathcomp=$pathcomp$1
shift
if test ! -d "$pathcomp"; then
$mkdirprog "$pathcomp" || lasterr=$?
# mkdir can fail with a `File exist' error in case several
# install-sh are creating the directory concurrently. This
# is OK.
test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; }
for d
do
test -z "$d" && continue
prefix=$prefix$d
if test -d "$prefix"; then
prefixes=
else
if $posix_mkdir; then
(umask=$mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1
else
case $prefix in
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
*) qprefix=$prefix;;
esac
prefixes="$prefixes '$qprefix'"
fi
pathcomp=$pathcomp/
fi
prefix=$prefix/
done
if test -n "$prefixes"; then
# Don't fail if two instances are running concurrently.
(umask $mkdir_umask &&
eval "\$doit_exec \$mkdirprog $prefixes") ||
test -d "$dstdir" || exit 1
obsolete_mkdir_used=true
fi
fi
fi
if test -n "$dir_arg"; then
$doit $instcmd "$dst" \
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
else
# If we're going to rename the final executable, determine the name now.
if test -z "$transformarg"; then
dstfile=`basename "$dst"`
else
dstfile=`basename "$dst" $transformbasename \
| sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename.
test -z "$dstfile" && dstfile=`basename "$dst"`
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
trap '(exit $?); exit' 1 2 13 15
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Move or copy the file name to the temp name
$doit $instcmd "$src" "$dsttmp" &&
# Copy the file name to the temp name.
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
&& { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
# Now remove or move aside any old file at destination location. We
# try this two ways since rm can't unlink itself on some systems and
# the destination file might be busy for other reasons. In this case,
# the final cleanup might fail but the new file should still install
# successfully.
{
if test -f "$dstdir/$dstfile"; then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
# Now rename the file to the real destination.
{ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
|| {
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
(exit 1); exit
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
if test -f "$dst"; then
$doit $rmcmd -f "$dst" 2>/dev/null \
|| { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
&& { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
|| {
echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
}
else
:
@ -299,14 +491,13 @@ do
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
fi || { (exit 1); exit; }
done
# The final little trick to "correctly" pass the exit status to the exit trap.
{
(exit 0); exit
$doit $mvcmd "$dsttmp" "$dst"
}
} || exit 1
trap '' 0
fi
done
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -13,15 +13,11 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -40,24 +36,25 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -81,9 +78,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -94,10 +93,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -106,47 +105,62 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
#
#
@ -183,7 +197,6 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
@ -192,7 +205,13 @@ uninstall-info-am:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -204,15 +223,20 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@ -233,7 +257,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -258,14 +282,16 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if (etags --etags-include --version) >/dev/null 2>&1; then \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
@ -275,9 +301,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -302,22 +330,21 @@ distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -328,15 +355,19 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| mkdir "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="../$(top_distdir)" \
distdir="../$(distdir)/$$subdir" \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
am__remove_distdir=: \
am__skip_length_check=: \
distdir) \
|| exit 1; \
fi; \
@ -365,7 +396,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -390,12 +421,20 @@ info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-exec-am:
install-html: install-html-recursive
install-info: install-info-recursive
install-man:
install-pdf: install-pdf-recursive
install-ps: install-ps-recursive
installcheck-am:
maintainer-clean: maintainer-clean-recursive
@ -414,21 +453,23 @@ ps: ps-recursive
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
uninstall-info: uninstall-info-recursive
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
clean clean-generic clean-recursive ctags ctags-recursive \
distclean distclean-generic distclean-recursive distclean-tags \
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic ctags \
ctags-recursive distclean distclean-generic distclean-tags \
distdir dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am uninstall-info-am
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -16,15 +16,11 @@
#
#
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -43,15 +39,13 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -75,9 +69,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -88,10 +84,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -100,47 +96,62 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = iostream limits sstream xlocale
all: all-am
@ -174,7 +185,6 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
tags: TAGS
TAGS:
@ -183,22 +193,21 @@ CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -232,7 +241,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -257,12 +266,20 @@ info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -281,16 +298,19 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-info-am
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,16 +17,17 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// iostream
//
///
/// \file iostream
///
#ifndef G_STD_IOSTREAM
#define G_STD_IOSTREAM
// gnu's iostream does only this
/// gnu's iostream does only this
#include <iostream.h>
/// \namespace std
namespace std
{
typedef ::ios ios_base ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,13 +17,14 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// limits
//
///
/// \file limits
///
#ifndef G_STD_LIMITS_H
#define G_STD_LIMITS_H
/// \namespace std
namespace std
{
#include <limits.h>

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,11 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// sstream
//
// Forwards compatibility from ostrstream to std::ostringstream.
//
///
/// \file sstream
///
#ifndef G_STD_SSTREAM_H
#define G_STD_SSTREAM_H
@ -29,6 +27,7 @@
#include <strstream.h>
#include <string>
/// \namespace std
namespace std
{
class ostringstream : public ostrstream

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,14 +17,14 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// xlocale
//
///
/// \file xlocale
///
#ifndef G_STD_XLOCALE
#define G_STD_XLOCALE
// empty
/// empty
#endif

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -16,15 +16,11 @@
#
#
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -43,15 +39,13 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -75,9 +69,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -88,10 +84,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -100,47 +96,62 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = cstdio cstdlib cstring ctime cmath cstddef
all: all-am
@ -174,7 +185,6 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
tags: TAGS
TAGS:
@ -183,22 +193,21 @@ CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -232,7 +241,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -257,12 +266,20 @@ info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -281,16 +298,19 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-info-am
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,15 +17,16 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// cmath
//
///
/// \file cmath
///
#ifndef G_PORT_CMATH_H
#define G_PORT_CMATH_H
#include <math.h>
/// \namespace std
namespace std
{
using ::sin ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,15 +17,16 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// cstddef
//
///
/// \file cstddef
///
#ifndef G_PORT_CSTDDEF_H
#define G_PORT_CSTDDEF_H
#include <stddef.h>
/// \namespace std
namespace std
{
using ::size_t ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,15 +17,16 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// cstdio
//
///
/// \file cstdio
///
#ifndef G_PORT_CSTDIO_H
#define G_PORT_CSTDIO_H
#include <stdio.h>
/// \namespace std
namespace std
{
using ::remove ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,15 +17,16 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// cstdlib
//
///
/// \file cstdlib
///
#ifndef G_PORT_CSTDLIB_H
#define G_PORT_CSTDLIB_H
#include <stdlib.h>
/// \namespace std
namespace std
{
using ::rand ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,15 +17,16 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// cstring
//
///
/// \file cstring
///
#ifndef G_PORT_CSTRING_H
#define G_PORT_CSTRING_H
#include <string.h>
/// \namespace std
namespace std
{
using ::strlen ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,15 +17,16 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// ctime
//
///
/// \file ctime
///
#ifndef G_PORT_CTIME_H
#define G_PORT_CTIME_H
#include <time.h>
/// \namespace std
namespace std
{
using ::time_t ;

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -13,15 +13,11 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -40,15 +36,13 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -72,9 +66,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -85,10 +81,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -97,47 +93,62 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
#
#
@ -174,7 +185,6 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
tags: TAGS
TAGS:
@ -183,22 +193,21 @@ CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -232,7 +241,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -257,12 +266,20 @@ info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -281,16 +298,19 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-info-am
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
# Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

143
missing
View File

@ -1,9 +1,9 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
scriptversion=2003-09-02.23
scriptversion=2006-05-10.23
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
# Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
@ -19,8 +19,8 @@ scriptversion=2003-09-02.23
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@ -33,6 +33,8 @@ if test $# -eq 0; then
fi
run=:
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
# In the cases where this matters, `missing' is being run in the
# srcdir already.
@ -44,7 +46,7 @@ fi
msg="missing on your system"
case "$1" in
case $1 in
--run)
# Try to run requested program, and just exit if it succeeds.
run=
@ -60,11 +62,6 @@ case "$1" in
msg="probably too old"
fi
;;
esac
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case "$1" in
-h|--h|--he|--hel|--help)
echo "\
@ -82,6 +79,7 @@ Supported PROGRAM values:
aclocal touch file \`aclocal.m4'
autoconf touch file \`configure'
autoheader touch file \`config.h.in'
autom4te touch the output file, or create a stub one
automake touch all \`Makefile.in' files
bison create \`y.tab.[ch]', if possible, from existing .[ch]
flex create \`lex.yy.c', if possible, from existing .c
@ -92,10 +90,12 @@ Supported PROGRAM values:
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
Send bug reports to <bug-automake@gnu.org>."
exit $?
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
exit $?
;;
-*)
@ -104,12 +104,42 @@ Send bug reports to <bug-automake@gnu.org>."
exit 1
;;
aclocal*)
esac
# Now exit if we have it, but it failed. Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program).
case $1 in
lex|yacc)
# Not GNU programs, they don't have --version.
;;
tar)
if test -n "$run"; then
echo 1>&2 "ERROR: \`tar' requires --run"
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
exit 1
fi
;;
*)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
# Could not run --version or --help. This is probably someone
# running `$TOOL --version' or `$TOOL --help' to check whether
# $TOOL exists and not knowing $TOOL uses missing.
exit 1
fi
;;
esac
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case $1 in
aclocal*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
@ -119,11 +149,6 @@ WARNING: \`$1' is $msg. You should only need it if
;;
autoconf)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`${configure_ac}'. You might want to install the
@ -133,11 +158,6 @@ WARNING: \`$1' is $msg. You should only need it if
;;
autoheader)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acconfig.h' or \`${configure_ac}'. You might want
@ -147,7 +167,7 @@ WARNING: \`$1' is $msg. You should only need it if
test -z "$files" && files="config.h"
touch_files=
for f in $files; do
case "$f" in
case $f in
*:*) touch_files="$touch_files "`echo "$f" |
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
*) touch_files="$touch_files $f.in";;
@ -157,11 +177,6 @@ WARNING: \`$1' is $msg. You should only need it if
;;
automake*)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
@ -173,11 +188,6 @@ WARNING: \`$1' is $msg. You should only need it if
;;
autom4te)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is needed, but is $msg.
You might have modified some files without having the
@ -185,8 +195,8 @@ WARNING: \`$1' is needed, but is $msg.
You can get \`$1' as part of \`Autoconf' from any GNU
archive site."
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
if test -f "$file"; then
touch $file
else
@ -207,25 +217,25 @@ WARNING: \`$1' $msg. You should only need it if
in order for those modifications to take effect. You can get
\`Bison' from any GNU archive site."
rm -f y.tab.c y.tab.h
if [ $# -ne 1 ]; then
if test $# -ne 1; then
eval LASTARG="\${$#}"
case "$LASTARG" in
case $LASTARG in
*.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
if [ -f "$SRCFILE" ]; then
if test -f "$SRCFILE"; then
cp "$SRCFILE" y.tab.c
fi
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
if [ -f "$SRCFILE" ]; then
if test -f "$SRCFILE"; then
cp "$SRCFILE" y.tab.h
fi
;;
esac
fi
if [ ! -f y.tab.h ]; then
if test ! -f y.tab.h; then
echo >y.tab.h
fi
if [ ! -f y.tab.c ]; then
if test ! -f y.tab.c; then
echo 'main() { return 0; }' >y.tab.c
fi
;;
@ -237,39 +247,32 @@ WARNING: \`$1' is $msg. You should only need it if
in order for those modifications to take effect. You can get
\`Flex' from any GNU archive site."
rm -f lex.yy.c
if [ $# -ne 1 ]; then
if test $# -ne 1; then
eval LASTARG="\${$#}"
case "$LASTARG" in
case $LASTARG in
*.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
if [ -f "$SRCFILE" ]; then
if test -f "$SRCFILE"; then
cp "$SRCFILE" lex.yy.c
fi
;;
esac
fi
if [ ! -f lex.yy.c ]; then
if test ! -f lex.yy.c; then
echo 'main() { return 0; }' >lex.yy.c
fi
;;
help2man)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a dependency of a manual page. You may need the
\`Help2man' package in order for those modifications to take
effect. You can get \`Help2man' from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
fi
if [ -f "$file" ]; then
file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
if test -f "$file"; then
touch $file
else
test -z "$file" || exec >$file
@ -279,11 +282,6 @@ WARNING: \`$1' is $msg. You should only need it if
;;
makeinfo)
if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
# We have makeinfo, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.texi' or \`.texinfo' file, or any other file
@ -291,20 +289,29 @@ WARNING: \`$1' is $msg. You should only need it if
call might also be the consequence of using a buggy \`make' (AIX,
DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
# The file to touch is that specified with -o ...
file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
if test -z "$file"; then
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
# ... or it is the one specified with @setfilename ...
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '
/^@setfilename/{
s/.* \([^ ]*\) *$/\1/
p
q
}' $infile`
# ... or it is derived from the source name (dir/f.texi becomes f.info)
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
fi
# If the file does not exist, the user really needs makeinfo;
# let's fail without touching anything.
test -f $file || exit 1
touch $file
;;
tar)
shift
if test -n "$run"; then
echo 1>&2 "ERROR: \`tar' requires --run"
exit 1
fi
# We have already tried tar in the generic part.
# Look for gnutar/gtar before invocation to avoid ugly error
@ -317,13 +324,13 @@ WARNING: \`$1' is $msg. You should only need it if
fi
firstarg="$1"
if shift; then
case "$firstarg" in
case $firstarg in
*o*)
firstarg=`echo "$firstarg" | sed s/o//`
tar "$firstarg" "$@" && exit 0
;;
esac
case "$firstarg" in
case $firstarg in
*h*)
firstarg=`echo "$firstarg" | sed s/h//`
tar "$firstarg" "$@" && exit 0

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
@ -18,4 +18,4 @@
##
#
EXTRA_DIST = mingw.mak mingw-common.mak emailrelay.dsw
SUBDIRS = glib gnet gsmtp gpop main win32
SUBDIRS = glib gnet gsmtp gpop main win32 gui

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -13,15 +13,11 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -40,24 +36,25 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -81,9 +78,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -94,10 +93,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -106,52 +105,67 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
#
#
EXTRA_DIST = mingw.mak mingw-common.mak emailrelay.dsw
SUBDIRS = glib gnet gsmtp gpop main win32
SUBDIRS = glib gnet gsmtp gpop main win32 gui
all: all-recursive
.SUFFIXES:
@ -184,7 +198,6 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
@ -193,7 +206,13 @@ uninstall-info-am:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@set fnord $$MAKEFLAGS; amf=$$2; \
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -205,15 +224,20 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@ -234,7 +258,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -259,14 +283,16 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if (etags --etags-include --version) >/dev/null 2>&1; then \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
@ -276,9 +302,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -303,22 +331,21 @@ distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -329,15 +356,19 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
list='$(SUBDIRS)'; for subdir in $$list; do \
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| mkdir "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="../$(top_distdir)" \
distdir="../$(distdir)/$$subdir" \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
am__remove_distdir=: \
am__skip_length_check=: \
distdir) \
|| exit 1; \
fi; \
@ -366,7 +397,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -391,12 +422,20 @@ info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-exec-am:
install-html: install-html-recursive
install-info: install-info-recursive
install-man:
install-pdf: install-pdf-recursive
install-ps: install-ps-recursive
installcheck-am:
maintainer-clean: maintainer-clean-recursive
@ -415,21 +454,23 @@ ps: ps-recursive
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
uninstall-info: uninstall-info-recursive
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
clean clean-generic clean-recursive ctags ctags-recursive \
distclean distclean-generic distclean-recursive distclean-tags \
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic ctags \
ctags-recursive distclean distclean-generic distclean-tags \
distdir dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am uninstall-info-am
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -30,6 +30,21 @@ Package=<4>
###############################################################################
Project: "filter"=".\main\filter.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name common
End Project Dependency
}}}
###############################################################################
Project: "passwd"=".\main\passwd.dsp" - Package Owner=<4>
Package=<5>

View File

@ -1,5 +1,5 @@
#
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
## Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
@ -26,7 +26,6 @@ EXTRA_DIST=\
gfs_win32.cpp \
gidentity_win32.cpp \
glogoutput_win32.cpp \
gmd5_aladdin.cpp \
gprocess_win32.cpp \
gfile_win32.cpp \
gregistry_win32.cpp \

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.8.3 from Makefile.am.
# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -14,17 +14,11 @@
@SET_MAKE@
SOURCES = $(libglib_a_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@ -43,11 +37,11 @@ am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(mkdir_p)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
ARFLAGS = cru
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
libglib_a_AR = $(AR) $(ARFLAGS)
libglib_a_LIBADD =
am_libglib_a_OBJECTS = md5.$(OBJEXT) garg.$(OBJEXT) \
@ -62,28 +56,9 @@ am_libglib_a_OBJECTS = md5.$(OBJEXT) garg.$(OBJEXT) \
gprocess_unix.$(OBJEXT) groot.$(OBJEXT) gslot.$(OBJEXT) \
gstr.$(OBJEXT) gtime.$(OBJEXT) gxtext.$(OBJEXT)
libglib_a_OBJECTS = $(am_libglib_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/garg.Po ./$(DEPDIR)/garg_unix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gcleanup_unix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gdaemon_unix.Po ./$(DEPDIR)/gdate.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gdatetime.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gdatetime_unix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gdirectory.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gdirectory_unix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gexception.Po ./$(DEPDIR)/gexe.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gfile.Po ./$(DEPDIR)/gfile_unix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gfs_unix.Po ./$(DEPDIR)/ggetopt.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gidentity_unix.Po ./$(DEPDIR)/glog.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/glogoutput.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/glogoutput_unix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gmd5_native.Po ./$(DEPDIR)/gpath.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gpidfile.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gprocess_unix.Po ./$(DEPDIR)/groot.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gslot.Po ./$(DEPDIR)/gstr.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/gtime.Po ./$(DEPDIR)/gxtext.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/md5.Po
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
@ -99,8 +74,6 @@ ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@ -124,9 +97,11 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
GZIP = @GZIP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -137,10 +112,10 @@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@ -149,47 +124,62 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
POPLIB = @POPLIB@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@
e_initdir = @e_initdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
#
#
@ -202,7 +192,6 @@ EXTRA_DIST = \
gfs_win32.cpp \
gidentity_win32.cpp \
glogoutput_win32.cpp \
gmd5_aladdin.cpp \
gprocess_win32.cpp \
gfile_win32.cpp \
gregistry_win32.cpp \
@ -353,21 +342,18 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
.cpp.o:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cpp.obj:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@ -389,9 +375,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
@ -416,22 +404,21 @@ distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@ -465,7 +452,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@ -492,12 +479,20 @@ info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -517,18 +512,22 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES ctags distclean distclean-compile \
distclean-generic distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-exec install-exec-am install-info \
install-info-am install-man install-strip installcheck \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-info-am
uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -218,3 +218,4 @@ const char * G::Arg::prefix( char * argv [] ) // throw()
return p1 > p2 ? p1 : p2 ;
}
/// \file garg.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// garg.h
//
///
/// \file garg.h
///
#ifndef G_ARG_H
#define G_ARG_H
@ -29,91 +29,92 @@
#include <vector>
#include <string>
/// \namespace G
namespace G
{
class Arg ;
}
// Class: G::Arg
// Description: A class which holds a represention of the
// argc/argv command line array. Also does simple command line
// parsing, and, under Windows, command line splitting (the
// single command line string is split into an argv[] array,
// including argv[0]).
//
// See also: G::GetOpt
//
/// \class G::Arg
/// A class which holds a represention of the
/// argc/argv command line array. Also does simple command line
/// parsing, and, under Windows, command line splitting (the
/// single command line string is split into an argv[] array,
/// including argv[0]).
///
/// \see G::GetOpt
///
class G::Arg
{
public:
Arg( int argc , char *argv[] ) ;
// Constructor taking argc/argv.
///< Constructor taking argc/argv.
Arg() ;
// Default constructor for Windows.
// Initialise (once) with parse().
///< Default constructor for Windows.
///< Initialise (once) with parse().
void parse( HINSTANCE hinstance , const std::string & command_line ) ;
// Windows only.
//
// Parses the given command line, splitting
// it up into an array of tokens.
// The full exe name is automatically
// added as the first token (cf. argv[0]).
///< Windows only.
///<
///< Parses the given command line, splitting
///< it up into an array of tokens.
///< The full exe name is automatically
///< added as the first token (cf. argv[0]).
void reparse( const std::string & command_line ) ;
// Reinitialises the object with the given
// command-line. The command-line should not
// contain the program name: the v(0) value
// and prefix() are unchanged.
///< Reinitialises the object with the given
///< command-line. The command-line should not
///< contain the program name: the v(0) value
///< and prefix() are unchanged.
~Arg() ;
// Destructor.
///< Destructor.
size_t c() const ;
// Returns the number of tokens in the
// command line, including the program
// name.
///< Returns the number of tokens in the
///< command line, including the program
///< name.
std::string v( size_t i ) const ;
// Returns the i'th argument.
// Precondition: i < c()
///< Returns the i'th argument.
///< Precondition: i < c()
std::string prefix() const ;
// Returns the basename of v(0) without
// any extension.
///< Returns the basename of v(0) without
///< any extension.
static const char * prefix( char * argv[] ) ; // throw()
// An exception-free version of prefix() which can
// be used in main() outside of the outermost try
// block.
///< An exception-free version of prefix() which can
///< be used in main() outside of the outermost try
///< block.
bool contains( const std::string & sw ,
size_t sw_args = 0U , bool case_sensitive = true ) const ;
// Returns true if the command line
// contains the given switch with enough
// command line arguments left to satisfy
// the given number of switch arguments.
///< Returns true if the command line
///< contains the given switch with enough
///< command line arguments left to satisfy
///< the given number of switch arguments.
size_t index( const std::string & sw , size_t sw_args = 0U ) const ;
// Returns the index of the given switch.
// Returns zero if not present.
///< Returns the index of the given switch.
///< Returns zero if not present.
void remove( const std::string & sw , size_t sw_args = 0U ) ;
// Removes the given switch and its
// arguments.
//
// Precondition: contains()
///< Removes the given switch and its
///< arguments.
///<
///< Precondition: contains()
void removeAt( size_t sw_index , size_t sw_args = 0U ) ;
// Removes the given argument and the
// following 'sw_args' ones.
///< Removes the given argument and the
///< following 'sw_args' ones.
Arg & operator=( const Arg & ) ;
// Assignment operator.
///< Assignment operator.
Arg( const Arg & ) ;
// Copy constructor.
///< Copy constructor.
private:
static std::string moduleName( HINSTANCE h ) ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -30,3 +30,4 @@ std::string G::Arg::moduleName( HINSTANCE )
return std::string() ;
}
/// \file garg_unix.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -35,3 +35,4 @@ std::string G::Arg::moduleName( HINSTANCE hinstance )
return std::string(buffer) ;
}
/// \file garg_win32.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gassert.h
//
///
/// \file gassert.h
///
#ifndef G_ASSERT_H
#define G_ASSERT_H

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gcleanup.h
//
///
/// \file gcleanup.h
///
#ifndef G_CLEANUP_H
#define G_CLEANUP_H
@ -28,30 +28,31 @@
#include "gpath.h"
#include "gexception.h"
/// \namespace G
namespace G
{
class Cleanup ;
}
// Class: G::Cleanup
// Description: An interface for registering cleanup functions
// which are called when the process terminates abnormally.
//
/// \class G::Cleanup
/// An interface for registering cleanup functions
/// which are called when the process terminates abnormally.
///
class G::Cleanup
{
public:
G_EXCEPTION( Error , "cleanup error" ) ;
static void init() ;
// An optional early-initialisation function.
// May be called more than once.
///< An optional early-initialisation function.
///< May be called more than once.
static void add( void (*fn)(const char*) , const char * arg ) ;
// Adds the given handler to the list which
// are to be called when the process
// terminates abnormally. The handler
// function must be fully reentrant.
// The 'arg' pointer is kept.
///< Adds the given handler to the list which
///< are to be called when the process
///< terminates abnormally. The handler
///< function must be fully reentrant.
///< The 'arg' pointer is kept.
private:
Cleanup() ; // not implemeneted

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -39,9 +39,9 @@ namespace G
class CleanupImp ;
}
// Class: G::CleanupImp
// Description: A private implementation class used by G::Cleanup.
//
/// \class G::CleanupImp
/// A private implementation class used by G::Cleanup.
///
class G::CleanupImp
{
public:
@ -58,7 +58,8 @@ private:
private:
typedef Cleanup::Error Error ;
struct Link // A private linked-list structure used by G::CleanupImp.
/// A private linked-list structure used by G::CleanupImp.
struct Link
{
void (*fn)(const char*) ;
const char * arg ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -34,3 +34,4 @@ void G::Cleanup::add( void (*)(const char*) , const char * )
// not implemented
}
/// \file gcleanup_win32.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,26 +17,28 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gconvert.h
//
///
/// \file gconvert.h
///
#ifndef G_CONVERT_H
#define G_CONVERT_H
#include "gdef.h"
#include "gexception.h"
#include <sstream>
/// \namespace G
namespace G
{
G_EXCEPTION( ConvertOverflow , "arithmetic overflow" ) ;
// Template function: G::Convert
// Description: Does arithmetic conversions with
// overflow checking.
// See also: boost::numeric_cast<>()
//
/// Template function: G::Convert
/// Does arithmetic conversions with
/// overflow checking.
/// \see boost::numeric_cast<>()
///
template <class Tout, class Tin>
inline
Tout Convert( const Tin & in )
@ -44,7 +46,11 @@ Tout Convert( const Tin & in )
Tout out = in ;
Tin copy = out ;
if( in != copy )
throw ConvertOverflow( std::ostringstream() << in ) ;
{
std::ostringstream ss ;
ss << in ;
throw ConvertOverflow( ss.str() ) ;
}
return out ;
}

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gdaemon.h
//
///
/// \file gdaemon.h
///
#ifndef G_DAEMON_H
#define G_DAEMON_H
@ -31,42 +31,43 @@
#include <sys/types.h>
#include <string>
/// \namespace G
namespace G
{
class Daemon ;
}
// Class: G::Daemon
// Description: A class for deamonising the calling process.
// Deamonisation includes fork()ing, detaching from the
// controlling terminal, setting the process umask, etc.
// The windows implementation does nothing.
// See also: G::Process
//
/// \class G::Daemon
/// A class for deamonising the calling process.
/// Deamonisation includes fork()ing, detaching from the
/// controlling terminal, setting the process umask, etc.
/// The windows implementation does nothing.
/// \see G::Process
///
class G::Daemon
{
public:
G_EXCEPTION( CannotFork , "cannot fork" ) ;
static void detach() ;
// Detaches from the parent environment.
// This typically involves fork()ing,
// _exit()ing the parent, and calling
// setsid() in the child.
///< Detaches from the parent environment.
///< This typically involves fork()ing,
///< _exit()ing the parent, and calling
///< setsid() in the child.
static void detach( PidFile & pid_file ) ;
// An overload which allows for a delayed write
// of the new process-id to a file.
//
// A delayed write is useful for network daemons
// which open a listening port. A second instance
// of the process will fail on startup, and should
// not overwrite the pid file of the running
// server. In this situation PidFile::commit()
// should be called just before entering the event
// loop.
//
// Throws PidFile::Error on error.
///< An overload which allows for a delayed write
///< of the new process-id to a file.
///<
///< A delayed write is useful for network daemons
///< which open a listening port. A second instance
///< of the process will fail on startup, and should
///< not overwrite the pid file of the running
///< server. In this situation PidFile::commit()
///< should be called just before entering the event
///< loop.
///<
///< Throws PidFile::Error on error.
private:
Daemon() ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -54,3 +54,4 @@ void G::Daemon::setsid()
; // no-op
}
/// \file gdaemon_unix.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -37,3 +37,4 @@ void G::Daemon::detach()
// no-op
}
/// \file gdaemon_win32.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -292,3 +292,4 @@ bool G::Date::operator!=( const Date &other ) const
return !( other == *this ) ;
}
/// \file gdate.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gdate.h
//
///
/// \file gdate.h
///
#ifndef G_DATE_H
#define G_DATE_H
@ -30,19 +30,21 @@
#include <ctime>
#include <string>
/// \namespace G
namespace G
{
class Date ;
}
// Class: G::Date
// Description: A date (dd/mm/yyyy) class.
// See also: G::Time, G::DateTime
//
/// \class G::Date
/// A date (dd/mm/yyyy) class.
/// \see G::Time, G::DateTime
///
class G::Date
{
public:
class LocalTime // An overload discriminator class for Date constructors.
/// An overload discriminator class for Date constructors.
class LocalTime
{} ;
enum Weekday
@ -56,79 +58,79 @@ public:
{ yyyy_mm_dd_slash , yyyy_mm_dd , mm_dd } ;
static int yearUpperLimit() ;
// Returns the smallest supported year value.
///< Returns the smallest supported year value.
static int yearLowerLimit() ;
// Returns the largest supported year value.
///< Returns the largest supported year value.
Date() ;
// Default constructor the current date
// in the UTC timezone.
///< Default constructor the current date
///< in the UTC timezone.
explicit Date( const LocalTime & ) ;
// Constructor for the current date
// in the local timezone.
///< Constructor for the current date
///< in the local timezone.
Date( const G::DateTime::BrokenDownTime & tm ) ;
// Constructor for the specified date.
///< Constructor for the specified date.
explicit Date( G::DateTime::EpochTime t ) ;
// Constructor for the date in the UTC
// timezone as at the given epoch time.
///< Constructor for the date in the UTC
///< timezone as at the given epoch time.
Date( G::DateTime::EpochTime t , const LocalTime & ) ;
// Constructor for the date in the local
// timezone as at the given epoch time.
///< Constructor for the date in the local
///< timezone as at the given epoch time.
Date( int year , Month month , int day_of_month ) ;
// Constructor for the specified date.
///< Constructor for the specified date.
std::string string( Format format = yyyy_mm_dd_slash ) const ;
// Returns a string representation of the date.
///< Returns a string representation of the date.
Weekday weekday() const ;
// Returns the day of the week.
///< Returns the day of the week.
std::string weekdayName( bool brief = false ) const ;
// Returns an english string representation of
// the day of the week.
// (Was weekdayString().)
///< Returns an english string representation of
///< the day of the week.
///< (Was weekdayString().)
int monthday() const ;
// Returns the day of the month.
///< Returns the day of the month.
std::string dd() const ;
// Returns the day of the month as a two-digit decimal string.
// (Was monthdayString().)
///< Returns the day of the month as a two-digit decimal string.
///< (Was monthdayString().)
Month month() const ;
// Returns the month.
///< Returns the month.
std::string monthName( bool brief = false ) const ;
// Returns the month as a string (in english).
// (Was monthString().)
///< Returns the month as a string (in english).
///< (Was monthString().)
std::string mm() const ;
// Returns the month as a two-digit decimal string.
///< Returns the month as a two-digit decimal string.
int year() const ;
// Returns the year.
///< Returns the year.
std::string yyyy() const ;
// Returns the year as a four-digit decimal string.
// (Was yearString().)
///< Returns the year as a four-digit decimal string.
///< (Was yearString().)
Date & operator++() ;
// Increments the date by one day.
///< Increments the date by one day.
Date & operator--() ;
// Decrements the date by one day.
///< Decrements the date by one day.
bool operator==( const Date & rhs ) const ;
// Comparison operator.
///< Comparison operator.
bool operator!=( const Date & rhs ) const ;
// Comparison operator.
///< Comparison operator.
private:
void init( const G::DateTime::BrokenDownTime & ) ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -104,3 +104,4 @@ bool G::DateTime::same( const BrokenDownTime & bdt1 , const BrokenDownTime & bdt
bdt1.tm_min == bdt2.tm_min ;
}
/// \file gdatetime.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gdatetime.h
//
///
/// \file gdatetime.h
///
#ifndef G_DATE_TIME_H
#define G_DATE_TIME_H
@ -29,14 +29,15 @@
#include <ctime>
#include <string>
/// \namespace G
namespace G
{
class DateTime ;
}
// Class: G::DateTime
// Description: A low-level static class used by Date and Time.
//
/// \class G::DateTime
/// A low-level static class used by Date and Time.
///
class G::DateTime
{
public:
@ -46,30 +47,30 @@ public:
typedef std::pair<bool,unsigned int> Offset ;
static EpochTime now() ;
// Returns the current epoch time.
///< Returns the current epoch time.
static EpochTime epochTime( const BrokenDownTime & broken_down_time ) ;
// Converts from UTC broken-down-time to epoch time.
///< Converts from UTC broken-down-time to epoch time.
static BrokenDownTime utc( EpochTime epoch_time ) ;
// Converts from epoch time to UTC broken-down-time.
///< Converts from epoch time to UTC broken-down-time.
static BrokenDownTime local( EpochTime epoch_time ) ;
// Converts from epoch time to local broken-down-time.
///< Converts from epoch time to local broken-down-time.
static Offset offset( EpochTime epoch_time ) ;
// Returns the offset between UTC and localtime
// as at 'epoch_time'. The returned pair has
// 'first' set to true if localtime is
// ahead of (ie. east of) UTC.
//
// (Note that this may be a relatively expensive
// operation.)
///< Returns the offset between UTC and localtime
///< as at 'epoch_time'. The returned pair has
///< 'first' set to true if localtime is
///< ahead of (ie. east of) UTC.
///<
///< (Note that this may be a relatively expensive
///< operation.)
static std::string offsetString( Offset offset ) ;
// Converts the given utc/localtime offset into a five-character
// "+/-hhmm" string.
// See also RFC2822.
///< Converts the given utc/localtime offset into a five-character
///< "+/-hhmm" string.
///< See also RFC2822.
private:
static bool equivalent( EpochTime , const BrokenDownTime & ) ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -34,3 +34,4 @@ std::tm * G::DateTime::localtime_r( const std::time_t * t , std::tm * p )
return ::localtime_r(t,p) ;
}
/// \file gdatetime_unix.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -36,3 +36,4 @@ struct std::tm * G::DateTime::localtime_r( const time_t * t , struct std::tm * p
return p ;
}
/// \file gdatetime_win32.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gdebug.h
//
///
/// \file gdebug.h
///
#ifndef G_DEBUG_H
#define G_DEBUG_H

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,23 +17,26 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gdef.h
//
///
/// \file gdef.h
///
/*
* gdef.h
*/
// This header is always the first header included in source
// files. It takes care of some portability issues, and
// is a good candidate for precompilation. It requires
// either G_UNIX or G_WIN32 to be defined on the compiler
// command line, although G_UNIX may also be inferred from
// autoconf's HAVE_CONFIG_H.
//
/* This header is always the first header included in source
* files. It takes care of some portability issues, and
* is a good candidate for precompilation. It requires
* either G_UNIX or G_WIN32 to be defined on the compiler
* command line, although G_UNIX may also be inferred from
* autoconf's HAVE_CONFIG_H.
*/
#ifndef G_DEF_H
#define G_DEF_H
// Autoconf, part 1
//
/* Autoconf, part 1
*/
#if defined( HAVE_CONFIG_H )
#if ! defined( G_UNIX )
@ -48,17 +51,20 @@
#endif
#if ! HAVE_GMTIME_R || ! HAVE_LOCALTIME_R
#ifdef __cplusplus
#include <ctime>
#endif
#endif
#if ! HAVE_SOCKLEN_T
typedef int socklen_t ;
#endif
#else
#define HAVE_ZLIB_H 1
#endif
// Check operating-system switches
//
/* Check operating-system switches
*/
#if !defined( G_WIN32 ) && !defined( G_UNIX )
#error invalid compilation switches
#endif
@ -66,14 +72,14 @@
#error invalid compilation switches
#endif
// Define supplementary o/s compilation switches
//
/* Define supplementary o/s compilation switches
*/
#if defined( G_WIN32 ) && ! defined( G_WINDOWS )
#define G_WINDOWS
#endif
// Define the compiler
//
/* Define the compiler
*/
#if defined( _MSC_VER )
#define G_COMPILER_IS_MICROSOFT 1
#endif
@ -81,8 +87,8 @@
#define G_COMPILER_IS_GNU 1
#endif
// Include main o/s headers
//
/* Include main o/s headers
*/
#if defined( G_WINDOWS ) && defined( G_MINGW )
#define __USE_W32_SOCKETS
#include <windows.h>
@ -101,9 +107,9 @@
#endif
#endif
// Define Windows-style types (only used for
// unimplemented declarations under unix)
//
/* Define Windows-style types (only used for
* unimplemented declarations under unix)
*/
#if ! defined( G_WINDOWS )
typedef unsigned char BOOL ;
typedef unsigned int HWND ;
@ -111,9 +117,10 @@
typedef unsigned int HANDLE ;
#endif
// Include commonly-used system headers (good for
// pre-compilation)
//
/* Include commonly-used system headers (good for
* pre-compilation)
*/
#ifdef __cplusplus
#include <cstddef>
#include <exception>
#include <fstream>
@ -122,80 +129,89 @@
#include <memory>
#include <sstream>
#include <string>
#endif
// Define fixed-size types
//
/* Define fixed-size types
*/
typedef unsigned long g_uint32_t ;
typedef unsigned short g_uint16_t ;
typedef long g_int32_t ;
typedef short g_int16_t ;
// Define short-name types
//
/* Define short-name types
*/
typedef unsigned char uchar_t ;
// Define missing standard types
//
/* Define missing standard types
*/
#if defined( G_WINDOWS )
typedef int ssize_t ;
typedef int uid_t ;
typedef int gid_t ;
#if ! defined( G_MINGW )
typedef int ssize_t ;
typedef unsigned int pid_t ;
#endif
#endif
// Pull some std types into the global namespace
//
/* Pull some std types into the global namespace
*/
#ifdef __cplusplus
using std::size_t ;
// Modify compiler error handling
//
#if defined(G_COMPILER_IS_MICROSOFT)
#pragma warning( disable : 4100 ) // unused formal parameter
#pragma warning( disable : 4355 ) // 'this' in initialiser list
#pragma warning( disable : 4511 ) // cannot create default copy ctor
#pragma warning( disable : 4512 ) // cannot create default op=()
#pragma warning( disable : 4786 ) // truncation in debug info
#pragma warning( disable : 4275 ) // dll-interface stuff in <complex>
#endif
// A macro to explicitly ignore a function's return value.
// Some compilers complain when return values are ignored, and
// others complain when using a c-style cast...
//
/* Modify compiler error handling
*/
#if defined(G_COMPILER_IS_MICROSOFT)
#pragma warning( disable : 4100 ) /* unused formal parameter */
#pragma warning( disable : 4355 ) /* 'this' in initialiser list */
#pragma warning( disable : 4511 ) /* cannot create default copy ctor */
#pragma warning( disable : 4512 ) /* cannot create default op=() */
#pragma warning( disable : 4786 ) /* truncation in debug info */
#pragma warning( disable : 4275 ) /* dll-interface stuff in <complex> */
#endif
/* A macro to explicitly ignore a function's return value.
* Some compilers complain when return values are ignored, and
* others complain when using a c-style cast...
*/
#if 1
#define G_IGNORE
#else
#define G_IGNORE (void)
#endif
// Autoconf, part 2
//
/* Autoconf, part 2
*/
#if defined( HAVE_CONFIG_H )
#if ! HAVE_GMTIME_R
#ifdef __cplusplus
inline std::tm * gmtime_r( const std::time_t * tp , std::tm * tm_p )
{
* tm_p = * std::gmtime( tp ) ;
return tm_p ;
}
#endif
#endif
#if ! HAVE_LOCALTIME_R
#ifdef __cplusplus
inline std::tm * localtime_r( const std::time_t * tp , std::tm * tm_p )
{
* tm_p = * std::localtime( tp ) ;
return tm_p ;
}
#endif
#endif
#if HAVE_SETGROUPS
#include <grp.h>
#else
#ifdef __cplusplus
inline int setgroups( size_t , const gid_t * )
{
return 0 ;
}
#endif
#endif
#endif
#endif

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -73,3 +73,4 @@ G::Path G::Directory::path() const
return m_path ;
}
/// \file gdirectory.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gdirectory.h
//
///
/// \file gdirectory.h
///
#ifndef G_DIRECTORY_H
#define G_DIRECTORY_H
@ -30,6 +30,7 @@
#include <string>
#include <sys/types.h>
/// \namespace G
namespace G
{
class DirectoryIteratorImp ;
@ -37,105 +38,107 @@ namespace G
class DirectoryIterator ;
}
// Class: G::Directory
// Description: An encapsulation of a file system directory
// which allows for iterating through the set of contained
// files.
// See also: G::Path, G::FileSystem, G::File
//
/// \class G::Directory
/// An encapsulation of a file system directory
/// which allows for iterating through the set of contained
/// files.
/// \see G::Path, G::FileSystem, G::File
///
class G::Directory
{
public:
Directory() ;
// Default constructor for the current directory.
///< Default constructor for the current directory.
explicit Directory( const char * path ) ;
// Constructor.
///< Constructor.
explicit Directory( const Path & path ) ;
// Constructor.
///< Constructor.
explicit Directory( const std::string & path ) ;
// Constructor.
///< Constructor.
virtual ~Directory() ;
// Virtual destructor.
///< Virtual destructor.
bool valid( bool for_creating_files = false ) const ;
// Returns true if the object represents a valid
// directory.
//
// Does additional checks if the 'for-creating-files'
// parameter is true. But note that the answer is not
// definitive -- file creation may fail, even if
// valid() returns true. For a more accurate test
// use writeable().
///< Returns true if the object represents a valid
///< directory.
///<
///< Does additional checks if the 'for-creating-files'
///< parameter is true. But note that the answer is not
///< definitive -- file creation may fail, even if
///< valid() returns true. For a more accurate test
///< use writeable().
bool writeable( std::string probe_filename = tmp() ) const ;
// Tries to create and then delete an empty test file
// in the directory. Returns true on success.
// Precondition: valid()
///< Tries to create and then delete an empty test file
///< in the directory. Returns true on success.
///< Precondition: valid()
Path path() const ;
// Returns the directory's path.
///< Returns the directory's path.
Directory( const Directory & other ) ;
// Copy constructor.
///< Copy constructor.
Directory &operator=( const Directory & ) ;
// Assignment operator.
///< Assignment operator.
static Directory root() ;
// Returns a root directory object. For DOSy file
// systems this will not contain a drive part.
///< Returns a root directory object. For DOSy file
///< systems this will not contain a drive part.
static std::string tmp() ;
// A convenience function for constructing a
// filename for writeable(). This is factored out
// so that client code can minimise the time spent
// with a privileged effective userid.
///< A convenience function for constructing a
///< filename for writeable(). This is factored out
///< so that client code can minimise the time spent
///< with a privileged effective userid.
private:
Path m_path ;
} ;
// Class: G::DirectoryIterator
// Description: An iterator for Directory.
// The iteration model is
/// \class G::DirectoryIterator
/// An iterator for Directory.
/// The iteration model is
/// \code
/// while(iter.more()) { (void)iter.filePath() ; }
//
/// \endcode
///
class G::DirectoryIterator
{
public:
explicit DirectoryIterator( const Directory & dir , const std::string & wc = std::string() ) ;
// Constructor taking a directory reference
// and an optional wildcard specification.
///< Constructor taking a directory reference
///< and an optional wildcard specification.
~DirectoryIterator() ;
// Destructor.
///< Destructor.
bool error() const ;
// Returns true on error. The caller should stop the iteration.
///< Returns true on error. The caller should stop the iteration.
bool more() ;
// Returns true if more.
///< Returns true if more.
bool isDir() const ;
// Returns true if the current item is a directory.
///< Returns true if the current item is a directory.
std::string modificationTimeString() const ;
// Returns the last-modified time for the file in an undefined
// format -- used for comparison.
///< Returns the last-modified time for the file in an undefined
///< format -- used for comparison.
std::string sizeString() const ;
// Returns the file size as a decimal string. The value
// may be more than 32 bits. See also class G::Number.
///< Returns the file size as a decimal string. The value
///< may be more than 32 bits. See also class G::Number.
Path filePath() const ;
// Returns the path of the current item.
///< Returns the path of the current item.
Path fileName() const ;
// Returns the name of the current item.
///< Returns the name of the current item.
private:
DirectoryIterator( const DirectoryIterator & ) ;

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -96,9 +96,9 @@ bool G::Directory::writeable( std::string tmp_filename ) const
// ===
// Class: G::DirectoryIteratorImp
// Description: A pimple-pattern implementation class for DirectoryIterator.
//
/// \class G::DirectoryIteratorImp
/// A pimple-pattern implementation class for DirectoryIterator.
///
class G::DirectoryIteratorImp
{
private:

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -57,9 +57,9 @@ bool G::Directory::writeable( std::string ) const
// ===
// Class: G::DirectoryIteratorImp
// Description: A pimple-pattern implementation class for DirectoryIterator.
//
/// \class G::DirectoryIteratorImp
/// A pimple-pattern implementation class for DirectoryIterator.
///
class G::DirectoryIteratorImp
{
private:

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -51,15 +51,15 @@ void G::Exception::append( const char * more )
{
if( more != NULL && *more != '\0' )
{
m_what += ": " ;
m_what += more ;
m_what += std::string(": ") ;
m_what += std::string(more) ;
}
}
void G::Exception::append( const std::string & more )
{
m_what += ": " ;
m_what += more ;
m_what += std::string(": ") ;
m_what += std::string(more) ;
}
@ -80,3 +80,4 @@ void G::Exception::prepend( const char * context )
}
}
/// \file gexception.cpp

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -17,9 +17,9 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// ===
//
// gexception.h
//
///
/// \file gexception.h
///
#ifndef G_EXCEPTION_H
#define G_EXCEPTION_H
@ -28,15 +28,16 @@
#include <string>
#include <iostream>
/// \namespace G
namespace G
{
class Exception ;
}
// Class: G::Exception
// Description: A general-purpose exception class derived from std::exception
// and containing a std::string.
//
/// \class G::Exception
/// A general-purpose exception class derived from std::exception
/// and containing a std::string.
///
class G::Exception : public std::exception
{
protected:
@ -44,45 +45,45 @@ protected:
public:
Exception() ;
// Default constructor.
///< Default constructor.
explicit Exception( const char * what ) ;
// Constructor.
///< Constructor.
explicit Exception( const std::string & what ) ;
// Constructor.
///< Constructor.
virtual ~Exception() throw() ;
// Destructor.
///< Destructor.
virtual const char * what() const throw() ;
// Override from std::exception.
///< Override from std::exception.
void prepend( const char * context ) ;
// Prepends context to the what string.
// Inserts a separator as needed.
///< Prepends context to the what string.
///< Inserts a separator as needed.
void append( const char * more ) ;
// Appends 'more' to the what string.
// Inserts a separator as needed.
///< Appends 'more' to the what string.
///< Inserts a separator as needed.
void append( const std::string & more ) ;
// Appends 'more' to the what string.
// Inserts a separator as needed.
///< Appends 'more' to the what string.
///< Inserts a separator as needed.
void append( std::ostream & s ) ;
// Appends the contents of the given std::ostringstream
// (sic) to the what string. Does nothing if the
// dynamic type of 's' is not a std::ostringstream.
// Inserts a separator as needed.
//
// This method allows a derived-class exception
// to be constructed and thrown on one line using
// iostream formatting.
// Eg. throw Error( std::ostringstream() << a << b ) ;
///< Appends the contents of the given std::ostringstream
///< (sic) to the what string. Does nothing if the
///< dynamic type of 's' is not a std::ostringstream.
///< Inserts a separator as needed.
///<
///< This method allows a derived-class exception
///< to be constructed and thrown on one line using
///< iostream formatting.
///< Eg. throw Error( std::ostringstream() << a << b ) ;
} ;
#define G_EXCEPTION( class_name , description ) class class_name : public G::Exception { public: class_name() { m_what = description ; } public: explicit class_name ( std::ostream & stream ) { m_what = description ; append(stream) ; } public: explicit class_name( const char * more ) { m_what = description ; append(more) ; } public: explicit class_name( const std::string & more ) { m_what = description ; append(more) ; } }
#define G_EXCEPTION( class_name , description ) class class_name : public G::Exception { public: class_name() { m_what = description ; } public: explicit class_name( const char * more ) { m_what = description ; append(more) ; } public: explicit class_name( const std::string & more ) { m_what = description ; append(more) ; } }
#endif

View File

@ -1,5 +1,5 @@
//
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
// Copyright (C) 2001-2007 Graeme Walker <graeme_walker@users.sourceforge.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@ -64,3 +64,4 @@ G::Strings G::Executable::args() const
return m_args ;
}
/// \file gexe.cpp

Some files were not shown because too many files have changed in this diff Show More