Bug #784
Parsing of config files depends on OS-specific line ends
Status: | Resolved | Start date: | 01/04/2012 | ||
---|---|---|---|---|---|
Priority: | Normal | Due date: | |||
Assignee: | J. Wienke | % Done: | 80% | ||
Category: | Configuration | ||||
Target version: | 0.6 |
Description
I set up rsb on Linux as well as Windoze (in that order) and once the rsb_informer/rsb_listener example worked, went on and just copied the Lunix-style rsb.conf
file over to Windoze.
However, it seems the configuration file is not parsed at all with "unexpected" line ends and indeed no error message is provided. IMHO this should be changed to be OS-independent or - lacking the former - at least point out an invalid configuration file to the user.
Related issues
Associated revisions
- let the ConfigFileSource test compile again on windows
- use multiple line end formats for the test
refs #784
History
#1 Updated by J. Wienke over 12 years ago
- Project changed from Robotics Service Bus to Robotics Systems Commons
- Category deleted (
Configuration) - Assignee set to J. Wienke
This parsing is part of RSC. Move to that project.
#2 Updated by J. Wienke over 12 years ago
- Category set to Configuration
- Target version set to 0.6
#3 Updated by J. Wienke over 12 years ago
- Subject changed from Parsing of rsb.conf depends on OS-specific line ends to Parsing of config files depends on OS-specific line ends
- Description updated (diff)
#4 Updated by J. Wienke over 12 years ago
- Status changed from New to In Progress
#5 Updated by J. Wienke over 12 years ago
Jan, I've noticed that we are not executing the ConfigFileSource test on Windows at all. Can you remember what the reason was?
#6 Updated by J. Wienke over 12 years ago
Ok, there was a compilation problem. I have narrowed it down to the fact that compilation fails as soon as the test file contains a definition of
map<string, any>
Errors are:
LINK : ..\build\rsctest.exe wurde nicht gefunden oder beim letzten inkrementellen Linkvorgang nicht erstellt; vollstõndiger Link wird durchgef³hrt. rsc.lib(rsc.dll) : error LNK2005: "public: static struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> & __cdecl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,cla ss boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<c lass std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Myval(struct std::_Tree_nod<class std:: _Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<c har,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char >,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (?_Myval@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocat or@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std @@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@2@PAU_N ode@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allo cator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@2@@Z) ist bereits in C onfigFileSourceTest.cpp.obj definiert. rsc.lib(rsc.dll) : error LNK2005: "public: static char & __cdecl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<cha r>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,clas s std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Isni l(struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_strin g<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (?_Isnil@?$_Tree_val@V?$_Tmap_traits@V?$basic_strin g@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV? $basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAADPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$c har_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_ string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@2@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert. rsc.lib(rsc.dll) : error LNK2005: "public: static struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::a llocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node * & __c decl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std: :less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<ch ar,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Parent(struct std::_Tree_nod<class std::_Tmap_traits<class std:: basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_tra its<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<c har> > const ,class boost::any> >,0> >::_Node *)" (?_Parent@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost @@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std @@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAAPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$les s@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@b oost@@@std@@@2@$0A@@std@@@2@PAU342@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert. rsc.lib(rsc.dll) : error LNK2005: "public: static struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::a llocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node * __cde cl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::l ess<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char ,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Min(struct std::_Tree_nod<class std::_Tmap_traits<class std::basic _string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<c har>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (?_Min@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$les s@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@b oost@@@std@@@2@$0A@@std@@@std@@SAPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic _string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std @@@2@$0A@@std@@@2@PAU342@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert. rsc.lib(rsc.dll) : error LNK2005: "public: static struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::a llocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node * & __c decl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std: :less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<ch ar,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Right(struct std::_Tree_nod<class std::_Tmap_traits<class std::b asic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_trai ts<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<ch ar> > const ,class boost::any> >,0> >::_Node *)" (?_Right@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@ U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAAPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@ V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boo st@@@std@@@2@$0A@@std@@@2@PAU342@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert. ..\build\rsctest.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden. LINK failed. with 2 NMAKE : fatal error U1077: ""C:\Program Files\CMake 2.8\bin\cmake.exe"": Rückgabe-Code "0xffffffff" Stop. NMAKE : fatal error U1077: ""C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\nmake.exe"": Rückgabe-Code "0x2" Stop. NMAKE : fatal error U1077: ""C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\nmake.exe"": Rückgabe-Code "0x2" Stop.
As soon as one minor thing with the map is changed every problem is gone. E.g. if string is exchanged with int or event making it a map<any, string>
everything works again.
#7 Updated by J. Wienke over 12 years ago
The only other definition of map<string, any> is Properties. But I could not find any of the conflicting functions in there.
#8 Updated by J. Wienke over 12 years ago
Further observation by using /VERBOSE linker flag:
"__declspec(dllimport) public: static char & __cdecl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Isnil(struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (__imp_?_Isnil@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAADPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@2@@Z) gefunden. In "PropertiesTest.cpp.obj" referenziert "rsc.lib(rsc.dll)" geladen rsc.lib(rsc.dll) : error LNK2005: "public: static char & __cdecl std::_Tree_val<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Isnil(struct std::_Tree_nod<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class boost::any,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class boost::any> >,0> >::_Node *)" (?_Isnil@?$_Tree_val@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@std@@SAAADPAU_Node@?$_Tree_nod@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Vany@boost@@@std@@@2@$0A@@std@@@2@@Z) ist bereits in ConfigFileSourceTest.cpp.obj definiert.
As visible, all Failures originate from PropertiesTest, not the config parser test.
#9 Updated by J. Wienke over 12 years ago
- Status changed from In Progress to Resolved
- % Done changed from 0 to 80
I have implemented a workaround by using Properties instead of the map. Also I have added a smoke test with unix and windows line endings. No error could be found with these. So the problems must be caused by something different.
Robert, can you please watch bug #785 for further discussion.