--- cyrus-imapd-2.2-2.2.13/configure.in
+++ cyrus-imapd-2.2-2.2.13/configure.in
@@ -300,7 +284,7 @@
        AC_CACHE_VAL(cyrus_cv_sys_psstrings, AC_TRY_CPP([
 #include <machine/vmparam.h>
 #include <sys/exec.h>
-#ifndef PS_STRINGS
+#if !defined(PS_STRINGS) || defined (__GLIBC__)
 #include </nonexistent>
 #endif],cyrus_cv_sys_psstrings=yes,cyrus_cv_sys_psstrings=no))
        if test $cyrus_cv_sys_psstrings = yes; then

This seems odd: Why is PS_STRINGS defined by sys/exec.h or
machine/vmparam.h if it isn't actually supported?

In general, PS_STRINGS resolves to an absolute address, but
value of PS_STRINGS in compiled binary might not be same
as value used to compile current kernel :-(
Better would be using C equivalent of "sysctl kern.ps_strings".

We have in <sys/exec.h>
#define PS_STRINGS      (USRSTACK - sizeof(struct ps_strings))
but USRSTACK is defined only for kernel build.

I would include the fix, but I'm really not sure wether it is the right
fix to the problem.

Would be "try to compile" following snippet acceptable ?

****************************
#include <machine/vmparam.h>
#include <sys/exec.h>

void *p = PS_STRINGS;

int main() { return 0;}
***************************

Corresponding snippet in configure.in would be

if test "$spt_type" = ""; then
        AC_MSG_CHECKING(for PS_STRINGS)
        AC_CACHE_VAL(cyrus_cv_sys_psstrings, AC_COMPILE_IFELSE([
#include <machine/vmparam.h>
#include <sys/exec.h>
void *p = PS_STRINGS;
],cyrus_cv_sys_psstrings=yes,cyrus_cv_sys_psstrings=no))
        if test $cyrus_cv_sys_psstrings = yes; then
                spt_type=SPT_PSSTRINGS
        fi
        AC_MSG_RESULT($cyrus_cv_sys_psstrings)
fi


Petr



--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to