Package: kbuild
Version: 1:0.1.98svn2318-1
Severity: important
Tags: patch
User: [email protected]
Usertags: kfreebsd

kBuild FTBFS on GNU/kFreeBSD. The attached patch fixes
this.


-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (990, 'unstable'), (350, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.30-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages kbuild depends on:
ii  libc6                         2.9-23     GNU C Library: Shared libraries

kbuild recommends no packages.

kbuild suggests no packages.

-- no debconf information

-- 
Julian Andres Klode  - Free Software Developer
   Debian Developer  - Contributing Member of SPI
   Ubuntu Member     - Fellow of FSFE

Website: http://jak-linux.org/   XMPP: [email protected]
Debian:  http://www.debian.org/  SPI:  http://www.spi-inc.org/
Ubuntu:  http://www.ubuntu.com/  FSFE: http://www.fsfe.org/
Author: Julian Andres Klode <[email protected]>
Description: Add support for GNU/kFreeBSD platforms to kbuild.

This patch adds support for GNU/kFreeBSD. It still has a few problems,
like the missing fflagstostr() and strtofflags() functions or the unresolved
clock_gettime(), which have all been worked around for now.

Index: kbuild-0.1.98svn2318/src/kmk/dir.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/dir.c	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/dir.c	2009-08-06 18:52:25.000000000 +0200
@@ -42,7 +42,7 @@
 # endif /* HAVE_VMSDIR_H */
 #endif
 /* bird: FreeBSD + smbfs -> readdir() + EBADF */
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 # include <sys/mount.h>
 #endif
 /* bird: end */
@@ -783,7 +783,7 @@
          To exactly determin the cause here, I should probably do some smbfs
          tracing, but for now just ignoring the EBADF on seems to work.
          (The smb server is 64-bit vista, btw.) */
-#if defined (__FreeBSD__)
+#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__)
           struct statfs stfs;
           int saved_errno = errno;
           errno = 0;
Index: kbuild-0.1.98svn2318/src/kmk/incdep.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/incdep.c	2009-08-06 18:51:38.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/incdep.c	2009-08-06 18:52:25.000000000 +0200
@@ -606,7 +606,7 @@
   if (getenv ("KMK_THREADS_ENABLED"))
     return 1;

-#if defined (__gnu_linux__) || defined (__linux__)
+#if defined (__gnu_linux__) || defined (__linux__) || defined(__GLIBC__)
   /* Try detect fakeroot. */
   if (getenv ("FAKEROOTKEY")
    || getenv ("FAKEROOTUID")
Index: kbuild-0.1.98svn2318/src/kmk/kbuild.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/kbuild.c	2009-08-06 18:51:38.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/kbuild.c	2009-08-06 18:52:25.000000000 +0200
@@ -133,7 +133,7 @@
         }
     }

-#elif defined(__FreeBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
     rc = readlink("/proc/curproc/file", szTmp, GET_PATH_MAX - 1);
     if (rc < 0 || rc == GET_PATH_MAX - 1)
     {
Index: kbuild-0.1.98svn2318/src/kmk/kmkbuiltin/cmp_util.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/kmkbuiltin/cmp_util.c	2009-08-06 18:51:38.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/kmkbuiltin/cmp_util.c	2009-08-06 18:52:25.000000000 +0200
@@ -38,7 +38,7 @@
 #include "config.h"
 #include <sys/types.h>
 #include <sys/stat.h>
-#if defined(__FreeBSD__) || defined(__NetBSD__) /** @todo more mmap capable OSes. */
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel_) || defined(__NetBSD__) /** @todo more mmap capable OSes. */
 # define CMP_USE_MMAP
 # include <sys/param.h>
 # include <sys/mman.h>
Index: kbuild-0.1.98svn2318/src/kmk/main.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/main.c	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/main.c	2009-08-06 18:52:25.000000000 +0200
@@ -48,7 +48,7 @@
 #endif

 #ifdef KMK /* for get_online_cpu_count */
-# if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+# if defined(__APPLE__) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
 #  include <sys/sysctl.h>
 # endif
 # ifdef __OS2__
Index: kbuild-0.1.98svn2318/src/kmk/make.h
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/make.h	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/make.h	2009-08-06 18:52:25.000000000 +0200
@@ -218,7 +218,7 @@
 #  include <malloc/malloc.h>
 #  define SIZE_OF_HEAP_BLOCK(ptr)   malloc_good_size(ptr)

-# elif defined(__linux__) /* glibc */
+# elif defined(__linux__) || defined(__GLIBC__) /* glibc */
 #  include <malloc.h>
 #  define SIZE_OF_HEAP_BLOCK(ptr)   malloc_usable_size(ptr)

Index: kbuild-0.1.98svn2318/src/lib/k/kDefs.h
===================================================================
--- kbuild-0.1.98svn2318.orig/src/lib/k/kDefs.h	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/lib/k/kDefs.h	2009-08-06 18:52:25.000000000 +0200
@@ -56,8 +56,10 @@
 #define K_OS_SOLARIS    9
 /** Windows. */
 #define K_OS_WINDOWS    10
+/** GNU/kFreeBSD (move to 4 probably) */
+#define K_OS_GNUKFREEBSD 11
 /** The max K_OS_* value (exclusive). */
-#define K_OS_MAX        11
+#define K_OS_MAX        12
 /** @} */

 /** @def K_OS
@@ -78,6 +80,8 @@
 #  define K_OS      K_OS_DRAGONFLY
 # elif defined(__FreeBSD__) /*??*/
 #  define K_OS      K_OS_FREEBSD
+# elif defined(__FreeBSD_kernel__) /*??*/
+#  define K_OS      K_OS_GNUKFREEBSD
 # elif defined(__gnu_linux__)
 #  define K_OS      K_OS_LINUX
 # elif defined(__NetBSD__) /*??*/
Index: kbuild-0.1.98svn2318/Config.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/Config.kmk	2009-08-06 18:51:40.000000000 +0200
+++ kbuild-0.1.98svn2318/Config.kmk	2009-08-06 18:52:25.000000000 +0200
@@ -101,6 +101,7 @@
 #
 DEFS.darwin  += KBUILD_OS_DARWIN
 DEFS.freebsd += KBUILD_OS_FREEBSD
+DEFS.gnukfreebsd += KBUILD_OS_GNUKFREEBSD
 DEFS.linux   += KBUILD_OS_LINUX
 DEFS.netbsd  += KBUILD_OS_NETBSD
 DEFS.openbsd += KBUILD_OS_OPENBSD
@@ -263,7 +264,7 @@

 ifndef TEMPLATE_BIN_TOOL
  # Use GCC3 when we're certain that the system is using GNU ld and ar.
- ifeq ($(filter-out linux freebsd openbsd netbsd,$(KBUILD_TARGET)),)
+ ifeq ($(filter-out linux gnukfreebsd freebsd openbsd netbsd,$(KBUILD_TARGET)),)
   TEMPLATE_BIN_TOOL              = GCC3
  else
   TEMPLATE_BIN_TOOL              = GCC3PLAIN
Index: kbuild-0.1.98svn2318/kBuild/env.sh
===================================================================
--- kbuild-0.1.98svn2318.orig/kBuild/env.sh	2009-08-06 18:51:40.000000000 +0200
+++ kbuild-0.1.98svn2318/kBuild/env.sh	2009-08-06 18:52:25.000000000 +0200
@@ -260,6 +260,10 @@
             KBUILD_HOST=dragonfly
             ;;

+        GNU/kFreeBSD)
+            KBUILD_HOST=gnukfreebsd
+			;;
+
         freebsd|FreeBSD|FREEBSD)
             KBUILD_HOST=freebsd
             ;;
Index: kbuild-0.1.98svn2318/kBuild/header.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/kBuild/header.kmk	2009-08-06 18:51:40.000000000 +0200
+++ kbuild-0.1.98svn2318/kBuild/header.kmk	2009-08-06 18:52:25.000000000 +0200
@@ -176,7 +176,7 @@
 # this keyword namespace is shared between OSes, architectures, cpus and
 # build types. (PORTME)
 #
-KBUILD_OSES   := darwin dos dragonfly freebsd l4 linux netbsd nt openbsd os2 solaris win os-agnostic
+KBUILD_OSES   := darwin dos dragonfly freebsd gnukfreebsd l4 linux netbsd nt openbsd os2 solaris win os-agnostic
 KBUILD_ARCHES := x86 amd64 sparc32 sparc64 s390 s390x ppc32 ppc64 mips32 mips64 ia64 hppa32 hppa64 arm alpha


@@ -493,7 +493,7 @@
 EXEC_X86_WIN32      := innopec.exe
 HOSTSUFF_EXE        := .exe

-else if1of ($(KBUILD_HOST), freebsd dragonfly linux openbsd netbsd)
+else if1of ($(KBUILD_HOST), gnukfreebsd freebsd dragonfly linux openbsd netbsd)
 # Unix (like) systems with wine.
 EXEC_X86_WIN32      := wine
 HOSTSUFF_EXE        :=
@@ -537,7 +537,7 @@
 SUFF_LIB    := .a
 SUFF_DLL    := .so
 SUFF_EXE    :=
- if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd) ## @todo check netbsd and openbsd.
+ if1of ($(KBUILD_TARGET), dragonfly gnukfreebsd freebsd linux netbsd openbsd) ## @todo check netbsd and openbsd.
 SUFF_SYS    := .ko
  else
 SUFF_SYS    :=
Index: kbuild-0.1.98svn2318/kBuild/tools/GCC32.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/kBuild/tools/GCC32.kmk	2009-08-06 18:51:40.000000000 +0200
+++ kbuild-0.1.98svn2318/kBuild/tools/GCC32.kmk	2009-08-06 18:52:25.000000000 +0200
@@ -47,6 +47,7 @@
 TOOL_GCC32_LDFLAGS.dll ?= $(TOOL_GCC32_LDFLAGS.$(KBUILD_TARGET))
 endif
 TOOL_GCC32_LDFLAGS.sysmod ?= -r -m elf_i386$(if-expr "$(KBUILD_TARGET)" == "freebsd",_fbsd,)
+TOOL_GCC32_LDFLAGS.sysmod ?= -r -m elf_i386$(if-expr "$(KBUILD_TARGET)" == "gnukfreebsd",_fbsd,)
 TOOL_GCC32_LD_SONAME ?= -Wl,-soname=$(firstword $($(1)_SONAME.$(KBUILD_TARGET).$(KBUILD_TYPE)) $($(1)_SONAME.$(KBUILD_TARGET)) $($(1)_SONAME.$(KBUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
 ifeq ($(KBUILD_TARGET),os2)
 TOOL_GCC32_LD_MAP ?= -Zmap=$(1)
Index: kbuild-0.1.98svn2318/kBuild/tools/GCC64.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/kBuild/tools/GCC64.kmk	2009-08-06 18:51:40.000000000 +0200
+++ kbuild-0.1.98svn2318/kBuild/tools/GCC64.kmk	2009-08-06 18:52:25.000000000 +0200
@@ -47,6 +47,7 @@
 TOOL_GCC64_LDFLAGS.dll ?= $(TOOL_GCC64_LDFLAGS.$(KBUILD_TARGET))
 endif
 TOOL_GCC64_LDFLAGS.sysmod ?= -r -m elf_x86_64$(if-expr "$(KBUILD_TARGET)" == "freebsd",_fbsd,)
+TOOL_GCC64_LDFLAGS.sysmod ?= -r -m elf_x86_64$(if-expr "$(KBUILD_TARGET)" == "gnukfreebsd",_fbsd,)
 TOOL_GCC64_LD_SONAME ?= -Wl,-soname=$(firstword $($(1)_SONAME.$(KBUILD_TARGET).$(KBUILD_TYPE)) $($(1)_SONAME.$(KBUILD_TARGET)) $($(1)_SONAME.$(KBUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
 ifeq ($(KBUILD_TARGET),os2)
 TOOL_GCC64_LD_MAP ?= -Zmap=$(1)
Index: kbuild-0.1.98svn2318/kBuild/tools/GXX32.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/kBuild/tools/GXX32.kmk	2009-08-06 18:51:40.000000000 +0200
+++ kbuild-0.1.98svn2318/kBuild/tools/GXX32.kmk	2009-08-06 18:52:25.000000000 +0200
@@ -47,6 +47,7 @@
 TOOL_GXX32_LDFLAGS.dll ?= $(TOOL_GXX32_LDFLAGS.$(KBUILD_TARGET))
 endif
 TOOL_GXX32_LDFLAGS.sysmod ?= -r -m elf_i386$(if-expr "$(KBUILD_TARGET)" == "freebsd",_fbsd,)
+TOOL_GXX32_LDFLAGS.sysmod ?= -r -m elf_i386$(if-expr "$(KBUILD_TARGET)" == "gnukfreebsd",_fbsd,)
 TOOL_GXX32_LD_SONAME ?= -Wl,-soname=$(firstword $($(1)_SONAME.$(KBUILD_TARGET).$(KBUILD_TYPE)) $($(1)_SONAME.$(KBUILD_TARGET)) $($(1)_SONAME.$(KBUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
 ifeq ($(KBUILD_TARGET),os2)
 TOOL_GXX32_LD_MAP ?= -Zmap=$(1)
Index: kbuild-0.1.98svn2318/kBuild/tools/GXX64.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/kBuild/tools/GXX64.kmk	2009-08-06 18:51:40.000000000 +0200
+++ kbuild-0.1.98svn2318/kBuild/tools/GXX64.kmk	2009-08-06 18:52:25.000000000 +0200
@@ -47,6 +47,7 @@
 TOOL_GXX64_LDFLAGS.dll ?= $(TOOL_GXX64_LDFLAGS.$(KBUILD_TARGET))
 endif
 TOOL_GXX64_LDFLAGS.sysmod ?= -r -m elf_x86_64$(if-expr "$(KBUILD_TARGET)" == "freebsd",_fbsd,)
+TOOL_GXX64_LDFLAGS.sysmod ?= -r -m elf_x86_64$(if-expr "$(KBUILD_TARGET)" == "gnukfreebsd",_fbsd,)
 TOOL_GXX64_LD_SONAME ?= -Wl,-soname=$(firstword $($(1)_SONAME.$(KBUILD_TARGET).$(KBUILD_TYPE)) $($(1)_SONAME.$(KBUILD_TARGET)) $($(1)_SONAME.$(KBUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
 ifeq ($(KBUILD_TARGET),os2)
 TOOL_GXX64_LD_MAP ?= -Zmap=$(1)
Index: kbuild-0.1.98svn2318/src/ash/Makefile.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/src/ash/Makefile.kmk	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/ash/Makefile.kmk	2009-08-06 18:59:04.000000000 +0200
@@ -45,6 +45,8 @@
 	HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
 kmk_ash_DEFS.dragonfly = \
 	HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
+kmk_ash_DEFS.gnukfreebsd = \
+	HAVE_SYSCTL_H
 kmk_ash_DEFS.freebsd = \
 	HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
 kmk_ash_INCS = $(PATH_kmk_ash) . # (the last is because of error.h)
@@ -79,6 +81,10 @@
 	$(PATH_kmk_ash)/builtins.c \
 	$(PATH_kmk_ash)/init.c \
 	$(PATH_kmk_ash)/nodes.c
+kmk_ash_SOURCES.gnukfreebsd = \
+	sys_signame.c \
+	strlcpy.c \
+	setmode.c
 kmk_ash_SOURCES.linux = \
 	sys_signame.c \
 	strlcpy.c \
Index: kbuild-0.1.98svn2318/src/kash/Makefile.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kash/Makefile.kmk	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kash/Makefile.kmk	2009-08-06 18:52:25.000000000 +0200
@@ -48,6 +48,8 @@
 	HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
 kash_DEFS.dragonfly = \
 	HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
+kash_DEFS.gnukfreebsd = \
+	HAVE_SYSCTL_H
 kash_DEFS.freebsd = \
 	HAVE_SYS_SIGNAME HAVE_SYSCTL_H HAVE_SETPROGNAME
 kash_INCS = $(PATH_kash) . # (the last is because of error.h)
@@ -96,6 +98,9 @@
 	shheap.c \
 	shthread.c \
 	shfile.c
+kash_SOURCES.gnukfreebsd = \
+	sys_signame.c \
+	strlcpy.c
 kash_SOURCES.linux = \
 	sys_signame.c \
 	strlcpy.c
Index: kbuild-0.1.98svn2318/src/kmk/kmkbuiltin/install.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/kmkbuiltin/install.c	2009-08-06 18:51:38.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/kmkbuiltin/install.c	2009-08-06 18:52:25.000000000 +0200
@@ -198,7 +198,8 @@
 			dodir = 1;
 			break;
 		case 'f':
-#ifdef UF_IMMUTABLE
+#if defined(UF_IMMUTABLE) && !defined(__GLIBC__)
+            /** @todo: we need strtofflags() exported in e.g. libbsd */
 			flags = optarg;
 			if (strtofflags(&flags, &fset, NULL))
 				return errx(EX_USAGE, "%s: invalid flag", flags);
Index: kbuild-0.1.98svn2318/src/kmk/kmkbuiltin/rm.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/kmkbuiltin/rm.c	2009-08-06 18:51:38.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/kmkbuiltin/rm.c	2009-08-06 18:52:25.000000000 +0200
@@ -608,7 +608,8 @@
                     )
 			return (1);
 		bsd_strmode(sp->st_mode, modep);
-#ifdef SF_APPEND
+#if defined(SF_APPEND) && !defined(__GLIBC__)
+        /** @todo: we need fflagstostr() exported in e.g. libbsd */
 		if ((flagsp = fflagstostr(sp->st_flags)) == NULL)
 			exit(err(1, "fflagstostr"));
 		(void)fprintf(stderr, "override %s%s%s/%s %s%sfor %s? ",
Index: kbuild-0.1.98svn2318/src/kmk/Makefile.kmk
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/Makefile.kmk	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/Makefile.kmk	2009-08-06 18:58:27.000000000 +0200
@@ -100,6 +100,9 @@
 	glob/glob.c \
 	glob/fnmatch.c

+kmkmissing_SOURCES.gnukfreebsd += \
+	kmkbuiltin/strlcpy.c
+
 kmkmissing_SOURCES.linux += \
 	kmkbuiltin/strlcpy.c

@@ -218,7 +221,10 @@
 #kmk_LIBS.solaris = malloc
 #kmk_DEFS.solaris += HAVE_MALLINFO

+kmk_LIBS.gnukfreebsd.amd64 = pthread
 kmk_LIBS.freebsd.amd64 = pthread
+
+kmk_DEFS.gnukfreebsd.x86 = CONFIG_WITHOUT_THREADS
 kmk_DEFS.freebsd.x86 = CONFIG_WITHOUT_THREADS

 #
Index: kbuild-0.1.98svn2318/src/kmk/file.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/kmk/file.c	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/kmk/file.c	2009-08-06 18:52:25.000000000 +0200
@@ -1042,7 +1042,8 @@
      only one-second resolution.  The code below should work, but it's
      not worth the hassle of debugging it on hosts where it fails.  */
 #if FILE_TIMESTAMP_HI_RES
-# if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME
+# if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME && !defined (__FreeBSD_kernel__)
+  /** @todo: Undefined references to clock_gettime() on GNU/kFreeBSD */
   {
     struct timespec timespec;
     if (clock_gettime (CLOCK_REALTIME, &timespec) == 0)
Index: kbuild-0.1.98svn2318/src/ash/jobs.c
===================================================================
--- kbuild-0.1.98svn2318.orig/src/ash/jobs.c	2009-08-06 18:51:39.000000000 +0200
+++ kbuild-0.1.98svn2318/src/ash/jobs.c	2009-08-06 18:52:25.000000000 +0200
@@ -58,7 +58,7 @@
 #endif
 #include <sys/types.h>
 #include <sys/param.h>
-#if defined(BSD) || defined(__sun__)
+#if defined(BSD) || defined(__sun__) || defined(__FreeBSD_kernel__)
 #include <sys/wait.h>
 #include <sys/time.h>
 #include <sys/resource.h>

Attachment: pgpmEJozXBGN6.pgp
Description: PGP signature

Reply via email to