This commit is contained in:
Graeme Walker 2013-12-08 12:00:00 +00:00
parent 4b70b53758
commit 6d9b04341c
573 changed files with 24041 additions and 17214 deletions

View File

@ -13,4 +13,4 @@ These are distributed under licenses compatible with the GPLv3. Please
refer to their websites for further details. refer to their websites for further details.
This product includes software developed by the OpenSSL Project This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/) for use in the OpenSSL Toolkit (http://www.openssl.org/).

View File

@ -1,6 +1,31 @@
E-MailRelay Change Log E-MailRelay Change Log
====================== ======================
1.8.2 -> 1.9
------------
* Added negotiated TLS/SSL for POP (ie. "STLS").
* The first two fields in the secrets files are reordered (with backwards compatibility).
* Added Linux-PAM authentication ("configure --with-pam" and then "--server-auth=/pam").
* Optional protocol-specific "--interface" qualifiers, eg. "--interface smtp=127.0.0.1,pop=192.168.1.1".
* Outgoing client connection bound with the first "--interface" or "--interface client=..." address.
* Support for SMTP-over-TLS on outgoing client connection ("--client-tls-connection") (cf. "STARTTLS")
* Support for SOCKS 4a on outgoing client connection, eg. "--forward-to example.com:25@127.0.0.1:9050".
* TLS configuration options ("--tls-config=...") for SSLv2/3 fallback etc.
* No "Received" line added if "--anonymous" and an empty "--domain" name.
* Error text for "all recipients rejected" is now more accurately "one or more recipients rejected".
* New behaviour for "--client-filter" exit values of 100 and over.
* New commands on the admin interface, "failures" and "unfail-all".
* Shorter descriptions in the usage help unless "--verbose".
* New default spool directory location on windows, now under "system32".
* Windows project files for MSVC 2012 included.
* Removed support for Windows NT and Windows 9x.
* Better support for Windows Vista and Windows 7.
* Removed Windows "--icon" option.
* Removed "--enable-fhs" option for "configure" (see INSTALL document for equivalent usage).
* Added "--log-file" option to redirect stderr.
* Added Windows "--peer-lookup" option.
* Fix for MD5 code in 64-bit builds.
1.8.1 -> 1.8.2 1.8.1 -> 1.8.2
-------------- --------------
* Fix namespaces for gcc 3.4. * Fix namespaces for gcc 3.4.

49
INSTALL
View File

@ -1,34 +1,39 @@
Introduction Introduction
============ ============
With the exception of this introduction section this document contains generic This document is the standard one for doing a GNU-style build and
installation instructions for doing a GNU-style install, except for this introduction, which is specific to E-MailRelay.
"./configure; make; sudo make install" installation from source under Linux,
FreeBSD etc. Windows specific installation instructions are in a separate
document, "doc/windows.txt".
The E-MailRelay "configure" script provides a few extra confiruation switches, As usual, you should use "./configure; make; sudo make install" to
which are shown in the output of "./configure --help". One of these is install from source under most operating systems (as described below),
"--enable-fhs", which sets the default directories to comply with the File but for Windows you should refer to a separate document,
Hierarchy Standard. "doc/windows.txt".
There are also a set of variables which can be defined on the "configure" The E-MailRelay "configure" script provides some extra configuration
command line for controlling all the installation directories in more detail, options, as shown in the output of "./configure --help". Some of these
augmenting the standard command-line switches like "--sbindir" and are used to control all the installation directories in addition to
"--libexecdir". For more information refer to the E-MailRelay reference document the more standard ones like "--sbindir" and "--libexecdir".
under "Files and directories".
If compiling with something other than "gcc" then check for any For example, this configure command will result in installation
directories that are close to the Linux File Hieriarchy Standard (FHS):
./configure --prefix=/usr --localstatedir=/var --libexecdir=/usr/lib --sysconfdir=/etc e_initdir=/etc/init.d
For more information refer to the E-MailRelay reference document under
the "Files and directories" heading.
If compiling with something other than "gcc" then check for any
compiler-specific help in the relevant "lib/<compiler>" directory. compiler-specific help in the relevant "lib/<compiler>" directory.
If you want to install a package rather than running "make install" you could If you want to install via a package rather than installing with
try building an RPM pacakge with "rpmbuild" using the RPM spec file provided in "make install" you could try building an RPM pacakge with "make rpm"
the distribution, and if necessary then making a ".deb" package from that using or a Debian package with "make deb", although there are lots of moving
"alien". parts here, so it may not be easy to get working.
You may also find the E-MailRelay configuration GUI program
"emailrelay-gui" useful to help with with the initial configuration,
if it is available.
Finally, you could try running the configuration GUI program "emailrelay-gui"
(if available) after doing the installation to help with the initial
configuration.
Basic Installation Basic Installation
================== ==================

View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,
@ -14,14 +14,26 @@
## You should have received a copy of the GNU General Public License ## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>. ## along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
#
# Top-level makefile
#
# Additional pseudo-targets for packaging:
# * rpm - builds an rpm package using rpmbuild
# * deb - converts the rpm to a deb package using alien.
#
# When running "make distcheck" consider doing this to avoid
# a lengthy testing stage:
# $ make distcheck DISTCHECK_CONFIGURE_FLAGS=--disable-testing
#
EXTRA_DIST = \ EXTRA_DIST = \
emailrelay.spec \ emailrelay.spec \
ChangeLog \ ChangeLog \
README.windows \ README.windows \
README.mips \ README.embedded \
README.mac \ README.mac \
LICENSE \ LICENSE \
VERSION \
bootstrap \ bootstrap \
autogen.sh \ autogen.sh \
emailrelay-gui.xcodeproj/project.pbxproj \ emailrelay-gui.xcodeproj/project.pbxproj \
@ -29,15 +41,16 @@ EXTRA_DIST = \
SUBDIRS = bin src lib etc doc debian test extra SUBDIRS = bin src lib etc doc debian test extra
e_doc_DATA = NEWS README ChangeLog e_doc_DATA = COPYING AUTHORS INSTALL NEWS README README.windows README.mac README.embedded ChangeLog
uninstall-local: uninstall-local:
-rmdir $(DESTDIR)$(e_docdir) 2>/dev/null -for try in 1 2 3 4 ; do echo "$(DESTDIR)$(e_pamdir)" "$(DESTDIR)$(e_initdir)" "$(DESTDIR)$(e_sysconfdir)" "$(DESTDIR)$(e_examplesdir)" "$(DESTDIR)$(e_libexecdir)" "$(DESTDIR)$(e_spooldir)" "$(DESTDIR)$(e_docdir)" "$(DESTDIR)$(pkgdatadir)" | tr ' ' '\n' | grep -i "mailrelay" | while read d ; do rmdir "$$d" 2>/dev/null ; done ; done
-for d in "$(DESTDIR)$(e_sysconfdir)" "$(DESTDIR)$(e_libexecdir)" "$(DESTDIR)$(e_examplesdir)" "$(DESTDIR)$(e_spooldir)" "$(DESTDIR)$(e_initdir)" "$(DESTDIR)$(e_docdir)/man/man1" "$(DESTDIR)$(e_docdir)/man" "$(DESTDIR)$(e_docdir)" ; do rmdir "$$d" 2>/dev/null ; done
RPM_ROOT=/usr/src/rpm RPM_ROOT ?= ${HOME}/rpmbuild
RPM=$(RPM_ROOT)/RPMS/i386/emailrelay-$(VERSION)-1.i386.rpm #RPM_ARCH ?= $(shell arch)
DEB=emailrelay_$(VERSION)-1_i386.deb RPM_ARCH ?= x86_64
RPM=$(RPM_ROOT)/RPMS/$(RPM_ARCH)/emailrelay-$(VERSION)-1.$(RPM_ARCH).rpm
DEB=emailrelay_$(VERSION)-1_$(RPM_ARCH).deb
TAR=emailrelay-$(VERSION).tar.gz TAR=emailrelay-$(VERSION).tar.gz
.PHONY: rpm .PHONY: rpm
@ -45,8 +58,9 @@ rpm: $(RPM)
$(RPM): dist $(RPM): dist
-rm -rf $(RPM_ROOT)/BUILD/emailrelay-$(VERSION) -rm -rf $(RPM_ROOT)/BUILD/emailrelay-$(VERSION)
-mkdir -p $(RPM_ROOT)/BUILD $(RPM_ROOT)/SOURCES $(RPM_ROOT)/SPECS 2>/dev/null
cp $(TAR) $(RPM_ROOT)/SOURCES/emailrelay-$(VERSION)-src.tar.gz cp $(TAR) $(RPM_ROOT)/SOURCES/emailrelay-$(VERSION)-src.tar.gz
cp emailrelay.spec $(RPM_ROOT)/SPECS cp $(top_srcdir)/emailrelay.spec $(RPM_ROOT)/SPECS/
chown root:root $(RPM_ROOT)/SPECS/emailrelay.spec chown root:root $(RPM_ROOT)/SPECS/emailrelay.spec
rpmbuild -ba $(RPM_ROOT)/SPECS/emailrelay.spec rpmbuild -ba $(RPM_ROOT)/SPECS/emailrelay.spec
@ -54,12 +68,12 @@ $(RPM): dist
deb: $(DEB) deb: $(DEB)
$(DEB): $(RPM) $(DEB): $(RPM)
-mv emailrelay-$(VERSION) emailrelay-$(VERSION).old.$$ -mv emailrelay-$(VERSION) emailrelay-$(VERSION).old.$$$$
alien --to-deb --generate --single --keep-version $(RPM) alien --to-deb --generate --single --keep-version $(RPM)
sed -i 's/^Section:.*/Section: mail/' emailrelay-$(VERSION)/debian/control sed -i 's/^Section:.*/Section: mail/' emailrelay-$(VERSION)/debian/control
sed -i 's/^Maintainer:.*/Maintainer: Graeme Walker <graeme_walker@users.sourceforge.net>/' emailrelay-$(VERSION)/debian/control sed -i 's/^Maintainer:.*/Maintainer: Graeme Walker <graeme_walker@users.sourceforge.net>/' emailrelay-$(VERSION)/debian/control
chmod +x debian/pre* debian/post* chmod +x $(top_srcdir)/debian/pre* $(top_srcdir)/debian/post*
cp debian/* emailrelay-$(VERSION)/debian/ cp $(top_srcdir)/debian/* emailrelay-$(VERSION)/debian/
sed -i 's:dh_installchangelogs:dh_installchangelogs ; cp etc/init.d/emailrelay debian/emailrelay.init ; dh_installinit:' emailrelay-$(VERSION)/debian/rules sed -i 's:dh_installchangelogs:dh_installchangelogs ; cp etc/init.d/emailrelay debian/emailrelay.init ; dh_installinit:' emailrelay-$(VERSION)/debian/rules
sed -i 's:dh_installdeb:dh_installdeb ; echo /etc/emailrelay.conf > debian/emailrelay/DEBIAN/conffiles:' emailrelay-$(VERSION)/debian/rules sed -i 's:dh_installdeb:dh_installdeb ; echo /etc/emailrelay.conf > debian/emailrelay/DEBIAN/conffiles:' emailrelay-$(VERSION)/debian/rules
cd emailrelay-$(VERSION) && debian/rules binary cd emailrelay-$(VERSION) && debian/rules binary

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am. # Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -16,11 +17,23 @@
# #
# #
#
# Top-level makefile
#
# Additional pseudo-targets for packaging:
# * rpm - builds an rpm package using rpmbuild
# * deb - converts the rpm to a deb package using alien.
#
# When running "make distcheck" consider doing this to avoid
# a lengthy testing stage:
# $ make distcheck DISTCHECK_CONFIGURE_FLAGS=--disable-testing
#
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
@ -48,6 +61,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES = SOURCES =
DIST_SOURCES = DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@ -62,12 +76,35 @@ am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \ *) f=$$p;; \
esac; esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(e_docdir)" am__installdirs = "$(DESTDIR)$(e_docdir)"
e_docDATA_INSTALL = $(INSTALL_DATA)
DATA = $(e_doc_DATA) DATA = $(e_doc_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir dist dist-all distcheck
ETAGS = etags ETAGS = etags
CTAGS = ctags CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS) DIST_SUBDIRS = $(SUBDIRS)
@ -75,12 +112,41 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION) distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir) top_distdir = $(distdir)
am__remove_distdir = \ am__remove_distdir = \
{ test ! -d $(distdir) \ if test -d "$(distdir)"; then \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; } && rm -rf "$(distdir)" \
|| { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
distcleancheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
@ -106,9 +172,9 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
GREP = @GREP@ GREP = @GREP@
GZIP = @GZIP@ GZIP = @GZIP@
G_CAPABILITIES = @G_CAPABILITIES@
HAVE_DOXYGEN = @HAVE_DOXYGEN@ HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@ HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@ -131,9 +197,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PAM_INCLUDE = @PAM_INCLUDE@
PAM_LIBS = @PAM_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
QT_CFLAGS = @QT_CFLAGS@ QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@ QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -144,6 +215,7 @@ STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@ STATIC_START = @STATIC_START@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ZLIB_LIBS = @ZLIB_LIBS@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@ abs_top_builddir = @abs_top_builddir@
@ -164,8 +236,10 @@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
e_docdir = @e_docdir@ e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@ e_examplesdir = @e_examplesdir@
e_icondir = @e_icondir@
e_initdir = @e_initdir@ e_initdir = @e_initdir@
e_libexecdir = @e_libexecdir@ e_libexecdir = @e_libexecdir@
e_pamdir = @e_pamdir@
e_qtmoc = @e_qtmoc@ e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@ e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@ e_sysconfdir = @e_sysconfdir@
@ -191,45 +265,46 @@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
EXTRA_DIST = \ EXTRA_DIST = \
emailrelay.spec \ emailrelay.spec \
ChangeLog \ ChangeLog \
README.windows \ README.windows \
README.mips \ README.embedded \
README.mac \ README.mac \
LICENSE \ LICENSE \
VERSION \
bootstrap \ bootstrap \
autogen.sh \ autogen.sh \
emailrelay-gui.xcodeproj/project.pbxproj \ emailrelay-gui.xcodeproj/project.pbxproj \
emailrelay.xcodeproj/project.pbxproj emailrelay.xcodeproj/project.pbxproj
SUBDIRS = bin src lib etc doc debian test extra SUBDIRS = bin src lib etc doc debian test extra
e_doc_DATA = NEWS README ChangeLog e_doc_DATA = COPYING AUTHORS INSTALL NEWS README README.windows README.mac README.embedded ChangeLog
RPM_ROOT = /usr/src/rpm RPM = $(RPM_ROOT)/RPMS/$(RPM_ARCH)/emailrelay-$(VERSION)-1.$(RPM_ARCH).rpm
RPM = $(RPM_ROOT)/RPMS/i386/emailrelay-$(VERSION)-1.i386.rpm DEB = emailrelay_$(VERSION)-1_$(RPM_ARCH).deb
DEB = emailrelay_$(VERSION)-1_i386.deb
TAR = emailrelay-$(VERSION).tar.gz TAR = emailrelay-$(VERSION).tar.gz
all: config.h all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive $(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES: .SUFFIXES:
am--refresh: am--refresh: Makefile
@: @:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
cd $(srcdir) && $(AUTOMAKE) --gnu \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \ && exit 0; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile $(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -245,21 +320,20 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC
$(SHELL) ./config.status --recheck $(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF) $(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
config.h: stamp-h1 config.h: stamp-h1
@if test ! -f $@; then \ @if test ! -f $@; then rm -f stamp-h1; else :; fi
rm -f stamp-h1; \ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
else :; fi
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1 @rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_srcdir) && $(AUTOHEADER) ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1 rm -f stamp-h1
touch $@ touch $@
@ -268,20 +342,21 @@ distclean-hdr:
install-e_docDATA: $(e_doc_DATA) install-e_docDATA: $(e_doc_DATA)
@$(NORMAL_INSTALL) @$(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 \ @list='$(e_doc_DATA)'; test -n "$(e_docdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \ echo "$$d$$p"; \
echo " $(e_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_docdir)/$$f'"; \ done | $(am__base_list) | \
$(e_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_docdir)/$$f"; \ while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(e_docdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(e_docdir)" || exit $$?; \
done done
uninstall-e_docDATA: uninstall-e_docDATA:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
@list='$(e_doc_DATA)'; for p in $$list; do \ @list='$(e_doc_DATA)'; test -n "$(e_docdir)" || list=; \
f=$(am__strip_dir) \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
echo " rm -f '$(DESTDIR)$(e_docdir)/$$f'"; \ dir='$(DESTDIR)$(e_docdir)'; $(am__uninstall_files_from_dir)
rm -f "$(DESTDIR)$(e_docdir)/$$f"; \
done
# This directory's subdirectories are mostly independent; you can cd # This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile. # into them and run `make' without going through this Makefile.
@ -290,7 +365,7 @@ uninstall-e_docDATA:
# (which will cause the Makefiles to be regenerated when you run `make'); # (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line. # (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS): $(RECURSIVE_TARGETS):
@failcom='exit 1'; \ @fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \ for f in x $$MAKEFLAGS; do \
case $$f in \ case $$f in \
*=* | --[!k]*);; \ *=* | --[!k]*);; \
@ -307,7 +382,7 @@ $(RECURSIVE_TARGETS):
else \ else \
local_target="$$target"; \ local_target="$$target"; \
fi; \ fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \ || eval $$failcom; \
done; \ done; \
if test "$$dot_seen" = "no"; then \ if test "$$dot_seen" = "no"; then \
@ -315,7 +390,7 @@ $(RECURSIVE_TARGETS):
fi; test -z "$$fail" fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS): $(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \ @fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \ for f in x $$MAKEFLAGS; do \
case $$f in \ case $$f in \
*=* | --[!k]*);; \ *=* | --[!k]*);; \
@ -341,16 +416,16 @@ $(RECURSIVE_CLEAN_TARGETS):
else \ else \
local_target="$$target"; \ local_target="$$target"; \
fi; \ fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \ || eval $$failcom; \
done && test -z "$$fail" done && test -z "$$fail"
tags-recursive: tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done done
ctags-recursive: ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@ -358,14 +433,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique mkid -fID $$unique
tags: TAGS tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
tags=; \ set x; \
here=`pwd`; \ 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; \ include_option=--etags-include; \
@ -377,7 +452,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \ if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \ test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \ fi; \
done; \ done; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
@ -386,36 +461,41 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \ test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ if test $$# -gt 0; then \
$$tags $$unique; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi fi
ctags: CTAGS ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \ test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique $$unique
GTAGS: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \ here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \ && $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here && gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags: distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES) distdir: $(DISTFILES)
$(am__remove_distdir) $(am__remove_distdir)
test -d $(distdir) || mkdir $(distdir) test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \ list='$(DISTFILES)'; \
@ -431,50 +511,75 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d "$(distdir)/$$file"; then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \ if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \ test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \ || exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \ fi; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ done
(cd $$subdir && \ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \ $(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \ top_distdir="$$new_top_distdir" \
distdir="$$distdir/$$subdir" \ distdir="$$new_distdir" \
am__remove_distdir=: \ am__remove_distdir=: \
am__skip_length_check=: \ am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \ distdir) \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ -test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir) || chmod -R a+r "$(distdir)"
dist-gzip: distdir dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir) $(am__remove_distdir)
dist-bzip2: distdir dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-lzip: distdir
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
$(am__remove_distdir) $(am__remove_distdir)
dist-lzma: distdir dist-lzma: distdir
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
$(am__remove_distdir) $(am__remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__remove_distdir)
dist-tarZ: distdir dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir) $(am__remove_distdir)
@ -498,15 +603,19 @@ dist dist-all: distdir
distcheck: dist distcheck: dist
case '$(DIST_ARCHIVES)' in \ case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \ *.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \ *.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lzma*) \ *.tar.lzma*) \
unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.lz*) \
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \ *.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \ *.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \ *.zip*) \
unzip $(distdir).zip ;;\ unzip $(distdir).zip ;;\
esac esac
@ -514,10 +623,13 @@ distcheck: dist
mkdir $(distdir)/_build mkdir $(distdir)/_build
mkdir $(distdir)/_inst mkdir $(distdir)/_inst
chmod a-w $(distdir) chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \ && am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) dvi \
@ -538,14 +650,24 @@ distcheck: dist
&& rm -rf "$$dc_destdir" \ && rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \ && $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \ && rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__remove_distdir) $(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \ @(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck: distuninstallcheck:
@cd $(distuninstallcheck_dir) \ @test -n '$(distuninstallcheck_dir)' || { \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ echo 'ERROR: trying to run $@ with an empty' \
'$$(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
$(am__cd) '$(distuninstallcheck_dir)' || { \
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after uninstall:" ; \ || { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \ if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \ echo " (check DESTDIR support)"; \
@ -579,16 +701,22 @@ install-am: all-am
installcheck: installcheck-recursive installcheck: installcheck-recursive
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@ -608,6 +736,8 @@ dvi-am:
html: html-recursive html: html-recursive
html-am:
info: info-recursive info: info-recursive
info-am: info-am:
@ -616,18 +746,28 @@ install-data-am: install-e_docDATA
install-dvi: install-dvi-recursive install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-recursive install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive install-info: install-info-recursive
install-info-am:
install-man: install-man:
install-pdf: install-pdf-recursive install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive install-ps: install-ps-recursive
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-recursive maintainer-clean: maintainer-clean-recursive
@ -650,37 +790,42 @@ ps-am:
uninstall-am: uninstall-e_docDATA uninstall-local uninstall-am: uninstall-e_docDATA uninstall-local
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
install-strip ctags-recursive install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \ all all-am am--refresh check check-am clean clean-generic \
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
dist-lzma dist-shar dist-tarZ dist-zip distcheck distclean \ dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
distclean-generic distclean-hdr distclean-tags distcleancheck \ distcheck distclean distclean-generic distclean-hdr \
distdir distuninstallcheck dvi dvi-am html html-am info \ distclean-tags distcleancheck distdir distuninstallcheck dvi \
info-am install install-am install-data install-data-am \ dvi-am html html-am info info-am install install-am \
install-dvi install-dvi-am install-e_docDATA install-exec \ install-data install-data-am install-dvi install-dvi-am \
install-exec-am install-html install-html-am install-info \ install-e_docDATA install-exec install-exec-am install-html \
install-info-am install-man install-pdf install-pdf-am \ install-html-am install-info install-info-am install-man \
install-ps install-ps-am install-strip installcheck \ install-pdf install-pdf-am install-ps install-ps-am \
installcheck-am installdirs installdirs-am maintainer-clean \ install-strip installcheck installcheck-am installdirs \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ installdirs-am maintainer-clean maintainer-clean-generic \
pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
uninstall-e_docDATA uninstall-local tags-recursive uninstall uninstall-am uninstall-e_docDATA \
uninstall-local
uninstall-local: uninstall-local:
-rmdir $(DESTDIR)$(e_docdir) 2>/dev/null -for try in 1 2 3 4 ; do echo "$(DESTDIR)$(e_pamdir)" "$(DESTDIR)$(e_initdir)" "$(DESTDIR)$(e_sysconfdir)" "$(DESTDIR)$(e_examplesdir)" "$(DESTDIR)$(e_libexecdir)" "$(DESTDIR)$(e_spooldir)" "$(DESTDIR)$(e_docdir)" "$(DESTDIR)$(pkgdatadir)" | tr ' ' '\n' | grep -i "mailrelay" | while read d ; do rmdir "$$d" 2>/dev/null ; done ; done
-for d in "$(DESTDIR)$(e_sysconfdir)" "$(DESTDIR)$(e_libexecdir)" "$(DESTDIR)$(e_examplesdir)" "$(DESTDIR)$(e_spooldir)" "$(DESTDIR)$(e_initdir)" "$(DESTDIR)$(e_docdir)/man/man1" "$(DESTDIR)$(e_docdir)/man" "$(DESTDIR)$(e_docdir)" ; do rmdir "$$d" 2>/dev/null ; done
RPM_ROOT ?= ${HOME}/rpmbuild
#RPM_ARCH ?= $(shell arch)
RPM_ARCH ?= x86_64
.PHONY: rpm .PHONY: rpm
rpm: $(RPM) rpm: $(RPM)
$(RPM): dist $(RPM): dist
-rm -rf $(RPM_ROOT)/BUILD/emailrelay-$(VERSION) -rm -rf $(RPM_ROOT)/BUILD/emailrelay-$(VERSION)
-mkdir -p $(RPM_ROOT)/BUILD $(RPM_ROOT)/SOURCES $(RPM_ROOT)/SPECS 2>/dev/null
cp $(TAR) $(RPM_ROOT)/SOURCES/emailrelay-$(VERSION)-src.tar.gz cp $(TAR) $(RPM_ROOT)/SOURCES/emailrelay-$(VERSION)-src.tar.gz
cp emailrelay.spec $(RPM_ROOT)/SPECS cp $(top_srcdir)/emailrelay.spec $(RPM_ROOT)/SPECS/
chown root:root $(RPM_ROOT)/SPECS/emailrelay.spec chown root:root $(RPM_ROOT)/SPECS/emailrelay.spec
rpmbuild -ba $(RPM_ROOT)/SPECS/emailrelay.spec rpmbuild -ba $(RPM_ROOT)/SPECS/emailrelay.spec
@ -688,15 +833,16 @@ $(RPM): dist
deb: $(DEB) deb: $(DEB)
$(DEB): $(RPM) $(DEB): $(RPM)
-mv emailrelay-$(VERSION) emailrelay-$(VERSION).old.$$ -mv emailrelay-$(VERSION) emailrelay-$(VERSION).old.$$$$
alien --to-deb --generate --single --keep-version $(RPM) alien --to-deb --generate --single --keep-version $(RPM)
sed -i 's/^Section:.*/Section: mail/' emailrelay-$(VERSION)/debian/control sed -i 's/^Section:.*/Section: mail/' emailrelay-$(VERSION)/debian/control
sed -i 's/^Maintainer:.*/Maintainer: Graeme Walker <graeme_walker@users.sourceforge.net>/' emailrelay-$(VERSION)/debian/control sed -i 's/^Maintainer:.*/Maintainer: Graeme Walker <graeme_walker@users.sourceforge.net>/' emailrelay-$(VERSION)/debian/control
chmod +x debian/pre* debian/post* chmod +x $(top_srcdir)/debian/pre* $(top_srcdir)/debian/post*
cp debian/* emailrelay-$(VERSION)/debian/ cp $(top_srcdir)/debian/* emailrelay-$(VERSION)/debian/
sed -i 's:dh_installchangelogs:dh_installchangelogs ; cp etc/init.d/emailrelay debian/emailrelay.init ; dh_installinit:' emailrelay-$(VERSION)/debian/rules sed -i 's:dh_installchangelogs:dh_installchangelogs ; cp etc/init.d/emailrelay debian/emailrelay.init ; dh_installinit:' emailrelay-$(VERSION)/debian/rules
sed -i 's:dh_installdeb:dh_installdeb ; echo /etc/emailrelay.conf > debian/emailrelay/DEBIAN/conffiles:' emailrelay-$(VERSION)/debian/rules sed -i 's:dh_installdeb:dh_installdeb ; echo /etc/emailrelay.conf > debian/emailrelay/DEBIAN/conffiles:' emailrelay-$(VERSION)/debian/rules
cd emailrelay-$(VERSION) && debian/rules binary cd emailrelay-$(VERSION) && debian/rules binary
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

79
README
View File

@ -3,54 +3,53 @@ E-MailRelay Readme
Abstract Abstract
-------- --------
E-MailRelay is a simple SMTP proxy and store-and-forward message transfer agent E-MailRelay is a simple SMTP proxy and store-and-forward message transfer agent
(MTA). When running as a proxy all e-mail messages can be passed through a (MTA). When running as a proxy all e-mail messages can be passed through a
user-defined program, such as a spam filter, which can drop, re-address or edit user-defined program, such as a spam filter, which can drop, re-address or edit
messages as they pass through. When running as a store-and-forward MTA incoming messages as they pass through. When running as a store-and-forward MTA incoming
messages are stored in a local spool directory, and then forwarded to the next messages are stored in a local spool directory, and then forwarded to the next
SMTP server on request. SMTP server on request.
Because of its functional simplicity E-MailRelay is easy to configure, often
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. Messages received over SMTP can be E-MailRelay can also run as a POP3 server. Messages received over SMTP can be
automatically dropped into several independent POP3 mailboxes. automatically dropped into several independent POP3 mailboxes.
E-MailRelay uses the same non-blocking i/o model as Squid and Nginx giving
excellent scalability and resource usage.
C++ source code is available for Linux, FreeBSD, MacOS X etc, and Windows. C++ source code is available for Linux, FreeBSD, MacOS X etc, and Windows.
Distribution is under the GNU General Public License V3. Distribution is under the GNU General Public License V3.
Quick start Quick start
----------- -----------
To use E-MailRelay in store-and-forward mode use the "--as-server" switch to To use E-MailRelay in store-and-forward mode use the "--as-server" option to
start the storage daemon in the background, and then trigger delivery of spooled 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 messages by running with the "--as-client" option and the address of the target
host. host.
For example, to start a storage daemon listening on port 10025 use a command like For example, to start a storage daemon listening on port 10025 use a command
this: like this:
emailrelay --as-server --port 10025 --spool-dir /tmp emailrelay --as-server --port 10025 --spool-dir /tmp
And then to forward the spooled mail to "smarthost" run something like this: And then to forward the spooled mail to "smarthost" run something like this:
emailrelay --as-client smarthost:smtp --spool-dir /tmp emailrelay --as-client smarthost:25 --spool-dir /tmp
To get behaviour more like a proxy you can add the "--poll" switch so that To get behaviour more like a proxy you can add the "--poll" option so that
messages are forwarded continuously rather than on-demand. This example starts a messages are forwarded continuously rather than on-demand. This example starts a
store-and-forward server that forwards spooled-up e-mail every hour: store-and-forward server that forwards spooled-up e-mail every hour:
emailrelay --as-server --poll 3600 --forward-to smarthost:smtp emailrelay --as-server --poll 3600 --forward-to smarthost:25
For a proxy server that forwards each message as it is being received, without For a proxy server that forwards each message as it is being received, without
any delay, you can use the "--as-proxy" mode: any delay, you can use the "--as-proxy" mode:
emailrelay --as-proxy smarthost:smtp emailrelay --as-proxy smarthost:25
If you want to edit or filter e-mail as it passes through the proxy then specify 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: your pre-processor program with the "--filter" option, something like this:
emailrelay --as-proxy smarthost:smtp --filter /usr/local/bin/addsig emailrelay --as-proxy smarthost:25 --filter /usr/local/bin/addsig
To run E-MailRelay as a POP server without SMTP use "--pop" and "--no-smtp": To run E-MailRelay as a POP server without SMTP use "--pop" and "--no-smtp":
@ -59,10 +58,12 @@ To run E-MailRelay as a POP server without SMTP use "--pop" and "--no-smtp":
The "emailrelay-submit" utility can be used to put messages straight into the The "emailrelay-submit" utility can be used to put messages straight into the
spool directory so that the POP clients can fetch them. spool directory so that the POP clients can fetch them.
Note that by default E-MailRelay will always reject connections from remote By default E-MailRelay will always reject connections from remote machines. To
machines. To allow connections from anywhere use the "--remote-clients" switch, allow connections from anywhere use the "--remote-clients" option, but please
but please consider the implications if your machine is connected to the check your firewall settings to make sure this cannot be exploited by spammers.
internet.
On Windows add "--hidden" to suppress message boxes and also add "--no-daemon"
if running as a service.
For more information on the command-line options refer to the reference guide For more information on the command-line options refer to the reference guide
or run: or run:
@ -76,23 +77,24 @@ The following documentation is provided:
* COPYING -- the GNU General Public License * COPYING -- the GNU General Public License
* INSTALL -- build & install instructions (including the GNU text) * INSTALL -- build & install instructions (including the GNU text)
* AUTHORS -- authors, credits and additional copyrights * AUTHORS -- authors, credits and additional copyrights
* copyright -- main copyright and GPL reference
* userguide.txt -- user guide * userguide.txt -- user guide
* reference.txt -- reference document * reference.txt -- reference document
* ChangeLog -- change log for releases * ChangeLog -- change log for releases
Source code documentation will be generated when building from source if Source code documentation will be generated when building from source if
"doxygen" is available. "doxygen" is available.
Configurations Configurations
-------------- --------------
Recent releases were developed on Ubuntu Linux 7.10 using: Recent releases were developed on Ubuntu Linux 12.04 using:
* linux 2.6.22 * linux 3.2.0
* gcc 4.1.3 * gcc 4.6.3
* autoconf 2.61 * autoconf 2.68
and on Windows NT4 SP6 using: and on Windows 7 using:
* MSVC 6.0 SP3 * MSVC 2012
* MinGW 20120426
* OpenSSL 1.0.1c
The code was originally developed on SuSE Linux 7.1 using: The code was originally developed on SuSE Linux 7.1 using:
* linux 2.4.10 * linux 2.4.10
@ -106,13 +108,15 @@ and on Windows 98 using:
Versions of the code have also been built successfully on: Versions of the code have also been built successfully on:
* MacOS X 10.3.9 * MacOS X 10.3.9
* MacOS X 10.5.1 using gcc 4.0.1 on G4 PPC hardware * MacOS X 10.5.1 using gcc 4.0.1 on G4 PPC hardware
* FreeBSD on Intel hardware * FreeBSD 9.2 on Intel hardware
* Linux on Alpha hardware (Debian 2.2) * Linux on Alpha hardware (Debian 2.2)
* Linux on Sparc hardware * Linux on Sparc hardware
* Linux on ARM 11 (Raspberry Pi) hardware
* Linux on RS6000 PPC hardware * Linux on RS6000 PPC hardware
* Linux on MIPS embedded hardware using gcc 3.4.6
* Linux using clang++ 3.0
* Linux using intel c++ 6.0 * Linux using intel c++ 6.0
* Linux using intel c++ 10.1 * Linux using intel c++ 10.1
* Linux 2.4.20 using gcc 3.4.6 on MIPS (mipsel)
* Solaris 8 using gcc on Sparc hardware * Solaris 8 using gcc on Sparc hardware
* Solaris 8 using WorkShop 5.0 * Solaris 8 using WorkShop 5.0
* Solaris 10 * Solaris 10
@ -120,10 +124,11 @@ Versions of the code have also been built successfully on:
* Windows NT 4.0 using Cygwin (DLL 1.3.22) and gcc 3.2 * 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 NT 4.0 using MinGW 2.0.0 and gcc 3.2
* Windows XP using MinGW 3.1.0 gcc 3.4.2 * Windows XP using MinGW 3.1.0 gcc 3.4.2
* Windows Vista
Feedback Feedback
-------- --------
Please feel free to e-mail the author at Please feel free to e-mail the author at
"mailto:graeme_walker@users.sourceforge.net" or the SourceForge mailing list "mailto:graeme_walker@users.sourceforge.net" or the SourceForge mailing list
"mailto:emailrelay-help@lists.sourceforge.net". "mailto:emailrelay-help@lists.sourceforge.net".

10
README.embedded Normal file
View File

@ -0,0 +1,10 @@
E-MailRelay on embedded systems
===============================
OpenWRT
-------
The OpenWRT system provides an excellent framework for cross-compiling
E-MailRelay to run on embedded systems.
An OpenWRT Makefile for E-MailRelay can be found in the "extra/openwrt"
directory. Install it in the OpenWrt tree as package/emailrelay/Makefile.

View File

@ -3,33 +3,28 @@ E-MailRelay on Mac OS X
Building from source Building from source
-------------------- --------------------
E-MailRelay can be built on a Mac as if it is a vanilla unix system; the E-MailRelay can be built from source on Mac OS X using the standard
standard "configure; make; sudo make install" procedure for building and "configure; make; sudo make install" procedure, although for best results you
installing from source should work well enough. should use the "bin/configure-mac.sh" script to run "configure" with directory
paths that are more Mac-like (see below).
For best results use the "bin/configure-mac.sh" script to run "configure" with The "make image" command in the "src/gui" directory can be used to build a
directory paths that are more Mac-like (see below). self-extracting disk image for the native architecture. Project files fox Xcode
are also provided to help with building universal binaries.
The "make" step will only build executables for the native architecture. Xcode Refer to "doc/developer.txt" for more information on Mac packaging.
can be used to build universal binaries. Project files for xcode 3 are supplied.
Directories Directories
----------- -----------
The preferred installation directories are: The preferred installation directories specified by "bin/configure-mac.sh" are:
* "/Applications/E-MailRelay" for the application * "/Applications/E-MailRelay" for the application
* "/Applications/E-MailRelay/Documentation" for the documentation * "/Applications/E-MailRelay/Documentation" for the documentation
* "/Applications/E-MailRelay" for the configuration (not "/Library/Preferences/E-MailRelay") * "/Applications/E-MailRelay" for the configuration (not "/Library/Preferences/E-MailRelay")
* "/Library/Mail/Spool" for the spool directory * "/Library/Mail/Spool" for the spool directory
* "/Library/StartupItems/E-MailRelay" for the boot-time startup script * "/Library/StartupItems/E-MailRelay" for the boot-time startup script
Installation can also be done into the User "domain", ie. under "~/Applications" Moving the system after installation is not guaranteed to work perfectly
and "~/Library" using "make install DESTDIR=~", although starting up at so it is best run configure with the correct directories to start with.
boot-time will not then work. Having said that, a disk image built with the standard directories should work
reasonably well when installed to the "User" domain with
Moving the system after installation, or installing to any other directories, "make DESTDIR=~ install".
is not guaranteed to work correctly.
Binary distribution
-------------------
Graphical installation from the disk image has been developed using Mac OS X
10.5 ("Leopard"). Bug reports for other versions of OS X are welcome.

View File

@ -1,24 +0,0 @@
E-MailRelay MIPS
================
To help with running E-MailRelay on MIPS-based routers, such as the Buffalo
WHR-G54S, a makefile for building a cross-compiler toolchain is provided as
"extra/mips/toolchain.mak".
The shell script "extra/mips/configure-mips.sh" can be used to run the main
E-MailRelay "configure" script with all the size optimisations suitable for an
embedded target system.
These build-time size optimisations yield the following approximate savings for
the main executable:
* "--disable-exec" 184k
* "--enable-small-config" 121k
* "--disable-pop" 121k
* "--disable-auth" 109k
* "--disable-debug" 67k
* "--disable-admin" 63k
* "--enable-small-exceptions" 46k
* "--enable-small-fragments" 32k
* "--disable-proxy" 30k
* "--disable-dns" 26k
* "--disable-verbose" 15k

View File

@ -1,78 +1,104 @@
E-MailRelay Windows E-MailRelay Windows
=================== ===================
Command-line options
--------------------
There are some differences in the command-line options when running the
E-MailRelay server on Windows. These include:
* The "--syslog" option refers to the Windows Event Viewer's Application log.
* The "--no-daemon" option is used to disable the icon in the system tray.
* The "--hidden" option hides all windows and suppresses message boxes (requires "--no-deamon").
* The "--peer-lookup" option can be used to add extra information to envelope files for local clients.
Setup program Setup program
------------- -------------
Installing E-MailRelay on Windows should be straightforward if you have Installing E-MailRelay on Windows should be straightforward if you have the
self-extracting archive program "emailrelay-setup.exe". Make sure that the setup program "emailrelay-setup.exe" and its associated "payload" data file.
setup program is in a writeable directory with plenty of space on the disk
because when you run it it will extract an installation GUI program plus
dependent DLLs in into the same directory.
The installation GUI will take you through the installation options and then Run "emailrelay-setup.exe" as an administrator if you are going to be installing
install the run-time files into your chosen directory. into sensitive directories like "Program Files". If you don't want to run it as
an administrator then you will have to rename to (eg.) "emailrelay-gui.exe" to
avoid triggering the UAC mechanism.
The setup GUI will take you through the installation options and then install
the run-time files into your chosen locations.
Manual installation Manual installation
------------------- -------------------
In summary, the manual installation process for Windows for when you do not have In summary, the manual installation process for Windows for when you do not have
the self-extracting setup program, is as follows: the self-extracting setup program, is as follows:
* Create a new program directory "Program Files\emailrelay" * Create a new program directory "c:\Program Files\emailrelay"
* Unzip into "Program Files\emailrelay" * Copy the packaged files into "Program Files\emailrelay"
* Create a new spool directory "<windir>\spool\emailrelay" * Create a new spool directory "c:\windows\system32\spool\emailrelay"
* Create a new text file, eg. "c:\emailrelay.auth", to contain account details * 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" * Add your account details to "emailrelay.auth" with a line like "client login myaccount mypassword"
* Drag "emailrelay.exe" onto the desktop to create a shortcut for the server. * Drag "emailrelay.exe" onto the desktop to create a shortcut for the server.
* Add "--as-server --verbose" to the server shortcut properties in the "target" box.
* Drag again to create a shortcut for the forwarding client. * 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.
* Add "--as-client myisp.net:smtp --hidden --client-auth c:/emailrelay.auth" to the client shortcut.
Move shortcuts to "Startup" folders as necessary. Move shortcuts to "Startup" folders as necessary.
Running as a service Running as a service
-------------------- --------------------
To manually install E-MailRelay as a service so that it starts up automatically If you are installing manually you can set up E-MailRelay as a service so that
at boot-time you must first create a one-line batch file called it starts up automatically at boot-time. You must first have a one-line batch
"emailrelay-start.bat" in the main E-MailRelay directory containing file called "emailrelay-start.bat" in the main E-MailRelay directory containing
the full E-MailRelay server command-line. Then run "emailrelay-service --install" the full E-MailRelay server command-line. Then just run
to install the service. "emailrelay-service --install" to install the service.
When the E-MailRelay server is run in this way the "--no-daemon" and "--hidden" When the E-MailRelay server is run in this way the "--no-daemon" and "--hidden"
switches are added automatically to whatever is in the "emailrelay-start" batch options are added automatically to whatever is in the "emailrelay-start" batch
file, so that there is no user interface. (The "--no-daemon" switch on Windows file so that there is no user interface. (The "--no-daemon" option changes the
changes the interface from using the system-tray to using a normal window, and interface from using the system-tray to using a normal window, and the
the "--hidden" switch suppresses the window and any message boxes.) "--hidden" option suppresses the window and any message boxes.)
Note that the batch file and the main E-MailRelay executable must be in the same Note that the batch file and the main E-MailRelay executable must be in the same
directory. directory; the service wrapper reads the batch file in order to assemble the
correct command-line for running the E-MailRelay server, so it needs to know
where to find it.
If you need to run multiple E-MailRelay services then pass a unique service name If you need to run multiple E-MailRelay services then pass a unique service name
on the "emailrelay-service --install <name>" command-line. This name is used to and display name on the "emailrelay-service --install <name> <display-name>"
derive the name of the "<name>-start.bat" batch file that contains the command-line.
E-MailRelay server's command-line switches so you will need to create this too.
The service name you give is used to derive the name of the "<name>-start.bat"
batch file that contains the E-MailRelay server's command-line options, so you
will need to create that first.
For example:
copy emailrelay-start.bat emailrelay-client-start.bat
edit emailrelay-client-start.bat
emailrelay-service --install emailrelay-client "E-MailRelay Client"
copy emailrelay-start.bat emailrelay-server-start.bat
edit emailrelay-server-start.bat
emailrelay-service --install emailrelay-server "E-MailRelay Server"
Diagnostics Diagnostics
----------- -----------
E-MailRelay normally writes errors and warnings into the system event log, which E-MailRelay normally writes errors and warnings into the Windows Event Log,
you can view by running "eventvwr.exe". You can increase the verbosity by adding which you can view by running "eventvwr.exe" or going to
the "--verbose" switch to the E-MailRelay command-line, typically by editing the "ControlPanel"->"SystemAndSecurity"->"AdministrativeTools"->"EventViewer"; from
"emailrelay-start.bat" batch script. there look under "Windows Logs" and "Application".
The E-MailRelay server also logs to the standard error stream. However, the You can increase the verbosity of the logging by adding the "--verbose" option
"--as-server" and "--as-proxy" switches implicitly incorporate "--close-stderr" to the E-MailRelay command-line, typically by editing the "emailrelay-start.bat"
so with these switches the standard error logging will stop soon after startup. batch script.
To get continuous logging to a log file you should replace "--as-server" with Telnet
"--log" and "--as-proxy" with "--poll 0 --forward-to" and then use "2>" to ------
redirect the standard error stream, eg: If you want to test E-MailRelay using telnet (as described elsewhere) then you
might need to enable the Windows telnet client using
"c:\program files\emailrelay\emailrelay.exe" --log -v -L ... > c:\temp.out 2>&1 "ControlPanel"->"ProgramsAndFeatures"->"TurnWindowsFeaturesOnAndOff".
Building from source Building from source
-------------------- --------------------
E-MailRelay can be compiled using Microsoft Visual Studio C++ (MSVC) 6 or MinGW, E-MailRelay can be compiled using various versions of Microsoft Visual Studio
although the installation/configuration GUI can only be built with MinGW because C++ (MSVC) or MinGW.
of its dependence on Qt.
There is a Visual Studio workspace file for MSVC 6 in the "src" directory. For A Visual Studio "solution" for MSVC 2012 is provided in the "src" directory to
MinGW please follow the guidelines in "mingw-common.mak" which is also in the build the main E-MailRelay executable, although it does not include a project
"src" directory. for the Qt-based installation/configuration GUI.
For a complete build that includes the E-MailRelay GUI use MinGW, following the
instructions in "src/mingw-common.mak" and "doc/developer.txt".

1
VERSION Normal file
View File

@ -0,0 +1 @@
1.9

View File

@ -1,8 +1,23 @@
dnl Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> dnl Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
dnl dnl
dnl This program is free software: you can redistribute it and/or modify dnl This program is free software: you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation, either version 3 of the License, or dnl the Free Software Foundation, either version 3 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
dnl ===
dnl Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
dnl
dnl This program is free software: you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation, either version 3 of the License, or
dnl (at your option) any later version. dnl (at your option) any later version.
dnl dnl
dnl This program is distributed in the hope that it will be useful, dnl This program is distributed in the hope that it will be useful,
@ -19,16 +34,16 @@ dnl
dnl Defines HAVE_SOCKLEN_T. dnl Defines HAVE_SOCKLEN_T.
dnl dnl
AC_DEFUN([ACLOCAL_TYPE_SOCKLEN_T], AC_DEFUN([ACLOCAL_TYPE_SOCKLEN_T],
[AC_CACHE_CHECK([for socklen_t],[aclocal_type_socklen_t], [AC_CACHE_CHECK([for socklen_t],[aclocal_cv_type_socklen_t],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <sys/types.h> [[#include <sys/types.h>
#include <sys/socket.h>]], #include <sys/socket.h>]],
[[socklen_t len = 42; return len;]])], [[socklen_t len = 42; return len;]])],
aclocal_type_socklen_t=yes, aclocal_cv_type_socklen_t=yes,
aclocal_type_socklen_t=no ) aclocal_cv_type_socklen_t=no )
]) ])
if test $aclocal_type_socklen_t = yes; then if test $aclocal_cv_type_socklen_t = yes; then
AC_DEFINE(HAVE_SOCKLEN_T,1,[Define to 1 if socklen_t type definition in sys/socket.h]) AC_DEFINE(HAVE_SOCKLEN_T,1,[Define to 1 if socklen_t type definition in sys/socket.h])
else else
AC_DEFINE(HAVE_SOCKLEN_T,0,[Define to 1 if socklen_t type definition in sys/socket.h]) AC_DEFINE(HAVE_SOCKLEN_T,0,[Define to 1 if socklen_t type definition in sys/socket.h])
@ -40,7 +55,7 @@ dnl
dnl Defines HAVE_IPV6. dnl Defines HAVE_IPV6.
dnl dnl
AC_DEFUN([ACLOCAL_CHECK_IPV6], AC_DEFUN([ACLOCAL_CHECK_IPV6],
[AC_CACHE_CHECK([for ipv6],[aclocal_ipv6], [AC_CACHE_CHECK([for ipv6],[aclocal_cv_ipv6],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <sys/types.h> [[#include <sys/types.h>
@ -48,10 +63,10 @@ AC_DEFUN([ACLOCAL_CHECK_IPV6],
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h>]], #include <arpa/inet.h>]],
[[sockaddr_in6 * p = 0;]])], [[sockaddr_in6 * p = 0;]])],
aclocal_ipv6=yes , aclocal_cv_ipv6=yes ,
aclocal_ipv6=no ) aclocal_cv_ipv6=no )
]) ])
if test $aclocal_ipv6 = yes; then if test $aclocal_cv_ipv6 = yes; then
AC_DEFINE(HAVE_IPV6,1,[Define to 1 if ipv6 is available]) AC_DEFINE(HAVE_IPV6,1,[Define to 1 if ipv6 is available])
else else
AC_DEFINE(HAVE_IPV6,0,[Define to 1 if ipv6 is available]) AC_DEFINE(HAVE_IPV6,0,[Define to 1 if ipv6 is available])
@ -64,7 +79,7 @@ dnl Defines HAVE_GETIPNODEBYNAME if the ipv6 function
dnl getipnodebyname() as per rfc2553 is available. dnl getipnodebyname() as per rfc2553 is available.
dnl dnl
AC_DEFUN([ACLOCAL_CHECK_GETIPNODEBYNAME], AC_DEFUN([ACLOCAL_CHECK_GETIPNODEBYNAME],
[AC_CACHE_CHECK([for getipnodebyname],[aclocal_getipnodebyname], [AC_CACHE_CHECK([for getipnodebyname],[aclocal_cv_getipnodebyname],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <sys/types.h> [[#include <sys/types.h>
@ -73,10 +88,10 @@ AC_DEFUN([ACLOCAL_CHECK_GETIPNODEBYNAME],
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netdb.h>]], #include <netdb.h>]],
[[int i=0; getipnodebyname("",AF_INET6,AI_DEFAULT,&i);]])], [[int i=0; getipnodebyname("",AF_INET6,AI_DEFAULT,&i);]])],
aclocal_getipnodebyname=yes , aclocal_cv_getipnodebyname=yes ,
aclocal_getipnodebyname=no ) aclocal_cv_getipnodebyname=no )
]) ])
if test $aclocal_getipnodebyname = yes; then if test $aclocal_cv_getipnodebyname = yes; then
AC_DEFINE(HAVE_GETIPNODEBYNAME,1,[Define to 1 if getipnodebyname() is available]) AC_DEFINE(HAVE_GETIPNODEBYNAME,1,[Define to 1 if getipnodebyname() is available])
else else
AC_DEFINE(HAVE_GETIPNODEBYNAME,0,[Define to 1 if getipnodebyname() is available]) AC_DEFINE(HAVE_GETIPNODEBYNAME,0,[Define to 1 if getipnodebyname() is available])
@ -88,17 +103,17 @@ dnl
dnl Defines HAVE_SIN6_LEN if sin6_len is in sockaddr_in6. dnl Defines HAVE_SIN6_LEN if sin6_len is in sockaddr_in6.
dnl dnl
AC_DEFUN([ACLOCAL_CHECK_SIN6_LEN], AC_DEFUN([ACLOCAL_CHECK_SIN6_LEN],
[AC_CACHE_CHECK([for sin6_len],[aclocal_sin6_len], [AC_CACHE_CHECK([for sin6_len],[aclocal_cv_sin6_len],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <sys/types.h> [[#include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <netinet/in.h>]], #include <netinet/in.h>]],
[[struct sockaddr_in6 s; s.sin6_len = 1;]])], [[struct sockaddr_in6 s; s.sin6_len = 1;]])],
aclocal_sin6_len=yes , aclocal_cv_sin6_len=yes ,
aclocal_sin6_len=no ) aclocal_cv_sin6_len=no )
]) ])
if test $aclocal_sin6_len = yes; then if test $aclocal_cv_sin6_len = yes; then
AC_DEFINE(HAVE_SIN6_LEN,1,[Define to 1 if sockaddr_in6 has a sin6_len member]) AC_DEFINE(HAVE_SIN6_LEN,1,[Define to 1 if sockaddr_in6 has a sin6_len member])
else else
AC_DEFINE(HAVE_SIN6_LEN,0,[Define to 1 if sockaddr_in6 has a sin6_len member]) AC_DEFINE(HAVE_SIN6_LEN,0,[Define to 1 if sockaddr_in6 has a sin6_len member])
@ -110,37 +125,60 @@ dnl
dnl Defines HAVE_SETGROUPS. dnl Defines HAVE_SETGROUPS.
dnl dnl
AC_DEFUN([ACLOCAL_CHECK_SETGROUPS], AC_DEFUN([ACLOCAL_CHECK_SETGROUPS],
[AC_CACHE_CHECK([for setgroups],[aclocal_setgroups], [AC_CACHE_CHECK([for setgroups],[aclocal_cv_setgroups],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <sys/types.h> [[#include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <grp.h>]], #include <grp.h>]],
[[setgroups(0,0) ;]])], [[setgroups(0,0) ;]])],
aclocal_setgroups=yes , aclocal_cv_setgroups=yes ,
aclocal_setgroups=no ) aclocal_cv_setgroups=no )
]) ])
if test $aclocal_setgroups = yes; then if test $aclocal_cv_setgroups = yes; then
AC_DEFINE(HAVE_SETGROUPS,1,[Define to 1 if setgroups is available]) AC_DEFINE(HAVE_SETGROUPS,1,[Define to 1 if setgroups is available])
else else
AC_DEFINE(HAVE_SETGROUPS,0,[Define to 1 if setgroups is available]) AC_DEFINE(HAVE_SETGROUPS,0,[Define to 1 if setgroups is available])
fi fi
]) ])
dnl gmtime_r dnl aclocal-check-getpwnam-r
dnl
dnl Defines HAVE_GETPWNAM_R.
dnl
AC_DEFUN([ACLOCAL_CHECK_GETPWNAM_R],
[AC_CACHE_CHECK([for getpwnam_r],[aclocal_cv_getpwnam_r],
[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <sys/types.h>
#include <pwd.h>]],
[[char c;
struct passwd *r;
getpwnam_r("",r,&c,0,&r) ;]])],
aclocal_cv_getpwnam_r=yes ,
aclocal_cv_getpwnam_r=no )
])
if test $aclocal_cv_getpwnam_r = yes; then
AC_DEFINE(HAVE_GETPWNAM_R,1,[Define to 1 if getpwnam_r in pwd.h])
else
AC_DEFINE(HAVE_GETPWNAM_R,0,[Define to 1 if getpwnam_r in pwd.h])
fi
])
dnl aclocal-check-gmtime-r
dnl dnl
dnl Defines HAVE_GMTIME_R. dnl Defines HAVE_GMTIME_R.
dnl dnl
AC_DEFUN([ACLOCAL_CHECK_GMTIME_R], AC_DEFUN([ACLOCAL_CHECK_GMTIME_R],
[AC_CACHE_CHECK([for gmtime_r],[aclocal_gmtime_r], [AC_CACHE_CHECK([for gmtime_r],[aclocal_cv_gmtime_r],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <time.h>]], [[#include <time.h>]],
[[gmtime_r((time_t*)0,(struct tm*)0) ;]])], [[gmtime_r((time_t*)0,(struct tm*)0) ;]])],
aclocal_gmtime_r=yes , aclocal_cv_gmtime_r=yes ,
aclocal_gmtime_r=no ) aclocal_cv_gmtime_r=no )
]) ])
if test $aclocal_gmtime_r = yes; then if test $aclocal_cv_gmtime_r = yes; then
AC_DEFINE(HAVE_GMTIME_R,1,[Define to 1 if gmtime_r in time.h]) AC_DEFINE(HAVE_GMTIME_R,1,[Define to 1 if gmtime_r in time.h])
else else
AC_DEFINE(HAVE_GMTIME_R,0,[Define to 1 if gmtime_r in time.h]) AC_DEFINE(HAVE_GMTIME_R,0,[Define to 1 if gmtime_r in time.h])
@ -152,15 +190,15 @@ dnl
dnl Defines HAVE_LOCALTIME_R. dnl Defines HAVE_LOCALTIME_R.
dnl dnl
AC_DEFUN([ACLOCAL_CHECK_LOCALTIME_R], AC_DEFUN([ACLOCAL_CHECK_LOCALTIME_R],
[AC_CACHE_CHECK([for localtime_r],[aclocal_localtime_r], [AC_CACHE_CHECK([for localtime_r],[aclocal_cv_localtime_r],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <time.h>]], [[#include <time.h>]],
[[localtime_r((time_t*)0,(struct tm*)0) ;]])], [[localtime_r((time_t*)0,(struct tm*)0) ;]])],
aclocal_localtime_r=yes , aclocal_cv_localtime_r=yes ,
aclocal_localtime_r=no ) aclocal_cv_localtime_r=no )
]) ])
if test $aclocal_localtime_r = yes; then if test $aclocal_cv_localtime_r = yes; then
AC_DEFINE(HAVE_LOCALTIME_R,1,[Define to 1 if localtime_r in time.h]) AC_DEFINE(HAVE_LOCALTIME_R,1,[Define to 1 if localtime_r in time.h])
else else
AC_DEFINE(HAVE_LOCALTIME_R,0,[Define to 1 if localtime_r in time.h]) AC_DEFINE(HAVE_LOCALTIME_R,0,[Define to 1 if localtime_r in time.h])
@ -173,22 +211,34 @@ dnl Defines HAVE_BUGGY_CTIME if ctime + unistd.h doesnt compile.
dnl Needed for old versions of sunpro. Remove soon. dnl Needed for old versions of sunpro. Remove soon.
dnl dnl
AC_DEFUN([ACLOCAL_CHECK_BUGGY_CTIME], AC_DEFUN([ACLOCAL_CHECK_BUGGY_CTIME],
[AC_CACHE_CHECK([for buggy ctime],[aclocal_buggy_ctime], [AC_CACHE_CHECK([for buggy ctime],[aclocal_cv_buggy_ctime],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <ctime> [[#include <ctime>
#include <unistd.h>]], #include <unistd.h>]],
[[ ]])] , [[ ]])] ,
aclocal_buggy_ctime=no , aclocal_cv_buggy_ctime=no ,
aclocal_buggy_ctime=yes ) aclocal_cv_buggy_ctime=yes )
]) ])
if test $aclocal_buggy_ctime = yes; then if test $aclocal_cv_buggy_ctime = yes; then
AC_DEFINE(HAVE_BUGGY_CTIME,1,[Define to 1 if <ctime> requires <time.h>]) AC_DEFINE(HAVE_BUGGY_CTIME,1,[Define to 1 if <ctime> requires <time.h>])
else else
AC_DEFINE(HAVE_BUGGY_CTIME,0,[Define to 1 if <ctime> requires <time.h>]) AC_DEFINE(HAVE_BUGGY_CTIME,0,[Define to 1 if <ctime> requires <time.h>])
fi fi
]) ])
dnl aclocal-capabilities
dnl
dnl Sets G_CAPABILITIES to represent the configure options.
dnl
AC_DEFUN([ACLOCAL_CAPABILITIES],
[
changequote(<<,>>)
G_CAPABILITIES="@@`echo \"$ac_configure_args\" | sed 's/ /:/g' | sed 's/[^_A-Za-z0-9/=:]//g'`@@"
changequote([,])
AC_SUBST(G_CAPABILITIES)
])
dnl aclocal-compiler-version dnl aclocal-compiler-version
dnl dnl
dnl Sets COMPILER_VERSION in makefiles. dnl Sets COMPILER_VERSION in makefiles.
@ -207,6 +257,38 @@ changequote([,])
AC_SUBST(COMPILER_VERSION) AC_SUBST(COMPILER_VERSION)
]) ])
dnl aclocal-check-zlib
dnl
dnl Defines HAVE_ZLIB in code and ZLIB_LIBS in makefiles
dnl if zlib is available and enabled.
dnl
AC_DEFUN([WITH_ZLIB],
if test "$with_zlib" != "no"
then
[AC_CACHE_CHECK([for zlib],[aclocal_cv_zlib],
[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <zlib.h>]])],
aclocal_cv_zlib=yes,
aclocal_cv_zlib=no )
])
if test "$aclocal_cv_zlib" = "yes"
then
ZLIB_LIBS="-lz"
AC_DEFINE(HAVE_ZLIB,1,[Define to enable use of zlib])
else
if test "$with_zlib" = "yes"
then
AC_MSG_WARN([ignoring --with-zlib: check config.log and try setting CFLAGS])
fi
ZLIB_LIBS=""
fi
else
ZLIB_LIBS=""
fi
AC_SUBST(ZLIB_LIBS)
])
dnl aclocal-check-qt4 dnl aclocal-check-qt4
dnl dnl
dnl Sets the $MOC variable and MOC in makefiles to the moc dnl Sets the $MOC variable and MOC in makefiles to the moc
@ -217,11 +299,12 @@ dnl In the implementation remember that AC_PATH_PROG does
dnl nothing if the variable is already defined, and that dnl nothing if the variable is already defined, and that
dnl it does an internal AC_SUBST. dnl it does an internal AC_SUBST.
dnl dnl
dnl The PKG_CHECK_MODULES macro is used to modify CFLAGS etc. dnl The PKG_CHECK_MODULES macro is used to set QT_LIBS
dnl and QT_CFLAGS according to pkg-config.
dnl dnl
AC_DEFUN([ACLOCAL_CHECK_QT4], AC_DEFUN([ACLOCAL_CHECK_QT4],
[ [
PKG_CHECK_MODULES(QT,QtGui >= 4.0.1,[qt4=yes],[AC_MSG_RESULT([no])]) PKG_CHECK_MODULES(QT,QtGui >= 4.0.1,[qt4=yes],[qt4=no])
MOC="${e_qtmoc}" MOC="${e_qtmoc}"
AC_PATH_PROG(MOC,moc) AC_PATH_PROG(MOC,moc)
@ -238,6 +321,11 @@ AC_DEFUN([ACLOCAL_CHECK_QT4],
aclocal_moc="" aclocal_moc=""
fi fi
fi fi
if test "$qt4" = no -a "$e_qtmoc" = ""
then
aclocal_moc=""
fi
]) ])
dnl enable-gui dnl enable-gui
@ -254,7 +342,7 @@ AC_DEFUN([ENABLE_GUI],
else else
if test "$enable_gui" = "yes" -a "$aclocal_moc" = "" if test "$enable_gui" = "yes" -a "$aclocal_moc" = ""
then then
AC_MSG_WARN([ignoring --enable-gui, set e_qtmoc to a Qt4 moc program to override]) AC_MSG_WARN([ignoring --enable-gui: set e_qtmoc, QT_LIBS and QT_CFLAGS to override])
fi fi
MOC="$aclocal_moc" MOC="$aclocal_moc"
fi fi
@ -392,29 +480,6 @@ AC_DEFUN([ENABLE_IDENTITY],
AM_CONDITIONAL(IDENTITY,test x$enable_identity != xno) AM_CONDITIONAL(IDENTITY,test x$enable_identity != xno)
]) ])
dnl enable-small-fragments
dnl
dnl The "--enable-small-fragments" sewitch compiles certain source files in
dnl lots of little pieces so the linker can throw away fragments that
dnl are not needed in the final executable.
dnl
dnl This requires perl on the path and probably messes up a lot of
dnl autoconf/automake features, so only use if really necessary.
dnl
AC_DEFUN([ENABLE_SMALL_FRAGMENTS],
[
AM_CONDITIONAL(SMALL_FRAGMENTS,test x$enable_small_fragments = xyes)
if test x$enable_small_fragments = xyes
then
AC_MSG_NOTICE([creating source file fragments])
FRAGMENTS_LIST="`perl $srcdir/bin/fragment.pl_ -r $srcdir/src $srcdir/src/fragments`"
for fragment in $FRAGMENTS_LIST "" ; do if test "$fragment" != "" ; then
AC_MSG_NOTICE([creating source file fragment for $fragment])
fi ; done
fi
AC_SUBST(FRAGMENTS_LIST)
])
dnl enable-small-config dnl enable-small-config
dnl dnl
dnl The "--enable-small-config" switch replaces the complex command-line dnl The "--enable-small-config" switch replaces the complex command-line
@ -457,7 +522,7 @@ AC_DEFUN([ENABLE_IPV6],
[ [
if test "$enable_ipv6" = "yes" if test "$enable_ipv6" = "yes"
then then
if test "$aclocal_ipv6" != "yes" if test "$aclocal_cv_ipv6" != "yes"
then then
AC_MSG_WARN([ignoring --enable-ipv6]) AC_MSG_WARN([ignoring --enable-ipv6])
aclocal_use_ipv6="no" aclocal_use_ipv6="no"
@ -499,6 +564,16 @@ AC_DEFUN([ENABLE_MAC],
AM_CONDITIONAL(MAC,test x$enable_mac = xyes -o "`uname`" = "Darwin") AM_CONDITIONAL(MAC,test x$enable_mac = xyes -o "`uname`" = "Darwin")
]) ])
dnl enable-testing
dnl
dnl The "--disable-testing" switch turns off make-check tests.
dnl Eg. "make distcheck DISTCHECK_CONFIGURE_FLAGS=--disable-testing".
dnl
AC_DEFUN([ENABLE_TESTING],
[
AM_CONDITIONAL(TESTING,test x$enable_testing != xno)
])
dnl with-openssl dnl with-openssl
dnl dnl
dnl Sets SSL_LIBS and "if OPENSSL" in makefiles. dnl Sets SSL_LIBS and "if OPENSSL" in makefiles.
@ -506,22 +581,22 @@ dnl
AC_DEFUN([WITH_OPENSSL], AC_DEFUN([WITH_OPENSSL],
if test "$with_openssl" != "no" if test "$with_openssl" != "no"
then then
[AC_CACHE_CHECK([for openssl],[aclocal_openssl], [AC_CACHE_CHECK([for openssl],[aclocal_cv_openssl],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <openssl/ssl.h>]], [[#include <openssl/ssl.h>]],
[[SSL_CTX * p = 0 ; return 1;]])], [[SSL_CTX * p = 0 ; return 1;]])],
aclocal_openssl=yes, aclocal_cv_openssl=yes,
aclocal_openssl=no ) aclocal_cv_openssl=no )
]) ])
if test "$aclocal_openssl" = "yes" if test "$aclocal_cv_openssl" = "yes"
then then
SSL_LIBS="-lssl -lcrypto" SSL_LIBS="-lssl -lcrypto"
aclocal_ssl="openssl" aclocal_ssl="openssl"
else else
if test "$with_openssl" = "yes" if test "$with_openssl" = "yes"
then then
AC_MSG_WARN([ignoring --with-openssl, check config.log and try setting CFLAGS]) AC_MSG_WARN([ignoring --with-openssl: check config.log and try setting CFLAGS])
fi fi
SSL_LIBS="" SSL_LIBS=""
aclocal_ssl="none" aclocal_ssl="none"
@ -541,15 +616,15 @@ dnl
AC_DEFUN([WITH_GLOB], AC_DEFUN([WITH_GLOB],
if test "$with_glob" != "no" if test "$with_glob" != "no"
then then
[AC_CACHE_CHECK([for glob],[aclocal_have_glob], [AC_CACHE_CHECK([for glob],[aclocal_cv_have_glob],
[ [
AC_COMPILE_IFELSE([AC_LANG_PROGRAM( AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <glob.h>]], [[#include <glob.h>]],
[[glob_t * p = 0 ; globfree(p) ; return 1;]])], [[glob_t * p = 0 ; globfree(p) ; return 1;]])],
aclocal_have_glob=yes, aclocal_cv_have_glob=yes,
aclocal_have_glob=no ) aclocal_cv_have_glob=no )
]) ])
if test "$aclocal_have_glob" = "yes" if test "$aclocal_cv_have_glob" = "yes"
then then
aclocal_use_glob="yes" aclocal_use_glob="yes"
else else
@ -560,7 +635,7 @@ then
aclocal_use_glob="no" aclocal_use_glob="no"
fi fi
else else
if test "$aclocal_have_glob" = "yes" if test "$aclocal_cv_have_glob" = "yes"
then then
AC_MSG_WARN([not using available glob()]) AC_MSG_WARN([not using available glob()])
fi fi
@ -571,15 +646,17 @@ AM_CONDITIONAL(GLOB,test x$aclocal_use_glob = xyes)
dnl enable-static-linking dnl enable-static-linking
dnl dnl
dnl The "--enable-static-linking" makes a half-hearted dnl The "--enable-static-linking" makes a half-hearted attempt
dnl attempt at static linking. Only applicable to gcc. dnl at static linking. Only applicable to gcc. Note that statically
dnl linked openssl may require a statically linked zlib so try
dnl using "SSL_LIBS=-lssl -lcrypto -lz".
dnl dnl
AC_DEFUN([ENABLE_STATIC_LINKING], AC_DEFUN([ENABLE_STATIC_LINKING],
[ [
if test "$enable_static_linking" = "yes" if test "$enable_static_linking" = "yes"
then then
STATIC_START="-Xlinker -Bstatic" STATIC_START="-Xlinker -Bstatic"
STATIC_END="-Xlinker -Bdynamic -ldl" STATIC_END="${ZLIB_LIBS} -Xlinker -Bdynamic -ldl"
else else
STATIC_START="" STATIC_START=""
STATIC_END="" STATIC_END=""
@ -592,7 +669,7 @@ dnl enable-install-hook
dnl dnl
dnl The "--enable-install-hook" switch enables the editing dnl The "--enable-install-hook" switch enables the editing
dnl of "emailrelay.conf" with the correct install directories. dnl of "emailrelay.conf" with the correct install directories.
dnl This should be disabled when building an rpm package. dnl This should be disabled when building a package.
dnl dnl
AC_DEFUN([ENABLE_INSTALL_HOOK], AC_DEFUN([ENABLE_INSTALL_HOOK],
[ [
@ -639,9 +716,78 @@ AC_DEFUN([WITH_MAN2HTML],
AC_SUBST(HAVE_MAN2HTML) AC_SUBST(HAVE_MAN2HTML)
]) ])
dnl aclocal-check-pam-headers
dnl
dnl Defines aclocal_cv_pam_headers_in_pam if PAM headers are in /usr/include/pam.
dnl
AC_DEFUN([ACLOCAL_CHECK_PAM_HEADERS],
[AC_CACHE_CHECK([for pam headers in /usr/include/pam],[aclocal_cv_pam_headers_in_pam],
[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <pam/pam_appl.h>]],
[[ ]])] ,
aclocal_cv_pam_headers_in_pam=yes ,
aclocal_cv_pam_headers_in_pam=no )
])
])
dnl aclocal-check-pam
dnl
dnl Check for pam availability.
dnl
AC_DEFUN([ACLOCAL_CHECK_PAM],
[AC_CACHE_CHECK([for linux pam],[aclocal_cv_pam_compiles],
[
if test "$aclocal_cv_pam_headers_in_pam" = "yes"
then
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <pam/pam_appl.h>]],
[[int rc = pam_start("","",(const struct pam_conv*)0,(pam_handle_t**)0)]])] ,
aclocal_cv_pam_compiles=yes ,
aclocal_cv_pam_compiles=no )
else
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include <security/pam_appl.h>]],
[[int rc = pam_start("","",(const struct pam_conv*)0,(pam_handle_t**)0)]])] ,
aclocal_cv_pam_compiles=yes ,
aclocal_cv_pam_compiles=no )
fi
])
])
dnl with-pam
dnl
AC_DEFUN([WITH_PAM],
[
aclocal_cv_use_pam="$with_pam"
if test "$aclocal_cv_use_pam" = ""
then
aclocal_cv_use_pam="$aclocal_cv_pam_compiles"
fi
if test "$aclocal_cv_use_pam" = "yes"
then
if test "$aclocal_cv_pam_compiles" = "no"
then
AC_MSG_WARN([forcing use of pam even though it does not seem to compile])
fi
PAM_LIBS="-lpam"
if test "$aclocal_cv_pam_headers_in_pam" = "yes"
then
PAM_INCLUDE="-I/usr/include/pam"
else
PAM_INCLUDE="-I/usr/include/security"
fi
fi
AC_SUBST(PAM_LIBS)
AC_SUBST(PAM_INCLUDE)
AM_CONDITIONAL(PAM,test x$aclocal_cv_use_pam = xyes)
])
dnl set-directories dnl set-directories
dnl dnl
dnl Sets directory paths taking account of "--enable-fhs". dnl Sets directory paths.
dnl dnl
AC_DEFUN([SET_DIRECTORIES], AC_DEFUN([SET_DIRECTORIES],
[ [
@ -650,79 +796,48 @@ AC_DEFUN([SET_DIRECTORIES],
# * e_libexecdir # * e_libexecdir
# * e_examplesdir # * e_examplesdir
# * e_sysconfdir # * e_sysconfdir
# * e_pamdir
# * mandir # * mandir
# * e_docdir # * e_docdir
# * e_spooldir # * e_spooldir
# * e_initdir # * e_initdir
# * e_icondir
if test "$enable_fhs" = "yes"
then
prefix='/usr'
exec_prefix='/usr'
sbindir="/usr/sbin"
libexecdir="/usr/lib"
localstatedir="/var"
mandir="/usr/share/man"
datadir="/usr/share"
sysconfdir="/etc"
fi
if test "$e_libexecdir" = "" if test "$e_libexecdir" = ""
then then
if test "$enable_fhs" = "yes" e_libexecdir="$libexecdir/$PACKAGE"
then
e_libexecdir="$libexecdir/$PACKAGE"
else
e_libexecdir="$libexecdir/$PACKAGE"
fi
fi fi
if test "$e_examplesdir" = "" if test "$e_examplesdir" = ""
then then
if test "$enable_fhs" = "yes" e_examplesdir="$libexecdir/$PACKAGE/examples"
then
e_examplesdir="$libexecdir/$PACKAGE/examples"
else
e_examplesdir="$libexecdir/$PACKAGE/examples"
fi
fi fi
if test "$e_sysconfdir" = "" if test "$e_sysconfdir" = ""
then then
if test "$enable_fhs" = "yes" e_sysconfdir="$sysconfdir"
then
e_sysconfdir="$sysconfdir"
else
e_sysconfdir="$sysconfdir"
fi
fi fi
if test "$e_docdir" = "" if test "$e_docdir" = ""
then then
if test "$enable_fhs" = "yes" e_docdir="$docdir"
then if test "$e_docdir" = ""
e_docdir="$datadir/doc/$PACKAGE" then
else e_docdir="$datadir/$PACKAGE/doc"
e_docdir="$docdir"
if test "$e_docdir" = ""
then
e_docdir="$datadir/$PACKAGE/doc"
fi
fi fi
fi fi
if test "$e_spooldir" = "" if test "$e_spooldir" = ""
then then
if test "$enable_fhs" = "yes" e_spooldir="$localstatedir/spool/$PACKAGE"
then fi
e_spooldir="$localstatedir/spool/$PACKAGE" if test "$e_pamdir" = ""
else then
e_spooldir="$localstatedir/spool/$PACKAGE" e_pamdir="$sysconfdir/pam.d"
fi
fi fi
if test "$e_initdir" = "" if test "$e_initdir" = ""
then then
if test "$enable_fhs" = "yes" e_initdir="$libexecdir/$PACKAGE/init"
then fi
e_initdir="/etc/init.d" if test "$e_icondir" = ""
else then
e_initdir="$libexecdir/$PACKAGE/init" e_icondir="$datadir/$PACKAGE"
fi
fi fi
]) ])

432
aclocal.m4 vendored
View File

@ -1,7 +1,8 @@
# generated automatically by aclocal 1.10.1 -*- Autoconf -*- # generated automatically by aclocal 1.11.3 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
# Inc.
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -13,13 +14,14 @@
m4_ifndef([AC_AUTOCONF_VERSION], m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(AC_AUTOCONF_VERSION, [2.61],, m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
[m4_warning([this file was generated for autoconf 2.61. [m4_warning([this file was generated for autoconf 2.68.
You have another version of autoconf. It may work, but is not guaranteed to. You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely. If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.])]) To do so, use the procedure documented by the package, typically `autoreconf'.])])
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
# serial 1 (pkg-config-0.24)
# #
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>. # Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
# #
@ -46,8 +48,12 @@ To do so, use the procedure documented by the package, typically `autoreconf'.])
# ---------------------------------- # ----------------------------------
AC_DEFUN([PKG_PROG_PKG_CONFIG], AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) [m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi fi
@ -60,7 +66,6 @@ if test -n "$PKG_CONFIG"; then
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
PKG_CONFIG="" PKG_CONFIG=""
fi fi
fi[]dnl fi[]dnl
])# PKG_PROG_PKG_CONFIG ])# PKG_PROG_PKG_CONFIG
@ -69,34 +74,32 @@ fi[]dnl
# Check to see whether a particular set of modules exists. Similar # Check to see whether a particular set of modules exists. Similar
# to PKG_CHECK_MODULES(), but does not set variables or print errors. # to PKG_CHECK_MODULES(), but does not set variables or print errors.
# #
# # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
# Similar to PKG_CHECK_MODULES, make sure that the first instance of # only at the first occurence in configure.ac, so if the first place
# this or PKG_CHECK_MODULES is called, or make sure to call # it's called might be skipped (such as if it is within an "if", you
# PKG_CHECK_EXISTS manually # have to call PKG_CHECK_EXISTS manually
# -------------------------------------------------------------- # --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_EXISTS], AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
m4_ifval([$2], [$2], [:]) m4_default([$2], [:])
m4_ifvaln([$3], [else m4_ifvaln([$3], [else
$3])dnl $3])dnl
fi]) fi])
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
# --------------------------------------------- # ---------------------------------------------
m4_define([_PKG_CONFIG], m4_define([_PKG_CONFIG],
[if test -n "$PKG_CONFIG"; then [if test -n "$$1"; then
if test -n "$$1"; then pkg_cv_[]$1="$$1"
pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then
else PKG_CHECK_EXISTS([$3],
PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], test "x$?" != "x0" && pkg_failed=yes ],
[pkg_failed=yes]) [pkg_failed=yes])
fi else
else pkg_failed=untried
pkg_failed=untried
fi[]dnl fi[]dnl
])# _PKG_CONFIG ])# _PKG_CONFIG
@ -138,16 +141,17 @@ and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.]) See the pkg-config man page for more details.])
if test $pkg_failed = yes; then if test $pkg_failed = yes; then
AC_MSG_RESULT([no])
_PKG_SHORT_ERRORS_SUPPORTED _PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
else else
$1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
fi fi
# Put the nasty error message in config.log where it belongs # Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
ifelse([$4], , [AC_MSG_ERROR(dnl m4_default([$4], [AC_MSG_ERROR(
[Package requirements ($2) were not met: [Package requirements ($2) were not met:
$$1_PKG_ERRORS $$1_PKG_ERRORS
@ -155,44 +159,46 @@ $$1_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix. installed software in a non-standard prefix.
_PKG_TEXT _PKG_TEXT])[]dnl
])], ])
[AC_MSG_RESULT([no])
$4])
elif test $pkg_failed = untried; then elif test $pkg_failed = untried; then
ifelse([$4], , [AC_MSG_FAILURE(dnl AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old. Make sure it [The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config. path to pkg-config.
_PKG_TEXT _PKG_TEXT
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])], To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
[$4]) ])
else else
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
ifelse([$3], , :, [$3]) $3
fi[]dnl fi[]dnl
])# PKG_CHECK_MODULES ])# PKG_CHECK_MODULES
# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
# Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 1
# AM_AUTOMAKE_VERSION(VERSION) # AM_AUTOMAKE_VERSION(VERSION)
# ---------------------------- # ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been # Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y. # generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.) # (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION], AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.10' [am__api_version='1.11'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro. dnl require some minimum version. Point them to the right macro.
m4_if([$1], [1.10.1], [], m4_if([$1], [1.11.3], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
]) ])
@ -206,21 +212,23 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# AM_SET_CURRENT_AUTOMAKE_VERSION # AM_SET_CURRENT_AUTOMAKE_VERSION
# ------------------------------- # -------------------------------
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.10.1])dnl [AM_AUTOMAKE_VERSION([1.11.3])dnl
m4_ifndef([AC_AUTOCONF_VERSION], m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)]) _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*- # AM_AUX_DIR_EXPAND -*- Autoconf -*-
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 1
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
# `$srcdir', `$srcdir/..', or `$srcdir/../..'. # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
@ -268,14 +276,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
# AM_CONDITIONAL -*- Autoconf -*- # AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 8 # serial 9
# AM_CONDITIONAL(NAME, SHELL-CONDITION) # AM_CONDITIONAL(NAME, SHELL-CONDITION)
# ------------------------------------- # -------------------------------------
@ -288,6 +296,7 @@ AC_SUBST([$1_TRUE])dnl
AC_SUBST([$1_FALSE])dnl AC_SUBST([$1_FALSE])dnl
_AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl
_AM_SUBST_NOTMAKE([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl
m4_define([_AM_COND_VALUE_$1], [$2])dnl
if $2; then if $2; then
$1_TRUE= $1_TRUE=
$1_FALSE='#' $1_FALSE='#'
@ -301,14 +310,14 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]]) Usually this means the macro was only invoked conditionally.]])
fi])]) fi])])
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
# Free Software Foundation, Inc. # 2010, 2011 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 9 # serial 12
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4, # written in clear, in which case automake, when reading aclocal.m4,
@ -348,6 +357,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
# instance it was reported that on HP-UX the gcc test will end up # instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output # making a dummy file named `D' -- because `-MD' means `put the output
# in D'. # in D'.
rm -rf conftest.dir
mkdir conftest.dir mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're # Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory. # using a relative directory.
@ -365,6 +375,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
if test "$am_compiler_list" = ""; then if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi fi
am__universal=false
m4_case([$1], [CC],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac],
[CXX],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac])
for depmode in $am_compiler_list; do for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers # Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and # like to wrap large dependency lists on column 80 (with \), and
@ -382,7 +402,17 @@ AC_CACHE_CHECK([dependency style of $depcc],
done done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this. Also, some Intel
# versions had trouble with output in subdirs
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in case $depmode in
gcc)
# This depmode causes a compiler race in universal mode.
test "$am__universal" = false || continue
;;
nosideeffect) nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll # after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested # only be used when explicitly requested
@ -392,19 +422,23 @@ AC_CACHE_CHECK([dependency style of $depcc],
break break
fi fi
;; ;;
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
# This compiler won't grok `-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
am__minus_obj=
;;
none) break ;; none) break ;;
esac esac
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
if depmode=$depmode \ if depmode=$depmode \
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ source=sub/conftest.c object=$am__obj \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
>/dev/null 2>conftest.err && >/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings # icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message # or remarks (even with -Werror). So we grep stderr for any message
@ -453,65 +487,79 @@ AC_DEFUN([AM_DEP_TRACK],
if test "x$enable_dependency_tracking" != xno; then if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp" am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\' AMDEPBACKSLASH='\'
am__nodep='_no'
fi fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])dnl AC_SUBST([AMDEPBACKSLASH])dnl
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
AC_SUBST([am__nodep])dnl
_AM_SUBST_NOTMAKE([am__nodep])dnl
]) ])
# Generate code to set up dependency tracking. -*- Autoconf -*- # Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
#serial 3 #serial 5
# _AM_OUTPUT_DEPENDENCY_COMMANDS # _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------ # ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[for mf in $CONFIG_FILES; do [{
# Strip MF so we end up with the name of the file. # Autoconf 2.62 quotes --file arguments for eval, but not when files
mf=`echo "$mf" | sed -e 's/:.*$//'` # are listed without --file. Let's play safe and only enable the eval
# Check whether this is an Automake generated Makefile or not. # if we detect the quoting.
# We used to match only the files named `Makefile.in', but case $CONFIG_FILES in
# some people rename them; so instead we look at the file content. *\'*) eval set x "$CONFIG_FILES" ;;
# Grep'ing the first line is not enough: some people post-process *) set x $CONFIG_FILES ;;
# each Makefile.in and add a new line on top of each file to say so. esac
# Grep'ing the whole file is not good either: AIX grep has a line shift
# limit of 2048, but all sed's we know have understand at least 4000. for mf
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then do
dirpart=`AS_DIRNAME("$mf")` # Strip MF so we end up with the name of the file.
else mf=`echo "$mf" | sed -e 's/:.*$//'`
continue # Check whether this is an Automake generated Makefile or not.
fi # We used to match only the files named `Makefile.in', but
# Extract the definition of DEPDIR, am__include, and am__quote # some people rename them; so instead we look at the file content.
# from the Makefile without running `make'. # Grep'ing the first line is not enough: some people post-process
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` # each Makefile.in and add a new line on top of each file to say so.
test -z "$DEPDIR" && continue # Grep'ing the whole file is not good either: AIX grep has a line
am__include=`sed -n 's/^am__include = //p' < "$mf"` # limit of 2048, but all sed's we know have understand at least 4000.
test -z "am__include" && continue if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
am__quote=`sed -n 's/^am__quote = //p' < "$mf"` dirpart=`AS_DIRNAME("$mf")`
# When using ansi2knr, U may be empty or an underscore; expand it else
U=`sed -n 's/^U = //p' < "$mf"` continue
# Find all dependency output files, they are included files with fi
# $(DEPDIR) in their names. We invoke sed twice because it is the # Extract the definition of DEPDIR, am__include, and am__quote
# simplest approach to changing $(DEPDIR) to its actual value in the # from the Makefile without running `make'.
# expansion. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
for file in `sed -n " test -z "$DEPDIR" && continue
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ am__include=`sed -n 's/^am__include = //p' < "$mf"`
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do test -z "am__include" && continue
# Make sure the directory exists. am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
test -f "$dirpart/$file" && continue # When using ansi2knr, U may be empty or an underscore; expand it
fdir=`AS_DIRNAME(["$file"])` U=`sed -n 's/^U = //p' < "$mf"`
AS_MKDIR_P([$dirpart/$fdir]) # Find all dependency output files, they are included files with
# echo "creating $dirpart/$file" # $(DEPDIR) in their names. We invoke sed twice because it is the
echo '# dummy' > "$dirpart/$file" # simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`AS_DIRNAME(["$file"])`
AS_MKDIR_P([$dirpart/$fdir])
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done done
done }
])# _AM_OUTPUT_DEPENDENCY_COMMANDS ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
@ -543,13 +591,13 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
# Do all the work for Automake. -*- Autoconf -*- # Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2008 Free Software Foundation, Inc. # 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 13 # serial 16
# This macro actually does too much. Some checks are only needed if # This macro actually does too much. Some checks are only needed if
# your package does certain things. But this isn't really a big deal. # your package does certain things. But this isn't really a big deal.
@ -566,7 +614,7 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
# arguments mandatory, and then we can depend on a new Autoconf # arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support. # release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE], AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.60])dnl [AC_PREREQ([2.62])dnl
dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl Autoconf wants to disallow AM_ names. We explicitly allow
dnl the ones we care about. dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@ -617,8 +665,8 @@ AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo) AM_MISSING_PROG(MAKEINFO, makeinfo)
AM_PROG_INSTALL_SH AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AM_PROG_MKDIR_P])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl
# We need awk for the "check" target. The system "awk" is bad on # We need awk for the "check" target. The system "awk" is bad on
# some platforms. # some platforms.
@ -626,24 +674,37 @@ AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
[_AM_PROG_TAR([v7])])]) [_AM_PROG_TAR([v7])])])
_AM_IF_OPTION([no-dependencies],, _AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_CC], [AC_PROVIDE_IFELSE([AC_PROG_CC],
[_AM_DEPENDENCIES(CC)], [_AM_DEPENDENCIES(CC)],
[define([AC_PROG_CC], [define([AC_PROG_CC],
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX], AC_PROVIDE_IFELSE([AC_PROG_CXX],
[_AM_DEPENDENCIES(CXX)], [_AM_DEPENDENCIES(CXX)],
[define([AC_PROG_CXX], [define([AC_PROG_CXX],
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_OBJC], AC_PROVIDE_IFELSE([AC_PROG_OBJC],
[_AM_DEPENDENCIES(OBJC)], [_AM_DEPENDENCIES(OBJC)],
[define([AC_PROG_OBJC], [define([AC_PROG_OBJC],
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
]) ])
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT],
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
]) ])
dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
dnl mangled by Autoconf and run in a shell conditional statement.
m4_define([_AC_COMPILER_EXEEXT],
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
# When config.status generates a header, we must update the stamp-h file. # When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header # This file resides in the same directory as the config header
@ -666,18 +727,28 @@ for _am_header in $config_headers :; do
done done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
# Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 1
# AM_PROG_INSTALL_SH # AM_PROG_INSTALL_SH
# ------------------ # ------------------
# Define $install_sh. # Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH], AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} if test x"${install_sh}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
*)
install_sh="\${SHELL} $am_aux_dir/install-sh"
esac
fi
AC_SUBST(install_sh)]) AC_SUBST(install_sh)])
# Copyright (C) 2003, 2005 Free Software Foundation, Inc. # Copyright (C) 2003, 2005 Free Software Foundation, Inc.
@ -704,27 +775,38 @@ AC_SUBST([am__leading_dot])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering # From Jim Meyering
# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
# Free Software Foundation, Inc. # 2011 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 4 # serial 5
# AM_MAINTAINER_MODE([DEFAULT-MODE])
# ----------------------------------
# Control maintainer-specific portions of Makefiles.
# Default is to disable them, unless `enable' is passed literally.
# For symmetry, `disable' may be passed as well. Anyway, the user
# can override the default with the --enable/--disable switch.
AC_DEFUN([AM_MAINTAINER_MODE], AC_DEFUN([AM_MAINTAINER_MODE],
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) [m4_case(m4_default([$1], [disable]),
dnl maintainer-mode is disabled by default [enable], [m4_define([am_maintainer_other], [disable])],
AC_ARG_ENABLE(maintainer-mode, [disable], [m4_define([am_maintainer_other], [enable])],
[ --enable-maintainer-mode enable make rules and dependencies not useful [m4_define([am_maintainer_other], [enable])
m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
dnl maintainer-mode's default is 'disable' unless 'enable' is passed
AC_ARG_ENABLE([maintainer-mode],
[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
(and sometimes confusing) to the casual installer], (and sometimes confusing) to the casual installer],
USE_MAINTAINER_MODE=$enableval, [USE_MAINTAINER_MODE=$enableval],
USE_MAINTAINER_MODE=no) [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AC_MSG_RESULT([$USE_MAINTAINER_MODE])
AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
MAINT=$MAINTAINER_MODE_TRUE MAINT=$MAINTAINER_MODE_TRUE
AC_SUBST(MAINT)dnl AC_SUBST([MAINT])dnl
] ]
) )
@ -732,13 +814,13 @@ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
# Check to see how 'make' treats includes. -*- Autoconf -*- # Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 3 # serial 4
# AM_MAKE_INCLUDE() # AM_MAKE_INCLUDE()
# ----------------- # -----------------
@ -747,7 +829,7 @@ AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make} [am_make=${MAKE-make}
cat > confinc << 'END' cat > confinc << 'END'
am__doit: am__doit:
@echo done @echo this is the am__doit target
.PHONY: am__doit .PHONY: am__doit
END END
# If we don't find an include directive, just comment out the code. # If we don't find an include directive, just comment out the code.
@ -757,24 +839,24 @@ am__quote=
_am_result=none _am_result=none
# First try GNU make style include. # First try GNU make style include.
echo "include confinc" > confmf echo "include confinc" > confmf
# We grep out `Entering directory' and `Leaving directory' # Ignore all kinds of additional output from `make'.
# messages which can occur if `w' ends up in MAKEFLAGS. case `$am_make -s -f confmf 2> /dev/null` in #(
# In particular we don't look at `^make:' because GNU make might *the\ am__doit\ target*)
# be invoked under some other name (usually "gmake"), in which am__include=include
# case it prints its new name instead of `make'. am__quote=
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then _am_result=GNU
am__include=include ;;
am__quote= esac
_am_result=GNU
fi
# Now try BSD make style include. # Now try BSD make style include.
if test "$am__include" = "#"; then if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then case `$am_make -s -f confmf 2> /dev/null` in #(
am__include=.include *the\ am__doit\ target*)
am__quote="\"" am__include=.include
_am_result=BSD am__quote="\""
fi _am_result=BSD
;;
esac
fi fi
AC_SUBST([am__include]) AC_SUBST([am__include])
AC_SUBST([am__quote]) AC_SUBST([am__quote])
@ -784,14 +866,14 @@ rm -f confinc confmf
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 5 # serial 6
# AM_MISSING_PROG(NAME, PROGRAM) # AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------ # ------------------------------
@ -808,7 +890,14 @@ AC_SUBST($1)])
AC_DEFUN([AM_MISSING_HAS_RUN], AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl AC_REQUIRE_AUX_FILE([missing])dnl
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
*)
MISSING="\${SHELL} $am_aux_dir/missing" ;;
esac
fi
# Use eval to expand $SHELL # Use eval to expand $SHELL
if eval "$MISSING --run true"; then if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run " am_missing_run="$MISSING --run "
@ -818,12 +907,15 @@ else
fi fi
]) ])
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
# Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 1
# AM_PROG_MKDIR_P # AM_PROG_MKDIR_P
# --------------- # ---------------
# Check for `mkdir -p'. # Check for `mkdir -p'.
@ -846,13 +938,14 @@ esac
# Helper functions for option handling. -*- Autoconf -*- # Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
# Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 3 # serial 5
# _AM_MANGLE_OPTION(NAME) # _AM_MANGLE_OPTION(NAME)
# ----------------------- # -----------------------
@ -860,16 +953,16 @@ AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
# _AM_SET_OPTION(NAME) # _AM_SET_OPTION(NAME)
# ------------------------------ # --------------------
# Set option NAME. Presently that only means defining a flag for this option. # Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION], AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
# _AM_SET_OPTIONS(OPTIONS) # _AM_SET_OPTIONS(OPTIONS)
# ---------------------------------- # ------------------------
# OPTIONS is a space-separated list of Automake options. # OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_SET_OPTIONS],
[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
# ------------------------------------------- # -------------------------------------------
@ -879,14 +972,14 @@ AC_DEFUN([_AM_IF_OPTION],
# Check to make sure that the build environment is sane. -*- Autoconf -*- # Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 4 # serial 5
# AM_SANITY_CHECK # AM_SANITY_CHECK
# --------------- # ---------------
@ -895,16 +988,29 @@ AC_DEFUN([AM_SANITY_CHECK],
# Just in case # Just in case
sleep 1 sleep 1
echo timestamp > conftest.file echo timestamp > conftest.file
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
'
case `pwd` in
*[[\\\"\#\$\&\'\`$am_lf]]*)
AC_MSG_ERROR([unsafe absolute working directory name]);;
esac
case $srcdir in
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
esac
# Do `set' in a subshell so we don't clobber the current shell's # Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a # arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks # symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing # (eg FreeBSD returns the mod time of the symlink's containing
# directory). # directory).
if ( if (
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
if test "$[*]" = "X"; then if test "$[*]" = "X"; then
# -L didn't work. # -L didn't work.
set X `ls -t $srcdir/configure conftest.file` set X `ls -t "$srcdir/configure" conftest.file`
fi fi
rm -f conftest.file rm -f conftest.file
if test "$[*]" != "X $srcdir/configure conftest.file" \ if test "$[*]" != "X $srcdir/configure conftest.file" \
@ -929,12 +1035,14 @@ Check your system clock])
fi fi
AC_MSG_RESULT(yes)]) AC_MSG_RESULT(yes)])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 1
# AM_PROG_INSTALL_STRIP # AM_PROG_INSTALL_STRIP
# --------------------- # ---------------------
# One issue with vendor `install' (even GNU) is that you can't # One issue with vendor `install' (even GNU) is that you can't
@ -957,21 +1065,28 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])]) AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Copyright (C) 2006 Free Software Foundation, Inc. # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
# serial 3
# _AM_SUBST_NOTMAKE(VARIABLE) # _AM_SUBST_NOTMAKE(VARIABLE)
# --------------------------- # ---------------------------
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
# This macro is traced by Automake. # This macro is traced by Automake.
AC_DEFUN([_AM_SUBST_NOTMAKE]) AC_DEFUN([_AM_SUBST_NOTMAKE])
# AM_SUBST_NOTMAKE(VARIABLE)
# --------------------------
# Public sister of _AM_SUBST_NOTMAKE.
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*- # Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004, 2005 Free Software Foundation, Inc. # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -993,10 +1108,11 @@ AC_DEFUN([_AM_SUBST_NOTMAKE])
# a tarball read from stdin. # a tarball read from stdin.
# $(am__untar) < result.tar # $(am__untar) < result.tar
AC_DEFUN([_AM_PROG_TAR], AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility. [# Always define AMTAR for backward compatibility. Yes, it's still used
AM_MISSING_PROG([AMTAR], [tar]) # in the wild :-( We should find a proper way to deprecate it ...
AC_SUBST([AMTAR], ['$${TAR-tar}'])
m4_if([$1], [v7], m4_if([$1], [v7],
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
[m4_case([$1], [ustar],, [pax],, [m4_case([$1], [ustar],, [pax],,
[m4_fatal([Unknown tar format])]) [m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive]) AC_MSG_CHECKING([how to create a $1 tar archive])

2
autogen.sh Normal file → Executable file
View File

@ -7,4 +7,4 @@
aclocal aclocal
autoconf autoconf
autoheader autoheader
automake -a automake -a -Woverride -Wportability

View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,
@ -26,6 +26,7 @@ endif
EXTRA_DIST = \ EXTRA_DIST = \
emailrelay.sh_ \ emailrelay.sh_ \
doxygen.sh_ \ doxygen.sh_ \
doxygen_fixup.pl_ \
txt2html.sh_ \ txt2html.sh_ \
txt2mu.sh_ \ txt2mu.sh_ \
mu2html.sh_ \ mu2html.sh_ \
@ -37,18 +38,21 @@ EXTRA_DIST = \
emailrelay-process.sh_ \ emailrelay-process.sh_ \
emailrelay-runperl.js \ emailrelay-runperl.js \
emailrelay-resubmit.js \ emailrelay-resubmit.js \
emailrelay-change-auth.js \ emailrelay-edit-content.js \
emailrelay-edit-envelope.js \
emailrelay-submit.sh_ \ emailrelay-submit.sh_ \
emailrelay-multicast.sh_ \ emailrelay-multicast.sh_ \
make-setup.sh_ \ make-setup.sh_ \
make-qt-enabled.sh_ \ make-qt-enabled.sh_ \
make-bundle.sh_ \ make-bundle.sh_ \
configure-dev.sh \
configure-fhs.sh \
configure-mac.sh \ configure-mac.sh \
startup-mac.plist \ startup-mac.plist
fragment.pl_
work_scripts = \ work_scripts = \
doxygen.sh \ doxygen.sh \
doxygen_fixup.pl \
txt2mu.sh \ txt2mu.sh \
mu2html.sh \ mu2html.sh \
mu2docbook.sh \ mu2docbook.sh \
@ -57,13 +61,13 @@ work_scripts = \
emailrelay.sh \ emailrelay.sh \
make-setup.sh \ make-setup.sh \
make-qt-enabled.sh \ make-qt-enabled.sh \
make-bundle.sh \ make-bundle.sh
fragment.pl
noinst_SCRIPTS = \ noinst_SCRIPTS = \
emailrelay-runperl.js \ emailrelay-runperl.js \
emailrelay-resubmit.js \ emailrelay-resubmit.js \
emailrelay-change-auth.js \ emailrelay-edit-content.js \
emailrelay-edit-envelope.js \
$(work_scripts) $(work_scripts)
e_examples_DATA = \ e_examples_DATA = \
@ -74,9 +78,9 @@ e_examples_DATA = \
emailrelay-submit.sh \ emailrelay-submit.sh \
emailrelay-multicast.sh emailrelay-multicast.sh
CLEANFILES = $(e_init_SCRIPTS) $(e_examples_DATA) $(work_scripts) $(e_init_SCRIPTS) CLEANFILES = $(e_init_SCRIPTS) $(e_examples_DATA) $(work_scripts)
SUFFIXES = .sh_ .sh SUFFIXES = .sh_ .sh .pl_ .pl
.sh_.sh: .sh_.sh:
cat "$(top_srcdir)/bin/$*.sh_" | sed "s%__SPOOL_DIR__%${e_spooldir}%g;s%__SBIN_DIR__%${sbindir}%g;s%__SYSCONF_DIR__%${e_sysconfdir}%g;"'s/\[:digit:\]/0-9/g;s/\[:space:\]/ \\t/g' > "$*.tmp" && mv "$*.tmp" "$*.sh" cat "$(top_srcdir)/bin/$*.sh_" | sed "s%__SPOOL_DIR__%${e_spooldir}%g;s%__SBIN_DIR__%${sbindir}%g;s%__SYSCONF_DIR__%${e_sysconfdir}%g;"'s/\[:digit:\]/0-9/g;s/\[:space:\]/ \\t/g' > "$*.tmp" && mv "$*.tmp" "$*.sh"

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am. # Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -20,8 +21,9 @@
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
@ -44,20 +46,39 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(e_initdir)" \ CONFIG_CLEAN_VPATH_FILES =
"$(DESTDIR)$(e_examplesdir)" "$(DESTDIR)$(e_initdir)"
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_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \ am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \ *) f=$$p;; \
esac; esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
e_examplesDATA_INSTALL = $(INSTALL_DATA) am__install_max = 40
e_initDATA_INSTALL = $(INSTALL_DATA) am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(e_initdir)" \
"$(DESTDIR)$(e_examplesdir)" "$(DESTDIR)$(e_initdir)"
SCRIPTS = $(e_init_SCRIPTS) $(noinst_SCRIPTS)
SOURCES =
DIST_SOURCES =
DATA = $(e_examples_DATA) $(e_init_DATA) DATA = $(e_examples_DATA) $(e_init_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
@ -84,9 +105,9 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
GREP = @GREP@ GREP = @GREP@
GZIP = @GZIP@ GZIP = @GZIP@
G_CAPABILITIES = @G_CAPABILITIES@
HAVE_DOXYGEN = @HAVE_DOXYGEN@ HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@ HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@ -109,9 +130,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PAM_INCLUDE = @PAM_INCLUDE@
PAM_LIBS = @PAM_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
QT_CFLAGS = @QT_CFLAGS@ QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@ QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -122,6 +148,7 @@ STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@ STATIC_START = @STATIC_START@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ZLIB_LIBS = @ZLIB_LIBS@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@ abs_top_builddir = @abs_top_builddir@
@ -142,8 +169,10 @@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
e_docdir = @e_docdir@ e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@ e_examplesdir = @e_examplesdir@
e_icondir = @e_icondir@
e_initdir = @e_initdir@ e_initdir = @e_initdir@
e_libexecdir = @e_libexecdir@ e_libexecdir = @e_libexecdir@
e_pamdir = @e_pamdir@
e_qtmoc = @e_qtmoc@ e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@ e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@ e_sysconfdir = @e_sysconfdir@
@ -169,6 +198,7 @@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
@MAC_FALSE@e_init_SCRIPTS = emailrelay @MAC_FALSE@e_init_SCRIPTS = emailrelay
@ -178,6 +208,7 @@ top_srcdir = @top_srcdir@
EXTRA_DIST = \ EXTRA_DIST = \
emailrelay.sh_ \ emailrelay.sh_ \
doxygen.sh_ \ doxygen.sh_ \
doxygen_fixup.pl_ \
txt2html.sh_ \ txt2html.sh_ \
txt2mu.sh_ \ txt2mu.sh_ \
mu2html.sh_ \ mu2html.sh_ \
@ -189,18 +220,21 @@ EXTRA_DIST = \
emailrelay-process.sh_ \ emailrelay-process.sh_ \
emailrelay-runperl.js \ emailrelay-runperl.js \
emailrelay-resubmit.js \ emailrelay-resubmit.js \
emailrelay-change-auth.js \ emailrelay-edit-content.js \
emailrelay-edit-envelope.js \
emailrelay-submit.sh_ \ emailrelay-submit.sh_ \
emailrelay-multicast.sh_ \ emailrelay-multicast.sh_ \
make-setup.sh_ \ make-setup.sh_ \
make-qt-enabled.sh_ \ make-qt-enabled.sh_ \
make-bundle.sh_ \ make-bundle.sh_ \
configure-dev.sh \
configure-fhs.sh \
configure-mac.sh \ configure-mac.sh \
startup-mac.plist \ startup-mac.plist
fragment.pl_
work_scripts = \ work_scripts = \
doxygen.sh \ doxygen.sh \
doxygen_fixup.pl \
txt2mu.sh \ txt2mu.sh \
mu2html.sh \ mu2html.sh \
mu2docbook.sh \ mu2docbook.sh \
@ -209,13 +243,13 @@ work_scripts = \
emailrelay.sh \ emailrelay.sh \
make-setup.sh \ make-setup.sh \
make-qt-enabled.sh \ make-qt-enabled.sh \
make-bundle.sh \ make-bundle.sh
fragment.pl
noinst_SCRIPTS = \ noinst_SCRIPTS = \
emailrelay-runperl.js \ emailrelay-runperl.js \
emailrelay-resubmit.js \ emailrelay-resubmit.js \
emailrelay-change-auth.js \ emailrelay-edit-content.js \
emailrelay-edit-envelope.js \
$(work_scripts) $(work_scripts)
e_examples_DATA = \ e_examples_DATA = \
@ -226,24 +260,24 @@ e_examples_DATA = \
emailrelay-submit.sh \ emailrelay-submit.sh \
emailrelay-multicast.sh emailrelay-multicast.sh
CLEANFILES = $(e_init_SCRIPTS) $(e_examples_DATA) $(work_scripts) $(e_init_SCRIPTS) CLEANFILES = $(e_init_SCRIPTS) $(e_examples_DATA) $(work_scripts)
SUFFIXES = .sh_ .sh SUFFIXES = .sh_ .sh .pl_ .pl
all: all-am all: all-am
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .sh_ .sh .pl .pl_ .SUFFIXES: .sh_ .sh .pl_ .pl
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& exit 0; \ && { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu bin/Makefile $(AUTOMAKE) --gnu bin/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -261,59 +295,75 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-e_initSCRIPTS: $(e_init_SCRIPTS) install-e_initSCRIPTS: $(e_init_SCRIPTS)
@$(NORMAL_INSTALL) @$(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 \ @list='$(e_init_SCRIPTS)'; test -n "$(e_initdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
if test -f $$d$$p; then \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ done | \
echo " $(e_initSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(e_initdir)/$$f'"; \ sed -e 'p;s,.*/,,;n' \
$(e_initSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(e_initdir)/$$f"; \ -e 'h;s|.*|.|' \
else :; fi; \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
done $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) { files[d] = files[d] " " $$1; \
if (++n[d] == $(am__install_max)) { \
print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
else { print "f", d "/" $$4, $$1 } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(e_initdir)$$dir'"; \
$(INSTALL_SCRIPT) $$files "$(DESTDIR)$(e_initdir)$$dir" || exit $$?; \
} \
; done
uninstall-e_initSCRIPTS: uninstall-e_initSCRIPTS:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
@list='$(e_init_SCRIPTS)'; for p in $$list; do \ @list='$(e_init_SCRIPTS)'; test -n "$(e_initdir)" || exit 0; \
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ files=`for p in $$list; do echo "$$p"; done | \
echo " rm -f '$(DESTDIR)$(e_initdir)/$$f'"; \ sed -e 's,.*/,,;$(transform)'`; \
rm -f "$(DESTDIR)$(e_initdir)/$$f"; \ dir='$(DESTDIR)$(e_initdir)'; $(am__uninstall_files_from_dir)
done
install-e_examplesDATA: $(e_examples_DATA) install-e_examplesDATA: $(e_examples_DATA)
@$(NORMAL_INSTALL) @$(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 \ @list='$(e_examples_DATA)'; test -n "$(e_examplesdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \ echo "$$d$$p"; \
echo " $(e_examplesDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_examplesdir)/$$f'"; \ done | $(am__base_list) | \
$(e_examplesDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_examplesdir)/$$f"; \ while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(e_examplesdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(e_examplesdir)" || exit $$?; \
done done
uninstall-e_examplesDATA: uninstall-e_examplesDATA:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
@list='$(e_examples_DATA)'; for p in $$list; do \ @list='$(e_examples_DATA)'; test -n "$(e_examplesdir)" || list=; \
f=$(am__strip_dir) \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
echo " rm -f '$(DESTDIR)$(e_examplesdir)/$$f'"; \ dir='$(DESTDIR)$(e_examplesdir)'; $(am__uninstall_files_from_dir)
rm -f "$(DESTDIR)$(e_examplesdir)/$$f"; \
done
install-e_initDATA: $(e_init_DATA) install-e_initDATA: $(e_init_DATA)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
test -z "$(e_initdir)" || $(MKDIR_P) "$(DESTDIR)$(e_initdir)" test -z "$(e_initdir)" || $(MKDIR_P) "$(DESTDIR)$(e_initdir)"
@list='$(e_init_DATA)'; for p in $$list; do \ @list='$(e_init_DATA)'; test -n "$(e_initdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \ echo "$$d$$p"; \
echo " $(e_initDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_initdir)/$$f'"; \ done | $(am__base_list) | \
$(e_initDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_initdir)/$$f"; \ while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(e_initdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(e_initdir)" || exit $$?; \
done done
uninstall-e_initDATA: uninstall-e_initDATA:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
@list='$(e_init_DATA)'; for p in $$list; do \ @list='$(e_init_DATA)'; test -n "$(e_initdir)" || list=; \
f=$(am__strip_dir) \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
echo " rm -f '$(DESTDIR)$(e_initdir)/$$f'"; \ dir='$(DESTDIR)$(e_initdir)'; $(am__uninstall_files_from_dir)
rm -f "$(DESTDIR)$(e_initdir)/$$f"; \
done
tags: TAGS tags: TAGS
TAGS: TAGS:
@ -337,13 +387,17 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d "$(distdir)/$$file"; then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
@ -364,10 +418,15 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
@ -375,6 +434,7 @@ clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@ -393,6 +453,8 @@ dvi-am:
html: html-am html: html-am
html-am:
info: info-am info: info-am
info-am: info-am:
@ -402,18 +464,28 @@ install-data-am: install-data-local install-e_examplesDATA \
install-dvi: install-dvi-am install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-am install-html: install-html-am
install-html-am:
install-info: install-info-am install-info: install-info-am
install-info-am:
install-man: install-man:
install-pdf: install-pdf-am install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am install-ps: install-ps-am
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
@ -480,6 +552,7 @@ install-data-local: install-e_examplesDATA install-e_initSCRIPTS
uninstall-local: uninstall-local:
-rmdir "$(DESTDIR)$(e_examplesdir)" 2>/dev/null -rmdir "$(DESTDIR)$(e_examplesdir)" 2>/dev/null
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

72
bin/configure-dev.sh Executable file
View File

@ -0,0 +1,72 @@
#!/bin/sh
#
# Copyright (C) 2001-2013 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 3 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, see <http://www.gnu.org/licenses/>.
# ===
#
# configure-dev.sh
#
# A convenience script that runs the emailrelay "../configure" script
# for developers.
#
configure="./configure"
if test ! -f "${configure}" ; then configure="../configure" ; fi
if test ! -f "${configure}" ; then configure="../../configure" ; fi
chmod +x "${configure}" 2> /dev/null
gnu()
{
env \
CPPFLAGS="-D_FORTIFY_SOURCE=2" \
CXXFLAGS="-Wall -Wextra -pedantic -g -O0 -fno-omit-frame-pointer -fstack-protector" \
CFLAGS="-Wall -Wextra -pedantic -g -O0 -fstack-protector" \
LDFLAGS="-g" \
"$@"
}
llvm()
{
w_on="-Wall -Wextra -Weverything -pedantic"
w_off="-Wno-weak-vtables -Wno-padded -Wno-exit-time-destructors -Wno-missing-noreturn -Wno-global-constructors"
#sanity="-fsanitize=address -fsanitize=init-order -fsanitize=integer -fsanitize=undefined -fsanitize=dataflow"
env \
CC=clang \
CXX=clang++ \
CPP="clang -E" \
LD=clang++ \
CPPFLAGS="-D_FORTIFY_SOURCE=2" \
CXXFLAGS="$w_on $w_off -g -O0 -fno-omit-frame-pointer -fstack-protector $sanity" \
CFLAGS="$w_on -g -O0 -fstack-protector" \
LDFLAGS="-g" \
"$@"
}
args()
{
echo \
--enable-debug \
--prefix=$HOME/tmp/usr \
--exec-prefix=$HOME/tmp/usr \
--datadir=$HOME/tmp/usr/share \
--localstatedir=$HOME/tmp/var \
--libexecdir=$HOME/tmp/usr/lib \
--sysconfdir=$HOME/etc \
e_initdir=$HOME/etc/init.d
}
#gnu ${configure} `args` "$@"
llvm ${configure} `args` "$@"

44
bin/configure-fhs.sh Executable file
View File

@ -0,0 +1,44 @@
#!/bin/sh
#
# Copyright (C) 2001-2013 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 3 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, see <http://www.gnu.org/licenses/>.
# ===
#
# configure-fhs.sh
#
# A convenience script that runs the emailrelay "../configure" script with
# directory options that are more FHS-like.
#
# $ cd src/emailrelay-1.99
# $ mkdir build
# $ cd build
# $ sh ../bin/configure-fhs.sh
# $ make
# $ sudo make install
#
configure="./configure"
if test ! -f "${configure}" ; then configure="../configure" ; fi
if test ! -f "${configure}" ; then configure="../../configure" ; fi
chmod +x "${configure}" 2> /dev/null
${configure} \
--prefix=/usr \
--exec-prefix=/usr \
--datadir=/usr/share \
--localstatedir=/var \
--libexecdir=/usr/lib \
--sysconfdir=/etc \
e_initdir=/etc/init.d "$@"

14
bin/configure-mac.sh Normal file → Executable file
View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -24,10 +24,10 @@
# $ cd src/emailrelay-1.99 # $ cd src/emailrelay-1.99
# $ mkdir build # $ mkdir build
# $ cd build # $ cd build
# $ sh ../bin/configure-mac.sh_ # $ sh ../bin/configure-mac.sh
# $ make # $ make
# #
# After configuring with these switches the installation can be done # After configuring with this script the installation can be done
# with "make install" for a system-wide installation, or with # with "make install" for a system-wide installation, or with
# "make install DESTDIR=~" for a private installation. # "make install DESTDIR=~" for a private installation.
# #
@ -40,16 +40,20 @@ lib="/Library"
configure="./configure" configure="./configure"
if test ! -f "${configure}" ; then configure="../configure" ; fi if test ! -f "${configure}" ; then configure="../configure" ; fi
if test ! -f "${configure}" ; then configure="../../configure" ; fi
chmod +x "${configure}" 2> /dev/null chmod +x "${configure}" 2> /dev/null
${configure} \ ${configure} \
--enable-mac \ --enable-mac \
--sbindir="${app}" \ --sbindir="${app}" \
e_qtmoc=/usr/bin/moc \
e_libexecdir="${app}" \ e_libexecdir="${app}" \
e_examplesdir="${app}/Documentation/examples" \ e_examplesdir="${app}/Documentation/examples" \
e_sysconfdir="${app}" \ e_sysconfdir="${app}" \
--mandir="${app}/Documentation/man" \ --mandir="${app}/Documentation/man" \
e_icondir="${app}" \
e_docdir="${app}/Documentation" \ e_docdir="${app}/Documentation" \
e_spooldir="${lib}/Mail/Spool" \ e_spooldir="${lib}/Mail/Spool" \
e_initdir="${lib}/StartupItems/E-MailRelay" e_pamdir="/etc/pam.d" \
e_initdir="${lib}/StartupItems/E-MailRelay" "$@"

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -18,24 +18,31 @@
# #
# doxygen.sh # doxygen.sh
# #
# Used by doc/Makefile to run doxygen with a bit of # Used by doc/Makefile to run doxygen with a bit of config-file pre-processing.
# config-file pre-processing.
# #
# usage: doxygen <have-doxygen> <top-srcdir> <top-builddir> # usage: doxygen <have-doxygen> <top-srcdir> <top-builddir> [<doxyfile-out>]
# #
HAVE_DOXYGEN="$1" HAVE_DOXYGEN="$1"
top_srcdir="$2" top_srcdir="$2"
top_builddir="$3" top_builddir="$3"
doxyfile_out="$4"
if test "$HAVE_DOXYGEN" = "yes" if test "$HAVE_DOXYGEN" = "yes"
then then
cat "${top_srcdir}/src/main/doxygen.cfg" | \ if test "${doxyfile_out}" != ""
then
cat "${top_srcdir}/doc/doxygen.cfg" | \
sed "s:__TOP_SRC__:${top_srcdir}:g" | \
sed "s:__TOP_BUILD__:${top_builddir}:g" | \
cat > "${doxyfile_out}"
fi
cat "${top_srcdir}/doc/doxygen.cfg" | \
sed "s:__TOP_SRC__:${top_srcdir}:g" | \ sed "s:__TOP_SRC__:${top_srcdir}:g" | \
sed "s:__TOP_BUILD__:${top_builddir}:g" | \ sed "s:__TOP_BUILD__:${top_builddir}:g" | \
doxygen - doxygen -
else else
mkdir doxygen 2>/dev/null mkdir doxygen 2>/dev/null
cp -f "${top_srcdir}/doc/doxygen_missing.html" doxygen/index.html cp -f "${top_srcdir}/doc/doxygen-missing.html" doxygen/index.html
fi fi

96
bin/doxygen_fixup.pl_ Normal file
View File

@ -0,0 +1,96 @@
#!/usr/bin/perl
#
# Copyright (C) 2001-2013 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 3 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, see <http://www.gnu.org/licenses/>.
# ===
#
# doxygen_fixup.pl
#
# usage: doxygen_fixup.pl [<doc-doxygen-directory>]
#
# Does fixups on the doxygen-generated html files by adding
# css styles that emailrelay-doxygen.css can operate on.
#
# Note that the html header file speficied in doc/doxygen.cfg
# (typically doc/doxygen-header.html) should include the
# emailrelay-doxygen.css stylesheet after including doxygen.css.
#
# Designed for doxygen 1.6.x/1.7.x and does nothing (with an exit
# code of 1) if there is no suitable version marker in the html files.
#
# Typically run by the emailrelay/doc makefile after it has run
# doxygen.
#
use strict ;
use FileHandle ;
my $dir = @ARGV ? $ARGV[0] : "." ;
my $any_file_changed = 0 ;
my $marker = 'edited by doxygen_fixup.pl' ;
my $comment = '<!-- '.$marker.' -->' ;
for my $f ( <$dir/*> )
{
if( $f =~ m/\.html$/ )
{
my $input = new FileHandle( $f , "r" ) or die "cannot open $f" ;
my $output = new FileHandle( "$f.tmp" , "w" ) or die "cannot create $f.tmp" ;
my $seen_marker = undef ;
my $file_changed = undef ;
while ( <$input> )
{
chomp( my $line = $_ ) ;
$seen_marker ||= ( $line =~ m/Generated by Doxygen 1\.6/ ) ;
$seen_marker ||= ( $line =~ m/Generated by Doxygen 1\.7/ ) ;
my $old_line = $line ;
$line =~ s/p>References/p class="references">References/g ;
$line =~ s/p>Referenced by/p class="referencedby">Referenced by/g ;
$line =~ s/p>Definition at/p class="definitionat">Definition at/g ;
$line =~ s/p>Implements /p class="implements">Implements /g ;
if( $line =~ m/<td class="memname".* <\/td> *$/ )
{
$line =~ s/>/> /g ;
$line =~ s/</ </g ;
my @word = split( ' ' , $line ) ;
if( scalar(@word) > 2 )
{
my $n = scalar(@word) - 2 ;
if( $n =~ m/^[A-Za-z0-9&;:_]+$/ )
{
$word[$n] = '<span class="realmemname">' . $word[$n] . "</span>" ;
$line = join( " " , @word ) ;
}
}
}
my $line_changed = ( $line ne $old_line ) ;
my $line_has_comment = ( $line =~ m/$marker/ ) ;
print $output $line , ( ( $line_changed && !$line_has_comment ) ? "" : $comment ) , "\n" ;
$file_changed ||= $line_changed ;
}
$output->close() or die "cannot write $f.tmp" ;
$input->close() ;
if( $file_changed && $seen_marker )
{
rename( "$f.tmp" , $f ) or die "cannot rename $f.tmp to $f" ;
$any_file_changed = 1 ;
}
else
{
unlink( "$f.tmp" ) ;
}
}
}
exit( $any_file_changed ? 0 : 1 ) ;

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -18,11 +18,16 @@
# #
# emailrelay-deliver.sh # emailrelay-deliver.sh
# #
# Looks for local mail in the E-MailRelay spool directory, and delivers # Looks for local mail in the E-MailRelay spool directory and delivers is using
# it using 'procmail'. # 'procmail'.
# #
# usage: emailrelay-deliver.sh [<spool-dir>] # usage: emailrelay-deliver.sh [<spool-dir>]
# #
# This illustrates how delivery to local "postmaster" mailboxes could be done,
# although it is not likely to be a useful feature for a typical mail relay
# setup.
#
store="__SPOOL_DIR__" store="__SPOOL_DIR__"
postmaster="root" postmaster="root"

View File

@ -0,0 +1,68 @@
//
// Copyright (C) 2001-2013 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 3 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, see <http://www.gnu.org/licenses/>.
// ===
//
// emailrelay-edit-content.js
//
// An example "--filter" script for Windows that edits the message's content
// file.
//
// In this example every "teh" is changed to "the".
//
try
{
// parse the command-line to get the content filename
var content = WScript.Arguments(0) ;
// open the content file
var fs = WScript.CreateObject( "Scripting.FileSystemObject" ) ;
var in_ = fs.OpenTextFile( content , 1 , false ) ;
// create the new content file
var out_ = fs.OpenTextFile( content + ".tmp" , 8 , true ) ;
// read the headers
while( !in_.AtEndOfStream )
{
var line = in_.ReadLine() ;
out_.WriteLine( line ) ;
if( line == "" )
break ;
}
// read and edit the body
var re = new RegExp( "\\bteh\\b" , "gi" ) ;
while( !in_.AtEndOfStream )
{
var line = in_.ReadLine() ;
line = line.replace( re , "the" ) ;
out_.WriteLine( line ) ;
}
// replace the content file
in_.Close() ;
out_.Close() ;
fs.MoveFile( content + ".tmp" , content ) ;
// successful exit
WScript.Quit( 0 ) ;
}
catch( e )
{
// report errors using the special <<...>> markers
WScript.StdOut.WriteLine( "<<" + e + ">>" ) ;
WScript.Quit( 1 ) ;
}

View File

@ -1,9 +1,9 @@
// //
// Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> // Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
// //
// This program is free software: you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or // the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. // (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
@ -15,33 +15,47 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// === // ===
// //
// emailrelay-change-auth.js // emailrelay-edit-envelope.js
// //
// An example "--filter" script for Windows that changes the // An example "--filter" script for Windows that edits the message's envelope
// authentication field in the message's envelope file. This // file.
// field is used as the AUTH parameter in the MAIL command //
// when the emailrelay server forwards the message to the // In this example the "Authentication" field in the envelope file is modified.
// downstream server. By default it is the name used by the // This field is used as the AUTH parameter when the emailrelay server forwards
// client when it authenticated with emailrelay. // the message to the downstream server.
// //
try try
{ {
var auth = "secret" ; // change this // parse the command-line to get the envelope filename
var content = WScript.Arguments(0) ; var content = WScript.Arguments(0) ;
var envelope = content.substr(0,content.length-7) + "envelope.new" ; var envelope = content.substr(0,content.length-7) + "envelope.new" ;
// open the envelope file
var fs = WScript.CreateObject( "Scripting.FileSystemObject" ) ; var fs = WScript.CreateObject( "Scripting.FileSystemObject" ) ;
var ts = fs.OpenTextFile( envelope , 1 , false ) ; var ts = fs.OpenTextFile( envelope , 1 , false ) ;
// read the contents of the envelope file
var txt = ts.ReadAll() ; var txt = ts.ReadAll() ;
ts.Close() ; ts.Close() ;
// configuration -- this is what we are putting into the envelope file
var auth = "secret" ;
// make the change
var re = new RegExp( "X-MailRelay-Authentication: *\\w*" ) ; var re = new RegExp( "X-MailRelay-Authentication: *\\w*" ) ;
txt = txt.replace( re , "X-MailRelay-Authentication: " + auth ) ; txt = txt.replace( re , "X-MailRelay-Authentication: " + auth ) ;
// write the envelope file back out
ts = fs.OpenTextFile( envelope , 2 , false ) ; ts = fs.OpenTextFile( envelope , 2 , false ) ;
ts.Write( txt ) ; ts.Write( txt ) ;
ts.Close() ; ts.Close() ;
// successful exit
WScript.Quit( 0 ) ; WScript.Quit( 0 ) ;
} }
catch( e ) catch( e )
{ {
WScript.Echo( "<<" + e + ">>" ) ; // report errors using the special <<...>> markers
WScript.StdOut.WriteLine( "<<" + e + ">>" ) ;
WScript.Quit( 1 ) ; WScript.Quit( 1 ) ;
} }

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -18,36 +18,23 @@
# #
# emailrelay-multicast.sh # emailrelay-multicast.sh
# #
# An example filter script that copies/links each new message # An example "--filter" script that copies/links each new message into all
# into all avaliable sub-directories of the main spool # avaliable sub-directories of the main spool directory. The original message
# directory. The original message files are deleted if they # files are deleted if they were successfully copied/linked into all
# were successfully copied/linked into all sub-directories. # sub-directories.
# #
# Typically used for smtp multicast with an emailrelay # This can be used for doing SMTP multicast by having an emailrelay forwarding
# forwarding process polling each sub-directory (with # process polling each sub-directory. (For POP multicasting use the
# eg. "--log -e --no-smtp --poll 10 --forward-to ..."). # "emailrelay-filter-copy" program with the "pop-by-name" feature so that
# there is no need to copy or link content files.)
# #
# Hard links are used for the content files in order to # Hard links are used for the content files in order to conserve disk space. Log
# conserve disk space. # entries are written into the base envelope file to help with error recovery.
# #
# Log entries are written into the base envelope file # The remote SMTP client which is submitting the message will be notified of any
# to help with error recovery. # failures in this script via SMTP error responses. Alternatively an "exit 0"
# # can be used to silently leave the message in the main spool directory (see
# Note that the remote smtp client which is submitting the # below).
# message will be notified of any failures in this script.
# Alternatively an "exit 0" can be used to silently leave
# the message in the main spool directory (see below).
#
# (This script is similar to the emailrelay-filter-copy
# program that is used for "pop-by-name" -- ie. smtp to
# pop multicasting. However, in the pop case we exploit
# a feature of the pop server where the content file
# can stay in the parent directory without linking or
# copying into the sub-directory, which allows "pop-by-name"
# to be fully cross-platform while avoiding content-file
# bloat. The smtp server does not support that way of
# working so here we just link the content file and
# forget about windows.)
# #
# parse the command-line # parse the command-line

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -18,15 +18,14 @@
# #
# emailrelay-notify.sh # emailrelay-notify.sh
# #
# Looks for failed mail in the E-MailRelay spool directory, and sends failure # Looks for failed mail in the E-MailRelay spool directory and sends failure
# notification messages using 'procmail'. # notification messages using 'procmail'.
# #
# usage: emailrelay-notify.sh [<spool-dir>] # usage: emailrelay-notify.sh [<spool-dir>]
# #
# Notification of failed e-mail by means of e-mail messages is a # Notification of failed e-mail by means of e-mail messages is a requirement
# requirement imposed by the SMTP specification. However, a simpler # imposed by the SMTP specification. However, a simpler approach might be more
# approach might be more appropriate -- for example, a line like this in # appropriate -- for example, a line like this in a ".profile" script:
# a ".profile" script:
# #
# if test -f /var/spool/emailrelay/*.envelope.bad ; then echo Failed mail >&2 ; fi # if test -f /var/spool/emailrelay/*.envelope.bad ; then echo Failed mail >&2 ; fi
# #

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -18,10 +18,8 @@
# #
# emailrelay-process.sh # emailrelay-process.sh
# #
# An example pre-processing script for the E-MailRelay # An example "--filter" script for the E-MailRelay SMTP server which does
# SMTP server which does rot-13 masking. (The pre-processor # rot-13 masking.
# is specified using the "--filter" switch on the emailrelay
# command line.)
# #
awk="awk" awk="awk"

View File

@ -1,9 +1,9 @@
// //
// Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> // Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
// //
// This program is free software: you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or // the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. // (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
@ -17,18 +17,18 @@
// //
// emailrelay-resubmit.js // emailrelay-resubmit.js
// //
// Looks for all failed e-mails in the E-MailRelay spool directory // A utility script for Windows that looks for all failed e-mails in the
// and resubmits them. However, if an e-mail has been retried five // E-MailRelay spool directory and resubmits them. However, if an e-mail has
// times already then it is not submitted again. // been retried five times already then it is not submitted again.
// //
// usage: cscript //nologo emailrelay-resubmit.js [<spool-dir>] // usage: cscript //nologo emailrelay-resubmit.js [<spool-dir>]
// //
// configuration // configuration
// //
var cfg_store = "__SPOOL_DIR__" ; var cfg_store = "c:/windows/spool/emailrelay" ;
var cfg_retry_limit = 5 ; var cfg_retry_limit = 5 ;
var cfg_debug = true ; var cfg_debug = false ;
// parse the command line // parse the command line
// //
@ -44,7 +44,7 @@ function debug( line )
{ {
if( cfg_debug ) if( cfg_debug )
{ {
WScript.Echo( "debug: " + line ) ; WScript.StdOut.WriteLine( "debug: " + line ) ;
} }
} }
@ -53,7 +53,7 @@ function debug( line )
var fso = WScript.CreateObject( "Scripting.FileSystemObject" ) ; var fso = WScript.CreateObject( "Scripting.FileSystemObject" ) ;
if( ! fso.FolderExists( cfg_store ) ) if( ! fso.FolderExists( cfg_store ) )
{ {
WScript.Echo( "invalid spool directory: \"" + cfg_store + "\"" ) ; WScript.StdOut.WriteLine( "invalid spool directory: \"" + cfg_store + "\"" ) ;
WScript.Quit( 1 ) ; WScript.Quit( 1 ) ;
} }

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -18,12 +18,14 @@
# #
# emailrelay-resubmit.sh # emailrelay-resubmit.sh
# #
# Looks for all failed e-mails in the E-MailRelay spool directory # Looks for all failed e-mails in the E-MailRelay spool directory and resubmits
# and resubmits them. However, if an e-mail has been retried five # them. However, if an e-mail has been retried five times already then it is not
# times already then it is not resubmitted again. # resubmitted again.
# #
# usage: emailrelay-resubmit.sh [<spool-dir>] # usage: emailrelay-resubmit.sh [<spool-dir>]
# #
# See also emailrelay-resubmit.js for Windows.
#
store="__SPOOL_DIR__" store="__SPOOL_DIR__"
retry_limit="5" retry_limit="5"

View File

@ -1,9 +1,9 @@
// //
// Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> // Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
// //
// This program is free software: you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or // the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. // (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
@ -18,10 +18,11 @@
// emailrelay-runperl.js // emailrelay-runperl.js
// //
// An example "--filter" script for Windows that runs a perl script // An example "--filter" script for Windows that runs a perl script
// to process the message content via its standard input and standard // to process e-mails.
// output.
// //
// The name of the perl script is hard-coded below: edit as necessary. // The perl script is expected to read the e-mail content on its
// standard input and write it out again on standard output, with
// a zero exit code on success (like spamassassin, for example).
// //
// The E-MailRelay command-line should look something like this: // The E-MailRelay command-line should look something like this:
// //
@ -29,55 +30,67 @@
// //
// Note the backslash to escape the space in the path. // Note the backslash to escape the space in the path.
// //
// 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:
var cfg_perl="perl -S -T -w"
var cfg_perl_script="spamassassin"
// parse our command line var rc = 1 ;
var args = WScript.Arguments try
var filename = args(0)
// 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
var sh = WScript.CreateObject("WScript.Shell")
var rc = sh.Run( cmd , 0 , true )
// check the file redirection
var fs = WScript.CreateObject("Scripting.FileSystemObject")
if( !fs.FileExists(filename+".tmp") || !fs.FileExists(filename+".err") )
{ {
WScript.Echo("<<file redirection error>>") // configuration -- edit these lines as necessary, but avoid spaces in paths
WScript.Quit( 2 ) var cfg_perl = "perl -S -T -w" ;
} var cfg_perl_script = "spamassassin" ;
// success or failure // parse our command line
if( rc == 0 ) var args = WScript.Arguments ;
{ var filename = args(0) ;
fs.DeleteFile( filename )
fs.MoveFile( filename + ".tmp" , filename ) // prepare a perl commandline with quotes and redirection etc
fs.DeleteFile( filename + ".err" ) var cmd_in = "\"" + filename + "\"" ;
WScript.Quit( 0 ) var cmd_out = "\"" + filename + ".tmp\"" ;
} var cmd_err = "\"" + filename + ".err\"" ;
else var cmd_perl = "cmd /c " + cfg_perl + " " + cfg_perl_script ;
{ var cmd = cmd_perl + " < " + cmd_in + " > " + cmd_out + " 2> " + cmd_err ;
fs.DeleteFile( filename + ".tmp" )
var error = fs.OpenTextFile( filename + ".err" , 1 ) // run the perl command
if( ! error.AtEndOfStream ) var sh = WScript.CreateObject("WScript.Shell") ;
rc = sh.Run( cmd , 0 , true ) ;
// check the file redirection worked
var fs = WScript.CreateObject("Scripting.FileSystemObject") ;
if( !fs.FileExists(filename+".tmp") || !fs.FileExists(filename+".err") )
{ {
var reason = error.ReadLine() throw "file redirection error" ;
WScript.Echo( "<<" + reason + ">>" )
} }
error.Close()
fs.DeleteFile( filename + ".err" ) // check for perl script errors
WScript.Quit( rc ) if( rc != 0 )
{
// read one line of the perl script's standard error
var reason = "non-zero exit" ;
var errorstream = fs.OpenTextFile( filename + ".err" , 1 )
if( ! errorstream.AtEndOfStream )
reason = errorstream.ReadLine() ;
errorstream.Close() ;
// clean up
fs.DeleteFile( filename + ".err" ) ;
fs.DeleteFile( filename + ".tmp" ) ;
throw reason ;
}
// clean up
fs.DeleteFile( filename ) ;
fs.DeleteFile( filename + ".err" ) ;
// install the perl script output as the new content file
fs.MoveFile( filename + ".tmp" , filename ) ;
// successful exit
WScript.Quit( 0 ) ;
}
catch( e )
{
// report errors using the special <<...>> markers
WScript.StdOut.WriteLine( "<<" + e + ">>" ) ;
WScript.Quit( rc ) ;
} }

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -18,15 +18,10 @@
# #
# emailrelay-submit.sh # emailrelay-submit.sh
# #
# An example wrapper script for the "emailrelay-submit" utility # An example script that deposits e-mail messages into sub-directories
# that adds the capability of copying messages into multiple # of the main E-MailRelay spool directory depending on the "To:"
# subdirectories based on the message content. This script # address. This could be used with an E-MailRelay POP server running
# should be used as a replacement for the "emailrelay-submit" # with the "pop-by-name" option so that messages get routed appropriately.
# utility so it reads the message content from the standard
# input. All output goes to a log file.
#
# Typically called by fetchmail as the local delivery agent
# with an emailrelay pop server running in "pop-by-name" mode.
# #
# usage: emailrelay-submit.sh # usage: emailrelay-submit.sh
# #

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -18,19 +18,15 @@
# #
# emailrelay # emailrelay
# #
# A shell-script wrapper for E-MailRelay designed for use in the SysV-init # A shell-script wrapper for E-MailRelay for use in the SysV-init system.
# system (/etc/init.d).
# #
# Additional command-line switches for the emailrelay daemon are sourced # Additional command-line options for the emailrelay daemon are sourced from
# from the file "/etc/emailrelay.conf" if it exists. Uncommented lines in this # the file "/etc/emailrelay.conf" if it exists. Uncommented lines in this
# file have "--" prepended to them and then they are pasted onto the command # file have "--" prepended to them and then they are pasted onto the command
# line. # line.
# #
# usage: emailrelay { start | stop | restart | force-reload | status } # usage: emailrelay { start | stop | restart | force-reload | status }
# #
# See also: LSB, start_daemon (lsb), startproc (suse), install_initd (lsb),
# insserv (suse), /usr/share/doc/initscripts*/sysvinitfiles (redhat)
#
## ##
# LSB comment block... # LSB comment block...
@ -39,213 +35,191 @@
# Provides: emailrelay # Provides: emailrelay
# Required-Start: $network # Required-Start: $network
# Required-Stop: $network # Required-Stop: $network
# Default-Start: 3 4 5 # Default-Start: 2 3 4 5
# Default-Stop: 0 1 2 6 # Default-Stop: 0 1 6
# Short-Description: E-MailRelay SMTP proxy and store-and-forward MTA. # Short-Description: E-MailRelay SMTP proxy and store-and-forward MTA.
### END INIT INFO ### END INIT INFO
## ##
# choose an infrastructure style -- linux-standard-base (lsb) or unix # initialise
# #
if test -f /lib/lsb/init-functions PATH="$PATH:/sbin:/bin:/usr/bin"
then
style="lsb"
. /lib/lsb/init-functions
else
style="unix"
fi
# script configuration
#
var_run="/var/run"
emailrelay="__SBIN_DIR__/emailrelay" # (absolute path required in some environments)
if test \! -d "${var_run}" ; then var_run="/tmp" ; fi
if test \! -x "${emailrelay}" ; then emailrelay="`pwd`/emailrelay" ; fi
pid_file="${var_run}/emailrelay.pid"
PATH="${PATH}:/sbin:/bin:/usr/bin"
ECHO="echo" ; if test -x /bin/echo ; then ECHO="/bin/echo" ; fi ECHO="echo" ; if test -x /bin/echo ; then ECHO="/bin/echo" ; fi
cfg_file="__SYSCONF_DIR__/emailrelay.conf" var_run="/var/run" ; if test -d "$var_run" -a -w "$var_run" ; then : ; else var_run="/tmp" ; fi
pid_file="$var_run/emailrelay.pid"
# server configuration using the config file config_file="__SYSCONF_DIR__/emailrelay.conf"
# config_file_template="__SYSCONF_DIR__/emailrelay.conf.template"
ConfigSwitches() emailrelay="__SBIN_DIR__/emailrelay" # (absolute path required in some environments)
{ if test \! -x "$emailrelay" ; then emailrelay="`pwd`/emailrelay" ; fi
cat "${cfg_file}" 2>/dev/null | egrep -v '^#|^ *$' | sed 's/^/--/' local_errno=0
}
StartSwitches()
{
echo --as-server --pid-file \"${pid_file}\" `ConfigSwitches`
}
# functions...
#
# <style>_reset() -- initialise
# <style>_cmd_stop() -- stop command
# <style>_cmd_start() -- start command
# <style>_cmd_restarted() -- called after stop/start
# <style>_cmd_status() -- status command
# <style>_exit() -- exit with saved errno
unix_reset()
{
unix_errno="0"
}
unix_cmd_start()
{
$ECHO -n "${1}"
shift
"$@"
unix_errno="$?"
if test "${unix_errno}" -eq 0
then
echo " ... done"
else
echo " ... failed"
fi
}
unix_cmd_stop()
{
$ECHO -n "${1}"
if test -f "${pid_file}" && test "`cat \"${pid_file}\"`" != ""
then
kill "`cat ${pid_file}`"
rm -f "${pid_file}" 2>/dev/null
fi
echo " ... done"
unix_errno="0" # (could do better)
}
unix_cmd_restarted()
{
unix_errno="$?"
}
unix_cmd_status()
{
$ECHO -n "${1}"
if test -f "${pid_file}" && test "`cat \"${pid_file}\"`" != "" && kill -0 "`cat \"${pid_file}\"`" 2>/dev/null
then
echo " ... running"
unix_errno="0"
elif test -f "${pid_file}"
then
echo " ... failed"
unix_errno="1"
else
echo " ... not running"
unix_errno="3"
fi
}
unix_exit()
{
exit "${unix_errno}"
}
##
lsb_reset()
{
lsb_errno="0"
}
lsb_cmd_start()
{
lsb_text="${1}"
shift
start_daemon "$@"
lsb_errno=$?
if test "${lsb_errno}" -eq 0
then
log_success_msg "${lsb_text}"
else
log_failure_msg "${lsb_text}"
fi
}
lsb_cmd_stop()
{
lsb_text="${1}"
killproc "`basename \"${2}\"`"
lsb_errno=$?
if test "${lsb_errno}" -eq 0
then
log_success_msg "${lsb_text}"
else
log_failure_msg "${lsb_text}"
fi
}
lsb_cmd_restarted()
{
lsb_errno="$?"
}
lsb_cmd_status()
{
lsb_text="${1}"
base="`basename \"${2}\"`"
pids="`pidofproc \"${base}\" | sed 's/ *$//'`"
if test "${pids}" != ""
then
lsb_errno="0"
log_success_msg "${lsb_text}"
else
lsb_errno="1"
log_failure_msg "${lsb_text}"
fi
}
lsb_exit()
{
exit ${lsb_errno}
}
# check the command line # check the command line
# #
usage="{ start | stop | restart | force-reload | status }" usage="{ start | stop | restart | force-reload | status }"
if test $# -eq 0 if test $# -eq 0
then then
echo usage: `basename $0` "${usage}" >&2 echo usage: `basename $0` "$usage" >&2
exit 2 exit 2
fi fi
# choose an infrastructure -- linux-standard-base (lsb) or not
#
if test -f /lib/lsb/init-functions
then
. /lib/lsb/init-functions
do_cmd_start()
{
lsb_text="$1"
shift
start_daemon -p "$pid_file" "$@"
local_errno=$?
if test "$local_errno" -eq 0
then
log_success_msg "$lsb_text"
else
log_failure_msg "$lsb_text"
fi
}
do_cmd_stop()
{
lsb_text="$1"
killproc -p "$pid_file" "`basename \"$2\"`"
local_errno=$?
if test "$local_errno" -eq 0
then
log_success_msg "$lsb_text"
else
log_failure_msg "$lsb_text"
fi
}
do_cmd_restarted()
{
local_errno="$?"
}
do_cmd_status()
{
lsb_text="$1"
base="`basename \"$2\"`"
pids="`pidofproc -p \"$pid_file\" \"$base\" | sed 's/ *$//'`"
if test "$pids" != ""
then
local_errno="0"
log_success_msg "$lsb_text"
else
local_errno="1"
log_failure_msg "$lsb_text"
fi
}
do_exit()
{
exit "$local_errno"
}
else
do_cmd_start()
{
$ECHO -n "$1"
shift
"$@"
local_errno="$?"
if test "$local_errno" -eq 0
then
$ECHO " ... done"
else
$ECHO " ... failed"
fi
}
do_cmd_stop()
{
$ECHO -n "$1"
if test -f "$pid_file" && test "`cat \"$pid_file\"`" != ""
then
kill "`cat $pid_file`"
rm -f "$pid_file" 2>/dev/null
fi
$ECHO " ... done"
local_errno="0" # (could do better)
}
do_cmd_restarted()
{
local_errno="$?"
}
do_cmd_status()
{
$ECHO -n "$1"
if test -f "$pid_file" && test "`cat \"$pid_file\"`" != "" && kill -0 "`cat \"$pid_file\"`" 2>/dev/null
then
$ECHO " ... running"
local_errno="0"
elif test -f "$pid_file"
then
$ECHO " ... failed"
local_errno="1"
else
$ECHO " ... not running"
local_errno="3"
fi
}
do_exit()
{
exit "$local_errno"
}
fi
install_on_first_run()
{
# create a default config file if necessary and if possible
if test -f "$config_file_template" -a ! -f "$config_file"
then
cp -p "$config_file_template" "$config_file"
fi
}
config_options()
{
# echo --options from the config file
cat "$config_file" 2>/dev/null | egrep -v '^#|^gui-|^ *$' | sed 's/^/--/'
}
start_options()
{
# echo start command tail
echo --as-server --pid-file "$pid_file" `config_options`
}
# process the command line # process the command line
# #
${style}_reset install_on_first_run
case "${1}" in case "$1" in
start) start)
shift shift
eval ${style}_cmd_start \"Starting E-MailRelay server\" \"${emailrelay}\" `StartSwitches` "$@" do_cmd_start "Starting E-MailRelay server" "$emailrelay" `start_options` "$@"
;; ;;
stop) stop)
${style}_cmd_stop "Shutting down E-MailRelay" "${emailrelay}" do_cmd_stop "Shutting down E-MailRelay" "$emailrelay"
;; ;;
restart|force-reload) restart|force-reload)
shift shift
$0 stop $0 stop
$0 start "$@" $0 start "$@"
${style}_cmd_restarted do_cmd_restarted
;; ;;
reload) try-restart|reload|force-reload)
echo usage: `basename $0` reload: not implemented >&2 echo `basename $0`: $1 not implemented >&2
exit 3 exit 3
;; ;;
status) status)
${style}_cmd_status "Checking for E-MailRelay" "${emailrelay}" do_cmd_status "Checking for E-MailRelay" "$emailrelay"
;; ;;
*) *)
echo usage: `basename $0` "${usage}" >&2 echo usage: `basename $0` "$usage" >&2
exit 2 exit 2
;; ;;
esac esac
${style}_exit do_exit

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -40,7 +40,7 @@ Usage()
tmp="/tmp/`basename $0`.$$.tmp" tmp="/tmp/`basename $0`.$$.tmp"
awk="gawk" awk=`( gawk 'END {print "gawk"}' ; nawk 'END {print "nawk"}' ; echo awk ) 2>/dev/null < /dev/null | head -1`
if test "${1}" = "-a" if test "${1}" = "-a"
then then
shift shift
@ -83,7 +83,7 @@ Expand()
{ {
modified = 1 modified = 1
head = substr(line,1,rstart-1) head = substr(line,1,rstart-1)
if( match(head,"^[[:space:]]*$") ) if( match(head,"^[\t ]*$") )
{ {
system( cat " " path ) system( cat " " path )
} }

View File

@ -1,270 +0,0 @@
#!/usr/bin/perl
#
# Copyright (C) 2001-2008 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 3 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, see <http://www.gnu.org/licenses/>.
# ===
#
# fragment.pl
#
# Splits a source file into small fragments so that
# they can be compiled separately.
#
# Starts a fragment at the start of a namespace or
# a method. Ends a fragment at a blank line following
# a closing brace in column one. If there is a comment
# "//pragma fragments" in the source file then it marks
# the end of the common, unfragmented code (eg. local
# declarations).
#
# usage: fragment.sh [-r] <dir-in> <dir-out>
#
# Pokes inside "Makefile.am" files to get a lists of files.
#
# Logs all created files on stdout, suitable for backticks.
#
use strict ;
use FileHandle ;
sub makefile_variable
{
return "FRAGMENTS_EXTRA_DIST" ;
}
sub debug
{
# print @_ , "\n" ;
}
sub file_list_from_makefile
{
my ( $dir_in ) = @_ ;
my $path = "$dir_in/Makefile.am" ;
debug( "makefile: $path" ) ;
my $f = new FileHandle( $path ) or return () ;
my %full_hash = () ;
while( <$f> )
{
my $line = $_ ;
chomp $line ;
my $v = makefile_variable() ;
if( $line =~ m/^$v/ )
{
$line =~ s/$v[[:space:]]*=[[:space:]]*// ;
my @list = split( '\s+' , $line ) ;
for my $l ( @list ) { $full_hash{$l} = 1 }
}
}
debug( "makefile: $path: [".join("][",keys %full_hash)."]" ) ;
return keys %full_hash ;
}
sub sub_directory_list
{
my ( $base ) = @_ ;
opendir( DIR , $base ) or return () ;
my @list = grep { !m/^\./ && -d "$base/$_" } readdir(DIR) ;
closedir( DIR ) ;
debug( "sub_directory_list: [".join("][",@list)."]" ) ;
return @list ;
}
sub basename
{
my ( $path ) = @_ ;
$path =~ s:.*/:: ;
return $path ;
}
sub dirname
{
my ( $path ) = @_ ;
$path =~ s:/[^/]*$:: ;
return $path eq "" ? "." : $path ;
}
sub noextension
{
my ( $name ) = @_ ;
$name =~ s/\.[a-z]*$// ;
return $name ;
}
sub name_to_show
{
my ( $path ) = @_ ;
$path =~ s/.cpp$/.o/ ;
return basename($path) ;
}
sub mkdir_for
{
my ( $path_out ) = @_ ;
my $dir_out = dirname( $path_out ) ;
if( ! -d $dir_out )
{
debug( "mkdir [$dir_out]" ) ;
mkdir($dir_out) or die basename($0).": cannot create directory [$dir_out] ($!)" ;
}
}
sub print_banner
{
my ( $output , $file_in , $file_out ) = @_ ;
my $me = basename($0) ;
my $filename_out = basename( $file_out ) ;
my $filename_in = basename( $file_in ) ;
print $output "//\n" ;
print $output "// $filename_out -- autogenerated from $filename_in by $me\n" ;
print $output "//\n" ;
print $output "\n" ;
}
sub print_header
{
my ( $output , $head_ref ) = @_ ;
for my $h ( @$head_ref )
{
print $output $h , "\n" ;
}
}
my $n_ = 0 ;
sub first_file_out
{
$n_ = 0 ;
}
sub next_file_out
{
my ( $file_in , $dir_out ) = @_ ;
my $name = noextension(basename($file_in)) ;
my $file_out = "$dir_out/$name.$n_.cpp" ;
$n_++ ;
debug( "next: [$file_in] [$dir_out] [$file_out]" ) ;
return $file_out ;
}
sub is_pragma
{
my ( $line ) = @_ ;
return $line =~ m:^ *//pragma *fragments: ;
}
sub has_pragma
{
my ( $file_in ) = @_ ;
my $input = new FileHandle( $file_in , "<" ) ;
while( <$input> ) { return 1 if is_pragma($_) }
return 0 ;
}
sub fragment
{
my ( $file_in , $dir_out ) = @_ ;
my $has_pragma = has_pragma( $file_in ) ;
my $input = new FileHandle( $file_in , "<" ) or die basename($0).": cannot open input file [$file_in]" ;
my $output = undef ;
my @head = () ;
my $state = 0 ;
my $previous_line = "" ;
my $was_brace = 0 ;
my $was_hash_if = 0 ;
my $seen_pragma = 0 ;
my @file_list = () ;
first_file_out() ;
while( <$input> )
{
my $line = $_ ;
chomp $line ;
my $is_pragma = is_pragma($line) ;
my $is_namespace = $line =~ m/^namespace/ ;
my $is_method = $line =~ m/^[^[:space:]].*::.*\(/ ;
my $is_blank = $line =~ m/^[[:space:]]*$/ ;
my $is_brace = $line =~ m/^}/ ;
my $is_hash_if = $line =~ m/^#if/ ;
if( ( $state == 0 || $state == 2 ) && ( ($seen_pragma || !$has_pragma) && ( $is_namespace || $is_method ) ) )
{
$state = 1 ;
my $file_out = next_file_out( $file_in , $dir_out ) ;
mkdir_for( $file_out ) ;
$output = new FileHandle( $file_out , ">" ) or die basename($0).": cannot create output file [$file_out]" ;
push @file_list , name_to_show($file_out) ;
print_banner( $output , $file_in , $file_out ) ;
print_header( $output , \@head ) ;
if( $was_hash_if ) { print $output $previous_line , "\n" }
print $output $line , "\n" ;
}
elsif( $state == 1 && $was_brace && $is_blank )
{
$state = 2 ;
}
elsif( $state == 1 )
{
print $output $line , "\n" ;
}
elsif( $state == 0 )
{
push @head , $line unless $is_pragma ;
}
$was_brace = $is_brace ;
$was_hash_if = $is_hash_if ;
$seen_pragma = $seen_pragma || $is_pragma ;
$previous_line = $line ;
}
close $input or die ;
if( defined($output) ) { close $output or die basename($0).": cannot close output file" }
return @file_list ;
}
sub main
{
my $recursive = scalar(@ARGV) && $ARGV[0] eq "-r" ;
shift @ARGV if $recursive ;
my $dir_in = shift @ARGV ;
if( ! -d $dir_in )
{
die basename($0) . ": not a valid directory [$dir_in]" ;
}
my $dir_out = shift @ARGV ;
if( ! -d $dir_out )
{
die basename($0) . ": not a valid directory [$dir_out]" ;
}
my @list_out = () ;
my @dir_list_in = ( "." ) ;
push @dir_list_in , sub_directory_list($dir_in) if $recursive ;
for my $subdir ( @dir_list_in )
{
my $dir_in = "$dir_in/$subdir" ;
my @list_in = file_list_from_makefile( $dir_in ) ;
for my $file_in ( @list_in )
{
my $path_in = $dir_in . "/" . $file_in ;
push @list_out , fragment( $path_in , $dir_out ) ;
}
}
print join(" ",@list_out) , "\n" ;
}
main() ;

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -21,15 +21,16 @@
# Makes a Mac OS X application bundle. Called from make. # Makes a Mac OS X application bundle. Called from make.
# #
# usage: make-bundle.sh [-f] <name> <exe> <icon> [<version>] # usage: make-bundle.sh [-f] <name> <exe> <icon> [<version>]
# -f : force running on non-Mac systems
# #
# Silently does nothing on non-Mac systems. # Silently does nothing on non-Mac systems (unless forced).
# #
force="0" ; if test "$1" = "-f" ; then force="1" ; shift ; fi force="0" ; if test "$1" = "-f" ; then force="1" ; shift ; fi
name="$1" name="$1"
exe="$2" exe="$2"
icon="$3" icon="$3"
version="$4" ; if test "${version}" = "" ; then version="1.8.1.0" ; fi version="$4" ; if test "${version}" = "" ; then version="1.9.0" ; fi
if test "${name}" = "" if test "${name}" = ""
then then
@ -62,6 +63,7 @@ dir="${name}.app/Contents"
mkdir -p "${dir}/MacOS" 2>/dev/null mkdir -p "${dir}/MacOS" 2>/dev/null
mkdir -p "${dir}/Resources" 2>/dev/null mkdir -p "${dir}/Resources" 2>/dev/null
# hard-link the binary and copy the icon
ln -f "${exe}" "${dir}/MacOS/${name}" ln -f "${exe}" "${dir}/MacOS/${name}"
cp "${icon}" "${dir}/Resources/${name}.icns" cp "${icon}" "${dir}/Resources/${name}.icns"

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -27,7 +27,7 @@
# #
# Silently does nothing on non-Mac systems. # Silently does nothing on non-Mac systems.
# #
# See "http://doc.trolltech.com/4.3/deployment-mac.html". # See "http://qt-project.org/doc/qt-4.8/deployment-mac.html".
# #
force="0" ; if test "$1" = "-f" ; then force="1" ; shift ; fi force="0" ; if test "$1" = "-f" ; then force="1" ; shift ; fi

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -21,7 +21,7 @@
# Builds a "setup" self-extracting archive -- or a payload file for # Builds a "setup" self-extracting archive -- or a payload file for
# one -- derived from running "make install" into a temporary directory. # one -- derived from running "make install" into a temporary directory.
# #
# usage: make-setup.sh [-d] <output> <stub> <pack-utility> <icon> # usage: make-setup.sh [-d] <output> {<stub>|NONE} <pack-utility> <icon>
# #
# Normally run by "make setup" in the "src/gui". # Normally run by "make setup" in the "src/gui".
# #
@ -61,18 +61,25 @@ Fail()
} }
# check the command-line # check the command-line
if test "$setup" = "" -o ! -f "$stub" -o ! -x "$pack" if test "$setup" = "" -o \( "$stub" != "NONE" -a ! -f "$stub" \) -o ! -x "$pack"
then then
echo usage: `basename $0` '<setup> <stub> <pack>' >&2 echo usage: `basename $0` '<setup> <stub> <pack>' >&2
exit 2 exit 2
fi fi
# run "make install" # run "make install"
echo `basename $0`: running make install into $install echo `basename $0`: running make install into $install
mkdir -p $install mkdir -p $install
( cd ../.. && make install HAVE_DOXYGEN=no DESTDIR=$install ) > /dev/null 2>&1 ( cd ../.. && make install HAVE_DOXYGEN=no DESTDIR=$install ) > /dev/null 2>&1
# add in some extras # check the "./configure" directories were sane (see bin/configure-fhs.sh)
if test ! -d "$install/usr/lib/emailrelay" -a ! -d "$install/Applications/E-MailRelay"
then
echo `basename $0`: cannot see expected directories in the install tree >&2
exit 1
fi
# add some extras into the install
if test -d "$install/usr/lib/emailrelay/" if test -d "$install/usr/lib/emailrelay/"
then then
cp "$icon" $install/usr/lib/emailrelay/ cp "$icon" $install/usr/lib/emailrelay/
@ -94,8 +101,8 @@ find $install -type f | Filter | grep -n . | sed 's/:/1 /' > $list
( cd $install && find . -type f ) | Filter | grep -n . | sed 's/:/2 /' | Edit >> $list ( cd $install && find . -type f ) | Filter | grep -n . | sed 's/:/2 /' | Edit >> $list
sort -n $list | sed 's/^[0-9][0-9]* //' > $list.tmp && mv $list.tmp $list sort -n $list | sed 's/^[0-9][0-9]* //' > $list.tmp && mv $list.tmp $list
# create the packed file # create the packed file - dont bother compressing any more (-p)
echo `basename $0`: packing echo `basename $0`: packing
PATH=".:$PATH" PATH=".:$PATH"
"$pack" -q -f "$list" "$setup" "$stub" "$pack" -p -q -f "$list" "$setup" "$stub"

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -36,7 +36,7 @@
# text for the title.) # text for the title.)
# #
awk="gawk" awk=`( gawk 'END {print "gawk"}' ; nawk 'END {print "nawk"}' ; echo awk ) 2>/dev/null < /dev/null | head -1`
if test "${1}" = "-a" if test "${1}" = "-a"
then then
shift shift

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -26,18 +26,21 @@
# "<em></em>" tags, and it converts "*foo* [bar]" text into # "<em></em>" tags, and it converts "*foo* [bar]" text into
# hypertext links. # hypertext links.
# #
# usage: mu2html.sh [-a <awk>] [-x] [-i] [<title> [<stylesheet>]]
#
# The "-x" flag suppresses the output of html header and # The "-x" flag suppresses the output of html header and
# footer sections. This is useful when the output is to be # footer sections. This is useful when the output is to be
# spliced into another html document. # spliced into another html document.
# #
# usage: mu2html.sh [-a <awk>] [-x] [<title> [<stylesheet>]] # The "-i" flag makes the stylesheet inline, in the <header>
# section.
# #
# (If the title is not supplied then the input is copied # (If the title is not supplied then the input is copied
# to a temporary file in order to extract the H1 header # to a temporary file in order to extract the H1 header
# text for the title.) # text for the title.)
# #
awk="gawk" awk=`( gawk 'END {print "gawk"}' ; nawk 'END {print "nawk"}' ; echo awk ) 2>/dev/null < /dev/null | head -1`
if test "${1}" = "-a" if test "${1}" = "-a"
then then
shift shift
@ -52,6 +55,13 @@ then
shift shift
fi fi
inline="0"
if test "${1}" = "-i"
then
inline="1"
shift
fi
title="${1}" title="${1}"
stylesheet="${2}" stylesheet="${2}"
@ -63,7 +73,7 @@ fi
Main() Main()
{ {
${awk} -v prefix="`basename $0`" -v title="${1}" -v stylesheet="${2}" -v full="${3}" ' ${awk} -v prefix="`basename $0`" -v title="${1}" -v stylesheet="${2}" -v full="${3}" -v inline="${4}" '
BEGIN { BEGIN {
if( full ) if( full )
{ {
@ -75,7 +85,18 @@ Main()
printf( " <title>%s</title>\n" , title ) printf( " <title>%s</title>\n" , title )
printf( " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n" ) printf( " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n" )
if( length(stylesheet) ) if( length(stylesheet) )
printf( " <link rel=\"stylesheet\" href=\"%s\" type=\"text/css\">\n" , stylesheet ) {
if(inline)
{
printf( " <style>\n" )
system( "cat " stylesheet )
printf( " </style>\n" )
}
else
{
printf( " <link rel=\"stylesheet\" href=\"%s\" type=\"text/css\">\n" , stylesheet )
}
}
printf( " </head>\n" ) printf( " </head>\n" )
printf( " <body>\n" ) printf( " <body>\n" )
printf( " <!-- index:0::::%s -->\n" , title ) printf( " <!-- index:0::::%s -->\n" , title )
@ -269,9 +290,9 @@ then
${awk} '{print}' > "${tmp}" ${awk} '{print}' > "${tmp}"
touch "${tmp}" touch "${tmp}"
title="`${awk} '/^h1/ { sub(\"[^:]*:\",\"\") ; print ; exit }' \"${tmp}\"`" title="`${awk} '/^h1/ { sub(\"[^:]*:\",\"\") ; print ; exit }' \"${tmp}\"`"
${awk} '{print}' "${tmp}" | Main "${title}" "${stylesheet}" "${full}" | Anchorise ${awk} '{print}' "${tmp}" | Main "${title}" "${stylesheet}" "${full}" "${inline}" | Anchorise
rm -f "${tmp}" rm -f "${tmp}"
else else
Main "${title}" "${stylesheet}" "${full}" | Anchorise Main "${title}" "${stylesheet}" "${full}" "${inline}" | Anchorise
fi fi

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -31,7 +31,7 @@
# usage: txt2html.sh [-a <awk-binary>] [-v] [-x] [-t] [<input-file> [<stylesheet> [<graphics-dir> [<title>]]]] # usage: txt2html.sh [-a <awk-binary>] [-v] [-x] [-t] [<input-file> [<stylesheet> [<graphics-dir> [<title>]]]]
# #
awk="gawk" awk=`( gawk 'END {print "gawk"}' ; nawk 'END {print "nawk"}' ; echo awk ) 2>/dev/null < /dev/null | head -1`
if test "${1}" = "-a" if test "${1}" = "-a"
then then
shift shift

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> # Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
# #
# This program is free software: you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
@ -28,7 +28,7 @@
# usage: txt2mu.sh [-a <awk-binary>] [-t] [<input-file>] # usage: txt2mu.sh [-a <awk-binary>] [-t] [<input-file>]
# #
awk="gawk" awk=`( gawk 'END {print "gawk"}' ; nawk 'END {print "nawk"}' ; echo awk ) 2>/dev/null < /dev/null | head -1`
if test "${1}" = "-a" if test "${1}" = "-a"
then then
shift shift
@ -74,23 +74,23 @@ Main()
function process( line , next_ ) function process( line , next_ )
{ {
tab = " " tab = " "
is_blank = match( line , "^[[:space:]]*$" ) is_blank = match( line , "^[\t ]*$" )
is_heading = match( next_ , "^==*[[:space:]]*$" ) is_heading = match( next_ , "^==*[\t ]*$" )
is_footer = match( line , "^____*[[:space:]]*$" ) is_footer = match( line , "^____*[\t ]*$" )
is_sub_heading = match( next_ , "^--*[[:space:]]*$" ) is_sub_heading = match( next_ , "^--*[\t ]*$" )
is_item = match( line , "^\\* " ) is_item = match( line , "^\\* " )
is_item_name = match( line , "^\\# " ) is_item_name = match( line , "^\\# " )
is_item_detail = match( line , "^ [^- ]" ) is_item_detail = match( line , "^ [^- ]" )
is_item_numbered = match( line , "^\\([[:digit:]][[:digit:]]*\\)" ) is_item_numbered = match( line , "^\\([0123456789][0123456789]*\\)" )
is_heading_line = match( line , "^==*[[:space:]]*$" ) is_heading_line = match( line , "^==*[\t ]*$" )
is_sub_heading_line = match( line , "^--*[[:space:]]*$" ) is_sub_heading_line = match( line , "^--*[\t ]*$" )
is_image = match( line , "^[[:space:]]*<<.*>>[[:space:]]*$" ) is_image = match( line , "^[\t ]*<<.*>>[\t ]*$" )
if( text_mode ) if( text_mode )
{ {
is_citation = match( line , "^" tab "[^" tab "]" ) is_citation = match( line , "^" tab "[^" tab "]" )
is_author = match( line , "^" tab tab ) is_author = match( line , "^" tab tab )
is_html = match( line , "^<.*>[[:space:]]*$" ) is_html = match( line , "^<.*>[\t ]*$" )
is_code = 0 is_code = 0
is_item_outer = 0 is_item_outer = 0
is_item_inner = 0 is_item_inner = 0
@ -116,8 +116,8 @@ Main()
} }
else if( is_image ) else if( is_image )
{ {
sub( "^[[:space:]]*<<" , "" , line ) sub( "^[\t ]*<<" , "" , line )
sub( ">>[[:space:]]*$" , "" , line ) sub( ">>[\t ]*$" , "" , line )
tagOutputRaw( line , "image" ) tagOutputRaw( line , "image" )
} }
else if( is_html ) else if( is_html )
@ -155,7 +155,7 @@ Main()
} }
else if( is_item_numbered ) else if( is_item_numbered )
{ {
gsub( "^\\([[:digit:]][[:digit:]]*\\) " , "" , line ) gsub( "^\\([0123456789][0123456789]*\\) " , "" , line )
tagOutput( line , "item-numbered" ) tagOutput( line , "item-numbered" )
} }
else if( is_citation ) else if( is_citation )
@ -264,7 +264,7 @@ Compress()
function process( previous , line , next_ ) function process( previous , line , next_ )
{ {
re_blank = "^blank:" re_blank = "^blank:"
re_heading = "^h[[:digit:]][:,]" re_heading = "^h[0123456789][:,]"
re_detail = "^item-detail:" re_detail = "^item-detail:"
re_pre_start = "^code,1[:,]" re_pre_start = "^code,1[:,]"

0
bootstrap Normal file → Executable file
View File

View File

@ -16,6 +16,9 @@
/* Define to 1 if getipnodebyname() is available */ /* Define to 1 if getipnodebyname() is available */
#undef HAVE_GETIPNODEBYNAME #undef HAVE_GETIPNODEBYNAME
/* Define to 1 if getpwnam_r in pwd.h */
#undef HAVE_GETPWNAM_R
/* Define to 1 if you have the `glob' function. */ /* Define to 1 if you have the `glob' function. */
#undef HAVE_GLOB #undef HAVE_GLOB
@ -78,8 +81,8 @@
/* Define to 1 if you have the <unistd.h> header file. */ /* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H #undef HAVE_UNISTD_H
/* Define to 1 if you have the <zlib.h> header file. */ /* Define to enable use of zlib */
#undef HAVE_ZLIB_H #undef HAVE_ZLIB
/* Define to the address where bug reports for this package should be sent. */ /* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT #undef PACKAGE_BUGREPORT
@ -93,6 +96,9 @@
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME #undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */ /* Define to the version of this package. */
#undef PACKAGE_VERSION #undef PACKAGE_VERSION

7833
configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
dnl Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> dnl Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
dnl dnl
dnl This program is free software: you can redistribute it and/or modify dnl This program is free software: you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation, either version 3 of the License, or dnl the Free Software Foundation, either version 3 of the License, or
dnl (at your option) any later version. dnl (at your option) any later version.
dnl dnl
dnl This program is distributed in the hope that it will be useful, dnl This program is distributed in the hope that it will be useful,
@ -17,11 +17,12 @@ dnl
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
dnl dnl
AC_INIT([E-MailRelay],[1.8.1],,[emailrelay]) AC_INIT([E-MailRelay],[1.9],[],[emailrelay])
AC_CONFIG_SRCDIR(src/gsmtp/gsmtp.h) AC_CONFIG_SRCDIR(src/gsmtp/gsmtp.h)
AM_INIT_AUTOMAKE([no-define]) AM_INIT_AUTOMAKE([no-define])
AM_CONFIG_HEADER(config.h) AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
AC_DISABLE_OPTION_CHECKING
dnl === dnl ===
dnl check for programs... dnl check for programs...
@ -38,14 +39,14 @@ AC_CHECK_PROGS(GZIP,gzip)
AC_CHECK_PROG(HAVE_DOXYGEN,doxygen,yes) AC_CHECK_PROG(HAVE_DOXYGEN,doxygen,yes)
AC_CHECK_PROG(HAVE_MAN2HTML,man2html,yes) AC_CHECK_PROG(HAVE_MAN2HTML,man2html,yes)
ACLOCAL_COMPILER_VERSION ACLOCAL_COMPILER_VERSION
ACLOCAL_CAPABILITIES
dnl === dnl ===
dnl check for libraries... dnl check for libraries...
dnl dnl
AC_LANG_C AC_LANG([C])
AC_SEARCH_LIBS(gethostbyname,nsl) AC_SEARCH_LIBS(gethostbyname,nsl)
AC_SEARCH_LIBS(connect,socket) AC_SEARCH_LIBS(connect,socket)
AC_SEARCH_LIBS(compress2,z)
dnl === dnl ===
dnl check for header files, functions and typedefs... dnl check for header files, functions and typedefs...
@ -55,14 +56,16 @@ AC_HEADER_DIRENT
AC_HEADER_TIME AC_HEADER_TIME
AC_CHECK_HEADERS(unistd.h) AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(sys/time.h) AC_CHECK_HEADERS(sys/time.h)
AC_CHECK_HEADERS(zlib.h)
AC_CHECK_FUNCS(glob) AC_CHECK_FUNCS(glob)
AC_LANG_CPLUSPLUS AC_LANG([C++])
ACLOCAL_TYPE_SOCKLEN_T ACLOCAL_TYPE_SOCKLEN_T
ACLOCAL_CHECK_IPV6 ACLOCAL_CHECK_IPV6
ACLOCAL_CHECK_GETIPNODEBYNAME ACLOCAL_CHECK_GETIPNODEBYNAME
ACLOCAL_CHECK_SIN6_LEN ACLOCAL_CHECK_SIN6_LEN
ACLOCAL_CHECK_BUGGY_CTIME ACLOCAL_CHECK_BUGGY_CTIME
ACLOCAL_CHECK_PAM_HEADERS
ACLOCAL_CHECK_PAM
ACLOCAL_CHECK_GETPWNAM_R
ACLOCAL_CHECK_GMTIME_R ACLOCAL_CHECK_GMTIME_R
ACLOCAL_CHECK_LOCALTIME_R ACLOCAL_CHECK_LOCALTIME_R
ACLOCAL_CHECK_SETGROUPS ACLOCAL_CHECK_SETGROUPS
@ -76,142 +79,155 @@ PKG_PROG_PKG_CONFIG(0.9.0)
dnl === dnl ===
dnl "--enable-debug" dnl "--enable-debug"
dnl dnl
AC_ARG_ENABLE(debug,AC_HELP_STRING([--enable-debug],[enable extra debug messages at compile-time (default no)])) AC_ARG_ENABLE(debug,AS_HELP_STRING([--enable-debug],[enable extra debug messages at compile-time (default no)]))
ENABLE_DEBUG ENABLE_DEBUG
dnl === dnl ===
dnl "--enable-ipv6" dnl "--enable-ipv6"
dnl dnl
AC_ARG_ENABLE(ipv6,AC_HELP_STRING([--enable-ipv6],[enable ipv6 (default no)])) AC_ARG_ENABLE(ipv6,AS_HELP_STRING([--enable-ipv6],[enable ipv6 (default no)]))
ENABLE_IPV6 ENABLE_IPV6
dnl === dnl ===
dnl "--enable-gui" dnl "--enable-gui"
dnl dnl
AC_ARG_ENABLE(gui,AC_HELP_STRING([--enable-gui],[enable configuration gui (requires Qt4) (default auto)])) AC_ARG_ENABLE(gui,AS_HELP_STRING([--enable-gui],[enable configuration gui (requires Qt4) (default auto)]))
ENABLE_GUI ENABLE_GUI
dnl === dnl ===
dnl "--enable-verbose" dnl "--enable-verbose"
dnl dnl
AC_ARG_ENABLE(verbose,AC_HELP_STRING([--enable-verbose],[enable verbose logging (default yes)])) AC_ARG_ENABLE(verbose,AS_HELP_STRING([--enable-verbose],[enable verbose logging (default yes)]))
ENABLE_VERBOSE ENABLE_VERBOSE
dnl === dnl ===
dnl "--enable-pop" dnl "--enable-pop"
dnl dnl
AC_ARG_ENABLE(pop,AC_HELP_STRING([--enable-pop],[enable pop3 protocol (default yes)])) AC_ARG_ENABLE(pop,AS_HELP_STRING([--enable-pop],[enable pop3 server protocol (default yes)]))
ENABLE_POP ENABLE_POP
dnl === dnl ===
dnl "--enable-exec" dnl "--enable-exec"
dnl dnl
AC_ARG_ENABLE(exec,AC_HELP_STRING([--enable-exec],[enable running of external programs (disable-exec requires disable-gui) (default yes)])) AC_ARG_ENABLE(exec,AS_HELP_STRING([--enable-exec],[enable running of external programs (disable-exec requires disable-gui) (default yes)]))
ENABLE_EXEC ENABLE_EXEC
dnl === dnl ===
dnl "--enable-admin" dnl "--enable-admin"
dnl dnl
AC_ARG_ENABLE(exec,AC_HELP_STRING([--enable-admin],[enable admin interface (default yes)])) AC_ARG_ENABLE(exec,AS_HELP_STRING([--enable-admin],[enable admin interface (default yes)]))
ENABLE_ADMIN ENABLE_ADMIN
dnl === dnl ===
dnl "--enable-auth" dnl "--enable-auth"
dnl dnl
AC_ARG_ENABLE(exec,AC_HELP_STRING([--enable-auth],[enable authentication (disable-auth requires disable-pop) (default yes)])) AC_ARG_ENABLE(exec,AS_HELP_STRING([--enable-auth],[enable authentication (disable-auth requires disable-pop) (default yes)]))
ENABLE_AUTH ENABLE_AUTH
dnl === dnl ===
dnl "--enable-dns" dnl "--enable-dns"
dnl dnl
AC_ARG_ENABLE(exec,AC_HELP_STRING([--enable-dns],[enable dns lookup (default yes)])) AC_ARG_ENABLE(exec,AS_HELP_STRING([--enable-dns],[enable dns lookup (default yes)]))
ENABLE_DNS ENABLE_DNS
dnl === dnl ===
dnl "--enable-identity" dnl "--enable-identity"
dnl dnl
AC_ARG_ENABLE(exec,AC_HELP_STRING([--enable-identity],[enable process userid switching (default yes)])) AC_ARG_ENABLE(exec,AS_HELP_STRING([--enable-identity],[enable process userid switching (default yes)]))
ENABLE_IDENTITY ENABLE_IDENTITY
dnl === dnl ===
dnl "--enable-small-config" dnl "--enable-small-config"
dnl dnl
AC_ARG_ENABLE(exec,AC_HELP_STRING([--enable-small-config],[enable simplified confuration code for smaller binaries (rtfm) (default no)])) AC_ARG_ENABLE(exec,AS_HELP_STRING([--enable-small-config],[enable simplified confuration code for smaller binaries (rtfm) (default no)]))
ENABLE_SMALL_CONFIG ENABLE_SMALL_CONFIG
dnl ===
dnl "--enable-small-fragments"
dnl
AC_ARG_ENABLE(exec,AC_HELP_STRING([--enable-small-fragments],[enable fragmented object files for smaller binaries (default no)]))
ENABLE_SMALL_FRAGMENTS
dnl === dnl ===
dnl "--enable-small-exceptions" dnl "--enable-small-exceptions"
dnl dnl
AC_ARG_ENABLE(small_exceptions,AC_HELP_STRING([--enable-small-exceptions],[optimise exception classes for smaller binaries (default no)])) AC_ARG_ENABLE(small_exceptions,AS_HELP_STRING([--enable-small-exceptions],[optimise exception classes for smaller binaries (default no)]))
ENABLE_SMALL_EXCEPTIONS ENABLE_SMALL_EXCEPTIONS
dnl === dnl ===
dnl "--enable-proxy" dnl "--enable-proxy"
dnl dnl
AC_ARG_ENABLE(proxy,AC_HELP_STRING([--enable-proxy],[enable proxying (default yes)])) AC_ARG_ENABLE(proxy,AS_HELP_STRING([--enable-proxy],[enable proxying (default yes)]))
ENABLE_PROXY ENABLE_PROXY
dnl === dnl ===
dnl "--enable-mac" dnl "--enable-mac"
dnl dnl
AC_ARG_ENABLE(mac,AC_HELP_STRING([--enable-mac],[enable building for a mac os x target (default auto)])) AC_ARG_ENABLE(mac,AS_HELP_STRING([--enable-mac],[enable building for a mac os x target (default auto)]))
ENABLE_MAC ENABLE_MAC
dnl ===
dnl "--enable-testing"
dnl
AC_ARG_ENABLE(testing,AS_HELP_STRING([--enable-testing],[enable make-check tests (default yes)]))
ENABLE_TESTING
dnl ===
dnl "--with-zlib"
dnl
AC_ARG_WITH(zlib,AS_HELP_STRING([--with-zlib],[use zlib for compressed installation packages (default auto)]))
WITH_ZLIB
dnl === dnl ===
dnl "--with-doxygen" dnl "--with-doxygen"
dnl dnl
AC_ARG_WITH(doxygen,AC_HELP_STRING([--with-doxygen],[generate source code documentation with doxygen (default auto)])) AC_ARG_WITH(doxygen,AS_HELP_STRING([--with-doxygen],[generate source code documentation with doxygen (default auto)]))
WITH_DOXYGEN WITH_DOXYGEN
dnl === dnl ===
dnl "--with-man2html" dnl "--with-man2html"
dnl dnl
AC_ARG_WITH(man2html,AC_HELP_STRING([--with-man2html],[convert man pages to html using man2html (default auto)])) AC_ARG_WITH(man2html,AS_HELP_STRING([--with-man2html],[convert man pages to html using man2html (default auto)]))
WITH_MAN2HTML WITH_MAN2HTML
dnl === dnl ===
dnl "--with-openssl" dnl "--with-openssl"
dnl dnl
AC_ARG_WITH(openssl,AC_HELP_STRING([--with-openssl],[use openssl for smtp client tls extension (default auto)])) AC_ARG_WITH(openssl,AS_HELP_STRING([--with-openssl],[use openssl for tls/ssl encryption (default auto)]))
WITH_OPENSSL WITH_OPENSSL
dnl === dnl ===
dnl "--with-glob" dnl "--with-glob"
dnl dnl
AC_ARG_WITH(glob,AC_HELP_STRING([--with-glob],[use glob() for reading directories (default auto)])) AC_ARG_WITH(glob,AS_HELP_STRING([--with-glob],[use glob() for reading directories (default auto)]))
WITH_GLOB WITH_GLOB
dnl ===
dnl "--with-pam"
dnl
AC_ARG_WITH(pam,AS_HELP_STRING([--with-pam],[use linux pam for authentication (default auto)]))
WITH_PAM
dnl === dnl ===
dnl "--enable-static-linking" dnl "--enable-static-linking"
dnl dnl
AC_ARG_ENABLE(static-linking,AC_HELP_STRING([--enable-static-linking],[prefer static linking for some libraries (default no)])) AC_ARG_ENABLE(static-linking,AS_HELP_STRING([--enable-static-linking],[prefer static linking for some libraries (default no)]))
ENABLE_STATIC_LINKING ENABLE_STATIC_LINKING
dnl === dnl ===
dnl "--enable-install-hook" dnl "--enable-install-hook"
dnl dnl
AC_ARG_ENABLE(install-hook,AC_HELP_STRING([--enable-install-hook],[enable fixing up the start/stop configuration file at install time (default yes)])) AC_ARG_ENABLE(install-hook,AS_HELP_STRING([--enable-install-hook],[enable fixing up the start/stop configuration file at install time (default yes)]))
ENABLE_INSTALL_HOOK ENABLE_INSTALL_HOOK
dnl === dnl ===
dnl directory tweaking and "--enable-fhs" ... dnl directory tweaking ...
dnl dnl
dnl define e_ prefixed directory variables dnl define e_ prefixed directory variables
dnl dnl
dnl not AC_PREFIX_DEFAULT([/usr]) dnl not AC_PREFIX_DEFAULT([/usr])
AC_ARG_ENABLE(fhs,AC_HELP_STRING([--enable-fhs],[force linux FHS-compliant directories, ignoring --prefix etc (default no)]))
SET_DIRECTORIES SET_DIRECTORIES
AC_SUBST(e_docdir) AC_SUBST(e_docdir)
AC_SUBST(e_initdir) AC_SUBST(e_initdir)
AC_SUBST(e_icondir)
AC_SUBST(e_spooldir) AC_SUBST(e_spooldir)
AC_SUBST(e_examplesdir) AC_SUBST(e_examplesdir)
AC_SUBST(e_libexecdir) AC_SUBST(e_libexecdir)
AC_SUBST(e_pamdir)
AC_SUBST(e_sysconfdir) AC_SUBST(e_sysconfdir)
AC_SUBST(e_qtmoc) AC_SUBST(e_qtmoc)
if test "$e_qtmoc" = "" ; then e_qtmoc="moc" ; fi if test "$e_qtmoc" = "" ; then e_qtmoc="moc" ; fi
@ -219,5 +235,6 @@ if test "$e_qtmoc" = "" ; then e_qtmoc="moc" ; fi
dnl === dnl ===
dnl generate files... dnl generate files...
dnl dnl
AC_OUTPUT(Makefile src/Makefile src/glib/Makefile src/gssl/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 bin/Makefile doc/Makefile etc/Makefile test/Makefile extra/Makefile extra/mips/Makefile debian/Makefile src/fragments/Makefile) AC_CONFIG_FILES([Makefile src/Makefile src/glib/Makefile src/gssl/Makefile src/gnet/Makefile src/gauth/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 bin/Makefile doc/Makefile etc/Makefile test/Makefile extra/Makefile debian/Makefile])
AC_OUTPUT

4
debian/Makefile.am vendored
View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,

72
debian/Makefile.in vendored
View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am. # Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -15,8 +16,9 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
@ -39,6 +41,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES = SOURCES =
DIST_SOURCES = DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@ -66,9 +69,9 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
GREP = @GREP@ GREP = @GREP@
GZIP = @GZIP@ GZIP = @GZIP@
G_CAPABILITIES = @G_CAPABILITIES@
HAVE_DOXYGEN = @HAVE_DOXYGEN@ HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@ HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@ -91,9 +94,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PAM_INCLUDE = @PAM_INCLUDE@
PAM_LIBS = @PAM_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
QT_CFLAGS = @QT_CFLAGS@ QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@ QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -104,6 +112,7 @@ STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@ STATIC_START = @STATIC_START@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ZLIB_LIBS = @ZLIB_LIBS@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@ abs_top_builddir = @abs_top_builddir@
@ -124,8 +133,10 @@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
e_docdir = @e_docdir@ e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@ e_examplesdir = @e_examplesdir@
e_icondir = @e_icondir@
e_initdir = @e_initdir@ e_initdir = @e_initdir@
e_libexecdir = @e_libexecdir@ e_libexecdir = @e_libexecdir@
e_pamdir = @e_pamdir@
e_qtmoc = @e_qtmoc@ e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@ e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@ e_sysconfdir = @e_sysconfdir@
@ -151,6 +162,7 @@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
@ -164,14 +176,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& exit 0; \ && { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu debian/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu debian/Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu debian/Makefile $(AUTOMAKE) --gnu debian/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -189,6 +201,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
tags: TAGS tags: TAGS
TAGS: TAGS:
@ -212,13 +225,17 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d "$(distdir)/$$file"; then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
@ -236,16 +253,22 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@ -264,6 +287,8 @@ dvi-am:
html: html-am html: html-am
html-am:
info: info-am info: info-am
info-am: info-am:
@ -272,18 +297,28 @@ install-data-am:
install-dvi: install-dvi-am install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-am install-html: install-html-am
install-html-am:
install-info: install-info-am install-info: install-info-am
install-info-am:
install-man: install-man:
install-pdf: install-pdf-am install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am install-ps: install-ps-am
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
@ -316,6 +351,7 @@ uninstall-am:
maintainer-clean maintainer-clean-generic mostlyclean \ maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-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. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

31
debian/changelog vendored
View File

@ -1,8 +1,37 @@
emailrelay (1.9) unstable; urgency=low
* Added negotiated TLS/SSL for POP (ie. "STLS").
* The first two fields in the secrets files are reordered (with backwards compatibility).
* Added Linux-PAM authentication ("configure --with-pam" and then "--server-auth=/pam").
* Optional protocol-specific "--interface" qualifiers, eg. "--interface smtp=127.0.0.1,pop=192.168.1.1".
* Outgoing client connection bound with the first "--interface" or "--interface client=..." address.
* Support for SMTP-over-TLS on outgoing client connection ("--client-tls-connection") (cf. "STARTTLS")
* Support for SOCKS 4a on outgoing client connection, eg. "--forward-to example.com:25@127.0.0.1:9050".
* TLS configuration options ("--tls-config=...") for SSLv2/3 fallback etc.
* No "Received" line added if "--anonymous" and an empty "--domain" name.
* Error text for "all recipients rejected" is now more accurately "one or more recipients rejected".
* New behaviour for "--client-filter" exit values of 100 and over.
* New commands on the admin interface, "failures" and "unfail-all".
* Shorter descriptions in the usage help unless "--verbose".
* New default spool directory location on windows, now under "system32".
* Windows project files for MSVC 2012 included.
* Removed support for Windows NT and Windows 9x.
* Better support for Windows Vista and Windows 7.
* Removed Windows "--icon" option.
* Removed "--enable-fhs" option for "configure" (see INSTALL document for equivalent usage).
* Added "--log-file" option to redirect stderr.
* Added Windows "--peer-lookup" option.
* Fix for MD5 code in 64-bit builds.
-- maintainer graeme_walker <graeme_walker@users.sourceforge.net> Sat, 7 Dec 2013 22:55:40 +0000
emailrelay (1.8.2) unstable; urgency=low
* Fix namespaces for gcc 3.4.
-- maintainer graeme_walker <graeme_walker@users.sourceforge.net> Sat, 22 Aug 2009 00:00:00 +0000
emailrelay (1.8.1) unstable; urgency=low emailrelay (1.8.1) unstable; urgency=low
* Changed the definition of "--as-proxy" to use "--poll 0" rather than "--immediate" [bug-id 1961652]. * Changed the definition of "--as-proxy" to use "--poll 0" rather than "--immediate" [bug-id 1961652].
* Fixed stalling bug when using server-side TLS/SSL ("--server-tls") [bug-id 1961655]. * Fixed stalling bug when using server-side TLS/SSL ("--server-tls") [bug-id 1961655].
* Improved Debian packaging for Linux ("make deb"). * Improved Debian packaging for Linux ("make deb").
-- maintainer graeme_walker <graeme_walker@users.sourceforge.net> Wed, 21 May 2008 10:15:55 +0000 -- maintainer graeme_walker <graeme_walker@users.sourceforge.net> Wed, 21 May 2008 00:00:00 +0000
emailrelay (1.8) unstable; urgency=low emailrelay (1.8) unstable; urgency=low
* Speed optimisations (as identified by KCachegrind/valgrind in KDevelop). * Speed optimisations (as identified by KCachegrind/valgrind in KDevelop).

6
debian/copyright vendored
View File

@ -1,8 +1,8 @@
Copyright Copyright
========= =========
Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
Refer to the file COPYING (included), /usr/share/common-licenses/GPL-3, or Refer to the file COPYING (included), /usr/share/common-licenses/GPL-3, or
<http://www.gnu.org/licenses/> for the terms of the GNU General Public License. <http://www.gnu.org/licenses/> for the terms of the GNU General Public License.
Binary distributions Binary distributions
@ -16,4 +16,4 @@ These are distributed under licenses compatible with the GPLv3. Please
refer to their websites for further details. refer to their websites for further details.
This product includes software developed by the OpenSSL Project This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/) for use in the OpenSSL Toolkit (http://www.openssl.org/).

11
debian/postinst vendored
View File

@ -25,12 +25,21 @@ fix_permissions()
fix_html() fix_html()
{ {
# index.html refers to changelog.html # index.html refers to changelog.html, not changelog.html.gz
cd /usr/share/doc/emailrelay && gzip -d -c changelog.html.gz > changelog.html cd /usr/share/doc/emailrelay && gzip -d -c changelog.html.gz > changelog.html
} }
create_config()
{
if test ! -f /etc/emailrelay.conf -a -f /etc/emailrelay.conf.template
then
cp /etc/emailrelay.conf.template /etc/emailrelay.conf
fi
}
#DEBHELPER# #DEBHELPER#
create_config
create_spool create_spool
fix_permissions fix_permissions
fix_html fix_html

1
debian/postrm vendored
View File

@ -9,6 +9,7 @@ rm -f /usr/share/doc/emailrelay/changelog.html || true
if test "$1" = "purge" if test "$1" = "purge"
then then
rmdir "$spool" || true rmdir "$spool" || true
rm /etc/emailrelay.conf || true
fi fi
#DEBHELPER# #DEBHELPER#

153
depcomp
View File

@ -1,10 +1,10 @@
#! /bin/sh #! /bin/sh
# depcomp - compile a program generating dependencies as side-effects # depcomp - compile a program generating dependencies as side-effects
scriptversion=2007-03-29.01 scriptversion=2011-12-04.11; # UTC
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
# Foundation, Inc. # 2011 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -17,9 +17,7 @@ scriptversion=2007-03-29.01
# GNU General Public License for more details. # GNU General Public License for more details.
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program. If not, see <http://www.gnu.org/licenses/>.
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
# As a special exception to the GNU General Public License, if you # As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a # distribute this file as part of a program that contains a
@ -46,7 +44,7 @@ Environment variables:
object Object file output by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'.
DEPDIR directory where to store dependencies. DEPDIR directory where to store dependencies.
depfile Dependency file to output. depfile Dependency file to output.
tmpdepfile Temporary file to use when outputing dependencies. tmpdepfile Temporary file to use when outputting dependencies.
libtool Whether libtool is used (yes/no). libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>. Report bugs to <bug-automake@gnu.org>.
@ -87,6 +85,23 @@ if test "$depmode" = dashXmstdout; then
depmode=dashmstdout depmode=dashmstdout
fi fi
cygpath_u="cygpath -u -f -"
if test "$depmode" = msvcmsys; then
# This is just like msvisualcpp but w/o cygpath translation.
# Just convert the backslash-escaped backslashes to single forward
# slashes to satisfy depend.m4
cygpath_u='sed s,\\\\,/,g'
depmode=msvisualcpp
fi
if test "$depmode" = msvc7msys; then
# This is just like msvc7 but w/o cygpath translation.
# Just convert the backslash-escaped backslashes to single forward
# slashes to satisfy depend.m4
cygpath_u='sed s,\\\\,/,g'
depmode=msvc7
fi
case "$depmode" in case "$depmode" in
gcc3) gcc3)
## gcc 3 implements dependency tracking that does exactly what ## gcc 3 implements dependency tracking that does exactly what
@ -151,10 +166,12 @@ gcc)
' < "$tmpdepfile" | ' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory ## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as ## that the space means something, we add a space to the output as
## well. ## well. hp depmode also adds that space, but also prefixes the VPATH
## to the object. Take care to not repeat it in the output.
## Some versions of the HPUX 10.20 sed can't process this invocation ## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround. ## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
| sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" rm -f "$tmpdepfile"
;; ;;
@ -192,14 +209,14 @@ sgi)
' < "$tmpdepfile" \ ' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr ' tr '
' ' ' >> $depfile ' ' ' >> "$depfile"
echo >> $depfile echo >> "$depfile"
# The second pass generates a dummy entry for each header file. # The second pass generates a dummy entry for each header file.
tr ' ' ' tr ' ' '
' < "$tmpdepfile" \ ' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile >> "$depfile"
else else
# The sourcefile does not contain any dependencies, so just # The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile # store a dummy comment line, to avoid errors with the Makefile
@ -328,7 +345,12 @@ hp2)
if test -f "$tmpdepfile"; then if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
# Add `dependent.h:' lines. # Add `dependent.h:' lines.
sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" sed -ne '2,${
s/^ *//
s/ \\*$//
s/$/:/
p
}' "$tmpdepfile" >> "$depfile"
else else
echo "#dummy" > "$depfile" echo "#dummy" > "$depfile"
fi fi
@ -393,6 +415,52 @@ tru64)
rm -f "$tmpdepfile" rm -f "$tmpdepfile"
;; ;;
msvc7)
if test "$libtool" = yes; then
showIncludes=-Wc,-showIncludes
else
showIncludes=-showIncludes
fi
"$@" $showIncludes > "$tmpdepfile"
stat=$?
grep -v '^Note: including file: ' "$tmpdepfile"
if test "$stat" = 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
# The first sed program below extracts the file names and escapes
# backslashes for cygpath. The second sed program outputs the file
# name when reading, but also accumulates all include files in the
# hold buffer in order to output them again at the end. This only
# works with sed implementations that can handle large buffers.
sed < "$tmpdepfile" -n '
/^Note: including file: *\(.*\)/ {
s//\1/
s/\\/\\\\/g
p
}' | $cygpath_u | sort -u | sed -n '
s/ /\\ /g
s/\(.*\)/ \1 \\/p
s/.\(.*\) \\/\1:/
H
$ {
s/.*/ /
G
p
}' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvc7msys)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
#nosideeffect) #nosideeffect)
# This comment above is used by automake to tell side-effect # This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones. # dependency tracking mechanisms from slower ones.
@ -404,7 +472,7 @@ dashmstdout)
# Remove the call to Libtool. # Remove the call to Libtool.
if test "$libtool" = yes; then if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do while test "X$1" != 'X--mode=compile'; do
shift shift
done done
shift shift
@ -455,36 +523,45 @@ makedepend)
"$@" || exit $? "$@" || exit $?
# Remove any Libtool call # Remove any Libtool call
if test "$libtool" = yes; then if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do while test "X$1" != 'X--mode=compile'; do
shift shift
done done
shift shift
fi fi
# X makedepend # X makedepend
shift shift
cleared=no cleared=no eat=no
for arg in "$@"; do for arg
do
case $cleared in case $cleared in
no) no)
set ""; shift set ""; shift
cleared=yes ;; cleared=yes ;;
esac esac
if test $eat = yes; then
eat=no
continue
fi
case "$arg" in case "$arg" in
-D*|-I*) -D*|-I*)
set fnord "$@" "$arg"; shift ;; set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove # Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file. # the object too, otherwise makedepend will parse it as a source file.
-arch)
eat=yes ;;
-*|$object) -*|$object)
;; ;;
*) *)
set fnord "$@" "$arg"; shift ;; set fnord "$@" "$arg"; shift ;;
esac esac
done done
obj_suffix="`echo $object | sed 's/^.*\././'`" obj_suffix=`echo "$object" | sed 's/^.*\././'`
touch "$tmpdepfile" touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile" rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile" # makedepend may prepend the VPATH from the source file name to the object.
# No need to regex-escape $object, excess matching of '.' is harmless.
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' ' sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \ ' | \
## Some versions of the HPUX 10.20 sed can't process this invocation ## Some versions of the HPUX 10.20 sed can't process this invocation
@ -500,7 +577,7 @@ cpp)
# Remove the call to Libtool. # Remove the call to Libtool.
if test "$libtool" = yes; then if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do while test "X$1" != 'X--mode=compile'; do
shift shift
done done
shift shift
@ -538,13 +615,27 @@ cpp)
msvisualcpp) msvisualcpp)
# Important note: in order to support this mode, a compiler *must* # Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o, # always write the preprocessed file to stdout.
# because we must use -o when running libtool.
"$@" || exit $? "$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
IFS=" " IFS=" "
for arg for arg
do do
case "$arg" in case "$arg" in
-o)
shift
;;
$object)
shift
;;
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@" set fnord "$@"
shift shift
@ -557,16 +648,23 @@ msvisualcpp)
;; ;;
esac esac
done done
"$@" -E | "$@" -E 2>/dev/null |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
rm -f "$depfile" rm -f "$depfile"
echo "$object : \\" > "$depfile" echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile" echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile" rm -f "$tmpdepfile"
;; ;;
msvcmsys)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
none) none)
exec "$@" exec "$@"
;; ;;
@ -585,5 +683,6 @@ exit 0
# eval: (add-hook 'write-file-hooks 'time-stamp) # eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion=" # time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$" # time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End: # End:

View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,
@ -15,21 +15,43 @@
## along with this program. If not, see <http://www.gnu.org/licenses/>. ## along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
stylesheet=emailrelay.css txt_files=developer.txt reference.txt userguide.txt windows.txt
txt_files=developer.txt reference.txt userguide.txt windows.txt
man_files_in=emailrelay.1 emailrelay-passwd.1 emailrelay-poke.1 emailrelay-submit.1 emailrelay-filter-copy.1 man_files_in=emailrelay.1 emailrelay-passwd.1 emailrelay-poke.1 emailrelay-submit.1 emailrelay-filter-copy.1
man_files_out=emailrelay.1.gz emailrelay-passwd.1.gz emailrelay-poke.1.gz emailrelay-submit.1.gz emailrelay-filter-copy.1.gz man_files_out=emailrelay.1.gz emailrelay-passwd.1.gz emailrelay-poke.1.gz emailrelay-submit.1.gz emailrelay-filter-copy.1.gz
html_files_in=doxygen_header.html html_files_in=doxygen-header.html doxygen-missing.html doxygen.cfg
html_files_thru=index.html emailrelay-man.html $(stylesheet) html_files_thru=index.html emailrelay-man.html
html_files_out=readme.html developer.html reference.html userguide.html windows.html changelog.html html_files_out=readme.html developer.html reference.html userguide.html windows.html changelog.html
docbook_files_out=emailrelay.docbook docbook_files_out=emailrelay.docbook
png_files=gsmtp-classes.png gnet-classes.png sequence-3.png gnet-client.png gsmtp-serverprotocol.png auth.png css_files_in=\
emailrelay.css_ \
emailrelay-doxygen.css_
css_files_out=\
emailrelay.css \
emailrelay-doxygen.css
png_files_thru=\
valid-html401.png \
diagram-1.png \
diagram-2.png
png_files_in=\
gsmtp-classes.png_ \
gnet-classes.png_ \
sequence-3.png_ \
gnet-client.png_ \
gsmtp-serverprotocol.png_ \
auth.png_
png_files_out=\
gsmtp-classes.png \
gnet-classes.png \
sequence-3.png \
gnet-client.png \
gsmtp-serverprotocol.png \
auth.png
EXTRA_DIST = $(man_files_in) $(txt_files) $(html_files_in) $(html_files_thru) $(png_files) doxygen_missing.html EXTRA_DIST = $(man_files_in) $(txt_files) $(html_files_in) $(css_files_in) $(png_files_in) $(png_files_thru) $(html_files_thru) mingw.mak
noinst_SCRIPTS = .dox .docbook noinst_SCRIPTS = .dox .docbook
man1_MANS = $(man_files_in) man1_MANS = $(man_files_in)
e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(png_files) $(docbook_files_out) e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(css_files_out) $(png_files_out) $(png_files_thru) $(docbook_files_out)
CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) $(docbook_files_out) doxygen/* *.db *.mu docbook/* CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) $(docbook_files_out) $(png_files_out) $(css_files_out) Doxyfile *.db *.mu doxygen/* docbook/*
SUFFIXES = .txt .html .db .mu SUFFIXES = .txt .html .db .mu
@ -39,9 +61,11 @@ converter_mu2html=$(top_builddir)/bin/mu2html.sh
converter_expand=$(top_builddir)/bin/expand.sh converter_expand=$(top_builddir)/bin/expand.sh
converter_mu2docbook=$(top_builddir)/bin/mu2docbook.sh converter_mu2docbook=$(top_builddir)/bin/mu2docbook.sh
run_doxygen=$(top_builddir)/bin/doxygen.sh run_doxygen=$(top_builddir)/bin/doxygen.sh
run_doxygen_fixup=$(top_builddir)/bin/doxygen_fixup.pl
css=emailrelay.css
.txt.html: .txt.html:
$(converter_html) -a "$(AWK)" "$(top_srcdir)/doc/$*.txt" "$(stylesheet)" > "$*.html" $(converter_html) -a "$(AWK)" "$(top_srcdir)/doc/$*.txt" "$(css)" > "$*.html"
.txt.mu: .txt.mu:
$(converter_txt2mu) -a "$(AWK)" "$(top_srcdir)/doc/$*.txt" > "$*.mu" $(converter_txt2mu) -a "$(AWK)" "$(top_srcdir)/doc/$*.txt" > "$*.mu"
@ -49,6 +73,12 @@ run_doxygen=$(top_builddir)/bin/doxygen.sh
.mu.db: .mu.db:
$(converter_mu2docbook) -a "$(AWK)" -x < "$(top_builddir)/doc/$*.mu" > "$*.db" $(converter_mu2docbook) -a "$(AWK)" -x < "$(top_builddir)/doc/$*.mu" > "$*.db"
.css_.css:
cp "$(top_srcdir)/doc/$*.css_" $*.css
.png_.png:
cp "$(top_srcdir)/doc/$*.png_" $*.png
head.db: $(converter_mu2docbook) head.db: $(converter_mu2docbook)
$(converter_mu2docbook) -a "$(AWK)" --head "E-MailRelay" > head.db.tmp && mv -f head.db.tmp head.db $(converter_mu2docbook) -a "$(AWK)" --head "E-MailRelay" > head.db.tmp && mv -f head.db.tmp head.db
@ -58,11 +88,13 @@ tail.db: $(converter_mu2docbook)
emailrelay.docbook: head.db tail.db userguide.db reference.db developer.db 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 cat head.db userguide.db reference.db developer.db tail.db > emailrelay.docbook
.docbook: emailrelay.docbook .docbook: emailrelay.docbook $(png_files_out)
-xmlto -o docbook html emailrelay.docbook && touch .docbook && cp *.png docbook/ -xmlto -o docbook html emailrelay.docbook && touch .docbook && cp "$(top_srcdir)/doc/"*.png docbook/
.dox: .dox:
$(run_doxygen) "$(HAVE_DOXYGEN)" "$(top_srcdir)" "$(top_builddir)" && touch .dox $(run_doxygen) "$(HAVE_DOXYGEN)" "$(top_srcdir)" "$(top_builddir)" Doxyfile && touch .dox
-$(run_doxygen_fixup) "$(top_builddir)/doc/doxygen"
-cp "$(top_srcdir)/doc/emailrelay-doxygen.css_" "$(top_builddir)/doc/doxygen/emailrelay-doxygen.css"
emailrelay-man.html: emailrelay.1 emailrelay-man.html: emailrelay.1
if test "$(HAVE_MAN2HTML)" = "yes" ; then man2html -r -L. emailrelay.1 < /dev/null > emailrelay-man.html.tmp && mv emailrelay-man.html.tmp emailrelay-man.html ; grep -v '^Content-type:' < emailrelay-man.html | grep -v '^Time:' > emailrelay-man.html.tmp ; mv emailrelay-man.html.tmp emailrelay-man.html ; fi if test "$(HAVE_MAN2HTML)" = "yes" ; then man2html -r -L. emailrelay.1 < /dev/null > emailrelay-man.html.tmp && mv emailrelay-man.html.tmp emailrelay-man.html ; grep -v '^Content-type:' < emailrelay-man.html | grep -v '^Time:' > emailrelay-man.html.tmp ; mv emailrelay-man.html.tmp emailrelay-man.html ; fi
@ -72,10 +104,10 @@ developer.html reference.html userguide.html: $(converter_html)
developer.mu reference.mu userguide.mu: $(converter_txt2mu) developer.mu reference.mu userguide.mu: $(converter_txt2mu)
readme.html: $(top_srcdir)/README $(converter_html) readme.html: $(top_srcdir)/README $(converter_html)
$(converter_html) -a "$(AWK)" "$(top_srcdir)/README" "$(stylesheet)" > readme.html $(converter_html) -a "$(AWK)" "$(top_srcdir)/README" "$(css)" > readme.html
changelog.html: $(top_srcdir)/ChangeLog $(converter_html) changelog.html: $(top_srcdir)/ChangeLog $(converter_html)
$(converter_html) -a "$(AWK)" "$(top_srcdir)/ChangeLog" "$(stylesheet)" > changelog.html $(converter_html) -a "$(AWK)" "$(top_srcdir)/ChangeLog" "$(css)" > changelog.html
emailrelay.1.gz : emailrelay.1 emailrelay.1.gz : emailrelay.1
if test -n "$(GZIP)" ; then $(GZIP) -c "$(top_srcdir)/doc/emailrelay.1" > emailrelay.1.gz ; fi if test -n "$(GZIP)" ; then $(GZIP) -c "$(top_srcdir)/doc/emailrelay.1" > emailrelay.1.gz ; fi
@ -94,7 +126,7 @@ emailrelay-poke.1.gz: emailrelay-poke.1
install-data-local: install-e_docDATA install-data-local: install-e_docDATA
$(mkinstalldirs) "$(DESTDIR)$(e_docdir)/doxygen" $(mkinstalldirs) "$(DESTDIR)$(e_docdir)/doxygen"
for file in doxygen/* ; do $(INSTALL) --mode=644 "$$file" "$(DESTDIR)$(e_docdir)/$$file" ; done for file in doxygen/* ; do $(INSTALL) -m 644 "$$file" "$(DESTDIR)$(e_docdir)/$$file" ; done
uninstall-local: uninstall-local:
-find "$(DESTDIR)$(e_docdir)/doxygen" -type f | xargs rm -f -find "$(DESTDIR)$(e_docdir)/doxygen" -type f | xargs rm -f

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am. # Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -20,8 +21,9 @@
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
@ -44,20 +46,41 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SCRIPTS = $(noinst_SCRIPTS) SCRIPTS = $(noinst_SCRIPTS)
SOURCES = SOURCES =
DIST_SOURCES = DIST_SOURCES =
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_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \ am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \ *) f=$$p;; \
esac; esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
e_docDATA_INSTALL = $(INSTALL_DATA) am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
man1dir = $(mandir)/man1
am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(e_docdir)"
NROFF = nroff
MANS = $(man1_MANS)
DATA = $(e_doc_DATA) DATA = $(e_doc_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
@ -84,9 +107,9 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
GREP = @GREP@ GREP = @GREP@
GZIP = @GZIP@ GZIP = @GZIP@
G_CAPABILITIES = @G_CAPABILITIES@
HAVE_DOXYGEN = @HAVE_DOXYGEN@ HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@ HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@ -109,9 +132,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PAM_INCLUDE = @PAM_INCLUDE@
PAM_LIBS = @PAM_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
QT_CFLAGS = @QT_CFLAGS@ QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@ QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -122,6 +150,7 @@ STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@ STATIC_START = @STATIC_START@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ZLIB_LIBS = @ZLIB_LIBS@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@ abs_top_builddir = @abs_top_builddir@
@ -142,8 +171,10 @@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
e_docdir = @e_docdir@ e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@ e_examplesdir = @e_examplesdir@
e_icondir = @e_icondir@
e_initdir = @e_initdir@ e_initdir = @e_initdir@
e_libexecdir = @e_libexecdir@ e_libexecdir = @e_libexecdir@
e_pamdir = @e_pamdir@
e_qtmoc = @e_qtmoc@ e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@ e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@ e_sysconfdir = @e_sysconfdir@
@ -169,22 +200,50 @@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
stylesheet = emailrelay.css txt_files = developer.txt reference.txt userguide.txt windows.txt
txt_files = developer.txt reference.txt userguide.txt windows.txt
man_files_in = emailrelay.1 emailrelay-passwd.1 emailrelay-poke.1 emailrelay-submit.1 emailrelay-filter-copy.1 man_files_in = emailrelay.1 emailrelay-passwd.1 emailrelay-poke.1 emailrelay-submit.1 emailrelay-filter-copy.1
man_files_out = emailrelay.1.gz emailrelay-passwd.1.gz emailrelay-poke.1.gz emailrelay-submit.1.gz emailrelay-filter-copy.1.gz man_files_out = emailrelay.1.gz emailrelay-passwd.1.gz emailrelay-poke.1.gz emailrelay-submit.1.gz emailrelay-filter-copy.1.gz
html_files_in = doxygen_header.html html_files_in = doxygen-header.html doxygen-missing.html doxygen.cfg
html_files_thru = index.html emailrelay-man.html $(stylesheet) html_files_thru = index.html emailrelay-man.html
html_files_out = readme.html developer.html reference.html userguide.html windows.html changelog.html html_files_out = readme.html developer.html reference.html userguide.html windows.html changelog.html
docbook_files_out = emailrelay.docbook docbook_files_out = emailrelay.docbook
png_files = gsmtp-classes.png gnet-classes.png sequence-3.png gnet-client.png gsmtp-serverprotocol.png auth.png css_files_in = \
EXTRA_DIST = $(man_files_in) $(txt_files) $(html_files_in) $(html_files_thru) $(png_files) doxygen_missing.html emailrelay.css_ \
emailrelay-doxygen.css_
css_files_out = \
emailrelay.css \
emailrelay-doxygen.css
png_files_thru = \
valid-html401.png \
diagram-1.png \
diagram-2.png
png_files_in = \
gsmtp-classes.png_ \
gnet-classes.png_ \
sequence-3.png_ \
gnet-client.png_ \
gsmtp-serverprotocol.png_ \
auth.png_
png_files_out = \
gsmtp-classes.png \
gnet-classes.png \
sequence-3.png \
gnet-client.png \
gsmtp-serverprotocol.png \
auth.png
EXTRA_DIST = $(man_files_in) $(txt_files) $(html_files_in) $(css_files_in) $(png_files_in) $(png_files_thru) $(html_files_thru) mingw.mak
noinst_SCRIPTS = .dox .docbook noinst_SCRIPTS = .dox .docbook
man1_MANS = $(man_files_in) man1_MANS = $(man_files_in)
e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(png_files) $(docbook_files_out) e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(css_files_out) $(png_files_out) $(png_files_thru) $(docbook_files_out)
CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) $(docbook_files_out) doxygen/* *.db *.mu docbook/* CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) $(docbook_files_out) $(png_files_out) $(css_files_out) Doxyfile *.db *.mu doxygen/* docbook/*
SUFFIXES = .txt .html .db .mu SUFFIXES = .txt .html .db .mu
converter_html = $(top_builddir)/bin/txt2html.sh converter_html = $(top_builddir)/bin/txt2html.sh
converter_txt2mu = $(top_builddir)/bin/txt2mu.sh converter_txt2mu = $(top_builddir)/bin/txt2mu.sh
@ -192,22 +251,24 @@ converter_mu2html = $(top_builddir)/bin/mu2html.sh
converter_expand = $(top_builddir)/bin/expand.sh converter_expand = $(top_builddir)/bin/expand.sh
converter_mu2docbook = $(top_builddir)/bin/mu2docbook.sh converter_mu2docbook = $(top_builddir)/bin/mu2docbook.sh
run_doxygen = $(top_builddir)/bin/doxygen.sh run_doxygen = $(top_builddir)/bin/doxygen.sh
run_doxygen_fixup = $(top_builddir)/bin/doxygen_fixup.pl
css = emailrelay.css
all: all-am all: all-am
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .txt .html .db .mu .SUFFIXES: .txt .html .db .mu .css .css_ .png .png_
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& exit 0; \ && { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile $(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -225,68 +286,57 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-man1: $(man1_MANS) $(man_MANS) $(am__aclocal_m4_deps):
install-man1: $(man1_MANS)
@$(NORMAL_INSTALL) @$(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)'; \ @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ { for i in $$list; do echo "$$i"; done; \
for i in $$l2; do \ } | while read p; do \
case "$$i" in \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
*.1*) list="$$list $$i" ;; \ echo "$$d$$p"; echo "$$p"; \
esac; \ done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
fi; \
done; \ done; \
for i in $$list; do \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ while read files; do \
else file=$$i; fi; \ test -z "$$files" || { \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
case "$$ext" in \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
1*) ;; \ done; }
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
done
uninstall-man1: uninstall-man1:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ files=`{ for i in $$list; do echo "$$i"; done; \
for i in $$l2; do \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
case "$$i" in \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
*.1*) list="$$list $$i" ;; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
done
install-e_docDATA: $(e_doc_DATA) install-e_docDATA: $(e_doc_DATA)
@$(NORMAL_INSTALL) @$(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 \ @list='$(e_doc_DATA)'; test -n "$(e_docdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \ echo "$$d$$p"; \
echo " $(e_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_docdir)/$$f'"; \ done | $(am__base_list) | \
$(e_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_docdir)/$$f"; \ while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(e_docdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(e_docdir)" || exit $$?; \
done done
uninstall-e_docDATA: uninstall-e_docDATA:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
@list='$(e_doc_DATA)'; for p in $$list; do \ @list='$(e_doc_DATA)'; test -n "$(e_docdir)" || list=; \
f=$(am__strip_dir) \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
echo " rm -f '$(DESTDIR)$(e_docdir)/$$f'"; \ dir='$(DESTDIR)$(e_docdir)'; $(am__uninstall_files_from_dir)
rm -f "$(DESTDIR)$(e_docdir)/$$f"; \
done
tags: TAGS tags: TAGS
TAGS: TAGS:
@ -295,6 +345,19 @@ CTAGS:
distdir: $(DISTFILES) distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
list=`for p in $$list; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
if test -n "$$list" && \
grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
echo " typically \`make maintainer-clean' will remove them" >&2; \
exit 1; \
else :; fi; \
else :; fi
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \ list='$(DISTFILES)'; \
@ -310,13 +373,17 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d "$(distdir)/$$file"; then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
@ -337,10 +404,15 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
@ -348,6 +420,7 @@ clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@ -366,6 +439,8 @@ dvi-am:
html: html-am html: html-am
html-am:
info: info-am info: info-am
info-am: info-am:
@ -374,18 +449,28 @@ install-data-am: install-data-local install-e_docDATA install-man
install-dvi: install-dvi-am install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-am install-html: install-html-am
install-html-am:
install-info: install-info-am install-info: install-info-am
install-info-am:
install-man: install-man1 install-man: install-man1
install-pdf: install-pdf-am install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am install-ps: install-ps-am
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
@ -425,7 +510,7 @@ uninstall-man: uninstall-man1
.txt.html: .txt.html:
$(converter_html) -a "$(AWK)" "$(top_srcdir)/doc/$*.txt" "$(stylesheet)" > "$*.html" $(converter_html) -a "$(AWK)" "$(top_srcdir)/doc/$*.txt" "$(css)" > "$*.html"
.txt.mu: .txt.mu:
$(converter_txt2mu) -a "$(AWK)" "$(top_srcdir)/doc/$*.txt" > "$*.mu" $(converter_txt2mu) -a "$(AWK)" "$(top_srcdir)/doc/$*.txt" > "$*.mu"
@ -433,6 +518,12 @@ uninstall-man: uninstall-man1
.mu.db: .mu.db:
$(converter_mu2docbook) -a "$(AWK)" -x < "$(top_builddir)/doc/$*.mu" > "$*.db" $(converter_mu2docbook) -a "$(AWK)" -x < "$(top_builddir)/doc/$*.mu" > "$*.db"
.css_.css:
cp "$(top_srcdir)/doc/$*.css_" $*.css
.png_.png:
cp "$(top_srcdir)/doc/$*.png_" $*.png
head.db: $(converter_mu2docbook) head.db: $(converter_mu2docbook)
$(converter_mu2docbook) -a "$(AWK)" --head "E-MailRelay" > head.db.tmp && mv -f head.db.tmp head.db $(converter_mu2docbook) -a "$(AWK)" --head "E-MailRelay" > head.db.tmp && mv -f head.db.tmp head.db
@ -442,11 +533,13 @@ tail.db: $(converter_mu2docbook)
emailrelay.docbook: head.db tail.db userguide.db reference.db developer.db 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 cat head.db userguide.db reference.db developer.db tail.db > emailrelay.docbook
.docbook: emailrelay.docbook .docbook: emailrelay.docbook $(png_files_out)
-xmlto -o docbook html emailrelay.docbook && touch .docbook && cp *.png docbook/ -xmlto -o docbook html emailrelay.docbook && touch .docbook && cp "$(top_srcdir)/doc/"*.png docbook/
.dox: .dox:
$(run_doxygen) "$(HAVE_DOXYGEN)" "$(top_srcdir)" "$(top_builddir)" && touch .dox $(run_doxygen) "$(HAVE_DOXYGEN)" "$(top_srcdir)" "$(top_builddir)" Doxyfile && touch .dox
-$(run_doxygen_fixup) "$(top_builddir)/doc/doxygen"
-cp "$(top_srcdir)/doc/emailrelay-doxygen.css_" "$(top_builddir)/doc/doxygen/emailrelay-doxygen.css"
emailrelay-man.html: emailrelay.1 emailrelay-man.html: emailrelay.1
if test "$(HAVE_MAN2HTML)" = "yes" ; then man2html -r -L. emailrelay.1 < /dev/null > emailrelay-man.html.tmp && mv emailrelay-man.html.tmp emailrelay-man.html ; grep -v '^Content-type:' < emailrelay-man.html | grep -v '^Time:' > emailrelay-man.html.tmp ; mv emailrelay-man.html.tmp emailrelay-man.html ; fi if test "$(HAVE_MAN2HTML)" = "yes" ; then man2html -r -L. emailrelay.1 < /dev/null > emailrelay-man.html.tmp && mv emailrelay-man.html.tmp emailrelay-man.html ; grep -v '^Content-type:' < emailrelay-man.html | grep -v '^Time:' > emailrelay-man.html.tmp ; mv emailrelay-man.html.tmp emailrelay-man.html ; fi
@ -456,10 +549,10 @@ developer.html reference.html userguide.html: $(converter_html)
developer.mu reference.mu userguide.mu: $(converter_txt2mu) developer.mu reference.mu userguide.mu: $(converter_txt2mu)
readme.html: $(top_srcdir)/README $(converter_html) readme.html: $(top_srcdir)/README $(converter_html)
$(converter_html) -a "$(AWK)" "$(top_srcdir)/README" "$(stylesheet)" > readme.html $(converter_html) -a "$(AWK)" "$(top_srcdir)/README" "$(css)" > readme.html
changelog.html: $(top_srcdir)/ChangeLog $(converter_html) changelog.html: $(top_srcdir)/ChangeLog $(converter_html)
$(converter_html) -a "$(AWK)" "$(top_srcdir)/ChangeLog" "$(stylesheet)" > changelog.html $(converter_html) -a "$(AWK)" "$(top_srcdir)/ChangeLog" "$(css)" > changelog.html
emailrelay.1.gz : emailrelay.1 emailrelay.1.gz : emailrelay.1
if test -n "$(GZIP)" ; then $(GZIP) -c "$(top_srcdir)/doc/emailrelay.1" > emailrelay.1.gz ; fi if test -n "$(GZIP)" ; then $(GZIP) -c "$(top_srcdir)/doc/emailrelay.1" > emailrelay.1.gz ; fi
@ -478,12 +571,13 @@ emailrelay-poke.1.gz: emailrelay-poke.1
install-data-local: install-e_docDATA install-data-local: install-e_docDATA
$(mkinstalldirs) "$(DESTDIR)$(e_docdir)/doxygen" $(mkinstalldirs) "$(DESTDIR)$(e_docdir)/doxygen"
for file in doxygen/* ; do $(INSTALL) --mode=644 "$$file" "$(DESTDIR)$(e_docdir)/$$file" ; done for file in doxygen/* ; do $(INSTALL) -m 644 "$$file" "$(DESTDIR)$(e_docdir)/$$file" ; done
uninstall-local: uninstall-local:
-find "$(DESTDIR)$(e_docdir)/doxygen" -type f | xargs rm -f -find "$(DESTDIR)$(e_docdir)/doxygen" -type f | xargs rm -f
-rmdir "$(DESTDIR)$(e_docdir)/doxygen" 2>/dev/null -rmdir "$(DESTDIR)$(e_docdir)/doxygen" 2>/dev/null
-rmdir "$(DESTDIR)$(e_docdir)" 2>/dev/null -rmdir "$(DESTDIR)$(e_docdir)" 2>/dev/null
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@ -3,12 +3,14 @@ E-MailRelay Internals
Module structure Module structure
---------------- ----------------
There are four main C++ libraries in the E-MailRelay code: "glib" provides The main C++ libraries in the E-MailRelay code are: "glib", providing low-level
low-level classes for file-system abstraction, date and time representation, classes for file-system abstraction, date and time representation, string
string utility functions, logging, command line parsing etc., "gnet" provides utility functions, logging, command line parsing etc.; "gssl", which is a thin
network classes using the Berkley socket and Winsock APIs, "gsmtp" contains SMTP abstraction over OpenSSL; "gnet", which provides network classes using the
and message-store classes, and "gpop" contains POP3 classes. All four libraries Berkley socket and Winsock APIs; "gauth", which implements various
are portable between POSIX-like systems (eg. Linux) and Windows. authentication mechanisms; "gsmtp", containing SMTP and message-store classes;
and "gpop", which contains POP3 classes. All of these libraries are portable
between POSIX-like systems (eg. Linux) and Windows.
Under Windows there is an additional library for event handling. Windows has Under Windows there is an additional library for event handling. Windows has
historically built network event processing on top of the GUI event system which historically built network event processing on top of the GUI event system which
@ -26,6 +28,11 @@ This event model means that the server can handle multiple clients
simultaneously from a single thread and the only significant blocking occurs simultaneously from a single thread and the only significant blocking occurs
when external programs are executed (see "--filter" and "--verifier"). when external programs are executed (see "--filter" and "--verifier").
In some ways this makes the implementation more complicated than the equivalent
multi-threaded approach since (for example) it is not possible to wait for a
complete line of input to be received from a remote SMTP client because there
might be other connection that need servicing.
See *C10K Problem* [http://www.kegel.com/c10k.html] for a discussion of See *C10K Problem* [http://www.kegel.com/c10k.html] for a discussion of
different network event models. different network event models.
@ -103,17 +110,17 @@ Windows service
--------------- ---------------
To get E-MailRelay to run as a Windows service there is a service wrapper To get E-MailRelay to run as a Windows service there is a service wrapper
program called "emailrelay-service.exe". This program registers itself as program called "emailrelay-service.exe". This program registers itself as
a service when run with the "--install" commandline switch. When the service a service when run with the "--install" commandline option. When the service
runs the wrapper starts the actual E-MailRelay server by looking for a batch runs the wrapper starts the actual E-MailRelay server by looking for a batch
file called "emailrelay-start.bat" in the same directory as service wrapper file called "emailrelay-start.bat" in the same directory as service wrapper
executable. It reads the contents of this batch file in order to construct the executable. It reads the contents of this batch file in order to construct the
E-MailRelay command-line, adding "--no-daemon" and "--hidden" switches if they E-MailRelay command-line, adding "--no-daemon" and "--hidden" options if they
are not there already. are not there already.
The service name and display name can be added to the wrapper's "--install" The service name and display name can be added to the wrapper's "--install"
command-line, and it is the service name that is used to derive the name of the command-line, and it is the service name that is used to derive the name of the
"start" batch file. This allows more than one server to be run as services, "start" batch file. This allows more than one server to be run as services,
using different server command-line switches on each one. using different server command-line options on each one.
Diagrams Diagrams
-------- --------
@ -128,37 +135,15 @@ State transition diagrams:
Sequence diagrams: Sequence diagrams:
* *Proxy mode forwarding* [sequence-3.png] * *Proxy mode forwarding* [sequence-3.png]
Configuration GUI E-MailRelay GUI
----------------- ---------------
The optional configuration GUI program "emailrelay-gui" uses TrollTech Qt v4 The optional GUI program "emailrelay-gui" uses TrollTech Qt v4 for its user
for its user interface components. The GUI can run as a stand-alone interface components. The GUI can run as a stand-alone configuration helper
configuration helper or as part of a self-extracting installation program called ("--as-configure") or as part of a self-extracting installation
"emailrelay-setup". ("--as-install"). When it runs it checks whether it has a payload of packed
files. If it has then it runs as an installer; if it does not then it runs as a
The packing scheme used to assemble a self-extracting archive is a simple configuration helper. Refer to the comments in "src/gui/guimain.cpp" for more
concatenation of the "stub" executable followed by a table of contents for the details.
payload files, followed by the payload files themselves (possibly compressed by
"zlib"), and ending with an twelve-byte ascii representation of the offset of
the table of contents.
On Windows there are two levels of packing: the "setup" program has a stub
executable written in "C" that prints an "extracting..." message to the standard
output, with a payload comprising another packed executable and a small number of
"C++" runtime library files. The inner packed executable has the emailrelay GUI
program as its stub and all the other installable files, including the main
emailrelay executable, as its payload.
When the GUI runs it checks whether it has a payload of packed files. If it
has then it runs as an installer; if it does not then it runs as a configuration
helper. Refer to the comments in "src/gui/guimain.cpp" for more details.
The code works exactly the same on Windows, Mac OS X and unix-like operating
systems. However, on unix-like operating systems "make install", possibly run
via some package manager, is the preferred way to install files so the "setup"
program is never normally built or distributed. On Mac OS X the default packing
scheme works well enough, but there is also provision for having a separate
payload file within the Mac bundle rather than appending the payload to the stub
executable.
The user interface is structured as a "wizard" having a dialog box with the The user interface is structured as a "wizard" having a dialog box with the
forward and back buttons at the bottom and a single Qt layout object for the forward and back buttons at the bottom and a single Qt layout object for the
@ -171,19 +156,169 @@ key-value pairs into a stringstream (see "src/gui/pages.cpp"). These key-value
pairs are processed by an installer class into a list of action objects (in the pairs are processed by an installer class into a list of action objects (in the
"Command" design pattern) and then the action objects are run in turn. In order "Command" design pattern) and then the action objects are run in turn. In order
to display the progress of the installation each action object is run within a to display the progress of the installation each action object is run within a
timer callback so that the Qt framework get a chance to update the GUI between timer callback so that the Qt framework gets a chance to update the GUI between
each one. each one.
During development the user interface pages and the installer can be tested During development the user interface pages and the installer can be tested
separately since the interface between them is a simple text stream containing separately since the interface between them is a simple text stream containing
key-value pairs. key-value pairs.
When run in "--as-configure" mode the GUI normally ends up simply editing
the "emailrelay.conf" file and/or the "emailrelay.auth" secrets file.
When run in "--as-install" mode the GUI expects to unpack all the E-MailRelay
files from a "payload" archive into target directories.
The packing scheme used for a payload archive is a simple concatenation of the
"stub" executable followed by a table of contents for the payload files,
followed by the payload files themselves (possibly compressed by "zlib"), and
ending with an twelve-byte ascii representation of the offset of the table of
contents.
The payload may be appended to the GUI executable to make a self-extracting
installer, usually then called "emailrelay-setup".
However, on Windows two levels of packing are required: the "emailrelay-setup"
program has a stub executable written in "C" that prints an "extracting..."
message to the standard output, with a payload comprising another packed
executable and a small number of "C++" runtime library files. The inner packed
executable has the emailrelay GUI program as its stub and all the other
installable files, including the main emailrelay executable, as its payload.
On unix-like operating systems it is more natural to use some sort of package
derived from the "make install" process rather than an installer program, so
"emailrelay-setup" ia typically never built.
On Mac OS X the payload is better stored in the installer's application
bundle rather than simply appended to the binary. This is desribed in the next
section.
Windows build
-------------
On Windows E-MailRelay can be built using MinGW or Visual Studio. Makefiles and
Visual Studio 2012 project files are provided in the "src" directory.
For a MinGW build of the E-MailRelay server without TLS/SSL support it should
be sufficient to run make from the "src" directory:
C:\emailrelay\src> PATH=c:\mingw\bin;%PATH%
C:\emailrelay\src> mingw32-make -f mingw.mak
To add TLS/SSL support first install ActiveState perl and make sure that your
MinGW installation contains the MSYS subsystem. Unpack the OpenSSL tarball and
build it as follows:
C:\openssl> PATH=c:\perl\bin;c:\mingw\msys\1.0\bin;c:\mingw\bin;%PATH%
C:\openssl> bash -l
$ ./config
$ mingw32-make
Then edit the E-MailRelay "src/mingw-common.mak" file to enable openssl and run
"mingw32-make" as above.
If building the E-MailRelay GUI then it is best to use MinGW with Qt 5 static
libraries. Start by installing zlib source (eg. to c:/zlib) and then build Qt
using the following "configure" options:
-prefix /c/qt/qt5-static
-I c:/zlib
-L c:/zlib
-static
-release
-force-debug-info
-separate-debug-info
-opensource
-confirm-license
-no-c++11
-fully-process
-no-largefile
-accessibility
-no-sql-sqlite
-no-sql-sqlite2
-no-javascript-jit
-no-qml-debug
-platform win32-g++
-no-sse2
-no-sse3
-no-ssse3
-no-sse4.1
-no-sse4.2
-no-avx
-no-avx2
-no-neon
-no-mips_dsp
-no-mips_dspr2
-no-pkg-config
-system-zlib
-no-gif
-qt-libpng
-no-libjpeg
-no-openssl
-qt-pcre
-qt-xcb
-qt-xkbcommon
-gui
-widgets
-no-rpath
-no-optimized-qmake
-no-nis
-no-cups
-no-iconv
-no-icu
-strip
-no-pch
-no-dbus
-no-xcb
-no-eglfs
-no-directfb
-no-linuxfb
-no-kms
-no-opengl
-no-system-proxies
-no-glib
Start the Qt build by running "mingw32-make" from the "qtbase" directory and
finish off with "mingw32-make install".
Edit the E-MailRelay GUI makefile "src/gui/mingw.mak" so that the E-MailRelay
build uses similar compiler options to the Qt examples and then then build with:
$ mingw32-make -f mingw.mak
Mac OS X packaging
------------------
On Mac OS X the standard "configure ; make ; make install" procedure works best
if the "configure" script is given Mac-like directories on its command-line. The
script "bin/configure-mac.sh" can be used to do this.
The "make" step in "src/main" on Mac OS X additionally builds a simple wrapper
program "emailrelay-start" from "start.cpp" that runs the E-MailRelay server
using a command-line assembled from the "emailrelay.conf" file. This is then
used from the "E-MailRelay-Start" application bundle to provide a Mac-friendly
way of running the server.
Similary the "make" in "src/gui" builds a wrapper program "emailrelay-start-gui"
from "guistart.cpp" that runs "emailrelay-gui.real" and this is used from the
"E-MailRelay-Configure" application bundle.
The self-extracting installer scheme (described above) does work on Mac OS X,
but it is more sensible to use a Mac application bundle (E-MailRelay-Install) to
hold the payload and then wrap the whold thing up in a ".dmg" disk image. The
GUI code supports this by looking for a separate file called "payload" and using
that in preference to any payload archive it finds appended to its own executable.
The format of the "payload" file in the application bundle is the same as is used
in a self-extracting installer.
The makefile in the "src/gui" directory provides the "image" target to create
the E-MailRelay-Install application bundle and the disk image.
Source control Source control
-------------- --------------
The source code is stored in the SourceForge "svn" repository. A working The source code is stored in the SourceForge "svn" repository. A working
copy can be checked out as follows: copy can be checked out as follows:
$ svn co https://emailrelay.svn.sourceforge.net/svnroot/emailrelay $ svn co https://svn.code.sf.net/p/emailrelay/code/trunk
Directory structure Directory structure
------------------- -------------------
@ -201,6 +336,14 @@ Directory structure
A network library using Berkley sockets or Winsock. A network library using Berkley sockets or Winsock.
# src/gssl
A library for using OpenSSL.
# src/gauth
A library for SASL and PAM authentication.
# src/gsmtp # src/gsmtp
An SMTP library. An SMTP library.
@ -223,7 +366,7 @@ Directory structure
# lib # lib
Parent directory for ISO C++ fixups for various compilers. Parent directory for ISO C++ fixups for various older compilers.
# test # test
@ -271,16 +414,13 @@ these cases there are three source files per header. For example, "gsocket.cpp",
Compile-time features Compile-time features
--------------------- ---------------------
Compile-time features can be selected with switches passed to the "configure" Compile-time features can be selected with options passed to the "configure"
script. These include the following: script. These include the following:
* Debug-level logging ("--enable-debug") * Debug-level logging ("--enable-debug")
* IPv6 (Linux only) ("--enable-ipv6") * IPv6 (Linux only) ("--enable-ipv6")
* Configuration GUI ("--enable-gui") * Configuration GUI ("--enable-gui")
* PAM support ("--with-pam")
The "--enable-fhs" switch alters the compiled-in default directories to conform
to the Linux File Hierarchy Standard (FHS). This is recommended for most modern
Linux distributions.
Some functionality can be disabled at compile-time in order to reduce the size Some functionality can be disabled at compile-time in order to reduce the size
of the executable, typically when building for embedded systems: of the executable, typically when building for embedded systems:
@ -290,101 +430,16 @@ of the executable, typically when building for embedded systems:
* Disable administration interface, "--disable-admin" * Disable administration interface, "--disable-admin"
* Disable execution of external programs, "--disable-exec" * Disable execution of external programs, "--disable-exec"
The "--enable-small-config" switch can be used to change the command-line The "--enable-small-config" option can be used to change the command-line
parsing code to use a configuration file instead, resulting in a smaller parsing code to use a configuration file instead, resulting in a smaller
executable. This also removes a lot of the configuration checking code, so it is executable. This also removes a lot of the configuration checking code, so it is
not recommended unless size is critical. (The format of the configuration file not recommended unless size is critical. (The format of the configuration file
is similar to the command-line using the long-form switches without the is similar to the command-line using the long-form options without the
double-dash and using '=' to separate the switch from the switch value.) double-dash and using '=' to separate the option from the option value.)
Use "./configure --help" to see a complete list of options and refer to Use "./configure --help" to see a complete list of options and refer to
"acinclude.m4" for more detailed comments. "acinclude.m4" for more detailed comments.
Patterns
--------
Gang-of-four Design Patterns (ISBN 0-201-63361-2):
+ Factory method
- GNet::EventLoop::create()
- GNet::Server::newPeer()
- GSmtp::MessageStore::newMessage()
+ Iterator
- G::DirectoryIterator
- GNet::EventHandlerList::begin()/end()
- GSmtp::MessageStore::iterator()
+ Singleton
- G::LogOutput
- GGui::ApplicationInstance
- GNet::EventLoop
- GNet::TimerList
+ Facade
- G::File
- GNet::Address
+ Decorator
- GSmtp::ProtocolMessage
+ Command
- Installer
Lakos' Large Scale C++ Software Design patterns (ISBN 0-201-63362-0):
+ Insulation; fully insulating concrete class (Meyer's Effective C++ Item 34, pimple pattern)
- G::DirectoryIterator
- GNet::Address
- GNet::Resolver
- GSmtp::ProtocolMessage
+ Insulation; protocol class
- GNet::EventHandler
- GSmtp::NewMessage
- GSmtp::StoredMessage
- GSmtp::ProtocolMessage
- GSmtp::ServerProtocol::Sender
- GSmtp::ClientProtocol::Sender
Meyer's More Effective C++ patterns (ISBN 0-201-63371-X):
+ Reference counting (Item 29)
- GSmtp::MessageStore::Iterator
- G::Slot0
+ Lazy evaluation (Item 17)
- GNet::EventHandlerList::list()
- G::Date::weekday()
Other patterns:
+ Finite state machine
- GSmtp::ServerProtocol
+ Slot/signal
- G::Slot0
- G::Signal0
+ Exception-safe assignment using swap
- G::Slot0
+ Dependency injection
- GSmtp::Server::newProtocolMessage()
Idioms Idioms
------ ------
The "<<=" operator defined in "src/glib/gmemory.h" is used idiomatically The "<<=" operator defined in "src/glib/gmemory.h" is used idiomatically
@ -392,4 +447,4 @@ to reassign a std::auto_ptr<> since reset() is not always available.
Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.

BIN
doc/diagram-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
doc/diagram-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

13
doc/doxygen-header.html Normal file
View File

@ -0,0 +1,13 @@
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>$title</title>
<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/>
<link href="$relpath$search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="$relpath$search/search.js"></script>
<link href="$relpath$doxygen.css" rel="stylesheet" type="text/css"/>
<link href="$relpath$emailrelay-doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -1,24 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>E-MailRelay: $title</title>
<meta name="robots" content="noindex,nofollow">
<link href="doxygen.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
h1 { text-align: center; font-family: veranda, arial, helvetica, sans-serif; color: #09c ; }
h2 { font-family: veranda, geneva, arial, helvetica, sans-serif; color: #09c ; }
h3 { font-family: veranda, geneva, arial, helvetica, sans-serif; color: #09c ; }
a { color: #09c }
a:visited { color: #09c }
a.qindex { color: #09c }
a.qindex:visited { color: #09c }
a.qindex:hover { background-color: #ccf }
a.qindexHL { color: #09c ; background-color: #eeeeff ; }
a.qindexHL:visited { color: #09c ; background-color: #eeeeff ; }
a.qindexHL:hover { color: #09c ; background-color: #ccf; }
-->
</style>
</head>
<body bgcolor="#ffffff">

148
doc/emailrelay-doxygen.css_ Normal file
View File

@ -0,0 +1,148 @@
/*
Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
*/
/*
emailrelay-doxygen.css
This stylesheet is included by the customised html header
after doxygen.css. It repeats those stanzas of doxygen.css
that it needs to change and the include order makes sure
that this stylesheet takes precedence.
This file is only installed into the doxygen directory by
the makefile if the "doxygen-fixup" post-processing perl
script succeeds. If that script decides to do nothing then
the standard doxygen stylesheet operates on its own without
any interference from here. Specifically, the perl script
will fail silently if there is no "Doxygen 1.6/7" marker in
the generated html files, so with any version of doxygen
before 1.6 or after 1.7 the output will have the standard
doxygen style.
The ".memItemRight a:first-child" stanza is used to operate
on the member function name in the list of member functions,
but not the subsequent function parameters.
The "implements", "realmemname", "referencedby", etc class
names are added to the html by the "doxygen-fixup" script.
The #09c colour is the emailrelay heading colour, with #068
being a darker variant used within doxygen's blue-shaded
tables.
*/
body, table, div, p, dl
{
font-family: verdana, arial, helvetica, sans-serif ;
}
div.tabs a:link, div.tabs a:visited, div.tabs a:active, div.tabs A:hover
{
color: #09c ;
}
h1, h2, h3
{
color: #09c ;
}
a
{
color: black;
text-decoration: none;
font-weight: normal;
}
a:visited
{
color: black;
text-decoration: none;
font-weight: normal;
}
a:hover
{
color: black;
text-decoration: underline;
font-weight: normal;
}
.contents a, .contents a:visited
{
color: #09c ;
text-decoration: none;
font-weight: normal;
}
a.el
{
color: black;
text-decoration: none;
font-weight: normal;
}
a.el:visited
{
color: black;
text-decoration: none;
font-weight: normal;
}
.memItemRight a:first-child
{
color: black ;
text-decoration: none;
font-weight: bold;
}
.definitionat, .definitionat a:visited, .definitionat a
{
color: grey;
text-decoration: none;
font-weight: normal;
}
.references, .references a:visited, .references a
{
color: grey;
text-decoration: none;
font-weight: normal;
}
.referencedby, .referencedby a:visited, .referencedby a
{
color: grey;
text-decoration: none;
font-weight: normal;
}
.implements, .implements a:visited, .implements a
{
color: grey;
text-decoration: none;
font-weight: normal;
}
table.memname, td.memname
{
color: black;
text-decoration: none;
font-weight: normal;
}
td.paramname em, td.paramname code
{
color: black;
text-decoration: none;
font-weight: normal;
}
.realmemname
{
color: #068 ;
text-decoration: none;
font-weight: bold;
}

View File

@ -1,8 +1,8 @@
.\" Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> .\" Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" .\"
.\" This program is free software: you can redistribute it and/or modify .\" 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 .\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation, either version 3 of the License, or .\" the Free Software Foundation, either version 3 of the License, or
.\" (at your option) any later version. .\" (at your option) any later version.
.\" .\"
.\" This program is distributed in the hope that it will be useful, .\" This program is distributed in the hope that it will be useful,
@ -22,19 +22,19 @@ emailrelay-filter-copy \- an E-MailRelay filter for pop-by-name
.B emailrelay-filter-copy .B emailrelay-filter-copy
[--help] [--help]
.SH DESCRIPTION .SH DESCRIPTION
The The
.I emailrelay-filter-copy .I emailrelay-filter-copy
utility can be used as an utility can be used as an
.B E-MailRelay .B E-MailRelay
.I "--filter" .I "--filter"
pre-processor program to copy e-mail messages from the main spool pre-processor program to copy e-mail messages from the main spool
directory into all available sub-directories. When using the directory into all available sub-directories. When using the
.I "--pop-by-name" .I "--pop-by-name"
feature of the feature of the
.B E-MailRelay .B E-MailRelay
server this results in messages being copied all POP clients. server this results in messages being copied to all POP clients.
.LP .LP
Only the message envelope is copied; the content file stays in Only the message envelope is copied; the content file stays in
the main directory. the main directory.
.SH SEE ALSO .SH SEE ALSO
.BR emailrelay (1), .BR emailrelay (1),

View File

@ -18,21 +18,21 @@ emailrelay - e-mail transfer agent and proxy
[OPTIONS] [OPTIONS]
<P> <P>
<B>emailrelay </B> <B>emailrelay</B>
--as-server --as-server
<P> <P>
<B>emailrelay</B> <B>emailrelay</B>
--as-client --as-client
<I>server-address</I> <I>server-address</I>
<P> <P>
<B>emailrelay</B> <B>emailrelay</B>
--as-proxy --as-proxy
<I>server-address</I> <I>server-address</I>
<A NAME="lbAD">&nbsp;</A> <A NAME="lbAD">&nbsp;</A>
@ -41,18 +41,18 @@ emailrelay - e-mail transfer agent and proxy
<I>emailrelay</I> <I>emailrelay</I>
is a simple SMTP proxy and store-and-forward message transfer agent. is a simple SMTP proxy and store-and-forward message transfer agent.
It does store-and-forward mail relay to a fixed next-hop server, without It does store-and-forward mail relay to a fixed next-hop server, without
any routing. any routing.
<P> <P>
It runs in two main modes: a storage daemon It runs in two main modes: a storage daemon
(<I>--as-server</I>) (<I>--as-server</I>)
and a forwarding and a forwarding
agent agent
(<I>--as-client</I>). (<I>--as-client</I>).
The storage daemon is an SMTP server which stores e-mail The storage daemon is an SMTP server which stores e-mail
messages in a local spool directory. The forwarding agent acts as an messages in a local spool directory. The forwarding agent acts as an
SMTP client sending the spooled e-mail messages on to the next SMTP client sending the spooled e-mail messages on to the next
SMTP server in the chain. SMTP server in the chain.
@ -83,15 +83,15 @@ Disables the smtp vrfy command and sends less verbose smtp responses.
<DT><B>-q, --as-client </B><I>&lt;host:port&gt;</I> <DT><B>-q, --as-client </B><I>&lt;host:port&gt;</I>
<DD> <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>. Runs as a client, forwarding all 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>&lt;host:port&gt;</I> <DT><B>-y, --as-proxy </B><I>&lt;host:port&gt;</I>
<DD> <DD>
Runs as a proxy: equivalent to <I>--log</I> <I>--close-stderr</I> <I>--poll</I>=0 <I>--forward-to</I>. Runs as a proxy server, forwarding each mail immediately to &lt;host&gt;: equivalent to <I>--log</I> <I>--close-stderr</I> <I>--poll</I>=0 <I>--forward-to</I>.
<DT><B>-d, --as-server </B> <DT><B>-d, --as-server </B>
<DD> <DD>
Runs as a server: equivalent to <I>--log</I> <I>--close-stderr</I>. Runs as a server, storing mail in the spool directory: equivalent to <I>--log</I> <I>--close-stderr</I>.
<DT><B>-C, --client-auth </B><I>&lt;file&gt;</I> <DT><B>-C, --client-auth </B><I>&lt;file&gt;</I>
<DD> <DD>
@ -103,7 +103,11 @@ Specifies an external program to process messages when they are forwarded.
<DT><B>-j, --client-tls </B> <DT><B>-j, --client-tls </B>
<DD> <DD>
Enables tls/ssl layer for smtp client (if openssl built in). Enables negotiated tls/ssl for smtp client (if openssl built in).
<DT><B>-b, --client-tls-connection </B>
<DD>
Enables smtp over tls/ssl for smtp client (if openssl built in).
<DT><B>-e, --close-stderr </B> <DT><B>-e, --close-stderr </B>
<DD> <DD>
@ -115,7 +119,7 @@ Sets the timeout (in seconds) when connecting to a remote server (default is 40)
<DT><B>-g, --debug </B> <DT><B>-g, --debug </B>
<DD> <DD>
Generates debug-level logging if compiled-in. Generates debug-level logging if built in.
<DT><B>-D, --domain </B><I>&lt;fqdn&gt;</I> <DT><B>-D, --domain </B><I>&lt;fqdn&gt;</I>
<DD> <DD>
@ -148,14 +152,14 @@ Displays help text and exits.
<DD> <DD>
Enables immediate forwarding of messages as soon as they are received (requires <I>--forward-to</I>). Enables immediate forwarding of messages as soon as they are received (requires <I>--forward-to</I>).
<DT><B>-I, --interface </B><I>&lt;ip-address&gt;</I> <DT><B>-I, --interface </B><I>&lt;ip-list&gt;</I>
<DD> <DD>
Defines the listening interface for incoming connections. Defines the listening interface(s) for incoming connections (comma-separated list with optional smtp=,pop=,admin= qualifiers).
<DT><B>-l, --log </B> <DT><B>-l, --log </B>
<DD> <DD>
Writes log information on standard error and syslog. Writes log information on standard error and syslog (but see <I>--close-stderr</I> and <I>--no-syslog</I>).
<DT><B>-L, --log-time </B> <DT><B>-L, --log-time </B>
<DD> <DD>
@ -179,7 +183,7 @@ Defines a file for storing the daemon process-id.
<DT><B>-O, --poll </B><I>&lt;period&gt;</I> <DT><B>-O, --poll </B><I>&lt;period&gt;</I>
<DD> <DD>
Enables polling of the spool directory for messages to be forwarded with the specified period (requires <I>--forward-to</I>). Enables polling of the spool directory for messages to be forwarded with the specified period (zero means on client disconnection) (requires <I>--forward-to</I>).
<DT><B>-B, --pop </B> <DT><B>-B, --pop </B>
<DD> <DD>
@ -191,7 +195,7 @@ Defines the pop server secrets file (default is <I>/etc/emailrelay.auth</I>).
<DT><B>-J, --pop-by-name </B> <DT><B>-J, --pop-by-name </B>
<DD> <DD>
Modifies the pop spool directory according to the user name (requires <I>--pop</I>). Modifies the pop spool directory according to the pop user name (requires <I>--pop</I>).
<DT><B>-G, --pop-no-delete </B> <DT><B>-G, --pop-no-delete </B>
<DD> <DD>
@ -199,15 +203,15 @@ Disables message deletion via pop (requires <I>--pop</I>).
<DT><B>-E, --pop-port </B><I>&lt;port&gt;</I> <DT><B>-E, --pop-port </B><I>&lt;port&gt;</I>
<DD> <DD>
Specifies the pop listening port number (requires <I>--pop</I>). Specifies the pop listening port number (default is 110) (requires <I>--pop</I>).
<DT><B>-p, --port </B><I>&lt;port&gt;</I> <DT><B>-p, --port </B><I>&lt;port&gt;</I>
<DD> <DD>
Specifies the smtp listening port number. Specifies the smtp listening port number (default is 25).
<DT><B>-w, --prompt-timeout </B><I>&lt;time&gt;</I> <DT><B>-w, --prompt-timeout </B><I>&lt;time&gt;</I>
<DD> <DD>
Sets the timeout (in seconds) for getting an initial prompt from the server. Sets the timeout (in seconds) for getting an initial prompt from the server (default is 20).
<DT><B>-r, --remote-clients </B> <DT><B>-r, --remote-clients </B>
<DD> <DD>
@ -223,7 +227,7 @@ Enables authentication of remote clients, using the given secrets file.
<DT><B>-K, --server-tls </B><I>&lt;pem-file&gt;</I> <DT><B>-K, --server-tls </B><I>&lt;pem-file&gt;</I>
<DD> <DD>
Enables tls/ssl layer for smtp server using the given openssl certificate file (if openssl built in). Enables negotiated tls/ssl for smtp server using the given openssl certificate file (which must be in the directory trusted by openssl).
<DT><B>-M, --size </B><I>&lt;bytes&gt;</I> <DT><B>-M, --size </B><I>&lt;bytes&gt;</I>
<DD> <DD>
@ -236,6 +240,10 @@ Specifies the spool directory (default is <I>/var/spool/emailrelay</I>).
<DD> <DD>
Forces syslog output if logging is enabled (overrides <I>--no-syslog</I>). Forces syslog output if logging is enabled (overrides <I>--no-syslog</I>).
<DT><B>-0, --tls-config </B><I>&lt;flags&gt;</I>
<DD>
Sets tls configuration flags (eg. 2 for SSLv2 support).
<DT><B>-u, --user </B><I>&lt;username&gt;</I> <DT><B>-u, --user </B><I>&lt;username&gt;</I>
<DD> <DD>
@ -265,6 +273,9 @@ GNU style...
/usr/local/etc/emailrelay.conf.template /usr/local/etc/emailrelay.conf.template
<BR> <BR>
/usr/local/etc/pam.d/emailrelay
<BR>
/usr/local/libexec/emailrelay/emailrelay-filter-copy /usr/local/libexec/emailrelay/emailrelay-filter-copy
<BR> <BR>
@ -310,10 +321,10 @@ FHS style...
/etc/emailrelay.conf /etc/emailrelay.conf
<BR> <BR>
/etc/emailrelay.conf.template /etc/init.d/emailrelay
<BR> <BR>
/etc/init.d/emailrelay /etc/pam.d/emailrelay
<BR> <BR>
/usr/lib/emailrelay/emailrelay-filter-copy /usr/lib/emailrelay/emailrelay-filter-copy
@ -386,4 +397,4 @@ This document was created by
using the manual pages.<BR> using the manual pages.<BR>
</BODY> </BODY>
</HTML> </HTML>
<!-- Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. --> <!-- Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->

View File

@ -1,8 +1,8 @@
.\" Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> .\" Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" .\"
.\" This program is free software: you can redistribute it and/or modify .\" 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 .\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation, either version 3 of the License, or .\" the Free Software Foundation, either version 3 of the License, or
.\" (at your option) any later version. .\" (at your option) any later version.
.\" .\"
.\" This program is distributed in the hope that it will be useful, .\" This program is distributed in the hope that it will be useful,
@ -22,8 +22,8 @@ emailrelay-passwd \- a password encoding utility for E-MailRelay
is a utility which reads a single plaintext password from the standard is a utility which reads a single plaintext password from the standard
input, and writes out an encoded form onto the standard input, and writes out an encoded form onto the standard
output. The encoded form is suitable for pasting into a CRAM-MD5 output. The encoded form is suitable for pasting into a CRAM-MD5
line in an line in an
.B emailrelay .B emailrelay
secrets file. secrets file.
.LP .LP
A secrets file containing two CRAM-MD5 passwords might look like A secrets file containing two CRAM-MD5 passwords might look like

View File

@ -1,8 +1,8 @@
.\" Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> .\" Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" .\"
.\" This program is free software: you can redistribute it and/or modify .\" 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 .\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation, either version 3 of the License, or .\" the Free Software Foundation, either version 3 of the License, or
.\" (at your option) any later version. .\" (at your option) any later version.
.\" .\"
.\" This program is distributed in the hope that it will be useful, .\" This program is distributed in the hope that it will be useful,
@ -20,9 +20,9 @@ emailrelay-poke \- forces an E-MailRelay server to deliver spooled mail
[ admin-port [ admin-command ] ] [ admin-port [ admin-command ] ]
.SH DESCRIPTION .SH DESCRIPTION
.I emailrelay-poke .I emailrelay-poke
is a lightweight utility which connects to the is a lightweight utility which connects to the
.I emailrelay .I emailrelay
administration interface and executes the administration interface and executes the
.B flush .B flush
command. command.
.SH SEE ALSO .SH SEE ALSO

View File

@ -1,8 +1,8 @@
.\" Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> .\" Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" .\"
.\" This program is free software: you can redistribute it and/or modify .\" 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 .\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation, either version 3 of the License, or .\" the Free Software Foundation, either version 3 of the License, or
.\" (at your option) any later version. .\" (at your option) any later version.
.\" .\"
.\" This program is distributed in the hope that it will be useful, .\" This program is distributed in the hope that it will be useful,
@ -17,21 +17,21 @@
emailrelay-submit \- a submission utility for E-MailRelay emailrelay-submit \- a submission utility for E-MailRelay
.SH SYNOPSIS .SH SYNOPSIS
.B emailrelay-submit .B emailrelay-submit
[--help] [--verbose] [--spool-dir [--help] [--verbose] [--spool-dir
.IR spool-directory ] .IR spool-directory ]
[--from [--from
.IR from-address ] .IR from-address ]
.I to-address .I to-address
.RI [ to-address \ ...] .RI [ to-address \ ...]
.SH DESCRIPTION .SH DESCRIPTION
.I emailrelay-submit .I emailrelay-submit
is a utility which reads an RFC822 e-mail message from the standard is a utility which reads an RFC822 e-mail message from the standard
input, with SMTP envelope recipient addresses passed on the input, with SMTP envelope recipient addresses passed on the
command-line, and writes it into the command-line, and writes it into the
.B E-MailRelay .B E-MailRelay
spool directory. spool directory.
.LP .LP
The verbose switch causes the path of the new content file The verbose option causes the path of the new content file
to be printed. to be printed.
.SH SEE ALSO .SH SEE ALSO
.BR emailrelay (1), .BR emailrelay (1),

View File

@ -1,8 +1,8 @@
.\" Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> .\" Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
.\" .\"
.\" This program is free software: you can redistribute it and/or modify .\" 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 .\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation, either version 3 of the License, or .\" the Free Software Foundation, either version 3 of the License, or
.\" (at your option) any later version. .\" (at your option) any later version.
.\" .\"
.\" This program is distributed in the hope that it will be useful, .\" This program is distributed in the hope that it will be useful,
@ -19,34 +19,34 @@ emailrelay \- e-mail transfer agent and proxy
.B emailrelay .B emailrelay
[OPTIONS] [OPTIONS]
.LP .LP
.B emailrelay .B emailrelay
--as-server --as-server
.LP .LP
.B emailrelay .B emailrelay
--as-client --as-client
.I server-address .I server-address
.LP .LP
.B emailrelay .B emailrelay
--as-proxy --as-proxy
.I server-address .I server-address
.SH DESCRIPTION .SH DESCRIPTION
.I emailrelay .I emailrelay
is a simple SMTP proxy and store-and-forward message transfer agent. is a simple SMTP proxy and store-and-forward message transfer agent.
It does store-and-forward mail relay to a fixed next-hop server, without It does store-and-forward mail relay to a fixed next-hop server, without
any routing. any routing.
.LP .LP
It runs in two main modes: a storage daemon It runs in two main modes: a storage daemon
.RI ( --as-server ) .RI ( --as-server )
and a forwarding and a forwarding
agent agent
.RI ( --as-client ). .RI ( --as-client ).
The storage daemon is an SMTP server which stores e-mail The storage daemon is an SMTP server which stores e-mail
messages in a local spool directory. The forwarding agent acts as an messages in a local spool directory. The forwarding agent acts as an
SMTP client sending the spooled e-mail messages on to the next SMTP client sending the spooled e-mail messages on to the next
SMTP server in the chain. SMTP server in the chain.
.LP .LP
It can also run in a third mode, as a proxy server It can also run in a third mode, as a proxy server
.RI ( --as-proxy ). .RI ( --as-proxy ).
In this mode all messages are forwarded immediately to the next-hop In this mode all messages are forwarded immediately to the next-hop
server. Messages are only fully accepted from the sender once they server. Messages are only fully accepted from the sender once they
have been successfully delivered to the next-hop server. have been successfully delivered to the next-hop server.
@ -62,13 +62,13 @@ Enables the terminate command on the admin interface.
Disables the smtp vrfy command and sends less verbose smtp responses. Disables the smtp vrfy command and sends less verbose smtp responses.
.TP .TP
.B \-q, --as-client \fI<host: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. Runs as a client, forwarding all 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 .TP
.B \-y, --as-proxy \fI<host:port>\fR .B \-y, --as-proxy \fI<host:port>\fR
Runs as a proxy: equivalent to \fI--log\fR \fI--close-stderr\fR \fI--poll\fR=0 \fI--forward-to\fR. Runs as a proxy server, forwarding each mail immediately to <host>: equivalent to \fI--log\fR \fI--close-stderr\fR \fI--poll\fR=0 \fI--forward-to\fR.
.TP .TP
.B \-d, --as-server .B \-d, --as-server
Runs as a server: equivalent to \fI--log\fR \fI--close-stderr\fR. Runs as a server, storing mail in the spool directory: equivalent to \fI--log\fR \fI--close-stderr\fR.
.TP .TP
.B \-C, --client-auth \fI<file>\fR .B \-C, --client-auth \fI<file>\fR
Enables smtp authentication with the remote server, using the given secrets file. Enables smtp authentication with the remote server, using the given secrets file.
@ -77,7 +77,10 @@ Enables smtp authentication with the remote server, using the given secrets file
Specifies an external program to process messages when they are forwarded. Specifies an external program to process messages when they are forwarded.
.TP .TP
.B \-j, --client-tls .B \-j, --client-tls
Enables tls/ssl layer for smtp client (if openssl built in). Enables negotiated tls/ssl for smtp client (if openssl built in).
.TP
.B \-b, --client-tls-connection
Enables smtp over tls/ssl for smtp client (if openssl built in).
.TP .TP
.B \-e, --close-stderr .B \-e, --close-stderr
Closes the standard error stream soon after start-up. Closes the standard error stream soon after start-up.
@ -86,7 +89,7 @@ Closes the standard error stream soon after start-up.
Sets the timeout (in seconds) when connecting to a remote server (default is 40). Sets the timeout (in seconds) when connecting to a remote server (default is 40).
.TP .TP
.B \-g, --debug .B \-g, --debug
Generates debug-level logging if compiled-in. Generates debug-level logging if built in.
.TP .TP
.B \-D, --domain \fI<fqdn>\fR .B \-D, --domain \fI<fqdn>\fR
Sets an override for the host's fully qualified domain name. Sets an override for the host's fully qualified domain name.
@ -112,11 +115,11 @@ Displays help text and exits.
.B \-m, --immediate .B \-m, --immediate
Enables immediate forwarding of messages as soon as they are received (requires \fI--forward-to\fR). Enables immediate forwarding of messages as soon as they are received (requires \fI--forward-to\fR).
.TP .TP
.B \-I, --interface \fI<ip-address>\fR .B \-I, --interface \fI<ip-list>\fR
Defines the listening interface for incoming connections. Defines the listening interface(s) for incoming connections (comma-separated list with optional smtp=,pop=,admin= qualifiers).
.TP .TP
.B \-l, --log .B \-l, --log
Writes log information on standard error and syslog. Writes log information on standard error and syslog (but see \fI--close-stderr\fR and \fI--no-syslog\fR).
.TP .TP
.B \-L, --log-time .B \-L, --log-time
Adds a timestamp to the logging output. Adds a timestamp to the logging output.
@ -134,7 +137,7 @@ Disables syslog output (always overridden by \fI--syslog\fR).
Defines a file for storing the daemon process-id. Defines a file for storing the daemon process-id.
.TP .TP
.B \-O, --poll \fI<period>\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). Enables polling of the spool directory for messages to be forwarded with the specified period (zero means on client disconnection) (requires \fI--forward-to\fR).
.TP .TP
.B \-B, --pop .B \-B, --pop
Enables the pop server. Enables the pop server.
@ -143,19 +146,19 @@ Enables the pop server.
Defines the pop server secrets file (default is \fI/etc/emailrelay.auth\fR). Defines the pop server secrets file (default is \fI/etc/emailrelay.auth\fR).
.TP .TP
.B \-J, --pop-by-name .B \-J, --pop-by-name
Modifies the pop spool directory according to the user name (requires \fI--pop\fR). Modifies the pop spool directory according to the pop user name (requires \fI--pop\fR).
.TP .TP
.B \-G, --pop-no-delete .B \-G, --pop-no-delete
Disables message deletion via pop (requires \fI--pop\fR). Disables message deletion via pop (requires \fI--pop\fR).
.TP .TP
.B \-E, --pop-port \fI<port>\fR .B \-E, --pop-port \fI<port>\fR
Specifies the pop listening port number (requires \fI--pop\fR). Specifies the pop listening port number (default is 110) (requires \fI--pop\fR).
.TP .TP
.B \-p, --port \fI<port>\fR .B \-p, --port \fI<port>\fR
Specifies the smtp listening port number. Specifies the smtp listening port number (default is 25).
.TP .TP
.B \-w, --prompt-timeout \fI<time>\fR .B \-w, --prompt-timeout \fI<time>\fR
Sets the timeout (in seconds) for getting an initial prompt from the server. Sets the timeout (in seconds) for getting an initial prompt from the server (default is 20).
.TP .TP
.B \-r, --remote-clients .B \-r, --remote-clients
Allows remote clients to connect. Allows remote clients to connect.
@ -167,7 +170,7 @@ Sets the response timeout (in seconds) when talking to a remote server (default
Enables authentication of remote clients, using the given secrets file. Enables authentication of remote clients, using the given secrets file.
.TP .TP
.B \-K, --server-tls \fI<pem-file>\fR .B \-K, --server-tls \fI<pem-file>\fR
Enables tls/ssl layer for smtp server using the given openssl certificate file (if openssl built in). Enables negotiated tls/ssl for smtp server using the given openssl certificate file (which must be in the directory trusted by openssl).
.TP .TP
.B \-M, --size \fI<bytes>\fR .B \-M, --size \fI<bytes>\fR
Limits the size of submitted messages. Limits the size of submitted messages.
@ -178,6 +181,9 @@ Specifies the spool directory (default is \fI/var/spool/emailrelay\fR).
.B \-k, --syslog .B \-k, --syslog
Forces syslog output if logging is enabled (overrides \fI--no-syslog\fR). Forces syslog output if logging is enabled (overrides \fI--no-syslog\fR).
.TP .TP
.B \-0, --tls-config \fI<flags>\fR
Sets tls configuration flags (eg. 2 for SSLv2 support).
.TP
.B \-u, --user \fI<username>\fR .B \-u, --user \fI<username>\fR
Names the effective user to switch to if started as root (default is \fIdaemon\fR). Names the effective user to switch to if started as root (default is \fIdaemon\fR).
.TP .TP
@ -196,6 +202,8 @@ GNU style...
.br .br
/usr/local/etc/emailrelay.conf.template /usr/local/etc/emailrelay.conf.template
.br .br
/usr/local/etc/pam.d/emailrelay
.br
/usr/local/libexec/emailrelay/emailrelay-filter-copy /usr/local/libexec/emailrelay/emailrelay-filter-copy
.br .br
/usr/local/libexec/emailrelay/emailrelay-poke /usr/local/libexec/emailrelay/emailrelay-poke
@ -226,10 +234,10 @@ FHS style...
.br .br
/etc/emailrelay.conf /etc/emailrelay.conf
.br .br
/etc/emailrelay.conf.template
.br
/etc/init.d/emailrelay /etc/init.d/emailrelay
.br .br
/etc/pam.d/emailrelay
.br
/usr/lib/emailrelay/emailrelay-filter-copy /usr/lib/emailrelay/emailrelay-filter-copy
.br .br
/usr/lib/emailrelay/emailrelay-poke /usr/lib/emailrelay/emailrelay-poke

View File

@ -1,5 +1,12 @@
/*
Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
*/
body /*
emailrelay.css
*/
body
{ {
font-family: verdana, arial, helvetica, sans-serif ; font-family: verdana, arial, helvetica, sans-serif ;
@ -26,7 +33,7 @@ h1
color: #09c ; color: #09c ;
} }
div.Header h1 div.Header h1
{ {
margin: 0px ; margin: 0px ;
} }
@ -93,7 +100,7 @@ h2
color: #09c ; color: #09c ;
} }
p p
{ {
font-family: verdana, arial, helvetica, sans-serif ; font-family: verdana, arial, helvetica, sans-serif ;
text-align: justify ; text-align: justify ;
@ -136,7 +143,7 @@ a.a-toc
margin: 0px ; margin: 0px ;
} }
a.a-toc:hover a.a-toc:hover
{ {
color: #09c ; color: #09c ;
background-color: #ccc ; background-color: #ccc ;
@ -149,7 +156,7 @@ a.a-toc-expander
font-size: smaller ; font-size: smaller ;
} }
a.a-toc-expander:hover a.a-toc-expander:hover
{ {
color: #09c ; color: #09c ;
background-color: #ccc ; background-color: #ccc ;
@ -166,17 +173,17 @@ a.a-href
font-weight: bold ; font-weight: bold ;
} }
a.a-href:link a.a-href:link
{ {
color: #09c ; color: #09c ;
} }
a.a-href:visited a.a-href:visited
{ {
color: #07a ; color: #07a ;
} }
a.a-href:hover a.a-href:hover
{ {
color: #09c ; color: #09c ;
background-color: #ddd ; background-color: #ddd ;

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

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

View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,
@ -14,13 +14,23 @@
## You should have received a copy of the GNU General Public License ## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>. ## along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
noinst_LIBRARIES = libfragments.a
INCLUDES = -I$(top_srcdir)/lib/$(COMPILER_VERSION) .SUFFIXES: .css_ .css .png_ .png
INCLUDES += -I$(top_srcdir)/src/glib
INCLUDES += -I$(top_srcdir)/src/gssl .css_.css:
INCLUDES += -I$(top_srcdir)/src/gnet cmd /c copy $*.css_ $*.css
libfragments_a_SOURCES = empty.cpp
libfragments_a_LIBADD = @FRAGMENTS_LIST@ .png_.png:
libfragments_a_DEPENDENCIES = @FRAGMENTS_LIST@ cmd /c copy $*.png_ $*.png
distclean-local:
$(RM) g*.cpp all: emailrelay.css emailrelay-doxygen.css gsmtp-classes.png gnet-classes.png sequence-3.png gnet-client.png gsmtp-serverprotocol.png auth.png
#emailrelay.css: emailrelay.css_
#emailrelay-doxygen.css: emailrelay-doxygen.css_
#gsmtp-classes.png: gsmtp-classes.png_
#gnet-classes.png: gnet-classes.png_
#sequence-3.png: sequence-3.png_
#gnet-client.png: gnet-client.png_
#gsmtp-serverprotocol.png: gsmtp-serverprotocol.png_
#auth.png: auth.png_

View File

@ -5,9 +5,9 @@ Command line usage
------------------ ------------------
The "emailrelay" program supports the following command-line usage: The "emailrelay" program supports the following command-line usage:
emailrelay [<switch> [<switch> ...]] emailrelay [<option> [<option> ...]]
where <switch> is: where <option> is:
# --admin (-a) # --admin (-a)
Enables the administration interface and specifies its listening port number. Enables the administration interface and specifies its listening port number.
@ -18,13 +18,13 @@ where <switch> is:
Disables the smtp vrfy command and sends less verbose smtp responses. Disables the smtp vrfy command and sends less verbose smtp responses.
# --as-client (-q) # --as-client (-q)
Runs as a client, forwarding spooled mail to <host>: equivalent to "--log --no-syslog --no-daemon --dont-serve --forward --forward-to". Runs as a client, forwarding all spooled mail to <host>: equivalent to "--log --no-syslog --no-daemon --dont-serve --forward --forward-to".
# --as-proxy (-y) # --as-proxy (-y)
Runs as a proxy: equivalent to "--log --close-stderr --poll=0 --forward-to". Runs as a proxy server, forwarding each mail immediately to <host>: equivalent to "--log --close-stderr --poll=0 --forward-to".
# --as-server (-d) # --as-server (-d)
Runs as a server: equivalent to "--log --close-stderr". Runs as a server, storing mail in the spool directory: equivalent to "--log --close-stderr".
# --client-auth (-C) # --client-auth (-C)
Enables smtp authentication with the remote server, using the given secrets file. Enables smtp authentication with the remote server, using the given secrets file.
@ -33,7 +33,10 @@ where <switch> is:
Specifies an external program to process messages when they are forwarded. Specifies an external program to process messages when they are forwarded.
# --client-tls (-j) # --client-tls (-j)
Enables tls/ssl layer for smtp client (if openssl built in). Enables negotiated tls/ssl for smtp client (if openssl built in).
# --client-tls-connection (-b)
Enables smtp over tls/ssl for smtp client (if openssl built in).
# --close-stderr (-e) # --close-stderr (-e)
Closes the standard error stream soon after start-up. Closes the standard error stream soon after start-up.
@ -42,7 +45,7 @@ where <switch> is:
Sets the timeout (in seconds) when connecting to a remote server (default is 40). Sets the timeout (in seconds) when connecting to a remote server (default is 40).
# --debug (-g) # --debug (-g)
Generates debug-level logging if compiled-in. Generates debug-level logging if built in.
# --domain (-D) # --domain (-D)
Sets an override for the host's fully qualified domain name. Sets an override for the host's fully qualified domain name.
@ -69,10 +72,10 @@ where <switch> is:
Enables immediate forwarding of messages as soon as they are received (requires --forward-to). Enables immediate forwarding of messages as soon as they are received (requires --forward-to).
# --interface (-I) # --interface (-I)
Defines the listening interface for incoming connections. Defines the listening interface(s) for incoming connections (comma-separated list with optional smtp=,pop=,admin= qualifiers).
# --log (-l) # --log (-l)
Writes log information on standard error and syslog. Writes log information on standard error and syslog (but see --close-stderr and --no-syslog).
# --log-time (-L) # --log-time (-L)
Adds a timestamp to the logging output. Adds a timestamp to the logging output.
@ -90,7 +93,7 @@ where <switch> is:
Defines a file for storing the daemon process-id. Defines a file for storing the daemon process-id.
# --poll (-O) # --poll (-O)
Enables polling of the spool directory for messages to be forwarded with the specified period (requires --forward-to). Enables polling of the spool directory for messages to be forwarded with the specified period (zero means on client disconnection) (requires --forward-to).
# --pop (-B) # --pop (-B)
Enables the pop server. Enables the pop server.
@ -99,19 +102,19 @@ where <switch> is:
Defines the pop server secrets file (default is "/etc/emailrelay.auth"). Defines the pop server secrets file (default is "/etc/emailrelay.auth").
# --pop-by-name (-J) # --pop-by-name (-J)
Modifies the pop spool directory according to the user name (requires --pop). Modifies the pop spool directory according to the pop user name (requires --pop).
# --pop-no-delete (-G) # --pop-no-delete (-G)
Disables message deletion via pop (requires --pop). Disables message deletion via pop (requires --pop).
# --pop-port (-E) # --pop-port (-E)
Specifies the pop listening port number (requires --pop). Specifies the pop listening port number (default is 110) (requires --pop).
# --port (-p) # --port (-p)
Specifies the smtp listening port number. Specifies the smtp listening port number (default is 25).
# --prompt-timeout (-w) # --prompt-timeout (-w)
Sets the timeout (in seconds) for getting an initial prompt from the server. Sets the timeout (in seconds) for getting an initial prompt from the server (default is 20).
# --remote-clients (-r) # --remote-clients (-r)
Allows remote clients to connect. Allows remote clients to connect.
@ -123,7 +126,7 @@ where <switch> is:
Enables authentication of remote clients, using the given secrets file. Enables authentication of remote clients, using the given secrets file.
# --server-tls (-K) # --server-tls (-K)
Enables tls/ssl layer for smtp server using the given openssl certificate file (if openssl built in). Enables negotiated tls/ssl for smtp server using the given openssl certificate file (which must be in the directory trusted by openssl).
# --size (-M) # --size (-M)
Limits the size of submitted messages. Limits the size of submitted messages.
@ -134,6 +137,9 @@ where <switch> is:
# --syslog (-k) # --syslog (-k)
Forces syslog output if logging is enabled (overrides --no-syslog). Forces syslog output if logging is enabled (overrides --no-syslog).
# --tls-config (-0)
Sets tls configuration flags (eg. 2 for SSLv2 support).
# --user (-u) # --user (-u)
Names the effective user to switch to if started as root (default is "daemon"). Names the effective user to switch to if started as root (default is "daemon").
@ -157,37 +163,59 @@ file contains parameters relevant to the SMTP dialogue, and the content file
contains the RFC822 headers and body text. contains the RFC822 headers and body text.
The filenames used in the message store have a prefix of "emailrelay", followed The filenames used in the message store have a prefix of "emailrelay", followed
by a process-id, timestamp and sequence number, followed by "envelope" or by a process-id, timestamp and sequence number, and then "envelope" or
"content". The envelope files then have an additional suffix to implement a "content". The envelope files then have an additional suffix to implement a
simple locking scheme. simple locking scheme.
The envelope file suffixes are: The envelope file suffixes are:
* ".new" -- while the envelope is first being written * ".new" -- while the envelope is first being written
* <none> -- while the message is spooled * <none> -- while the message is spooled
* ".busy" -- while the message is being forwarded * ".busy" -- while the message is being forwarded
* ".bad" -- if the message cannot be forwarded * ".bad" -- if the message cannot be forwarded
* ".local" -- for copies of the envelope file for delivery to local recipients * ".local" -- for copies of the envelope file for delivery to local recipients
Copies of the content file for delivery to local recipients will also have If a message cannot be forwarded the envelope file is given a ".bad" suffix,
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. and the failure reason is written into the file.
Forwarding
----------
Spooled messages can be forwarded at various times, depending on the
command-line options:
* when E-MailRelay first starts up ("--as-client" or "--forward")
* as each message is submitted, just before receipt is acknowledged ("--immediate")
* as soon as the submitting client connection disconnects ("--poll=0")
* periodically ("--poll=<seconds>")
* on demand using the administration interface's "flush" command ("--admin=<port>")
These modes of operation can be mixed, although more than one "--poll" option is
not allowed.
When using "--as-client" the spooled messages begin to be forwarded as soon as
the program starts up, and the program terminates once they have all been sent.
A pending "--poll" timer can be forced to expire immediately if a "--filter"
script exits with a special value of 103, as described below.
All receipent addresses must be accepted by the remote server when E-MailRelay
forwards a message. If any one recipient is rejected then the message will be
left in the spool directory with a ".bad" suffix on the envelope file.
Mail processing Mail processing
--------------- ---------------
The "--filter" command-line switch allows you to specify a mail pre-processor The "--filter" command-line option allows you to specify a mail pre-processor
program which operates on mail messages as they pass through the E-MailRelay program which operates on mail messages as they pass through the E-MailRelay
system. The mail pre-processor program is run as soon as the mail message has system. The mail pre-processor program is run as soon as the mail message has
been stored in the spool directory, with the full path of the content file been stored in the spool directory, with the full path of the content file
added onto the end of the given command line. added onto the end of the given command-line.
For example, the following command will start a proxy server on port 10025 For example, the following command will start a proxy server on port 10025
which processes mail using the specified filter program, and then forwards the which processes mail using the specified filter program, and then forwards the
mail on to the system's default MTA (on port 25): mail on to the system's default MTA (on port 25):
emailrelay --as-proxy localhost:smtp --port 10025 --no-syslog \ emailrelay --as-proxy=localhost:smtp --port=10025 --no-syslog \
--filter $HOME/myfilter --spool-dir $HOME/spool --filter=$HOME/myfilter --spool-dir=$HOME/spool
The pre-processor program should terminate with an exit code of zero to The pre-processor program should terminate with an exit code of zero to
indicate success, or a value between 1 and 99 to indicate failure. Exit codes indicate success, or a value between 1 and 99 to indicate failure. Exit codes
@ -202,14 +230,14 @@ in between is taken as a failure reason, and passed back to the SMTP client.
The pre-processor program can edit any part of the message's envelope file or The pre-processor program can edit any part of the message's envelope file or
content file: E-MailRelay remembers nothing about the message while the content file: E-MailRelay remembers nothing about the message while the
pre-processor is running, except the filename. But if the message is deleted pre-processor is running except the filename. But if the message is deleted
by the pre-processor then E-MailRelay may be upset, so to avoid the error by the pre-processor then E-MailRelay may be upset, so to avoid the error
message use an exit code of 100. message use an exit code of 100.
If the pre-processor program creates completely new messages in the spool If the pre-processor program creates completely new messages in the spool
directory then they may not be processed immediately, or they may be completely directory then they may not be processed immediately, or they may be completely
ignored. To get E-MailRelay to pick up any new messages you create in the spool ignored. To get E-MailRelay to pick up any new messages you create in the spool
directory use the "--poll" switch, or run "emailrelay --as-client" from within directory use the "--poll" option, or run "emailrelay --as-client" from within
the pre-processor program. the pre-processor program.
As an example of a simple pre-processor this shell script examines the sending As an example of a simple pre-processor this shell script examines the sending
@ -258,171 +286,41 @@ For Windows this example can be rewritten in JavaScript:
WScript.Quit( 0 ) ; WScript.Quit( 0 ) ;
Windows pre-processor programs written in JavaScript can be run using Windows pre-processor programs written in JavaScript can be run using
"cscript", with an E-MailRelay "--filter" switch something like this: "cscript", with an E-MailRelay "--filter" option something like this:
--filter "c:/windows/system32/cscript.exe //nologo c:/program\ files/emailrelay/filter.js" --filter="c:/program\ files/emailrelay/filter.js"
Note how the space character in the path is escaped with a backslash. Note how the space character in "program files" is escaped with a backslash.
As an example of more complex processing there is a "--filter" script included Example "--filter" scripts are included in the distribution, including
in the distribution ("emailrelay-process.sh") that does rot-13 masking of "emailrelay-process.sh" which does rot-13 masking of messages. This script also
messages. This script also does some simple MIME encoding, so that the masked does some simple MIME encoding, so that the masked message appears as an
message appears as an attachment within a plaintext bearer message. attachment within a plaintext bearer message.
E-MailRelay also has a "--client-filter" switch that enables pre-processing of E-MailRelay also has a "--client-filter" option that enables pre-processing of
messages just before they are forwarded, rather then after they are stored. The messages just before they are forwarded, rather then after they are stored. The
disadvantage 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 submitting SMTP client
processing failures, so in many applications using "--filter" is more useful. of any processing failures, so in many applications using "--filter" is more
useful. The special exit code of 100 can be used to ignore the current message,
and 102 to stop looking for spooled messages after processing the current one.
Bear in mind the following points when writing "--filter" programs: Bear in mind the following points when writing "--filter" programs:
* The standard input and output are not used; the content filename is passed on the command line.
* The standard input and output are not used; the content filename is passed on the command-line.
* Programs run with a reduced set of environment variables. * Programs run with a reduced set of environment variables.
* The E-MailRelay process is completely blocked while the "--filter" program runs. * The E-MailRelay process is completely blocked while the "--filter" program runs so it should be fast.
* E-MailRelay files use CR-LF line terminators, as required by the RFCs. * E-MailRelay files use CR-LF line terminators, as required by the RFCs.
* Envelope files will have a file extension of ".new" or ".busy" when the program runs. * Envelope files will have a file extension of ".new" or ".busy" when the program runs.
* Windows scripts may need to be run via "cscript" or a batch file wrapper. * Windows scripts may need to be run via "cscript" or a batch file wrapper.
It is also possible to do message pre-processing in a separate server process by It is also possible to do message pre-processing in a separate process by using
using "net:<address>:<port>" as the "--filter" or "--client-filter" switch "net:<address>:<port>" as the "--filter" or "--client-filter" option parameter.
parameter. E-MailRelay connects to this address and then uses a simple E-MailRelay connects to this address and then uses a simple line-based dialog as
line-based dialog as each e-mail message is processed where it sends the each e-mail message is processed where it sends the full path of the message
full path of the message content file in one line and expects the remote process content file in one line and expects the remote process to respond with an "ok"
to respond with an "ok" line if the message is to be accepted or an error line if the message is to be accepted or an error message. One advantage of
message. One advantage of using a network pre-processor compared to running a using a network pre-processor compared to running a program is that the
program is that the E-MailRelay server is not blocked while the messages are E-MailRelay server is not blocked while the messages are being pre-processed.
being pre-processed.
Address verification
--------------------
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 recipient addresses are accepted as valid and which are
rejected.
The external verifier program is passed a command-line containing: (1) the full
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.
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.
#!/bin/sh
# address verifier -- accept all (252)
echo ""
echo $1
exit 1
For valid local addresses, where messages are to be delivered to a local
mailbox, the verifier is expected to write two lines to the standard output --
the full name associated with the mailbox, and the canonical mailbox name -- and
then exit with a value of zero.
#!/bin/sh
# address verifier -- accept as local (250)
echo Local Postmaster '<postmaster@localhost>'
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
more is thrown away.)
#!/bin/sh
# address verifier -- reject as invalid (550)
echo invalid address: $1
exit 2
To indicate a temporary failure this can be changed to an exit code of 3.
#!/bin/sh
# address verifier -- reject as temporarily invalid (450)
echo address unavailable: $1
exit 3
If the exit code is 100 then the connection is aborted immediately.
#!/bin/sh
# address verifier -- abort
exit 100
In this more complete example all addresses are accepted as long as they contain
an "at" character:
#!/bin/sh
# address verifier -- accept only if containing an at sign
address="$1"
expr "${address}" : ".*@" > /dev/null || exit 2
echo ""
echo "${address}"
exit 1 # accept
As another example, this verifier script accepts all recipient addresses by
default, but rejects remote addresses if the client has bypassed authentication
by connecting on a trusted IP address:
#!/bin/sh
# address verifier
address="$1"
host="$3"
local_domain="$4"
auth_mechanism="$7"
if test -z "${auth_mechanism}" ; then auth_mechanism="NONE" ; fi
if test "${auth_mechanism}" = "NONE" -a "${host}" != "${local_domain}"
then
echo "cannot relay without authentication"
exit 2 # reject the recipient address
fi
echo ""
echo "${address}"
exit 1 # accept the recipient address
or in JavaScript for Windows:
// verifier.js
var address = WScript.Arguments(0) ;
var host = WScript.Arguments(2) ;
var local_domain = WScript.Arguments(3) ;
var auth_mechanism = WScript.Arguments(6) ;
if( ( auth_mechanism == "NONE" || auth_mechanism == "" ) && host != local_domain )
{
WScript.Echo( "cannot relay without authentication" ) ;
WScript.Quit( 2 ) ;
}
WScript.Echo( "" ) ;
WScript.Echo( address ) ;
WScript.Quit( 1 ) ;
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.
If the "--verifier" switch parameter is of the form "net:<address>:<port>" then
the E-MailRelay server connects to the specified verifier daemon over the
network and sends verifier requests as lines with pipe-delimited fields. The
expected response is another pipe-delimited line containing the same information
as returned by verifier scripts but in reverse, such as "3|address unavailable"
or "0|postmaster|Local Postmaster <postmaster@localhost>". The "inetd"
super-server daemon would be a convenient way to connect up the pieces in this
case.
Authentication Authentication
-------------- --------------
@ -430,6 +328,7 @@ E-MailRelay supports the SMTP "AUTH" extension, as defined in RFC2554, on both
the server-side and client-side. the server-side and client-side.
The authentication mechanisms currently supported are: The authentication mechanisms currently supported are:
# "PLAIN" # "PLAIN"
Passwords are stored in clear-text, sent over the network in clear-text, and Passwords are stored in clear-text, sent over the network in clear-text, and
@ -439,47 +338,49 @@ The authentication mechanisms currently supported are:
Similar to "PLAIN". Officially obsolete although widely used. Similar to "PLAIN". Officially obsolete although widely used.
# "CRAM-MD5" mechanism # "CRAM-MD5"
Passwords are not stored in clear-text, not sent over the network, and are Passwords are not stored in clear-text, not sent over the network, and are
not replayable. Defined in RFC2195. not replayable. Defined in RFC2195.
Authentication is enabled with the "--client-auth" and "--server-auth" Authentication is enabled with the "--client-auth" and "--server-auth"
command-line switches. The switch parameter is the name of a secrets file, command-line options and the option's parameter is the name of a secrets file,
containing usernames and passwords: containing usernames and passwords:
emailrelay --as-server --server-auth /etc/emailrelay-clients.auth emailrelay --as-server --server-auth=/etc/emailrelay-clients.auth
emailrelay --as-client myisp.net:smtp --client-auth /etc/emailrelay-myisp.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 The secrets file has a line-based format: blank lines are ignored and the hash
character (#) is used for comments. character (#) is used for comments.
Lines have four white-space delimited fields: Lines have four white-space delimited fields:
* "mechanism"
* "client-or-server" * "client-or-server"
* "mechanism"
* "userid" * "userid"
* "secret" * "secret"
The "mechanism" field must be "LOGIN", "APOP" or "CRAM-MD5" (case-insensitive); 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 the "client-or-server" field must be "client" or "server" (also
xtext-encoded user identifier; and the "secret" field is the xtext-encoded case-insensitive); the "userid" field is xtext-encoded user identifier; and the
"LOGIN" password, or the "CRAM-MD5" digest key. "secret" field is the xtext-encoded "LOGIN" password, or the "CRAM-MD5" digest
key.
The "xtext" encoding scheme is defined properly in RFC1891, but basically it The "xtext" encoding scheme is defined properly in RFC1891, but basically it
says that non alphanumeric characters should be represented in hexadecimal as says that non alphanumeric characters, space, "+" and "=" should be represented
"+XX". in hexadecimal ascii as "+XX".
The client-side secrets file specified with "--client-auth" is used when 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 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. at least one "client LOGIN" or "client CRAM-MD5" entry.
A server-side secrets file specified with "--server-auth" is used when a remote 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 client tries to authenticate with the E-MailRelay server. The file should
normally contain several "LOGIN server" or "CRAM-MD5 server" entries, one for normally contain several "server LOGIN" or "server CRAM-MD5" entries, one for
each client. each client.
The same secrets file may be specified for both "--client-auth" and The same secrets file may be specified for both "--client-auth" and
"--server-auth" switches. "--server-auth" options.
The "CRAM-MD5" keys can be generated using the "emailrelay-passwd" utility. The "CRAM-MD5" keys can be generated using the "emailrelay-passwd" utility.
@ -491,26 +392,25 @@ authenticate with the E-MailRelay server:
# #
# emailrelay secrets file # emailrelay secrets file
# #
LOGIN client jsmith my+20password client LOGIN jsmith my+20password
LOGIN server user1 secret server LOGIN user1 secret
LOGIN server user2 e+3Dmc2 server LOGIN user2 e+3Dmc2
A "CRAM-MD5" version would look like this: A "CRAM-MD5" version would look like this:
# #
# emailrelay secrets file # emailrelay secrets file
# #
CRAM-MD5 client jsmith 688498119.2977922305.1278051807.3015243256.2216875978.2833592318.2902375592.3156808220 client CRAM-MD5 jsmith 688498119.2977922305.1278051807.3015243256.2216875978.2833592318.2902375592.3156808220
CRAM-MD5 server user1 4059553961.2316091643.3282746241.1444639637.3735501773.3404060330.2760590371.1201092398 server CRAM-MD5 user1 4059553961.2316091643.3282746241.1444639637.3735501773.3404060330.2760590371.1201092398
CRAM-MD5 server user2 2798539199.3144534242.3784876256.2879973305.2327113479.216533878.2436460291.2361831919 server CRAM-MD5 user2 2798539199.3144534242.3784876256.2879973305.2327113479.216533878.2436460291.2361831919
When using the "LOGIN" mechanism you have to store plaintext passwords in a When using the "LOGIN" mechanism you have to store plaintext passwords in the
file. This is a bad thing. You should at least make sure that the secrets file secrets file, so you should make sure that the secrets file has tight
has tight permissions, and that the passwords in it are not also used for permissions and the passwords in it are not also used for anything important.
anything important.
On the server side authentication is advertised by E-MailRealy in the response 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. to the SMTP "EHLO" command if the "--server-auth" command-line option is used.
Authentication by the client is then mandatory unless the client's IP address is Authentication by the client is then mandatory unless the client's IP address is
configured as a trusted address. configured as a trusted address.
@ -518,23 +418,26 @@ 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 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 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" is passed to any external address verifier program specified by the "--verifier"
command-line switch; it is not used for any other purpose. command-line option; it is not used for any other purpose. Wildcarded IPv4
addresses can use a format like 192.168.0.0/24 or 192.168.0.*; wildcarded IPv6
addresses must have the full set of 32 lowercase hex digits followed by the CIDR
netmask.
For example, this secrets file allows any client connecting from the For example, this secrets file allows any client connecting from the
192.168.0.0/24 domain to connect without authentication desipte the 192.168.0.0/24 domain to connect without authentication desipte the
"--server-auth" switch: "--server-auth" option:
# #
# emailrelay secrets file # emailrelay secrets file
# #
NONE server 192.168.0.* localdomain server NONE 192.168.0.* localdomain
LOGIN server user1 secret server LOGIN user1 secret
LOGIN server user2 e+3Dmc2 server LOGIN user2 e+3Dmc2
On the client side authentication is performed when E-MailRelay has connected to 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 a server which implements the AUTH extension with one of the supported
mechanisms. If client authentication is enabled (with the "--client-auth" mechanisms. If client authentication is enabled (with the "--client-auth"
switch) but the remote server does not support the AUTH extension, or does not option) but the remote server does not support the AUTH extension, or does not
support the LOGIN or CRAM-MD5 mechanism, then E-MailRelay will log an error support the LOGIN or CRAM-MD5 mechanism, then E-MailRelay will log an error
and not forward any messages. and not forward any messages.
@ -552,22 +455,101 @@ 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 authentication can be done outside the E-MailRelay system by POP/IMAP utilities
such as "fetchmail". such as "fetchmail".
TLS/SSL
-------
E-MailRelay can use negotiated TLS/SSL to encrypt SMTP and POP3 sessions: to
enable TLS/SSL encryption when E-MailRelay is acting as an SMTP client use the
"--client-tls" command-line option, and to enable TLS/SSL when E-MailRelay is
acting as an SMTP or POP3 server use "--server-tls". The connections start off
as unencrypted and use the STARTTLS command to negotiate TSL/SSL encryption
before any plaintext passwords are exchanged.
The "--server-tls" option requires the name of an X.509 certificate in the "PEM"
format. This file must be in a directory that the OpenSSL library considers to
be secure. On some systems this is "/etc/ssl/certs".
Certificate files can be created with the "openssl" utility using the
"req -x509" sub-command. Refer to the OpenSSL documentation for the full details
but something like this might work for testing purposes:
$ cd /etc/ssl/certs
$ openssl req -x509 -nodes -days 365 -subj "/O=`uname -n`/CN=$USER" -newkey rsa:1024 -keyout emailrelay.pem -out emailrelay.pem
$ ln -s emailrelay.pem `openssl x509 -noout -hash -in emailrelay.pem`.0
E-MailRelay can also make outgoing SMTP connections using TLS/SSL encryption
where the whole SMTP dialog is encrypted from the start, without a negotiation
step ("--client-tls-connection"). This is sometimes called SMTP-over-TLS or
secure SMTP (ssmtp) and it is normally used with port number 465.
The behaviour of the TLS/SSL layer can be tweaked by using "--tls-config" option
with a special number that is made up of the following:
* 2 - allow SSL v2 or later
* 3 - allow SSL v3 or later
* 4 - ask for peer certificates but just log them
* 8 - ask for peer certificates and verify them
PAM Authentication
------------------
E-MailRelay supports the use of PAM (Pluggable Authentication Modules) for
authentication if it has been built with the "--with-pam" configure option.
PAM authentication can be used by E-MailRelay to authenticate SMTP and POP3
sessions coming in from remote clients; it cannot be used by E-MailRelay to
supply passwords when acting as an SMTP client.
Use "--server-auth=/pam" and/or "--pop-auth=/pam" on the command-line to enable
PAM authentication at run-time. The E-MailRelay server will then advertise an
SMTP authentication mechanism of PLAIN and do the actual authentication via PAM.
The PAM system itself must be configured with a service of "emailrelay". This
normally involves creating a file "/etc/pam.d/emailrelay" containing somthing
like the following:
auth requisite pam_unix.so nullok_secure
session required pam_permit.so
account required pam_permit.so
password required pam_deny.so
With this configuration the E-MailRelay server will use normal unix system
account names and passwords to authenticate remote clients, but note that on
some systems this will require special permissioning to allow the E-MailRelay
server to read the shadow password database.
The passwords for system accounts are usually very sensitive so E-MailRelay
requires the "--server-tls" command-line option when using PAM authentication,
and clients are required to establish a TLS/SSL session before authenticating.
SOCKS
-----
E-MailRelay can use a SOCKS 4a proxy for establishing outgoing SMTP connections
if the SOCKS proxy address is appended to the SMTP server's address separated by
"@".
For example, this could be used to send e-mails via the Tor network, assuming
there is a local Tor server listening on port 9050:
emailrelay --forward-to myisp.net:smtp@localhost:9050 ...
In this example the target SMTP server will receive a connection from the Tor
exit node rather than from E-MailRelay directly.
Pop server Pop server
---------- ----------
E-MailRelay can be used as a POP3 server so that POP clients have access to E-MailRelay can be used as a POP3 server so that POP clients have access to
spooled messages. spooled messages.
The following command-line switches are used: The following command-line options are used:
# --pop # --pop
Enables the POP3 server. Enables the POP3 server. Negotiated TLS/SSL (using "STLS") will be enabled if
the "--client-tls" or "--server-tls" options are also given.
# --pop-port <port> # --pop-port=<port>
Changes the POP3 listening port from its default of 110. Changes the POP3 listening port from its default of 110.
# --pop-auth <path> # --pop-auth=<path>
Changes the authentication secrets file. The default is typically Changes the authentication secrets file. The default is typically
"/etc/emailrelay.auth". "/etc/emailrelay.auth".
@ -576,14 +558,23 @@ The following command-line switches are used:
"--server-auth" and the same file can be used for both SMTP and POP3 "--server-auth" and the same file can be used for both SMTP and POP3
authentication. authentication.
"APOP server" entries are used for "APOP" authentication, "LOGIN server" "server APOP" entries are used for "APOP" authentication, "server LOGIN"
entries are used for "USER/PASS" authentication, and "CRAM-MD5" entries are entries are used for "USER/PASS" authentication, and "server CRAM-MD5" entries
used for "AUTH" authentication. are used for "AUTH" authentication.
Note that the basic POP3 protocol defines only "APOP" and "USER/PASS" 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 authentication, so some POP client programs may not be able to cope with
CRAM-MD5 authentication using the POP3 "AUTH" extension. CRAM-MD5 authentication using the POP3 "AUTH" extension.
The CRAM-MD5 authentication mechanism will only be advertised to clients
if there are "server CRAM-MD5" entries in the secrets file.
If E-MailRelay was built with PAM support then a special value of "/pam" can
be used to enable authentication using the PAM infrastructure rather than a
secrets file. In this case only the PLAIN authentication mechanism will be
advertised to the client but transport level encryption using TLS/SSL will be
mandatory.
# --pop-by-name # --pop-by-name
Modifies the POP spool directory according to the name used by the client Modifies the POP spool directory according to the name used by the client
@ -602,13 +593,142 @@ The following command-line switches are used:
Disables message deletion: the POP3 DELE command will appear to succeed, but Disables message deletion: the POP3 DELE command will appear to succeed, but
no files will be deleted from the spool directory. no files will be deleted from the spool directory.
Address verification
--------------------
By default the E-MailRelay server will accept all recipient addresses for
incoming e-mails as valid. This default behaviour can be modified by using an
external verifier program, specified with the "--verifier" command-line option,
so that you get to choose which recipient addresses are accepted as valid and
which are rejected.
Your verifier script is passed a command-line containing: (1) the full 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.
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 script is expected to generate two lines of output on the standard
output stream and then terminate with a specific exit code.
For valid 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.
#!/bin/sh
# address verifier -- accept all (252)
echo ""
echo $1
exit 1
If the address is valid but it should be delivered to a local mailbox rather
than forwarded then the verifier script should write two lines to the standard
output -- the full name associated with the mailbox, and the canonical mailbox
name -- and then exit with a value of zero.
#!/bin/sh
# address verifier -- accept as local (250)
echo Local Postmaster '<postmaster@localhost>'
echo postmaster
exit 0
For E-MailRelay local delivery just means that the message file in the spool
directory is given a ".local" filename suffix. This can be used to create a
separate channel for adminstrative messages such as delivery reports.
For invalid addresses the exit value should be non-zero and anything written to
the standard output is taken as the reason for the failure.
#!/bin/sh
# address verifier -- reject as invalid (550)
echo invalid address: $1
exit 2
To indicate a temporary failure this can be changed to an exit code of 3.
#!/bin/sh
# address verifier -- reject as temporarily invalid (450)
echo address unavailable: $1
exit 3
If the verifier exit code is 100 then the connection is aborted immediately,
which may be useful in limiting the impact of denial of service attacks:
#!/bin/sh
# address verifier -- abort
exit 100
In this more complete example the verifier script accepts all addresses as valid
as long as they contain an "at" character:
#!/bin/sh
# address verifier -- accept only if containing an at sign
address="$1"
expr "${address}" : ".*@" > /dev/null || exit 2
echo ""
echo "${address}"
exit 1 # accept
As another example, this verifier script accepts all recipient addresses by
default but rejects remote addresses if the client has bypassed authentication
by connecting on a trusted IP address:
#!/bin/sh
# address verifier
address="$1"
host="$3"
local_domain="$4"
auth_mechanism="$7"
if test -z "${auth_mechanism}" ; then auth_mechanism="NONE" ; fi
if test "${auth_mechanism}" = "NONE" -a "${host}" != "${local_domain}"
then
echo "cannot relay without authentication"
exit 2 # reject the recipient address
fi
echo ""
echo "${address}"
exit 1 # accept the recipient address
or written in JavaScript for Windows:
// verifier.js
var address = WScript.Arguments(0) ;
var host = WScript.Arguments(2) ;
var local_domain = WScript.Arguments(3) ;
var auth_mechanism = WScript.Arguments(6) ;
if( ( auth_mechanism == "NONE" || auth_mechanism == "" ) && host != local_domain )
{
WScript.Stdout.WriteLine( "cannot relay without authentication" ) ;
WScript.Quit( 2 ) ;
}
WScript.Stdout.WriteLine( "" ) ;
WScript.Stdout.WriteLine( address ) ;
WScript.Quit( 1 ) ;
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.
It is also possible to verify addresses in a separate daemon process by using a
"--verifier" option of the form "net:<address>:<port>". In this case E-MailRelay
will connect to the specified verifier daemon over the network and send address
verification requests as lines with pipe-delimited fields. The expected response
is another pipe-delimited line containing the same information as returned by
verifier scripts but in reverse, such as "3|address unavailable" or
"0|postmaster|Local Postmaster <postmaster@localhost>". The "inetd" super-server
daemon would be a convenient way to connect up the pieces in this case.
Security issues Security issues
--------------- ---------------
A significant security concern is the use of external mail pre-processors and The following are some security issues that have been taken into consideration:
address verifiers (using the "--filter" and "--verifier" switches), and so the
following precautions are taken:
# effective userid # Effective userid
Suid privileges are revoked at start-up, switching the effective Suid privileges are revoked at start-up, switching the effective
userid/groupid to be the real userid/groupid values. If started as "root" userid/groupid to be the real userid/groupid values. If started as "root"
@ -620,45 +740,44 @@ following precautions are taken:
groupid, so that new files have group ownership corresponding to the groupid, so that new files have group ownership corresponding to the
"daemon" user. "daemon" user.
# execution environment # Execution environment
The mail pre-processor runs with an almost empty set of environment variables The external pre-processor programs are run with an almost empty set of
("PATH" and "IFS"), and with no open file descriptors other than "stdin" and environment variables ("PATH" and "IFS"), and with no open file descriptors
"stderr" open onto "/dev/null", and "stdout" open onto a pipe. other than "stdin" and "stderr" open onto "/dev/null", and "stdout" open onto a
pipe.
# configuration # Configuration
The mail pre-processor filename has to be configured using a full path, so The mail pre-processor filenames have to be configured using a full path, so
there is no dependence on the current working directory or the PATH there is no dependence on the current working directory or the PATH
environment variable. environment variable.
Some other points to note are: # Umask
# umask
The program runs for most of the time with a "umask" of 177, switching to 117 The program runs for most of the time with a "umask" of 177, switching to 117
when creating spool files. when creating spool files.
# buffer overflow # Buffer overflow
Strings are dynamically allocated, so buffer overflow/truncation issues are Strings are dynamically allocated in c++, so buffer overflow/truncation issues
avoided. are avoided.
# remote clients # Remote clients
By default connections will be rejected if they come from remote machines. By default connections will be rejected if they come from remote machines.
# remote configuration # Remote configuration
No configuration parameters can be changed through the administrative No configuration parameters can be changed through the administrative
interface. interface.
# use of exec() and system() # Use of exec() and system()
No exec(), system() or popen() calls are used other than execve() to spawn the No exec(), system() or popen() calls are used other than execve() to spawn the
mail pre-processor and/or address verifier. mail pre-processor and/or address verifier.
# file permissions # File permissions
After a normal installation the spool directory is has ownership of After a normal installation the spool directory is has ownership of
"root.daemon" with permissions of "-rwxrwxr-x" and messages files are created "root.daemon" with permissions of "-rwxrwxr-x" and messages files are created
@ -670,18 +789,23 @@ Some other points to note are:
spool directory, and the files created end up owned by the submitter but with spool directory, and the files created end up owned by the submitter but with
group ownership of "daemon". group ownership of "daemon".
# logging # Logging
Logging output is conditioned so that ANSI escape sequences cannot appear Logging output is conditioned so that ANSI escape sequences cannot appear
in the log. in the log.
Passwords and message content are not logged (except if using the "--debug" Passwords and message content are not logged (except if using the "--debug"
switch with debug logging support enabled at build time). option at run time with debug logging enabled at build time).
# information leakage # Information leakage
The "--anonymous" switch can be used to slightly reduce the amount of information The "--anonymous" option can be used to reduce the amount of information
released to remote clients. released to remote clients, especially with an empty "--domain".
# Mandatory encryption
When using Linux PAM for authentication all clients are required to use
TLS/SSL encryption.
Security issues which relate to the SMTP protocol itself are beyond the scope of Security issues which relate to the SMTP protocol itself are beyond the scope of
this document, but RFC2821 makes the following observation: "SMTP mail is this document, but RFC2821 makes the following observation: "SMTP mail is
@ -690,15 +814,15 @@ create messages that will trick a [..] recipient into believing that they came
from somewhere else. [..] Real [..] security lies [..] in end-to-end methods from somewhere else. [..] Real [..] security lies [..] in end-to-end methods
[..] such as those which use digital signatures." [..] such as those which use digital signatures."
The "Authentication" section below also relates to security. The "Authentication" and "Linux PAM" sections above also relate to security.
Administration interface Administration interface
------------------------ ------------------------
If enabled with the "--admin" command line switch, the E-MailRelay server will If enabled with the "--admin" command-line option, the E-MailRelay server will
provide a network interface for performing administration tasks. This is a provide a network interface for performing administration tasks. This is a
simple command-line interface which is compatible with "telnet": simple command-line interface which is compatible with "telnet":
$ emailrelay --as-server --port 125 --forward-to localhost:25 --admin 10026 $ emailrelay --as-server --port=125 --forward-to=localhost:25 --admin=10026
$ telnet localhost 10026 $ telnet localhost 10026
E-MailRelay> help E-MailRelay> help
E-MailRelay> quit E-MailRelay> quit
@ -718,6 +842,7 @@ Following a normal build from source, a "make install" puts files in the
following locations: following locations:
* /usr/local/etc/emailrelay.conf * /usr/local/etc/emailrelay.conf
* /usr/local/etc/emailrelay.conf.template * /usr/local/etc/emailrelay.conf.template
* /usr/local/etc/pam.d/emailrelay
* /usr/local/libexec/emailrelay/emailrelay-filter-copy * /usr/local/libexec/emailrelay/emailrelay-filter-copy
* /usr/local/libexec/emailrelay/emailrelay-poke * /usr/local/libexec/emailrelay/emailrelay-poke
* /usr/local/libexec/emailrelay/examples/* * /usr/local/libexec/emailrelay/examples/*
@ -732,63 +857,37 @@ following locations:
* /usr/local/var/spool/emailrelay/emailrelay.*.content * /usr/local/var/spool/emailrelay/emailrelay.*.content
* /usr/local/var/spool/emailrelay/emailrelay.*.envelope * /usr/local/var/spool/emailrelay/emailrelay.*.envelope
This directory structure is constrained by the GNU/"autoconf" conventions rather
than the Filesystem Hierarchy Standard (FHS).
To force FHS compliance you can use the "--enable-fhs" switch when running
"configure". This results in the following file locations:
* /etc/emailrelay.conf
* /etc/emailrelay.conf.template
* /etc/init.d/emailrelay
* /usr/lib/emailrelay/emailrelay-filter-copy
* /usr/lib/emailrelay/emailrelay-poke
* /usr/lib/emailrelay/examples/*
* /usr/sbin/emailrelay
* /usr/sbin/emailrelay-passwd
* /usr/sbin/emailrelay-submit
* /usr/share/doc/emailrelay/*
* /usr/share/doc/emailrelay/index.html
* /usr/share/doc/emailrelay/README
* /usr/share/man/man1/emailrelay*.1.gz
* /var/spool/emailrelay/emailrelay.*.content
* /var/spool/emailrelay/emailrelay.*.envelope
For finer control of the directory structure the following can be specified on For finer control of the directory structure the following can be specified on
the "configure" command-line: the "configure" command-line:
* --mandir=<dir> * --mandir=<dir>
* --sbindir=<dir> * --sbindir=<dir>
* --datadir=<dir>
* e_libexecdir=<dir> * e_libexecdir=<dir>
* e_sysconfdir=<dir> * e_sysconfdir=<dir>
* e_docdir=<dir> * e_docdir=<dir>
* e_examplesdir=<dir> * e_examplesdir=<dir>
* e_initdir=<dir> * e_initdir=<dir>
* e_spooldir=<dir> * e_spooldir=<dir>
* e_pamdir=<dir>
* e_icondir=<dir>
For example, running "./configure --prefix=/usr e_spooldir=/tmp/spool" will For example, running "./configure --prefix=/usr e_spooldir=/tmp/spool" will
create the GNU-style directory structure under "/usr" rather than "/usr/local", install to a directory structure under "/usr" rather than "/usr/local",
and create the E-MailRelay spool directory as "/tmp/spool" rather than and create the E-MailRelay spool directory as "/tmp/spool" rather than
"/usr/local/var/spool/emailrelay". "/usr/local/var/spool/emailrelay".
The default spool directory path which is built into the executables and scripts For a directory structure conforming more closely to the FHS use this configure
comes from "configure" via the makefiles. command:
Even though the "--enable-fhs" switch overrides all other directory specifiers ./configure --prefix=/usr --localstatedir=/var --libexecdir=/usr/lib --sysconfdir=/etc e_init_dir=/etc/init.d
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".
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.
If building the configuration GUI then you may need to set the "PKG_CONFIG_PATH" As usual, it is possible to change the installation root directory after
environment variable to point to the ".pc" files in the Qt "lib" directory and building by using "make DESTDIR=<root> install" or
set the "e_qtmoc" configure variable to point to the Qt "moc" utility. You "DESTDIR=<root> make -e install". However, this will not affect the default
may also need to set the correct library directory for Qt if it is wrong in spool directory path built into the scripts and executables so the correct spool
the ".pc" file by setting "LDFLAGS": directory will have to be specified at run-time with the "--spool-dir" option.
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-2008 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.

View File

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -4,13 +4,13 @@ E-MailRelay User Guide
What is it? What is it?
----------- -----------
E-MailRelay is a simple store-and-forward message transfer agent and proxy E-MailRelay is a simple store-and-forward message transfer agent and proxy
server. It runs on Unix-like operating systems (including Linux), and on server. It runs on Unix-like operating systems (including Linux and Mac OS X),
Windows. and on Windows.
When used as proxy server the E-MailRelay program ("emailrelay") runs in the When used as proxy server the E-MailRelay program ("emailrelay") runs in the
background and accepts e-mail from local e-mail client programs (KMail, Outlook background and accepts e-mail from local e-mail client programs (Thunderbird,
etc.) or from the outside world, using the SMTP protocol. As soon as an e-mail Outlook etc.) or from the outside world, using the SMTP protocol. As soon as an
message is received it is forwarded on to the next SMTP server for onward 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: 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, as each message is received it can be passed one of your programs for editing,
filtering, encrypting etc. filtering, encrypting etc.
@ -26,8 +26,9 @@ read the spooled messages.
What it's not What it's not
------------- -------------
E-MailRelay is not a routing MTA. It forwards e-mail to a pre-configured SMTP E-MailRelay does not do routing of individual messages; it is not a routing MTA.
server, regardless of any message addressing or DNS redirects. It forwards all e-mail messages to a pre-configured SMTP server, regardless of
any message addressing or DNS redirects.
E-MailRelay is not a delivery agent. Some programs like "fetchmail" send 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 locally-addressed e-mail to the local SMTP server in order to deliver them to
@ -38,54 +39,56 @@ Why use it?
E-MailRelay is a simple tool that does SMTP. For simple tasks it is likely E-MailRelay is a simple tool that does SMTP. For simple tasks it is likely
to be easier to understand and configure than a more general purpose MTA. to be easier to understand and configure than a more general purpose MTA.
The code has few dependencies on third-party libraries or run-time environments
so it is easy to build and install especially when targeting embedded systems.
The single-threaded, event-driven design with non-blocking i/o may provide
better performance and resource usage than some of the alternatives.
E-MailRelay is designed to be policy-free, so that you can implement your own E-MailRelay is designed to be policy-free, so that you can implement your own
policies for message retries, bounces, local mailbox delivery, spam filtering policies for message retries, bounces, local mailbox delivery, spam filtering
etc. through external scripts. etc. through external scripts.
It has no dependencies on third-party libraries or run-time environments so it
is easy to build and install, and the single-threaded, event-driven design with
non-blocking i/o may provide better performance and resource usage than some of
the alternatives.
Typical applications of E-MailRelay include: Typical applications of E-MailRelay include:
* spam filtering and virus checking incoming mail * spam filtering and virus checking incoming mail
* adding digital signatures or legal disclaimers to outgoing mail * adding digital signatures or legal disclaimers to outgoing mail
* doing store-and-forward for outgoing mail across a dial-up Internet connection * store-and-forward for outgoing mail across an intermittent Internet connection
* adding authentication where the existing infrastructure does not support it * adding authentication and encryption where the existing infrastructure does not support it
* simple SMTP proxying on a firewall host or DMZ * taking messages in with SMTP and serving them to local POP clients
* SMTP to POP gateway * giving multiple POP clients independent copies of incoming e-mail
* SMTP proxying by running the proxy server on the firewall host
Running E-MailRelay Running E-MailRelay
------------------- -------------------
To use E-MailRelay in store-and-forward mode use the "--as-server" switch to To use E-MailRelay in store-and-forward mode use the "--as-server" option to
start the storage daemon in the background, and then trigger delivery of spooled 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 messages by running with the "--as-client" option and the address of the target
host. host.
For example, to start a storage daemon listening on port 10025 use a command like For example, to start a storage daemon listening on port 10025 use a command
this: like this:
emailrelay --as-server --port 10025 --spool-dir /tmp emailrelay --as-server --port 10025 --spool-dir /tmp
And then to forward the spooled mail to "smarthost" run something like this: And then to forward the spooled mail to "smarthost" run something like this:
emailrelay --as-client smarthost:smtp --spool-dir /tmp emailrelay --as-client smarthost:25 --spool-dir /tmp
To get behaviour more like a proxy you can add the "--poll" switch so that To get behaviour more like a proxy you can add the "--poll" option so that
messages are forwarded continuously rather than on-demand. This example starts a messages are forwarded continuously rather than on-demand. This example starts a
store-and-forward server that forwards spooled-up e-mail every hour: store-and-forward server that forwards spooled-up e-mail every hour:
emailrelay --as-server --poll 3600 --forward-to smarthost:smtp emailrelay --as-server --poll 3600 --forward-to smarthost:25
For a proxy server that forwards each message as it is being received, without For a proxy server that forwards each message as it is being received, without
any delay, you can use the "--as-proxy" mode: any delay, you can use the "--as-proxy" mode:
emailrelay --as-proxy smarthost:smtp emailrelay --as-proxy smarthost:25
If you want to edit or filter e-mail as it passes through the proxy then specify 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: your pre-processor program with the "--filter" option, something like this:
emailrelay --as-proxy smarthost:smtp --filter /usr/local/bin/addsig emailrelay --as-proxy smarthost:25 --filter /usr/local/bin/addsig
To run E-MailRelay as a POP server without SMTP use "--pop" and "--no-smtp": To run E-MailRelay as a POP server without SMTP use "--pop" and "--no-smtp":
@ -94,10 +97,12 @@ To run E-MailRelay as a POP server without SMTP use "--pop" and "--no-smtp":
The "emailrelay-submit" utility can be used to put messages straight into the The "emailrelay-submit" utility can be used to put messages straight into the
spool directory so that the POP clients can fetch them. spool directory so that the POP clients can fetch them.
Note that by default E-MailRelay will always reject connections from remote By default E-MailRelay will always reject connections from remote machines. To
machines. To allow connections from anywhere use the "--remote-clients" switch, allow connections from anywhere use the "--remote-clients" option, but please
but please consider the implications if your machine is connected to the check your firewall settings to make sure this cannot be exploited by spammers.
internet.
On Windows add "--hidden" to suppress message boxes and also add "--no-daemon"
if running as a service.
For more information on the command-line options refer to the reference guide For more information on the command-line options refer to the reference guide
or run: or run:
@ -107,206 +112,122 @@ or run:
Configuration Configuration
------------- -------------
The "emailrelay" program itself is mostly configured through command-line The "emailrelay" program itself is mostly configured through command-line
switches (such as "--port" and "--forward-to"), so there is no single options (such as "--port" and "--forward-to"), so there is no single
definitive configuration file. definitive configuration file.
However, in most installations on Unix-like system the E-MailRelay server will However, in most installations on Unix-like system the E-MailRelay server will
be started up by the boot-time script called "emailrelay" in the "/etc/init.d" be started up by the boot-time script called "emailrelay" in the "/etc/init.d"
directory, and this script uses the configuration file "/etc/emailrelay.conf" to directory, and this script uses the configuration file "/etc/emailrelay.conf" to
define the server command-line. Each entry in the configuration file corresponds define the server command-line. Each entry in the configuration file corresponds
to an E-MailRelay command-line switch, so you can edit this file to add and to an E-MailRelay command-line option, so you can edit this file to add and
remove server switches. Refer to the reference guide for a complete list of remove server options. Refer to the reference guide for a complete list of
configuration switches. configuration options.
On Windows the installation program creates a startup batch file called On Windows the installation program creates a startup batch file called
"emailrelay-start.bat" that contains all the server command-line switches and "emailrelay-start.bat" that contains all the server command-line options and
you can edit this file to tailor the server configuration. You can also set up you can edit this file to tailor the server configuration. You can also set up
your own shortcuts to the E-MailRelay executable and add and remove command-line your own shortcuts to the E-MailRelay executable and add and remove command-line
switches using the shortcut properties tab. options using the shortcut properties tab.
If you are using authentication then you will have to create the text files If you are using authentication then you will have to create the text files
containing your authentication secrets (passwords and password hashes). The containing your authentication secrets (account names, passwords and password
"--server-auth", "--client-auth" and "--pop-auth" command-line switches are used hashes). The "--server-auth", "--client-auth" and "--pop-auth" command-line
to point to these files. options are used to point to these files.
There is also a graphical configuration program called "emailrelay-gui" that There is also a graphical configuration program called "emailrelay-gui" that
may be available to help with configuring the system. This is intended to be may be available to help with configuring the system. This is intended to be
used once at installation time (and it is the basis of the self-extracting used once at installation time (and it is the basis of the self-extracting
installer on Windows) but it may also be used to do some simple reconfiguration installer on Windows) but it may also be used to do some simple reconfiguration
of an alreay-installed system. of an alreay-installed system. It takes you through a sequence of configuration
pages and then on the last page creates or updates the configuration files, ie.
the authentication secrets file and the configuration file "emailrelay.conf"
or "emailrelay-start.bat".
Logging Logging
------- -------
If the "--log" switch is used then E-MailRelay program issues warnings and error If the "--log" option is used then E-MailRelay program issues warnings and error
messages to the "syslog" system using the "LOG_MAIL" facility. Under Windows it messages to the "syslog" system on Unix or to the Event Viewer's Application log
writes to the "Application" event log. on Windows.
The "syslog" system is configured through the "/etc/syslog.conf" file (try On Unix systems you can also redirect the standard error stream to a file,
"man syslog.conf"), and in most cases you will find that "LOG_MAIL" warnings and although you should note that the "--as-server" and "--as-proxy" options
errors are directed to an appropriate log file (perhaps "/var/log/messages"). implicitly close the standard error stream soon after startup, so you should
replace them with their equivalent options without the "--close-stderr" part.
For more verbose logging add the "--verbose" switch. If this becomes difficult On Windows you can log to a file by adding the "--log-file" option to the
to read via the system log (especially on Windows) then try logging to the command-line in the startup batch file. The installation process creates a
standard error stream and redirect that to a file. Bear in mind that you will second startup batch file that contains this option, so check for that first.
need have to replace "--as-server" with "--log" and "--as-proxy" with
"--poll 0 --forward-to" since the "--as-server" and "--as-proxy" switches
implicitly close the standard error stream soon after startup.
emailrelay --log --verbose > emailrelay.log 2>&1 For more verbose logging add the "--verbose" option to the command-line.
Troubleshooting
---------------
A useful technique for troubleshooting SMTP problems is to telnet into the
remote server and drive the SMTP protocol manually. Telnet can be told to
connect to the remote SMTP port by putting the port number (25) on the command
line after the remote hostname, for example: "telnet smtp.myisp.net 25".
Once connected you should get a startup banner from the server, which may tell
you what server software you have connected to. From there you should type
something like "EHLO myhost.mydomain". The response to the EHLO command should
contain a list of SMTP extensions which the server software supports. If this
includes the AUTH extension then the set of supported authentication mechanisms
(such as LOGIN, CRAM-MD5 etc.) will be listed on the same line.
After the EHLO response you should type "MAIL FROM:<myhost.mydomain>", retaining
the angle brackets but substituting your own address. If this is accepted then
enter a "RCPT TO:<me@myhost.mydomain>" command to say where the e-mail is going.
(Again, retain the angle brackets but substitute an appropriate address.)
After one or more "RCPT TO" commands you should enter the "DATA" command,
followed by the message content. The message content should include an RFC822
header, followed by a blank line, followed by the message text. For testing
purposes you might get away without having any header/body structure at all, but
to do things properly you should have at least a "To:" line, a "From:" line and
a "Subject:" line in the header.
At the end of the message text type a "." on a line of its own. At that point
the message should get dispatched, and eventually end up in your in-box in the
usual way (assuming you put your own address in the "RCPT TO" command).
The following is an example SMTP dialogue, with ">>" and "<<" marks added to
show what was typed and what was received:
>> telnet smtp.myisp.net 25
<< Trying 12.34.56.78...
<< Connected to smtp.myisp.net.
<< Escape character is '^]'.
<< 220 mail12.myisp.net ESMTP Exim 3.13 #0 Sat, 17 Nov 2001 16:22:39 +0000
>> EHLO myhost.myisp.net
<< 250-mail12.myisp.net Hello modem-185.myisp.net [12.34.56.78]
<< 250-SIZE 104857600
<< 250-PIPELINING
<< 250 HELP
>> MAIL FROM:<me@myhost.myisp.net>
<< 250 <me@myhost.myisp.net> is syntactically correct
>> RCPT TO:<me@myhost.myisp.net>
<< 250 <me@myhost.myisp.net> verified
>> DATA
<< 354 Enter message, ending with "." on a line by itself
>> To: me@myhost.myisp.net
>> From: me@myhost.myisp.net
>> Subject: test
>>
>> Test message.
>> .
<< 250 OK id=1658Fp-0000Il-00
>> QUIT
<< 221 mail12.myisp.net closing connection
<< Connection closed by foreign host.
If you get some sort of "access denied" errors when talking to a server which
does not support the AUTH extension, then your ISP may be using POP-before-SMTP
authentication. In this scheme you are required to conduct an authenticated POP
or IMAP dialogue before you try to use SMTP. The POP/IMAP dialogue is done
separately from the SMTP connection, but bear in mind that there might be a time
limit so that your SMTP connection has to be made soon after the POP/IMAP
authentication. You should be able to use an e-mail client program, or something
like "fetchmail" to do the POP/IMAP authentication.
If you can send mail messages sucessfully using telnet, then you should look at
the E-MailRelay "--verbose" log output and compare what you do interactively
with what the program does.
Preventing open mail relay Preventing open mail relay
-------------------------- --------------------------
If you are running E-MailRelay as a server with a permanent connection to the If you are running E-MailRelay as a server with a permanent connection to the
Internet it is important to prevent open mail relay because this can be 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 exploited by spammers and get you into trouble with your ISP. By default open
E-MailRelay does not accept IP connections from remote clients. However, if you mail relaying is not possible because E-MailRelay does not accept IP connections
use the "--remote-clients" switch then you need to be more careful. from remote clients. However, if you use the "--remote-clients" option then you
need to be more careful.
If the only required access to the E-MailRelay server is from a local network If the only required access to the E-MailRelay server is from a local network
and not from the Internet then you can use the "--interface" switch to listen and not from the Internet then just set up your firewall to block incoming
for incoming connections only on the local network interface. You should also connections on ports 25 (SMTP) and 110 (POP) and also use the "--interface"
use a firewall in this scenario. option on the E-MailRelay command-line so that it only listens for incoming
connections on the local network.
Another option is to require all clients to authenticate by using the If you do need to accept connections from the Internet then you should require
"--server-auth" switch. If you then need local clients, such as your own e-mail all clients to authenticate themselves by using the "--server-auth" option on
client program, to connect without authentication then you must put those the E-MailRelay command-line. If you also want local clients running on your
trusted IP addresses in the secrets file with an authentication mechanism of internal network to be able to bypass this authentication then you can put those
"NONE". Refer to the reference guide for more information. trusted IP addresses in the E-MailRelay 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 connections from the Internet
without authentication but only allow them to send mail to local users. In other
words you want to allow anyone to deliver e-mail to your system but not allow
them to spam someone else. You can do this by requiring authentication with the
"--server-auth" switch, then exempt everyone from mandatory authentication with
"NONE server *.*.*.* x" line in the secrets file, and finally have an address
verifier script ("--verifier") which rejects remote recipient addresses if the
client has not authenticated. Again, refer to the reference guide for further
details.
Running as a POP server Running as a POP server
----------------------- -----------------------
E-MailRelay can run as a POP server so that e-mail client programs can retrieve E-MailRelay can run as a POP server so that e-mail client programs can retrieve
messages from the spool directory directly (although it is not a good idea to messages from the E-MailRelay spool directory directly.
run E-MailRelay as a POP server if also forwarding messages by SMTP).
To allow POP access to spooled messages use a command-line something like this: To allow POP access to spooled messages use a command-line something like this:
emailrelay --as-server --pop --pop-auth /etc/emailrelay.auth emailrelay --as-server --pop --pop-auth=/etc/emailrelay.auth
You will need to create the authentication secrets file ("/etc/emailrelay.auth" You will need to create the authentication secrets file ("emailrelay.auth" in
in this example) containing usernames and passwords. A simple example would look this example) containing usernames and passwords. A simple example would look
like this: like this:
APOP server user1 password1 server APOP user1 password1
APOP server user2 password2 server APOP user2 password2
If you need to serve up messages to more than one POP client consider using the It can sometimes be useful to serve up the same e-mail messages to multiple POP
"--pop-by-name" option with a "--filter" script that moves messages into the clients. For example, you might use several e-mail clients on your local network
appropriate sub-directory. The "emailrelay-filter-copy" program is designed and you would like to see your mail on all of them equally. The "--pop-by-name"
to be used in this way: when a message is received over SMTP it copies it option is intended to be used in this scenario; each e-mail client sees its own
into all available sub-directories for collection by multiple POP clients. copy of the e-mail messages, stored in its own sub-directory of the main spool
directory. The name of the sub-directory is simply the name that the client uses
to authenticate with the E-MailRelay server. You just need to create the
sub-directory for each client and then specify "emailrelay-filter-copy"
as the "--filter" program.
Refer to the reference guide for more information. Refer to the reference guide for more information.
Triggering delivery over dial-up Triggering delivery over dial-up
-------------------------------- --------------------------------
If you are using E-MailRelay to store and forward e-mail over a dial-up link to If you are using E-MailRelay on Unix to store and forward e-mail over an
the Internet, then you will need to set things up so that the dialler tells intermittent link to Internet such as dial-up or wireless networking, then you
E-MailRelay when to start forwarding. might need to set things up so that the network tells E-MailRelay when to start
forwarding e-mail.
In most Unix-like systems a "ppp" daemon calls the script "/etc/ppp/ip-up" when On Linux systems you should find that there are special directories where you
it has successfully established a dial-up link to your ISP. This script will can install your own hook scripts that are called whenever a dial-up or wireless
probably set up IP routes, update the DNS configuration, initialise a firewall, network connection is established. For dial-up this might be "/etc/ppp/ip-up.d",
run "fetchmail" and "sendmail", etc. It may also call out to another script, and for wireless "/etc/network/if-up.d".
"ip-up.local" which is available for you to put stuff into without having to
edit "ip-up" itself.
The simplest approach for editing "ip-up" is to look for a "sendmail -q" line. Just create a two-line script like this in the relevant directory:
If you find "sendmail -q" then it should be sufficient to replace it with this:
emailrelay --as-client <myisp>:smtp
where you substitute your ISP's SMTP server address for <myisp>.
Or if your "ip-up" calls out to "ip-up.local" then create a two-line
"/etc/ppp/ip-up.local" script like this:
#!/bin/sh #!/bin/sh
exec /usr/local/sbin/emailrelay --as-client <myisp>:smtp exec /usr/local/sbin/emailrelay --as-client=myisp.net:smtp
If you create "ip-up.local" yourself remember to make it executable. and make it executable using "chmod +x".
Notification of failed e-mails Notification of failed e-mails
------------------------------ ------------------------------
@ -318,22 +239,17 @@ You should check for ".bad" envelope files in the E-MailRelay spool directory
from time to time. from time to time.
If you want failed e-mails to be retried a few times you can run the If you want failed e-mails to be retried a few times you can run the
"emailrelay-resubmit.sh" script periodically, perhaps from "cron". This script "emailrelay-resubmit" script periodically. This script simply removes the ".bad"
simply removes the ".bad" suffix from files in the spool directory, as long as suffix from files in the spool directory, as long as they have not been retried
they have not been retried too many times already. too many times already.
If you are using E-MailRelay to forward outgoing e-mails then you can also get
failed e-mails to bounce back to your in-tray by running the
"emailrelay-notify.sh" script periodically as "root", although this does require
"procmail" to act as a delivery agent.
Usage patterns Usage patterns
-------------- --------------
The simplest ways of using E-MailRelay for SMTP are as a proxy or as a The simplest ways of using E-MailRelay for SMTP are as a proxy or for
store-and-forward MTA, but many other configurations are possible. For example, store-and-forward, but many other configurations are possible. For example,
multiple E-MailRelay servers can run in parallel sharing the same spool directory, multiple E-MailRelay servers can run in parallel sharing the same spool
or they can be chained in series to that e-mail messages get transferred directory, or they can be chained in series to that e-mail messages get
from one to the next. transferred from one to the next.
Remember that messages can be introduced directly into the E-MailRelay spool Remember that messages can be introduced directly into the E-MailRelay spool
directory using the "emailrelay-submit" utility, and they can be moved out again directory using the "emailrelay-submit" utility, and they can be moved out again
@ -348,7 +264,7 @@ of the main spool directory. If messages are coming in over SMTP then you could
install an SMTP "--filter" script to move each new message into the relevant install an SMTP "--filter" script to move each new message into the relevant
sub-directory based on the message addressing. sub-directory based on the message addressing.
For more ideas check out the "--client-filter" and "--poll" switches, and don't For more ideas check out the "--client-filter" and "--poll" options, and don't
overlook the administration and control interface ("--admin") which you can use overlook the administration and control interface ("--admin") which you can use
to receive notification of message arrival or force message forwarding at any to receive notification of message arrival or force message forwarding at any
time. time.
@ -361,70 +277,59 @@ to mark or reject potential spam.
To get E-MailRelay to reject spam outright you can just use "spamassassin -e" as To get E-MailRelay to reject spam outright you can just use "spamassassin -e" as
your E-MailRelay "--filter" program: your E-MailRelay "--filter" program:
emailrelay --as-server --filter "/usr/bin/spamassassin --exit-code" emailrelay --as-server --filter="/usr/bin/spamassassin --exit-code"
Or on Windows: Or on Windows:
emailrelay --as-server --filter "c:/Program\ Files/perl/site/bin/spamassassin.bat --exit-code" emailrelay --as-server --filter="c:/Program\ Files/perl/site/bin/spamassassin.bat --exit-code"
To get spam messages identified by SpamAssassin but still pass through the To get spam messages identified by SpamAssassin but still pass through the
E-MailRelay system you will have to have a small "--filter" script to collect E-MailRelay system you will have to have a small "--filter" script to collect
the output from the "spamassassin" program and write it back into the the output from the "spamassassin" program and write it back into the
E-MailRelay content file. E-MailRelay content file.
Your "--filter" shell script could look something like this: On Unix your "--filter" shell script could look something like this:
#!/bin/sh #!/bin/sh
spamassassin "$1" > "$1.tmp" spamassassin "$1" > "$1.tmp"
mv "$1.tmp" "$1" mv "$1.tmp" "$1"
exit 0 exit 0
Or an equivalent batch script on Windows: On Windows an equivalent batch script would be:
c:\Program Files\perl\site\bin\spamassassin.bat %1 > %1.tmp c:\Program Files\perl\site\bin\spamassassin.bat %1 > %1.tmp
ren %1.tmp %1 ren %1.tmp %1
exit 0 exit 0
You may need to set the "--filter-timeout" switch to control how long Or you could adapt the "emailrelay-runperl.js" example script.
E-MailRelay waits for the spam analysis to complete.
You could also consider doing spam filtering off-line, completely independent
of any SMTP activity, by having two E-MailRelay processes chained together
working off two spool directories:
emailrelay --as-server --spool-dir /tmp/spool-in --poll 1 --forward-to localhost:10025
emailrelay --as-server --spool-dir /tmp/spool-out --port 10025 --filter /tmp/myspamfilter
Here the first E-MailRelay server accepts incoming mail straight into its spool
directory and it uses a "--poll" timer to independently forward spooled messages
to the second server running on port 10025. The second server runs the spam
filter as each message is received.
There is also an experimental mechanism where E-MailRelay can talk direcly to
the SpamassAssin "spamd" network deamon using a special form of the "--filter"
switch:
emailrelay --as-server --filter spam:localhost:783
This might be useful if spam filtering is creating a bottleneck in the
E-MailRelay server.
Google mail Google mail
----------- -----------
To send mail via Google mail's SMTP gateway you will need to create a client To send mail via Google mail's SMTP gateway you will need to create a client
secrets file containing your account details and enable TLS support in secrets file containing your account details and also enable TLS/SSL support in
E-MailRelay by using the "--client-tls" switch. E-MailRelay by using the "--client-tls" option.
The secrets file should contain one line of text something like this: The secrets file should contain one line of text something like this:
login client myname@gmail.com mypassword login client myname@gmail.com mypassword
Reference this file using "--client-auth" on the E-MailRelay command-line and Reference this file using "--client-auth" on the E-MailRelay command-line and
also add in the "--client-tls" switch: also add in the "--client-tls" option:
emailrelay --as-proxy smtp.gmail.com:587 --client-tls --client-auth /etc/emailrelay.auth ... emailrelay --as-proxy=smtp.gmail.com:587 --client-tls --client-auth=/etc/emailrelay.auth ...
Connection tunnelling
---------------------
E-MailRelay can send mail out via a SOCKS v4 proxy, which makes it easy to route
your mail through an encrypted tunnel using "ssh -N -D" or via the Tor
anonymising network.
For example, this will run an E-MailRelay proxy on port 1025 that routes via a
local tor server on port 9050 to the mail server at example.com:
emailrelay --port 1025 --as-proxy=example.com:25@localhost:9050 --domain=anonymous.org --connection-timeout=300
Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.

BIN
doc/valid-html401.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -1,82 +1,108 @@
E-MailRelay Windows E-MailRelay Windows
=================== ===================
Command-line options
--------------------
There are some differences in the command-line options when running the
E-MailRelay server on Windows. These include:
* The "--syslog" option refers to the Windows Event Viewer's Application log.
* The "--no-daemon" option is used to disable the icon in the system tray.
* The "--hidden" option hides all windows and suppresses message boxes (requires "--no-deamon").
* The "--peer-lookup" option can be used to add extra information to envelope files for local clients.
Setup program Setup program
------------- -------------
Installing E-MailRelay on Windows should be straightforward if you have Installing E-MailRelay on Windows should be straightforward if you have the
self-extracting archive program "emailrelay-setup.exe". Make sure that the setup program "emailrelay-setup.exe" and its associated "payload" data file.
setup program is in a writeable directory with plenty of space on the disk
because when you run it it will extract an installation GUI program plus
dependent DLLs in into the same directory.
The installation GUI will take you through the installation options and then Run "emailrelay-setup.exe" as an administrator if you are going to be installing
install the run-time files into your chosen directory. into sensitive directories like "Program Files". If you don't want to run it as
an administrator then you will have to rename to (eg.) "emailrelay-gui.exe" to
avoid triggering the UAC mechanism.
The setup GUI will take you through the installation options and then install
the run-time files into your chosen locations.
Manual installation Manual installation
------------------- -------------------
In summary, the manual installation process for Windows for when you do not have In summary, the manual installation process for Windows for when you do not have
the self-extracting setup program, is as follows: the self-extracting setup program, is as follows:
* Create a new program directory "Program Files\emailrelay" * Create a new program directory "c:\Program Files\emailrelay"
* Unzip into "Program Files\emailrelay" * Copy the packaged files into "Program Files\emailrelay"
* Create a new spool directory "<windir>\spool\emailrelay" * Create a new spool directory "c:\windows\system32\spool\emailrelay"
* Create a new text file, eg. "c:\emailrelay.auth", to contain account details * 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" * Add your account details to "emailrelay.auth" with a line like "client login myaccount mypassword"
* Drag "emailrelay.exe" onto the desktop to create a shortcut for the server. * Drag "emailrelay.exe" onto the desktop to create a shortcut for the server.
* Add "--as-server --verbose" to the server shortcut properties in the "target" box.
* Drag again to create a shortcut for the forwarding client. * 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.
* Add "--as-client myisp.net:smtp --hidden --client-auth c:/emailrelay.auth" to the client shortcut.
Move shortcuts to "Startup" folders as necessary. Move shortcuts to "Startup" folders as necessary.
Running as a service Running as a service
-------------------- --------------------
To manually install E-MailRelay as a service so that it starts up automatically If you are installing manually you can set up E-MailRelay as a service so that
at boot-time you must first create a one-line batch file called it starts up automatically at boot-time. You must first have a one-line batch
"emailrelay-start.bat" in the main E-MailRelay directory containing file called "emailrelay-start.bat" in the main E-MailRelay directory containing
the full E-MailRelay server command-line. Then run "emailrelay-service --install" the full E-MailRelay server command-line. Then just run
to install the service. "emailrelay-service --install" to install the service.
When the E-MailRelay server is run in this way the "--no-daemon" and "--hidden" When the E-MailRelay server is run in this way the "--no-daemon" and "--hidden"
switches are added automatically to whatever is in the "emailrelay-start" batch options are added automatically to whatever is in the "emailrelay-start" batch
file, so that there is no user interface. (The "--no-daemon" switch on Windows file so that there is no user interface. (The "--no-daemon" option changes the
changes the interface from using the system-tray to using a normal window, and interface from using the system-tray to using a normal window, and the
the "--hidden" switch suppresses the window and any message boxes.) "--hidden" option suppresses the window and any message boxes.)
Note that the batch file and the main E-MailRelay executable must be in the same Note that the batch file and the main E-MailRelay executable must be in the same
directory. directory; the service wrapper reads the batch file in order to assemble the
correct command-line for running the E-MailRelay server, so it needs to know
where to find it.
If you need to run multiple E-MailRelay services then pass a unique service name If you need to run multiple E-MailRelay services then pass a unique service name
on the "emailrelay-service --install <name>" command-line. This name is used to and display name on the "emailrelay-service --install <name> <display-name>"
derive the name of the "<name>-start.bat" batch file that contains the command-line.
E-MailRelay server's command-line switches so you will need to create this too.
The service name you give is used to derive the name of the "<name>-start.bat"
batch file that contains the E-MailRelay server's command-line options, so you
will need to create that first.
For example:
copy emailrelay-start.bat emailrelay-client-start.bat
edit emailrelay-client-start.bat
emailrelay-service --install emailrelay-client "E-MailRelay Client"
copy emailrelay-start.bat emailrelay-server-start.bat
edit emailrelay-server-start.bat
emailrelay-service --install emailrelay-server "E-MailRelay Server"
Diagnostics Diagnostics
----------- -----------
E-MailRelay normally writes errors and warnings into the system event log, which E-MailRelay normally writes errors and warnings into the Windows Event Log,
you can view by running "eventvwr.exe". You can increase the verbosity by adding which you can view by running "eventvwr.exe" or going to
the "--verbose" switch to the E-MailRelay command-line, typically by editing the "ControlPanel"->"SystemAndSecurity"->"AdministrativeTools"->"EventViewer"; from
"emailrelay-start.bat" batch script. there look under "Windows Logs" and "Application".
The E-MailRelay server also logs to the standard error stream. However, the You can increase the verbosity of the logging by adding the "--verbose" option
"--as-server" and "--as-proxy" switches implicitly incorporate "--close-stderr" to the E-MailRelay command-line, typically by editing the "emailrelay-start.bat"
so with these switches the standard error logging will stop soon after startup. batch script.
To get continuous logging to a log file you should replace "--as-server" with Telnet
"--log" and "--as-proxy" with "--poll 0 --forward-to" and then use "2>" to ------
redirect the standard error stream, eg: If you want to test E-MailRelay using telnet (as described elsewhere) then you
might need to enable the Windows telnet client using
"c:\program files\emailrelay\emailrelay.exe" --log -v -L ... > c:\temp.out 2>&1 "ControlPanel"->"ProgramsAndFeatures"->"TurnWindowsFeaturesOnAndOff".
Building from source Building from source
-------------------- --------------------
E-MailRelay can be compiled using Microsoft Visual Studio C++ (MSVC) 6 or MinGW, E-MailRelay can be compiled using various versions of Microsoft Visual Studio
although the installation/configuration GUI can only be built with MinGW because C++ (MSVC) or MinGW.
of its dependence on Qt.
There is a Visual Studio workspace file for MSVC 6 in the "src" directory. For A Visual Studio "solution" for MSVC 2012 is provided in the "src" directory to
MinGW please follow the guidelines in "mingw-common.mak" which is also in the build the main E-MailRelay executable, although it does not include a project
"src" directory. for the Qt-based installation/configuration GUI.
For a complete build that includes the E-MailRelay GUI use MinGW, following the
instructions in "src/mingw-common.mak" and "doc/developer.txt".
Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.

View File

@ -23,6 +23,7 @@
/* End PBXAggregateTarget section */ /* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
EE1753D616B882A100575457 /* genvironment_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE1753D516B882A100575457 /* genvironment_unix.cpp */; };
EE486FEF0D3E3EA900AB4CC6 /* dir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE486FCA0D3E3EA900AB4CC6 /* dir.cpp */; }; EE486FEF0D3E3EA900AB4CC6 /* dir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE486FCA0D3E3EA900AB4CC6 /* dir.cpp */; };
EE486FF20D3E3EA900AB4CC6 /* gdialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE486FD00D3E3EA900AB4CC6 /* gdialog.cpp */; }; EE486FF20D3E3EA900AB4CC6 /* gdialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE486FD00D3E3EA900AB4CC6 /* gdialog.cpp */; };
EE486FF40D3E3EA900AB4CC6 /* gpage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE486FD40D3E3EA900AB4CC6 /* gpage.cpp */; }; EE486FF40D3E3EA900AB4CC6 /* gpage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE486FD40D3E3EA900AB4CC6 /* gpage.cpp */; };
@ -34,11 +35,15 @@
EE4870560D3E529100AB4CC6 /* moc_gdialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE4870530D3E529100AB4CC6 /* moc_gdialog.cpp */; }; EE4870560D3E529100AB4CC6 /* moc_gdialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE4870530D3E529100AB4CC6 /* moc_gdialog.cpp */; };
EE4870570D3E529100AB4CC6 /* moc_gpage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE4870540D3E529100AB4CC6 /* moc_gpage.cpp */; }; EE4870570D3E529100AB4CC6 /* moc_gpage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE4870540D3E529100AB4CC6 /* moc_gpage.cpp */; };
EE4870580D3E529100AB4CC6 /* moc_pages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE4870550D3E529100AB4CC6 /* moc_pages.cpp */; }; EE4870580D3E529100AB4CC6 /* moc_pages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE4870550D3E529100AB4CC6 /* moc_pages.cpp */; };
EE529995184D5F4200AAD1FE /* unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = EE486FEC0D3E3EA900AB4CC6 /* unpack.c */; };
EE52999B184D5FF900AAD1FE /* gregister_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE52999A184D5FF900AAD1FE /* gregister_mac.cpp */; };
EEBDCC1216A6040100BDFB44 /* mapfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEBDCC0A16A6040100BDFB44 /* mapfile.cpp */; };
EEBDCC1316A6040100BDFB44 /* pointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEBDCC0C16A6040100BDFB44 /* pointer.cpp */; };
EEBDCC1816A604AD00BDFB44 /* gstrings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEBDCC1716A604AD00BDFB44 /* gstrings.cpp */; };
EEC342C10D50E0BD00DD9918 /* boot_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342BF0D50E0BD00DD9918 /* boot_mac.cpp */; }; EEC342C10D50E0BD00DD9918 /* boot_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342BF0D50E0BD00DD9918 /* boot_mac.cpp */; };
EEC342C20D50E0BD00DD9918 /* dir_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342C00D50E0BD00DD9918 /* dir_mac.cpp */; }; EEC342C20D50E0BD00DD9918 /* dir_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342C00D50E0BD00DD9918 /* dir_mac.cpp */; };
EEC342C60D50E0D800DD9918 /* glink_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342C30D50E0D800DD9918 /* glink_mac.cpp */; }; EEC342C60D50E0D800DD9918 /* glink_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342C30D50E0D800DD9918 /* glink_mac.cpp */; };
EEC342C80D50E0D800DD9918 /* state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342C50D50E0D800DD9918 /* state.cpp */; }; EEC342C80D50E0D800DD9918 /* state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342C50D50E0D800DD9918 /* state.cpp */; };
EEC342E80D50F68600DD9918 /* guistart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC342C40D50E0D800DD9918 /* guistart.cpp */; };
EEC342FA0D50F72800DD9918 /* unpackmain.c in Sources */ = {isa = PBXBuildFile; fileRef = EEC342F90D50F72800DD9918 /* unpackmain.c */; }; EEC342FA0D50F72800DD9918 /* unpackmain.c in Sources */ = {isa = PBXBuildFile; fileRef = EEC342F90D50F72800DD9918 /* unpackmain.c */; };
EEC342FC0D50F73900DD9918 /* unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = EE486FEC0D3E3EA900AB4CC6 /* unpack.c */; }; EEC342FC0D50F73900DD9918 /* unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = EE486FEC0D3E3EA900AB4CC6 /* unpack.c */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
@ -81,6 +86,7 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
8DD76F6C0486A84900D96B5E /* emailrelay-gui */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-gui"; sourceTree = BUILT_PRODUCTS_DIR; }; 8DD76F6C0486A84900D96B5E /* emailrelay-gui */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-gui"; sourceTree = BUILT_PRODUCTS_DIR; };
EE1753D516B882A100575457 /* genvironment_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = genvironment_unix.cpp; path = src/glib/genvironment_unix.cpp; sourceTree = SOURCE_ROOT; };
EE486FC90D3E3EA900AB4CC6 /* boot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = boot.h; sourceTree = "<group>"; }; EE486FC90D3E3EA900AB4CC6 /* boot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = boot.h; sourceTree = "<group>"; };
EE486FCA0D3E3EA900AB4CC6 /* dir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dir.cpp; sourceTree = "<group>"; }; EE486FCA0D3E3EA900AB4CC6 /* dir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dir.cpp; sourceTree = "<group>"; };
EE486FCB0D3E3EA900AB4CC6 /* dir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dir.h; sourceTree = "<group>"; }; EE486FCB0D3E3EA900AB4CC6 /* dir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dir.h; sourceTree = "<group>"; };
@ -107,19 +113,27 @@
EE486FE50D3E3EA900AB4CC6 /* pages.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pages.cpp; sourceTree = "<group>"; }; EE486FE50D3E3EA900AB4CC6 /* pages.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pages.cpp; sourceTree = "<group>"; };
EE486FE60D3E3EA900AB4CC6 /* pages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pages.h; sourceTree = "<group>"; }; EE486FE60D3E3EA900AB4CC6 /* pages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pages.h; sourceTree = "<group>"; };
EE486FE70D3E3EA900AB4CC6 /* qt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qt.h; sourceTree = "<group>"; }; EE486FE70D3E3EA900AB4CC6 /* qt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qt.h; sourceTree = "<group>"; };
EE486FE80D3E3EA900AB4CC6 /* run.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = run.c; sourceTree = "<group>"; };
EE486FE90D3E3EA900AB4CC6 /* service_install.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = service_install.cpp; sourceTree = "<group>"; };
EE486FEA0D3E3EA900AB4CC6 /* service_install.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = service_install.h; sourceTree = "<group>"; };
EE486FEB0D3E3EA900AB4CC6 /* service_wrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = service_wrapper.cpp; sourceTree = "<group>"; };
EE486FEC0D3E3EA900AB4CC6 /* unpack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unpack.c; sourceTree = "<group>"; }; EE486FEC0D3E3EA900AB4CC6 /* unpack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unpack.c; sourceTree = "<group>"; };
EE486FED0D3E3EA900AB4CC6 /* unpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unpack.h; sourceTree = "<group>"; }; EE486FED0D3E3EA900AB4CC6 /* unpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unpack.h; sourceTree = "<group>"; };
EE4870530D3E529100AB4CC6 /* moc_gdialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_gdialog.cpp; path = src/gui/moc_gdialog.cpp; sourceTree = "<group>"; }; EE4870530D3E529100AB4CC6 /* moc_gdialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_gdialog.cpp; path = src/gui/moc_gdialog.cpp; sourceTree = "<group>"; };
EE4870540D3E529100AB4CC6 /* moc_gpage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_gpage.cpp; path = src/gui/moc_gpage.cpp; sourceTree = "<group>"; }; EE4870540D3E529100AB4CC6 /* moc_gpage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_gpage.cpp; path = src/gui/moc_gpage.cpp; sourceTree = "<group>"; };
EE4870550D3E529100AB4CC6 /* moc_pages.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_pages.cpp; path = src/gui/moc_pages.cpp; sourceTree = "<group>"; }; EE4870550D3E529100AB4CC6 /* moc_pages.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_pages.cpp; path = src/gui/moc_pages.cpp; sourceTree = "<group>"; };
EE529999184D5FF900AAD1FE /* gregister.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gregister.h; sourceTree = "<group>"; };
EE52999A184D5FF900AAD1FE /* gregister_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gregister_mac.cpp; sourceTree = "<group>"; };
EEBDCC0416A6040100BDFB44 /* boot_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boot_unix.cpp; sourceTree = "<group>"; };
EEBDCC0516A6040100BDFB44 /* boot_win32.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boot_win32.cpp; sourceTree = "<group>"; };
EEBDCC0616A6040100BDFB44 /* emailrelay-icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "emailrelay-icon.icns"; sourceTree = "<group>"; };
EEBDCC0716A6040100BDFB44 /* emailrelay-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "emailrelay-icon.png"; sourceTree = "<group>"; };
EEBDCC0816A6040100BDFB44 /* glink_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glink_unix.cpp; sourceTree = "<group>"; };
EEBDCC0916A6040100BDFB44 /* glink_win32.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glink_win32.cpp; sourceTree = "<group>"; };
EEBDCC0A16A6040100BDFB44 /* mapfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mapfile.cpp; sourceTree = "<group>"; };
EEBDCC0B16A6040100BDFB44 /* mapfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mapfile.h; sourceTree = "<group>"; };
EEBDCC0C16A6040100BDFB44 /* pointer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pointer.cpp; sourceTree = "<group>"; };
EEBDCC0D16A6040100BDFB44 /* pointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pointer.h; sourceTree = "<group>"; };
EEBDCC1716A604AD00BDFB44 /* gstrings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gstrings.cpp; path = src/glib/gstrings.cpp; sourceTree = SOURCE_ROOT; };
EEC342BF0D50E0BD00DD9918 /* boot_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boot_mac.cpp; sourceTree = "<group>"; }; EEC342BF0D50E0BD00DD9918 /* boot_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boot_mac.cpp; sourceTree = "<group>"; };
EEC342C00D50E0BD00DD9918 /* dir_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dir_mac.cpp; sourceTree = "<group>"; }; EEC342C00D50E0BD00DD9918 /* dir_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dir_mac.cpp; sourceTree = "<group>"; };
EEC342C30D50E0D800DD9918 /* glink_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glink_mac.cpp; sourceTree = "<group>"; }; EEC342C30D50E0D800DD9918 /* glink_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glink_mac.cpp; sourceTree = "<group>"; };
EEC342C40D50E0D800DD9918 /* guistart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = guistart.cpp; sourceTree = "<group>"; };
EEC342C50D50E0D800DD9918 /* state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = state.cpp; sourceTree = "<group>"; }; EEC342C50D50E0D800DD9918 /* state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = state.cpp; sourceTree = "<group>"; };
EEC342CB0D50E1D500DD9918 /* state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = state.h; sourceTree = "<group>"; }; EEC342CB0D50E1D500DD9918 /* state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = state.h; sourceTree = "<group>"; };
EEC342DF0D50F62E00DD9918 /* emailrelay-start-gui */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-start-gui"; sourceTree = BUILT_PRODUCTS_DIR; }; EEC342DF0D50F62E00DD9918 /* emailrelay-start-gui */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-start-gui"; sourceTree = BUILT_PRODUCTS_DIR; };
@ -175,10 +189,23 @@
EE486FC70D3E3EA900AB4CC6 /* gui */ = { EE486FC70D3E3EA900AB4CC6 /* gui */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
EE529999184D5FF900AAD1FE /* gregister.h */,
EE52999A184D5FF900AAD1FE /* gregister_mac.cpp */,
EE1753D516B882A100575457 /* genvironment_unix.cpp */,
EEBDCC1716A604AD00BDFB44 /* gstrings.cpp */,
EEBDCC0416A6040100BDFB44 /* boot_unix.cpp */,
EEBDCC0516A6040100BDFB44 /* boot_win32.cpp */,
EEBDCC0616A6040100BDFB44 /* emailrelay-icon.icns */,
EEBDCC0716A6040100BDFB44 /* emailrelay-icon.png */,
EEBDCC0816A6040100BDFB44 /* glink_unix.cpp */,
EEBDCC0916A6040100BDFB44 /* glink_win32.cpp */,
EEBDCC0A16A6040100BDFB44 /* mapfile.cpp */,
EEBDCC0B16A6040100BDFB44 /* mapfile.h */,
EEBDCC0C16A6040100BDFB44 /* pointer.cpp */,
EEBDCC0D16A6040100BDFB44 /* pointer.h */,
EEC342F90D50F72800DD9918 /* unpackmain.c */, EEC342F90D50F72800DD9918 /* unpackmain.c */,
EEC342CB0D50E1D500DD9918 /* state.h */, EEC342CB0D50E1D500DD9918 /* state.h */,
EEC342C30D50E0D800DD9918 /* glink_mac.cpp */, EEC342C30D50E0D800DD9918 /* glink_mac.cpp */,
EEC342C40D50E0D800DD9918 /* guistart.cpp */,
EEC342C50D50E0D800DD9918 /* state.cpp */, EEC342C50D50E0D800DD9918 /* state.cpp */,
EEC342BF0D50E0BD00DD9918 /* boot_mac.cpp */, EEC342BF0D50E0BD00DD9918 /* boot_mac.cpp */,
EEC342C00D50E0BD00DD9918 /* dir_mac.cpp */, EEC342C00D50E0BD00DD9918 /* dir_mac.cpp */,
@ -208,10 +235,6 @@
EE486FE50D3E3EA900AB4CC6 /* pages.cpp */, EE486FE50D3E3EA900AB4CC6 /* pages.cpp */,
EE486FE60D3E3EA900AB4CC6 /* pages.h */, EE486FE60D3E3EA900AB4CC6 /* pages.h */,
EE486FE70D3E3EA900AB4CC6 /* qt.h */, EE486FE70D3E3EA900AB4CC6 /* qt.h */,
EE486FE80D3E3EA900AB4CC6 /* run.c */,
EE486FE90D3E3EA900AB4CC6 /* service_install.cpp */,
EE486FEA0D3E3EA900AB4CC6 /* service_install.h */,
EE486FEB0D3E3EA900AB4CC6 /* service_wrapper.cpp */,
EE486FEC0D3E3EA900AB4CC6 /* unpack.c */, EE486FEC0D3E3EA900AB4CC6 /* unpack.c */,
EE486FED0D3E3EA900AB4CC6 /* unpack.h */, EE486FED0D3E3EA900AB4CC6 /* unpack.h */,
); );
@ -346,6 +369,12 @@
EEC342C20D50E0BD00DD9918 /* dir_mac.cpp in Sources */, EEC342C20D50E0BD00DD9918 /* dir_mac.cpp in Sources */,
EEC342C60D50E0D800DD9918 /* glink_mac.cpp in Sources */, EEC342C60D50E0D800DD9918 /* glink_mac.cpp in Sources */,
EEC342C80D50E0D800DD9918 /* state.cpp in Sources */, EEC342C80D50E0D800DD9918 /* state.cpp in Sources */,
EEBDCC1216A6040100BDFB44 /* mapfile.cpp in Sources */,
EEBDCC1316A6040100BDFB44 /* pointer.cpp in Sources */,
EEBDCC1816A604AD00BDFB44 /* gstrings.cpp in Sources */,
EE1753D616B882A100575457 /* genvironment_unix.cpp in Sources */,
EE529995184D5F4200AAD1FE /* unpack.c in Sources */,
EE52999B184D5FF900AAD1FE /* gregister_mac.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -353,7 +382,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
EEC342E80D50F68600DD9918 /* guistart.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -1,28 +1,27 @@
Summary: Simple e-mail message transfer agent and proxy using SMTP Summary: Simple e-mail message transfer agent and proxy using SMTP
Name: emailrelay Name: emailrelay
Version: 1.8.1 Version: 1.9
Release: 1 Release: 1
License: GPL3 License: GPL3
Group: System Environment/Daemons Group: System Environment/Daemons
URL: http://emailrelay.sourceforge.net/ URL: http://emailrelay.sourceforge.net/
Source: http://sourceforge.net/sourceforge/emailrelay/emailrelay-1.8.1-src.tar.gz Source: http://sourceforge.net/sourceforge/emailrelay/emailrelay-1.9-src.tar.gz
BuildRoot: /tmp/emailrelay-install BuildRoot: /tmp/emailrelay-install
%description %description
E-MailRelay is a simple SMTP proxy and store-and-forward message transfer agent E-MailRelay is a simple SMTP proxy and store-and-forward message transfer agent
(MTA). When running as a proxy all e-mail messages can be passed through a (MTA). When running as a proxy all e-mail messages can be passed through a
user-defined program, such as a spam filter, which can drop, re-address or edit user-defined program, such as a spam filter, which can drop, re-address or edit
messages as they pass through. When running as a store-and-forward MTA incoming messages as they pass through. When running as a store-and-forward MTA incoming
messages are stored in a local spool directory, and then forwarded to the next messages are stored in a local spool directory, and then forwarded to the next
SMTP server on request. SMTP server on request.
Because of its functional simplicity E-MailRelay is easy to configure, often
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. Messages received over SMTP can be E-MailRelay can also run as a POP3 server. Messages received over SMTP can be
automatically dropped into several independent POP3 mailboxes. automatically dropped into several independent POP3 mailboxes.
E-MailRelay uses the same non-blocking i/o model as Squid and Nginx giving
excellent scalability and resource usage.
C++ source code is available for Linux, FreeBSD, MacOS X etc, and Windows. C++ source code is available for Linux, FreeBSD, MacOS X etc, and Windows.
Distribution is under the GNU General Public License V3. Distribution is under the GNU General Public License V3.
@ -30,14 +29,15 @@ Distribution is under the GNU General Public License V3.
%setup %setup
%build %build
./configure --enable-fhs --disable-gui --without-man2html --without-doxygen --with-openssl --enable-static-linking --disable-install-hook ./configure --prefix=/usr --localstatedir=/var --libexecdir=/usr/lib --sysconfdir=/etc e_initdir=/etc/init.d --disable-gui --without-man2html --without-doxygen --with-openssl --with-zlib --enable-static-linking --disable-install-hook
make make
%install %install
make install-strip destdir=$RPM_BUILD_ROOT DESTDIR=$RPM_BUILD_ROOT make install-strip destdir=$RPM_BUILD_ROOT DESTDIR=$RPM_BUILD_ROOT
%post %post
test -f /usr/lib/lsb/install_initd && cd /etc/init.d && /usr/lib/lsb/install_initd emailrelay || true test -f /usr/lib/lsb/install_initd && cd $RPM_BUILD_ROOT/etc/init.d && /usr/lib/lsb/install_initd emailrelay || true
test -f $RPM_BUILD_ROOT/etc/emailrelay.conf || cp $RPM_BUILD_ROOT/etc/emailrelay.conf.template $RPM_BUILD_ROOT/etc/emailrelay.conf || true
%preun %preun
test $1 -eq 0 && test -f /usr/lib/lsb/remove_initd && cd /etc/init.d && /usr/lib/lsb/remove_initd emailrelay || true test $1 -eq 0 && test -f /usr/lib/lsb/remove_initd && cd /etc/init.d && /usr/lib/lsb/remove_initd emailrelay || true
@ -48,21 +48,32 @@ test "$RPM_BUILD_ROOT" = "/" || rm -rf "$RPM_BUILD_ROOT"
%files %files
%config /etc/emailrelay.conf %config /etc/emailrelay.conf
%config /etc/pam.d/emailrelay
/etc/emailrelay.conf.template /etc/emailrelay.conf.template
/etc/emailrelay.auth.template
/etc/init.d/emailrelay /etc/init.d/emailrelay
/usr/share/man/man1/emailrelay.1.gz /usr/share/man/man1/emailrelay.1.gz
/usr/share/man/man1/emailrelay-filter-copy.1.gz /usr/share/man/man1/emailrelay-filter-copy.1.gz
/usr/share/man/man1/emailrelay-poke.1.gz /usr/share/man/man1/emailrelay-poke.1.gz
/usr/share/man/man1/emailrelay-passwd.1.gz /usr/share/man/man1/emailrelay-passwd.1.gz
/usr/share/man/man1/emailrelay-submit.1.gz /usr/share/man/man1/emailrelay-submit.1.gz
%docdir /usr/share/doc/emailrelay %doc /usr/share/doc/emailrelay/AUTHORS
%doc /usr/share/doc/emailrelay/COPYING
%doc /usr/share/doc/emailrelay/INSTALL
/usr/share/doc/emailrelay/README.mac
/usr/share/doc/emailrelay/README.windows
/usr/share/doc/emailrelay/README.embedded
/usr/share/doc/emailrelay/diagram-1.png
/usr/share/doc/emailrelay/diagram-2.png
/usr/share/doc/emailrelay/emailrelay-doxygen.css
/usr/share/doc/emailrelay/valid-html401.png
/usr/share/doc/emailrelay/index.html /usr/share/doc/emailrelay/index.html
/usr/share/doc/emailrelay/windows.html /usr/share/doc/emailrelay/windows.html
/usr/share/doc/emailrelay/gsmtp-classes.png /usr/share/doc/emailrelay/gsmtp-classes.png
/usr/share/doc/emailrelay/emailrelay.docbook /usr/share/doc/emailrelay/emailrelay.docbook
%doc /usr/share/doc/emailrelay/developer.txt /usr/share/doc/emailrelay/developer.txt
/usr/share/doc/emailrelay/reference.html /usr/share/doc/emailrelay/reference.html
%doc /usr/share/doc/emailrelay/NEWS /usr/share/doc/emailrelay/NEWS
%doc /usr/share/doc/emailrelay/reference.txt %doc /usr/share/doc/emailrelay/reference.txt
/usr/share/doc/emailrelay/developer.html /usr/share/doc/emailrelay/developer.html
/usr/share/doc/emailrelay/auth.png /usr/share/doc/emailrelay/auth.png
@ -81,8 +92,7 @@ test "$RPM_BUILD_ROOT" = "/" || rm -rf "$RPM_BUILD_ROOT"
/usr/share/doc/emailrelay/emailrelay-man.html /usr/share/doc/emailrelay/emailrelay-man.html
%docdir /usr/share/doc/emailrelay/doxygen %docdir /usr/share/doc/emailrelay/doxygen
/usr/share/doc/emailrelay/doxygen/index.html /usr/share/doc/emailrelay/doxygen/index.html
%dir /usr/lib/emailrelay /usr/share/doc/emailrelay/doxygen/emailrelay-doxygen.css
%dir /usr/lib/emailrelay/examples
/usr/lib/emailrelay/examples/emailrelay-process.sh /usr/lib/emailrelay/examples/emailrelay-process.sh
/usr/lib/emailrelay/examples/emailrelay-deliver.sh /usr/lib/emailrelay/examples/emailrelay-deliver.sh
/usr/lib/emailrelay/examples/emailrelay-resubmit.sh /usr/lib/emailrelay/examples/emailrelay-resubmit.sh
@ -94,6 +104,7 @@ test "$RPM_BUILD_ROOT" = "/" || rm -rf "$RPM_BUILD_ROOT"
/usr/sbin/emailrelay-submit /usr/sbin/emailrelay-submit
/usr/sbin/emailrelay /usr/sbin/emailrelay
/usr/sbin/emailrelay-passwd /usr/sbin/emailrelay-passwd
/usr/share/emailrelay/emailrelay-icon.png
%changelog %changelog

View File

@ -26,7 +26,8 @@
/* End PBXAggregateTarget section */ /* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
EE303C5D0D326C9700D840F2 /* empty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AD50D326C9600D840F2 /* empty.cpp */; }; EE1753B016B850C600575457 /* gconnectionlookup_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE1753AF16B850C600575457 /* gconnectionlookup_unix.cpp */; };
EE1753BC16B852AD00575457 /* genvironment_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE1753BB16B852AD00575457 /* genvironment_unix.cpp */; };
EE303D000D326C9700D840F2 /* admin_enabled.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C050D326C9600D840F2 /* admin_enabled.cpp */; }; EE303D000D326C9700D840F2 /* admin_enabled.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C050D326C9600D840F2 /* admin_enabled.cpp */; };
EE303D010D326C9700D840F2 /* commandline_full.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C070D326C9600D840F2 /* commandline_full.cpp */; }; EE303D010D326C9700D840F2 /* commandline_full.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C070D326C9600D840F2 /* commandline_full.cpp */; };
EE303D030D326C9700D840F2 /* configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C0A0D326C9600D840F2 /* configuration.cpp */; }; EE303D030D326C9700D840F2 /* configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C0A0D326C9600D840F2 /* configuration.cpp */; };
@ -104,7 +105,6 @@
EE303E1A0D329BC800D840F2 /* gpopsecrets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B7F0D326C9600D840F2 /* gpopsecrets.cpp */; }; EE303E1A0D329BC800D840F2 /* gpopsecrets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B7F0D326C9600D840F2 /* gpopsecrets.cpp */; };
EE303E260D329C1200D840F2 /* gstoredmessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BCC0D326C9600D840F2 /* gstoredmessage.cpp */; }; EE303E260D329C1200D840F2 /* gstoredmessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BCC0D326C9600D840F2 /* gstoredmessage.cpp */; };
EE303E270D329C1400D840F2 /* gexecutableverifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B950D326C9600D840F2 /* gexecutableverifier.cpp */; }; EE303E270D329C1400D840F2 /* gexecutableverifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B950D326C9600D840F2 /* gexecutableverifier.cpp */; };
EE303E280D329C1500D840F2 /* gsecrets_full.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BBD0D326C9600D840F2 /* gsecrets_full.cpp */; };
EE303E290D329C1700D840F2 /* ginternalverifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B9B0D326C9600D840F2 /* ginternalverifier.cpp */; }; EE303E290D329C1700D840F2 /* ginternalverifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B9B0D326C9600D840F2 /* ginternalverifier.cpp */; };
EE303E2A0D329C1800D840F2 /* grequestclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BB60D326C9600D840F2 /* grequestclient.cpp */; }; EE303E2A0D329C1800D840F2 /* grequestclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BB60D326C9600D840F2 /* grequestclient.cpp */; };
EE303E2B0D329C1A00D840F2 /* gadminserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B8D0D326C9600D840F2 /* gadminserver.cpp */; }; EE303E2B0D329C1A00D840F2 /* gadminserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B8D0D326C9600D840F2 /* gadminserver.cpp */; };
@ -113,12 +113,10 @@
EE303E2E0D329C1F00D840F2 /* gclientprotocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B910D326C9600D840F2 /* gclientprotocol.cpp */; }; EE303E2E0D329C1F00D840F2 /* gclientprotocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B910D326C9600D840F2 /* gclientprotocol.cpp */; };
EE303E2F0D329C2200D840F2 /* gmessagestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B9D0D326C9600D840F2 /* gmessagestore.cpp */; }; EE303E2F0D329C2200D840F2 /* gmessagestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B9D0D326C9600D840F2 /* gmessagestore.cpp */; };
EE303E300D329C2400D840F2 /* gfilestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B990D326C9600D840F2 /* gfilestore.cpp */; }; EE303E300D329C2400D840F2 /* gfilestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B990D326C9600D840F2 /* gfilestore.cpp */; };
EE303E310D329C2500D840F2 /* gsasl_native.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BBA0D326C9600D840F2 /* gsasl_native.cpp */; };
EE303E320D329C2600D840F2 /* gmessagestore_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B9F0D326C9600D840F2 /* gmessagestore_unix.cpp */; }; EE303E320D329C2600D840F2 /* gmessagestore_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B9F0D326C9600D840F2 /* gmessagestore_unix.cpp */; };
EE303E330D329C2800D840F2 /* gverifierstatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BD30D326C9600D840F2 /* gverifierstatus.cpp */; }; EE303E330D329C2800D840F2 /* gverifierstatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BD30D326C9600D840F2 /* gverifierstatus.cpp */; };
EE303E340D329C2A00D840F2 /* gspamprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BC80D326C9600D840F2 /* gspamprocessor.cpp */; }; EE303E340D329C2A00D840F2 /* gspamprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BC80D326C9600D840F2 /* gspamprocessor.cpp */; };
EE303E350D329C2C00D840F2 /* gnullprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BA90D326C9600D840F2 /* gnullprocessor.cpp */; }; EE303E350D329C2C00D840F2 /* gnullprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BA90D326C9600D840F2 /* gnullprocessor.cpp */; };
EE303E360D329C3000D840F2 /* gbase64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B8F0D326C9600D840F2 /* gbase64.cpp */; };
EE303E370D329C3200D840F2 /* gverifierfactory_exec_enabled.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BD20D326C9600D840F2 /* gverifierfactory_exec_enabled.cpp */; }; EE303E370D329C3200D840F2 /* gverifierfactory_exec_enabled.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BD20D326C9600D840F2 /* gverifierfactory_exec_enabled.cpp */; };
EE303E380D329C3400D840F2 /* gnetworkverifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BA30D326C9600D840F2 /* gnetworkverifier.cpp */; }; EE303E380D329C3400D840F2 /* gnetworkverifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BA30D326C9600D840F2 /* gnetworkverifier.cpp */; };
EE303E390D329C3700D840F2 /* gstoredfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BCA0D326C9600D840F2 /* gstoredfile.cpp */; }; EE303E390D329C3700D840F2 /* gstoredfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BCA0D326C9600D840F2 /* gstoredfile.cpp */; };
@ -135,14 +133,146 @@
EE303E440D329C4B00D840F2 /* gnetworkprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BA10D326C9600D840F2 /* gnetworkprocessor.cpp */; }; EE303E440D329C4B00D840F2 /* gnetworkprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BA10D326C9600D840F2 /* gnetworkprocessor.cpp */; };
EE303E450D329C4E00D840F2 /* gsmtpserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BC40D326C9600D840F2 /* gsmtpserver.cpp */; }; EE303E450D329C4E00D840F2 /* gsmtpserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BC40D326C9600D840F2 /* gsmtpserver.cpp */; };
EE303E460D329C5000D840F2 /* gserverprotocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BBF0D326C9600D840F2 /* gserverprotocol.cpp */; }; EE303E460D329C5000D840F2 /* gserverprotocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303BBF0D326C9600D840F2 /* gserverprotocol.cpp */; };
EE9918310D91664E00FB06D5 /* empty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AD50D326C9600D840F2 /* empty.cpp */; }; EE89C05216A5B5EB006CBE2E /* gsaslclient_native.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C03E16A5B5EB006CBE2E /* gsaslclient_native.cpp */; };
EE89C05416A5B5EB006CBE2E /* gsaslserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C04016A5B5EB006CBE2E /* gsaslserver.cpp */; };
EE89C05516A5B5EB006CBE2E /* gsaslserverbasic_native.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C04316A5B5EB006CBE2E /* gsaslserverbasic_native.cpp */; };
EE89C05816A5B5EB006CBE2E /* gsaslserverfactory_pam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C04716A5B5EB006CBE2E /* gsaslserverfactory_pam.cpp */; };
EE89C05916A5B5EB006CBE2E /* gsaslserverpam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C04816A5B5EB006CBE2E /* gsaslserverpam.cpp */; };
EE89C05C16A5B5EB006CBE2E /* gsecrets_pam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C04D16A5B5EB006CBE2E /* gsecrets_pam.cpp */; };
EE89C05D16A5B5EB006CBE2E /* gsecretsfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C04E16A5B5EB006CBE2E /* gsecretsfile.cpp */; };
EE89C05E16A5B5EB006CBE2E /* gvalid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C05016A5B5EB006CBE2E /* gvalid.cpp */; };
EE89C06416A5B722006CBE2E /* garg_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06316A5B722006CBE2E /* garg_mac.cpp */; };
EE89C06F16A5B7A4006CBE2E /* gbase64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06516A5B7A4006CBE2E /* gbase64.cpp */; };
EE89C07216A5B7A4006CBE2E /* gpam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06A16A5B7A4006CBE2E /* gpam.cpp */; };
EE89C07316A5B7A4006CBE2E /* gpam_linux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06C16A5B7A4006CBE2E /* gpam_linux.cpp */; settings = {COMPILER_FLAGS = "-I/usr/include/pam"; }; };
EE89C07516A5B7A4006CBE2E /* gstrings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06E16A5B7A4006CBE2E /* gstrings.cpp */; };
EE89C07616A5B7DE006CBE2E /* gcleanup_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303ADF0D326C9600D840F2 /* gcleanup_unix.cpp */; };
EE89C07716A5B7E4006CBE2E /* gcounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AE20D326C9600D840F2 /* gcounter.cpp */; };
EE89C07816A5B803006CBE2E /* gdaemon_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AE50D326C9600D840F2 /* gdaemon_unix.cpp */; };
EE89C07916A5B807006CBE2E /* gdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AE70D326C9600D840F2 /* gdate.cpp */; };
EE89C07A16A5B80B006CBE2E /* gdatetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AE90D326C9600D840F2 /* gdatetime.cpp */; };
EE89C07B16A5B80D006CBE2E /* gdatetime_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AEB0D326C9600D840F2 /* gdatetime_unix.cpp */; };
EE89C07C16A5B81B006CBE2E /* gdirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AEF0D326C9600D840F2 /* gdirectory.cpp */; };
EE89C07D16A5B821006CBE2E /* gdirectory_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF10D326C9600D840F2 /* gdirectory_unix.cpp */; };
EE89C07E16A5B825006CBE2E /* gdirectory_unix_glob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF20D326C9600D840F2 /* gdirectory_unix_glob.cpp */; };
EE89C07F16A5B829006CBE2E /* gexception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF50D326C9600D840F2 /* gexception.cpp */; };
EE89C08016A5B82A006CBE2E /* gexecutable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF70D326C9600D840F2 /* gexecutable.cpp */; };
EE89C08116A5B82C006CBE2E /* gexecutable_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF90D326C9600D840F2 /* gexecutable_unix.cpp */; };
EE89C08216A5B82F006CBE2E /* gfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AFB0D326C9600D840F2 /* gfile.cpp */; };
EE89C08316A5B838006CBE2E /* gfile_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AFD0D326C9600D840F2 /* gfile_unix.cpp */; };
EE89C08416A5B83A006CBE2E /* gfs_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B000D326C9600D840F2 /* gfs_unix.cpp */; };
EE89C08516A5B83B006CBE2E /* ggetopt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B020D326C9600D840F2 /* ggetopt.cpp */; };
EE89C08616A5B83E006CBE2E /* ghostname_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B050D326C9600D840F2 /* ghostname_unix.cpp */; };
EE89C08716A5B848006CBE2E /* gidentity_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B090D326C9600D840F2 /* gidentity_unix.cpp */; };
EE89C08816A5B84C006CBE2E /* glog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B0C0D326C9600D840F2 /* glog.cpp */; };
EE89C08916A5B84D006CBE2E /* glogoutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B0E0D326C9600D840F2 /* glogoutput.cpp */; };
EE89C08A16A5B84F006CBE2E /* glogoutput_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B100D326C9600D840F2 /* glogoutput_unix.cpp */; };
EE89C08B16A5B854006CBE2E /* gpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B1A0D326C9600D840F2 /* gpath.cpp */; };
EE89C08C16A5B857006CBE2E /* gpidfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B1C0D326C9600D840F2 /* gpidfile.cpp */; };
EE89C08D16A5B858006CBE2E /* gprocess_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B1F0D326C9600D840F2 /* gprocess_unix.cpp */; };
EE89C08E16A5B85A006CBE2E /* groot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B210D326C9600D840F2 /* groot.cpp */; };
EE89C08F16A5B85F006CBE2E /* gslot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B260D326C9600D840F2 /* gslot.cpp */; };
EE89C09016A5B862006CBE2E /* gstr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B290D326C9600D840F2 /* gstr.cpp */; };
EE89C09116A5B867006CBE2E /* gtest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B2C0D326C9600D840F2 /* gtest.cpp */; };
EE89C09216A5B869006CBE2E /* gtime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B2E0D326C9600D840F2 /* gtime.cpp */; };
EE89C09316A5B86B006CBE2E /* gxtext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B300D326C9600D840F2 /* gxtext.cpp */; };
EE89C09416A5B86F006CBE2E /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B340D326C9600D840F2 /* md5.cpp */; };
EE89C09A16A5D19B006CBE2E /* gdescriptor_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B440D326C9600D840F2 /* gdescriptor_unix.cpp */; };
EE89C09C16A5D1A7006CBE2E /* gaddress_ipv4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B3A0D326C9600D840F2 /* gaddress_ipv4.cpp */; };
EE89C09D16A5D1A9006CBE2E /* gbufferedserverpeer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B3C0D326C9600D840F2 /* gbufferedserverpeer.cpp */; };
EE89C09E16A5D1AB006CBE2E /* gclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B3E0D326C9600D840F2 /* gclient.cpp */; };
EE89C09F16A5D1AE006CBE2E /* gconnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B410D326C9600D840F2 /* gconnection.cpp */; };
EE89C0A016A5D1B3006CBE2E /* geventhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B470D326C9600D840F2 /* geventhandler.cpp */; };
EE89C0A116A5D1B4006CBE2E /* geventloop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B490D326C9600D840F2 /* geventloop.cpp */; };
EE89C0A216A5D1B5006CBE2E /* geventloop_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B4B0D326C9600D840F2 /* geventloop_unix.cpp */; };
EE89C0A316A5D1B9006CBE2E /* gheapclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B4D0D326C9600D840F2 /* gheapclient.cpp */; };
EE89C0A416A5D1BA006CBE2E /* glinebuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B4F0D326C9600D840F2 /* glinebuffer.cpp */; };
EE89C0A516A5D1BC006CBE2E /* glocal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B510D326C9600D840F2 /* glocal.cpp */; };
EE89C0A616A5D1C4006CBE2E /* glocal_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B540D326C9600D840F2 /* glocal_unix.cpp */; };
EE89C0A716A5D1CA006CBE2E /* gmonitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B560D326C9600D840F2 /* gmonitor.cpp */; };
EE89C0A816A5D1CC006CBE2E /* gmultiserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B580D326C9600D840F2 /* gmultiserver.cpp */; };
EE89C0A916A5D1CF006CBE2E /* gresolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B5D0D326C9600D840F2 /* gresolver.cpp */; };
EE89C0AB16A5D1D4006CBE2E /* gresolver_ipv4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B610D326C9600D840F2 /* gresolver_ipv4.cpp */; };
EE89C0AC16A5D1D6006CBE2E /* gresolver_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B630D326C9600D840F2 /* gresolver_unix.cpp */; };
EE89C0AD16A5D1DD006CBE2E /* gresolverinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B650D326C9600D840F2 /* gresolverinfo.cpp */; };
EE89C0AE16A5D1DE006CBE2E /* gserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B670D326C9600D840F2 /* gserver.cpp */; };
EE89C0AF16A5D1E0006CBE2E /* gsimpleclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B690D326C9600D840F2 /* gsimpleclient.cpp */; };
EE89C0B016A5D1E2006CBE2E /* gsimpleclient_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B6B0D326C9600D840F2 /* gsimpleclient_unix.cpp */; };
EE89C0B116A5D1E7006CBE2E /* gsocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B6D0D326C9600D840F2 /* gsocket.cpp */; };
EE89C0B216A5D1ED006CBE2E /* gsocket_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B6F0D326C9600D840F2 /* gsocket_unix.cpp */; };
EE89C0B316A5D1EF006CBE2E /* gsocketprotocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B710D326C9600D840F2 /* gsocketprotocol.cpp */; };
EE89C0B416A5D1F0006CBE2E /* gtimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B730D326C9600D840F2 /* gtimer.cpp */; };
EE89C0B516A5D1F2006CBE2E /* gtimerlist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B750D326C9600D840F2 /* gtimerlist.cpp */; };
EE89C0BA16A5D306006CBE2E /* gdescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C0B916A5D306006CBE2E /* gdescriptor.cpp */; };
EE89C0BF16A5E642006CBE2E /* garg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AD90D326C9600D840F2 /* garg.cpp */; };
EE89C0C016A5E645006CBE2E /* garg_mac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06316A5B722006CBE2E /* garg_mac.cpp */; };
EE89C0C116A5E649006CBE2E /* gbase64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06516A5B7A4006CBE2E /* gbase64.cpp */; };
EE89C0C216A5E64C006CBE2E /* gcleanup_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303ADF0D326C9600D840F2 /* gcleanup_unix.cpp */; };
EE89C0C316A5E669006CBE2E /* gcounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AE20D326C9600D840F2 /* gcounter.cpp */; };
EE89C0C416A5E66B006CBE2E /* gdaemon_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AE50D326C9600D840F2 /* gdaemon_unix.cpp */; };
EE89C0C516A5E66C006CBE2E /* gdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AE70D326C9600D840F2 /* gdate.cpp */; };
EE89C0C616A5E66E006CBE2E /* gdatetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AE90D326C9600D840F2 /* gdatetime.cpp */; };
EE89C0C716A5E670006CBE2E /* gdatetime_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AEB0D326C9600D840F2 /* gdatetime_unix.cpp */; };
EE89C0C816A5E673006CBE2E /* gdirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AEF0D326C9600D840F2 /* gdirectory.cpp */; };
EE89C0C916A5E675006CBE2E /* gdirectory_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF10D326C9600D840F2 /* gdirectory_unix.cpp */; };
EE89C0CA16A5E677006CBE2E /* gdirectory_unix_glob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF20D326C9600D840F2 /* gdirectory_unix_glob.cpp */; };
EE89C0CB16A5E67B006CBE2E /* gexception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF50D326C9600D840F2 /* gexception.cpp */; };
EE89C0CC16A5E67D006CBE2E /* gexecutable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF70D326C9600D840F2 /* gexecutable.cpp */; };
EE89C0CD16A5E67E006CBE2E /* gexecutable_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AF90D326C9600D840F2 /* gexecutable_unix.cpp */; };
EE89C0CE16A5E685006CBE2E /* gfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AFB0D326C9600D840F2 /* gfile.cpp */; };
EE89C0CF16A5E687006CBE2E /* gfile_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AFD0D326C9600D840F2 /* gfile_unix.cpp */; };
EE89C0D016A5E689006CBE2E /* gfs_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B000D326C9600D840F2 /* gfs_unix.cpp */; };
EE89C0D116A5E68A006CBE2E /* ggetopt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B020D326C9600D840F2 /* ggetopt.cpp */; };
EE89C0D216A5E68D006CBE2E /* ghostname_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B050D326C9600D840F2 /* ghostname_unix.cpp */; };
EE89C0D316A5E68F006CBE2E /* gidentity_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B090D326C9600D840F2 /* gidentity_unix.cpp */; };
EE89C0D416A5E693006CBE2E /* glog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B0C0D326C9600D840F2 /* glog.cpp */; };
EE89C0D516A5E695006CBE2E /* glogoutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B0E0D326C9600D840F2 /* glogoutput.cpp */; };
EE89C0D616A5E696006CBE2E /* glogoutput_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B100D326C9600D840F2 /* glogoutput_unix.cpp */; };
EE89C0D716A5E698006CBE2E /* gmd5_native.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B130D326C9600D840F2 /* gmd5_native.cpp */; };
EE89C0D816A5E6A0006CBE2E /* gnewprocess_unix_exec_enabled.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B170D326C9600D840F2 /* gnewprocess_unix_exec_enabled.cpp */; };
EE89C0DA16A5E6A6006CBE2E /* gpam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06A16A5B7A4006CBE2E /* gpam.cpp */; };
EE89C0DB16A5E6A7006CBE2E /* gpam_linux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06C16A5B7A4006CBE2E /* gpam_linux.cpp */; settings = {COMPILER_FLAGS = "-I/usr/include/pam"; }; };
EE89C0DC16A5E6AC006CBE2E /* gpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B1A0D326C9600D840F2 /* gpath.cpp */; };
EE89C0DD16A5E6AE006CBE2E /* gpidfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B1C0D326C9600D840F2 /* gpidfile.cpp */; };
EE89C0DE16A5E6AF006CBE2E /* gprocess_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B1F0D326C9600D840F2 /* gprocess_unix.cpp */; };
EE89C0DF16A5E6B4006CBE2E /* groot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B210D326C9600D840F2 /* groot.cpp */; };
EE89C0E016A5E6B5006CBE2E /* gslot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B260D326C9600D840F2 /* gslot.cpp */; };
EE89C0E116A5E6B6006CBE2E /* gstr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B290D326C9600D840F2 /* gstr.cpp */; };
EE89C0E216A5E6B7006CBE2E /* gstrings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C06E16A5B7A4006CBE2E /* gstrings.cpp */; };
EE89C0E316A5E6B8006CBE2E /* gtest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B2C0D326C9600D840F2 /* gtest.cpp */; };
EE89C0E416A5E6B9006CBE2E /* gtime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B2E0D326C9600D840F2 /* gtime.cpp */; };
EE89C0E516A5E6BA006CBE2E /* gxtext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B300D326C9600D840F2 /* gxtext.cpp */; };
EE89C0E616A5E6BF006CBE2E /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B340D326C9600D840F2 /* md5.cpp */; };
EE89C0E716A5E6C9006CBE2E /* gaddress_ipv4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B3A0D326C9600D840F2 /* gaddress_ipv4.cpp */; };
EE89C0E816A5E6CA006CBE2E /* gbufferedserverpeer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B3C0D326C9600D840F2 /* gbufferedserverpeer.cpp */; };
EE89C0E916A5E6CC006CBE2E /* gclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B3E0D326C9600D840F2 /* gclient.cpp */; };
EE89C0EA16A5E6CD006CBE2E /* gconnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B410D326C9600D840F2 /* gconnection.cpp */; };
EE89C0EB16A5E6CE006CBE2E /* gdescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE89C0B916A5D306006CBE2E /* gdescriptor.cpp */; };
EE89C0EC16A5E6D0006CBE2E /* gdescriptor_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B440D326C9600D840F2 /* gdescriptor_unix.cpp */; };
EE89C0ED16A5E6D1006CBE2E /* geventhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B470D326C9600D840F2 /* geventhandler.cpp */; };
EE89C0EE16A5E6D2006CBE2E /* geventloop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B490D326C9600D840F2 /* geventloop.cpp */; };
EE89C0EF16A5E6D5006CBE2E /* geventloop_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B4B0D326C9600D840F2 /* geventloop_unix.cpp */; };
EE89C0F016A5E6D6006CBE2E /* gheapclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B4D0D326C9600D840F2 /* gheapclient.cpp */; };
EE89C0F116A5E6D7006CBE2E /* glinebuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B4F0D326C9600D840F2 /* glinebuffer.cpp */; };
EE89C0F216A5E6D9006CBE2E /* glocal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B510D326C9600D840F2 /* glocal.cpp */; };
EE89C0F316A5E6DB006CBE2E /* glocal_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B540D326C9600D840F2 /* glocal_unix.cpp */; };
EE89C0F416A5E6DE006CBE2E /* gmonitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B560D326C9600D840F2 /* gmonitor.cpp */; };
EE89C0F516A5E6DF006CBE2E /* gmultiserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B580D326C9600D840F2 /* gmultiserver.cpp */; };
EE89C0F616A5E6E0006CBE2E /* gresolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B5D0D326C9600D840F2 /* gresolver.cpp */; };
EE89C0F716A5E6E7006CBE2E /* gresolver_ipv4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B610D326C9600D840F2 /* gresolver_ipv4.cpp */; };
EE89C0F816A5E6E9006CBE2E /* gresolver_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B630D326C9600D840F2 /* gresolver_unix.cpp */; };
EE89C0F916A5E6EB006CBE2E /* gresolverinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B650D326C9600D840F2 /* gresolverinfo.cpp */; };
EE89C0FA16A5E6EC006CBE2E /* gserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B670D326C9600D840F2 /* gserver.cpp */; };
EE89C0FB16A5E6ED006CBE2E /* gsimpleclient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B690D326C9600D840F2 /* gsimpleclient.cpp */; };
EE89C0FC16A5E6F1006CBE2E /* gsimpleclient_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B6B0D326C9600D840F2 /* gsimpleclient_unix.cpp */; };
EE89C0FD16A5E6F2006CBE2E /* gsocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B6D0D326C9600D840F2 /* gsocket.cpp */; };
EE89C0FE16A5E6F3006CBE2E /* gsocket_unix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B6F0D326C9600D840F2 /* gsocket_unix.cpp */; };
EE89C0FF16A5E6F4006CBE2E /* gsocketprotocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B710D326C9600D840F2 /* gsocketprotocol.cpp */; };
EE89C10016A5E6F5006CBE2E /* gtimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B730D326C9600D840F2 /* gtimer.cpp */; };
EE89C10116A5E6F8006CBE2E /* gtimerlist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303B750D326C9600D840F2 /* gtimerlist.cpp */; };
EE9918420D91670200FB06D5 /* filter_copy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C130D326C9600D840F2 /* filter_copy.cpp */; }; EE9918420D91670200FB06D5 /* filter_copy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C130D326C9600D840F2 /* filter_copy.cpp */; };
EE9918440D91673900FB06D5 /* filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C100D326C9600D840F2 /* filter.cpp */; }; EE9918440D91673900FB06D5 /* filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C100D326C9600D840F2 /* filter.cpp */; };
EE9918460D91675100FB06D5 /* legal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C190D326C9600D840F2 /* legal.cpp */; }; EE9918460D91675100FB06D5 /* legal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C190D326C9600D840F2 /* legal.cpp */; };
EE99184F0D91693000FB06D5 /* empty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AD50D326C9600D840F2 /* empty.cpp */; };
EE99185F0D91695000FB06D5 /* empty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AD50D326C9600D840F2 /* empty.cpp */; };
EE99186F0D91697900FB06D5 /* empty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AD50D326C9600D840F2 /* empty.cpp */; };
EE99187F0D91698A00FB06D5 /* empty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303AD50D326C9600D840F2 /* empty.cpp */; };
EE99188D0D9169FE00FB06D5 /* start.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE99188B0D9169F700FB06D5 /* start.cpp */; }; EE99188D0D9169FE00FB06D5 /* start.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE99188B0D9169F700FB06D5 /* start.cpp */; };
EE99188F0D916A3600FB06D5 /* passwd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C250D326C9700D840F2 /* passwd.cpp */; }; EE99188F0D916A3600FB06D5 /* passwd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE303C250D326C9700D840F2 /* passwd.cpp */; };
EE9918900D916A4E00FB06D5 /* poke.c in Sources */ = {isa = PBXBuildFile; fileRef = EE303C270D326C9700D840F2 /* poke.c */; }; EE9918900D916A4E00FB06D5 /* poke.c in Sources */ = {isa = PBXBuildFile; fileRef = EE303C270D326C9700D840F2 /* poke.c */; };
@ -333,10 +463,10 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
8DD76F6C0486A84900D96B5E /* emailrelay */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = emailrelay; sourceTree = BUILT_PRODUCTS_DIR; }; 8DD76F6C0486A84900D96B5E /* emailrelay */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = emailrelay; sourceTree = BUILT_PRODUCTS_DIR; };
EE303AD30D326C9600D840F2 /* emailrelay.dsw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = emailrelay.dsw; sourceTree = "<group>"; }; EE1753AE16B850C600575457 /* gconnectionlookup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gconnectionlookup.h; sourceTree = "<group>"; };
EE303AD50D326C9600D840F2 /* empty.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = empty.cpp; sourceTree = "<group>"; }; EE1753AF16B850C600575457 /* gconnectionlookup_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gconnectionlookup_unix.cpp; sourceTree = "<group>"; };
EE303AD60D326C9600D840F2 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; }; EE1753BA16B852AD00575457 /* genvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = genvironment.h; sourceTree = "<group>"; };
EE303AD70D326C9600D840F2 /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; }; EE1753BB16B852AD00575457 /* genvironment_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = genvironment_unix.cpp; sourceTree = "<group>"; };
EE303AD90D326C9600D840F2 /* garg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = garg.cpp; sourceTree = "<group>"; }; EE303AD90D326C9600D840F2 /* garg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = garg.cpp; sourceTree = "<group>"; };
EE303ADA0D326C9600D840F2 /* garg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = garg.h; sourceTree = "<group>"; }; EE303ADA0D326C9600D840F2 /* garg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = garg.h; sourceTree = "<group>"; };
EE303ADB0D326C9600D840F2 /* garg_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = garg_unix.cpp; sourceTree = "<group>"; }; EE303ADB0D326C9600D840F2 /* garg_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = garg_unix.cpp; sourceTree = "<group>"; };
@ -345,7 +475,6 @@
EE303ADE0D326C9600D840F2 /* gcleanup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gcleanup.h; sourceTree = "<group>"; }; EE303ADE0D326C9600D840F2 /* gcleanup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gcleanup.h; sourceTree = "<group>"; };
EE303ADF0D326C9600D840F2 /* gcleanup_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gcleanup_unix.cpp; sourceTree = "<group>"; }; EE303ADF0D326C9600D840F2 /* gcleanup_unix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gcleanup_unix.cpp; sourceTree = "<group>"; };
EE303AE00D326C9600D840F2 /* gcleanup_win32.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gcleanup_win32.cpp; sourceTree = "<group>"; }; EE303AE00D326C9600D840F2 /* gcleanup_win32.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gcleanup_win32.cpp; sourceTree = "<group>"; };
EE303AE10D326C9600D840F2 /* gconvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gconvert.h; sourceTree = "<group>"; };
EE303AE20D326C9600D840F2 /* gcounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gcounter.cpp; sourceTree = "<group>"; }; EE303AE20D326C9600D840F2 /* gcounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gcounter.cpp; sourceTree = "<group>"; };
EE303AE30D326C9600D840F2 /* gcounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gcounter.h; sourceTree = "<group>"; }; EE303AE30D326C9600D840F2 /* gcounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gcounter.h; sourceTree = "<group>"; };
EE303AE40D326C9600D840F2 /* gdaemon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gdaemon.h; sourceTree = "<group>"; }; EE303AE40D326C9600D840F2 /* gdaemon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gdaemon.h; sourceTree = "<group>"; };
@ -466,7 +595,6 @@
EE303B580D326C9600D840F2 /* gmultiserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gmultiserver.cpp; sourceTree = "<group>"; }; EE303B580D326C9600D840F2 /* gmultiserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gmultiserver.cpp; sourceTree = "<group>"; };
EE303B590D326C9600D840F2 /* gmultiserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gmultiserver.h; sourceTree = "<group>"; }; EE303B590D326C9600D840F2 /* gmultiserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gmultiserver.h; sourceTree = "<group>"; };
EE303B5A0D326C9600D840F2 /* gnet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gnet.h; sourceTree = "<group>"; }; EE303B5A0D326C9600D840F2 /* gnet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gnet.h; sourceTree = "<group>"; };
EE303B5B0D326C9600D840F2 /* grequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = grequest.cpp; sourceTree = "<group>"; };
EE303B5C0D326C9600D840F2 /* grequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = grequest.h; sourceTree = "<group>"; }; EE303B5C0D326C9600D840F2 /* grequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = grequest.h; sourceTree = "<group>"; };
EE303B5D0D326C9600D840F2 /* gresolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gresolver.cpp; sourceTree = "<group>"; }; EE303B5D0D326C9600D840F2 /* gresolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gresolver.cpp; sourceTree = "<group>"; };
EE303B5E0D326C9600D840F2 /* gresolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gresolver.h; sourceTree = "<group>"; }; EE303B5E0D326C9600D840F2 /* gresolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gresolver.h; sourceTree = "<group>"; };
@ -516,8 +644,6 @@
EE303B8B0D326C9600D840F2 /* mingw.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = mingw.mak; sourceTree = "<group>"; }; EE303B8B0D326C9600D840F2 /* mingw.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = mingw.mak; sourceTree = "<group>"; };
EE303B8D0D326C9600D840F2 /* gadminserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gadminserver.cpp; sourceTree = "<group>"; }; EE303B8D0D326C9600D840F2 /* gadminserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gadminserver.cpp; sourceTree = "<group>"; };
EE303B8E0D326C9600D840F2 /* gadminserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gadminserver.h; sourceTree = "<group>"; }; EE303B8E0D326C9600D840F2 /* gadminserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gadminserver.h; sourceTree = "<group>"; };
EE303B8F0D326C9600D840F2 /* gbase64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gbase64.cpp; sourceTree = "<group>"; };
EE303B900D326C9600D840F2 /* gbase64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gbase64.h; sourceTree = "<group>"; };
EE303B910D326C9600D840F2 /* gclientprotocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gclientprotocol.cpp; sourceTree = "<group>"; }; EE303B910D326C9600D840F2 /* gclientprotocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gclientprotocol.cpp; sourceTree = "<group>"; };
EE303B920D326C9600D840F2 /* gclientprotocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gclientprotocol.h; sourceTree = "<group>"; }; EE303B920D326C9600D840F2 /* gclientprotocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gclientprotocol.h; sourceTree = "<group>"; };
EE303B930D326C9600D840F2 /* gexecutableprocessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gexecutableprocessor.cpp; sourceTree = "<group>"; }; EE303B930D326C9600D840F2 /* gexecutableprocessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gexecutableprocessor.cpp; sourceTree = "<group>"; };
@ -557,13 +683,6 @@
EE303BB50D326C9600D840F2 /* gprotocolmessagestore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gprotocolmessagestore.h; sourceTree = "<group>"; }; EE303BB50D326C9600D840F2 /* gprotocolmessagestore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gprotocolmessagestore.h; sourceTree = "<group>"; };
EE303BB60D326C9600D840F2 /* grequestclient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = grequestclient.cpp; sourceTree = "<group>"; }; EE303BB60D326C9600D840F2 /* grequestclient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = grequestclient.cpp; sourceTree = "<group>"; };
EE303BB70D326C9600D840F2 /* grequestclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = grequestclient.h; sourceTree = "<group>"; }; EE303BB70D326C9600D840F2 /* grequestclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = grequestclient.h; sourceTree = "<group>"; };
EE303BB80D326C9600D840F2 /* gsasl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gsasl.h; sourceTree = "<group>"; };
EE303BB90D326C9600D840F2 /* gsasl_gnu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gsasl_gnu.cpp; sourceTree = "<group>"; };
EE303BBA0D326C9600D840F2 /* gsasl_native.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gsasl_native.cpp; sourceTree = "<group>"; };
EE303BBB0D326C9600D840F2 /* gsasl_none.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gsasl_none.cpp; sourceTree = "<group>"; };
EE303BBC0D326C9600D840F2 /* gsecrets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gsecrets.h; sourceTree = "<group>"; };
EE303BBD0D326C9600D840F2 /* gsecrets_full.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gsecrets_full.cpp; sourceTree = "<group>"; };
EE303BBE0D326C9600D840F2 /* gsecrets_none.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gsecrets_none.cpp; sourceTree = "<group>"; };
EE303BBF0D326C9600D840F2 /* gserverprotocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gserverprotocol.cpp; sourceTree = "<group>"; }; EE303BBF0D326C9600D840F2 /* gserverprotocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gserverprotocol.cpp; sourceTree = "<group>"; };
EE303BC00D326C9600D840F2 /* gserverprotocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gserverprotocol.h; sourceTree = "<group>"; }; EE303BC00D326C9600D840F2 /* gserverprotocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gserverprotocol.h; sourceTree = "<group>"; };
EE303BC10D326C9600D840F2 /* gsmtp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gsmtp.h; sourceTree = "<group>"; }; EE303BC10D326C9600D840F2 /* gsmtp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gsmtp.h; sourceTree = "<group>"; };
@ -595,7 +714,6 @@
EE303BDC0D326C9600D840F2 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; }; EE303BDC0D326C9600D840F2 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
EE303BDD0D326C9600D840F2 /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; }; EE303BDD0D326C9600D840F2 /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; };
EE303BDE0D326C9600D840F2 /* mingw.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = mingw.mak; sourceTree = "<group>"; }; EE303BDE0D326C9600D840F2 /* mingw.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = mingw.mak; sourceTree = "<group>"; };
EE303BE00D326C9600D840F2 /* boot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boot.cpp; sourceTree = "<group>"; };
EE303BE10D326C9600D840F2 /* boot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = boot.h; sourceTree = "<group>"; }; EE303BE10D326C9600D840F2 /* boot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = boot.h; sourceTree = "<group>"; };
EE303BE20D326C9600D840F2 /* dir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dir.cpp; sourceTree = "<group>"; }; EE303BE20D326C9600D840F2 /* dir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dir.cpp; sourceTree = "<group>"; };
EE303BE30D326C9600D840F2 /* dir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dir.h; sourceTree = "<group>"; }; EE303BE30D326C9600D840F2 /* dir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dir.h; sourceTree = "<group>"; };
@ -605,19 +723,16 @@
EE303BE70D326C9600D840F2 /* gcominit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gcominit.h; sourceTree = "<group>"; }; EE303BE70D326C9600D840F2 /* gcominit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gcominit.h; sourceTree = "<group>"; };
EE303BE80D326C9600D840F2 /* gdialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gdialog.cpp; sourceTree = "<group>"; }; EE303BE80D326C9600D840F2 /* gdialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gdialog.cpp; sourceTree = "<group>"; };
EE303BE90D326C9600D840F2 /* gdialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gdialog.h; sourceTree = "<group>"; }; EE303BE90D326C9600D840F2 /* gdialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gdialog.h; sourceTree = "<group>"; };
EE303BEA0D326C9600D840F2 /* glink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glink.cpp; sourceTree = "<group>"; };
EE303BEB0D326C9600D840F2 /* glink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glink.h; sourceTree = "<group>"; }; EE303BEB0D326C9600D840F2 /* glink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glink.h; sourceTree = "<group>"; };
EE303BEC0D326C9600D840F2 /* gpage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpage.cpp; sourceTree = "<group>"; }; EE303BEC0D326C9600D840F2 /* gpage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpage.cpp; sourceTree = "<group>"; };
EE303BED0D326C9600D840F2 /* gpage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gpage.h; sourceTree = "<group>"; }; EE303BED0D326C9600D840F2 /* gpage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gpage.h; sourceTree = "<group>"; };
EE303BEE0D326C9600D840F2 /* guimain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = guimain.cpp; sourceTree = "<group>"; }; EE303BEE0D326C9600D840F2 /* guimain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = guimain.cpp; sourceTree = "<group>"; };
EE303BEF0D326C9600D840F2 /* gunpack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gunpack.cpp; sourceTree = "<group>"; }; EE303BEF0D326C9600D840F2 /* gunpack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gunpack.cpp; sourceTree = "<group>"; };
EE303BF00D326C9600D840F2 /* gunpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gunpack.h; sourceTree = "<group>"; }; EE303BF00D326C9600D840F2 /* gunpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gunpack.h; sourceTree = "<group>"; };
EE303BF10D326C9600D840F2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
EE303BF20D326C9600D840F2 /* installer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = installer.cpp; sourceTree = "<group>"; }; EE303BF20D326C9600D840F2 /* installer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = installer.cpp; sourceTree = "<group>"; };
EE303BF30D326C9600D840F2 /* installer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = installer.h; sourceTree = "<group>"; }; EE303BF30D326C9600D840F2 /* installer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = installer.h; sourceTree = "<group>"; };
EE303BF40D326C9600D840F2 /* legal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legal.cpp; sourceTree = "<group>"; }; EE303BF40D326C9600D840F2 /* legal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legal.cpp; sourceTree = "<group>"; };
EE303BF50D326C9600D840F2 /* legal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legal.h; sourceTree = "<group>"; }; EE303BF50D326C9600D840F2 /* legal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legal.h; sourceTree = "<group>"; };
EE303BF60D326C9600D840F2 /* mac.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = mac.mak; sourceTree = "<group>"; };
EE303BF70D326C9600D840F2 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; }; EE303BF70D326C9600D840F2 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
EE303BF80D326C9600D840F2 /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; }; EE303BF80D326C9600D840F2 /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; };
EE303BF90D326C9600D840F2 /* mingw.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = mingw.mak; sourceTree = "<group>"; }; EE303BF90D326C9600D840F2 /* mingw.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = mingw.mak; sourceTree = "<group>"; };
@ -635,22 +750,16 @@
EE303C060D326C9600D840F2 /* commandline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = commandline.h; sourceTree = "<group>"; }; EE303C060D326C9600D840F2 /* commandline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = commandline.h; sourceTree = "<group>"; };
EE303C070D326C9600D840F2 /* commandline_full.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = commandline_full.cpp; sourceTree = "<group>"; }; EE303C070D326C9600D840F2 /* commandline_full.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = commandline_full.cpp; sourceTree = "<group>"; };
EE303C080D326C9600D840F2 /* commandline_simple.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = commandline_simple.cpp; sourceTree = "<group>"; }; EE303C080D326C9600D840F2 /* commandline_simple.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = commandline_simple.cpp; sourceTree = "<group>"; };
EE303C090D326C9600D840F2 /* common.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = common.dsp; sourceTree = "<group>"; };
EE303C0A0D326C9600D840F2 /* configuration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = configuration.cpp; sourceTree = "<group>"; }; EE303C0A0D326C9600D840F2 /* configuration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = configuration.cpp; sourceTree = "<group>"; };
EE303C0B0D326C9600D840F2 /* configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = configuration.h; sourceTree = "<group>"; }; EE303C0B0D326C9600D840F2 /* configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = configuration.h; sourceTree = "<group>"; };
EE303C0C0D326C9600D840F2 /* doxygen.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = doxygen.cfg; sourceTree = "<group>"; };
EE303C0D0D326C9600D840F2 /* doxygen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = doxygen.h; sourceTree = "<group>"; }; EE303C0D0D326C9600D840F2 /* doxygen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = doxygen.h; sourceTree = "<group>"; };
EE303C0E0D326C9600D840F2 /* emailrelay.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = emailrelay.dsp; sourceTree = "<group>"; };
EE303C0F0D326C9600D840F2 /* emailrelay.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = emailrelay.rc; sourceTree = "<group>"; }; EE303C0F0D326C9600D840F2 /* emailrelay.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = emailrelay.rc; sourceTree = "<group>"; };
EE303C100D326C9600D840F2 /* filter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = filter.cpp; sourceTree = "<group>"; }; EE303C100D326C9600D840F2 /* filter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = filter.cpp; sourceTree = "<group>"; };
EE303C110D326C9600D840F2 /* filter.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = filter.dsp; sourceTree = "<group>"; };
EE303C120D326C9600D840F2 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter.h; sourceTree = "<group>"; }; EE303C120D326C9600D840F2 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter.h; sourceTree = "<group>"; };
EE303C130D326C9600D840F2 /* filter_copy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = filter_copy.cpp; sourceTree = "<group>"; }; EE303C130D326C9600D840F2 /* filter_copy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = filter_copy.cpp; sourceTree = "<group>"; };
EE303C140D326C9600D840F2 /* icon-32.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = "icon-32.ico"; sourceTree = "<group>"; };
EE303C150D326C9600D840F2 /* icon2.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = icon2.ico; sourceTree = "<group>"; }; EE303C150D326C9600D840F2 /* icon2.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = icon2.ico; sourceTree = "<group>"; };
EE303C160D326C9600D840F2 /* icon3.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = icon3.ico; sourceTree = "<group>"; }; EE303C160D326C9600D840F2 /* icon3.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = icon3.ico; sourceTree = "<group>"; };
EE303C170D326C9600D840F2 /* icon4.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = icon4.ico; sourceTree = "<group>"; }; EE303C170D326C9600D840F2 /* icon4.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = icon4.ico; sourceTree = "<group>"; };
EE303C180D326C9600D840F2 /* icon5.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = icon5.ico; sourceTree = "<group>"; };
EE303C190D326C9600D840F2 /* legal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legal.cpp; sourceTree = "<group>"; }; EE303C190D326C9600D840F2 /* legal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legal.cpp; sourceTree = "<group>"; };
EE303C1A0D326C9600D840F2 /* legal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legal.h; sourceTree = "<group>"; }; EE303C1A0D326C9600D840F2 /* legal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legal.h; sourceTree = "<group>"; };
EE303C1B0D326C9600D840F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; }; EE303C1B0D326C9600D840F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
@ -664,20 +773,16 @@
EE303C230D326C9700D840F2 /* output.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = output.cpp; sourceTree = "<group>"; }; EE303C230D326C9700D840F2 /* output.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = output.cpp; sourceTree = "<group>"; };
EE303C240D326C9700D840F2 /* output.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = output.h; sourceTree = "<group>"; }; EE303C240D326C9700D840F2 /* output.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = output.h; sourceTree = "<group>"; };
EE303C250D326C9700D840F2 /* passwd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = passwd.cpp; sourceTree = "<group>"; }; EE303C250D326C9700D840F2 /* passwd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = passwd.cpp; sourceTree = "<group>"; };
EE303C260D326C9700D840F2 /* passwd.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = passwd.dsp; sourceTree = "<group>"; };
EE303C270D326C9700D840F2 /* poke.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = poke.c; sourceTree = "<group>"; }; EE303C270D326C9700D840F2 /* poke.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = poke.c; sourceTree = "<group>"; };
EE303C280D326C9700D840F2 /* poke.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = poke.dsp; sourceTree = "<group>"; };
EE303C290D326C9700D840F2 /* resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = "<group>"; }; EE303C290D326C9700D840F2 /* resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = "<group>"; };
EE303C2A0D326C9700D840F2 /* run.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = run.cpp; sourceTree = "<group>"; }; EE303C2A0D326C9700D840F2 /* run.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = run.cpp; sourceTree = "<group>"; };
EE303C2B0D326C9700D840F2 /* run.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = run.h; sourceTree = "<group>"; }; EE303C2B0D326C9700D840F2 /* run.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = run.h; sourceTree = "<group>"; };
EE303C2C0D326C9700D840F2 /* service.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = service.dsp; sourceTree = "<group>"; };
EE303C2D0D326C9700D840F2 /* service_install.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = service_install.cpp; sourceTree = "<group>"; }; EE303C2D0D326C9700D840F2 /* service_install.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = service_install.cpp; sourceTree = "<group>"; };
EE303C2E0D326C9700D840F2 /* service_install.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = service_install.h; sourceTree = "<group>"; }; EE303C2E0D326C9700D840F2 /* service_install.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = service_install.h; sourceTree = "<group>"; };
EE303C2F0D326C9700D840F2 /* service_remove.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = service_remove.cpp; sourceTree = "<group>"; }; EE303C2F0D326C9700D840F2 /* service_remove.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = service_remove.cpp; sourceTree = "<group>"; };
EE303C300D326C9700D840F2 /* service_remove.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = service_remove.h; sourceTree = "<group>"; }; EE303C300D326C9700D840F2 /* service_remove.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = service_remove.h; sourceTree = "<group>"; };
EE303C310D326C9700D840F2 /* service_wrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = service_wrapper.cpp; sourceTree = "<group>"; }; EE303C310D326C9700D840F2 /* service_wrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = service_wrapper.cpp; sourceTree = "<group>"; };
EE303C320D326C9700D840F2 /* submit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = submit.cpp; sourceTree = "<group>"; }; EE303C320D326C9700D840F2 /* submit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = submit.cpp; sourceTree = "<group>"; };
EE303C330D326C9700D840F2 /* submit.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = submit.dsp; sourceTree = "<group>"; };
EE303C340D326C9700D840F2 /* winapp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winapp.cpp; sourceTree = "<group>"; }; EE303C340D326C9700D840F2 /* winapp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winapp.cpp; sourceTree = "<group>"; };
EE303C350D326C9700D840F2 /* winapp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = winapp.h; sourceTree = "<group>"; }; EE303C350D326C9700D840F2 /* winapp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = winapp.h; sourceTree = "<group>"; };
EE303C360D326C9700D840F2 /* winform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winform.cpp; sourceTree = "<group>"; }; EE303C360D326C9700D840F2 /* winform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winform.cpp; sourceTree = "<group>"; };
@ -685,10 +790,6 @@
EE303C380D326C9700D840F2 /* winmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winmain.cpp; sourceTree = "<group>"; }; EE303C380D326C9700D840F2 /* winmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winmain.cpp; sourceTree = "<group>"; };
EE303C390D326C9700D840F2 /* winmenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winmenu.cpp; sourceTree = "<group>"; }; EE303C390D326C9700D840F2 /* winmenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winmenu.cpp; sourceTree = "<group>"; };
EE303C3A0D326C9700D840F2 /* winmenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = winmenu.h; sourceTree = "<group>"; }; EE303C3A0D326C9700D840F2 /* winmenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = winmenu.h; sourceTree = "<group>"; };
EE303C3B0D326C9700D840F2 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
EE303C3C0D326C9700D840F2 /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; };
EE303C3D0D326C9700D840F2 /* mingw-common.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = "mingw-common.mak"; sourceTree = "<group>"; };
EE303C3E0D326C9700D840F2 /* mingw.mak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = mingw.mak; sourceTree = "<group>"; };
EE303C400D326C9700D840F2 /* gappbase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gappbase.cpp; sourceTree = "<group>"; }; EE303C400D326C9700D840F2 /* gappbase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gappbase.cpp; sourceTree = "<group>"; };
EE303C410D326C9700D840F2 /* gappbase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gappbase.h; sourceTree = "<group>"; }; EE303C410D326C9700D840F2 /* gappbase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gappbase.h; sourceTree = "<group>"; };
EE303C420D326C9700D840F2 /* gappinst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gappinst.cpp; sourceTree = "<group>"; }; EE303C420D326C9700D840F2 /* gappinst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gappinst.cpp; sourceTree = "<group>"; };
@ -723,38 +824,55 @@
EE303E120D329BAA00D840F2 /* libgpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgpop.a; sourceTree = BUILT_PRODUCTS_DIR; }; EE303E120D329BAA00D840F2 /* libgpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgpop.a; sourceTree = BUILT_PRODUCTS_DIR; };
EE303E230D329BFF00D840F2 /* libgsmtp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgsmtp.a; sourceTree = BUILT_PRODUCTS_DIR; }; EE303E230D329BFF00D840F2 /* libgsmtp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgsmtp.a; sourceTree = BUILT_PRODUCTS_DIR; };
EE303E4F0D329D8F00D840F2 /* libgssl.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgssl.a; sourceTree = BUILT_PRODUCTS_DIR; }; EE303E4F0D329D8F00D840F2 /* libgssl.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgssl.a; sourceTree = BUILT_PRODUCTS_DIR; };
EE303EA90D366E5500D840F2 /* auth.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = auth.png; sourceTree = "<group>"; };
EE303EAA0D366E5500D840F2 /* developer.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = developer.txt; sourceTree = "<group>"; }; EE303EAA0D366E5500D840F2 /* developer.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = developer.txt; sourceTree = "<group>"; };
EE303EAB0D366E5500D840F2 /* doxygen_header.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = doxygen_header.html; sourceTree = "<group>"; };
EE303EAC0D366E5500D840F2 /* doxygen_missing.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = doxygen_missing.html; sourceTree = "<group>"; };
EE303EAD0D366E5500D840F2 /* emailrelay-filter-copy.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = "emailrelay-filter-copy.1"; sourceTree = "<group>"; }; EE303EAD0D366E5500D840F2 /* emailrelay-filter-copy.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = "emailrelay-filter-copy.1"; sourceTree = "<group>"; };
EE303EAE0D366E5500D840F2 /* emailrelay-man.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "emailrelay-man.html"; sourceTree = "<group>"; }; EE303EAE0D366E5500D840F2 /* emailrelay-man.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "emailrelay-man.html"; sourceTree = "<group>"; };
EE303EAF0D366E5500D840F2 /* emailrelay-passwd.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = "emailrelay-passwd.1"; sourceTree = "<group>"; }; EE303EAF0D366E5500D840F2 /* emailrelay-passwd.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = "emailrelay-passwd.1"; sourceTree = "<group>"; };
EE303EB00D366E5500D840F2 /* emailrelay-poke.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = "emailrelay-poke.1"; sourceTree = "<group>"; }; EE303EB00D366E5500D840F2 /* emailrelay-poke.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = "emailrelay-poke.1"; sourceTree = "<group>"; };
EE303EB10D366E5500D840F2 /* emailrelay-submit.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = "emailrelay-submit.1"; sourceTree = "<group>"; }; EE303EB10D366E5500D840F2 /* emailrelay-submit.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = "emailrelay-submit.1"; sourceTree = "<group>"; };
EE303EB20D366E5500D840F2 /* emailrelay.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = emailrelay.1; sourceTree = "<group>"; }; EE303EB20D366E5500D840F2 /* emailrelay.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = emailrelay.1; sourceTree = "<group>"; };
EE303EB30D366E5500D840F2 /* emailrelay.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = emailrelay.css; sourceTree = "<group>"; };
EE303EB40D366E5500D840F2 /* gnet-classes.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "gnet-classes.png"; sourceTree = "<group>"; };
EE303EB50D366E5500D840F2 /* gnet-client.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "gnet-client.png"; sourceTree = "<group>"; };
EE303EB60D366E5500D840F2 /* gsmtp-classes.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "gsmtp-classes.png"; sourceTree = "<group>"; };
EE303EB70D366E5500D840F2 /* gsmtp-serverprotocol.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "gsmtp-serverprotocol.png"; sourceTree = "<group>"; };
EE303EB80D366E5500D840F2 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = "<group>"; }; EE303EB80D366E5500D840F2 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = "<group>"; };
EE303EB90D366E5500D840F2 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; }; EE303EB90D366E5500D840F2 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
EE303EBA0D366E5500D840F2 /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; }; EE303EBA0D366E5500D840F2 /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; };
EE303EBB0D366E5500D840F2 /* reference.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = reference.txt; sourceTree = "<group>"; }; EE303EBB0D366E5500D840F2 /* reference.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = reference.txt; sourceTree = "<group>"; };
EE303EBC0D366E5500D840F2 /* sequence-3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sequence-3.png"; sourceTree = "<group>"; };
EE303EBD0D366E5500D840F2 /* userguide.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = userguide.txt; sourceTree = "<group>"; }; EE303EBD0D366E5500D840F2 /* userguide.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = userguide.txt; sourceTree = "<group>"; };
EE303EBE0D366E5500D840F2 /* windows.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = windows.txt; sourceTree = "<group>"; }; EE303EBE0D366E5500D840F2 /* windows.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = windows.txt; sourceTree = "<group>"; };
EE89C03C16A5B5EB006CBE2E /* gauth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gauth.h; path = gauth/gauth.h; sourceTree = "<group>"; };
EE89C03D16A5B5EB006CBE2E /* gsaslclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gsaslclient.h; path = gauth/gsaslclient.h; sourceTree = "<group>"; };
EE89C03E16A5B5EB006CBE2E /* gsaslclient_native.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsaslclient_native.cpp; path = gauth/gsaslclient_native.cpp; sourceTree = "<group>"; };
EE89C03F16A5B5EB006CBE2E /* gsaslclient_none.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsaslclient_none.cpp; path = gauth/gsaslclient_none.cpp; sourceTree = "<group>"; };
EE89C04016A5B5EB006CBE2E /* gsaslserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsaslserver.cpp; path = gauth/gsaslserver.cpp; sourceTree = "<group>"; };
EE89C04116A5B5EB006CBE2E /* gsaslserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gsaslserver.h; path = gauth/gsaslserver.h; sourceTree = "<group>"; };
EE89C04216A5B5EB006CBE2E /* gsaslserverbasic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gsaslserverbasic.h; path = gauth/gsaslserverbasic.h; sourceTree = "<group>"; };
EE89C04316A5B5EB006CBE2E /* gsaslserverbasic_native.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsaslserverbasic_native.cpp; path = gauth/gsaslserverbasic_native.cpp; sourceTree = "<group>"; };
EE89C04416A5B5EB006CBE2E /* gsaslserverbasic_none.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsaslserverbasic_none.cpp; path = gauth/gsaslserverbasic_none.cpp; sourceTree = "<group>"; };
EE89C04516A5B5EB006CBE2E /* gsaslserverfactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gsaslserverfactory.h; path = gauth/gsaslserverfactory.h; sourceTree = "<group>"; };
EE89C04616A5B5EB006CBE2E /* gsaslserverfactory_native.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsaslserverfactory_native.cpp; path = gauth/gsaslserverfactory_native.cpp; sourceTree = "<group>"; };
EE89C04716A5B5EB006CBE2E /* gsaslserverfactory_pam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsaslserverfactory_pam.cpp; path = gauth/gsaslserverfactory_pam.cpp; sourceTree = "<group>"; };
EE89C04816A5B5EB006CBE2E /* gsaslserverpam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsaslserverpam.cpp; path = gauth/gsaslserverpam.cpp; sourceTree = "<group>"; };
EE89C04916A5B5EB006CBE2E /* gsaslserverpam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gsaslserverpam.h; path = gauth/gsaslserverpam.h; sourceTree = "<group>"; };
EE89C04A16A5B5EB006CBE2E /* gsecrets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gsecrets.h; path = gauth/gsecrets.h; sourceTree = "<group>"; };
EE89C04B16A5B5EB006CBE2E /* gsecrets_full.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsecrets_full.cpp; path = gauth/gsecrets_full.cpp; sourceTree = "<group>"; };
EE89C04C16A5B5EB006CBE2E /* gsecrets_none.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsecrets_none.cpp; path = gauth/gsecrets_none.cpp; sourceTree = "<group>"; };
EE89C04D16A5B5EB006CBE2E /* gsecrets_pam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsecrets_pam.cpp; path = gauth/gsecrets_pam.cpp; sourceTree = "<group>"; };
EE89C04E16A5B5EB006CBE2E /* gsecretsfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gsecretsfile.cpp; path = gauth/gsecretsfile.cpp; sourceTree = "<group>"; };
EE89C04F16A5B5EB006CBE2E /* gsecretsfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gsecretsfile.h; path = gauth/gsecretsfile.h; sourceTree = "<group>"; };
EE89C05016A5B5EB006CBE2E /* gvalid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gvalid.cpp; path = gauth/gvalid.cpp; sourceTree = "<group>"; };
EE89C05116A5B5EB006CBE2E /* gvalid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gvalid.h; path = gauth/gvalid.h; sourceTree = "<group>"; };
EE89C06316A5B722006CBE2E /* garg_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = garg_mac.cpp; sourceTree = "<group>"; };
EE89C06516A5B7A4006CBE2E /* gbase64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gbase64.cpp; sourceTree = "<group>"; };
EE89C06616A5B7A4006CBE2E /* gbase64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gbase64.h; sourceTree = "<group>"; };
EE89C06A16A5B7A4006CBE2E /* gpam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpam.cpp; sourceTree = "<group>"; };
EE89C06B16A5B7A4006CBE2E /* gpam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gpam.h; sourceTree = "<group>"; };
EE89C06C16A5B7A4006CBE2E /* gpam_linux.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpam_linux.cpp; sourceTree = "<group>"; };
EE89C06D16A5B7A4006CBE2E /* gpam_none.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpam_none.cpp; sourceTree = "<group>"; };
EE89C06E16A5B7A4006CBE2E /* gstrings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gstrings.cpp; sourceTree = "<group>"; };
EE89C0B916A5D306006CBE2E /* gdescriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gdescriptor.cpp; sourceTree = "<group>"; };
EE99183F0D91664E00FB06D5 /* emailrelay-filter-copy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-filter-copy"; sourceTree = BUILT_PRODUCTS_DIR; }; EE99183F0D91664E00FB06D5 /* emailrelay-filter-copy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-filter-copy"; sourceTree = BUILT_PRODUCTS_DIR; };
EE9918410D91664F00FB06D5 /* Info copy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info copy.plist"; sourceTree = "<group>"; };
EE9918580D91693000FB06D5 /* emailrelay-start */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-start"; sourceTree = BUILT_PRODUCTS_DIR; }; EE9918580D91693000FB06D5 /* emailrelay-start */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-start"; sourceTree = BUILT_PRODUCTS_DIR; };
EE99185A0D91693000FB06D5 /* Info copy 2.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info copy 2.plist"; sourceTree = "<group>"; };
EE9918680D91695000FB06D5 /* emailrelay-passwd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-passwd"; sourceTree = BUILT_PRODUCTS_DIR; }; EE9918680D91695000FB06D5 /* emailrelay-passwd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-passwd"; sourceTree = BUILT_PRODUCTS_DIR; };
EE99186A0D91695000FB06D5 /* Info copy 3.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info copy 3.plist"; sourceTree = "<group>"; };
EE9918780D91697900FB06D5 /* emailrelay-poke */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-poke"; sourceTree = BUILT_PRODUCTS_DIR; }; EE9918780D91697900FB06D5 /* emailrelay-poke */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-poke"; sourceTree = BUILT_PRODUCTS_DIR; };
EE99187A0D91697900FB06D5 /* Info copy 4.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info copy 4.plist"; sourceTree = "<group>"; };
EE9918880D91698A00FB06D5 /* emailrelay-submit */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-submit"; sourceTree = BUILT_PRODUCTS_DIR; }; EE9918880D91698A00FB06D5 /* emailrelay-submit */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "emailrelay-submit"; sourceTree = BUILT_PRODUCTS_DIR; };
EE99188A0D91698A00FB06D5 /* Info copy 5.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info copy 5.plist"; sourceTree = "<group>"; };
EE99188B0D9169F700FB06D5 /* start.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = start.cpp; sourceTree = "<group>"; }; EE99188B0D9169F700FB06D5 /* start.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = start.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@ -847,11 +965,6 @@
08FB7795FE84155DC02AAC07 /* Source */, 08FB7795FE84155DC02AAC07 /* Source */,
C6859E8C029090F304C91782 /* Documentation */, C6859E8C029090F304C91782 /* Documentation */,
1AB674ADFE9D54B511CA2CBB /* Products */, 1AB674ADFE9D54B511CA2CBB /* Products */,
EE9918410D91664F00FB06D5 /* Info copy.plist */,
EE99185A0D91693000FB06D5 /* Info copy 2.plist */,
EE99186A0D91695000FB06D5 /* Info copy 3.plist */,
EE99187A0D91697900FB06D5 /* Info copy 4.plist */,
EE99188A0D91698A00FB06D5 /* Info copy 5.plist */,
); );
name = emailrelay; name = emailrelay;
sourceTree = "<group>"; sourceTree = "<group>";
@ -891,8 +1004,7 @@
EE303AD20D326C9600D840F2 /* src */ = { EE303AD20D326C9600D840F2 /* src */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
EE303AD30D326C9600D840F2 /* emailrelay.dsw */, EE89C03B16A5B517006CBE2E /* gauth */,
EE303AD40D326C9600D840F2 /* fragments */,
EE303AD80D326C9600D840F2 /* glib */, EE303AD80D326C9600D840F2 /* glib */,
EE303B370D326C9600D840F2 /* gnet */, EE303B370D326C9600D840F2 /* gnet */,
EE303B7A0D326C9600D840F2 /* gpop */, EE303B7A0D326C9600D840F2 /* gpop */,
@ -900,28 +1012,24 @@
EE303BD80D326C9600D840F2 /* gssl */, EE303BD80D326C9600D840F2 /* gssl */,
EE303BDF0D326C9600D840F2 /* gui */, EE303BDF0D326C9600D840F2 /* gui */,
EE303C020D326C9600D840F2 /* main */, EE303C020D326C9600D840F2 /* main */,
EE303C3B0D326C9700D840F2 /* Makefile.am */,
EE303C3C0D326C9700D840F2 /* Makefile.in */,
EE303C3D0D326C9700D840F2 /* mingw-common.mak */,
EE303C3E0D326C9700D840F2 /* mingw.mak */,
EE303C3F0D326C9700D840F2 /* win32 */, EE303C3F0D326C9700D840F2 /* win32 */,
); );
path = src; path = src;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
EE303AD40D326C9600D840F2 /* fragments */ = {
isa = PBXGroup;
children = (
EE303AD50D326C9600D840F2 /* empty.cpp */,
EE303AD60D326C9600D840F2 /* Makefile.am */,
EE303AD70D326C9600D840F2 /* Makefile.in */,
);
path = fragments;
sourceTree = "<group>";
};
EE303AD80D326C9600D840F2 /* glib */ = { EE303AD80D326C9600D840F2 /* glib */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
EE1753BA16B852AD00575457 /* genvironment.h */,
EE1753BB16B852AD00575457 /* genvironment_unix.cpp */,
EE89C06516A5B7A4006CBE2E /* gbase64.cpp */,
EE89C06616A5B7A4006CBE2E /* gbase64.h */,
EE89C06A16A5B7A4006CBE2E /* gpam.cpp */,
EE89C06B16A5B7A4006CBE2E /* gpam.h */,
EE89C06C16A5B7A4006CBE2E /* gpam_linux.cpp */,
EE89C06D16A5B7A4006CBE2E /* gpam_none.cpp */,
EE89C06E16A5B7A4006CBE2E /* gstrings.cpp */,
EE89C06316A5B722006CBE2E /* garg_mac.cpp */,
EE303AD90D326C9600D840F2 /* garg.cpp */, EE303AD90D326C9600D840F2 /* garg.cpp */,
EE303ADA0D326C9600D840F2 /* garg.h */, EE303ADA0D326C9600D840F2 /* garg.h */,
EE303ADB0D326C9600D840F2 /* garg_unix.cpp */, EE303ADB0D326C9600D840F2 /* garg_unix.cpp */,
@ -930,7 +1038,6 @@
EE303ADE0D326C9600D840F2 /* gcleanup.h */, EE303ADE0D326C9600D840F2 /* gcleanup.h */,
EE303ADF0D326C9600D840F2 /* gcleanup_unix.cpp */, EE303ADF0D326C9600D840F2 /* gcleanup_unix.cpp */,
EE303AE00D326C9600D840F2 /* gcleanup_win32.cpp */, EE303AE00D326C9600D840F2 /* gcleanup_win32.cpp */,
EE303AE10D326C9600D840F2 /* gconvert.h */,
EE303AE20D326C9600D840F2 /* gcounter.cpp */, EE303AE20D326C9600D840F2 /* gcounter.cpp */,
EE303AE30D326C9600D840F2 /* gcounter.h */, EE303AE30D326C9600D840F2 /* gcounter.h */,
EE303AE40D326C9600D840F2 /* gdaemon.h */, EE303AE40D326C9600D840F2 /* gdaemon.h */,
@ -1023,6 +1130,9 @@
EE303B370D326C9600D840F2 /* gnet */ = { EE303B370D326C9600D840F2 /* gnet */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
EE1753AE16B850C600575457 /* gconnectionlookup.h */,
EE1753AF16B850C600575457 /* gconnectionlookup_unix.cpp */,
EE89C0B916A5D306006CBE2E /* gdescriptor.cpp */,
EE303B380D326C9600D840F2 /* gaddress.h */, EE303B380D326C9600D840F2 /* gaddress.h */,
EE303B390D326C9600D840F2 /* gaddress_ip.cpp */, EE303B390D326C9600D840F2 /* gaddress_ip.cpp */,
EE303B3A0D326C9600D840F2 /* gaddress_ipv4.cpp */, EE303B3A0D326C9600D840F2 /* gaddress_ipv4.cpp */,
@ -1058,7 +1168,6 @@
EE303B580D326C9600D840F2 /* gmultiserver.cpp */, EE303B580D326C9600D840F2 /* gmultiserver.cpp */,
EE303B590D326C9600D840F2 /* gmultiserver.h */, EE303B590D326C9600D840F2 /* gmultiserver.h */,
EE303B5A0D326C9600D840F2 /* gnet.h */, EE303B5A0D326C9600D840F2 /* gnet.h */,
EE303B5B0D326C9600D840F2 /* grequest.cpp */,
EE303B5C0D326C9600D840F2 /* grequest.h */, EE303B5C0D326C9600D840F2 /* grequest.h */,
EE303B5D0D326C9600D840F2 /* gresolver.cpp */, EE303B5D0D326C9600D840F2 /* gresolver.cpp */,
EE303B5E0D326C9600D840F2 /* gresolver.h */, EE303B5E0D326C9600D840F2 /* gresolver.h */,
@ -1122,8 +1231,6 @@
children = ( children = (
EE303B8D0D326C9600D840F2 /* gadminserver.cpp */, EE303B8D0D326C9600D840F2 /* gadminserver.cpp */,
EE303B8E0D326C9600D840F2 /* gadminserver.h */, EE303B8E0D326C9600D840F2 /* gadminserver.h */,
EE303B8F0D326C9600D840F2 /* gbase64.cpp */,
EE303B900D326C9600D840F2 /* gbase64.h */,
EE303B910D326C9600D840F2 /* gclientprotocol.cpp */, EE303B910D326C9600D840F2 /* gclientprotocol.cpp */,
EE303B920D326C9600D840F2 /* gclientprotocol.h */, EE303B920D326C9600D840F2 /* gclientprotocol.h */,
EE303B930D326C9600D840F2 /* gexecutableprocessor.cpp */, EE303B930D326C9600D840F2 /* gexecutableprocessor.cpp */,
@ -1163,13 +1270,6 @@
EE303BB50D326C9600D840F2 /* gprotocolmessagestore.h */, EE303BB50D326C9600D840F2 /* gprotocolmessagestore.h */,
EE303BB60D326C9600D840F2 /* grequestclient.cpp */, EE303BB60D326C9600D840F2 /* grequestclient.cpp */,
EE303BB70D326C9600D840F2 /* grequestclient.h */, EE303BB70D326C9600D840F2 /* grequestclient.h */,
EE303BB80D326C9600D840F2 /* gsasl.h */,
EE303BB90D326C9600D840F2 /* gsasl_gnu.cpp */,
EE303BBA0D326C9600D840F2 /* gsasl_native.cpp */,
EE303BBB0D326C9600D840F2 /* gsasl_none.cpp */,
EE303BBC0D326C9600D840F2 /* gsecrets.h */,
EE303BBD0D326C9600D840F2 /* gsecrets_full.cpp */,
EE303BBE0D326C9600D840F2 /* gsecrets_none.cpp */,
EE303BBF0D326C9600D840F2 /* gserverprotocol.cpp */, EE303BBF0D326C9600D840F2 /* gserverprotocol.cpp */,
EE303BC00D326C9600D840F2 /* gserverprotocol.h */, EE303BC00D326C9600D840F2 /* gserverprotocol.h */,
EE303BC10D326C9600D840F2 /* gsmtp.h */, EE303BC10D326C9600D840F2 /* gsmtp.h */,
@ -1215,7 +1315,6 @@
EE303BDF0D326C9600D840F2 /* gui */ = { EE303BDF0D326C9600D840F2 /* gui */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
EE303BE00D326C9600D840F2 /* boot.cpp */,
EE303BE10D326C9600D840F2 /* boot.h */, EE303BE10D326C9600D840F2 /* boot.h */,
EE303BE20D326C9600D840F2 /* dir.cpp */, EE303BE20D326C9600D840F2 /* dir.cpp */,
EE303BE30D326C9600D840F2 /* dir.h */, EE303BE30D326C9600D840F2 /* dir.h */,
@ -1225,19 +1324,16 @@
EE303BE70D326C9600D840F2 /* gcominit.h */, EE303BE70D326C9600D840F2 /* gcominit.h */,
EE303BE80D326C9600D840F2 /* gdialog.cpp */, EE303BE80D326C9600D840F2 /* gdialog.cpp */,
EE303BE90D326C9600D840F2 /* gdialog.h */, EE303BE90D326C9600D840F2 /* gdialog.h */,
EE303BEA0D326C9600D840F2 /* glink.cpp */,
EE303BEB0D326C9600D840F2 /* glink.h */, EE303BEB0D326C9600D840F2 /* glink.h */,
EE303BEC0D326C9600D840F2 /* gpage.cpp */, EE303BEC0D326C9600D840F2 /* gpage.cpp */,
EE303BED0D326C9600D840F2 /* gpage.h */, EE303BED0D326C9600D840F2 /* gpage.h */,
EE303BEE0D326C9600D840F2 /* guimain.cpp */, EE303BEE0D326C9600D840F2 /* guimain.cpp */,
EE303BEF0D326C9600D840F2 /* gunpack.cpp */, EE303BEF0D326C9600D840F2 /* gunpack.cpp */,
EE303BF00D326C9600D840F2 /* gunpack.h */, EE303BF00D326C9600D840F2 /* gunpack.h */,
EE303BF10D326C9600D840F2 /* Info.plist */,
EE303BF20D326C9600D840F2 /* installer.cpp */, EE303BF20D326C9600D840F2 /* installer.cpp */,
EE303BF30D326C9600D840F2 /* installer.h */, EE303BF30D326C9600D840F2 /* installer.h */,
EE303BF40D326C9600D840F2 /* legal.cpp */, EE303BF40D326C9600D840F2 /* legal.cpp */,
EE303BF50D326C9600D840F2 /* legal.h */, EE303BF50D326C9600D840F2 /* legal.h */,
EE303BF60D326C9600D840F2 /* mac.mak */,
EE303BF70D326C9600D840F2 /* Makefile.am */, EE303BF70D326C9600D840F2 /* Makefile.am */,
EE303BF80D326C9600D840F2 /* Makefile.in */, EE303BF80D326C9600D840F2 /* Makefile.in */,
EE303BF90D326C9600D840F2 /* mingw.mak */, EE303BF90D326C9600D840F2 /* mingw.mak */,
@ -1263,22 +1359,16 @@
EE303C060D326C9600D840F2 /* commandline.h */, EE303C060D326C9600D840F2 /* commandline.h */,
EE303C070D326C9600D840F2 /* commandline_full.cpp */, EE303C070D326C9600D840F2 /* commandline_full.cpp */,
EE303C080D326C9600D840F2 /* commandline_simple.cpp */, EE303C080D326C9600D840F2 /* commandline_simple.cpp */,
EE303C090D326C9600D840F2 /* common.dsp */,
EE303C0A0D326C9600D840F2 /* configuration.cpp */, EE303C0A0D326C9600D840F2 /* configuration.cpp */,
EE303C0B0D326C9600D840F2 /* configuration.h */, EE303C0B0D326C9600D840F2 /* configuration.h */,
EE303C0C0D326C9600D840F2 /* doxygen.cfg */,
EE303C0D0D326C9600D840F2 /* doxygen.h */, EE303C0D0D326C9600D840F2 /* doxygen.h */,
EE303C0E0D326C9600D840F2 /* emailrelay.dsp */,
EE303C0F0D326C9600D840F2 /* emailrelay.rc */, EE303C0F0D326C9600D840F2 /* emailrelay.rc */,
EE303C100D326C9600D840F2 /* filter.cpp */, EE303C100D326C9600D840F2 /* filter.cpp */,
EE303C110D326C9600D840F2 /* filter.dsp */,
EE303C120D326C9600D840F2 /* filter.h */, EE303C120D326C9600D840F2 /* filter.h */,
EE303C130D326C9600D840F2 /* filter_copy.cpp */, EE303C130D326C9600D840F2 /* filter_copy.cpp */,
EE303C140D326C9600D840F2 /* icon-32.ico */,
EE303C150D326C9600D840F2 /* icon2.ico */, EE303C150D326C9600D840F2 /* icon2.ico */,
EE303C160D326C9600D840F2 /* icon3.ico */, EE303C160D326C9600D840F2 /* icon3.ico */,
EE303C170D326C9600D840F2 /* icon4.ico */, EE303C170D326C9600D840F2 /* icon4.ico */,
EE303C180D326C9600D840F2 /* icon5.ico */,
EE303C190D326C9600D840F2 /* legal.cpp */, EE303C190D326C9600D840F2 /* legal.cpp */,
EE303C1A0D326C9600D840F2 /* legal.h */, EE303C1A0D326C9600D840F2 /* legal.h */,
EE303C1B0D326C9600D840F2 /* main.cpp */, EE303C1B0D326C9600D840F2 /* main.cpp */,
@ -1292,20 +1382,16 @@
EE303C230D326C9700D840F2 /* output.cpp */, EE303C230D326C9700D840F2 /* output.cpp */,
EE303C240D326C9700D840F2 /* output.h */, EE303C240D326C9700D840F2 /* output.h */,
EE303C250D326C9700D840F2 /* passwd.cpp */, EE303C250D326C9700D840F2 /* passwd.cpp */,
EE303C260D326C9700D840F2 /* passwd.dsp */,
EE303C270D326C9700D840F2 /* poke.c */, EE303C270D326C9700D840F2 /* poke.c */,
EE303C280D326C9700D840F2 /* poke.dsp */,
EE303C290D326C9700D840F2 /* resource.h */, EE303C290D326C9700D840F2 /* resource.h */,
EE303C2A0D326C9700D840F2 /* run.cpp */, EE303C2A0D326C9700D840F2 /* run.cpp */,
EE303C2B0D326C9700D840F2 /* run.h */, EE303C2B0D326C9700D840F2 /* run.h */,
EE303C2C0D326C9700D840F2 /* service.dsp */,
EE303C2D0D326C9700D840F2 /* service_install.cpp */, EE303C2D0D326C9700D840F2 /* service_install.cpp */,
EE303C2E0D326C9700D840F2 /* service_install.h */, EE303C2E0D326C9700D840F2 /* service_install.h */,
EE303C2F0D326C9700D840F2 /* service_remove.cpp */, EE303C2F0D326C9700D840F2 /* service_remove.cpp */,
EE303C300D326C9700D840F2 /* service_remove.h */, EE303C300D326C9700D840F2 /* service_remove.h */,
EE303C310D326C9700D840F2 /* service_wrapper.cpp */, EE303C310D326C9700D840F2 /* service_wrapper.cpp */,
EE303C320D326C9700D840F2 /* submit.cpp */, EE303C320D326C9700D840F2 /* submit.cpp */,
EE303C330D326C9700D840F2 /* submit.dsp */,
EE303C340D326C9700D840F2 /* winapp.cpp */, EE303C340D326C9700D840F2 /* winapp.cpp */,
EE303C350D326C9700D840F2 /* winapp.h */, EE303C350D326C9700D840F2 /* winapp.h */,
EE303C360D326C9700D840F2 /* winform.cpp */, EE303C360D326C9700D840F2 /* winform.cpp */,
@ -1356,32 +1442,52 @@
EE303EA80D366E5500D840F2 /* doc */ = { EE303EA80D366E5500D840F2 /* doc */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
EE303EA90D366E5500D840F2 /* auth.png */,
EE303EAA0D366E5500D840F2 /* developer.txt */, EE303EAA0D366E5500D840F2 /* developer.txt */,
EE303EAB0D366E5500D840F2 /* doxygen_header.html */,
EE303EAC0D366E5500D840F2 /* doxygen_missing.html */,
EE303EAD0D366E5500D840F2 /* emailrelay-filter-copy.1 */, EE303EAD0D366E5500D840F2 /* emailrelay-filter-copy.1 */,
EE303EAE0D366E5500D840F2 /* emailrelay-man.html */, EE303EAE0D366E5500D840F2 /* emailrelay-man.html */,
EE303EAF0D366E5500D840F2 /* emailrelay-passwd.1 */, EE303EAF0D366E5500D840F2 /* emailrelay-passwd.1 */,
EE303EB00D366E5500D840F2 /* emailrelay-poke.1 */, EE303EB00D366E5500D840F2 /* emailrelay-poke.1 */,
EE303EB10D366E5500D840F2 /* emailrelay-submit.1 */, EE303EB10D366E5500D840F2 /* emailrelay-submit.1 */,
EE303EB20D366E5500D840F2 /* emailrelay.1 */, EE303EB20D366E5500D840F2 /* emailrelay.1 */,
EE303EB30D366E5500D840F2 /* emailrelay.css */,
EE303EB40D366E5500D840F2 /* gnet-classes.png */,
EE303EB50D366E5500D840F2 /* gnet-client.png */,
EE303EB60D366E5500D840F2 /* gsmtp-classes.png */,
EE303EB70D366E5500D840F2 /* gsmtp-serverprotocol.png */,
EE303EB80D366E5500D840F2 /* index.html */, EE303EB80D366E5500D840F2 /* index.html */,
EE303EB90D366E5500D840F2 /* Makefile.am */, EE303EB90D366E5500D840F2 /* Makefile.am */,
EE303EBA0D366E5500D840F2 /* Makefile.in */, EE303EBA0D366E5500D840F2 /* Makefile.in */,
EE303EBB0D366E5500D840F2 /* reference.txt */, EE303EBB0D366E5500D840F2 /* reference.txt */,
EE303EBC0D366E5500D840F2 /* sequence-3.png */,
EE303EBD0D366E5500D840F2 /* userguide.txt */, EE303EBD0D366E5500D840F2 /* userguide.txt */,
EE303EBE0D366E5500D840F2 /* windows.txt */, EE303EBE0D366E5500D840F2 /* windows.txt */,
); );
path = doc; path = doc;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
EE89C03B16A5B517006CBE2E /* gauth */ = {
isa = PBXGroup;
children = (
EE89C03C16A5B5EB006CBE2E /* gauth.h */,
EE89C03D16A5B5EB006CBE2E /* gsaslclient.h */,
EE89C03E16A5B5EB006CBE2E /* gsaslclient_native.cpp */,
EE89C03F16A5B5EB006CBE2E /* gsaslclient_none.cpp */,
EE89C04016A5B5EB006CBE2E /* gsaslserver.cpp */,
EE89C04116A5B5EB006CBE2E /* gsaslserver.h */,
EE89C04216A5B5EB006CBE2E /* gsaslserverbasic.h */,
EE89C04316A5B5EB006CBE2E /* gsaslserverbasic_native.cpp */,
EE89C04416A5B5EB006CBE2E /* gsaslserverbasic_none.cpp */,
EE89C04516A5B5EB006CBE2E /* gsaslserverfactory.h */,
EE89C04616A5B5EB006CBE2E /* gsaslserverfactory_native.cpp */,
EE89C04716A5B5EB006CBE2E /* gsaslserverfactory_pam.cpp */,
EE89C04816A5B5EB006CBE2E /* gsaslserverpam.cpp */,
EE89C04916A5B5EB006CBE2E /* gsaslserverpam.h */,
EE89C04A16A5B5EB006CBE2E /* gsecrets.h */,
EE89C04B16A5B5EB006CBE2E /* gsecrets_full.cpp */,
EE89C04C16A5B5EB006CBE2E /* gsecrets_none.cpp */,
EE89C04D16A5B5EB006CBE2E /* gsecrets_pam.cpp */,
EE89C04E16A5B5EB006CBE2E /* gsecretsfile.cpp */,
EE89C04F16A5B5EB006CBE2E /* gsecretsfile.h */,
EE89C05016A5B5EB006CBE2E /* gvalid.cpp */,
EE89C05116A5B5EB006CBE2E /* gvalid.h */,
);
name = gauth;
sourceTree = "<group>";
};
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */ /* Begin PBXHeadersBuildPhase section */
@ -1660,7 +1766,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
EE303C5D0D326C9700D840F2 /* empty.cpp in Sources */,
EE303D000D326C9700D840F2 /* admin_enabled.cpp in Sources */, EE303D000D326C9700D840F2 /* admin_enabled.cpp in Sources */,
EE303D010D326C9700D840F2 /* commandline_full.cpp in Sources */, EE303D010D326C9700D840F2 /* commandline_full.cpp in Sources */,
EE303D030D326C9700D840F2 /* configuration.cpp in Sources */, EE303D030D326C9700D840F2 /* configuration.cpp in Sources */,
@ -1669,6 +1774,79 @@
EE303D0A0D326C9700D840F2 /* news.cpp in Sources */, EE303D0A0D326C9700D840F2 /* news.cpp in Sources */,
EE303D0B0D326C9700D840F2 /* output.cpp in Sources */, EE303D0B0D326C9700D840F2 /* output.cpp in Sources */,
EE303D0E0D326C9700D840F2 /* run.cpp in Sources */, EE303D0E0D326C9700D840F2 /* run.cpp in Sources */,
EE89C05216A5B5EB006CBE2E /* gsaslclient_native.cpp in Sources */,
EE89C05416A5B5EB006CBE2E /* gsaslserver.cpp in Sources */,
EE89C05516A5B5EB006CBE2E /* gsaslserverbasic_native.cpp in Sources */,
EE89C05816A5B5EB006CBE2E /* gsaslserverfactory_pam.cpp in Sources */,
EE89C05916A5B5EB006CBE2E /* gsaslserverpam.cpp in Sources */,
EE89C05C16A5B5EB006CBE2E /* gsecrets_pam.cpp in Sources */,
EE89C05D16A5B5EB006CBE2E /* gsecretsfile.cpp in Sources */,
EE89C05E16A5B5EB006CBE2E /* gvalid.cpp in Sources */,
EE89C06416A5B722006CBE2E /* garg_mac.cpp in Sources */,
EE89C06F16A5B7A4006CBE2E /* gbase64.cpp in Sources */,
EE89C07216A5B7A4006CBE2E /* gpam.cpp in Sources */,
EE89C07316A5B7A4006CBE2E /* gpam_linux.cpp in Sources */,
EE89C07516A5B7A4006CBE2E /* gstrings.cpp in Sources */,
EE89C07616A5B7DE006CBE2E /* gcleanup_unix.cpp in Sources */,
EE89C07716A5B7E4006CBE2E /* gcounter.cpp in Sources */,
EE89C07816A5B803006CBE2E /* gdaemon_unix.cpp in Sources */,
EE89C07916A5B807006CBE2E /* gdate.cpp in Sources */,
EE89C07A16A5B80B006CBE2E /* gdatetime.cpp in Sources */,
EE89C07B16A5B80D006CBE2E /* gdatetime_unix.cpp in Sources */,
EE89C07C16A5B81B006CBE2E /* gdirectory.cpp in Sources */,
EE89C07D16A5B821006CBE2E /* gdirectory_unix.cpp in Sources */,
EE89C07E16A5B825006CBE2E /* gdirectory_unix_glob.cpp in Sources */,
EE89C07F16A5B829006CBE2E /* gexception.cpp in Sources */,
EE89C08016A5B82A006CBE2E /* gexecutable.cpp in Sources */,
EE89C08116A5B82C006CBE2E /* gexecutable_unix.cpp in Sources */,
EE89C08216A5B82F006CBE2E /* gfile.cpp in Sources */,
EE89C08316A5B838006CBE2E /* gfile_unix.cpp in Sources */,
EE89C08416A5B83A006CBE2E /* gfs_unix.cpp in Sources */,
EE89C08516A5B83B006CBE2E /* ggetopt.cpp in Sources */,
EE89C08616A5B83E006CBE2E /* ghostname_unix.cpp in Sources */,
EE89C08716A5B848006CBE2E /* gidentity_unix.cpp in Sources */,
EE89C08816A5B84C006CBE2E /* glog.cpp in Sources */,
EE89C08916A5B84D006CBE2E /* glogoutput.cpp in Sources */,
EE89C08A16A5B84F006CBE2E /* glogoutput_unix.cpp in Sources */,
EE89C08B16A5B854006CBE2E /* gpath.cpp in Sources */,
EE89C08C16A5B857006CBE2E /* gpidfile.cpp in Sources */,
EE89C08D16A5B858006CBE2E /* gprocess_unix.cpp in Sources */,
EE89C08E16A5B85A006CBE2E /* groot.cpp in Sources */,
EE89C08F16A5B85F006CBE2E /* gslot.cpp in Sources */,
EE89C09016A5B862006CBE2E /* gstr.cpp in Sources */,
EE89C09116A5B867006CBE2E /* gtest.cpp in Sources */,
EE89C09216A5B869006CBE2E /* gtime.cpp in Sources */,
EE89C09316A5B86B006CBE2E /* gxtext.cpp in Sources */,
EE89C09416A5B86F006CBE2E /* md5.cpp in Sources */,
EE89C09A16A5D19B006CBE2E /* gdescriptor_unix.cpp in Sources */,
EE89C09C16A5D1A7006CBE2E /* gaddress_ipv4.cpp in Sources */,
EE89C09D16A5D1A9006CBE2E /* gbufferedserverpeer.cpp in Sources */,
EE89C09E16A5D1AB006CBE2E /* gclient.cpp in Sources */,
EE89C09F16A5D1AE006CBE2E /* gconnection.cpp in Sources */,
EE89C0A016A5D1B3006CBE2E /* geventhandler.cpp in Sources */,
EE89C0A116A5D1B4006CBE2E /* geventloop.cpp in Sources */,
EE89C0A216A5D1B5006CBE2E /* geventloop_unix.cpp in Sources */,
EE89C0A316A5D1B9006CBE2E /* gheapclient.cpp in Sources */,
EE89C0A416A5D1BA006CBE2E /* glinebuffer.cpp in Sources */,
EE89C0A516A5D1BC006CBE2E /* glocal.cpp in Sources */,
EE89C0A616A5D1C4006CBE2E /* glocal_unix.cpp in Sources */,
EE89C0A716A5D1CA006CBE2E /* gmonitor.cpp in Sources */,
EE89C0A816A5D1CC006CBE2E /* gmultiserver.cpp in Sources */,
EE89C0A916A5D1CF006CBE2E /* gresolver.cpp in Sources */,
EE89C0AB16A5D1D4006CBE2E /* gresolver_ipv4.cpp in Sources */,
EE89C0AC16A5D1D6006CBE2E /* gresolver_unix.cpp in Sources */,
EE89C0AD16A5D1DD006CBE2E /* gresolverinfo.cpp in Sources */,
EE89C0AE16A5D1DE006CBE2E /* gserver.cpp in Sources */,
EE89C0AF16A5D1E0006CBE2E /* gsimpleclient.cpp in Sources */,
EE89C0B016A5D1E2006CBE2E /* gsimpleclient_unix.cpp in Sources */,
EE89C0B116A5D1E7006CBE2E /* gsocket.cpp in Sources */,
EE89C0B216A5D1ED006CBE2E /* gsocket_unix.cpp in Sources */,
EE89C0B316A5D1EF006CBE2E /* gsocketprotocol.cpp in Sources */,
EE89C0B416A5D1F0006CBE2E /* gtimer.cpp in Sources */,
EE89C0B516A5D1F2006CBE2E /* gtimerlist.cpp in Sources */,
EE89C0BA16A5D306006CBE2E /* gdescriptor.cpp in Sources */,
EE1753B016B850C600575457 /* gconnectionlookup_unix.cpp in Sources */,
EE1753BC16B852AD00575457 /* genvironment_unix.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -1766,7 +1944,6 @@
files = ( files = (
EE303E260D329C1200D840F2 /* gstoredmessage.cpp in Sources */, EE303E260D329C1200D840F2 /* gstoredmessage.cpp in Sources */,
EE303E270D329C1400D840F2 /* gexecutableverifier.cpp in Sources */, EE303E270D329C1400D840F2 /* gexecutableverifier.cpp in Sources */,
EE303E280D329C1500D840F2 /* gsecrets_full.cpp in Sources */,
EE303E290D329C1700D840F2 /* ginternalverifier.cpp in Sources */, EE303E290D329C1700D840F2 /* ginternalverifier.cpp in Sources */,
EE303E2A0D329C1800D840F2 /* grequestclient.cpp in Sources */, EE303E2A0D329C1800D840F2 /* grequestclient.cpp in Sources */,
EE303E2B0D329C1A00D840F2 /* gadminserver.cpp in Sources */, EE303E2B0D329C1A00D840F2 /* gadminserver.cpp in Sources */,
@ -1775,12 +1952,10 @@
EE303E2E0D329C1F00D840F2 /* gclientprotocol.cpp in Sources */, EE303E2E0D329C1F00D840F2 /* gclientprotocol.cpp in Sources */,
EE303E2F0D329C2200D840F2 /* gmessagestore.cpp in Sources */, EE303E2F0D329C2200D840F2 /* gmessagestore.cpp in Sources */,
EE303E300D329C2400D840F2 /* gfilestore.cpp in Sources */, EE303E300D329C2400D840F2 /* gfilestore.cpp in Sources */,
EE303E310D329C2500D840F2 /* gsasl_native.cpp in Sources */,
EE303E320D329C2600D840F2 /* gmessagestore_unix.cpp in Sources */, EE303E320D329C2600D840F2 /* gmessagestore_unix.cpp in Sources */,
EE303E330D329C2800D840F2 /* gverifierstatus.cpp in Sources */, EE303E330D329C2800D840F2 /* gverifierstatus.cpp in Sources */,
EE303E340D329C2A00D840F2 /* gspamprocessor.cpp in Sources */, EE303E340D329C2A00D840F2 /* gspamprocessor.cpp in Sources */,
EE303E350D329C2C00D840F2 /* gnullprocessor.cpp in Sources */, EE303E350D329C2C00D840F2 /* gnullprocessor.cpp in Sources */,
EE303E360D329C3000D840F2 /* gbase64.cpp in Sources */,
EE303E370D329C3200D840F2 /* gverifierfactory_exec_enabled.cpp in Sources */, EE303E370D329C3200D840F2 /* gverifierfactory_exec_enabled.cpp in Sources */,
EE303E380D329C3400D840F2 /* gnetworkverifier.cpp in Sources */, EE303E380D329C3400D840F2 /* gnetworkverifier.cpp in Sources */,
EE303E390D329C3700D840F2 /* gstoredfile.cpp in Sources */, EE303E390D329C3700D840F2 /* gstoredfile.cpp in Sources */,
@ -1812,7 +1987,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
EE9918310D91664E00FB06D5 /* empty.cpp in Sources */,
EE9918420D91670200FB06D5 /* filter_copy.cpp in Sources */, EE9918420D91670200FB06D5 /* filter_copy.cpp in Sources */,
EE9918440D91673900FB06D5 /* filter.cpp in Sources */, EE9918440D91673900FB06D5 /* filter.cpp in Sources */,
EE9918460D91675100FB06D5 /* legal.cpp in Sources */, EE9918460D91675100FB06D5 /* legal.cpp in Sources */,
@ -1823,7 +1997,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
EE99184F0D91693000FB06D5 /* empty.cpp in Sources */,
EE99188D0D9169FE00FB06D5 /* start.cpp in Sources */, EE99188D0D9169FE00FB06D5 /* start.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -1832,7 +2005,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
EE99185F0D91695000FB06D5 /* empty.cpp in Sources */,
EE99188F0D916A3600FB06D5 /* passwd.cpp in Sources */, EE99188F0D916A3600FB06D5 /* passwd.cpp in Sources */,
EE9918A50D916B1A00FB06D5 /* legal.cpp in Sources */, EE9918A50D916B1A00FB06D5 /* legal.cpp in Sources */,
); );
@ -1842,7 +2014,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
EE99186F0D91697900FB06D5 /* empty.cpp in Sources */,
EE9918900D916A4E00FB06D5 /* poke.c in Sources */, EE9918900D916A4E00FB06D5 /* poke.c in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -1851,9 +2022,74 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
EE99187F0D91698A00FB06D5 /* empty.cpp in Sources */,
EE9918920D916A7400FB06D5 /* submit.cpp in Sources */, EE9918920D916A7400FB06D5 /* submit.cpp in Sources */,
EE9918940D916A8600FB06D5 /* legal.cpp in Sources */, EE9918940D916A8600FB06D5 /* legal.cpp in Sources */,
EE89C0BF16A5E642006CBE2E /* garg.cpp in Sources */,
EE89C0C016A5E645006CBE2E /* garg_mac.cpp in Sources */,
EE89C0C116A5E649006CBE2E /* gbase64.cpp in Sources */,
EE89C0C216A5E64C006CBE2E /* gcleanup_unix.cpp in Sources */,
EE89C0C316A5E669006CBE2E /* gcounter.cpp in Sources */,
EE89C0C416A5E66B006CBE2E /* gdaemon_unix.cpp in Sources */,
EE89C0C516A5E66C006CBE2E /* gdate.cpp in Sources */,
EE89C0C616A5E66E006CBE2E /* gdatetime.cpp in Sources */,
EE89C0C716A5E670006CBE2E /* gdatetime_unix.cpp in Sources */,
EE89C0C816A5E673006CBE2E /* gdirectory.cpp in Sources */,
EE89C0C916A5E675006CBE2E /* gdirectory_unix.cpp in Sources */,
EE89C0CA16A5E677006CBE2E /* gdirectory_unix_glob.cpp in Sources */,
EE89C0CB16A5E67B006CBE2E /* gexception.cpp in Sources */,
EE89C0CC16A5E67D006CBE2E /* gexecutable.cpp in Sources */,
EE89C0CD16A5E67E006CBE2E /* gexecutable_unix.cpp in Sources */,
EE89C0CE16A5E685006CBE2E /* gfile.cpp in Sources */,
EE89C0CF16A5E687006CBE2E /* gfile_unix.cpp in Sources */,
EE89C0D016A5E689006CBE2E /* gfs_unix.cpp in Sources */,
EE89C0D116A5E68A006CBE2E /* ggetopt.cpp in Sources */,
EE89C0D216A5E68D006CBE2E /* ghostname_unix.cpp in Sources */,
EE89C0D316A5E68F006CBE2E /* gidentity_unix.cpp in Sources */,
EE89C0D416A5E693006CBE2E /* glog.cpp in Sources */,
EE89C0D516A5E695006CBE2E /* glogoutput.cpp in Sources */,
EE89C0D616A5E696006CBE2E /* glogoutput_unix.cpp in Sources */,
EE89C0D716A5E698006CBE2E /* gmd5_native.cpp in Sources */,
EE89C0D816A5E6A0006CBE2E /* gnewprocess_unix_exec_enabled.cpp in Sources */,
EE89C0DA16A5E6A6006CBE2E /* gpam.cpp in Sources */,
EE89C0DB16A5E6A7006CBE2E /* gpam_linux.cpp in Sources */,
EE89C0DC16A5E6AC006CBE2E /* gpath.cpp in Sources */,
EE89C0DD16A5E6AE006CBE2E /* gpidfile.cpp in Sources */,
EE89C0DE16A5E6AF006CBE2E /* gprocess_unix.cpp in Sources */,
EE89C0DF16A5E6B4006CBE2E /* groot.cpp in Sources */,
EE89C0E016A5E6B5006CBE2E /* gslot.cpp in Sources */,
EE89C0E116A5E6B6006CBE2E /* gstr.cpp in Sources */,
EE89C0E216A5E6B7006CBE2E /* gstrings.cpp in Sources */,
EE89C0E316A5E6B8006CBE2E /* gtest.cpp in Sources */,
EE89C0E416A5E6B9006CBE2E /* gtime.cpp in Sources */,
EE89C0E516A5E6BA006CBE2E /* gxtext.cpp in Sources */,
EE89C0E616A5E6BF006CBE2E /* md5.cpp in Sources */,
EE89C0E716A5E6C9006CBE2E /* gaddress_ipv4.cpp in Sources */,
EE89C0E816A5E6CA006CBE2E /* gbufferedserverpeer.cpp in Sources */,
EE89C0E916A5E6CC006CBE2E /* gclient.cpp in Sources */,
EE89C0EA16A5E6CD006CBE2E /* gconnection.cpp in Sources */,
EE89C0EB16A5E6CE006CBE2E /* gdescriptor.cpp in Sources */,
EE89C0EC16A5E6D0006CBE2E /* gdescriptor_unix.cpp in Sources */,
EE89C0ED16A5E6D1006CBE2E /* geventhandler.cpp in Sources */,
EE89C0EE16A5E6D2006CBE2E /* geventloop.cpp in Sources */,
EE89C0EF16A5E6D5006CBE2E /* geventloop_unix.cpp in Sources */,
EE89C0F016A5E6D6006CBE2E /* gheapclient.cpp in Sources */,
EE89C0F116A5E6D7006CBE2E /* glinebuffer.cpp in Sources */,
EE89C0F216A5E6D9006CBE2E /* glocal.cpp in Sources */,
EE89C0F316A5E6DB006CBE2E /* glocal_unix.cpp in Sources */,
EE89C0F416A5E6DE006CBE2E /* gmonitor.cpp in Sources */,
EE89C0F516A5E6DF006CBE2E /* gmultiserver.cpp in Sources */,
EE89C0F616A5E6E0006CBE2E /* gresolver.cpp in Sources */,
EE89C0F716A5E6E7006CBE2E /* gresolver_ipv4.cpp in Sources */,
EE89C0F816A5E6E9006CBE2E /* gresolver_unix.cpp in Sources */,
EE89C0F916A5E6EB006CBE2E /* gresolverinfo.cpp in Sources */,
EE89C0FA16A5E6EC006CBE2E /* gserver.cpp in Sources */,
EE89C0FB16A5E6ED006CBE2E /* gsimpleclient.cpp in Sources */,
EE89C0FC16A5E6F1006CBE2E /* gsimpleclient_unix.cpp in Sources */,
EE89C0FD16A5E6F2006CBE2E /* gsocket.cpp in Sources */,
EE89C0FE16A5E6F3006CBE2E /* gsocket_unix.cpp in Sources */,
EE89C0FF16A5E6F4006CBE2E /* gsocketprotocol.cpp in Sources */,
EE89C10016A5E6F5006CBE2E /* gtimer.cpp in Sources */,
EE89C10116A5E6F8006CBE2E /* gtimerlist.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -1973,6 +2209,7 @@
"-lglib", "-lglib",
"-lssl", "-lssl",
"-lcrypto", "-lcrypto",
"-lpam",
); );
PRODUCT_NAME = emailrelay; PRODUCT_NAME = emailrelay;
ZERO_LINK = YES; ZERO_LINK = YES;
@ -1986,7 +2223,7 @@
EXECUTABLE_EXTENSION = .app; EXECUTABLE_EXTENSION = .app;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_MODEL_TUNING = G5; GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = Info.plist; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
MACH_O_TYPE = mh_execute; MACH_O_TYPE = mh_execute;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@ -1997,6 +2234,7 @@
"-lglib", "-lglib",
"-lssl", "-lssl",
"-lcrypto", "-lcrypto",
"-lpam",
); );
PRODUCT_NAME = emailrelay; PRODUCT_NAME = emailrelay;
}; };
@ -2210,7 +2448,7 @@
"G_UNIX=1", "G_UNIX=1",
"_DEBUG=1", "_DEBUG=1",
); );
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
OTHER_LDFLAGS = "-lglib"; OTHER_LDFLAGS = "-lglib";
PRODUCT_NAME = "emailrelay-filter-copy"; PRODUCT_NAME = "emailrelay-filter-copy";
@ -2225,7 +2463,7 @@
EXECUTABLE_EXTENSION = .app; EXECUTABLE_EXTENSION = .app;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_MODEL_TUNING = G5; GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
MACH_O_TYPE = mh_execute; MACH_O_TYPE = mh_execute;
OTHER_LDFLAGS = "-lglib"; OTHER_LDFLAGS = "-lglib";
@ -2249,7 +2487,7 @@
"G_UNIX=1", "G_UNIX=1",
"_DEBUG=1", "_DEBUG=1",
); );
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy 2.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
OTHER_LDFLAGS = ""; OTHER_LDFLAGS = "";
PRODUCT_NAME = "emailrelay-start"; PRODUCT_NAME = "emailrelay-start";
@ -2264,7 +2502,7 @@
EXECUTABLE_EXTENSION = .app; EXECUTABLE_EXTENSION = .app;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_MODEL_TUNING = G5; GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy 2.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
MACH_O_TYPE = mh_execute; MACH_O_TYPE = mh_execute;
OTHER_LDFLAGS = ""; OTHER_LDFLAGS = "";
@ -2288,7 +2526,7 @@
"G_UNIX=1", "G_UNIX=1",
"_DEBUG=1", "_DEBUG=1",
); );
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy 3.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
OTHER_LDFLAGS = "-lglib"; OTHER_LDFLAGS = "-lglib";
PRODUCT_NAME = "emailrelay-passwd"; PRODUCT_NAME = "emailrelay-passwd";
@ -2303,7 +2541,7 @@
EXECUTABLE_EXTENSION = .app; EXECUTABLE_EXTENSION = .app;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_MODEL_TUNING = G5; GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy 3.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
MACH_O_TYPE = mh_execute; MACH_O_TYPE = mh_execute;
OTHER_LDFLAGS = "-lglib"; OTHER_LDFLAGS = "-lglib";
@ -2327,7 +2565,7 @@
"G_UNIX=1", "G_UNIX=1",
"_DEBUG=1", "_DEBUG=1",
); );
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy 4.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
OTHER_LDFLAGS = ""; OTHER_LDFLAGS = "";
PRODUCT_NAME = "emailrelay-poke"; PRODUCT_NAME = "emailrelay-poke";
@ -2342,7 +2580,7 @@
EXECUTABLE_EXTENSION = .app; EXECUTABLE_EXTENSION = .app;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_MODEL_TUNING = G5; GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy 4.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
MACH_O_TYPE = mh_execute; MACH_O_TYPE = mh_execute;
OTHER_LDFLAGS = ""; OTHER_LDFLAGS = "";
@ -2366,13 +2604,16 @@
"G_UNIX=1", "G_UNIX=1",
"_DEBUG=1", "_DEBUG=1",
); );
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy 5.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-lgsmtp", "-lgsmtp",
"-lgnet", "-lgnet",
"-lgssl", "-lgssl",
"-lglib", "-lglib",
"-lssl",
"-lpam",
"-lcrypto",
); );
PRODUCT_NAME = "emailrelay-submit"; PRODUCT_NAME = "emailrelay-submit";
ZERO_LINK = YES; ZERO_LINK = YES;
@ -2386,7 +2627,7 @@
EXECUTABLE_EXTENSION = .app; EXECUTABLE_EXTENSION = .app;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_MODEL_TUNING = G5; GCC_MODEL_TUNING = G5;
INFOPLIST_FILE = "/Users/graeme/build.xcode/emailrelay-1.8/Info copy 5.plist"; INFOPLIST_FILE = "";
INSTALL_PATH = /usr/local/bin; INSTALL_PATH = /usr/local/bin;
MACH_O_TYPE = mh_execute; MACH_O_TYPE = mh_execute;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
@ -2394,6 +2635,9 @@
"-lgnet", "-lgnet",
"-lgssl", "-lgssl",
"-lglib", "-lglib",
"-lssl",
"-lpam",
"-lcrypto",
); );
PRODUCT_NAME = "emailrelay-submit"; PRODUCT_NAME = "emailrelay-submit";
}; };

View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,
@ -15,19 +15,40 @@
## along with this program. If not, see <http://www.gnu.org/licenses/>. ## along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
EXTRA_DIST = emailrelay.conf.template if PAM
e_pam_DATA = emailrelay
else
e_pam_DATA =
endif
e_sysconf_DATA = emailrelay.conf.template EXTRA_DIST = emailrelay.conf.template emailrelay.auth.template emailrelay.pam
e_sysconf_DATA = emailrelay.conf.template emailrelay.auth.template
emailrelay: emailrelay.pam
cp $(top_srcdir)/etc/emailrelay.pam $@
clean-local:
-rm -f emailrelay 2>/dev/null
if INSTALL_HOOK if INSTALL_HOOK
# create the .conf file from .conf.template with directory edits - dont
# use this when running configure for building a .deb or .rpm package
install-data-hook: install-data-hook:
if test -f "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; then : ; else cat "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf.template" | sed "s:^#spool-dir /var/spool/emailrelay:spool-dir $(DESTDIR)$(e_spooldir):g" | sed 's:"/var/spool/emailrelay":"'"$(e_spooldir)"'":g' | sed "s:/etc:$(e_sysconfdir):g" | sed "s:/usr/local/bin:$(e_libexecdir):g" > "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; fi if test -f "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; then : ; else cat "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf.template" | sed "s:^#spool-dir .*:spool-dir $(e_spooldir):g" | sed 's:"/var/spool/emailrelay":"'"$(e_spooldir)"'":g' | sed "s:/etc:$(e_sysconfdir):g" | sed "s:/usr/local/bin:$(e_libexecdir):g" > "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; sum < "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" | sed 's/^/# Checksum: /' >> "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; fi
# remove the .conf file if it has not been editied
uninstall-hook:
-if grep -q "Checksum: `grep -v Checksum: $(DESTDIR)$(e_sysconfdir)/emailrelay.conf | sum`" "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; then rm "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; fi
else else
# if there is no .conf file then copy it from .conf.template
install-data-hook: install-data-hook:
if test -f "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; then : ; else cp "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf.template" "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; fi test -f "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" || cp "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf.template" "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf"
# remove the .conf file - the .conf.template has been deleted when this runs
uninstall-hook:
-rm "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf"
endif endif

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am. # Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -19,8 +20,9 @@
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
@ -43,6 +45,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES = SOURCES =
DIST_SOURCES = DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@ -50,10 +53,30 @@ am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \ *) f=$$p;; \
esac; esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(e_sysconfdir)" am__install_max = 40
e_sysconfDATA_INSTALL = $(INSTALL_DATA) am__nobase_strip_setup = \
DATA = $(e_sysconf_DATA) srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(e_pamdir)" "$(DESTDIR)$(e_sysconfdir)"
DATA = $(e_pam_DATA) $(e_sysconf_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
@ -79,9 +102,9 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
GREP = @GREP@ GREP = @GREP@
GZIP = @GZIP@ GZIP = @GZIP@
G_CAPABILITIES = @G_CAPABILITIES@
HAVE_DOXYGEN = @HAVE_DOXYGEN@ HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@ HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@ -104,9 +127,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PAM_INCLUDE = @PAM_INCLUDE@
PAM_LIBS = @PAM_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
QT_CFLAGS = @QT_CFLAGS@ QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@ QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -117,6 +145,7 @@ STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@ STATIC_START = @STATIC_START@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ZLIB_LIBS = @ZLIB_LIBS@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@ abs_top_builddir = @abs_top_builddir@
@ -137,8 +166,10 @@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
e_docdir = @e_docdir@ e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@ e_examplesdir = @e_examplesdir@
e_icondir = @e_icondir@
e_initdir = @e_initdir@ e_initdir = @e_initdir@
e_libexecdir = @e_libexecdir@ e_libexecdir = @e_libexecdir@
e_pamdir = @e_pamdir@
e_qtmoc = @e_qtmoc@ e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@ e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@ e_sysconfdir = @e_sysconfdir@
@ -164,10 +195,13 @@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
EXTRA_DIST = emailrelay.conf.template @PAM_FALSE@e_pam_DATA =
e_sysconf_DATA = emailrelay.conf.template @PAM_TRUE@e_pam_DATA = emailrelay
EXTRA_DIST = emailrelay.conf.template emailrelay.auth.template emailrelay.pam
e_sysconf_DATA = emailrelay.conf.template emailrelay.auth.template
all: all-am all: all-am
.SUFFIXES: .SUFFIXES:
@ -175,14 +209,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& exit 0; \ && { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu etc/Makefile $(AUTOMAKE) --gnu etc/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -200,23 +234,43 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-e_pamDATA: $(e_pam_DATA)
@$(NORMAL_INSTALL)
test -z "$(e_pamdir)" || $(MKDIR_P) "$(DESTDIR)$(e_pamdir)"
@list='$(e_pam_DATA)'; test -n "$(e_pamdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(e_pamdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(e_pamdir)" || exit $$?; \
done
uninstall-e_pamDATA:
@$(NORMAL_UNINSTALL)
@list='$(e_pam_DATA)'; test -n "$(e_pamdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(e_pamdir)'; $(am__uninstall_files_from_dir)
install-e_sysconfDATA: $(e_sysconf_DATA) install-e_sysconfDATA: $(e_sysconf_DATA)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
test -z "$(e_sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(e_sysconfdir)" test -z "$(e_sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(e_sysconfdir)"
@list='$(e_sysconf_DATA)'; for p in $$list; do \ @list='$(e_sysconf_DATA)'; test -n "$(e_sysconfdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \ echo "$$d$$p"; \
echo " $(e_sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_sysconfdir)/$$f'"; \ done | $(am__base_list) | \
$(e_sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_sysconfdir)/$$f"; \ while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(e_sysconfdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(e_sysconfdir)" || exit $$?; \
done done
uninstall-e_sysconfDATA: uninstall-e_sysconfDATA:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
@list='$(e_sysconf_DATA)'; for p in $$list; do \ @list='$(e_sysconf_DATA)'; test -n "$(e_sysconfdir)" || list=; \
f=$(am__strip_dir) \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
echo " rm -f '$(DESTDIR)$(e_sysconfdir)/$$f'"; \ dir='$(DESTDIR)$(e_sysconfdir)'; $(am__uninstall_files_from_dir)
rm -f "$(DESTDIR)$(e_sysconfdir)/$$f"; \
done
tags: TAGS tags: TAGS
TAGS: TAGS:
@ -240,13 +294,17 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d "$(distdir)/$$file"; then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
@ -254,7 +312,7 @@ check-am: all-am
check: check-am check: check-am
all-am: Makefile $(DATA) all-am: Makefile $(DATA)
installdirs: installdirs:
for dir in "$(DESTDIR)$(e_sysconfdir)"; do \ for dir in "$(DESTDIR)$(e_pamdir)" "$(DESTDIR)$(e_sysconfdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done done
install: install-am install: install-am
@ -267,23 +325,29 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild." @echo "it deletes files that may require special tools to rebuild."
clean: clean-am clean: clean-am
clean-am: clean-generic mostlyclean-am clean-am: clean-generic clean-local mostlyclean-am
distclean: distclean-am distclean: distclean-am
-rm -f Makefile -rm -f Makefile
@ -295,28 +359,39 @@ dvi-am:
html: html-am html: html-am
html-am:
info: info-am info: info-am
info-am: info-am:
install-data-am: install-e_sysconfDATA install-data-am: install-e_pamDATA install-e_sysconfDATA
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-data-hook $(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-dvi: install-dvi-am install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-am install-html: install-html-am
install-html-am:
install-info: install-info-am install-info: install-info-am
install-info-am:
install-man: install-man:
install-pdf: install-pdf-am install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am install-ps: install-ps-am
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
@ -335,28 +410,48 @@ ps: ps-am
ps-am: ps-am:
uninstall-am: uninstall-e_sysconfDATA uninstall-am: uninstall-e_pamDATA uninstall-e_sysconfDATA
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
.MAKE: install-am install-data-am install-strip uninstall-am
.MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \
distclean distclean-generic distdir dvi dvi-am html html-am \
.PHONY: all all-am check check-am clean clean-generic distclean \ info info-am install install-am install-data install-data-am \
distclean-generic distdir dvi dvi-am html html-am info info-am \ install-data-hook install-dvi install-dvi-am install-e_pamDATA \
install install-am install-data install-data-am \
install-data-hook install-dvi install-dvi-am \
install-e_sysconfDATA install-exec install-exec-am \ install-e_sysconfDATA install-exec install-exec-am \
install-html install-html-am install-info install-info-am \ install-html install-html-am install-info install-info-am \
install-man install-pdf install-pdf-am install-ps \ install-man install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \ install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \ installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-e_sysconfDATA uninstall-am uninstall-e_pamDATA uninstall-e_sysconfDATA \
uninstall-hook
emailrelay: emailrelay.pam
cp $(top_srcdir)/etc/emailrelay.pam $@
clean-local:
-rm -f emailrelay 2>/dev/null
# create the .conf file from .conf.template with directory edits - dont
# use this when running configure for building a .deb or .rpm package
@INSTALL_HOOK_TRUE@install-data-hook: @INSTALL_HOOK_TRUE@install-data-hook:
@INSTALL_HOOK_TRUE@ if test -f "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; then : ; else cat "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf.template" | sed "s:^#spool-dir /var/spool/emailrelay:spool-dir $(DESTDIR)$(e_spooldir):g" | sed 's:"/var/spool/emailrelay":"'"$(e_spooldir)"'":g' | sed "s:/etc:$(e_sysconfdir):g" | sed "s:/usr/local/bin:$(e_libexecdir):g" > "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; fi @INSTALL_HOOK_TRUE@ if test -f "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; then : ; else cat "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf.template" | sed "s:^#spool-dir .*:spool-dir $(e_spooldir):g" | sed 's:"/var/spool/emailrelay":"'"$(e_spooldir)"'":g' | sed "s:/etc:$(e_sysconfdir):g" | sed "s:/usr/local/bin:$(e_libexecdir):g" > "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; sum < "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" | sed 's/^/# Checksum: /' >> "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; fi
# remove the .conf file if it has not been editied
@INSTALL_HOOK_TRUE@uninstall-hook:
@INSTALL_HOOK_TRUE@ -if grep -q "Checksum: `grep -v Checksum: $(DESTDIR)$(e_sysconfdir)/emailrelay.conf | sum`" "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; then rm "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; fi
# if there is no .conf file then copy it from .conf.template
@INSTALL_HOOK_FALSE@install-data-hook: @INSTALL_HOOK_FALSE@install-data-hook:
@INSTALL_HOOK_FALSE@ if test -f "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; then : ; else cp "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf.template" "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" ; fi @INSTALL_HOOK_FALSE@ test -f "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf" || cp "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf.template" "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf"
# remove the .conf file - the .conf.template has been deleted when this runs
@INSTALL_HOOK_FALSE@uninstall-hook:
@INSTALL_HOOK_FALSE@ -rm "$(DESTDIR)$(e_sysconfdir)/emailrelay.conf"
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

View File

@ -0,0 +1,45 @@
#
# emailrelay.auth
#
# E-MailRelay secrets file.
#
# Point to this file on the emailrelay commandline, like this:
#
# $ emailrelay --as-client=example.com:25 --client-auth=/etc/emailrelay.auth
# $ emailrelay --as-server --server-auth=/etc/emailrelay.auth
#
# Each line in this file has four space-separated fields:
# {server|client} <mechanism> <name> <secret>
# mechanism := { CRAM-MD5 | LOGIN | APOP | NONE }
#
# For example,
# client LOGIN me password
# server CRAM-MD5 user1 3331427893.2002577218.3241710438.2089385739.2077014046.1094160264.2027813133.1565911587
# server APOP user2 secret
#
# Normally there should be one "client" line used to connect to a remote SMTP
# server and multiple "server" lines representing accounts used by clients to
# connect to this server.
#
# Secrets for the "CRAM-MD5" mechanism should be generated by running the
# "emailrelay-passwd" program.
#
# For backwards compatibility the first two fields can be reversed.
#
# Any unusual characters (including space, "=" and "+") in the "name" and
# "secret" fields should encoded using the RFC 1891 "xtext" encoding scheme
# so that they are representing as hexadecimal ascii as "+XX".
#
# For example,
# client LOGIN me my+20password
# server LOGIN einstein e+3Dmc2
#
# The "NONE" mechanism is used to allow trusted IP addresses to bypass
# authentication. For these lines the "name" field should be the wildcarded
# IP address range and the "secret" should be a one-word comment.
#
# For example,
# server NONE 192.168.1.* localnet
# server NONE 10.0.0.0/16 vpn
#

View File

@ -2,19 +2,19 @@
# emailrelay.conf # emailrelay.conf
# #
# This is a configuration file for E-MailRelay (http://emailrelay.sf.net). # This is a configuration file for E-MailRelay (http://emailrelay.sf.net).
# It is used by the emailrelay "init.d" script when it starts up an emailrelay # It is used by the emailrelay "init.d" script when it starts up an emailrelay
# server. # server.
# #
# The "init.d" script constructs an emailrelay command-line by starting # The "init.d" script constructs an emailrelay command-line by starting
# with "--as-server --pid-file ..." and then contatenating uncommented lines # with "--as-server --pid-file ..." and then contatenating uncommented lines
# from this file, prefixing each with "--". # from this file, prefixing each with "--".
# #
# To enable one of the configuration switches below remove the '#' character # To enable one of the configuration options below remove the '#' character
# on the last line in the block. # on the last line in the block.
# #
# Name: remote-clients # Name: remote-clients
# Format: remote-clients # Format: remote-clients
# Description: Allows remote clients to connect. By default only local # Description: Allows remote clients to connect. By default only local
# clients can connect to the server and connections from remote clients # clients can connect to the server and connections from remote clients
# are rejected. # are rejected.
@ -22,14 +22,14 @@
#remote-clients #remote-clients
# Name: spool-dir # Name: spool-dir
# Format: spool-dir <dir> # Format: spool-dir <dir>
# Description: Specifies the spool directory. The default is compiled into the # Description: Specifies the spool directory. The default is compiled into the
# program, but it is typically "/var/spool/emailrelay". # program, but it is typically "/var/spool/emailrelay".
# #
#spool-dir /var/spool/emailrelay #spool-dir /var/spool/emailrelay
# Name: interface # Name: interface
# Format: interface <ip-address> # Format: interface <ip-address>
# Description: Specifies an interface to listen on. The default is to listen # 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 # on all interfaces (INADDR_ANY). Using a specific interface can make it harder
# for clients on other sub-networks to connect, so improving security. Multiple # for clients on other sub-networks to connect, so improving security. Multiple
@ -38,7 +38,7 @@
#interface 192.168.0.10 #interface 192.168.0.10
# Name: filter # Name: filter
# Format: filter <program> # Format: filter <program>
# Description: Defines a mail processor program which is run as each message is stored. # Description: Defines a mail processor program which is run as each message is stored.
# The program or script is given the name of each message file on the command-line, # The program or script is given the name of each message file on the command-line,
# giving it the opportunity to edit, copy or delete it. # giving it the opportunity to edit, copy or delete it.
@ -46,7 +46,7 @@
#filter /usr/local/bin/emailrelay-filter #filter /usr/local/bin/emailrelay-filter
# Name: server-auth # Name: server-auth
# Format: server-auth <file> # Format: server-auth <file>
# Description: Enables authentication of remote SMTP clients, using the given secrets file. # Description: Enables authentication of remote SMTP clients, using the given secrets file.
# The secrets file contains usernames and passwords, either in plain-text or as MD5 # The secrets file contains usernames and passwords, either in plain-text or as MD5
# digests. # digests.
@ -54,13 +54,13 @@
#server-auth /etc/emailrelay.auth #server-auth /etc/emailrelay.auth
# Name: admin # Name: admin
# Format: admin <admin-port> # Format: admin <admin-port>
# Description: Enables the administration interface and specifies its listening port number. # Description: Enables the administration interface and specifies its listening port number.
# #
#admin 10026 #admin 10026
# Name: client-auth # Name: client-auth
# Format: client-auth <file> # Format: client-auth <file>
# Description: Enables authentication with the remote server, using the given secrets file. # Description: Enables authentication with the remote server, using the given secrets file.
# The secrets file contains the username and password that E-MailRelay uses to connect # The secrets file contains the username and password that E-MailRelay uses to connect
# to the remove SMTP server. # to the remove SMTP server.
@ -69,13 +69,26 @@
# Name: client-tls # Name: client-tls
# Format: client-tls # Format: client-tls
# Description: Enables the tls/ssl layer when acting as an smtp client. # Description: Enables negotiated TLS encryption (STARTTLS) when acting as an smtp client.
# #
#client-tls #client-tls
# Name: client-tls-connection
# Format: client-tls-connection
# Description: Enables SMTP-over-TLS when acting as an smtp client.
#
#client-tls-connection
# Name: tls-config
# Format: tls-config <flags>
# Description: Modifies the TLS layer configuration. For OpenSSL a value of 3 enables SSLv3
# and 2 enables SSLv2/3.
#
#tls-config=2
# Name: server-tls # Name: server-tls
# Format: server-tls <open-ssl-pem-file> # Format: server-tls <open-ssl-pem-file>
# Description: Enables the tls/ssl layer when acting as an smtp server. # Description: Enables negotiated TLS encryption (STARTTLS) when acting as an smtp server.
# Use the "openssl" utility to create and test a ".pem" certificate file. # Use the "openssl" utility to create and test a ".pem" certificate file.
# Note that OpenSSL requires certificates to be installed in a trusted # Note that OpenSSL requires certificates to be installed in a trusted
# directory, such as "/etc/ssl/certs". Use a full path to the certificate file. # directory, such as "/etc/ssl/certs". Use a full path to the certificate file.
@ -83,86 +96,86 @@
#server-tls /etc/ssl/certs/emailrelay.pem #server-tls /etc/ssl/certs/emailrelay.pem
# Name: connection-timeout # Name: connection-timeout
# Format: connection-timeout <time> # Format: connection-timeout <time>
# Description: Sets the timeout (in seconds) when connecting to a remote server. The default is 40. # Description: Sets the timeout (in seconds) when connecting to a remote server. The default is 40.
# #
#connection-timeout 10 #connection-timeout 10
# Name: domain # Name: domain
# Format: domain <fqdn> # Format: domain <fqdn>
# Description: Sets an override for this host's fully qualified domain name. # Description: Sets an override for this host's fully qualified domain name.
# This is used as an identifier in the SMTP protocol and is therefore visible # This is used as an identifier in the SMTP protocol and is therefore visible
# to remote SMTP servers and clients. # to remote SMTP servers and clients.
# #
#domain myhost.mydomain.net #domain myhost.mydomain.net
# Name: forward # Name: forward
# Format: forward # Format: forward
# Description: Forwards stored mail on startup. Requires --forward-to. # Description: Forwards stored mail on startup. Requires --forward-to.
# This is implicit in the --as-proxy switch. # This is implicit in the --as-proxy option.
# #
#forward #forward
# Name: forward-to # Name: forward-to
# Format: forward-to <host:port> # Format: forward-to <host:port>
# Description: Specifies the remote SMTP server when using --forward, --as-proxy # Description: Specifies the remote SMTP server when using --forward, --as-proxy
# or --admin. # or --admin.
# #
#forward-to smarthost.mydomain.net #forward-to smarthost.mydomain.net
# Name: immediate # Name: immediate
# Format: immediate # Format: immediate
# Description: Forwards each message as soon as it is received. Requires --forward-to. # Description: Forwards each message as soon as it is received. Requires --forward-to.
# This is implicit in the --as-proxy switch. # This is implicit in the --as-proxy option.
# #
#immediate #immediate
# Name: log-time # Name: log-time
# Format: log-time # Format: log-time
# Description: Adds a timestamp to the logging output. # Description: Adds a timestamp to the logging output.
# #
#log-time #log-time
# Name: no-syslog # Name: no-syslog
# Format: no-syslog # Format: no-syslog
# Description: Disables syslog output. # Description: Disables syslog output.
# #
#no-syslog #no-syslog
# Name: poll # Name: poll
# Format: poll <period> # Format: poll <period>
# Description: Enables polling of the spool directory for new messages with the # Description: Enables polling of the spool directory for new messages with the
# specified period (in seconds). A value of zero means that forwarding is done # specified period (in seconds). A value of zero means that forwarding is done
# once the submitting client disconnects. Requires --forward-to. # once the submitting client disconnects. Requires --forward-to.
# #
#poll 120 #poll 120
# Name: port # Name: port
# Format: port <port> # Format: port <port>
# Description: Specifies the SMTP listening port number. # Description: Specifies the SMTP listening port number.
# #
#port 587 #port 587
# Name: response-timeout # Name: response-timeout
# Format: response-timeout <time> # Format: response-timeout <time>
# Description: Sets the response timeout (in seconds) when talking to a remote server. The default is 1800. # Description: Sets the response timeout (in seconds) when talking to a remote server. The default is 1800.
# #
#response-timeout 60 #response-timeout 60
# Name: user # Name: user
# Format: user <username> # Format: user <username>
# Description: Names the effective user to switch to when started as root (default is "daemon"). # Description: Names the effective user to switch to when started as root (default is "daemon").
# #
#user nobody #user nobody
# Name: verbose # Name: verbose
# Format: verbose # Format: verbose
# Description: Generates more verbose logging output. # Description: Generates more verbose logging output.
# #
#verbose #verbose
# Name: verifier # Name: verifier
# Format: verifier <program> # Format: verifier <program>
# Description: Defines an external address verifier program. # Description: Defines an external address verifier program.
# #
#verifier /usr/local/bin/emailrelay-verifier #verifier /usr/local/bin/emailrelay-verifier
@ -199,3 +212,5 @@
# #
#pop-by-name #pop-by-name

5
etc/emailrelay.pam Normal file
View File

@ -0,0 +1,5 @@
# emailrelay pam configuration
auth requisite pam_unix.so nullok_secure
session required pam_permit.so
account required pam_permit.so
password required pam_deny.so

View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,
@ -15,4 +15,4 @@
## along with this program. If not, see <http://www.gnu.org/licenses/>. ## along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
EXTRA_DIST = EXTRA_DIST =
SUBDIRS = mips SUBDIRS =

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am. # Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -15,8 +16,9 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
@ -39,6 +41,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES = SOURCES =
DIST_SOURCES = DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@ -50,10 +53,38 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
ps-recursive uninstall-recursive ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir
ETAGS = etags ETAGS = etags
CTAGS = ctags CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS) DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AR = @AR@ AR = @AR@
@ -78,9 +109,9 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
GREP = @GREP@ GREP = @GREP@
GZIP = @GZIP@ GZIP = @GZIP@
G_CAPABILITIES = @G_CAPABILITIES@
HAVE_DOXYGEN = @HAVE_DOXYGEN@ HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@ HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@ -103,9 +134,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PAM_INCLUDE = @PAM_INCLUDE@
PAM_LIBS = @PAM_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
QT_CFLAGS = @QT_CFLAGS@ QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@ QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -116,6 +152,7 @@ STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@ STATIC_START = @STATIC_START@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ZLIB_LIBS = @ZLIB_LIBS@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@ abs_top_builddir = @abs_top_builddir@
@ -136,8 +173,10 @@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
e_docdir = @e_docdir@ e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@ e_examplesdir = @e_examplesdir@
e_icondir = @e_icondir@
e_initdir = @e_initdir@ e_initdir = @e_initdir@
e_libexecdir = @e_libexecdir@ e_libexecdir = @e_libexecdir@
e_pamdir = @e_pamdir@
e_qtmoc = @e_qtmoc@ e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@ e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@ e_sysconfdir = @e_sysconfdir@
@ -163,13 +202,14 @@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
# #
# #
EXTRA_DIST = EXTRA_DIST =
SUBDIRS = mips SUBDIRS =
all: all-recursive all: all-recursive
.SUFFIXES: .SUFFIXES:
@ -177,14 +217,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& exit 0; \ && { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu extra/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu extra/Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu extra/Makefile $(AUTOMAKE) --gnu extra/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -202,6 +242,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
# This directory's subdirectories are mostly independent; you can cd # This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile. # into them and run `make' without going through this Makefile.
@ -210,7 +251,7 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
# (which will cause the Makefiles to be regenerated when you run `make'); # (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line. # (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS): $(RECURSIVE_TARGETS):
@failcom='exit 1'; \ @fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \ for f in x $$MAKEFLAGS; do \
case $$f in \ case $$f in \
*=* | --[!k]*);; \ *=* | --[!k]*);; \
@ -227,7 +268,7 @@ $(RECURSIVE_TARGETS):
else \ else \
local_target="$$target"; \ local_target="$$target"; \
fi; \ fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \ || eval $$failcom; \
done; \ done; \
if test "$$dot_seen" = "no"; then \ if test "$$dot_seen" = "no"; then \
@ -235,7 +276,7 @@ $(RECURSIVE_TARGETS):
fi; test -z "$$fail" fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS): $(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \ @fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \ for f in x $$MAKEFLAGS; do \
case $$f in \ case $$f in \
*=* | --[!k]*);; \ *=* | --[!k]*);; \
@ -261,16 +302,16 @@ $(RECURSIVE_CLEAN_TARGETS):
else \ else \
local_target="$$target"; \ local_target="$$target"; \
fi; \ fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \ || eval $$failcom; \
done && test -z "$$fail" done && test -z "$$fail"
tags-recursive: tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done done
ctags-recursive: ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@ -278,14 +319,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique mkid -fID $$unique
tags: TAGS tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
tags=; \ set x; \
here=`pwd`; \ 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; \ include_option=--etags-include; \
@ -297,7 +338,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \ if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \ test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \ fi; \
done; \ done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@ -306,29 +347,34 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \ test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ if test $$# -gt 0; then \
$$tags $$unique; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi fi
ctags: CTAGS ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \ test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique $$unique
GTAGS: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \ here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \ && $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here && gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags: distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -349,29 +395,44 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d "$(distdir)/$$file"; then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \ if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \ test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \ || exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \ fi; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ done
(cd $$subdir && \ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \ $(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \ top_distdir="$$new_top_distdir" \
distdir="$$distdir/$$subdir" \ distdir="$$new_distdir" \
am__remove_distdir=: \ am__remove_distdir=: \
am__skip_length_check=: \ am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \ distdir) \
|| exit 1; \ || exit 1; \
fi; \ fi; \
@ -391,16 +452,22 @@ install-am: all-am
installcheck: installcheck-recursive installcheck: installcheck-recursive
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@ -419,6 +486,8 @@ dvi-am:
html: html-recursive html: html-recursive
html-am:
info: info-recursive info: info-recursive
info-am: info-am:
@ -427,18 +496,28 @@ install-data-am:
install-dvi: install-dvi-recursive install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-recursive install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive install-info: install-info-recursive
install-info-am:
install-man: install-man:
install-pdf: install-pdf-recursive install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive install-ps: install-ps-recursive
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-recursive maintainer-clean: maintainer-clean-recursive
@ -459,8 +538,8 @@ ps-am:
uninstall-am: uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
install-strip install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic ctags \ all all-am check check-am clean clean-generic ctags \
@ -475,6 +554,7 @@ uninstall-am:
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
tags-recursive uninstall uninstall-am tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

View File

@ -1,321 +0,0 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = extra/mips
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
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@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
COMPILER_VERSION = @COMPILER_VERSION@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
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@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKE = @MAKE@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
SSL_LIBS = @SSL_LIBS@
STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@
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@
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_libexecdir = @e_libexecdir@
e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@
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 = toolchain.mak configure-mips.sh_
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu extra/mips/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu extra/mips/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(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
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@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; \
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; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
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
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-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-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
# 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.
.NOEXPORT:

View File

@ -1,24 +0,0 @@
E-MailRelay MIPS
================
To help with running E-MailRelay on MIPS-based routers, such as the Buffalo
WHR-G54S, a makefile for building a cross-compiler toolchain is provided as
"extra/mips/toolchain.mak".
The shell script "extra/mips/configure-mips.sh" can be used to run the main
E-MailRelay "configure" script with all the size optimisations suitable for an
embedded target system.
These build-time size optimisations yield the following approximate savings for
the main executable:
* "--disable-exec" 184k
* "--enable-small-config" 121k
* "--disable-pop" 121k
* "--disable-auth" 109k
* "--disable-debug" 67k
* "--disable-admin" 63k
* "--enable-small-exceptions" 46k
* "--enable-small-fragments" 32k
* "--disable-proxy" 30k
* "--disable-dns" 26k
* "--disable-verbose" 15k

View File

@ -1,185 +0,0 @@
#!/bin/sh
#
# Copyright (C) 2001-2008 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 3 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, see <http://www.gnu.org/licenses/>.
# ===
#
# configure-mips.sh
#
# Runs the emailrelay "configure" script for a size-optimised mips build
# using uclibc.
#
# The toolchain is expected to have been built by "extra/mips/toolchain.mak".
#
# Note that in order to minimise the size of the executable a lot of
# functionality is disabled using "--disable-whatever" switches,
# and the emailrelay command-line usage is altered.
#
# usage:
# configure-mips.sh [-n] [-d <toolchain-root>] [{enable|disable} ...]
# configure-mips.sh [-a|-x]
#
# eg:
#
# build the toolchain...
# $ cd ~/emailrelay-1.8/extra/mips
# $ vi toolchain.mak
# $ make -f toolchain.mak
#
# build emailrelay...
# $ mkdir -p ~/emailrelay-1.8/mips
# $ cd ~/emailrelay-1.8/mips
# $ ../extra/mips/configure-mips.sh
# $ make
#
# install...
# $ ../extra/mips/binutils/bin/mipsel-elf-linux-gnu-strip src/main/emailrelay
# $ cp src/main/emailrelay ...
# $ cp ../extra/mips/uclibc/lib/libuClibc-0.9.27.so ...
# $ cp ../extra/mips/uclibc/usr/uClibc++/lib/libuClibc++-0.2.2.so ...
#
# Consider static linking if no other c++ programs are used
# ("configure --enable-static-linking" may work), but note that
# some parts of the c runtime library seem to require dynamic
# linking; "configure --disable-dns --disable-identity" may
# help with this.
#
# For a smaller c++ runtime library take a look at the script
# "uClibc*/extra/libstrip/libstrip".
#
# Edit the dynamic-linker switch below to match the target environment.
#
# configure the ld.so path on the target system
UCLIBC="/lib/ld-uClibc.so.0"
# parse the command line switches
if test "$1" = "-a" -o "$1" = "-x" -o "$1" = "-n" -o "$1" = "-z" ; then sw="$1" ; shift ; fi
# get the absolute path of the toolchain directory
TOOLCHAIN="`dirname $0`"
if test "$1" = "-d" ; then shift ; TOOLCHAIN="$1" ; shift ; fi
if test ! -d "${TOOLCHAIN}/gcc" -a -d "${HOME}/cross/gcc" ; then TOOLCHAIN="${HOME}/cross" ; fi
TOOLCHAIN="`cd $TOOLCHAIN && pwd`"
echo `basename $0`: toolchain root: $TOOLCHAIN
if test "$sw" = "" -o "$sw" = "-n"
then
# prepare enable/disable switches
debug=${1-disable}
exec=${2-disable}
auth=${3-disable}
admin=${4-disable}
identity=${5-disable}
pop=${6-disable}
dns=${7-disable}
if test "$8" = "enable" ; then a8="disable" ; else a8="enable" ; fi
if test "$9" = "enable" ; then a9="disable" ; else a9="enable" ; fi
if test "$10" = "enable" ; then a10="disable" ; else a10="enable" ; fi
verbose=${11-disable}
proxy=${12-disable}
small_config=${a8}
small_exceptions=${a9}
small_fragments=${a10}
args="--$debug-debug --$exec-exec --$auth-auth --$admin-admin --$identity-identity --$pop-pop --$dns-dns"
args="$args --$a8-small-config --$a9-small-exceptions --$a10-small-fragments --$verbose-verbose --$proxy-proxy"
# prepare the configure command-line parts
cxx="$TOOLCHAIN/uclibc/usr/uClibc++/bin/g++-uc"
cc="$TOOLCHAIN/gcc/2/bin/gcc-mips"
cppflags="-I$TOOLCHAIN/uclibc/usr/uClibc++/include"
cxxflags="-Os"
ldflags="-L$TOOLCHAIN/uclibc/usr/uClibc++/lib -Xlinker --dynamic-linker=$UCLIBC -Xlinker -Map -Xlinker /tmp/map"
cfg="../configure"
args_="--host=mipsel-elf-linux-gnu --enable-fhs --disable-gui --without-glob --without-openssl"
args_="$args_ --without-doxygen --without-man2html"
# run "configure"
if test "$sw" = ""
then
CXX="$cxx" CC="$cc" CPPFLAGS="$cppflags" CXXFLAGS="$cxxflags" LDFLAGS="$ldflags" $cfg $args_ $args
else
echo -n CXX=\"$cxx\" CC=\"$cc\" CPPFLAGS=\"$cppflags\" CXXFLAGS=\"$cxxflags\" LDFLAGS=\"$ldflags\" " "
echo $cfg $args_ $args
fi
exit
fi
# extra stuff for testing ...
Args()
{
for i_ in 1 2 3 4 5 6 7 8 9 10 11 12
do
if test $1 -ge $i_ ; then echo -n "enable " ; else echo -n "disable " ; fi
done
echo ''
}
if test "$sw" = "-a"
then
for i in 00 01 02 03 04 05 06 07 08 09 10 11 12
do
echo `dirname $0`/configure-mips.sh '"$@"' `Args $i` > configure-$i.sh
chmod +x configure-$i.sh
done
exit
fi
Make()
{
make distclean
rm -f src/main/emailrelay
./configure-$1.sh
grep '#' config.h | sed 's/^/:: /'
grep 'echo.*running.*configure' config.status | sed 's/^/++ /'
make -j 4
$TOOLCHAIN/binutils/bin/mipsel-elf-linux-gnu-strip src/main/emailrelay
ls -l src/main/emailrelay | sed 's/^/** /'
mv src/main/emailrelay emailrelay-$1
( cd src/main && make emailrelay && cp /tmp/map ../../map-$1 )
}
if test "$sw" = "-x"
then
for i in 00 01 02 03 04 05 06 07 08 09 10 11 12
do
Make $i > make-$i.out 2>&1
done
fi
if test "$sw" = "-z"
then
perl -e '
my %size = () ;
for $i ( qw/00 01 02 03 04 05 06 07 08 09 10 11 12/ )
{
my @part = split( /\s+/ , `ls -l emailrelay-$i` ) ;
$size{$i} = $part[4] ;
}
my @vv = qw/disable-debug disable-exec disable-auth disable-admin disable-identity disable-pop disable-dns enable-small-config enable-small-exceptions enable-small-fragments disable-verbose disable-proxy/ ;
my $previous ;
for $i ( sort keys %size )
{
my $n = $size{$i} ;
my $k = ( $n - $previous + 500 ) / 1000 ;
my $v = $vv[$i-1] ;
print "* \"--$v\" " , int($k) ,"k\n" if defined($previous) ;
$previous = $n ;
}'
fi

View File

@ -1,687 +0,0 @@
#
## Copyright (C) 2001-2008 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 3 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, see <http://www.gnu.org/licenses/>.
#
#
# Makefile / toolchain.mak
#
# A makefile for building a cross-compiling toolchain for little-endian
# mips ("mipsel") using:
#
# * gcc 3.4.6
# * linux 2.4.20
# * uclibc 0.9.27
# * uclibc++ 0.2.2
# * binutils 2.18-ubuntu
#
# These versions of linux and uclibc correspond to those pre-installed
# on the Buffalo WHR-G54S router as of late 2007. The version of gcc
# is 3.4.6 rather than 3.3.3 because of compiler bugs in the c++
# code generation.
#
# Usage: make -f toolchain.mak
#
# Note that, unlike other toolchain build scripts, the required source
# packages (linux, uclibc, etc) are not downloaded automatically, so
# the following package tarballs must be made available under the
# 'tar-dir' directory (see below):
#
# * uClibc-0.9.27.tar.bz2
# * uClibc++-0.2.2.tar.bz2
# * linux-2.4.20.tar.gz
# * binutils_2.18.orig.tar.gz
# * gcc-3.4.6.tar.bz2
# * gcc-core-3.4.6.tar.bz2
# * gcc-g++-3.4.6.tar.bz2
#
# Uses perl with the MIME::Base64 package to prepare patch files.
#
# The final cross-compiler ends up in "gcc/2/bin", with a gcc wrapper
# script for using uclibc++ in "uclibc/usr/uClibc++/bin".
#
# In addition to the cross-compiler there are various bits and bobs
# which are built to run on the target machine:
# * uclibc utilities in "uclibc/*/utils"
# * binutils under "binutils/build-for-target"
# * simple hello-world test programs in the cwd
#
# This makefile works by defining the following top-level build tasks:
# 1. binutils
# 2. linux headers -- simple untar and make config
# 3. gcc, pass 1 -- C only, no run-time library
# 4. uclibc -- built using gcc-1
# 5. gcc, pass 2 -- includes C++ language, refers to uclibc, builds stdlibc++-v3
# 6. uclibc++ -- built using gcc-2
# 7. test programs
#
# Top-level directories roughly correspond to the top-level build tasks:
# * gcc
# + gcc/gcc-x.x.x -- gcc source tree
# + gcc/build-1 -- gcc-1 build tree
# + gcc/1 -- gcc-1 install root
# + gcc/build-2 -- gcc-2 build tree
# + gcc/2 -- gcc-2 install root
# * uclibc -- uclibc/uclibc++ install root
# + uclibc/uClibc-x.x.x -- uclibc source and build tree
# + uclibc/uClibc++-x.x.x -- uclibc++ source and build tree
# * linux
# + linux/linux-x.x.x -- linux source tree
# * binutils -- binutils install root
# + binutils/binutils-x.x -- binutils source tree
# + binutils/build -- binutils build tree
#
# When a top-level build task completes a "done" file is created in an
# appropriate sub-directory. This "done" file is used for makefile
# dependencies between the top-level tasks, so "touch"-ing a "done"
# file can be used to trigger rebuilding of selected top-level
# build tasks.
#
# A key feature for this build system is that whole directory trees
# can be deleted in order to get them and their dependents to rebuild:
# if source trees are deleted they will get restored from the tar file,
# if build trees are deleted they will get rebuilt from source, if
# install trees are deleted they will get reinstalled, etc.
#
# Deleting directory trees is the preferred way to trigger rebuilds,
# but there are also a set of pseudo-targets defined to help with
# debugging this makefile.
#
# Note that "make clean" does not clean the binutils build. This
# is because the binutils build is only dependent on native tools
# so it tends to be very stable in comparison to the rest of the
# toolchain. A "make vclean" can be used to clean up everything,
# leaving (roughly speaking) only this makefile.
#
# Bzipped source tar files for the various packages must be made
# available in the directories configured below...
#
#####
# configure these...
tar_dir = /usr/share/data/packages
binutils_tar_dir = $(tar_dir)/development/binutils
gcc_tar_dir = $(tar_dir)/development/gcc
uclibc_tar_dir = $(tar_dir)/development/uclibc
linux_tar_dir = $(tar_dir)/linux
#####
# define TEE=|tee for more verbosity, but note that the pipe messes up the exit codes
TEE:=>
TEEE:=2>&1
# gnu sed, or a wrapper that supports --in-place
SED=sed
mk_root = $(shell pwd)
gcc_configure_1 = --program-suffix=-mips --with-gnu-as --with-gnu-ld --with-abi=32
gcc_configure_2 = --target=mipsel-elf-linux-gnu
gcc_configure_3 = --with-as=$(mk_root)/binutils/mipsel-elf-linux-gnu/bin/as
gcc_configure_4 = --with-ld=$(mk_root)/binutils/mipsel-elf-linux-gnu/bin/ld
gcc_configure = $(gcc_configure_1) $(gcc_configure_2) $(gcc_configure_3) $(gcc_configure_4)
gcc_1_configure = $(gcc_configure) --disable-threads --enable-languages=c --without-headers --with-newlib
gcc_2_configure = $(gcc_configure) --enable-languages=c,c++ --enable-sjlj-exceptions --enable-threads=posix --with-sysroot=$(mk_root)/uclibc
gcc_files = gcc/gcc-3.4.6/README
gcc_diff = gcc-3.4.6.diff
gcc_patch = gcc/gcc-3.4.6/.gcc_patch.done
gcc_1_config = gcc/build-1/Makefile
gcc_1_make = gcc/build-1/.gcc_1_make.done
gcc_1_install = gcc/1/.gcc_1_install.done
gcc_2_config = gcc/build-2/Makefile
gcc_2_make = gcc/build-2/.gcc_2_make.done
gcc_2_install = gcc/2/.gcc_2_install.done
binutils_files = binutils/binutils-2.18/README
binutils_config = binutils/build/Makefile
binutils_make = binutils/build/.binutils_make.done
binutils_install = binutils/.binutils_install.done
binutils_for_target_config = binutils/build-for-target/Makefile
binutils_for_target_make = binutils/build-for-target/.binutils_for_target_make.done
linux_files = linux/linux-2.4.20/README
linux_config = linux/linux-2.4.20/.config
uclibc_files = uclibc/uClibc-0.9.27/README
uclibc_config = uclibc/uClibc-0.9.27/.config
uclibc_patch = uclibc/uClibc-0.9.27/.uclibc_patch.done
uclibc_make = uclibc/uClibc-0.9.27/.uclibc_make.done
uclibc_install = uclibc/.uclibc_install.done
uclibc_for_target = uclibc/uClibc-0.9.27/utils/.uclibc_for_target.done
uclibcpp_files = uclibc/uClibc++-0.2.2/README
uclibcpp_patch = uclibc/uClibc++-0.2.2/.uclibcpp_patch.done
uclibcpp_config = uclibc/uClibc++-0.2.2/.config
uclibcpp_make = uclibc/uClibc++-0.2.2/.uclibcpp_make.done
uclibcpp_install = uclibc/.uclibcpp_install.done
test_c_for_target = test-c
test_cpp_for_target = test-c++
test_cpp_for_target_static = test-c++-s
test_cpp_for_target_uclibcpp = test-c++-u
tests = $(test_c_for_target) $(test_cpp_for_target) $(test_cpp_for_target_static) $(test_cpp_for_target_uclibcpp)
.PHONY: all
all: $(uclibc_for_target) $(binutils_for_target_make) $(tests) $(uclibcpp_install) configure-mips.sh
# ==
$(linux_files):
@echo
@echo ++ untaring linux
@mkdir linux 2>/dev/null || true
tar -C linux -xzf $(linux_tar_dir)/linux-2.4.20.tar.gz
@rm -f $(linux_config) 2>/dev/null || true
@touch $(linux_files)
$(linux_config): $(linux_files)
@echo
@echo ++ configuring linux
@cd linux/linux-2.4.20 && make oldconfig ARCH=mips $(TEE) ../../linux_config.out $(TEEE)
# ==
$(binutils_files):
@echo
@echo ++ untaring binutils
@mkdir binutils 2>/dev/null || true
tar -C binutils -xzf $(binutils_tar_dir)/binutils_2.18.orig.tar.gz
-zcat $(binutils_tar_dir)/binutils_2.18-0ubuntu3.diff.gz | ( cd binutils/binutils-2.18 && patch -p1 -s )
@rm -f $(binutils_config) 2>/dev/null || true
@touch $(binutils_files)
$(binutils_config): $(binutils_files)
@echo
@echo ++ configuring binutils
@if test -d binutils/build ; then : ; else mkdir binutils/build ; fi
@cd binutils/build && ../binutils-2.18/configure --prefix=`dirname \`pwd\`` --target=mipsel-elf-linux-gnu $(TEE) ../../binutils_config.out $(TEEE)
$(binutils_make): $(binutils_config)
@echo
@echo ++ building binutils
@cd binutils/build && make $(TEE) ../../binutils_make.out $(TEEE)
@touch $(binutils_make)
$(binutils_install): $(binutils_make)
@echo
@echo ++ installing binutils
@cd binutils/build && make install $(TEE) ../../binutils_install.out $(TEEE)
@touch $(binutils_install)
$(binutils_for_target_make): $(binutils_make) $(gcc_2_install) $(binutils_for_target_config)
@echo
@echo ++ building binutils for target
@cd binutils/build-for-target && PATH="`dirname \`pwd\``/bin:$$PATH" CC=`dirname \`pwd\``/../gcc/2/bin/gcc-mips make LDFLAGS="-Xlinker --dynamic-linker=/lib/ld-uClibc.so.0" $(TEE) ../../binutils_for_target_make.out $(TEEE)
@touch $(binutils_for_target_make)
$(binutils_for_target_config):
@echo
@echo ++ configuring binutils for target
@if test -d binutils/build-for-target ; then : ; else mkdir binutils/build-for-target ; fi
@cd binutils/build-for-target && PATH="`dirname \`pwd\``/bin:$$PATH" CC=`dirname \`pwd\``/../gcc/2/bin/gcc-mips ../binutils-2.18/configure --with-build-time-tools=`dirname \`pwd\``/bin --with-build-sysroot=`dirname \`pwd\``/../uclibc --target=mipsel-elf-linux-gnu --host=mipsel-elf-linux-gnu $(TEE) ../../binutils_for_target_config.out $(TEEE)
@$(SED) -e 's/^CFLAGS_FOR_BUILD *=.*/CFLAGS_FOR_BUILD = /' --in-place binutils/build-for-target/Makefile
# ==
$(uclibc_files):
@echo
@echo ++ untaring uclibc
@mkdir uclibc 2>/dev/null || true
tar -C uclibc -xjf $(uclibc_tar_dir)/uClibc-0.9.27.tar.bz2
@touch $(uclibc_files)
$(uclibc_config): $(uclibc_files) $(linux_config) $(gcc_1_install)
@echo
@echo ++ configuring uclibc
@$(SED) -e 's/\( *\)default TARGET_i386/\1default TARGET_mips/' --in-place=.orig uclibc/uClibc-0.9.27/extra/Configs/Config.in
@cd uclibc/uClibc-0.9.27 && make defconfig $(TEE) ../../uclibc_config.out $(TEEE)
@$(SED) -e 's:^KERNEL_SOURCE=.*:KERNEL_SOURCE="'"`pwd`/linux/linux-2.4.20"'":' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:^SHARED_LIB_LOADER_PREFIX=.*:SHARED_LIB_LOADER_PREFIX="'"/lib"'":' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:^RUNTIME_PREFIX=.*:RUNTIME_PREFIX="'"`pwd`/uclibc"'":' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:^DEVEL_PREFIX=.*:DEVEL_PREFIX="'"`pwd`/uclibc/usr"'":' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:^LDSO_BASE_FILENAME=.*:LDSO_BASE_FILENAME="'"ld-uClibc.so"'":' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*CONFIG_MIPS_ISA_MIPS32.*:CONFIG_MIPS_ISA_MIPS32=y:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:^CONFIG_MIPS_ISA_1.*:# CONFIG_MIPS_ISA_1 is not set:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_WCHAR.*:UCLIBC_HAS_WCHAR=y:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_LOCALE.*:# UCLIBC_HAS_LOCALE is not set:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_TM_EXTENSIONS.*:# UCLIBC_HAS_TM_EXTENSIONS is not set:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_RPC.*:UCLIBC_HAS_RPC=y\nUCLIBC_HAS_FULL_RPC=y:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_FULL_RPC.*:UCLIBC_HAS_FULL_RPC=y:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_CTYPE_TABLES.*:UCLIBC_HAS_CTYPE_TABLES=y:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_CTYPE_SIGNED.*:# UCLIBC_HAS_CTYPE_SIGNED is not set:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_CTYPE_UNSAFE.*:# UCLIBC_HAS_CTYPE_UNSAFE is not set:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_GLIBC_CUSTOM_PRINTF.*:UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_HEXADECIMAL_FLOATS.*:# UCLIBC_HAS_HEXADECIMAL_FLOATS is not set:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_GLIBC_CUSTOM_STREAMS.*:UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UNIX98PTY_ONLY.*:# UNIX98PTY_ONLY is not set:' --in-place uclibc/uClibc-0.9.27/.config
@$(SED) -e 's:.*UCLIBC_HAS_FTW.*:UCLIBC_HAS_FTW=y:' --in-place uclibc/uClibc-0.9.27/.config
@rm uclibc/uClibc-0.9.27/include/bits/uClibc_config.h 2>/dev/null || true
$(uclibc_patch): $(uclibc_files)
@echo
@echo ++ patching uclibc
@: # no patching required -- it used to add -EL to Rules.mak
@touch $(uclibc_patch)
$(uclibc_make): $(uclibc_config) $(uclibc_patch)
@echo
@echo ++ building uclibc
@cd uclibc/uClibc-0.9.27 && echo PATH=\"`pwd`/../../binutils/bin:$$PATH\" make CROSS=mipsel-elf-linux-gnu- CC=`pwd`/../../gcc/1/bin/gcc-mips \"$$\@\" > make.sh # for convenience
@cd uclibc/uClibc-0.9.27 && PATH="`pwd`/../../binutils/bin:$$PATH" make CROSS=mipsel-elf-linux-gnu- CC=`pwd`/../../gcc/1/bin/gcc-mips $(TEE) ../../uclibc_make.out $(TEEE)
@touch $(uclibc_make)
$(uclibc_install): $(uclibc_make)
@echo
@echo ++ installing uclibc
@cd uclibc/uClibc-0.9.27 && PATH="`pwd`/../../binutils/bin:$$PATH" make CROSS=mipsel-elf-linux-gnu- CC=`pwd`/../../gcc/1/bin/gcc-mips install $(TEE) ../../uclibc_install.out $(TEEE)
@touch $(uclibc_install)
$(uclibc_for_target): $(gcc_2_install) $(uclibc_make)
@echo
@echo ++ building uclibc utils
@cd uclibc/uClibc-0.9.27/utils && PATH="`pwd`/../../../binutils/bin:$$PATH" make CROSS=mipsel-elf-linux-gnu- CC=`pwd`/../../../gcc/2/bin/gcc-mips clean > /dev/null
@cd uclibc/uClibc-0.9.27/utils && PATH="`pwd`/../../../binutils/bin:$$PATH" make CROSS=mipsel-elf-linux-gnu- CC=`pwd`/../../../gcc/2/bin/gcc-mips CFLAGS="-static" RUNTIME_PREFIX=/ $(TEE) ../../../uclibc_for_target_make.out $(TEEE)
@touch $(uclibc_for_target)
# ==
$(uclibcpp_files):
@echo
@echo ++ untaring uclibc++
@mkdir uclibc 2>/dev/null || true
tar -C uclibc -xjf $(uclibc_tar_dir)/uClibc++-0.2.2.tar.bz2
@touch $(uclibcpp_files)
$(uclibcpp_patch): $(uclibcpp_files)
@echo
@echo ++ patching uclibc++
@: no-op
@touch $(uclibcpp_patch)
$(uclibcpp_config): $(uclibcpp_patch) $(uclibc_config)
@echo
@echo ++ configuring uclibc++
@cd uclibc/uClibc++-0.2.2 && make defconfig $(TEE) ../../uclibcpp_config.out $(TEEE)
@$(SED) 's:.*UCLIBCXX_HAS_LONG_DOUBLE.*:# UCLIBCXX_HAS_LONG_DOUBLE is not set:' --in-place uclibc/uClibc++-0.2.2/.config
@$(SED) 's:.*UCLIBCXX_HAS_TLS.*:# UCLIBCXX_HAS_TLS is not set:' --in-place uclibc/uClibc++-0.2.2/.config
@$(SED) 's:.*UCLIBCXX_HAS_LFS.*:# UCLIBCXX_HAS_LFS is not set:' --in-place uclibc/uClibc++-0.2.2/.config
@rm -f uclibc/uClibc++-0.2.2/include/system_configuration.h
$(uclibcpp_make): $(uclibcpp_config) $(gcc_2_install)
@echo
@echo ++ building uclibc++
@cd uclibc/uClibc++-0.2.2 && echo PATH="$(mk_root)/binutils/bin:$$PATH" make CROSS=mipsel-elf-linux-gnu- CXX=$(mk_root)/gcc/2/bin/g++-mips CC=$(mk_root)/gcc/2/bin/gcc-mips LIBS=\"-lc -Bstatic -ldl_pic\" \"$$\@\" > make.sh
@cd uclibc/uClibc++-0.2.2 && PATH="$(mk_root)/binutils/bin:$$PATH" make CROSS=mipsel-elf-linux-gnu- CXX=$(mk_root)/gcc/2/bin/g++-mips CC=$(mk_root)/gcc/2/bin/gcc-mips LIBS="-lc -Bstatic -ldl_pic" $(TEE) ../../uclibcpp_make.out $(TEEE)
@touch $(uclibcpp_make)
$(uclibcpp_install): $(uclibcpp_make) $(uclibc_config)
@echo
@echo ++ installing uclibc++
@cd uclibc/uClibc++-0.2.2 && PATH="`pwd`/../../binutils/bin:$$PATH" make CROSS=mipsel-elf-linux-gnu- CC=`pwd`/../../gcc/2/bin/gcc-mips DESTDIR=$(mk_root)/uclibc install $(TEE) ../../uclibcpp_install.out $(TEEE)
@touch $(uclibcpp_install)
# ==
$(gcc_files):
@echo
@echo ++ untaring gcc
@mkdir gcc 2>/dev/null || true
tar -C gcc -xjf $(gcc_tar_dir)/gcc-3.4.6.tar.bz2
tar -C gcc -xjf $(gcc_tar_dir)/gcc-core-3.4.6.tar.bz2
tar -C gcc -xjf $(gcc_tar_dir)/gcc-g++-3.4.6.tar.bz2
@touch $(gcc_files)
$(gcc_patch): $(gcc_files) $(gcc_diff)
@echo
@echo ++ patching gcc
@f=`echo gcc-3.4.6|tr -d .`.diff ; if test -f $$f ; then cat $$f | ( cd gcc/gcc-3.4.6 && patch -p1 -N -s ) ; fi
@touch $(gcc_patch)
$(gcc_1_config): $(gcc_patch) $(binutils_install)
@echo
@echo ++ configuring gcc 1
@if test -d gcc/build-1 ; then : ; else mkdir gcc/build-1 ; fi
@echo configure --prefix=$(mk_root)/gcc/1 $(gcc_1_configure)
@cd gcc/build-1 && ../gcc-3.4.6/configure --prefix=$(mk_root)/gcc/1 $(gcc_1_configure) $(TEE) ../../gcc_1_config.out $(TEEE)
$(gcc_1_make): $(gcc_1_config)
@echo
@echo ++ building gcc 1
@for f in binutils/mips*/bin/* ; do ( cd gcc/build-1 && ln -fs ../../$$f `basename $$f`-mips ) ; done
@mkdir -p gcc/build-1/gcc
@touch gcc/build-1/gcc/crti.o
@touch gcc/build-1/gcc/crtn.o
@touch gcc/build-1/gcc/libc.a
@cd gcc/build-1 && PATH="`pwd`:$$PATH" make $(TEE) ../../gcc_1_make.out $(TEEE)
@touch $(gcc_1_make)
$(gcc_1_install): $(gcc_1_make)
@echo
@echo ++ installing gcc 1
@cd gcc/build-1 && PATH="`pwd`:$$PATH" make install $(TEE) ../../gcc_1_install.out $(TEEE)
@if test -f gcc/1/bin/mipsel-elf-linux-gnu-gcc -a ! -h gcc/1/bin/gcc-mips ; then ( cd gcc/1/bin && ln -s mipsel-elf-linux-gnu-gcc gcc-mips ) ; fi # for gcc-3.3.x
@touch $(gcc_1_install)
$(gcc_2_config): $(gcc_1_install) $(uclibc_install)
@echo
@echo ++ configuring gcc 2
@if test -d gcc/build-2 ; then : ; else mkdir gcc/build-2 ; fi
@echo configure --prefix=$(mk_root)/gcc/2 $(gcc_2_configure)
@cd gcc/build-2 && CXXFLAGS=-g ../gcc-3.4.6/configure --prefix=$(mk_root)/gcc/2 $(gcc_2_configure) $(TEE) ../../gcc_2_config.out $(TEEE)
$(gcc_2_make): $(gcc_2_config)
@echo
@echo ++ building gcc 2
@for f in binutils/mips*/bin/* ; do ( cd gcc/build-2 && ln -fs ../../$$f `basename $$f`-mips ) ; done
@cd gcc/build-2 && PATH="`pwd`:$$PATH" make $(TEE) ../../gcc_2_make.out $(TEEE)
@touch $(gcc_2_make)
$(gcc_2_install): $(gcc_2_make)
@echo
@echo ++ installing gcc 2
@cd gcc/build-2 && PATH="`pwd`:$$PATH" make install $(TEE) ../../gcc_2_install.out $(TEEE)
@if test -f gcc/2/bin/mipsel-elf-linux-gnu-gcc -a ! -h gcc/2/bin/gcc-mips ; then ( cd gcc/2/bin && ln -s mipsel-elf-linux-gnu-gcc gcc-mips ) ; fi # for gcc-3.3.x
@if test -f gcc/2/bin/mipsel-elf-linux-gnu-g++ -a ! -h gcc/2/bin/g++-mips ; then ( cd gcc/2/bin && ln -s mipsel-elf-linux-gnu-g++ g++-mips ) ; fi # for gcc-3.3.x
@touch $(gcc_2_install)
$(gcc_diff): gcc-334.diff gcc-343.diff gcc-336.diff gcc-346.diff
@cp `echo gcc-3.4.6 | tr -d .`.diff $(gcc_diff)
gcc-334.diff.tmp:
@:
@: # magic patch to mips/linux.h
@:
@echo ZGlmZiAtTmF1ciBvbGQvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggbmV3L2djYy9jb25maWcvbWlw > $@
@echo cy9saW51eC5oCg== >> $@
@echo LS0tIG9sZC9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDA3LTExLTI5IDE0OjUyOjI1LjAwMDAw >> $@
@echo MDAwMCArMDAwMAo= >> $@
@echo KysrIG5ldy9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDA3LTExLTI5IDE0OjU0OjI5LjAwMDAw >> $@
@echo MDAwMCArMDAwMAo= >> $@
@echo QEAgLTIzOCwxMCArMjM4LDggQEAK >> $@
@echo ICAgIHBzZXVkby1vcHMuICAqLwo= >> $@
@echo ICNkZWZpbmUgRlVOQ1RJT05fTkFNRV9BTFJFQURZX0RFQ0xBUkVECg== >> $@
@echo IAo= >> $@
@echo LSNkZWZpbmUgQVNNX1BSRUZFUlJFRF9FSF9EQVRBX0ZPUk1BVChDT0RFLCBHTE9CQUwpICAgICAg >> $@
@echo IAkJXAo= >> $@
@echo LSAgKGZsYWdfcGljCQkJCQkJCQlcCg== >> $@
@echo LSAgICA/ICgoR0xPQkFMKSA/IERXX0VIX1BFX2luZGlyZWN0IDogMCkgfCBEV19FSF9QRV9wY3Jl >> $@
@echo bCB8IERXX0VIX1BFX3NkYXRhNFwK >> $@
@echo LSAgIDogRFdfRUhfUEVfYWJzcHRyKQo= >> $@
@echo Ky8qIGdodyBHSFcgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDYvbXNn >> $@
@echo MDA5NzAuaHRtbCAqLwo= >> $@
@echo KyNkZWZpbmUgQVNNX1BSRUZFUlJFRF9FSF9EQVRBX0ZPUk1BVChDT0RFLCBHTE9CQUwpIERXX0VI >> $@
@echo X1BFX2Fic3B0cgo= >> $@
@echo IAo= >> $@
@echo IC8qIFRoZSBnbGliYyBfbWNvdW50IHN0dWIgd2lsbCBzYXZlICR2MCBmb3IgdXMuICBEb24ndCBt >> $@
@echo ZXNzIHdpdGggc2F2aW5nCg== >> $@
@echo ICAgIGl0LCBzaW5jZSBBU01fT1VUUFVUX1JFR19QVVNIL0FTTV9PVVRQVVRfUkVHX1BPUCBkbyBu >> $@
@echo b3Qgd29yayBpbiB0aGUK >> $@
@:
@: # ctype map data-type patch for c++
@:
@echo ZGlmZiAtTmF1ciBvbGQvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFz >> $@
@echo ZS5oIG5ldy9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgK >> $@
@echo LS0tIG9sZC9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgJMjAw >> $@
@echo Ny0xMi0wNyAxMzo1OTo1Mi4wMDAwMDAwMDAgKzAwMDAK >> $@
@echo KysrIG5ldy9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgJMjAw >> $@
@echo Ny0xMi0wNyAxNDowMDoyNC4wMDAwMDAwMDAgKzAwMDAK >> $@
@echo QEAgLTM2LDcgKzM2LDcgQEAK >> $@
@echo ICAgc3RydWN0IGN0eXBlX2Jhc2UK >> $@
@echo ICAgewo= >> $@
@echo ICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCg== >> $@
@echo LSAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7Cg== >> $@
@echo KyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KiAJCV9fdG9fdHlwZTsK >> $@
@echo IAo= >> $@
@echo ICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBh >> $@
@echo cnRpY3VsYXIgc2l6ZQo= >> $@
@echo ICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBh >> $@
@echo biBlbnVtLgo= >> $@
gcc-334.diff: gcc-334.diff.tmp
@perl -e 'use MIME::Base64;while(<>){print MIME::Base64::decode_base64($$_)}'< $< >.tmp && mv .tmp $@
gcc-343.diff: gcc-343.diff.tmp
@perl -e 'use MIME::Base64;while(<>){print MIME::Base64::decode_base64($$_)}'< $< >.tmp && mv .tmp $@
gcc-343.diff.tmp:
@:
@: # ctype map data-type patch for c++
@:
@echo ZGlmZiAtTmF1ciBvbGQvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFz > $@
@echo ZS5oIG5ldy9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgK >> $@
@echo LS0tIG9sZC9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgJMjAw >> $@
@echo Ny0xMi0wMyAxNjoyNzowMy4wMDAwMDAwMDAgKzAwMDAK >> $@
@echo KysrIG5ldy9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgJMjAw >> $@
@echo Ny0xMi0wMyAxNjoyODowMS4wMDAwMDAwMDAgKzAwMDAK >> $@
@echo QEAgLTM3LDcgKzM3LDcgQEAK >> $@
@echo ICAgc3RydWN0IGN0eXBlX2Jhc2UK >> $@
@echo ICAgewo= >> $@
@echo ICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCg== >> $@
@echo LSAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7Cg== >> $@
@echo KyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KiAJCV9fdG9fdHlwZTsK >> $@
@echo IAo= >> $@
@echo ICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBh >> $@
@echo cnRpY3VsYXIgc2l6ZQo= >> $@
@echo ICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBh >> $@
@echo biBlbnVtLgo= >> $@
gcc-336.diff: gcc-334.diff
@cp $< $@
gcc-346.diff: gcc-346.diff.tmp
@perl -e 'use MIME::Base64;while(<>){print MIME::Base64::decode_base64($$_)}'< $< >.tmp && mv .tmp $@
gcc-346.diff.tmp:
@:
@: # ctype map data-type patch for c++
@:
@echo ZGlmZiAtTmF1ciBvbGQvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFz > $@
@echo ZS5oIG5ldy9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgK >> $@
@echo LS0tIG9sZC9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgJMjAw >> $@
@echo Ny0xMi0wMyAxNjoyNzowMy4wMDAwMDAwMDAgKzAwMDAK >> $@
@echo KysrIG5ldy9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgJMjAw >> $@
@echo Ny0xMi0wMyAxNjoyODowMS4wMDAwMDAwMDAgKzAwMDAK >> $@
@echo QEAgLTM3LDcgKzM3LDcgQEAK >> $@
@echo ICAgc3RydWN0IGN0eXBlX2Jhc2UK >> $@
@echo ICAgewo= >> $@
@echo ICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCg== >> $@
@echo LSAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7Cg== >> $@
@echo KyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KiAJCV9fdG9fdHlwZTsK >> $@
@echo IAo= >> $@
@echo ICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBh >> $@
@echo cnRpY3VsYXIgc2l6ZQo= >> $@
@echo ICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBh >> $@
@echo biBlbnVtLgo= >> $@
@:
@: # hack in an implementation of finitef
@:
@echo ZGlmZiAtTmF1ciBvbGQvbGlic3RkYysrLXYzL3NyYy9jdHlwZS5jYyBuZXcvbGlic3RkYysrLXYz >> $@
@echo L3NyYy9jdHlwZS5jYwo= >> $@
@echo LS0tIG9sZC9saWJzdGRjKystdjMvc3JjL2N0eXBlLmNjCTIwMDctMTItMTAgMTM6NTA6NDAuMDAw >> $@
@echo MDAwMDAwICswMDAwCg== >> $@
@echo KysrIG5ldy9saWJzdGRjKystdjMvc3JjL2N0eXBlLmNjCTIwMDctMTItMTAgMTM6NDg6MjUuMDAw >> $@
@echo MDAwMDAwICswMDAwCg== >> $@
@echo QEAgLTExMiwzICsxMTIsNCBAQAo= >> $@
@echo ICNlbmRpZgo= >> $@
@echo IH0gLy8gbmFtZXNwYWNlIHN0ZAo= >> $@
@echo IAo= >> $@
@echo K2V4dGVybiAiQyIgaW50IGZpbml0ZWYoZmxvYXQgeCkgeyB1bmlvbiB7dV9pbnQzMl90IGx2YWw7 >> $@
@echo ZmxvYXQgZnZhbDt9IHo7ei5mdmFsPXg7cmV0dXJuICgoei5sdmFsJjB4N2Y4MDAwMDApIT0weDdm >> $@
@echo ODAwMDAwKTt9IC8qIGdodyBHSFcgKi8K >> $@
# ==
test.c:
@echo '#include <stdio.h>' > $@
@echo 'int main() { printf("Hello, world!\\n") ; return 0 ; }' >> $@
test.cpp:
@echo '#include <iostream>' > $@
@echo 'int main() { std::cout << "Hello, world!" << std::endl ; return 0 ; }' >> $@
$(test_c_for_target): test.c $(gcc_2_install)
@echo
@echo ++ testing c
gcc/2/bin/gcc-mips -Xlinker --dynamic-linker=/lib/ld-uClibc.so.0 -o $@ test.c -lm
$(test_cpp_for_target): test.cpp $(gcc_2_install)
@echo
@echo ++ testing c++
gcc/2/bin/g++-mips -Xlinker --dynamic-linker=/lib/ld-uClibc.so.0 -o $@ test.cpp -lgcc_s -ldl_pic
$(test_cpp_for_target_static): test.cpp $(gcc_2_install)
@echo
@echo ++ testing c++ all-static
gcc/build-2/mipsel-elf-linux-gnu/libstdc++-v3/libtool --quiet --tag=CXX --mode=link gcc/2/bin/g++-mips -all-static -Xlinker --dynamic-linker=/lib/ld-uClibc.so.0 -o $@ test.cpp -lgcc_eh -ldl
$(test_cpp_for_target_uclibcpp): test.cpp $(uclibcpp_install)
@echo
@echo ++ testing uclibc++
uclibc/usr/uClibc++/bin/g++-uc -Xlinker --dynamic-linker=/lib/ld-uClibc.so.0 -Iuclibc/usr/uClibc++/include -Luclibc/usr/uClibc++/lib -o $@ test.cpp
configure-mips.sh:
@test -f configure-mips.sh_ && cp configure-mips.sh_ $@ && chmod +x $@ || true
# ==
.PHONY: vclean
vclean: clean clean_binutils
@rm -f *.out
@rm -f *.tmp
.PHONY: clean_binutils
clean_binutils:
@rm $(binutils_make) 2>/dev/null || true
@rm $(binutils_install) 2>/dev/null || true
@rm $(binutils_for_target_make) 2>/dev/null || true
@rm -rf binutils/binutils-2.18
@rm -rf binutils/build
@rm -rf binutils/bin binutils/info binutils/lib binutils/man binutils/mips*-elf-linux-gnu binutils/share
@rm -rf binutils/build-for-target
@if test -d binutils ; then rmdir binutils ; fi
.PHONY: clean
clean:
@rm $(gcc_1_make) 2>/dev/null || true
@rm $(gcc_1_install) 2>/dev/null || true
@rm $(gcc_2_make) 2>/dev/null || true
@rm $(gcc_2_install) 2>/dev/null || true
@rm $(uclibc_patch) 2>/dev/null || true
@rm $(uclibc_make) 2>/dev/null || true
@rm $(uclibc_install) 2>/dev/null || true
@rm $(uclibcpp_install) 2>/dev/null || true
@rm $(uclibc_for_target) 2>/dev/null || true
@rm -rf linux/linux-2.4.20
@rm -rf uclibc/uClibc-0.9.27
@rm -rf uclibc/uClibc++-0.2.2
@rm -rf uclibc/lib uclibc/usr uclibc/sbin
@rm -rf gcc/gcc-3.*
@rm -rf gcc/build-1
@rm -rf gcc/build-2
@rm -rf gcc/1
@rm -rf gcc/2
@rm -f gcc*.diff
@rm -f *diff.tmp
@if test -d linux ; then rmdir linux ; fi
@if test -d uclibc ; then rmdir uclibc ; fi
@if test -d gcc ; then rmdir gcc ; fi
.PHONY: done
done:
touch $(linux_files) || true
touch $(linux_config) || true
touch $(gcc_files) || true
touch $(gcc_diff) || true
touch $(gcc_patch) || true
touch $(gcc_1_config) || true
touch $(gcc_1_make) || true
touch $(gcc_1_install) || true
touch $(binutils_files) || true
touch $(binutils_config) || true
touch $(binutils_make) || true
touch $(binutils_install) || true
touch $(uclibc_files) || true
touch $(uclibc_config) || true
touch $(uclibc_patch) || true
touch $(uclibc_make) || true
touch $(uclibc_install) || true
touch $(gcc_2_config) || true
touch $(gcc_2_make) || true
touch $(gcc_2_install) || true
touch $(binutils_for_target_config) || true
touch $(binutils_for_target_make) || true
touch $(uclibc_for_target) || true
.PHONY: gcc_files
.PHONY: gcc_diff
.PHONY: gcc_patch
.PHONY: gcc_1_config
.PHONY: gcc_1_make
.PHONY: gcc_1_install
.PHONY: gcc_2_config
.PHONY: gcc_2_make
.PHONY: gcc_2_install
.PHONY: binutils_files
.PHONY: binutils_config
.PHONY: binutils_make
.PHONY: binutils_install
.PHONY: binutils_for_target_config
.PHONY: binutils_for_target_make
.PHONY: linux_files
.PHONY: linux_config
.PHONY: uclibc_files
.PHONY: uclibc_config
.PHONY: uclibc_patch
.PHONY: uclibc_make
.PHONY: uclibc_install
.PHONY: uclibc_for_target
.PHONY: uclibcpp_files
.PHONY: uclibcpp_patch
.PHONY: uclibcpp_config
.PHONY: uclibcpp_make
.PHONY: uclibcpp_install
gcc_files: $(gcc_files)
gcc_diff: $(gcc_diff)
gcc_patch: $(gcc_patch)
gcc_1_config: $(gcc_1_config)
gcc_1_make: $(gcc_1_make)
gcc_1_install: $(gcc_1_install)
gcc_2_config: $(gcc_2_config)
gcc_2_make: $(gcc_2_make)
gcc_2_install: $(gcc_2_install)
binutils_files: $(binutils_files)
binutils_config: $(binutils_config)
binutils_make: $(binutils_make)
binutils_install: $(binutils_install)
binutils_for_target_config: $(binutils_for_target_config)
binutils_for_target_make: $(binutils_for_target_make)
linux_files: $(linux_files)
linux_config: $(linux_config)
uclibc_files: $(uclibc_files)
uclibc_config: $(uclibc_config)
uclibc_patch: $(uclibc_patch)
uclibc_make: $(uclibc_make)
uclibc_install: $(uclibc_install)
uclibc_for_target: $(uclibc_for_target)
uclibcpp_files: $(uclibcpp_files)
uclibcpp_patch: $(uclibcpp_patch)
uclibcpp_config: $(uclibcpp_config)
uclibcpp_make: $(uclibcpp_make)
uclibcpp_install: $(uclibcpp_install)

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# install - install a program, script, or datafile # install - install a program, script, or datafile
scriptversion=2006-12-25.00 scriptversion=2011-01-19.21; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was # This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the # later released in X11R6 (xc/config/util/install.sh) with the
@ -156,6 +156,10 @@ while test $# -ne 0; do
-s) stripcmd=$stripprog;; -s) stripcmd=$stripprog;;
-t) dst_arg=$2 -t) dst_arg=$2
# Protect names problematic for `test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
shift;; shift;;
-T) no_target_directory=true;; -T) no_target_directory=true;;
@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
fi fi
shift # arg shift # arg
dst_arg=$arg dst_arg=$arg
# Protect names problematic for `test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
done done
fi fi
@ -200,7 +208,11 @@ if test $# -eq 0; then
fi fi
if test -z "$dir_arg"; then if test -z "$dir_arg"; then
trap '(exit $?); exit' 1 2 13 15 do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
trap "ret=141; $do_exit" 13
trap "ret=143; $do_exit" 15
# Set umask so as not to create temps with too-generous modes. # Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps. # However, 'strip' requires both read and write access to temps.
@ -228,9 +240,9 @@ fi
for src for src
do do
# Protect names starting with `-'. # Protect names problematic for `test' and other utilities.
case $src in case $src in
-*) src=./$src;; -* | [=\(\)!]) src=./$src;;
esac esac
if test -n "$dir_arg"; then if test -n "$dir_arg"; then
@ -252,12 +264,7 @@ do
echo "$0: no destination specified." >&2 echo "$0: no destination specified." >&2
exit 1 exit 1
fi fi
dst=$dst_arg dst=$dst_arg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst;;
esac
# If destination is a directory, append the input filename; won't work # If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored. # if double slashes aren't ignored.
@ -385,7 +392,7 @@ do
case $dstdir in case $dstdir in
/*) prefix='/';; /*) prefix='/';;
-*) prefix='./';; [-=\(\)!]*) prefix='./';;
*) prefix='';; *) prefix='';;
esac esac
@ -403,7 +410,7 @@ do
for d for d
do do
test -z "$d" && continue test X"$d" = X && continue
prefix=$prefix$d prefix=$prefix$d
if test -d "$prefix"; then if test -d "$prefix"; then
@ -515,5 +522,6 @@ done
# eval: (add-hook 'write-file-hooks 'time-stamp) # eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion=" # time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$" # time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End: # End:

View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am. # Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -18,8 +19,9 @@
# #
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
@ -42,6 +44,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES = SOURCES =
DIST_SOURCES = DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@ -53,10 +56,38 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
ps-recursive uninstall-recursive ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir
ETAGS = etags ETAGS = etags
CTAGS = ctags CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS) DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AR = @AR@ AR = @AR@
@ -81,9 +112,9 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
GREP = @GREP@ GREP = @GREP@
GZIP = @GZIP@ GZIP = @GZIP@
G_CAPABILITIES = @G_CAPABILITIES@
HAVE_DOXYGEN = @HAVE_DOXYGEN@ HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@ HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@ -106,9 +137,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PAM_INCLUDE = @PAM_INCLUDE@
PAM_LIBS = @PAM_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
QT_CFLAGS = @QT_CFLAGS@ QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@ QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -119,6 +155,7 @@ STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@ STATIC_START = @STATIC_START@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ZLIB_LIBS = @ZLIB_LIBS@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@ abs_top_builddir = @abs_top_builddir@
@ -139,8 +176,10 @@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
e_docdir = @e_docdir@ e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@ e_examplesdir = @e_examplesdir@
e_icondir = @e_icondir@
e_initdir = @e_initdir@ e_initdir = @e_initdir@
e_libexecdir = @e_libexecdir@ e_libexecdir = @e_libexecdir@
e_pamdir = @e_pamdir@
e_qtmoc = @e_qtmoc@ e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@ e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@ e_sysconfdir = @e_sysconfdir@
@ -166,6 +205,7 @@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
SUBDIRS = gcc2.95 msvc6.0 SUBDIRS = gcc2.95 msvc6.0
@ -176,14 +216,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& exit 0; \ && { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/Makefile $(AUTOMAKE) --gnu lib/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -201,6 +241,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
# This directory's subdirectories are mostly independent; you can cd # This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile. # into them and run `make' without going through this Makefile.
@ -209,7 +250,7 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
# (which will cause the Makefiles to be regenerated when you run `make'); # (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line. # (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS): $(RECURSIVE_TARGETS):
@failcom='exit 1'; \ @fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \ for f in x $$MAKEFLAGS; do \
case $$f in \ case $$f in \
*=* | --[!k]*);; \ *=* | --[!k]*);; \
@ -226,7 +267,7 @@ $(RECURSIVE_TARGETS):
else \ else \
local_target="$$target"; \ local_target="$$target"; \
fi; \ fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \ || eval $$failcom; \
done; \ done; \
if test "$$dot_seen" = "no"; then \ if test "$$dot_seen" = "no"; then \
@ -234,7 +275,7 @@ $(RECURSIVE_TARGETS):
fi; test -z "$$fail" fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS): $(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \ @fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \ for f in x $$MAKEFLAGS; do \
case $$f in \ case $$f in \
*=* | --[!k]*);; \ *=* | --[!k]*);; \
@ -260,16 +301,16 @@ $(RECURSIVE_CLEAN_TARGETS):
else \ else \
local_target="$$target"; \ local_target="$$target"; \
fi; \ fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \ || eval $$failcom; \
done && test -z "$$fail" done && test -z "$$fail"
tags-recursive: tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done done
ctags-recursive: ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@ -277,14 +318,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique mkid -fID $$unique
tags: TAGS tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
tags=; \ set x; \
here=`pwd`; \ 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; \ include_option=--etags-include; \
@ -296,7 +337,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \ if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \ test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \ fi; \
done; \ done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@ -305,29 +346,34 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \ test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ if test $$# -gt 0; then \
$$tags $$unique; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi fi
ctags: CTAGS ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) $(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \ done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \ END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \ test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique $$unique
GTAGS: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \ here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \ && $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here && gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags: distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -348,29 +394,44 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d "$(distdir)/$$file"; then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \ if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \ test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \ || exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \ fi; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ done
(cd $$subdir && \ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \ $(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \ top_distdir="$$new_top_distdir" \
distdir="$$distdir/$$subdir" \ distdir="$$new_distdir" \
am__remove_distdir=: \ am__remove_distdir=: \
am__skip_length_check=: \ am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \ distdir) \
|| exit 1; \ || exit 1; \
fi; \ fi; \
@ -390,16 +451,22 @@ install-am: all-am
installcheck: installcheck-recursive installcheck: installcheck-recursive
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@ -418,6 +485,8 @@ dvi-am:
html: html-recursive html: html-recursive
html-am:
info: info-recursive info: info-recursive
info-am: info-am:
@ -426,18 +495,28 @@ install-data-am:
install-dvi: install-dvi-recursive install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-recursive install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive install-info: install-info-recursive
install-info-am:
install-man: install-man:
install-pdf: install-pdf-recursive install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive install-ps: install-ps-recursive
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-recursive maintainer-clean: maintainer-clean-recursive
@ -458,8 +537,8 @@ ps-am:
uninstall-am: uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
install-strip install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic ctags \ all all-am check check-am clean clean-generic ctags \
@ -474,6 +553,7 @@ uninstall-am:
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
tags-recursive uninstall uninstall-am tags-recursive uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

View File

@ -1,9 +1,9 @@
# #
## Copyright (C) 2001-2008 Graeme Walker <graeme_walker@users.sourceforge.net> ## Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
## ##
## This program is free software: you can redistribute it and/or modify ## 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 ## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or ## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version. ## (at your option) any later version.
## ##
## This program is distributed in the hope that it will be useful, ## This program is distributed in the hope that it will be useful,

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am. # Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -18,8 +19,9 @@
# #
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
@ -42,6 +44,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES = SOURCES =
DIST_SOURCES = DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@ -69,9 +72,9 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FRAGMENTS_LIST = @FRAGMENTS_LIST@
GREP = @GREP@ GREP = @GREP@
GZIP = @GZIP@ GZIP = @GZIP@
G_CAPABILITIES = @G_CAPABILITIES@
HAVE_DOXYGEN = @HAVE_DOXYGEN@ HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_MAN2HTML = @HAVE_MAN2HTML@ HAVE_MAN2HTML = @HAVE_MAN2HTML@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
@ -94,9 +97,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PAM_INCLUDE = @PAM_INCLUDE@
PAM_LIBS = @PAM_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
QT_CFLAGS = @QT_CFLAGS@ QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@ QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -107,6 +115,7 @@ STATIC_END = @STATIC_END@
STATIC_START = @STATIC_START@ STATIC_START = @STATIC_START@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ZLIB_LIBS = @ZLIB_LIBS@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@ abs_top_builddir = @abs_top_builddir@
@ -127,8 +136,10 @@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
e_docdir = @e_docdir@ e_docdir = @e_docdir@
e_examplesdir = @e_examplesdir@ e_examplesdir = @e_examplesdir@
e_icondir = @e_icondir@
e_initdir = @e_initdir@ e_initdir = @e_initdir@
e_libexecdir = @e_libexecdir@ e_libexecdir = @e_libexecdir@
e_pamdir = @e_pamdir@
e_qtmoc = @e_qtmoc@ e_qtmoc = @e_qtmoc@
e_spooldir = @e_spooldir@ e_spooldir = @e_spooldir@
e_sysconfdir = @e_sysconfdir@ e_sysconfdir = @e_sysconfdir@
@ -154,6 +165,7 @@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
EXTRA_DIST = iostream limits sstream xlocale EXTRA_DIST = iostream limits sstream xlocale
@ -164,14 +176,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& exit 0; \ && { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/gcc2.95/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/gcc2.95/Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/gcc2.95/Makefile $(AUTOMAKE) --gnu lib/gcc2.95/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -189,6 +201,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
tags: TAGS tags: TAGS
TAGS: TAGS:
@ -212,13 +225,17 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d "$(distdir)/$$file"; then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
@ -236,16 +253,22 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@ -264,6 +287,8 @@ dvi-am:
html: html-am html: html-am
html-am:
info: info-am info: info-am
info-am: info-am:
@ -272,18 +297,28 @@ install-data-am:
install-dvi: install-dvi-am install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-am install-html: install-html-am
install-html-am:
install-info: install-info-am install-info: install-info-am
install-info-am:
install-man: install-man:
install-pdf: install-pdf-am install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am install-ps: install-ps-am
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
@ -316,6 +351,7 @@ uninstall-am:
maintainer-clean maintainer-clean-generic mostlyclean \ maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-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. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

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