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

Reply via email to