|
|
|
|||||
|
Can't compile 3.3b against (vanilla) mcpp 2.7
I'm trying to compile the Ice 3.3 beta against mcpp 2.7 -- the newest version of mcpp, as released last month. It seems like something in 2.7 isn't interacting well with Ice, as slice2cpp now fails with an assertion error. I'm not sufficiently conversant with yacc to figure out what's going on here, or whether it's due to the changes in 2.7 or to the lack of the Ice patch included in the Ice version of 2.6.
The assertion happens at line 5516 of cpp/src/Slice/Parser.cpp: Code:
assert(_definitionContextStack.size() == 1); Any suggestions on how to resolve this would be appreciated, as using mcpp 2.7 is pretty much unavoidable. Thanks, MEF
__________________
Mary Ellen Foster Technical University of Munich JAST human-robot dialogue system Maintainer of Fedora Ice packages |
|
|||||
|
Quote:
![]() As far as I can see, there are two alternatives that meet Fedora guidelines:
Maybe this thread doesn't belong in "Bug Reports" any more ... MEF
__________________
Mary Ellen Foster Technical University of Munich JAST human-robot dialogue system Maintainer of Fedora Ice packages |
|
||||||
|
I'm checking if Ice can use the vanilla 2.7 mcpp distribution on Linux. I already have a fix for the Parser.cpp assert above (a bit different from yours) but I believe one more change is required for Ice for Ruby and Python (the python/ruby interpreters don't really like the fact that mcpp closes stdin...).
The Slice library will still need to link against the mcpp library so you'll need to have a mcpp build which includes the mcpp library not just the executable. I assume the mcpp RPM includes the library, is this correct? Cheers, Benoit. |
|
||||||
|
Hi Mary-Ellen,
Removing the Ice 3.3. dependency on mcpp would be very difficult; we use mcpp to pre-process Slice files, and it would be quite a bit of work to replace mcpp with another preprocessor. Fixing Ice / mcpp sounds like a more reasonable solution for the Fedora RPMs. We build Ice in such a way that when you use Ice binaries (at runtime or for development), you don't see mcpp. The libSlice shared library "links in" various mcpp objects from a special mcpp static-library build. It's "special" because we include a number of patches for mcpp (currently patches for mcpp 2.6.4) and we build the objects in this static library with position-independent code. From the mcpp-devel spec file: Code:
./configure CFLAGS=-fPIC --enable-mcpplib --disable-shared Do you want to link your Ice RPMs with a dynamic library version of an unpatched mcpp 2.7 shared library, or static linking with a patched mcpp 2.7 lib would be fine? We'd rather use an unpatched version of mcpp, and some of our patches (against 2.6.4) were incorporated into mcpp 2.7. Unfortunately we discovered and addressed more issues later on, after the mcpp 2.7 release. For example, we replaced a number of freopen calls by fopen calls so that Ice for Python and Ice for Ruby can successfully process Slice files at runtime. It doesn't look like there is a good way to work-around these issues in the Ice code. Thanks, Bernard |
|
|||||
|
Quote:
Quote:
![]() MEF
__________________
Mary Ellen Foster Technical University of Munich JAST human-robot dialogue system Maintainer of Fedora Ice packages |
|
||||||
|
Hi Mary Ellen,
Quote:
Cheers, Benoit. Last edited by benoit : 04-18-2008 at 07:54 AM. |
|
|||||
|
Am intending to eventually create Ice package for Slackware, and would like to second MEF statements above: please do try to push all needed mcpp patches upstream so that it could be possible to build Ice against vanilla mcpp, and also please do try to provide the possibility to build and use Ice linked simply against shared version of the mcpp library - if possible, these would make life much easier to potential packagers...
|
|
|||||
|
Packagers face the very same problems as with 3.2
I do not really understand what's the fuss with the mcpp required by Ice 3.3b. Ice 3.2 included a hacked version of GNU cpp and nobody complained. All previous distributions of Ice included a hacked standalone GNU cpp and there where no problems then.
It is very simply stated: icecpp was a fork of GNU cpp. This is not an ideal situation but it is not uncommon in free software. Now a hacked version of mcpp is required. The only difference is that the hacked mcpp is distributed in a different tarball. Two options: either consider the source tarball to be a combination of the two required tarballs (Ice and hacked mcpp) or include the hacked tarball into the patches to be applied to the source. It is true that fixes in upstream source do not automatically propagate to Ice. But that's a decision which competes to ZeroC, not to Debian, Fedora or Slackware. On the other hand having mcpp linked into libSlice reinforces the tight coupling between them and avoids semantic mismatches between future versions of libSlice and mcpp. Otherwise you would need to set up a dependency on a explicit version of libmcpp. That would be even worse than linking libmcpp.a into libSlice. Regards, F. Moya
__________________
Francisco Moya Fernandez Computer Architecture and Tecnology Group University of Castilla-La Mancha Debian Maintainer of ZeroC Ice packages. |
|
|||||
|
Quote:
It looks like this problem is on its way to being solved for Fedora, as long as the changes in upstream mcpp make it into the Fedora package soon. MEF
__________________
Mary Ellen Foster Technical University of Munich JAST human-robot dialogue system Maintainer of Fedora Ice packages |
|
|||||
|
Quote:
Regards, F. Moya
__________________
Francisco Moya Fernandez Computer Architecture and Tecnology Group University of Castilla-La Mancha Debian Maintainer of ZeroC Ice packages. |
|
||||||
|
Naturally, it is not our intent for fork mcpp. We'd like Ice to link with the mainstream libmcpp, just like Ice links with OpenSSL, Expat, Bzip2, Berkeley DB.
Hopefully, mcpp 2.7.1 will include all the patches necessary for Ice, and this issue will disappear! Cheers, Bernard |
|
|||||
|
Ice-3.3b doesn't compile against mcpp 2.7.1
Just tried to compile Ice-3.3b against freshly released mcpp 2.7.1, and the same compilation error is still there (the system is Slackware 12.1, with gcc 4.2.3):
---- ../../bin/slice2cpp --ice --include-dir Ice --dll-export ICE_API -I../../../slice --stream ../../../slice/Ice/BuiltinSequences.ice slice2cpp: Parser.cpp:5516: int Slice::Unit: arse(const std::string&, FILE*, bool, Slice::FeatureProfile): Assertion `_definitionContextStack.size() == 1' failed.make[3]: *** [BuiltinSequences.cpp] Aborted ---- |
|
|||||
|
Ah - OK then, thanks!
Am not able to find any pointer to Ice CVS/SVN/... repository, in order to try current code - the code is not publicly available this way, right? |
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Problem compiling Ice 3.3b | scottie | Bug Reports | 6 | 04-16-2008 06:01 AM |
| Ice 3.3b released | mes | Announcements | 0 | 03-31-2008 11:46 PM |
| compile with GCC | jeylee | Comments | 3 | 03-31-2005 08:53 AM |
| C# compile error!! | xpiao | Help Center | 1 | 11-19-2004 04:06 PM |