From 801fbb8a4280fb3c2048e3498ca30129ccb8214a Mon Sep 17 00:00:00 2001 From: Sergei Reznikov Date: Tue, 10 Jan 2017 23:17:10 +0300 Subject: [PATCH] kBuild: add WIP recipe for version 0.1.5 --- dev-util/kbuild/kbuild-0.1.5.recipe | 62 ++ dev-util/kbuild/patches/kbuild-0.1.5-p2.patch | 827 ++++++++++++++++++ 2 files changed, 889 insertions(+) create mode 100644 dev-util/kbuild/kbuild-0.1.5.recipe create mode 100644 dev-util/kbuild/patches/kbuild-0.1.5-p2.patch diff --git a/dev-util/kbuild/kbuild-0.1.5.recipe b/dev-util/kbuild/kbuild-0.1.5.recipe new file mode 100644 index 000000000..069079e38 --- /dev/null +++ b/dev-util/kbuild/kbuild-0.1.5.recipe @@ -0,0 +1,62 @@ +SUMMARY="A makefile framework for writing simple makefiles for complex tasks" +DESCRIPTION="The goals of the kBuild framework: + +Similar behavior cross all supported platforms. +Flexibility, don't create unnecessary restrictions preventing ad-hoc solutions. +Makefile can very simple to write and maintain. +There are four concepts being tried out in the current kBuild incaration: + +One configuration file for a subtree automatically included. +Target configuration templates as the primary mechanism for makefile \n +simplification. +Tools and SDKs for helping out the templates with flexibility. +Non-recursive makefile method by using sub-makefiles." +HOMEPAGE="https://trac.netlabs.org/kbuild/" +SOURCE_URI="ftp://ftp.netlabs.org/pub/kbuild/kBuild-0.1.5-p2-src.tar.gz" +SOURCE_DIR="kBuild-0.1.5-p2" +COPYRIGHT="kBuild developers" +LICENSE="GNU LGPL v3" +REVISION="1" + +CHECKSUM_SHA256="8205db5e74d27ef6394bd48118a310e4f5caab455575f0ea975f62dcb8d642a6" + +ARCHITECTURES="!x86_gcc2 !x86 !x86_64" +SECONDARY_ARCHITECTURES="!x86_gcc2 !x86" + +PATCHES="kbuild-0.1.5-p2.patch" + +PROVIDES=" + kmk = $portVersion + " +REQUIRES="" + +BUILD_REQUIRES="haiku >= $haikuVersion + " + +BUILD_PREREQUIRES=" + haiku${secondaryArchSuffix}_devel >= $haikuVersion + cmd:aclocal + cmd:autopoint + cmd:autoreconf + cmd:find + cmd:flex + cmd:gcc$secondaryArchSuffix + cmd:ld$secondaryArchSuffix + cmd:make + cmd:makeinfo + cmd:tar + cmd:yacc + " + +BUILD() +{ + sed -i 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/g' src/sed/configure.ac +# TODO: fix install paths + kBuild/env.sh --full make -f bootstrap.gmk NIX_INSTALL_DIR=$prefix +} + +INSTALL() +{ + kBuild/env.sh --full-with-bin kmk NIX_INSTALL_DIR=$prefix + PATH_INS="${D}" install +} diff --git a/dev-util/kbuild/patches/kbuild-0.1.5-p2.patch b/dev-util/kbuild/patches/kbuild-0.1.5-p2.patch new file mode 100644 index 000000000..013b61dd7 --- /dev/null +++ b/dev-util/kbuild/patches/kbuild-0.1.5-p2.patch @@ -0,0 +1,827 @@ +diff --git a/Config.kmk b/Config.kmk +index 774bda5..6e42081 100644 +--- a/Config.kmk ++++ b/Config.kmk +@@ -107,6 +107,8 @@ DEFS.openbsd += KBUILD_OS_OPENBSD + DEFS.os2 += KBUILD_OS_OS2 + DEFS.solaris += KBUILD_OS_SOLARIS + DEFS.win += KBUILD_OS_WINDOWS ++DEFS.haiku += KBUILD_OS_HAIKU ++ + + DEFS.x86 += KBUILD_ARCH_X86 + DEFS.amd64 += KBUILD_ARCH_AMD64 +diff --git a/SvnInfo.kmk b/SvnInfo.kmk +old mode 100755 +new mode 100644 +diff --git a/kBuild/env.sh b/kBuild/env.sh +index 19f8eb2..59901bf 100755 +--- a/kBuild/env.sh ++++ b/kBuild/env.sh +@@ -279,6 +279,10 @@ if test -z "$KBUILD_HOST"; then + os2|OS/2|OS2) + KBUILD_HOST=os2 + ;; ++ ++ Haiku*) ++ KBUILD_HOST=haiku ++ ;; + + SunOS) + KBUILD_HOST=solaris +@@ -322,7 +326,7 @@ if test -z "$KBUILD_HOST_ARCH"; then + x86_64|AMD64|amd64|k8|k8l|k9|k10) + KBUILD_HOST_ARCH='amd64' + ;; +- x86|i86pc|ia32|i[3456789]86) ++ x86|i86pc|ia32|i[3456789]86|BePC) + KBUILD_HOST_ARCH='x86' + ;; + sparc32|sparc|sparcv8|sparcv7|sparcv8e) +diff --git a/kBuild/header.kmk b/kBuild/header.kmk +index d575934..4ec5b84 100644 +--- a/kBuild/header.kmk ++++ b/kBuild/header.kmk +@@ -176,7 +176,7 @@ KBUILD_BLD_TYPES := release profile debug + # 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 l4 linux netbsd nt openbsd os2 solaris win os-agnostic haiku + KBUILD_ARCHES := x86 amd64 sparc32 sparc64 s390 s390x ppc32 ppc64 mips32 mips64 ia64 hppa32 hppa64 arm alpha + + +diff --git a/src/kObjCache/kObjCache.c b/src/kObjCache/kObjCache.c +index b403d58..fb757e0 100644 +--- a/src/kObjCache/kObjCache.c ++++ b/src/kObjCache/kObjCache.c +@@ -70,6 +70,9 @@ + #if defined(__WIN__) + # include + #endif ++#if defined(__HAIKU__) ++# include ++#endif + + #include "crc32.h" + #include "md5.h" +diff --git a/src/kash/Makefile.kmk b/src/kash/Makefile.kmk +index aca65f6..6dc5cc5 100644 +--- a/src/kash/Makefile.kmk ++++ b/src/kash/Makefile.kmk +@@ -98,7 +98,9 @@ kash_SOURCES.win = \ + kash_SOURCES.solaris = \ + sys_signame.c \ + strlcpy.c +- ++kash_SOURCES.haiku = \ ++ sys_signame.c \ ++ strlcpy.c + kash_INTERMEDIATES = \ + $(PATH_kash)/arith.h \ + $(PATH_kash)/builtins.h \ +diff --git a/src/kash/error.h b/src/kash/error.h +index 84a3d61..b5eda62 100644 +--- a/src/kash/error.h ++++ b/src/kash/error.h +@@ -59,7 +59,11 @@ + * inner scope, and restore handler on exit from the scope. + */ + +-#include ++#ifndef __HAIKU__ ++# include ++#else ++# include ++#endif + + struct jmploc { + jmp_buf loc; +@@ -120,7 +124,7 @@ void sh_exit(struct shinstance *, int) __attribute__((__noreturn__)); + * so we use _setjmp instead. + */ + +-#if defined(BSD) && !defined(__SVR4) && !defined(__GLIBC__) && !defined(__KLIBC__) && !defined(_MSC_VER) ++#if defined(BSD) && !defined(__SVR4) && !defined(__GLIBC__) && !defined(__KLIBC__) && !defined(_MSC_VER) && !defined(__HAIKU__) + #define setjmp(jmploc) _setjmp(jmploc) + #define longjmp(jmploc, val) _longjmp(jmploc, val) + #endif +diff --git a/src/kash/jobs.c b/src/kash/jobs.c +index 50eaaa5..6442626 100644 +--- a/src/kash/jobs.c ++++ b/src/kash/jobs.c +@@ -400,10 +400,12 @@ showjob(shinstance *psh, struct output *out, struct job *jp, int mode) + scopyn(sys_siglist[st], s + col, 32); + else + fmtstr(s + col, 16, "Signal %d", st); ++#ifndef __HAIKU__ + if (WCOREDUMP(ps->status)) { + col += strlen(s + col); + scopyn(" (core dumped)", s + col, 64 - col); + } ++#endif + } + col += strlen(s + col); + outstr(s, out); +diff --git a/src/kash/shfile.h b/src/kash/shfile.h +index 51293cc..b677dd2 100644 +--- a/src/kash/shfile.h ++++ b/src/kash/shfile.h +@@ -45,8 +45,10 @@ + # define _PATH_DEFPATH "/bin:/usr/bin:/sbin:/usr/sbin" + # endif + #endif +-#ifndef _MSC_VER +-# include ++#if !defined(_MSC_VER) ++# ifndef __HAIKU__ ++# include ++# endif + # include + # ifndef O_BINARY + # define O_BINARY 0 +diff --git a/src/kash/shtypes.h b/src/kash/shtypes.h +index 18a2194..b58bfed 100644 +--- a/src/kash/shtypes.h ++++ b/src/kash/shtypes.h +@@ -31,11 +31,13 @@ + + #include + #include +-#ifndef _MSC_VER ++#if !defined(_MSC_VER) && !defined(__HAIKU__) + # include ++#elif defined(__HAIKU__) ++#include + #endif + +-#ifdef _MSC_VER ++#if defined(_MSC_VER) + # include /* intptr_t and uintptr_t */ + typedef signed char int8_t; + typedef unsigned char uint8_t; +diff --git a/src/kmk/Makefile.kmk b/src/kmk/Makefile.kmk +index 12b9697..bcaa624 100644 +--- a/src/kmk/Makefile.kmk ++++ b/src/kmk/Makefile.kmk +@@ -57,6 +57,7 @@ TEMPLATE_BIN-KMK_INCS = $(PATH_kmk) . $(TEMPLATE_BIN_INCS) + TEMPLATE_BIN-KMK_INCS.darwin = glob + TEMPLATE_BIN-KMK_INCS.dragonfly = glob + TEMPLATE_BIN-KMK_INCS.freebsd = glob ++TEMPLATE_BIN-KMK_INCS.haiku = glob + TEMPLATE_BIN-KMK_INCS.solaris = glob + TEMPLATE_BIN-KMK_LIBS = $(TEMPLATE_BIN_LIBS) $(TARGET_kmkmissing) $(LIB_KUTIL) + ifdef ELECTRIC_HEAP # for electric heap (see electric.c) - windows only. +@@ -92,6 +93,11 @@ kmkmissing_SOURCES.darwin = \ + glob/glob.c \ + glob/fnmatch.c + ++kmkmissing_SOURCES.haiku = \ ++ kmkbuiltin/haikufakes.c \ ++ glob/glob.c \ ++ glob/fnmatch.c ++ + kmkmissing_SOURCES.dragonfly = \ + glob/glob.c \ + glob/fnmatch.c +diff --git a/src/kmk/arscan.c b/src/kmk/arscan.c +index 5e94000..5300908 100644 +--- a/src/kmk/arscan.c ++++ b/src/kmk/arscan.c +@@ -231,7 +231,7 @@ ar_scan (const char *archive, ar_member_func_t function, const void *arg) + #endif + + #ifndef WINDOWS32 +-# ifndef __BEOS__ ++# ifndef (__BEOS__) && !defined(__HAIKU__) + # include + # else + /* BeOS 5 doesn't have but has archives in the same format +diff --git a/src/kmk/glob/fnmatch.c b/src/kmk/glob/fnmatch.c +index 03d0352..b60ae8e 100644 +--- a/src/kmk/glob/fnmatch.c ++++ b/src/kmk/glob/fnmatch.c +@@ -27,7 +27,7 @@ USA. */ + #endif + + #include +-#include ++#include "fnmatch.h" + #include + + #if HAVE_STRING_H || defined _LIBC +diff --git a/src/kmk/incdep.c b/src/kmk/incdep.c +index 54e5287..ea30984 100644 +--- a/src/kmk/incdep.c ++++ b/src/kmk/incdep.c +@@ -635,7 +635,7 @@ incdep_are_threads_enabled (void) + + #elif defined(__APPLE__) \ + || defined(__sun__) || defined(__SunOS__) || defined(__sun) || defined(__SunOS) \ +- || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) ++ || defined(__FreeBSD__) || defined(__HAIKU__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) + /* No broken preload libraries known to be in common use on these platforms... */ + + #elif defined(_MSC_VER) || defined(_WIN32) || defined(__OS2__) +diff --git a/src/kmk/job.c b/src/kmk/job.c +index 6d14300..137f2d6 100644 +--- a/src/kmk/job.c ++++ b/src/kmk/job.c +@@ -2050,7 +2050,7 @@ job_next_command (struct child *child) + static int + load_too_high (void) + { +-#if defined(__MSDOS__) || defined(VMS) || defined(_AMIGA) || defined(__riscos__) ++#if defined(__MSDOS__) || defined(VMS) || defined(_AMIGA) || defined(__riscos__) || defined(__HAIKU__) + return 1; + #else + static double last_sec; +diff --git a/src/kmk/kmkbuiltin/chmod.c b/src/kmk/kmkbuiltin/chmod.c +index 3e1eaec..6bcc1e6 100644 +--- a/src/kmk/kmkbuiltin/chmod.c ++++ b/src/kmk/kmkbuiltin/chmod.c +@@ -60,6 +60,9 @@ static char sccsid[] = "@(#)chmod.c 8.8 (Berkeley) 4/1/94"; + #ifdef __sun__ + # include "solfakes.h" + #endif ++#ifdef __HAIKU__ ++# include "haikufakes.h" ++#endif + #include "getopt.h" + #include "kmkbuiltin.h" + +@@ -92,6 +95,7 @@ kmk_builtin_chmod(int argc, char *argv[], char **envp) + char *mode; + mode_t newmode; + int (*change_mode)(const char *, mode_t); ++ extern int lchmod(const char *, mode_t); + + /* kmk: reset getopt and set progname */ + g_progname = argv[0]; +diff --git a/src/kmk/kmkbuiltin/cp_utils.c b/src/kmk/kmkbuiltin/cp_utils.c +index 1773815..1cf0191 100644 +--- a/src/kmk/kmkbuiltin/cp_utils.c ++++ b/src/kmk/kmkbuiltin/cp_utils.c +@@ -52,11 +52,16 @@ __FBSDID("$FreeBSD: src/bin/cp/utils.c,v 1.43 2004/04/06 20:06:44 markm Exp $"); + #include + #include + #include ++#ifndef __HAIKU__ + #include ++#endif + #include + #ifdef __sun__ + # include "solfakes.h" + #endif ++#ifdef __HAIKU__ ++# include "haikufakes.h" ++#endif + #ifdef _MSC_VER + # define MSC_DO_64_BIT_IO + # include "mscfakes.h" +diff --git a/src/kmk/kmkbuiltin/fts.c b/src/kmk/kmkbuiltin/fts.c +index f913f17..9860f67 100644 +--- a/src/kmk/kmkbuiltin/fts.c ++++ b/src/kmk/kmkbuiltin/fts.c +@@ -75,7 +75,7 @@ __RCSID("$NetBSD: __fts13.c,v 1.44 2005/01/19 00:59:48 mycroft Exp $"); + #endif + + #if ! HAVE_NBTOOL_CONFIG_H +-# if !defined(__sun__) && !defined(__gnu_linux__) ++# if !defined(__sun__) && !defined(__gnu_linux__) && !defined(__HAIKU__) + # define HAVE_STRUCT_DIRENT_D_NAMLEN 1 + # endif + #endif +diff --git a/src/kmk/kmkbuiltin/install.c b/src/kmk/kmkbuiltin/install.c +index 9ab4b00..e13bf89 100644 +--- a/src/kmk/kmkbuiltin/install.c ++++ b/src/kmk/kmkbuiltin/install.c +@@ -52,7 +52,9 @@ __FBSDID("$FreeBSD: src/usr.bin/xinstall/xinstall.c,v 1.66 2005/01/25 14:34:57 s + # ifdef USE_MMAP + # include + # endif +-# include ++# ifndef __HAIKU__ ++#  include ++# endif + # include + # include + #endif /* !_MSC_VER */ +@@ -68,7 +70,9 @@ __FBSDID("$FreeBSD: src/usr.bin/xinstall/xinstall.c,v 1.66 2005/01/25 14:34:57 s + #include + #include + #include +-#include ++#ifndef __HAIKU__ ++# include ++#endif + #include + #if defined(__EMX__) || defined(_MSC_VER) + # include +@@ -80,6 +84,9 @@ __FBSDID("$FreeBSD: src/usr.bin/xinstall/xinstall.c,v 1.66 2005/01/25 14:34:57 s + #ifdef _MSC_VER + # include "mscfakes.h" + #endif ++#ifdef __HAIKU__ ++# include "haikufakes.h" ++#endif + #include "kmkbuiltin.h" + + +diff --git a/src/kmk/kmkbuiltin/mkdir.c b/src/kmk/kmkbuiltin/mkdir.c +index e066460..d04dc91 100644 +--- a/src/kmk/kmkbuiltin/mkdir.c ++++ b/src/kmk/kmkbuiltin/mkdir.c +@@ -53,12 +53,17 @@ __FBSDID("$FreeBSD: src/bin/mkdir/mkdir.c,v 1.28 2004/04/06 20:06:48 markm Exp $ + #include + #include + #include +-#include ++#ifndef __HAIKU__ ++# include ++#endif + #include + #ifdef HAVE_ALLOCA_H + # include + #endif + #include "getopt.h" ++#ifdef __HAIKU__ ++# include "haikufakes.h" ++#endif + #ifdef _MSC_VER + # include + # include "mscfakes.h" +diff --git a/src/kmk/kmkbuiltin/mv.c b/src/kmk/kmkbuiltin/mv.c +index 2233c56..8f9e271 100644 +--- a/src/kmk/kmkbuiltin/mv.c ++++ b/src/kmk/kmkbuiltin/mv.c +@@ -55,7 +55,9 @@ __FBSDID("$FreeBSD: src/bin/mv/mv.c,v 1.46 2005/09/05 04:36:08 csjp Exp $"); + # include + # include + # include +-# include ++# ifndef __HAIKU__ ++# include ++# endif + #endif + #include + +@@ -69,12 +71,17 @@ __FBSDID("$FreeBSD: src/bin/mv/mv.c,v 1.46 2005/09/05 04:36:08 csjp Exp $"); + #include + #include + #include +-#include ++#ifndef __HAIKU__ ++# include ++#endif + #include + #include "getopt.h" + #ifdef __sun__ + # include "solfakes.h" + #endif ++#ifdef __HAIKU__ ++# include "haikufakes.h" ++#endif + #ifdef _MSC_VER + # include "mscfakes.h" + #endif +diff --git a/src/kmk/kmkbuiltin/rm.c b/src/kmk/kmkbuiltin/rm.c +index 1b6522c..c6b2fb8 100644 +--- a/src/kmk/kmkbuiltin/rm.c ++++ b/src/kmk/kmkbuiltin/rm.c +@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)rm.c 8.5 (Berkeley) 4/18/94"; + + #include "config.h" + #include +-#ifndef _MSC_VER ++#if !defined(_MSC_VER) && !defined(__HAIKU__) + # include + # include + #endif +@@ -57,10 +57,14 @@ static char sccsid[] = "@(#)rm.c 8.5 (Berkeley) 4/18/94"; + #include + #include + #include +-#include +-#include ++#ifndef __HAIKU__ ++# include ++#endif#include + #include + #include "getopt.h" ++#ifdef __HAIKU__ ++# include "haikufakes.h" ++#endif + #ifdef _MSC_VER + # include "mscfakes.h" + #endif +diff --git a/src/kmk/main.c b/src/kmk/main.c +index e901e98..3a95bf7 100644 +--- a/src/kmk/main.c ++++ b/src/kmk/main.c +@@ -55,6 +55,9 @@ this program. If not, see . */ + # define INCL_BASE + # include + # endif ++# ifdef __HAIKU__ ++# include ++# endif + #endif /* KMK*/ + + #if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) +@@ -850,7 +853,25 @@ set_make_priority_and_affinity (void) + if (!SetPriorityClass (GetCurrentProcess (), dwPriority)) + fprintf (stderr, "warning: SetPriorityClass (,%#x) failed with last error %d\n", + dwPriority, GetLastError ()); ++#elif __HAIKU__ ++ int32 newPriority; ++ status_t error; + ++ switch (process_priority) ++ { ++ case 0: return; ++ case 1: newPriority = B_LOWEST_ACTIVE_PRIORITY; break; ++ case 2: newPriority = B_LOW_PRIORITY; break; ++ case 3: newPriority = B_NORMAL_PRIORITY; break; ++ case 4: newPriority = B_URGENT_DISPLAY_PRIORITY; break; ++ case 5: newPriority = B_REAL_TIME_DISPLAY_PRIORITY; break; ++ default: fatal(NILF, _("invalid priority %d\n"), process_priority); ++ } ++ error = set_thread_priority (find_thread (NULL), newPriority); ++ if (error != B_OK) ++//   fprintf (stderr, "warning: set_thread_priority (,%d) failed: %s\n", ++ fprintf (stderr, "warning: SetPriorityClass (,%#x) failed with last error %d\n", ++ newPriority, strerror (error)); + # else /*#elif HAVE_NICE */ + int nice_level = 0; + switch (process_priority) +diff --git a/src/kmk/maintMakefile b/src/kmk/maintMakefile +index 276457f..79a5f23 100644 +--- a/src/kmk/maintMakefile ++++ b/src/kmk/maintMakefile +@@ -3,7 +3,7 @@ + # tree, not a dist copy. + + # We like mondo-warnings! +-AM_CFLAGS += -Wall -Wextra -Wdeclaration-after-statement -Wshadow -Wpointer-arith -Wbad-function-cast ++AM_CFLAGS += -Wall -Wshadow -Wpointer-arith -Wbad-function-cast + + # I want this one but I have to wait for the const cleanup! + # -Wwrite-strings +diff --git a/src/kmk/make.h b/src/kmk/make.h +index 38b511f..2c2b984 100644 +--- a/src/kmk/make.h ++++ b/src/kmk/make.h +@@ -158,7 +158,7 @@ unsigned int get_path_max (void); + # define MY_INLINE static + # endif + +-# ifdef __GNUC__ ++#if !defined __HAIKU__ + # define MY_PREDICT_TRUE(expr) __builtin_expect(!!(expr), 1) + # define MY_PREDICT_FALSE(expr) __builtin_expect(!!(expr), 0) + # else +diff --git a/src/lib/k/kDefs.h b/src/lib/k/kDefs.h +index ead7fd0..fef30bf 100644 +--- a/src/lib/k/kDefs.h ++++ b/src/lib/k/kDefs.h +@@ -57,7 +57,7 @@ + /** Windows. */ + #define K_OS_WINDOWS 10 + /** The max K_OS_* value (exclusive). */ +-#define K_OS_MAX 11 ++#define K_OS_MAX 12 + /** @} */ + + /** @def K_OS +@@ -78,6 +78,8 @@ + # define K_OS K_OS_DRAGONFLY + # elif defined(__FreeBSD__) /*??*/ + # define K_OS K_OS_FREEBSD ++# elif defined(__HAIKU__) /*??*/ ++# define K_OS K_OS_HAIKU + # elif defined(__gnu_linux__) + # define K_OS K_OS_LINUX + # elif defined(__NetBSD__) /*??*/ +diff --git a/src/misc/kmk_time.c b/src/misc/kmk_time.c +index 9b2e73b..fb3e58e 100644 +--- a/src/misc/kmk_time.c ++++ b/src/misc/kmk_time.c +@@ -360,8 +360,10 @@ int main(int argc, char **argv) + (unsigned)tv.tv_usec); + if (WIFEXITED(rc)) + printf(" - normal exit: %d\n", WEXITSTATUS(rc)); ++#ifndef __HAIKU__ + else if (WIFSIGNALED(rc) && WCOREDUMP(rc)) + printf(" - dumped core: %s (%d)\n", my_strsignal(WTERMSIG(rc)), WTERMSIG(rc)); ++#endif + else if (WIFSIGNALED(rc)) + printf(" - killed by: %s (%d)\n", my_strsignal(WTERMSIG(rc)), WTERMSIG(rc)); + else if (WIFSTOPPED(rc)) +diff --git a/src/sed/Makefile.kmk b/src/sed/Makefile.kmk +index 30c3585..ed67536 100644 +--- a/src/sed/Makefile.kmk ++++ b/src/sed/Makefile.kmk +@@ -76,6 +76,9 @@ kmk_sed_SOURCES.win = \ + lib/mkstemp.c \ + lib/getline.c \ + ../lib/startuphacks-win.c ++kmk_sed_SOURCES.haiku = \ ++ lib/strverscmp.c \ ++ lib/obstack.c + + include $(FILE_KBUILD_SUB_FOOTER) + +diff --git a/src/sed/config/help2man b/src/sed/config/help2man +index af57f41..89638a0 100755 +--- a/src/sed/config/help2man ++++ b/src/sed/config/help2man +@@ -1,4 +1,4 @@ +-#!/usr/bin/env perl ++#!/bin/env perl + + # Generate a short man page from --help and --version output. + # Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software + +Index: a/src/kmk/kmkbuiltin/haikufakes.c +=================================================================== +--- a/src/kmk/kmkbuiltin/haikufakes.c (revision 0) ++++ b/src/kmk/kmkbuiltin/haikufakes.c (revision 0) +@@ -0,0 +1,52 @@ ++/* $Id: haikufakes.c 2413 2010-09-11 17:43:04Z bird $ */ ++/** @file ++ * Fake Unix stuff for Haiku. ++ */ ++ ++/* ++ * Copyright (c) 2005-2010 knut st. osmundsen ++ * ++ * This file is part of kBuild. ++ * ++ * kBuild is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * kBuild is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with kBuild. If not, see ++ * ++ */ ++ ++/******************************************************************************* ++* Header Files * ++*******************************************************************************/ ++#include "config.h" ++#include ++#include ++#include ++#include ++#include ++#include "haikufakes.h" ++ ++ ++int haiku_lchmod(const char *pszPath, mode_t mode) ++{ ++ /* ++ * Weed out symbolic links. ++ */ ++ struct stat s; ++ if ( !lstat(pszPath, &s) ++ && S_ISLNK(s.st_mode)) ++ { ++ errno = -ENOSYS; ++ return -1; ++ } ++ ++ return chmod(pszPath, mode); ++} + +Index: a/src/kmk/kmkbuiltin/haikufakes.h +=================================================================== +--- a/src/kmk/kmkbuiltin/haikufakes.h (revision 0) ++++ b/src/kmk/kmkbuiltin/haikufakes.h (revision 0) +@@ -0,0 +1,39 @@ ++/* $Id: mscfakes.h 2413 2010-09-11 17:43:04Z bird $ */ ++/** @file ++ * Unix fakes for MSC. ++ */ ++ ++/* ++ * Copyright (c) 2005-2010 knut st. osmundsen ++ * ++ * This file is part of kBuild. ++ * ++ * kBuild is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * kBuild is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with kBuild. If not, see ++ * ++ */ ++ ++#ifndef ___haikufakes_h ++#define ___haikufakes_h ++ ++#define EX_OK 0 ++#define EX_OSERR 1 ++#define EX_NOUSER 1 ++#define EX_USAGE 1 ++#define EX_TEMPFAIL 1 ++#define EX_SOFTWARE 1 ++ ++#define lutimes(path, tvs) utimes(path, tvs) ++#define lchmod chmod ++ ++#endif + +diff --git a/src/sed/lib/regexec.c b/src/sed/lib/regexec.c +index 8c5e296..aa4f65c 100644 +--- a/src/sed/lib/regexec.c ++++ b/src/sed/lib/regexec.c +@@ -17,6 +17,7 @@ + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ ++#include "stdbool.h" + + static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, + int n) internal_function; + +diff --git a/src/sed/lib/utils.c b/src/sed/lib/utils.c +index 647fd6d..21eb4d0 100644 +--- a/src/sed/lib/utils.c ++++ b/src/sed/lib/utils.c +@@ -19,7 +19,7 @@ + #include "config.h" + + #include +- ++#include "stdbool.h" + #include + #ifndef errno + extern int errno; + +diff --git a/src/sed/sed/sed.h b/src/sed/sed/sed.h +index 78bd937..646cfc3 100644 +--- a/src/sed/sed/sed.h ++++ b/src/sed/sed/sed.h +@@ -20,6 +20,7 @@ + #include "config.h" + #endif + ++#include "stdbool.h" + #include "basicdefs.h" + #include "regex.h" + +diff --git a/src/ash/eval.c b/src/ash/eval.c +index 7e8a51c..1a71c09 100644 +--- a/src/ash/eval.c ++++ b/src/ash/eval.c +@@ -47,7 +47,9 @@ __RCSID("$NetBSD: eval.c,v 1.84 2005/06/23 23:05:29 christos Exp $"); + #include + #include + #include +-#include ++#ifndef __HAIKU__ ++# include ++#endif + #include + #include + #include +@@ -137,6 +139,7 @@ static int + sh_pipe(int fds[2]) + { + int nfd; ++ int F_DUPFD; + + if (pipe(fds)) + return -1; +diff --git a/src/ash/jobs.c b/src/ash/jobs.c +index 146326a..9b6165e 100644 +--- a/src/ash/jobs.c ++++ b/src/ash/jobs.c +@@ -58,7 +58,7 @@ __RCSID("$NetBSD: jobs.c,v 1.63 2005/06/01 15:41:19 lukem Exp $"); + #endif + #include + #include +-#if defined(BSD) || defined(__sun__) ++#if defined(BSD) || defined(__sun__) || defined(__HAIKU__) + #include + #include + #include +diff --git a/src/ash/show.c b/src/ash/show.c +index 2769c69..4d2353c 100644 +--- a/src/ash/show.c ++++ b/src/ash/show.c +@@ -46,7 +46,9 @@ __RCSID("$NetBSD: show.c,v 1.26 2003/11/14 10:46:13 dsl Exp $"); + #include + #include + #include +-#include ++#ifndef __HAIKU__ ++# include ++#endif + #include + + #include "shell.h" +diff --git a/src/ash/trap.c b/src/ash/trap.c +index 6a246e6..378856e 100644 +--- a/src/ash/trap.c ++++ b/src/ash/trap.c +@@ -88,7 +88,7 @@ int pendingsigs; /* indicates some signal received */ + #ifdef __sun__ + typedef void (*sig_t) (int); + #endif +-static int getsigaction(int, sig_t *); ++static int getsigaction(int, __sighandler_t *); + + /* + * return the signal number described by `p' (as a number or a name) +@@ -251,7 +251,7 @@ long + setsignal(int signo, int vforked) + { + int action; +- sig_t sigact = SIG_DFL; ++ __sighandler_t sigact = SIG_DFL; + char *t, tsig; + + if ((t = trap[signo]) == NULL) +@@ -327,13 +327,13 @@ setsignal(int signo, int vforked) + * Return the current setting for sig w/o changing it. + */ + static int +-getsigaction(int signo, sig_t *sigact) ++getsigaction(int signo, __sighandler_t *sigact) + { + struct sigaction sa; + + if (sigaction(signo, (struct sigaction *)0, &sa) == -1) + return 0; +- *sigact = (sig_t) sa.sa_handler; ++ *sigact = (__sighandler_t) sa.sa_handler; + return 1; + } + +diff --git a/Config.kmk b/Config.kmk +index 6e42081..1856f31 100644 +--- a/Config.kmk ++++ b/Config.kmk +@@ -293,7 +293,7 @@ ifndef TEMPLATE_BIN_TOOL + TEMPLATE_BIN_CXXFLAGS.sparc32+= -m32 + TEMPLATE_BIN_CXXFLAGS.amd64 += -m64 + TEMPLATE_BIN_CXXFLAGS.sparc64+= -m64 +- TEMPLATE_BIN_LDFLAGS.x86 += -m32 ++ TEMPLATE_BIN_LDFLAGS.x86 += -m32 -lbsd -lroot + TEMPLATE_BIN_LDFLAGS.sparc32 += -m32 + TEMPLATE_BIN_LDFLAGS.amd64 += -m64 + TEMPLATE_BIN_LDFLAGS.sparc64 += -m64 +diff --git a/src/ash/error.h b/src/ash/error.h +index b4637f1..9bb0ebe 100644 +--- a/src/ash/error.h ++++ b/src/ash/error.h +@@ -111,7 +111,7 @@ void sh_exit(int) __attribute__((__noreturn__)); + * so we use _setjmp instead. + */ + +-#if defined(BSD) && !defined(__SVR4) && !defined(__GLIBC__) && !defined(__KLIBC__) && !defined(_MSC_VER) ++#if defined(BSD) && !defined(__SVR4) && !defined(__GLIBC__) && !defined(__KLIBC__) && !defined(_MSC_VER) && !defined(__HAIKU__) + #define setjmp(jmploc) _setjmp(jmploc) + #define longjmp(jmploc, val) _longjmp(jmploc, val) + #endif + +diff --git a/src/ash/Makefile.kmk b/src/ash/Makefile.kmk +index ad1ca85..1a3dabf 100644 +--- a/src/ash/Makefile.kmk ++++ b/src/ash/Makefile.kmk +@@ -36,6 +36,7 @@ kmk_ash_DEFS.debug = DEBUG=2 + endif + kmk_ash_DEFS.linux = BSD + kmk_ash_DEFS.solaris = BSD ++kmk_ash_DEFS.haiku = haiku + kmk_ash_DEFS.win = \ + BSD PC_PATH_SEP PC_DRIVE_LETTERS PC_EXE_EXTS PC_SLASHES + kmk_ash_DEFS.os2 = \ +@@ -94,7 +95,10 @@ kmk_ash_SOURCES.solaris = \ + sys_signame.c \ + strlcpy.c \ + setmode.c +- ++kmk_ash_SOURCES.haiku = \ ++ sys_signame.c \ ++ strlcpy.c \ ++ setmode.c + kmk_ash_INTERMEDIATES = \ + $(PATH_kmk_ash)/builtins.h \ + $(PATH_kmk_ash)/nodes.h \