
Author: petr
Status: dirty hack; builds, but gkrellm crashes during startup
	hack is similar as for net-snmp.diff, <sys/socketvar.h> should be extended instead


diff -u gkrellm-2.2.9/debian/control gkrellm-2.2.9/debian/control
--- gkrellm-2.2.9/debian/control
+++ gkrellm-2.2.9/debian/control
@@ -3,7 +3,7 @@
 Priority: optional
 Maintainer: Cai Qian <caiqian@debian.org>
 Standards-Version: 3.6.2
-Build-Depends: gdk-imlib1-dev, libglib2.0-dev, libgtk2.0-dev, debhelper (>= 5), libsm-dev, x-dev, gettext, libgnutls-dev, dpatch (>= 2)
+Build-Depends: gdk-imlib1-dev, libglib2.0-dev, libgtk2.0-dev, debhelper (>= 5), libsm-dev, x-dev, gettext, libgnutls-dev, dpatch (>= 2), libkvm-dev [kfreebsd-i386 kfreebsd-amd64]
 
 Package: gkrellm
 Architecture: any
diff -u gkrellm-2.2.9/debian/rules gkrellm-2.2.9/debian/rules
--- gkrellm-2.2.9/debian/rules
+++ gkrellm-2.2.9/debian/rules
@@ -18,6 +18,8 @@
 
 CFLAGS = -Wall -g
 
+DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
+
 ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
 	CFLAGS += -O0
 else
@@ -39,8 +41,12 @@
 
 	# Add here commands to compile the package.
 	# Avoid broken LOCALEDIR
-	$(MAKE) PREFIX=$(PREFIX)
 
+ifeq (kfreebsd,$(DEB_HOST_ARCH_OS))
+	$(MAKE) PREFIX=$(PREFIX) kfreebsd
+else
+	$(MAKE) PREFIX=$(PREFIX)
+endif
 	touch build-stamp
 
 clean: clean-patched unpatch
only in patch2:
unchanged:
--- gkrellm-2.2.9.orig/Makefile
+++ gkrellm-2.2.9/Makefile
@@ -180,6 +180,12 @@
 	(cd server && ${MAKE} clean)
 	rm -f gkrellm.pc
 
+kfreebsd:	gkrellm.pc
+	(cd po && ${MAKE} all)
+	(cd src && ${MAKE} freebsd2)
+	(cd server && ${MAKE} \
+		EXTRAOBJS= SYS_LIBS="-lkvm" gkrellmd )
+
 freebsd2:	gkrellm.pc
 	(cd po && ${MAKE} all)
 	(cd src && ${MAKE} freebsd2)
only in patch2:
unchanged:
--- gkrellm-2.2.9.orig/src/sysdeps/bsd-common.c
+++ gkrellm-2.2.9/src/sysdeps/bsd-common.c
@@ -163,7 +163,7 @@
 #endif
 #include <sys/wait.h>
 
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) ||  defined(__FreeBSD_kernel__)
 #include <osreldate.h>
 #if __FreeBSD_version < 300000
 static char	*mnttype[] = INITMOUNTNAMES;
@@ -345,7 +345,7 @@
 	}
 #endif
 
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) 
 gboolean
 gkrellm_sys_fs_init(void)
 	{
only in patch2:
unchanged:
--- gkrellm-2.2.9.orig/src/sysdeps/freebsd.c
+++ gkrellm-2.2.9/src/sysdeps/freebsd.c
@@ -21,6 +21,79 @@
 |  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
+#include <osreldate.h>
+
+#ifdef  __FreeBSD_kernel_version 
+#  ifndef __FreeBSD_version
+#    define __FreeBSD_version __FreeBSD_kernel_version
+#    ifdef __GLIBC__
+#      ifndef  _BSD_SOURCE
+#        define __BSD_SOURCE    1
+#      endif
+#      include <features.h>
+#      ifndef  __FAVOR_BSD
+#        define __FAVOR_BSD    1
+#      endif
+
+
+#      define MAX_SACK_BLKS   6       /* Max # SACK blocks stored at sender side */
+#      include <sys/queue.h>
+#      include <sys/_types.h>
+
+
+struct xsocket {
+        size_t  xso_len;        /* length of this structure */
+        struct  socket *xso_so; /* makes a convenient handle sometimes */
+        short   so_type;
+        short   so_options;
+        short   so_linger;
+        short   so_state;
+        caddr_t so_pcb;         /* another convenient handle */
+        int     xso_protocol;
+        int     xso_family;
+        short   so_qlen;
+        short   so_incqlen;
+        short   so_qlimit;
+        short   so_timeo;
+        u_short so_error;
+        pid_t   so_pgid;
+        u_long  so_oobmark;
+        struct xsockbuf {
+                u_int   sb_cc;
+                u_int   sb_hiwat;
+                u_int   sb_mbcnt;
+                u_int   sb_mbmax;
+                int     sb_lowat;
+                int     sb_timeo;
+                short   sb_flags;
+        } so_rcv, so_snd;
+        uid_t   so_uid;         /* XXX */
+};
+typedef     u_quad_t so_gen_t;
+
+
+#      include <sys/socket.h>
+#      include <netinet/tcp_var.h>  
+
+#      include <net/ethernet.h>
+#      include <net/if_arp.h>
+#      include <netinet/in.h>
+#      include <netinet/in.h>	
+#      define _SYS_SOCKETVAR_H_
+#      include <netinet/in_pcb.h>
+struct  xtcpcb {
+        size_t  xt_len;
+        struct  inpcb   xt_inp;
+        struct  tcpcb   xt_tp;
+        struct  xsocket xt_socket;
+        u_quad_t        xt_alignment_hack;
+};
+
+
+#    endif
+#  endif
+#endif
+
 #include <kvm.h>
 
 kvm_t	*kvmd = NULL;
@@ -78,7 +151,6 @@
 /* ===================================================================== */
 /* CPU monitor interface */
 
-#include <osreldate.h>
 #if __FreeBSD_version >= 500101
 #include <sys/resource.h>
 #else
@@ -303,7 +375,7 @@
 /* ===================================================================== */
 /* Disk monitor interface */
 
-#if __FreeBSD_version >= 300000
+#if (__FreeBSD_version >= 300000) && !defined(__GLIBC__)
 #include <devstat.h>
 static struct statinfo	statinfo_cur;
 #else
@@ -319,7 +391,7 @@
 	return NULL;	/* Not implemented */
 	}
 
-#if __FreeBSD_version < 300000
+#if (__FreeBSD_version < 300000) || defined(__GLIBC__)
 gint
 gkrellm_sys_disk_order_from_name(gchar *name)
 	{
only in patch2:
unchanged:
--- gkrellm-2.2.9.orig/src/sysdeps-unix.c
+++ gkrellm-2.2.9/src/sysdeps-unix.c
@@ -37,7 +37,7 @@
 #include "sysdeps/bsd-common.c"
 #endif
 
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 #include "sysdeps/freebsd.c"
 #include "sysdeps/bsd-common.c"
 #include "sysdeps/sensors-common.c"
only in patch2:
unchanged:
--- gkrellm-2.2.9.orig/src/gkrellm.h
+++ gkrellm-2.2.9/src/gkrellm.h
@@ -52,7 +52,7 @@
 
 #if !defined(__FreeBSD__) && !defined(__linux__) && !defined(__NetBSD__) \
 	&& !defined(__OpenBSD__) && !defined(__solaris__) && !defined(WIN32) \
-	&& !defined(__APPLE__)
+	&& !defined(__APPLE__) && !defined(__FreeBSD_kernel__)
 #define  USE_LIBGTOP
 #endif
 
only in patch2:
unchanged:
--- gkrellm-2.2.9.orig/server/sysdeps-unix.c
+++ gkrellm-2.2.9/server/sysdeps-unix.c
@@ -37,7 +37,7 @@
 #include "../src/sysdeps/bsd-common.c"
 #endif
 
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 #include "../src/sysdeps/freebsd.c"
 #include "../src/sysdeps/bsd-common.c"
 #include "../src/sysdeps/sensors-common.c"
only in patch2:
unchanged:
--- gkrellm-2.2.9.orig/server/gkrellmd-private.h
+++ gkrellm-2.2.9/server/gkrellmd-private.h
@@ -28,9 +28,9 @@
 #endif
 #endif
 
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 #include <sys/param.h>
-#if __FreeBSD_version >= 400000
+#if __FreeBSD_version >= 400000 || defined(__FreeBSD_kernel__)
 #define HAVE_GETADDRINFO	1
 #endif
 #endif
@@ -66,7 +66,7 @@
 
 #if !defined(__FreeBSD__) && !defined(__linux__) && !defined(__NetBSD__) \
     && !defined(__OpenBSD__) && !defined(__solaris__) && !defined(WIN32) \
-    && !defined(__APPLE__)
+    && !defined(__APPLE__) && !defined(__FreeBSD_kernel__)
 #define  USE_LIBGTOP
 #endif
 
