diff mbox series

[1/2] package/exim: fix build with libexecinfo

Message ID 20231227181756.156827-1-bernd@kuhls.net
State Changes Requested
Headers show
Series [1/2] package/exim: fix build with libexecinfo | expand

Commit Message

Bernd Kuhls Dec. 27, 2023, 6:17 p.m. UTC
Upstream added optional support for execinfo

https://git.exim.org/exim.git/commitdiff/204a7a2c2e8601558905dc34c576a627045a9f21
https://git.exim.org/exim.git/commitdiff/48ea675fee2d5fee8d33c525e28727b69114cfce

in version 4.97 which was added to buildroot with commit
faec3ca30e358575f70a036879029f63f7da9b29

Fixes:
http://autobuild.buildroot.net/results/282/282882371e1d8c224c457bf65016f8abd11f8c45/

Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
---
 package/exim/exim.mk | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Comments

Luca Ceresoli Dec. 28, 2023, 8:51 a.m. UTC | #1
Hello Bernd,

On Wed, 27 Dec 2023 19:17:55 +0100
Bernd Kuhls <bernd@kuhls.net> wrote:

> Upstream added optional support for execinfo
> 
> https://git.exim.org/exim.git/commitdiff/204a7a2c2e8601558905dc34c576a627045a9f21
> https://git.exim.org/exim.git/commitdiff/48ea675fee2d5fee8d33c525e28727b69114cfce
> 
> in version 4.97 which was added to buildroot with commit
> faec3ca30e358575f70a036879029f63f7da9b29
> 
> Fixes:
> http://autobuild.buildroot.net/results/282/282882371e1d8c224c457bf65016f8abd11f8c45/

Thanks for taking care of the build failures!

> @@ -126,6 +127,15 @@ ifeq ($(BR2_STATIC_LIBS),y)
>  EXIM_STATIC_FLAGS = LFLAGS="-pthread --static"
>  endif
>  
> +ifeq ($(BR2_PACKAGE_LIBEXECINFO),y)
> +EXIM_DEPENDENCIES += libexecinfo
> +define EXIM_EXTRALIBS
> +$(call exim-config-add,EXTRALIBS,-lexecinfo)
> +endef
> +else
> +EXIM_C_FLAGS = -DNO_EXECINFO
> +endif

I think this logic is not entirely correct. As I read it:

 * on non-glibc systems it automatically enables the new exim
   stack dump feature if libexecinfo is enabled
 * on glibc systems, which always have the backtrace() and related
   functions without additional libraries, we never enable this feature

For consistency, the else branch should just be removed to avoid
setting NO_EXECINFO, thus enabling the stack dump feature whenever it
is possible.

Luca
Yann E. MORIN Dec. 29, 2023, 9:56 p.m. UTC | #2
Bernd, Luca, All,

On 2023-12-28 09:51 +0100, Luca Ceresoli via buildroot spake thusly:
> On Wed, 27 Dec 2023 19:17:55 +0100
> Bernd Kuhls <bernd@kuhls.net> wrote:
> > Upstream added optional support for execinfo
[--SNIP--]
> > @@ -126,6 +127,15 @@ ifeq ($(BR2_STATIC_LIBS),y)
> >  EXIM_STATIC_FLAGS = LFLAGS="-pthread --static"
> >  endif
> >  
> > +ifeq ($(BR2_PACKAGE_LIBEXECINFO),y)
> > +EXIM_DEPENDENCIES += libexecinfo
> > +define EXIM_EXTRALIBS
> > +$(call exim-config-add,EXTRALIBS,-lexecinfo)
> > +endef
> > +else
> > +EXIM_C_FLAGS = -DNO_EXECINFO
> > +endif
> 
> I think this logic is not entirely correct. As I read it:
> 
>  * on non-glibc systems it automatically enables the new exim
>    stack dump feature if libexecinfo is enabled
>  * on glibc systems, which always have the backtrace() and related
>    functions without additional libraries, we never enable this feature
> 
> For consistency, the else branch should just be removed to avoid
> setting NO_EXECINFO, thus enabling the stack dump feature whenever it
> is possible.

If I understand correctly, your proposal would not work either: for a
non-glibc config that does not have libexecinfo eabled, we do want to
define NO_EXECINFO.

Instead, the logic should be somthong like:

    if glibc:
        do nothing, execinfo is available
    elif libexecinfo enabled:
        add dependency and extra-lib
    else:
        define NO_EXECINFO

Since libexecinfo embedds the fact that it is also non-glibc, we can
rewrite the condition as:

    if libexecinfo:
        add dependency and extra-lib
    elif non-glibc;
        define NO_EXECINFO

So, the 'else' clause only needs to be changed into:
    else ifneq ($(BR2_TOOLCHAIN_USES_GLIBC),y)

Unless I missed something less obvious...

Regards,
Yann E. MORIN.
Luca Ceresoli Jan. 2, 2024, 7:13 a.m. UTC | #3
Hi Yann,

On Fri, 29 Dec 2023 22:56:26 +0100
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> Bernd, Luca, All,
> 
> On 2023-12-28 09:51 +0100, Luca Ceresoli via buildroot spake thusly:
> > On Wed, 27 Dec 2023 19:17:55 +0100
> > Bernd Kuhls <bernd@kuhls.net> wrote:  
> > > Upstream added optional support for execinfo  
> [--SNIP--]
> > > @@ -126,6 +127,15 @@ ifeq ($(BR2_STATIC_LIBS),y)
> > >  EXIM_STATIC_FLAGS = LFLAGS="-pthread --static"
> > >  endif
> > >  
> > > +ifeq ($(BR2_PACKAGE_LIBEXECINFO),y)
> > > +EXIM_DEPENDENCIES += libexecinfo
> > > +define EXIM_EXTRALIBS
> > > +$(call exim-config-add,EXTRALIBS,-lexecinfo)
> > > +endef
> > > +else
> > > +EXIM_C_FLAGS = -DNO_EXECINFO
> > > +endif  
> > 
> > I think this logic is not entirely correct. As I read it:
> > 
> >  * on non-glibc systems it automatically enables the new exim
> >    stack dump feature if libexecinfo is enabled
> >  * on glibc systems, which always have the backtrace() and related
> >    functions without additional libraries, we never enable this feature
> > 
> > For consistency, the else branch should just be removed to avoid
> > setting NO_EXECINFO, thus enabling the stack dump feature whenever it
> > is possible.  
> 
> If I understand correctly, your proposal would not work either: for a
> non-glibc config that does not have libexecinfo eabled, we do want to
> define NO_EXECINFO.

Exactly!

> Instead, the logic should be somthong like:
> 
>     if glibc:
>         do nothing, execinfo is available
>     elif libexecinfo enabled:
>         add dependency and extra-lib
>     else:
>         define NO_EXECINFO
> 
> Since libexecinfo embedds the fact that it is also non-glibc, we can
> rewrite the condition as:
> 
>     if libexecinfo:
>         add dependency and extra-lib
>     elif non-glibc;
>         define NO_EXECINFO
> 
> So, the 'else' clause only needs to be changed into:
>     else ifneq ($(BR2_TOOLCHAIN_USES_GLIBC),y)

Correct, thanks for suggesting this fix.

Luca
diff mbox series

Patch

diff --git a/package/exim/exim.mk b/package/exim/exim.mk
index 23d888e6f2..30b0d78c94 100644
--- a/package/exim/exim.mk
+++ b/package/exim/exim.mk
@@ -104,6 +104,7 @@  define EXIM_CONFIGURE_TOOLCHAIN
 	$(call exim-config-add,HOSTCC,$(HOSTCC))
 	$(call exim-config-add,HOSTCFLAGS,$(HOSTCFLAGS))
 	$(EXIM_FIX_IP_OPTIONS_FOR_MUSL)
+	$(EXIM_EXTRALIBS)
 endef
 
 ifneq ($(call qstrip,$(BR2_PACKAGE_EXIM_CUSTOM_CONFIG_FILE)),)
@@ -126,6 +127,15 @@  ifeq ($(BR2_STATIC_LIBS),y)
 EXIM_STATIC_FLAGS = LFLAGS="-pthread --static"
 endif
 
+ifeq ($(BR2_PACKAGE_LIBEXECINFO),y)
+EXIM_DEPENDENCIES += libexecinfo
+define EXIM_EXTRALIBS
+$(call exim-config-add,EXTRALIBS,-lexecinfo)
+endef
+else
+EXIM_C_FLAGS = -DNO_EXECINFO
+endif
+
 # We need the host version of macro_predef during the build, before
 # building it we need to prepare the makefile.
 define EXIM_BUILD_CMDS
@@ -136,7 +146,7 @@  define EXIM_BUILD_CMDS
 		CFLAGS="-std=c99 $(HOST_CFLAGS)" \
 		LFLAGS="-fPIC $(HOST_LDFLAGS)"
 	$(TARGET_MAKE_ENV) build=br $(MAKE) -C $(@D) $(EXIM_STATIC_FLAGS) \
-		CFLAGS="-std=c99 $(TARGET_CFLAGS)"
+		CFLAGS="-std=c99 $(TARGET_CFLAGS) $(EXIM_C_FLAGS)"
 endef
 
 # Need to replicate the LFLAGS in install, as exim still wants to build