Major rework of the directory structure and the entire build system.
 -Erik
diff --git a/init/Makefile b/init/Makefile
new file mode 100644
index 0000000..472fb02
--- /dev/null
+++ b/init/Makefile
@@ -0,0 +1,39 @@
+# Makefile for busybox
+#
+# Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org>
+#
+# This program 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+TOPDIR   :=..
+L_TARGET := init.a
+
+obj-y           :=
+obj-n           :=
+obj-            :=
+
+obj-$(CONFIG_HALT)		+= halt.o
+obj-$(CONFIG_INIT)		+= init.o
+obj-$(CONFIG_POWEROFF)		+= poweroff.o
+obj-$(CONFIG_REBOOT)		+= reboot.o
+obj-$(CONFIG_START_STOP_DAEMON)	+= start_stop_daemon.o
+
+
+# Hand off to toplevel Rules.mak
+include $(TOPDIR)/Rules.mak
+
+clean:
+	rm -f $(L_TARGET) *.o core
+
diff --git a/init/config.in b/init/config.in
new file mode 100644
index 0000000..1d4760c
--- /dev/null
+++ b/init/config.in
@@ -0,0 +1,25 @@
+#
+# For a description of the syntax of this configuration file,
+# see scripts/kbuild/config-language.txt.
+#
+
+mainmenu_option next_comment
+comment 'Init Utilities'
+
+
+bool 'init'	    CONFIG_INIT
+if [ "$CONFIG_INIT" = "y" ]; then
+    bool '  Support reading an inittab file?'				    CONFIG_FEATURE_USE_INITTAB
+    bool '  Support running init from within an initrd?'		    CONFIG_FEATURE_INITRD
+    bool '  Support dumping core for child processes (debugging only)?'	    CONFIG_FEATURE_INIT_COREDUMPS
+    bool '  Should init be _extra_ quiet on boot?'			    CONFIG_FEATURE_EXTRA_QUIET
+
+    # Some more apps that are meaningless without BusyBox running as init
+    bool 'halt'			    CONFIG_HALT
+    bool 'poweroff'		    CONFIG_POWEROFF
+    bool 'reboot'		    CONFIG_REBOOT
+    bool 'start-stop-daemon'	    CONFIG_START_STOP_DAEMON
+fi
+
+endmenu
+
diff --git a/init/halt.c b/init/halt.c
index d66e28d..307c102 100644
--- a/init/halt.c
+++ b/init/halt.c
@@ -26,7 +26,7 @@
 
 extern int halt_main(int argc, char **argv)
 {
-#ifdef BB_FEATURE_LINUXRC
+#ifdef CONFIG_FEATURE_INITRD
 	/* don't assume init's pid == 1 */
 	pid_t *pid = find_pid_by_name("init");
 	if (!pid || *pid<=0) {
diff --git a/init/init.c b/init/init.c
index 068e1df..b6eaa46 100644
--- a/init/init.c
+++ b/init/init.c
@@ -43,7 +43,7 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 #include "busybox.h"
-#ifdef BB_SYSLOGD
+#ifdef CONFIG_SYSLOGD
 # include <sys/syslog.h>
 #endif
 
@@ -96,7 +96,7 @@
 #endif
 
 
-#if defined BB_FEATURE_INIT_COREDUMPS
+#if defined CONFIG_FEATURE_INIT_COREDUMPS
 /*
  * When a file named CORE_ENABLE_FLAG_FILE exists, setrlimit is called 
  * before processes are spawned to set core file size as unlimited.
@@ -194,7 +194,7 @@
 	va_list arguments;
 	int fd;
 
-#ifdef BB_SYSLOGD
+#ifdef CONFIG_SYSLOGD
 
 	/* Log the message to syslogd */
 	if (device & LOG) {
@@ -546,7 +546,7 @@
 				getpid(), terminal, command);
 #endif
 
-#if defined BB_FEATURE_INIT_COREDUMPS
+#if defined CONFIG_FEATURE_INIT_COREDUMPS
 		if (stat (CORE_ENABLE_FLAG_FILE, &sb) == 0) {
 			struct rlimit limit;
 			limit.rlim_cur = RLIM_INFINITY;
@@ -701,7 +701,7 @@
 static void new_initAction(initActionEnum action, char *process, char *cons)
 {
 	initAction *newAction;
-#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+#ifdef CONFIG_FEATURE_INIT_NORMAL_ORDER
 	initAction *a;
 #endif
 
@@ -723,7 +723,7 @@
 		message(LOG | CONSOLE, "Memory allocation failure\n");
 		loop_forever();
 	}
-#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+#ifdef CONFIG_FEATURE_INIT_NORMAL_ORDER
 	for (a = initActionList; a && a->nextPtr; a = a->nextPtr) ;
 	if (a) {
 		a->nextPtr = newAction;
@@ -759,16 +759,16 @@
 	}
 }
 
-/* NOTE that if BB_FEATURE_USE_INITTAB is NOT defined,
+/* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined,
  * then parse_inittab() simply adds in some default
  * actions(i.e., runs INIT_SCRIPT and then starts a pair 
- * of "askfirst" shells).  If BB_FEATURE_USE_INITTAB 
+ * of "askfirst" shells).  If CONFIG_FEATURE_USE_INITTAB 
  * _is_ defined, but /etc/inittab is missing, this 
  * results in the same set of default behaviors.
  * */
 static void parse_inittab(void)
 {
-#ifdef BB_FEATURE_USE_INITTAB
+#ifdef CONFIG_FEATURE_USE_INITTAB
 	FILE *file;
 	char buf[256], lineAsRead[256], tmpConsole[256];
 	char *id, *runlev, *action, *process, *eol;
@@ -782,7 +782,7 @@
 #endif
 		/* Reboot on Ctrl-Alt-Del */
 		new_initAction(CTRLALTDEL, "/sbin/reboot", console);
-#ifdef BB_FEATURE_INIT_NORMAL_ORDER
+#ifdef CONFIG_FEATURE_INIT_NORMAL_ORDER
 		/* Umount all filesystems on halt/reboot */
 		new_initAction(SHUTDOWN, "/bin/umount -a -r", console);
 		/* Swapoff on halt/reboot */
@@ -808,7 +808,7 @@
 		new_initAction(SYSINIT, INIT_SCRIPT, console);
 
 		return;
-#ifdef BB_FEATURE_USE_INITTAB
+#ifdef CONFIG_FEATURE_USE_INITTAB
 	}
 
 	while (fgets(buf, 255, file) != NULL) {
@@ -880,7 +880,7 @@
 		}
 	}
 	return;
-#endif /* BB_FEATURE_USE_INITTAB */
+#endif /* CONFIG_FEATURE_USE_INITTAB */
 }
 
 
@@ -894,7 +894,7 @@
 #ifndef DEBUG_INIT
 	/* Expect to be invoked as init with PID=1 or be invoked as linuxrc */
 	if (getpid() != 1
-#ifdef BB_FEATURE_LINUXRC
+#ifdef CONFIG_FEATURE_INITRD
 			&& strstr(applet_name, "linuxrc") == NULL
 #endif
 	                  )
@@ -933,14 +933,14 @@
 	/* Hello world */
 #ifndef DEBUG_INIT
 	message(
-#if ! defined BB_FEATURE_EXTRA_QUIET
+#if ! defined CONFIG_FEATURE_EXTRA_QUIET
 			CONSOLE|
 #endif
 			LOG,
 			"init started:  %s\r\n", full_version);
 #else
 	message(
-#if ! defined BB_FEATURE_EXTRA_QUIET
+#if ! defined CONFIG_FEATURE_EXTRA_QUIET
 			CONSOLE|
 #endif
 			LOG,
@@ -966,7 +966,7 @@
 	} else {
 		/* Not in single user mode -- see what inittab says */
 
-		/* NOTE that if BB_FEATURE_USE_INITTAB is NOT defined,
+		/* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined,
 		 * then parse_inittab() simply adds in some default
 		 * actions(i.e., runs INIT_SCRIPT and then starts a pair 
 		 * of "askfirst" shells */
diff --git a/init/poweroff.c b/init/poweroff.c
index db20a45..cec2d6d 100644
--- a/init/poweroff.c
+++ b/init/poweroff.c
@@ -26,7 +26,7 @@
 
 extern int poweroff_main(int argc, char **argv)
 {
-#ifdef BB_FEATURE_LINUXRC
+#ifdef CONFIG_FEATURE_INITRD
 	/* don't assume init's pid == 1 */
 	pid_t *pid = find_pid_by_name("init");
 	if (!pid || *pid<=0) {
diff --git a/init/reboot.c b/init/reboot.c
index 35afd74..a13d424 100644
--- a/init/reboot.c
+++ b/init/reboot.c
@@ -26,7 +26,7 @@
 
 extern int reboot_main(int argc, char **argv)
 {
-#ifdef BB_FEATURE_LINUXRC
+#ifdef CONFIG_FEATURE_INITRD
 	/* don't assume init's pid == 1 */
 	pid_t *pid = find_pid_by_name("init");
 	if (!pid || *pid<=0) {