On 09.01.2019 20:08, William A Rowe Jr wrote: > On Wed, Jan 9, 2019 at 9:38 AM Stefan Sperling <s...@apache.org> wrote: > >> APR's configure script logic results in inconsistent type and format >> string definitions on OpenBSD. apr_off_t is defined as 'long long' >> but APR_OFF_T_FMT is defined as "ld". >> >> This results in obvious build failures e.g. if httpd is built with -Werror. >> This is just one example of many such errors: >> >> /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); >> >> ~~~ ^~~~~~~ >> >> This happens because off_t is defined as 'long long', and because >> sizeof(long) and sizeof(long long) are both 8, on OpenBSD/amd64. >> >> The configure script section which sets APR_OFF_T_FMT first checks for: >> "$ac_cv_sizeof_off_t" = "$ac_cv_sizeof_long" >> and sets APR_OFF_T_FMT to "ld", before it checks for: >> "$ac_cv_sizeof_off_t" = "$ac_cv_sizeof_long_long". >> >> This looks like a generic problem, but I am not sure the existing logic >> could >> be make to work in general. Switching the order of checks makes the >> configure >> script produce valid results on OpenBSD but I am not sure if that would be >> a >> correct thing to do on other platforms.
How come this works on x86_64 Linux, which is also LP64? >> Since the existing logic apparently works on other platforms it's >> probably best to leave as it is and add an override for OpenBSD. >> However, any platform where off_t is 'long long' and long is a 64 bit >> type is affected by this issue. > > Couldn't some AC_TRY_COMPILE()s with -Wall catch this? '-Wall -Werror' would work for GCC but not necessarily for any other compilers. > I'd prefer we > continue to attempt these in %d %ld %lld %I64d order. Least complex and > most portable first. Yes. -- Brane