Index: /trunk/src/ash/Makefile.kmk
===================================================================
--- /trunk/src/ash/Makefile.kmk	(revision 628)
+++ /trunk/src/ash/Makefile.kmk	(revision 629)
@@ -2,17 +2,21 @@
 ## @file
 #
-# kBuild Makefile for ash.
+# kBuild Makefile for kmk_ash.
 #
-# Copyright (c) 2005 knut st. osmundsen <bird@anduin.net>
+# Copyright (c) 2005-2006 knut st. osmundsen <bird-src-spam@anduin.net>
 #
 
-PROGRAMS = ash
-INSTALLS = ash.man
+DEPTH = ../..
+include $(PATH_KBUILD)/header.kmk
 
-ash_TEMPLATE = bin
-ash_DEFS = lint SHELL SMALL
-ash_DEFS.os2 = EXEC_HASH_BANG_SCRIPT PC_OS2_LIBPATHS PC_PATH_SEP PC_DRIVE_LETTERS PC_EXE_EXTS
-ash_INCS = $(PATH_TARGET) . # (the last is because of error.h)
-ash_SOURCES = \
+#INSTALLS = ash.man
+
+PROGRAMS += kmk_ash
+kmk_ash_TEMPLATE = BIN
+kmk_ash_DEFS = lint SHELL SMALL
+kmk_ash_DEFS.win = PC_PATH_SEP PC_DRIVE_LETTERS PC_EXE_EXTS
+kmk_ash_DEFS.os2 = EXEC_HASH_BANG_SCRIPT PC_OS2_LIBPATHS PC_PATH_SEP PC_DRIVE_LETTERS PC_EXE_EXTS
+kmk_ash_INCS = $(PATH_TARGET) . # (the last is because of error.h)
+kmk_ash_SOURCES = \
 	alias.c \
 	cd.c \
@@ -45,11 +49,11 @@
 	$(PATH_TARGET)/init.c \
 	$(PATH_TARGET)/nodes.c
-ash_DEPS = \
+kmk_ash_DEPS = \
 	$(PATH_TARGET)/arith.h \
 	$(PATH_TARGET)/builtins.h \
 	$(PATH_TARGET)/nodes.h \
 	$(PATH_TARGET)/token.h
-ash_CLEAN = \
-	$(ash_DEPS)	\
+kmk_ash_CLEAN = \
+	$(kmk_ash_DEPS)	\
 	$(PATH_TARGET)/arith.c \
 	$(PATH_TARGET)/arith_lex.c \
@@ -58,12 +62,21 @@
 	$(PATH_TARGET)/nodes.c
 
-ash.man_TEMPLATE = usr.bin.man
-ash.man_SOURCES = \
+kmk_ash.man_TEMPLATE = usr.bin.man
+kmk_ash.man_SOURCES = \
 	sh.1=>ash.1
 #ash.man_SYMLINKS = \
 #	ash.1.gz=>sh.1
 
-DEPTH = ..
-include $(PATH_KBUILD)/rules.kmk
+include $(PATH_KBUILD)/footer.kmk
+
+#
+# ATTENTION! ATTENTION! ATTENTION!
+#
+# Older ash versions has trouble with some of these scripts, great. 
+# Kudos to the NetBSD guys for this clever move. ;)
+#
+# So, when building for the frist time, setting BOOSTRAP_SHELL=/bin/bash is good idea.
+#
+BOOTSTRAP_SHELL ?= $(SHELL)
 
 $(PATH_TARGET)/arith.h $(PATH_TARGET)/arith.c: arith.y | $(call DIRDEP,$(PATH_TARGET))
@@ -75,18 +88,18 @@
 	flex -8 -o$@ $^                     # 8-bit lex scanner for arithmetic
 
-$(PATH_TARGET)/builtins.h $(PATH_TARGET)/builtins.c: mkbuiltins shell.h builtins.def | $(call DIRDEP,$(PATH_TARGET))
-	$+ $(dir $@)
+$(PATH_TARGET)/builtins.h $(PATH_TARGET)/builtins.c: $(PATH_CURRENT)/mkbuiltins shell.h builtins.def | $(call DIRDEP,$(PATH_TARGET))
+	$(BOOTSTRAP_SHELL) $+ $(dir $@)
 	[ -f $(PATH_TARGET)/builtins.h ]
 
-$(PATH_TARGET)/nodes.h $(PATH_TARGET)/nodes.c: mknodes.sh nodetypes nodes.c.pat | $(call DIRDEP,$(PATH_TARGET))
-	$+ $(dir $@)
+$(PATH_TARGET)/nodes.h $(PATH_TARGET)/nodes.c: $(PATH_CURRENT)/mknodes.sh nodetypes nodes.c.pat | $(call DIRDEP,$(PATH_TARGET))
+	$(BOOTSTRAP_SHELL) $+ $(dir $@)
 	[ -f $(dir $@)/nodes.h ]
 
-$(PATH_TARGET)/token.h: mktokens | $(call DIRDEP,$(PATH_TARGET))
-	$+
+$(PATH_TARGET)/token.h: $(PATH_CURRENT)/mktokens | $(call DIRDEP,$(PATH_TARGET))
+	$(BOOTSTRAP_SHELL) $+
 	$(MV) token.h $@
 
-$(PATH_TARGET)/init.c: mkinit.sh $(filter-out $(PATH_TARGET)/%,$(ash_SOURCES)) | $(call DIRDEP,$(PATH_TARGET))
-	$+
+$(PATH_TARGET)/init.c: $(PATH_CURRENT)/mkinit.sh $(filter-out $(PATH_TARGET)/%,$(kmk_ash_SOURCES)) | $(call DIRDEP,$(PATH_TARGET))
+	$(BOOTSTRAP_SHELL) $+
 	$(MV) init.c $@
 
Index: /trunk/src/ash/error.h
===================================================================
--- /trunk/src/ash/error.h	(revision 628)
+++ /trunk/src/ash/error.h	(revision 629)
@@ -112,5 +112,5 @@
  */
 
-#if defined(BSD) && !defined(__SVR4)
+#if defined(BSD) && !defined(__SVR4) && !defined(__GLIBC__) && !defined(__KLIBC__)
 #define setjmp(jmploc)	_setjmp(jmploc)
 #define longjmp(jmploc, val)	_longjmp(jmploc, val)
Index: /trunk/src/ash/eval.c
===================================================================
--- /trunk/src/ash/eval.c	(revision 628)
+++ /trunk/src/ash/eval.c	(revision 629)
@@ -51,5 +51,7 @@
 #include <sys/types.h>
 #include <sys/wait.h>
+#ifdef HAVE_SYSCTL_H
 #include <sys/sysctl.h>
+#endif
 
 /*
@@ -604,6 +606,8 @@
 syspath(void)
 {
+#ifdef CTL_USER
 	static char *sys_path = NULL;
 	static int mib[] = {CTL_USER, USER_CS_PATH};
+#endif 
 #ifdef PC_PATH_SEP
 	static char def_path[] = "PATH=/usr/bin;/bin;/usr/sbin;/sbin";
@@ -611,4 +615,5 @@
 	static char def_path[] = "PATH=/usr/bin:/bin:/usr/sbin:/sbin";
 #endif
+#ifdef CTL_USER
 	size_t len;
 
@@ -625,4 +630,7 @@
 	}
 	return sys_path;
+#else
+    return def_path;
+#endif 
 }
 
@@ -1009,6 +1017,11 @@
 			optptr = NULL;
 			/* and getopt */
+#if defined(__FreeBSD__) || defined(__EMX__) || defined(__APPLE__)
 			optreset = 1;
 			optind = 1;
+#else
+			optind = 0; /* init */
+#endif
+
 			exitstatus = cmdentry.u.bltin(argc, argv);
 		} else {
Index: /trunk/src/ash/mktokens
===================================================================
--- /trunk/src/ash/mktokens	(revision 628)
+++ /trunk/src/ash/mktokens	(revision 629)
@@ -38,4 +38,8 @@
 # error messages.
 
+if [ -z "$TMPDIR" ]; then
+    TMPDIR="/tmp"
+    export TMPDIR
+fi
 F="$TMPDIR/ka$$"
 echo $F
Index: /trunk/src/ash/nodetypes
===================================================================
--- /trunk/src/ash/nodetypes	(revision 628)
+++ /trunk/src/ash/nodetypes	(revision 629)
