diff mbox

[2/2] exim: new package

Message ID 1394124890-29254-3-git-send-email-luca@lucaceresoli.net
State Accepted
Headers show

Commit Message

Luca Ceresoli March 6, 2014, 4:54 p.m. UTC
---
 package/Config.in                                  |  1 +
 package/exim/Config.in                             |  9 +++++
 package/exim/Local-Makefile                        | 15 ++++++++
 package/exim/S86exim                               | 26 ++++++++++++++
 .../exim/exim-Build-buildconfig-for-the-host.patch | 23 ++++++++++++
 ...n-t-make-backup-copies-of-installed-files.patch | 40 +++++++++++++++++++++
 ...ip-version-check-and-symlink-installation.patch | 40 +++++++++++++++++++++
 package/exim/exim.mk                               | 41 ++++++++++++++++++++++
 8 files changed, 195 insertions(+)
 create mode 100644 package/exim/Config.in
 create mode 100644 package/exim/Local-Makefile
 create mode 100644 package/exim/S86exim
 create mode 100644 package/exim/exim-Build-buildconfig-for-the-host.patch
 create mode 100644 package/exim/exim-Don-t-make-backup-copies-of-installed-files.patch
 create mode 100644 package/exim/exim-Skip-version-check-and-symlink-installation.patch
 create mode 100644 package/exim/exim.mk

Comments

Bernd Kuhls March 6, 2014, 5:38 p.m. UTC | #1
Hi,

Luca Ceresoli <luca@lucaceresoli.net> wrote in
news:1394124890-29254-3-git-send-email-luca@lucaceresoli.net: 

> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -834,6 +834,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"

what about creating a new section "Mail applications"?

> --- /dev/null
> +++ b/package/exim/Local-Makefile
> @@ -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"

Here I use a different approach using sed inside exim.mk:

( sed -e 's,^BIN_DIR.*$$,BIN_DIRECTORY=/usr/bin,' \
      -e 's,^CONF.*$$,CONFIGURE_FILE=/etc/exim.conf,' \
      -e 's,^# INCLUDE.*$$,INCLUDE=-I$(TARGET_DIR)/usr/include,' \
      -e 's,^PCRE_CONFIG.*$$,# PCRE_CONFIG=no,' \
      -e 's,^# PCRE_LIBS.*$$,PCRE_LIBS=-lpcre,' \
      -e 's,^# HAVE_ICONV.*$$,HAVE_ICONV=yes,' \
      -e 's,^# AUTH_CRAM_MD5=.*$$,AUTH_CRAM_MD5=yes,' \
      -e 's,^# AUTH_DOVECOT=.*$$,AUTH_DOVECOT=yes,' \
      -e 's,^# AUTH_PLAINTEXT=.*$$,AUTH_PLAINTEXT=yes,' \
      -e 's,^# LOOKUP_PASSWD=.*$$,LOOKUP_PASSWD=yes,' \
      -e 's,^# WITH_CONTENT_SCAN=.*$$,WITH_CONTENT_SCAN=yes,' \
      -e 's,^# SUPPORT_TLS=.*$$,SUPPORT_TLS=yes,' \
      -e 's,^# TLS_LIBS=.*$$,TLS_LIBS=-lssl -lcrypto,' \
      -e 's,^# PID_FILE_PATH=.*$$,PID_FILE_PATH=/var/run/exim.pid,' \
      -e 's,^COMPRESS_COMMAND=.*$$,COMPRESS_COMMAND=/bin/gzip,' \
      -e 's,^ZCAT_COMMAND=.*$$,ZCAT_COMMAND=/bin/zcat,' \
      -e 's,^EXIM_USER.*$$,EXIM_USER=ref:exim,' \
      -e 's,^EXIM_MONITOR,#EXIM_MONITOR,' $(@D)/src/EDITME > 
$(@D)/Local/Makefile \
        ); \

This should imho be extended to options in Config.in for different mail 
environments, similar to the Debian packages exim4-daemon-heavy & exim4-
daemon-light.

I have to add that buildroot does not create a rootfs here, it delivers 
binaries for my personal mailserver package which is used in another distro 
with its own init system, therefore I can not review your init script.

Regards, Bernd
Luca Ceresoli March 7, 2014, 2:53 p.m. UTC | #2
Hi Bernd,

please do reply to all, not only to the mailing list. Some people
(including me) check their personal e-mail more frequently than mailing
lists.

Bernd Kuhls wrote:
> Hi,
>
> Luca Ceresoli <luca@lucaceresoli.net> wrote in
> news:1394124890-29254-3-git-send-email-luca@lucaceresoli.net:
>
>> --- a/package/Config.in
>> +++ b/package/Config.in
>> @@ -834,6 +834,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"
>
> what about creating a new section "Mail applications"?

I don't think we have a large enough number of mail-related packages in
Buildroot to justify such a section. But I may be wrong.

>
>> --- /dev/null
>> +++ b/package/exim/Local-Makefile
>> @@ -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"
>
> Here I use a different approach using sed inside exim.mk:
>
> ( sed -e 's,^BIN_DIR.*$$,BIN_DIRECTORY=/usr/bin,' \
>        -e 's,^CONF.*$$,CONFIGURE_FILE=/etc/exim.conf,' \
>        -e 's,^# INCLUDE.*$$,INCLUDE=-I$(TARGET_DIR)/usr/include,' \
>        -e 's,^PCRE_CONFIG.*$$,# PCRE_CONFIG=no,' \
>        -e 's,^# PCRE_LIBS.*$$,PCRE_LIBS=-lpcre,' \
>        -e 's,^# HAVE_ICONV.*$$,HAVE_ICONV=yes,' \
>        -e 's,^# AUTH_CRAM_MD5=.*$$,AUTH_CRAM_MD5=yes,' \
>        -e 's,^# AUTH_DOVECOT=.*$$,AUTH_DOVECOT=yes,' \
>        -e 's,^# AUTH_PLAINTEXT=.*$$,AUTH_PLAINTEXT=yes,' \
>        -e 's,^# LOOKUP_PASSWD=.*$$,LOOKUP_PASSWD=yes,' \
>        -e 's,^# WITH_CONTENT_SCAN=.*$$,WITH_CONTENT_SCAN=yes,' \
>        -e 's,^# SUPPORT_TLS=.*$$,SUPPORT_TLS=yes,' \
>        -e 's,^# TLS_LIBS=.*$$,TLS_LIBS=-lssl -lcrypto,' \
>        -e 's,^# PID_FILE_PATH=.*$$,PID_FILE_PATH=/var/run/exim.pid,' \
>        -e 's,^COMPRESS_COMMAND=.*$$,COMPRESS_COMMAND=/bin/gzip,' \
>        -e 's,^ZCAT_COMMAND=.*$$,ZCAT_COMMAND=/bin/zcat,' \
>        -e 's,^EXIM_USER.*$$,EXIM_USER=ref:exim,' \
>        -e 's,^EXIM_MONITOR,#EXIM_MONITOR,' $(@D)/src/EDITME >
> $(@D)/Local/Makefile \
>          ); \

At first sight it looks cleaner, but it should be made more robust IMHO.
Suppose in a future release the exim developers decide to uncomment a
variable that is now commented, or vice versa, or to use two spaces
between "#" and the variable name. Then your sed filters would silently
stop working.

Also, the line:
 >        -e 's,^CONF.*$$,CONFIGURE_FILE=/etc/exim.conf,' \
could catch future variables stasting with CONF.

OTOH my approach is a bot rude, but you know what file you'll generate,
which I find more reliable.

>
> This should imho be extended to options in Config.in for different mail
> environments, similar to the Debian packages exim4-daemon-heavy & exim4-
> daemon-light.

Definitely. I see we use different values for some variables.
Bernd Kuhls March 7, 2014, 8:52 p.m. UTC | #3
[posted and mailed]

Hi,

Luca Ceresoli <luca@lucaceresoli.net> wrote in
news:5319DD64.9000701@lucaceresoli.net: 

> Bernd Kuhls wrote:
>> Hi,
>>
>> Luca Ceresoli <luca@lucaceresoli.net> wrote in
>> news:1394124890-29254-3-git-send-email-luca-ep08DiM7hqZH3+C6az13tg@publi
>> c.gmane.org: 
>>
>>> --- a/package/Config.in
>>> +++ b/package/Config.in
>>> @@ -834,6 +834,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"
>>
>> what about creating a new section "Mail applications"?
> 
> I don't think we have a large enough number of mail-related packages in
> Buildroot to justify such a section. But I may be wrong.

I am planning to add the following packages to buildroot in addition to 
exim:

- fetchmail
- dovecot
- dovecot-pigeonhole

Currently the following mail-related packages are included in buildroot, 
both in "Networking applications", and could be moved to the new section:
- libesmtp
- msmtp

This makes 6 packages in total. I do not know how many packages are needed 
to justify a new section, therefore I am asking before sending patches ;)

Regards, Bernd
Thomas Petazzoni April 5, 2014, 4:35 p.m. UTC | #4
Dear Luca Ceresoli,

On Thu,  6 Mar 2014 17:54:50 +0100, Luca Ceresoli wrote:
> ---

You also for your SoB here.

> diff --git a/package/exim/exim.mk b/package/exim/exim.mk
> new file mode 100644
> index 0000000..011d0a4
> --- /dev/null
> +++ b/package/exim/exim.mk
> @@ -0,0 +1,41 @@
> +#############################################################
> +#
> +# 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 -D package/exim/Local-Makefile $(@D)/Local/Makefile

I've used $(INSTALL) -m0644 instead

> +	echo "CC=$(TARGET_CC)" >>$(@D)/Local/Makefile
> +	echo "CFLAGS=$(TARGET_CFLAGS)" >>$(@D)/Local/Makefile
> +	echo "HOSTCC=$(HOSTCC)" >>$(@D)/Local/Makefile
> +	echo "HOSTCFLAGS=$(HOSTCFLAGS)" >>$(@D)/Local/Makefile

I've added AR and RANLIB here, otherwise the exim build system uses the
native versions.

> +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
> +	$(INSTALL) -D -m 755 package/exim/S86exim \
> +		$(TARGET_DIR)/etc/init.d/S86exim

I've moved this to EXIM_INSTALL_INIT_SYSV.

> +	DESTDIR=${TARGET_DIR} INSTALL_ARG="-no_chown -no_symlink" build=br \
> +	  $(MAKE1) -C $(@D) install
> +	chmod u+s ${TARGET_DIR}/usr/sbin/exim

I've replaced both {TARGET_DIR} by (TARGET_DIR)

I've committed with those changes.

However, upon startup, I get an exim failure, would be good to have a
look:

Starting exim...
1970-01-01 00:00:06 Exim configuration error in line 541 of /etc/exim/configure:
  router dnslookup: cannot find router driver "dnslookup"

My defconfig is:

BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-basic-2014.02-rc1.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
BR2_PACKAGE_EXIM=y

Thomas
Luca Ceresoli April 5, 2014, 10:11 p.m. UTC | #5
Hi Thomas,

thanks for applying my patch and improving it.

However now that we have a "Mail" category exim should be placed there.
I'm sending a patch to move it.

Thomas Petazzoni wrote:
> Dear Luca Ceresoli,
>
> On Thu,  6 Mar 2014 17:54:50 +0100, Luca Ceresoli wrote:
>> ---
>
> You also for your SoB here.
>
>> diff --git a/package/exim/exim.mk b/package/exim/exim.mk
>> new file mode 100644
>> index 0000000..011d0a4
>> --- /dev/null
>> +++ b/package/exim/exim.mk
>> @@ -0,0 +1,41 @@
>> +#############################################################
>> +#
>> +# 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 -D package/exim/Local-Makefile $(@D)/Local/Makefile
>
> I've used $(INSTALL) -m0644 instead
>
>> +	echo "CC=$(TARGET_CC)" >>$(@D)/Local/Makefile
>> +	echo "CFLAGS=$(TARGET_CFLAGS)" >>$(@D)/Local/Makefile
>> +	echo "HOSTCC=$(HOSTCC)" >>$(@D)/Local/Makefile
>> +	echo "HOSTCFLAGS=$(HOSTCFLAGS)" >>$(@D)/Local/Makefile
>
> I've added AR and RANLIB here, otherwise the exim build system uses the
> native versions.

Did you actually experience a build error, or just fixed ased on visual
inspection? That's weird, the code I submitted works here. But my build
environment is different, this might justify a different behaviour.

Of course I am not against this change, in the worst case it's useless.
Just curious.

>
>> +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
>> +	$(INSTALL) -D -m 755 package/exim/S86exim \
>> +		$(TARGET_DIR)/etc/init.d/S86exim
>
> I've moved this to EXIM_INSTALL_INIT_SYSV.
>
>> +	DESTDIR=${TARGET_DIR} INSTALL_ARG="-no_chown -no_symlink" build=br \
>> +	  $(MAKE1) -C $(@D) install
>> +	chmod u+s ${TARGET_DIR}/usr/sbin/exim
>
> I've replaced both {TARGET_DIR} by (TARGET_DIR)
>
> I've committed with those changes.
>
> However, upon startup, I get an exim failure, would be good to have a
> look:
>
> Starting exim...
> 1970-01-01 00:00:06 Exim configuration error in line 541 of /etc/exim/configure:
>    router dnslookup: cannot find router driver "dnslookup"
>
> My defconfig is:
>
> BR2_arm=y
> BR2_TOOLCHAIN_EXTERNAL=y
> BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
> BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
> BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-basic-2014.02-rc1.tar.bz2"
> BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13=y
> # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
> BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
> BR2_PACKAGE_EXIM=y

I'll have a look at this error.
Thomas Petazzoni April 6, 2014, 8:37 a.m. UTC | #6
Dear Luca Ceresoli,

On Sun, 06 Apr 2014 00:11:36 +0200, Luca Ceresoli wrote:

> thanks for applying my patch and improving it.

You're welcome.

> However now that we have a "Mail" category exim should be placed there.
> I'm sending a patch to move it.

Sure, no problem.

> > I've added AR and RANLIB here, otherwise the exim build system uses the
> > native versions.
> 
> Did you actually experience a build error, or just fixed ased on visual
> inspection? That's weird, the code I submitted works here. But my build
> environment is different, this might justify a different behaviour.
> 
> Of course I am not against this change, in the worst case it's useless.
> Just curious.

I did not experience any problem, I just saw while looking at the build
log that it was correctly using the cross-gcc, but not cross-ar and
cross-ranlib, so I fixed that up.

> > My defconfig is:
> >
> > BR2_arm=y
> > BR2_TOOLCHAIN_EXTERNAL=y
> > BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
> > BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
> > BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-basic-2014.02-rc1.tar.bz2"
> > BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13=y
> > # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
> > BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
> > BR2_PACKAGE_EXIM=y
> 
> I'll have a look at this error.

Great, thanks.

Thomas
Luca Ceresoli April 6, 2014, 3:31 p.m. UTC | #7
Hi Thomas,

Thomas Petazzoni wrote:
> Dear Luca Ceresoli,
>
> On Sun, 06 Apr 2014 00:11:36 +0200, Luca Ceresoli wrote:
>
>> thanks for applying my patch and improving it.
>
> You're welcome.
>
>> However now that we have a "Mail" category exim should be placed there.
>> I'm sending a patch to move it.
>
> Sure, no problem.
>
>>> I've added AR and RANLIB here, otherwise the exim build system uses the
>>> native versions.
>>
>> Did you actually experience a build error, or just fixed ased on visual
>> inspection? That's weird, the code I submitted works here. But my build
>> environment is different, this might justify a different behaviour.
>>
>> Of course I am not against this change, in the worst case it's useless.
>> Just curious.
>
> I did not experience any problem, I just saw while looking at the build
> log that it was correctly using the cross-gcc, but not cross-ar and
> cross-ranlib, so I fixed that up.
>
>>> My defconfig is:
>>>
>>> BR2_arm=y
>>> BR2_TOOLCHAIN_EXTERNAL=y
>>> BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
>>> BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
>>> BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-basic-2014.02-rc1.tar.bz2"
>>> BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13=y
>>> # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
>>> BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
>>> BR2_PACKAGE_EXIM=y
>>
>> I'll have a look at this error.

This is because in my original patch dated 2011 exim was configured in
a very stripped-down version, just enough to deliver mail locally to
cyrus-imapd.

At that time this was done coherently in the build configuration file
(package/exim/Local-Makefile), which disables most optional features,
and in the runtime configuration file (/etc/exim/configure on the
target), which does not configure those features.

In my resubmit last month I removed my runtime configuration file which
was tailored for cyrus-imapd, since I was sending the exim patch alone.
However I dd notchange the build config file. As it is, it disables
features such as the dnslookup router, which is enabled by the stock
runtime config file.

I'm sending a patch that changes the configuration approach in a way
more similar to Bernd Kuhls' approach: instead of blindly copying a
minimal Buildroot-provided configuration file, change to copy the
exim-provided one and tweak it as needed. This actually makes the 
configuration closed to standard exim.
Luca Ceresoli April 9, 2014, 3:46 p.m. UTC | #8
Hi Bernd, Thomas,

Luca Ceresoli wrote:
...
>>>> My defconfig is:
>>>>
>>>> BR2_arm=y
>>>> BR2_TOOLCHAIN_EXTERNAL=y
>>>> BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
>>>> BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
>>>> BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-basic-2014.02-rc1.tar.bz2"
>>>>
>>>> BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13=y
>>>> # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
>>>> BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
>>>> BR2_PACKAGE_EXIM=y
>>>
>>> I'll have a look at this error.
>
> This is because in my original patch dated 2011 exim was configured in
> a very stripped-down version, just enough to deliver mail locally to
> cyrus-imapd.
>
> At that time this was done coherently in the build configuration file
> (package/exim/Local-Makefile), which disables most optional features,
> and in the runtime configuration file (/etc/exim/configure on the
> target), which does not configure those features.
>
> In my resubmit last month I removed my runtime configuration file which
> was tailored for cyrus-imapd, since I was sending the exim patch alone.
> However I dd notchange the build config file. As it is, it disables
> features such as the dnslookup router, which is enabled by the stock
> runtime config file.
>
> I'm sending a patch that changes the configuration approach in a way
> more similar to Bernd Kuhls' approach: instead of blindly copying a
> minimal Buildroot-provided configuration file, change to copy the
> exim-provided one and tweak it as needed. This actually makes the
> configuration closed to standard exim.

For the records, here's the patch that fixes the issue:
http://article.gmane.org/gmane.comp.lib.uclibc.buildroot/81356
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index fca61d6..9650bc5 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -834,6 +834,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"
diff --git a/package/exim/Config.in b/package/exim/Config.in
new file mode 100644
index 0000000..70038a2
--- /dev/null
+++ b/package/exim/Config.in
@@ -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/
diff --git a/package/exim/Local-Makefile b/package/exim/Local-Makefile
new file mode 100644
index 0000000..191f0e0
--- /dev/null
+++ b/package/exim/Local-Makefile
@@ -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"
diff --git a/package/exim/S86exim b/package/exim/S86exim
new file mode 100644
index 0000000..8c01b29
--- /dev/null
+++ b/package/exim/S86exim
@@ -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 $?
diff --git a/package/exim/exim-Build-buildconfig-for-the-host.patch b/package/exim/exim-Build-buildconfig-for-the-host.patch
new file mode 100644
index 0000000..a926fbd
--- /dev/null
+++ b/package/exim/exim-Build-buildconfig-for-the-host.patch
@@ -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
diff --git a/package/exim/exim-Don-t-make-backup-copies-of-installed-files.patch b/package/exim/exim-Don-t-make-backup-copies-of-installed-files.patch
new file mode 100644
index 0000000..0cdaa74
--- /dev/null
+++ b/package/exim/exim-Don-t-make-backup-copies-of-installed-files.patch
@@ -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
diff --git a/package/exim/exim-Skip-version-check-and-symlink-installation.patch b/package/exim/exim-Skip-version-check-and-symlink-installation.patch
new file mode 100644
index 0000000..94d21ae
--- /dev/null
+++ b/package/exim/exim-Skip-version-check-and-symlink-installation.patch
@@ -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 ""
diff --git a/package/exim/exim.mk b/package/exim/exim.mk
new file mode 100644
index 0000000..011d0a4
--- /dev/null
+++ b/package/exim/exim.mk
@@ -0,0 +1,41 @@ 
+#############################################################
+#
+# 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 -D package/exim/Local-Makefile $(@D)/Local/Makefile
+	echo "CC=$(TARGET_CC)" >>$(@D)/Local/Makefile
+	echo "CFLAGS=$(TARGET_CFLAGS)" >>$(@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
+	$(INSTALL) -D -m 755 package/exim/S86exim \
+		$(TARGET_DIR)/etc/init.d/S86exim
+	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
+
+$(eval $(generic-package))