Use configure checks to detect whether we need to define either KERNEL or

2006-04-04  Julio M. Merino Vidal  <jmmv@NetBSD.org>

	* libgtop-sysdeps.m4:
	* sysdeps/freebsd/msg_limits.c:

	Use configure checks to detect whether we need to define either
	KERNEL or _KERNEL to get the definition of 'struct msginfo' in a
	BSD system.  This replaces the previous checks in the code that
	relied on __FreeBSD__ and similar macros.

	Before this change, the explicit definition of _KERNEL in the
	msg_limits.c file broke the build in NetBSD because it made the
	system headers pull in stuff unavailable to userland.

	Fixes bug #337207.
This commit is contained in:
Julio M. Merino Vidal
2006-04-09 10:50:43 +00:00
committed by Benoît Dejean
parent 9e6115f322
commit 3c21c70b64
3 changed files with 55 additions and 4 deletions

View File

@@ -1,3 +1,19 @@
2006-04-04 Julio M. Merino Vidal <jmmv@NetBSD.org>
* libgtop-sysdeps.m4:
* sysdeps/freebsd/msg_limits.c:
Use configure checks to detect whether we need to define either
KERNEL or _KERNEL to get the definition of 'struct msginfo' in a
BSD system. This replaces the previous checks in the code that
relied on __FreeBSD__ and similar macros.
Before this change, the explicit definition of _KERNEL in the
msg_limits.c file broke the build in NetBSD because it made the
system headers pull in stuff unavailable to userland.
Fixes bug #337207.
2006-04-04 Julio M. Merino Vidal <jmmv@NetBSD.org>
* libgtop-sysdeps.m4:

View File

@@ -192,6 +192,41 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[
*** to see how to enable it.])
fi
fi
AC_MSG_CHECKING(what we need to define to get struct msginfo)
AC_CACHE_VAL(msginfo_needs,
msginfo_needs=
for def in nothing KERNEL _KERNEL; do
AC_COMPILE_IFELSE([#define $def
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
int
main (void)
{
struct msginfo mi;
mi.msgmax = 0;
return 0;
}],
[
msginfo_needs=$def
if test ${msginfo_needs} = KERNEL; then
AC_DEFINE(STRUCT_MSGINFO_NEEDS_KERNEL, 1,
[Define to 1 if we need to define KERNEL to get 'struct msginfo'])
elif test ${msginfo_needs} = _KERNEL; then
AC_DEFINE(STRUCT_MSGINFO_NEEDS__KERNEL, 1,
[Define to 1 if we need to define _KERNEL to get 'struct msginfo'])
fi
]
)
test -n "${msginfo_needs}" && break
done
)
AC_MSG_RESULT($msginfo_needs)
if test -z "${msginfo_needs}"; then
AC_MSG_ERROR([Could not find the definition of 'struct msginfo'])
fi
;;
linux*)
os_major_version=`uname -r | sed 's/-pre[[0-9]]*//' | \

View File

@@ -45,11 +45,11 @@ glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf)
#else
/* #define KERNEL to get declaration of `struct msginfo'. */
#if (defined(__FreeBSD__) && (__FreeBSD_version < 410000)) || (defined __bsdi__)
/* Define the appropriate macro (if any) to get declaration of `struct
* msginfo'. Needed on, at least, FreeBSD. */
#if defined (STRUCT_MSGINFO_NEEDS_KERNEL)
#define KERNEL 1
#else
#elif defined (STRUCT_MSGINFO_NEEDS__KERNEL)
#define _KERNEL 1
#endif