[Fwd: Bug#388242: cyrus-imapd-2.2: FTBFS on GNU/kFreeBSD]

Sven Mueller cyrus at incase.de
Mon Sep 25 14:16:37 EDT 2006


Hi.

I'm one of the Debian package maintainers for cyrus-imapd. We received a
report at http://bugs.debian.org/388242 that cyrus-imapd fails to build
on the kfreebsd port of Debian. Problem seems to be that sys/exec.h
exports PS_STRINGS, but that this macro is only usable while compiling
the kernel. To be more precise, it exports

#define PS_STRINGS      (USRSTACK - sizeof(struct ps_strings))

But USRSTACK is only defined for kernel builds. He (Petr Salinger)
initially proposed to use:

==========================================================
--- 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
==========================================================

to fix it, but I objected since the test for __GLIBC__ to be defined
seemed too broad. After this objection, Petr proposed to use this
snippet instead of the above patch to test wether PS_STRINGS should be used:

==========================================================
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
==========================================================

This seems to work fine on Linux and as Petr proposed this, I think he
also tested it on GNU/kFreeBSD (i.e. a FreeBSD with GNU userspace
instead of the normal portage system). I have no way to check this on
other systems.

Comments?
Suggestions for other ways to fix it?

I attached the patch I applied to configure.in.

Regards,
Sven

PS: Please keep 388242 at bugs.debian.org Cc'ed
PPS: I would have sent this to the andrew bugzilla, but I'm still unable
to create an account there.
-------------- next part --------------
diff -urNad cyrus-imapd-2.2.13/configure.in /tmp/dpep.6LRag9/cyrus-imapd-2.2.13/configure.in
--- cyrus-imapd-2.2.13/configure.in	2006-09-25 20:13:04.000000000 +0200
+++ /tmp/dpep.6LRag9/cyrus-imapd-2.2.13/configure.in	2006-09-25 20:13:06.102258297 +0200
@@ -297,16 +297,15 @@
 fi
 if test "$spt_type" = ""; then
 	AC_MSG_CHECKING(for PS_STRINGS)
-	AC_CACHE_VAL(cyrus_cv_sys_psstrings, AC_TRY_CPP([
+AC_CACHE_VAL(cyrus_cv_sys_psstrings, AC_COMPILE_IFELSE([
 #include <machine/vmparam.h>
 #include <sys/exec.h>
-#ifndef PS_STRINGS
-#include </nonexistent>
-#endif],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)
+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
 if test "$spt_type" = ""; then
 	AC_MSG_CHECKING(for SCO)


More information about the Cyrus-devel mailing list