APR's configure script figures out that off_t is 'long long' on
OpenBSD but at the same time sets APR_OFF_T_FMT to "ld".
This results in a build failure when I try to compile httpd-2.4.37:
/home/stsp/svn/src/httpd-2.4.37/server/util_expr_eval.c:1144:56: error: format
specifies type 'long' but the argument has type 'apr_off_t'
(aka 'long long') [-Werror,-Wformat]
return apr_psprintf(ctx->p, "%" APR_OFF_T_FMT, sb.size);
~~~ ^~~~~~~
I suspect we should add OS-specific overrides to APR's configure script.
The patch below does this and fixes the above error. Am I right that this
is what the script should be doing for all OpenBSD architectures?
If we decide to patch our port of APR like this, then I will submit my
patch upstream as well.
Ports which depend on APR would probably need a bump, correct?
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/apr/Makefile,v
retrieving revision 1.42
diff -u -p -r1.42 Makefile
--- Makefile 25 Oct 2017 19:36:46 -0000 1.42
+++ Makefile 16 Dec 2018 12:00:54 -0000
@@ -4,7 +4,7 @@ COMMENT= Apache Portable Runtime
V= 1.6.3
DISTNAME= apr-$V
-REVISION= 0
+REVISION= 1
SHARED_LIBS += apr-1 6.0 # .6.2
CATEGORIES= devel
Index: patches/patch-configure_in
===================================================================
RCS file: /cvs/ports/devel/apr/patches/patch-configure_in,v
retrieving revision 1.1
diff -u -p -r1.1 patch-configure_in
--- patches/patch-configure_in 25 Oct 2017 19:36:46 -0000 1.1
+++ patches/patch-configure_in 16 Dec 2018 12:00:16 -0000
@@ -1,9 +1,37 @@
$OpenBSD: patch-configure_in,v 1.1 2017/10/25 19:36:46 naddy Exp $
+Fix mismatch between apr_off_t (long long) and APR_OFF_FMT_T ("ld")
+
Index: configure.in
--- configure.in.orig
+++ configure.in
-@@ -2281,7 +2281,7 @@ fi
+@@ -1828,6 +1828,14 @@ case $host in
+ long_value="__int64"
+ int64_strfn="_strtoi64"
+ ;;
++ *-openbsd*)
++ int64_t_fmt='#define APR_INT64_T_FMT "lld"'
++ uint64_t_fmt='#define APR_UINT64_T_FMT "llu"'
++ uint64_t_hex_fmt='#define APR_UINT64_T_HEX_FMT "llx"'
++ int64_value="long long"
++ long_value="long long"
++ int64_strfn="strtoll"
++ ;;
+ esac
+
+ APR_CHECK_TYPES_COMPATIBLE(ssize_t, int, [ssize_t_fmt="d"])
+@@ -1928,6 +1936,10 @@ elif test "$ac_cv_type_off_t" = "yes"; then
+ off_t_fmt='#define APR_OFF_T_FMT "I64d"'
+ off_t_strfn='_strtoi64'
+ ;;
++ *-openbsd*)
++ off_t_fmt='#define APR_OFF_T_FMT APR_INT64_T_FMT'
++ off_t_strfn='apr_strtoi64'
++ ;;
+ esac
+ else
+ # Fallback on int
+@@ -2281,7 +2293,7 @@ fi
APR_IFALLYES(header:semaphore.h func:sem_open func:sem_close dnl
func:sem_unlink func:sem_post func:sem_wait,
hasposixser="1", hasposixser="0")
@@ -12,7 +40,7 @@ Index: configure.in
hassysvser="0")
APR_IFALLYES(func:flock define:LOCK_EX, hasflockser="1", hasflockser="0")
APR_IFALLYES(header:fcntl.h define:F_SETLK, hasfcntlser="1", hasfcntlser="0")
-@@ -2470,6 +2470,8 @@ else
+@@ -2470,6 +2482,8 @@ else
fi
dnl ----------------------------- Checking for /dev/random
@@ -21,7 +49,7 @@ Index: configure.in
AC_MSG_CHECKING(for entropy source)
why_no_rand=""
-@@ -2486,6 +2488,13 @@ AC_ARG_WITH(egd,
+@@ -2486,6 +2500,13 @@ AC_ARG_WITH(egd,
AC_MSG_RESULT(EGD-compatible daemon)
rand="1"
])