Skip to contentSkip to conversation

package/exim: Add optional OpenSSL support

PATCH New Bernd Kuhls 3 participants 7 messages Apr 12, 2015

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 package/exim: Add optional OpenSSL support

Also add TARGET_MAKE_ENV to EXIM_BUILD_CMDS to enable access to our pkg-config.

---
v3: Add comment about TARGET_MAKE_ENV (Baruch)
v2: Use pkg-config to detect openssl (Yann)

 package/exim/exim.mk |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
package/exim/exim.mk +11 -2
index f39445d..67dbd64 100644
@@ -9,7 +9,7 @@ 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
+EXIM_DEPENDENCIES = pcre berkeleydb host-pkgconf
 
 # Modify a variable value. It must already exist in the file, either
 # commented or not.
@@ -62,6 +62,14 @@ define EXIM_USE_DEFAULT_CONFIG_FILE_CLAMAV
 endef
 endif
 
+ifeq ($(BR2_PACKAGE_OPENSSL),y)
+EXIM_DEPENDENCIES += openssl
+define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL
+	$(call exim-config-change,SUPPORT_TLS,yes)
+	$(call exim-config-change,USE_OPENSSL_PC,openssl)
+endef
+endif
+
 # this specific toolchain lacks libnsl
 ifeq ($(BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_2014_12),y)
 define EXIM_REMOVE_LIBNSL_FROM_MAKEFILE
@@ -89,6 +97,7 @@ define EXIM_CONFIGURE_CMDS
 	$(EXIM_USE_DEFAULT_CONFIG_FILE)
 	$(EXIM_USE_DEFAULT_CONFIG_FILE_DOVECOT)
 	$(EXIM_USE_DEFAULT_CONFIG_FILE_CLAMAV)
+	$(EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL)
 	$(EXIM_CONFIGURE_TOOLCHAIN)
 endef
 endif # CUSTOM_CONFIG
@@ -101,7 +110,7 @@ endif
 # "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) $(EXIM_STATIC_FLAGS)
+	$(TARGET_MAKE_ENV) build=br $(MAKE1) -C $(@D) $(EXIM_STATIC_FLAGS)
 endef
 
 # Need to replicate the LFLAGS in install, as exim still wants to build
Signature · 1 line
1.7.10.4
#1 lore raw

PATCH v3 1/1 package/exim: Add optional OpenSSL support

Bernd, All,

On 2015-04-12 13:25 +0200, Bernd Kuhls spake thusly:

Quoted 3 lines

Also add TARGET_MAKE_ENV to EXIM_BUILD_CMDS to enable access to our pkg-config.

Note that I was not able to test for static builds, because exim is already broken in that case; this defconfig does not build:

    BR2_arm=y
    BR2_cortex_a7=y
    BR2_STATIC_LIBS=y
    BR2_TOOLCHAIN_EXTERNAL=y
    BR2_PACKAGE_OPENSSL=y
    BR2_PACKAGE_EXIM=y

and fails with this error message:

/home/ymorin/dev/buildroot/O/host/opt/ext-toolchain/bin/../lib/gcc /arm-linux-musleabi/4.8.3/../../../../arm-linux-musleabi/bin/ld:
cannot find -lnsl

That's because musl does not provide libnsl. But exim does not disable libnsl.

A further fix would be to remove use of libnsl when the C library is not glibc.

This is obviously not related to your patch, however.

Regards,
Yann E. MORIN.

Quoted 59 lines

---
v3: Add comment about TARGET_MAKE_ENV (Baruch)
v2: Use pkg-config to detect openssl (Yann)

 package/exim/exim.mk |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
package/exim/exim.mk +11 -2
index f39445d..67dbd64 100644
@@ -9,7 +9,7 @@ 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
+EXIM_DEPENDENCIES = pcre berkeleydb host-pkgconf
 
 # Modify a variable value. It must already exist in the file, either
 # commented or not.
@@ -62,6 +62,14 @@ define EXIM_USE_DEFAULT_CONFIG_FILE_CLAMAV
 endef
 endif
 
+ifeq ($(BR2_PACKAGE_OPENSSL),y)
+EXIM_DEPENDENCIES += openssl
+define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL
+	$(call exim-config-change,SUPPORT_TLS,yes)
+	$(call exim-config-change,USE_OPENSSL_PC,openssl)
+endef
+endif
+
 # this specific toolchain lacks libnsl
 ifeq ($(BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_2014_12),y)
 define EXIM_REMOVE_LIBNSL_FROM_MAKEFILE
@@ -89,6 +97,7 @@ define EXIM_CONFIGURE_CMDS
 	$(EXIM_USE_DEFAULT_CONFIG_FILE)
 	$(EXIM_USE_DEFAULT_CONFIG_FILE_DOVECOT)
 	$(EXIM_USE_DEFAULT_CONFIG_FILE_CLAMAV)
+	$(EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL)
 	$(EXIM_CONFIGURE_TOOLCHAIN)
 endef
 endif # CUSTOM_CONFIG
@@ -101,7 +110,7 @@ endif
 # "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) $(EXIM_STATIC_FLAGS)
+	$(TARGET_MAKE_ENV) build=br $(MAKE1) -C $(@D) $(EXIM_STATIC_FLAGS)
 endef
 
 # Need to replicate the LFLAGS in install, as exim still wants to build
Signature · 6 lines
1.7.10.4

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#2 lore raw

PATCH v3 1/1 package/exim: Add optional OpenSSL support

Bernd, All,

On 2015-04-12 15:23 +0200, Yann E. MORIN spake thusly:
[--SNIP--]

Quoted 2 lines

Note that I was not able to test for static builds, because exim is already broken in that case; this defconfig does not build:

[--SNIP--]

Quoted 5 lines

That's because musl does not provide libnsl. But exim does not disable libnsl.

A further fix would be to remove use of libnsl when the C library is not glibc.

Woops, wrong, uClibc also has libnsl...

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#3 lore raw

PATCH v3 1/1 package/exim: Add optional OpenSSL support

"Yann E. MORIN" <[email protected]> wrote in news:20150412134418.GA21018 at free.fr:

Quoted 4 lines
Quoted 2 lines

A further fix would be to remove use of libnsl when the C library is not glibc.

Woops, wrong, uClibc also has libnsl...

Hi,

but it is only a stub library without any function:

http://git.uclibc.org/uClibc/tree/docs/Glibc_vs_uClibc_Differences.txt

"uClibc provides a stub libnsl, but has no actual support for Network Information Service (NIS)."

Right now I am testing something like this:

-# this specific toolchain lacks libnsl
-ifeq ($(BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_2014_12),y)
+# only (e)glibc provides libnsl, remove -lnsl for all other toolchains +# http://bugs.exim.org/show_bug.cgi?id=1564
+ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),)

which fixes your compile bug, just to find another one...

smtp_in.c: In function ?smtp_start_session?:
smtp_in.c:1976:36: error: invalid application of ?sizeof? to incomplete type ?struct options?

     EXIM_SOCKLEN_T optlen = sizeof(struct ip_options) + MAX_IPOPTLEN;
                                    ^
smtp_in.c:2023:42: error: dereferencing pointer to incomplete type
       uschar *optstart = (uschar *)(ipopt->__data);
                                          ^
smtp_in.c:2053:54: error: dereferencing pointer to incomplete type
                inet_ntoa(*((struct in_addr *)(&(ipopt->faddr))))))

which I am trying to solve right now.

Regards, Bernd

#4 lore raw

PATCH v3 1/1 package/exim: Add optional OpenSSL support

Bernd, All,

On 2015-04-12 15:47 +0200, Bernd Kuhls spake thusly:

Quoted 30 lines

"Yann E. MORIN" <[email protected]> wrote in news:20150412134418.GA21018 at free.fr:

Quoted 4 lines
Quoted 2 lines

A further fix would be to remove use of libnsl when the C library is not glibc.

Woops, wrong, uClibc also has libnsl...

Hi,

but it is only a stub library without any function:

http://git.uclibc.org/uClibc/tree/docs/Glibc_vs_uClibc_Differences.txt

"uClibc provides a stub libnsl, but has no actual support for Network Information Service (NIS)."

Right now I am testing something like this:

(quoted diff) +3 -2
-# this specific toolchain lacks libnsl
-ifeq ($(BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_2014_12),y)
+# only (e)glibc provides libnsl, remove -lnsl for all other toolchains
+# http://bugs.exim.org/show_bug.cgi?id=1564
+ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),)

which fixes your compile bug, just to find another one...

smtp_in.c: In function ?smtp_start_session?:
smtp_in.c:1976:36: error: invalid application of ?sizeof? to incomplete type ?struct options?

Quoted 7 lines
     EXIM_SOCKLEN_T optlen = sizeof(struct ip_options) + MAX_IPOPTLEN;
                                    ^
smtp_in.c:2023:42: error: dereferencing pointer to incomplete type
       uschar *optstart = (uschar *)(ipopt->__data);
                                          ^
smtp_in.c:2053:54: error: dereferencing pointer to incomplete type
                inet_ntoa(*((struct in_addr *)(&(ipopt->faddr))))))

Yup, got the same while investigating, too.

Quoted 1 line

which I am trying to solve right now.

Well, would it not be much simpler to just ditch support for static builds in exim? I.e. mark it as depends on !static .

Surely, static is for those few fronge architecures, and I doubt running a mail server on those is a common use-case...

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#5 lore raw

PATCH v3 1/1 package/exim: Add optional OpenSSL support

"Yann E. MORIN" <[email protected]> wrote in news:20150412135643.GB21018 at free.fr:

Quoted 7 lines
Quoted 4 lines

smtp_in.c: In function ?smtp_start_session?:
smtp_in.c:1976:36: error: invalid application of ?sizeof? to incomplete type ?struct options?

     EXIM_SOCKLEN_T optlen = sizeof(struct ip_options) + MAX_IPOPTLEN;

Well, would it not be much simpler to just ditch support for static builds in exim? I.e. mark it as depends on !static .

Hi,

this compile bug is unrelated to static/shared linking, here is a fix
proposal: http://patchwork.ozlabs.org/patch/460496/

For the nsl problem: http://patchwork.ozlabs.org/patch/460495/

Regards, Bernd

#6 lore raw

PATCH v3 1/1 package/exim: Add optional OpenSSL support

In reply to Bernd Kuhls

Dear Bernd Kuhls,

Quoted 6 lines · Bernd Kuhls

Also add TARGET_MAKE_ENV to EXIM_BUILD_CMDS to enable access to our pkg-config.

---
v3: Add comment about TARGET_MAKE_ENV (Baruch)
v2: Use pkg-config to detect openssl (Yann)

Applied, thanks.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com