Results 1 to 6 of 6

Thread: Hmm..., are bison and flex rules in Make.rules OK?

  1. #1
    catalin is offline Registered User
    Join Date
    Jul 2003
    Location
    Oslo, Norway
    Posts
    57

    Hmm..., are bison and flex rules in Make.rules OK?

    Hi!

    I have installed Ice-1.2.0 on a RedHat 9.0 machine at school. It uses gcc version 3.3, bison 1.875 and flex 2.5.4.

    For installation I used the recepie given by beranrd toward the end on this thread
    http://www.zeroc.com/vbulletin/showthread.php?s=&threadid=263
    since it contains some details not present in the INSTALL.LINUX file.

    (The python2 allTests.py failed with the now faimous "function not defined" message even though I set LD_ASSUME_KERNEL to 2.4.1)

    After installing Ice-1.2.0 I uncommented the flex and bison rules in Make.rules and I added a single line of comment to the Grammar.y file, just like this
    // blah, blah
    make fails now with the following message:
    making all in Slice
    make[2]: Entering directory `/ifi/tyrfing/a09/catalin/hfag/prog/ice120/src/Slice'
    rm -f Grammar.h Grammar.cpp
    bison -dvt Grammar.y
    mv Grammar.tab.c Grammar.cpp
    mv Grammar.tab.h Grammar.h
    rm -f Grammar.output
    c++ -c -I.. -I../../include -DSLICE_API_EXPORTS -g -ftemplate-depth-128 -fPIC -Wall -D_REENTRANT Scanner.cpp
    c++ -c -I.. -I../../include -DSLICE_API_EXPORTS -g -ftemplate-depth-128 -fPIC -Wall -D_REENTRANT Grammar.cpp
    Grammar.tab.c: In function `int slice_parse()':
    Grammar.tab.c:3305: error: parse error before `goto'
    make[2]: *** [Grammar.o] Error 1
    make[2]: Leaving directory `/ifi/tyrfing/a09/catalin/hfag/prog/ice120/src/Slice'
    make[1]: *** [all] Error 1
    make[1]: Leaving directory `/ifi/tyrfing/a09/catalin/hfag/prog/ice120/src'
    make: *** [all] Error 1
    My guess is that the make rules for flex and/or bison in Make.rules are not 100% correct for bison 1.875 (Grammar.cpp which ships with Ice-1.2.0 is generated by bison 1.35).

    Comparing file sizes and file dates in the src/Slice directory (I made a copy of the original directory to begin with) I can see that 4 files have been regenerated. What suprises me most is the difference in size between the original and the new files.

    Original
    Grammar.y 40136
    Grammar.cpp 90299
    Grammar.h 1099
    Scanner.o 502952

    New
    Grammar.y 40151
    Grammar.cpp 95788 +5K
    Grammar.h 3319 +2K
    Scanner.o 504036

    I will try to attach the two Grammar.* files, if anyone cares to look into this.
    Sugestions for how to rebuild the Slice parser are very welcome.

    Thanks a lot,
    Catalin
    Attached Files Attached Files

  2. #2
    marc's Avatar
    marc is offline ZeroC Staff
    Name: Marc Laukien
    Organization: ZeroC, Inc.
    Project: The Internet Communications Engine
    Join Date
    Feb 2003
    Location
    Florida
    Posts
    1,860
    Looks as if bison 1.875 generates broken code. At line 3305 in Grammer.cpp, you'll find:
    Code:
      /* Suppress GCC warning that yyerrlab1 is unused when no action
         invokes YYERROR.  */
    #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__)
      __attribute__ ((__unused__))
    #endif
    This doesn't compile with GCC 3.3. If your remove this code, it will work fine.

  3. #3
    catalin is offline Registered User
    Join Date
    Jul 2003
    Location
    Oslo, Norway
    Posts
    57
    Yes, indeed, it looks like the code is broken. I can compile the parser anew if I comment out the code you mention. Of course this is a very tedious fix, since the Grammar.cpp file will be regenerated by the allegedly broken bison 1.875 every time I make a change to Grammar.y, so that I would have to comment out the code after each alteration. I guess this could be scripted somehow, but I am not that good.

    I have downloaded the source code of bison 1.35 and I have built it and installed it in a local directory, since I have no root privileges at school.

    How can I modify Make.rules so that it uses my local bison instead of the one provided by the system? Hopefully this version will generate code consistent with the rest of the Ice-1.2.0 package. At least it worked with Ice-1.1.0, on my home machine.

    Catalin

  4. #4
    marc's Avatar
    marc is offline ZeroC Staff
    Name: Marc Laukien
    Organization: ZeroC, Inc.
    Project: The Internet Communications Engine
    Join Date
    Feb 2003
    Location
    Florida
    Posts
    1,860
    Just put bison 1.35 into your PATH before /bin and /usr/bin. There is no need to modify the make rules. Bison 1.35 definitely works, we use it all the time. It's also the bison version that ships with Redhat 9.

  5. #5
    catalin is offline Registered User
    Join Date
    Jul 2003
    Location
    Oslo, Norway
    Posts
    57
    Thanks, it did the trick.

    I do have another difficulty now, though. It seems to me that in Ice 1.2.0 there are other dependencies on the Grammar.o or some other output of the remaking of the Slice parser, than it was the case in Ice-1.1.0.

    When I issued make after changing the grammar file with Ice-1.1.0, only the parser and a (very) few other things did get recompiled. Now, on the other hand, most of Ice gets recompiled, tests and everything. This is quite natural, I guess. Since many parts of ICE are declared in Slice, these parts should be regenerated by the new parser and recompiled. This takes an awfull lot of time for each lousy change I make to the grammar.

    How can I limit the recompilation process until I reach a stable state of the Slice parser?

    Thanks again,
    Catalin

  6. #6
    marc's Avatar
    marc is offline ZeroC Staff
    Name: Marc Laukien
    Organization: ZeroC, Inc.
    Project: The Internet Communications Engine
    Join Date
    Feb 2003
    Location
    Florida
    Posts
    1,860
    The easiest way it to simply only invoke make in the directory that you want to recompile.

    Another possibility is to remove $(SLICEPARSERLIB) from the rules below, found in config/Make.rules:

    Code:
    $(HDIR)/%F.h: $(SDIR)/%F.ice $(SLICE2CPP) $(SLICEPARSERLIB)
    	rm -f $(HDIR)/$(*F)F.h $(*F)F.cpp
    	$(SLICE2CPP) $(SLICE2CPPFLAGS) $<
    	mv $(*F)F.h $(HDIR)
    	rm -f $(*F)F.cpp
    
    $(HDIR)/%.h %.cpp: $(SDIR)/%.ice $(SLICE2CPP) $(SLICEPARSERLIB)
    	rm -f $(HDIR)/$(*F).h $(*F).cpp
    	$(SLICE2CPP) $(SLICE2CPPFLAGS) $<
    	mv $(*F).h $(HDIR)
    
    %.h %.cpp: %.ice $(SLICE2CPP) $(SLICEPARSERLIB)
    	rm -f $(*F).h $(*F).cpp
    	$(SLICE2CPP) $(SLICE2CPPFLAGS) $(*F).ice

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. slice #include and scope rules
    By alfredt in forum Help Center
    Replies: 2
    Last Post: 01-04-2010, 06:23 PM
  2. Makefile.rules in RHEL5 rpm
    By myrosia in forum Help Center
    Replies: 3
    Last Post: 10-28-2009, 10:20 AM
  3. Will Ice support Flex?
    By Jiangyubao in forum Comments
    Replies: 1
    Last Post: 08-12-2008, 10:05 AM
  4. FreeBSD make rules
    By schraf in forum Patches
    Replies: 1
    Last Post: 04-20-2004, 10:33 PM
  5. Ice 1.1.0 patch for Make.rules
    By rodrigc in forum Patches
    Replies: 1
    Last Post: 05-28-2003, 06:37 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •