Hi Dagobert, Am 2021-09-01 um 14:28 schrieb Dagobert Michelsen:
I see. Recompiling APR would require recompiling some dependend packages, but not too many: https://www.opencsw.org/packages/CSWlibapr1-0/
Well, that would be nice, too :-). I just wasn't sure if you can force an update of all dependent packages at the *user* sites within the OpenCSW framework. Meaning that it won't be good if for example a user mixes a new (_FILE_OFFSET_BITS=64) apr with an old subversion. So I thought enabling BUILD64=1 for subversion is the safer way to accomplish my goal.
Maybe I have not fully understood the issue, but wouldn’t a 64 bit subversion automatically include the 64 bit directory cookies as it automatically implies 64 bit data structures? And this should already be the case for 64 bit APR. The split header for 32 and 64 bit was not needed in the past IIRC.
The bug is exactly that the header is not split! I've attached a full diff between apr-32.h and apr-64.h as seen on Solaris11, but the most important difference is
-#define APR_SIZEOF_VOIDP 4 +#define APR_SIZEOF_VOIDP 8That's essentially why a 64-bit subversion compiled without a separate apr-64.h won't pass the tests and also doesn't work in practice as I've found out before I did the changes to apr.
Gruesse, Franz
--- /opt/csw/include/apr-32.h 2021-04-23 15:02:51.000000000 +0200 +++ /opt/csw/include/apr-64.h 2021-04-23 15:10:21.000000000 +0200 @@ -294,7 +294,7 @@ #define APR_HAS_UNICODE_FS 0 #define APR_HAS_PROC_INVOKED 0 #define APR_HAS_USER 1 -#define APR_HAS_LARGE_FILES 1 +#define APR_HAS_LARGE_FILES 0 #define APR_HAS_XTHREAD_FILES 0 #define APR_HAS_OS_UUID 1 #define APR_HAS_TIMEDLOCKS 1 @@ -333,7 +333,7 @@ typedef int apr_int32_t; typedef unsigned int apr_uint32_t; -#define APR_SIZEOF_VOIDP 4 +#define APR_SIZEOF_VOIDP 8 /* * Darwin 10's default compiler (gcc42) builds for both 64 and @@ -378,9 +378,9 @@ typedef size_t apr_size_t; typedef ssize_t apr_ssize_t; -typedef off64_t apr_off_t; +typedef off_t apr_off_t; typedef socklen_t apr_socklen_t; -typedef unsigned long apr_ino_t; +typedef ino_t apr_ino_t; #if APR_SIZEOF_VOIDP == 8 typedef apr_uint64_t apr_uintptr_t; @@ -555,10 +555,10 @@ #define APR_SIZE_T_FMT "lu" /* And APR_OFF_T_FMT */ -#define APR_OFF_T_FMT APR_INT64_T_FMT +#define APR_OFF_T_FMT "ld" /* And APR_PID_T_FMT */ -#define APR_PID_T_FMT "ld" +#define APR_PID_T_FMT "d" /* And APR_INT64_T_FMT */ #define APR_INT64_T_FMT PRId64