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]"
