Ken Moffat wrote: > On Fri, 6 Jan 2006, Ken Moffat wrote: > >> On Thu, 5 Jan 2006, Dan Nicholson wrote: >> >>>> bison as Dan noted >>> >>> I think I've got this one figured out in the alphabetical builds. >>> Circular dependencies between bison and flex. Requires adding bison >>> to /tools, but the differences are gone now. >>> > > Dan, by adding bison to /tools [ in what is otherwise svn-20060103 with > a bash-documentation cleanup per bug 1679 ] I get a clean build of bison > in chapter 6. That is, it no longer differs when rebuilt in place. > > This means bison depends on itself to build cleanly, but NOT on flex, > IMHO.
I've just managed to reproduce this in a DIY build by dropping M4, Bison and Flex from the temptools phase. Hmmmmmm, this is a bizarre one... check out the following.. By retaining the finished Bison build dirs from each iteration and diffing them, I was able to establish the problematic object file: src/parse-gram.o I then ran strings on that file in each iter and found there is an extra string in iter2: bison-runtime Grepping the Bison source for the above string showed me that indeed it is mentioned in src/parse-gram.c in a section of code dealing with NLS. Referring back to the original diff of the build dirs, I see this diff in config.h: /* Define to 1 to internationalize bison runtime messages. */ -/* #undef YYENABLE_NLS */ +#define YYENABLE_NLS 1 Bingo! This looks like the culprit. But why is it different? Grepping the source for `YYENABLE_NLS' leads me to `configure' and ultimately to `m4/bison-i18n.m4'. Ok, now I'm starting to see the picture. In this file is some code trying to figure out where to find the bison-runtime.mo files ie: `BISON_LOCALEDIR'. This makes sense because in the original diff of the build dirs was this in the Makefiles: -BISON_LOCALEDIR = +BISON_LOCALEDIR = /usr/share/locale Righto then, back in `m4/bison-i18n.m4' I find this little snippet: if test -n "$YACC"; then case "$YACC" in *bison*) if ($YACC --print-localedir) >/dev/null 2>&1; then BISON_LOCALEDIR=`$YACC --print-localedir` fi ;; esac else Sure enough, the original diff between of the build dirs has this: -YACC = yacc +YACC = bison -y Doh! Now it should be clear why `BISON_LOCALEDIR' is empty in the first iteration ie: because the YACC var is somehow set to "yacc" even tho' no yacc or bison exist yet (this var is presumably set by the AC_PROC_YACC autoconf macro). Ok, the cause of the difference is now known. Luckily, it looks like a fairly minor issue. Nevertheless, it should be fixed in order to attain clean ICA results. It also proves that dropping packages from Ch 5 should not be done lightly.. I'll try and figure out a good fix tomorrow.. Regards Greg -- http://www.diy-linux.org/ -- http://linuxfromscratch.org/mailman/listinfo/lfs-dev FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page