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