apr: add configure vars and caches
authorSebastian Kemper <sebastian_ml@gmx.net>
Tue, 4 Feb 2020 20:39:43 +0000 (21:39 +0100)
committerSebastian Kemper <sebastian_ml@gmx.net>
Tue, 4 Feb 2020 20:50:30 +0000 (21:50 +0100)
apr's configure script uses lots of AC_TRY_RUNs and when cross-compiling
needs a leg-up. This commit adds more configure variables (and removes
one, too).

Notable changes:

 - apr_cv_use_lfs64=yes is removed (again) after having a discussion
   about it with the musl developers. The conclusion was that
   _LARGEFILE64_SOURCE is a horrible thing that we don't want and should
   avoid (hence the removal of the variable, because defining
   _LARGEFILE64_SOURCE is all it does).
 - ap_cv_atomic_builtins is set to "yes" for 64-bit platforms. If
   anybody is interested in enabling this for other targets feel free to
   send a patch after testing it.
 - configure doesn't add -lpthread to LIBS when cross-compiling. This is
   not a problem for musl but might be for other libcs. This commit adds
   to related variable.
 - configure caches are added (via patches) for strerror and /dev/zero
   mmap tests. The former fixes a warning on musl (where strerror
   returns int instead of a pointer) and the latter is required for
   pthread pshared mutex apr_lock implementation and cannot be detected
   during cross-compile either.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
libs/apr/Makefile
libs/apr/patches/302-add-cache-for-strerror_r.patch [new file with mode: 0644]
libs/apr/patches/303-add-cache-for-mmap-zero.patch [new file with mode: 0644]

index 853050f458fb0797440ff62aef8dd78e51b80f3a..41cf7b7749a4f326b6964fc0f9fe035a827ed54b 100644 (file)
@@ -44,11 +44,18 @@ CONFIGURE_ARGS += \
        $(call autoconf_bool,CONFIG_IPV6,ipv6)
 
 # XXX: ac_cv_sizeof_struct_iovec=1 is just to trick configure
+# XXX: don't set apr_cv_use_lfs64=yes, see
+#      https://www.openwall.com/lists/musl/2020/02/03/18
+# XXX: the atomic builtins used require 8-byte intrinsics, which are available
+#      on all 64-bit architectures and some arm as well as x86 32-bit platforms
 CONFIGURE_VARS += \
+       ap_cv_atomic_builtins=$(if $(CONFIG_ARCH_64BIT),yes,no) \
        ac_cv_file__dev_zero=yes \
        ac_cv_func_pthread_mutexattr_setpshared=yes \
        ac_cv_func_sem_open=yes \
        ac_cv_func_setpgrp_void=yes \
+       ac_cv_mmap__dev_zero=yes \
+       ac_cv_negative_eai=yes \
        ac_cv_o_nonblock_inherited=no \
        ac_cv_sizeof_struct_iovec=1 \
        ac_cv_struct_rlimit=yes \
@@ -56,12 +63,18 @@ CONFIGURE_VARS += \
        apr_cv_dup3=yes \
        apr_cv_epoll=yes \
        apr_cv_epoll_create1=yes \
+       apr_cv_gai_addrconfig=yes \
        apr_cv_mutex_recursive=yes \
        apr_cv_mutex_robust_shared=yes \
        apr_cv_process_shared_works=yes \
+       apr_cv_pthreads_lib=-lpthread \
        apr_cv_sock_cloexec=yes \
-       apr_cv_tcp_nodelay_with_cork=yes \
-       apr_cv_use_lfs64=yes
+       apr_cv_tcp_nodelay_with_cork=yes
+
+ifeq ($(call qstrip,$(CONFIG_LIBC)),musl)
+CONFIGURE_VARS += \
+       ac_cv_strerror_r_rc_int=yes
+endif
 
 define Build/InstallDev
        $(INSTALL_DIR) $(1)/usr/bin $(1)/usr/include/apr-1 \
diff --git a/libs/apr/patches/302-add-cache-for-strerror_r.patch b/libs/apr/patches/302-add-cache-for-strerror_r.patch
new file mode 100644 (file)
index 0000000..c25175d
--- /dev/null
@@ -0,0 +1,30 @@
+--- a/build/apr_common.m4
++++ b/build/apr_common.m4
+@@ -526,8 +526,9 @@ dnl  string.
+ dnl
+ dnl
+ AC_DEFUN([APR_CHECK_STRERROR_R_RC], [
+-AC_MSG_CHECKING(for type of return code from strerror_r)
+-AC_TRY_RUN([
++AC_CACHE_CHECK([whether return code from strerror_r has type int],
++[ac_cv_strerror_r_rc_int],
++[AC_TRY_RUN([
+ #include <errno.h>
+ #include <string.h>
+ #include <stdio.h>
+@@ -543,14 +544,10 @@ main()
+ }], [
+     ac_cv_strerror_r_rc_int=yes ], [
+     ac_cv_strerror_r_rc_int=no ], [
+-    ac_cv_strerror_r_rc_int=no ] )
++    ac_cv_strerror_r_rc_int=no ] ) ] )
+ if test "x$ac_cv_strerror_r_rc_int" = xyes; then
+   AC_DEFINE(STRERROR_R_RC_INT, 1, [Define if strerror returns int])
+-  msg="int"
+-else
+-  msg="pointer"
+ fi
+-AC_MSG_RESULT([$msg])
+ ] )
+ dnl
diff --git a/libs/apr/patches/303-add-cache-for-mmap-zero.patch b/libs/apr/patches/303-add-cache-for-mmap-zero.patch
new file mode 100644 (file)
index 0000000..482b99c
--- /dev/null
@@ -0,0 +1,25 @@
+--- a/configure.in
++++ b/configure.in
+@@ -1191,8 +1191,9 @@ AC_CHECK_FILE(/dev/zero)
+ # Not all systems can mmap /dev/zero (such as HP-UX).  Check for that.
+ if test "$ac_cv_func_mmap" = "yes" &&
+    test "$ac_cv_file__dev_zero" = "yes"; then
+-    AC_MSG_CHECKING(for mmap that can map /dev/zero)
+-    AC_TRY_RUN([
++    AC_CACHE_CHECK([for mmap that can map /dev/zero],
++    [ac_cv_mmap__dev_zero],
++    [AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+@@ -1215,9 +1216,7 @@ if test "$ac_cv_func_mmap" = "yes" &&
+             return 3;
+         }
+         return 0;
+-    }], [], [ac_cv_file__dev_zero=no], [ac_cv_file__dev_zero=no])
+-
+-    AC_MSG_RESULT($ac_cv_file__dev_zero)
++    }], [], [ac_cv_file__dev_zero=no], [ac_cv_file__dev_zero=no])])
+ fi
+ # Now we determine which one is our anonymous shmem preference.