diff mbox series

[iptables,1/1] configure: Determine if musl is used for build

Message ID 20240828124731.553911-2-joshualant@gmail.com
State Accepted
Delegated to: Phil Sutter
Headers show
Series configure: Determine if musl is used for build | expand

Commit Message

Joshua Lant Aug. 28, 2024, 12:47 p.m. UTC
Error compiling with musl-libc:
The commit hash 810f8568f44f5863c2350a39f4f5c8d60f762958
introduces the netinet/ether.h header into xtables.h, which causes an error due
to the redefinition of the ethhdr struct, defined in linux/if_ether.h and
netinet/ether.h. This is fixed by the inclusion of -D__UAPI_DEF_ETHHDR=0 in
CFLAGS for musl. Automatically check for this macro, since it is defined
in musl but not in glibc.

Signed-off-by: Joshua Lant joshualant@gmail.com
---
 configure.ac | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

Comments

Phil Sutter Aug. 29, 2024, 11:08 a.m. UTC | #1
Hi Joshua,

On Wed, Aug 28, 2024 at 01:47:31PM +0100, Joshua Lant wrote:
> Error compiling with musl-libc:
> The commit hash 810f8568f44f5863c2350a39f4f5c8d60f762958
> introduces the netinet/ether.h header into xtables.h, which causes an error due
> to the redefinition of the ethhdr struct, defined in linux/if_ether.h and
> netinet/ether.h. This is fixed by the inclusion of -D__UAPI_DEF_ETHHDR=0 in
> CFLAGS for musl. Automatically check for this macro, since it is defined
> in musl but not in glibc.

Thanks for the patch! I tested and it may be simplified a bit:

[...]
> +	#if defined(__UAPI_DEF_ETHHDR) && __UAPI_DEF_ETHHDR == 0
> +		return 0;
> +	#else
> +		#error error trying musl...
> +	#endif
[...]

Since the non-failure case is the default, this is sufficient:

|       #if ! defined(__UAPI_DEF_ETHHDR) || __UAPI_DEF_ETHHDR != 0
|               #error error trying musl...
|       #endif

Fine with you? If so, I'll push the modified patch out.

Thanks, Phil
Joshua Lant Aug. 29, 2024, 12:04 p.m. UTC | #2
Hi Phil,

> Thanks for the patch! I tested and it may be simplified a bit:
> 
> [...]
> > +	#if defined(__UAPI_DEF_ETHHDR) && __UAPI_DEF_ETHHDR == 0
> > +		return 0;
> > +	#else
> > +		#error error trying musl...
> > +	#endif
> [...]
> 
> Since the non-failure case is the default, this is sufficient:
> 
> |       #if ! defined(__UAPI_DEF_ETHHDR) || __UAPI_DEF_ETHHDR != 0
> |               #error error trying musl...
> |       #endif
> 
> Fine with you? If so, I'll push the modified patch out.
> 
> Thanks, Phil

Looks good to me :)

Cheers,

Josh
Phil Sutter Aug. 29, 2024, 12:08 p.m. UTC | #3
On Thu, Aug 29, 2024 at 01:04:46PM +0100, Joshua Lant wrote:
> > Thanks for the patch! I tested and it may be simplified a bit:
> > 
> > [...]
> > > +	#if defined(__UAPI_DEF_ETHHDR) && __UAPI_DEF_ETHHDR == 0
> > > +		return 0;
> > > +	#else
> > > +		#error error trying musl...
> > > +	#endif
> > [...]
> > 
> > Since the non-failure case is the default, this is sufficient:
> > 
> > |       #if ! defined(__UAPI_DEF_ETHHDR) || __UAPI_DEF_ETHHDR != 0
> > |               #error error trying musl...
> > |       #endif
> > 
> > Fine with you? If so, I'll push the modified patch out.
> > 
> > Thanks, Phil
> 
> Looks good to me :)

Thanks for your review, modified patch applied.

Thanks, Phil
diff mbox series

Patch

diff --git a/configure.ac b/configure.ac
index 2293702b..14106a7e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -206,6 +206,27 @@  if test "x$enable_profiling" = "xyes"; then
 	regular_LDFLAGS+=" -lgcov --coverage"
 fi
 
+AC_MSG_CHECKING([whether the build is using musl-libc])
+enable_musl_build=""
+
+AC_COMPILE_IFELSE(
+	[AC_LANG_PROGRAM([[#include <netinet/if_ether.h>]],
+	[[
+	#if defined(__UAPI_DEF_ETHHDR) && __UAPI_DEF_ETHHDR == 0
+		return 0;
+	#else
+		#error error trying musl...
+	#endif
+	]]
+	)],
+	[enable_musl_build="yes"],[enable_musl_build="no"]
+)
+AC_MSG_RESULT([${enable_musl_build}])
+
+if test "x$enable_musl_build" = "xyes"; then
+	regular_CFLAGS+=" -D__UAPI_DEF_ETHHDR=0"
+fi
+
 define([EXPAND_VARIABLE],
 [$2=[$]$1
 if test $prefix = 'NONE'; then
@@ -277,7 +298,8 @@  Build parameters:
   Installation prefix (--prefix):	${prefix}
   Xtables extension directory:		${e_xtlibdir}
   Pkg-config directory:			${e_pkgconfigdir}
-  Xtables lock file:			${xt_lock_name}"
+  Xtables lock file:			${xt_lock_name}
+  Build against musl-libc:		${enable_musl_build}"
 
 if [[ -n "$ksourcedir" ]]; then
 	echo "  Kernel source directory:		${ksourcedir}"