On Mon, Jun 30, 2003 at 04:54:02PM -0700, Gordon Tetlow wrote:That's why ru@ suggested to add a build-tools target. That way you populate the seperate tree in sync with the phases of a world, thereby avoiding the phase ordering problem.
Is there a way to leverage the existing build-tools so we don't have to do extra compiling that isn't necessary?
Build tools are most of the time so small or trivial (gcc is probably the exception, before that perl probably was) that building them again is lost in creating the rescue bits itself. We could possibly copy the object directory of those tools that have build tools, but if there are paths embedded in generated scripts, we have to regenerate them anyway.
What about this: rebuild the build tools to get things sorted out and working and then look if we can optimize?
Looking through the build tools for /bin/sh, it's definitely not worth the effort to try copying build tools around. Although it sounds easy to add a build-tools target to handle this, I'm not sure I see exactly how to do this. Any suggestions?
For the longer term, perhaps it would be desirable to simply eliminate as many of the build-tools as possible? For example, the attached is a pretty close substitute for mkinit.c in the /bin/sh build. It's crude, but it seems to work and eliminates the need to compile mkinit at build time.
I'll see if I can scrape together something similar for the other /bin/sh tools.
Tim Kientzle
#!/bin/sh
echo "/*" echo " * This file was generated by the mkinit program." echo " */" echo "" echo '#include "shell.h"' echo '#include "mystring.h"' cat $@ | grep '^INCLUDE' | sed -e "s/INCLUDE/#include/" echo echo echo cat $@ | sed -n -e '/^#define/ s/#define //p' | grep -v '\\$' | egrep -v '^[A-Z_]+\(' | awk '{print "#undef ",$1; print "#define",$0; }' echo echo for f in $@ do cat $f | sed -n -e '/^MKINIT$/,/^}/ p' -e '/^MKINIT / s/^MKINIT/extern/p' | grep -v '^MKINIT$' echo done echo echo echo "/*" echo " * Initialization code." echo " */" echo echo "void" echo "init() {" for f in $@ do echo " /* from $f: */" cat $f | sed -n -e '/^INIT/,/^}/ p' | sed -e 's/INIT //' | \ awk '{print " ",$0;}' OFS='' echo done echo "}" echo echo echo echo "/*" echo " * This routine is called when an error or an interrupt occurs in an" echo " * interactive shell and control is returned to the main command loop." echo " */" echo echo "void" echo "reset() {" for f in $@ do echo " /* from $f: */" cat $f | sed -n -e '/^RESET/,/^}/ p' | sed -e 's/RESET //' | \ awk '{print " ",$0;}' OFS='' echo done echo "}" echo echo echo echo "/*" echo " * This routine is called to initialize the shell to run a shell procedure." echo " */" echo echo "void" echo "initshellproc() {" for f in $@ do echo " /* from $f: */" cat $f | sed -n -e '/^SHELLPROC/,/^}/ p' | sed -e 's/SHELLPROC //' | \ awk '{print " ",$0;}' OFS='' echo done echo "}"
_______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "[EMAIL PROTECTED]"