On Fri, Jan 3, 2020 at 1:46 AM Graham Leggett <[email protected]> wrote:
>
> On 02 Jan 2020, at 16:16, Yann Ylavic <[email protected]> wrote:
>
> >> It looks like, in the generated "apr.h",
> >> APR_USE_PROC_PTHREAD_SERIALIZE is set but not
> >> APR_HAS_PROC_PTHREAD_SERIALIZE?
> >
> > This possibly has to do with "/dev/zero" detection from:
> >
> > APR_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED dnl
> > func:pthread_mutexattr_setpshared dnl
> > file:/dev/zero,
> > hasprocpthreadser="1", hasprocpthreadser="0")
> >
> > I'm not sure it can work for cross-compilation, does forcing it with
> > "./configure ... ac_cv_file__dev_zero=yes ..." help?
>
> Working backwards, I tried the ac_cv_file__dev_zero=yes, and it made no
> difference in this case.
Hmm OK, probably overridden by AC_CHECK_FILE(/dev/zero)...
>
> Right at the bottom, we have:
>
> hasprocpthreadser=‘0'
>
> which means (if I’m reading this correctly) APR_HAS_PROC_PTHREAD_SERIALIZE is
> not set.
Right, and that's because AC_CHECK_FILE() does not work when cross-compiling.
>
> Looking at the PTHREAD matches in apr.h:
>
> #define APR_USE_PROC_PTHREAD_SERIALIZE 1
> #define APR_HAS_PROC_PTHREAD_SERIALIZE 0
Inconsistent :/
I can think of two ways to fix it:
1. don't check for /dev/zero for PROC_PTHREAD capability,
2. don't try to use PROC_PTHREAD by default when cross compiling.
We could do #1 if all unixes had /dev/zero, which I'm not sure of.
With #2, the default when cross compiling on linux-like target would
probably be SYSVSEM, but forcing with "./configure
apr_lock_method=USE_PROC_PTHREAD_SERIALIZE ..." is still possible.
Does not look insane or too much to ask, to me...
So attached patch is #2, better ideas?
Regards,
Yann.
Index: configure.in
===================================================================
--- configure.in (revision 1872185)
+++ configure.in (working copy)
@@ -2376,8 +2376,8 @@ APR_IFALLYES(func:semget func:semctl func:semop de
APR_IFALLYES(header:OS.h func:create_sem func:acquire_sem func:acquire_sem_etc,
APR_DECIDE(USE_BEOSSEM, [BeOS Semaphores]))
# pthread mutex both pshared and robust[_np] is the best default
-case "$apr_cv_mutex_robust_shared" in
-"yes"|"np")
+case "$hasprocpthreadser:$apr_cv_mutex_robust_shared" in
+"1:yes" | "1:np")
APR_DECIDE(USE_PROC_PTHREAD_SERIALIZE, [pthread pshared mutex])
;;
*)
@@ -2396,21 +2396,27 @@ procpthreadser="0"
fcntlser="0"
case $ac_decision in
USE_FLOCK_SERIALIZE )
+ hasflockser="1"
flockser="1"
;;
USE_FCNTL_SERIALIZE )
+ hasfcntlser="1"
fcntlser="1"
;;
USE_SYSVSEM_SERIALIZE )
+ hassysvser="1"
sysvser="1"
;;
USE_POSIXSEM_SERIALIZE )
+ hasposixser="1"
posixser="1"
;;
USE_PROC_PTHREAD_SERIALIZE )
+ hasprocpthreadser="1"
procpthreadser="1"
;;
USE_BEOSSEM )
+ hasbeossem="1"
beossem="1"
;;
esac