diff --git a/dev-util/kbuild/kbuild-0.1.5.recipe b/dev-util/kbuild/kbuild-0.1.5.recipe index a919aaf40..069079e38 100644 --- a/dev-util/kbuild/kbuild-0.1.5.recipe +++ b/dev-util/kbuild/kbuild-0.1.5.recipe @@ -12,62 +12,29 @@ 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" -SOURCE_URI="ftp://ftp.netlabs.org/pub/kbuild/kBuild-$portVersion-p2-src.tar.gz" + CHECKSUM_SHA256="8205db5e74d27ef6394bd48118a310e4f5caab455575f0ea975f62dcb8d642a6" -SOURCE_DIR="kBuild-$portVersion-p2" -PATCHES="kbuild-0.1.5-p2.patchset" -ARCHITECTURES="?x86_gcc2 ?x86 x86_64" -SECONDARY_ARCHITECTURES="?x86" +ARCHITECTURES="!x86_gcc2 !x86 !x86_64" +SECONDARY_ARCHITECTURES="!x86_gcc2 !x86" -# On x86_gcc2 we don't want to install the commands in bin//, but in bin/. -commandSuffix=$secondaryArchSuffix -commandBinDir=$binDir -if [ "$targetArchitecture" = x86_gcc2 ]; then - commandSuffix= - commandBinDir=$prefix/bin -fi +PATCHES="kbuild-0.1.5-p2.patch" PROVIDES=" - kbuild$secondaryArchSuffix = $portVersion - kDepIDB$commandSuffix = $portVersion - kDepPre$commandSuffix = $portVersion - kmk$commandSuffix = $portVersion - kmk_append$commandSuffix = $portVersion - kmk_ash$commandSuffix = $portVersion - kmk_cat$commandSuffix = $portVersion - kmk_chmod$commandSuffix = $portVersion - kmk_cmp$commandSuffix = $portVersion - kmk_cp$commandSuffix = $portVersion - kmk_echo$commandSuffix = $portVersion - kmk_expr$commandSuffix = $portVersion - kmk_gmake$commandSuffix = $portVersion - kmk_install$commandSuffix = $portVersion - kmk_ln$commandSuffix = $portVersion - kmk_md5sum$commandSuffix = $portVersion - kmk_mkdir$commandSuffix = $portVersion - kmk_mv$commandSuffix = $portVersion - kmk_printf$commandSuffix = $portVersion - kmk_redirect$commandSuffix = $portVersion - kmk_rm$commandSuffix = $portVersion - kmk_rmdir$commandSuffix = $portVersion - kmk_sed$commandSuffix = $portVersion - kmk_sleep$commandSuffix = $portVersion - kmk_test$commandSuffix = $portVersion - kmk_time$commandSuffix = $portVersion - kObjCache$commandSuffix = $portVersion + kmk = $portVersion " -REQUIRES=" - haiku$secondaryArchSuffix +REQUIRES="" + +BUILD_REQUIRES="haiku >= $haikuVersion " -BUILD_REQUIRES=" - haiku${secondaryArchSuffix}_devel - " BUILD_PREREQUIRES=" + haiku${secondaryArchSuffix}_devel >= $haikuVersion cmd:aclocal cmd:autopoint cmd:autoreconf @@ -81,29 +48,15 @@ BUILD_PREREQUIRES=" cmd:yacc " -# Global variables -export NIX_INSTALL_DIR=$commandBinDir -export MY_INST_DATA=$dataDir -export MY_INST_DOC=$docDir - -archpath=x86 -if [ "$targetArchitecture" = x86_64 ]; then - archpath=amd64 -fi - -PATCH() -{ - sed -i 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/g' src/sed/configure.ac -} - BUILD() { - rm -rf out || true - kBuild/env.sh --full make -f bootstrap.gmk + 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 - cp -R out/haiku.${archpath}/release/packages/${portVersionedName} $prefix + 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.patchset b/dev-util/kbuild/patches/kbuild-0.1.5-p2.patch similarity index 84% rename from dev-util/kbuild/patches/kbuild-0.1.5-p2.patchset rename to dev-util/kbuild/patches/kbuild-0.1.5-p2.patch index fc73ed542..013b61dd7 100644 --- a/dev-util/kbuild/patches/kbuild-0.1.5-p2.patchset +++ b/dev-util/kbuild/patches/kbuild-0.1.5-p2.patch @@ -1,57 +1,5 @@ -From 8826b318de76f5ce17d344e44e4e6481c8d787ca Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zolt=C3=A1n=20Mizsei?= -Date: Wed, 11 Jan 2017 12:21:14 +0100 -Subject: [PATCH] Haiku supporting patch from Diver - ---- - Config.kmk | 24 ++++++++++++++++++- - SvnInfo.kmk | 0 - kBuild/env.sh | 6 ++++- - kBuild/header.kmk | 2 +- - src/ash/Makefile.kmk | 6 ++++- - src/ash/error.h | 2 +- - src/ash/eval.c | 5 +++- - src/ash/jobs.c | 18 +++++++++----- - src/ash/show.c | 4 +++- - src/ash/trap.c | 8 +++---- - src/ash/var.c | 8 +++++++ - src/kObjCache/kObjCache.c | 3 +++ - src/kash/Makefile.kmk | 4 +++- - src/kash/error.h | 8 +++++-- - src/kash/jobs.c | 2 ++ - src/kash/shfile.h | 6 +++-- - src/kash/shtypes.h | 6 +++-- - src/kmk/Makefile.kmk | 6 +++++ - src/kmk/arscan.c | 2 +- - src/kmk/glob/fnmatch.c | 2 +- - src/kmk/incdep.c | 2 +- - src/kmk/job.c | 2 +- - src/kmk/kmkbuiltin/chmod.c | 4 ++++ - src/kmk/kmkbuiltin/cp_utils.c | 5 ++++ - src/kmk/kmkbuiltin/fts.c | 2 +- - src/kmk/kmkbuiltin/haikufakes.c | 52 +++++++++++++++++++++++++++++++++++++++++ - src/kmk/kmkbuiltin/haikufakes.h | 39 +++++++++++++++++++++++++++++++ - src/kmk/kmkbuiltin/install.c | 11 +++++++-- - src/kmk/kmkbuiltin/mkdir.c | 7 +++++- - src/kmk/kmkbuiltin/mv.c | 11 +++++++-- - src/kmk/kmkbuiltin/rm.c | 9 +++++-- - src/kmk/main.c | 21 +++++++++++++++++ - src/kmk/maintMakefile | 2 +- - src/kmk/make.h | 2 +- - src/lib/k/kDefs.h | 4 +++- - src/misc/kmk_time.c | 2 ++ - src/sed/Makefile.kmk | 3 +++ - src/sed/config/help2man | 2 +- - src/sed/lib/regexec.c | 1 + - src/sed/lib/utils.c | 2 +- - src/sed/sed/sed.h | 1 + - 41 files changed, 265 insertions(+), 41 deletions(-) - mode change 100755 => 100644 SvnInfo.kmk - create mode 100644 src/kmk/kmkbuiltin/haikufakes.c - create mode 100644 src/kmk/kmkbuiltin/haikufakes.h - diff --git a/Config.kmk b/Config.kmk -index 774bda5..4e0a47e 100644 +index 774bda5..6e42081 100644 --- a/Config.kmk +++ b/Config.kmk @@ -107,6 +107,8 @@ DEFS.openbsd += KBUILD_OS_OPENBSD @@ -63,33 +11,24 @@ index 774bda5..4e0a47e 100644 DEFS.x86 += KBUILD_ARCH_X86 DEFS.amd64 += KBUILD_ARCH_AMD64 -@@ -291,7 +313,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/SvnInfo.kmk b/SvnInfo.kmk old mode 100755 new mode 100644 diff --git a/kBuild/env.sh b/kBuild/env.sh -index 19f8eb2..6ddfa01 100755 +index 19f8eb2..59901bf 100755 --- a/kBuild/env.sh +++ b/kBuild/env.sh -@@ -280,6 +280,10 @@ if test -z "$KBUILD_HOST"; then +@@ -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' @@ -112,187 +51,6 @@ index d575934..4ec5b84 100644 KBUILD_ARCHES := x86 amd64 sparc32 sparc64 s390 s390x ppc32 ppc64 mips32 mips64 ia64 hppa32 hppa64 arm alpha -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 \ -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/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..a19c11e 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 -@@ -467,10 +467,12 @@ showjob(struct output *out, struct job *jp, int mode) - scopyn(sys_siglist[st], s + col, 32); - else - fmtstr(s + col, 16, "Signal %d", st); -- if (WCOREDUMP(ps->status)) { -- col += strlen(s + col); -- scopyn(" (core dumped)", s + col, 64 - col); -- } -+ #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); -@@ -1158,7 +1160,11 @@ waitproc(int block, struct job *jp, int *status) - #endif - if (block == 0) - flags |= WNOHANG; -- return wait3(status, flags, (struct rusage *)NULL); -+ #ifndef __HAIKU__ -+ return wait3(status, flags, (struct rusage *)NULL); -+ #else -+ return waitpid(status, flags, (struct rusage *)NULL); -+ #endif - #else - #ifdef SYSV - int (*save)(); -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/src/ash/var.c b/src/ash/var.c -index 4f2e2a3..0cb74a8 100644 ---- a/src/ash/var.c -+++ b/src/ash/var.c -@@ -46,12 +46,20 @@ __RCSID("$NetBSD: var.c,v 1.36 2004/10/06 10:23:43 enami Exp $"); - #include - #include - #include -+ -+#ifdef __HAIKU__ -+#define _BSD_SOURCE -+#include -+#endif -+ -+#ifndef _PATH_DEFPATH - #ifndef __sun__ - #include - #else - #define _PATH_DEFPATH "/usr/bin:/usr/sbin" - #include - #endif -+#endif - - #ifdef PC_OS2_LIBPATHS - #define INCL_BASE diff --git a/src/kObjCache/kObjCache.c b/src/kObjCache/kObjCache.c index b403d58..fb757e0 100644 --- a/src/kObjCache/kObjCache.c @@ -479,7 +237,7 @@ index 6d14300..137f2d6 100644 #else static double last_sec; diff --git a/src/kmk/kmkbuiltin/chmod.c b/src/kmk/kmkbuiltin/chmod.c -index 3e1eaec..4a7aeff 100644 +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"; @@ -534,109 +292,6 @@ index f913f17..9860f67 100644 # define HAVE_STRUCT_DIRENT_D_NAMLEN 1 # endif #endif -diff --git a/src/kmk/kmkbuiltin/haikufakes.c b/src/kmk/kmkbuiltin/haikufakes.c -new file mode 100644 -index 0000000..d904624 ---- /dev/null -+++ b/src/kmk/kmkbuiltin/haikufakes.c -@@ -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); -+} -diff --git a/src/kmk/kmkbuiltin/haikufakes.h b/src/kmk/kmkbuiltin/haikufakes.h -new file mode 100644 -index 0000000..27d5c3d ---- /dev/null -+++ b/src/kmk/kmkbuiltin/haikufakes.h -@@ -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/kmk/kmkbuiltin/install.c b/src/kmk/kmkbuiltin/install.c index 9ab4b00..e13bf89 100644 --- a/src/kmk/kmkbuiltin/install.c @@ -731,7 +386,7 @@ index 2233c56..8f9e271 100644 # include "mscfakes.h" #endif diff --git a/src/kmk/kmkbuiltin/rm.c b/src/kmk/kmkbuiltin/rm.c -index 1b6522c..d9a606d 100644 +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"; @@ -743,15 +398,15 @@ index 1b6522c..d9a606d 100644 # include # include #endif -@@ -57,10 +57,15 @@ static char sccsid[] = "@(#)rm.c 8.5 (Berkeley) 4/18/94"; +@@ -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 ++#endif#include #include #include "getopt.h" +#ifdef __HAIKU__ @@ -761,7 +416,7 @@ index 1b6522c..d9a606d 100644 # include "mscfakes.h" #endif diff --git a/src/kmk/main.c b/src/kmk/main.c -index e901e98..0e930c4 100644 +index e901e98..3a95bf7 100644 --- a/src/kmk/main.c +++ b/src/kmk/main.c @@ -55,6 +55,9 @@ this program. If not, see . */ @@ -849,7 +504,7 @@ index ead7fd0..fef30bf 100644 # 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..ff19e5e 100644 +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) @@ -887,6 +542,110 @@ index af57f41..89638a0 100755 # 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 @@ -899,6 +658,7 @@ index 8c5e296..aa4f65c 100644 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 @@ -912,6 +672,7 @@ index 647fd6d..21eb4d0 100644 #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 @@ -923,7 +684,144 @@ index 78bd937..646cfc3 100644 +#include "stdbool.h" #include "basicdefs.h" #include "regex.h" - --- -2.11.0 +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 \