On Sun, Dec 16, 2018 at 12:36:43PM +0000, Stuart Henderson wrote:
> On 2018/12/16 13:23, Stefan Sperling wrote:
> > 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.
> 
> Makes sense to me, though I'm wondering why I didn't run into this build
> failure before.

I came across this with a httpd development build (--enable-maintainer-mode)
which enables -Werror. Still, it looks like this uncovered an actual problem.

> > Ports which depend on APR would probably need a bump, correct?
> 
> The easy way to do that is just bump major in apr's SHARED_LIBS.

So this should take care of it?

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:49:55 -0000
@@ -4,8 +4,8 @@ COMMENT=        Apache Portable Runtime
 
 V=             1.6.3
 DISTNAME=      apr-$V
-REVISION=      0
-SHARED_LIBS += apr-1             6.0     # .6.2
+REVISION=      1
+SHARED_LIBS += apr-1             7.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"
    ])

Reply via email to