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 |
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
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
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 --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}"
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(-)