exim: new package

[Thomas:
 - use $(INSTALL) instead of install
 - add AR and RANLIB variables in the local makefiles, so that the
   cross toolchain ar and ranlib utilities are used instead of the
   native ones.
 - move the init script initialization to the EXIM_INSTALL_INIT_SYSV
   variable.
 - Use parenthesis instead of curly braces to reference TARGET_DIR.]

Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Luca Ceresoli 2014-03-06 17:54:50 +01:00 committed by Thomas Petazzoni
parent fa7697dc2b
commit 7439694833
8 changed files with 200 additions and 0 deletions

View File

@ -897,6 +897,7 @@ source "package/dnsmasq/Config.in"
source "package/dropbear/Config.in"
source "package/ebtables/Config.in"
source "package/ethtool/Config.in"
source "package/exim/Config.in"
source "package/foomatic-filters/Config.in"
source "package/fping/Config.in"
source "package/gesftpserver/Config.in"

9
package/exim/Config.in Normal file
View File

@ -0,0 +1,9 @@
config BR2_PACKAGE_EXIM
bool "exim"
select BR2_PACKAGE_PCRE
select BR2_PACKAGE_BERKELEYDB
help
Exim is a message transfer agent (MTA) developed at the University of
Cambridge for use on Unix systems connected to the Internet.
http://www.exim.org/

View File

@ -0,0 +1,15 @@
BIN_DIRECTORY=/usr/sbin
CONFIGURE_FILE=/etc/exim/configure
EXIM_USER=ref:exim
EXIM_GROUP=mail
SPOOL_DIRECTORY=/var/spool/exim
ROUTER_ACCEPT=yes
TRANSPORT_LMTP=yes
LOOKUP_DBM=yes
LOOKUP_LSEARCH=yes
PCRE_LIBS=-lpcre
FIXED_NEVER_USERS=root
HEADERS_CHARSET="ISO-8859-1"
HAVE_ICONV=no
SYSLOG_LOG_PID=yes
TMPDIR="/tmp"

26
package/exim/S86exim Normal file
View File

@ -0,0 +1,26 @@
#!/bin/sh
#
# Start/stop exim
#
PIDFILE=/var/lock/exim/exim-daemon.pid
case "$1" in
start)
echo "Starting exim..."
start-stop-daemon -S -x exim -- -bd
;;
stop)
echo -n "Stopping exim..."
start-stop-daemon -K -o -p $PIDFILE
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?

View File

@ -0,0 +1,23 @@
buildconfig is meant to be executed on the host, so it has to be compiled
using $(HOSTCC), not $(CC).
Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
---
OS/Makefile-Base | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/OS/Makefile-Base b/OS/Makefile-Base
index 29a6ad3..420ba60 100644
--- a/OS/Makefile-Base
+++ b/OS/Makefile-Base
@@ -114,8 +114,8 @@ allexim: config.h $(EXIM_MONITOR) exicyclog exinext exiwhat \
# Targets for special-purpose configuration header builders
buildconfig: buildconfig.c
- @echo "$(CC) buildconfig.c"
- $(FE)$(CC) $(CFLAGS) $(INCLUDE) -o buildconfig buildconfig.c $(LIBS)
+ @echo "$(HOSTCC) buildconfig.c"
+ $(FE)$(HOSTCC) $(HOSTCFLAGS) $(INCLUDE) -o buildconfig buildconfig.c $(LIBS)
# Target for the exicyclog utility script

View File

@ -0,0 +1,40 @@
If exim had already been installed, the install script makes backup
copies of the pre-existing executables with a ".0" suffix.
This leads to useless duplicated files on the target, so disable this
piece of code.
Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
---
scripts/exim_install | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/scripts/exim_install b/scripts/exim_install
index 616ab3c..e68e7d5 100755
--- a/scripts/exim_install
+++ b/scripts/exim_install
@@ -344,15 +344,15 @@ while [ $# -gt 0 ]; do
else
if ../scripts/newer ${name} ${BIN_DIRECTORY}/${name}; then
- if [ -f ${BIN_DIRECTORY}/${name} ]; then
- echo ${CP} ${BIN_DIRECTORY}/${name} ${BIN_DIRECTORY}/${name}.O
- ${real} ${CP} ${BIN_DIRECTORY}/${name} ${BIN_DIRECTORY}/${name}.O
- if [ $? -ne 0 ]; then
- echo $com ""
- echo $com "*** Exim installation ${ver}failed ***"
- exit 1
- fi
- fi
+# if [ -f ${BIN_DIRECTORY}/${name} ]; then
+# echo ${CP} ${BIN_DIRECTORY}/${name} ${BIN_DIRECTORY}/${name}.O
+# ${real} ${CP} ${BIN_DIRECTORY}/${name} ${BIN_DIRECTORY}/${name}.O
+# if [ $? -ne 0 ]; then
+# echo $com ""
+# echo $com "*** Exim installation ${ver}failed ***"
+# exit 1
+# fi
+# fi
echo ${CP} ${name} ${BIN_DIRECTORY}
${real} ${CP} ${name} ${BIN_DIRECTORY}
if [ $? -ne 0 ]; then

View File

@ -0,0 +1,40 @@
The exim install script installs a binary named exim-<version>, plus a symlink
to it named exim.
In order to achieve this "feature" (of dubious usefulness) it runs the
executable (on the host) and then filters its output to grab the version number.
This clearly cannot work if the executable is cross-compiled, so get rid of all
of it and just install an executable file called exim.
Inspired by:
http://patch-tracker.debian.org/patch/series/view/exim4/4.76-2/35_install.dpatch
Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
---
scripts/exim_install | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/scripts/exim_install b/scripts/exim_install
index e68e7d5..487a4e1 100755
--- a/scripts/exim_install
+++ b/scripts/exim_install
@@ -59,6 +59,8 @@ while [ $# -gt 0 ] ; do
shift
done
+do_symlink=no
+
# Get the values of BIN_DIRECTORY, CONFIGURE_FILE, INFO_DIRECTORY, NO_SYMLINK,
# SYSTEM_ALIASES_FILE, and EXE from the global Makefile (in the build
# directory). EXE is empty except in the Cygwin environment. In each case, keep
@@ -218,8 +220,9 @@ while [ $# -gt 0 ]; do
# The exim binary is handled specially
if [ $name = exim${EXE} ]; then
- version=exim-`./exim -bV -C /dev/null | \
- awk '/Exim version/ { OFS=""; print $3,"-",substr($4,2,length($4)-1) }'`${EXE}
+ version=exim
+# version=exim-`./exim -bV -C /dev/null | \
+# awk '/Exim version/ { OFS=""; print $3,"-",substr($4,2,length($4)-1) }'`${EXE}
if [ "${version}" = "exim-${EXE}" ]; then
echo $com ""

46
package/exim/exim.mk Normal file
View File

@ -0,0 +1,46 @@
#############################################################
#
# exim
#
#############################################################
EXIM_VERSION = 4.82
EXIM_SOURCE = exim-$(EXIM_VERSION).tar.bz2
EXIM_SITE = ftp://ftp.exim.org/pub/exim/exim4
EXIM_LICENSE = GPLv2+
EXIM_LICENSE_FILES = LICENCE
EXIM_DEPENDENCIES = pcre berkeleydb
# These echos seem to be the sanest way to feed CC and CFLAGS to exim
define EXIM_CONFIGURE_CMDS
$(INSTALL) -m 0644 -D package/exim/Local-Makefile $(@D)/Local/Makefile
echo "CC=$(TARGET_CC)" >>$(@D)/Local/Makefile
echo "CFLAGS=$(TARGET_CFLAGS)" >>$(@D)/Local/Makefile
echo "AR=$(TARGET_AR) cq" >>$(@D)/Local/Makefile
echo "RANLIB=$(TARGET_RANLIB)" >>$(@D)/Local/Makefile
echo "HOSTCC=$(HOSTCC)" >>$(@D)/Local/Makefile
echo "HOSTCFLAGS=$(HOSTCFLAGS)" >>$(@D)/Local/Makefile
endef
# "The -j (parallel) flag must not be used with make"
# (http://www.exim.org/exim-html-current/doc/html/spec_html/ch04.html)
define EXIM_BUILD_CMDS
build=br $(MAKE1) -C $(@D)
endef
define EXIM_INSTALL_TARGET_CMDS
DESTDIR=$(TARGET_DIR) INSTALL_ARG="-no_chown -no_symlink" build=br \
$(MAKE1) -C $(@D) install
chmod u+s $(TARGET_DIR)/usr/sbin/exim
endef
define EXIM_USERS
exim 88 mail 8 * - - - exim
endef
define EXIM_INSTALL_INIT_SYSV
$(INSTALL) -D -m 755 package/exim/S86exim \
$(TARGET_DIR)/etc/init.d/S86exim
endef
$(eval $(generic-package))