[BusyBox] Pristine source directory (patch)

Larry Doolittle ldoolitt at recycle.lbl.gov
Sat Dec 2 00:11:18 UTC 2000


On Fri, Dec 01, 2000 at 01:00:59PM -0700, Erik Andersen wrote:
> 
> Ok.  With your patch in plus some additional work to make installs and such
> work, I think I have pristine source directory compiles working now.
> Unfortunately, the way this is implemented, touching source files in the
> pristine directory does not cause a recompile in the (non-source dir) object
> directory.

Works fine for me.  GNU Make version 3.79.1, gcc-2.7.2.3 and gcc-2.95.2.
Here's my patch to the current CVS (I hope -- that target has been moving
pretty fast lately :-)

I don't have the documentation toolkit on-hand, so that's not tested.
AFAIK, the CVS version won't build the newdocs right even with BB_SRC_DIR=.
My patch fixes that, but leaves it broken for other BB_SRC_DIR's.

Also, your latest shell change is definitely not bash-interoperable:

bash:
$ echo -e "a\nb"
a
b
$ echo "a\nb"
a\nb
$

busybox:
$ echo -e "a\nb"
a
b
$ echo "a\nb"
a
b
$

Sorry, I don't have a patch for that one.

       - Larry


diff -ur /home/ldoolitt/cvs/busybox/Makefile busybox-0.48pre/Makefile
--- /home/ldoolitt/cvs/busybox/Makefile	Fri Dec  1 15:40:11 2000
+++ busybox-0.48pre/Makefile	Fri Dec  1 16:08:39 2000
@@ -184,19 +184,19 @@
 	@echo BusyBox Documentation
 	@echo
 	- mkdir -p docs
-	(cd docs; sgmltools -b txt $(BB_SRC_DIR)/busybox.sgml)
+	(cd docs; sgmltools -b txt busybox.sgml)
 
 docs/busybox.dvi: docs/busybox.sgml
 	- mkdir -p docs
-	(cd docs; sgmltools -b dvi $(BB_SRC_DIR)/busybox.sgml)
+	(cd docs; sgmltools -b dvi busybox.sgml)
 
 docs/busybox.ps: docs/busybox.sgml
 	- mkdir -p docs
-	(cd docs; sgmltools -b ps $(BB_SRC_DIR)/busybox.sgml)
+	(cd docs; sgmltools -b ps busybox.sgml)
 
 docs/busybox.pdf: docs/busybox.ps
 	- mkdir -p docs
-	(cd docs; ps2pdf $(BB_SRC_DIR)/busybox.ps)
+	(cd docs; ps2pdf busybox.ps)
 
 docs/busybox/busyboxdocumentation.html: docs/busybox.sgml
 	- mkdir -p docs
@@ -209,7 +209,7 @@
 	$(STRIP)
 
 busybox.links: Config.h
-	-$(BB_SRC_DIR)/busybox.mkll $(BB_SRC_DIR)/applets.h | sort >$@
+	- $(BB_SRC_DIR)/busybox.mkll $(CONFIG_H) $(BB_SRC_DIR)/applets.h >$@
 
 nfsmount.o cmdedit.o: %.o: %.h
 $(OBJECTS): %.o: %.c Config.h busybox.h Makefile
diff -ur /home/ldoolitt/cvs/busybox/applets.h busybox-0.48pre/applets.h
--- /home/ldoolitt/cvs/busybox/applets.h	Thu Nov 30 09:14:17 2000
+++ busybox-0.48pre/applets.h	Fri Dec  1 15:56:59 2000
@@ -10,16 +10,19 @@
  * file result in the listing remaining in ascii order. You have been warned.
  */
 
-#ifndef PROTOTYPES
-const struct BB_applet applets[] = {
-#define APPLET(a,b,c,d) {a,b,c,d},
-#define APPLET_NOUSAGE(a,b,c) {a,b,c,NULL},
-#else
+#if defined(PROTOTYPES)
 #define APPLET(a,b,c,d) \
 	extern int b(int argc, char **argv); \
 	extern const char d[];
 #define APPLET_NOUSAGE(a,b,c) \
 	extern int b(int argc, char **argv);
+#elif defined(MAKE_LINKS)
+#define APPLET(a,b,c,d) LINK c a
+#define APPLET_NOUSAGE(a,b,c) LINK c a
+#else
+const struct BB_applet applets[] = {
+#define APPLET(a,b,c,d) {a,b,c,d},
+#define APPLET_NOUSAGE(a,b,c) {a,b,c,NULL},
 #endif
 
 #ifdef BB_TEST
@@ -378,7 +381,7 @@
 	APPLET("zcat", gunzip_main, _BB_DIR_BIN, gunzip_usage)
 #endif
 
-#ifndef PROTOTYPES
+#if !defined(PROTOTYPES) && !defined(MAKE_LINKS)
 	{ 0,NULL,0,NULL}
 };
 
diff -ur /home/ldoolitt/cvs/busybox/busybox.mkll busybox-0.48pre/busybox.mkll
--- /home/ldoolitt/cvs/busybox/busybox.mkll	Fri Dec  1 15:40:11 2000
+++ busybox-0.48pre/busybox.mkll	Fri Dec  1 15:56:41 2000
@@ -1,23 +1,16 @@
 #!/bin/sh
 # Make busybox links list file.
 
-DF="Config.h"
-
-MF=$1
-if [ "$MF" = "" ]; then
-    MF="applets.h"
-fi
-
-LIST="$(gcc -E -dM $DF | sed -n -e '/^.*BB_FEATURE.*$/d;s/^#define.*\<BB_\(.*\)\>/BB_\1/gp;' | sort)"
-
-for def in ${LIST}; do
-	i=`sed -n '/^#ifdef \<'$def'\>.*/,/^#endif/{ s/.*\"\(.*\)\".*\(_BB_DIR_[A-Z_]*\).*$/\2\/\1/gp; }' $MF`
-	for j in $i; do 
-		if [ -z $j ] ; then 
-			continue;
-		fi;
-		echo $j | sed -e 's/_BB_DIR_ROOT//g;s/_BB_DIR_BIN/\/bin/g;' \
-		    -e 's/_BB_DIR_SBIN/\/sbin/g;s/_BB_DIR_USR_BIN/\/usr\/bin/g;' \
-		    -e 's/_BB_DIR_USR_SBIN/\/usr\/sbin/g;'
-	done;
-done
+CONFIG_H=${1:-Config.h}
+APPLETS_H=${2:-applets.h}
+gcc -E -DMAKE_LINKS -include $CONFIG_H $APPLETS_H |
+  awk '/^[ \t]*LINK/{
+	match($2,"_BB_DIR[A-Z_]*")
+	dir=substr($2,RSTART+7,RLENGTH-7)
+	gsub("_","/",dir)
+	if(dir=="/ROOT") dir=""
+	file=$3
+	gsub("\"","",file)
+	if (file=="busybox") next
+	print tolower(dir) "/" file
+  }'





More information about the busybox mailing list