Bug #14294
‘boost::filesystem::path’ has no member named ‘native’ when trying to build novasoft with art2/root6
0%
Description
Beginning conversion of novasoft to art2/root6 (specifically, I setup nutools v2_02_00), the first module I try to build, after running fix_headers_art.pl fails with this message
In file included from /grid/fermiapp/products/nova/externals/art/v2_02_01/include/art/Framework/Services/Registry/ServiceMacros.h:79:0, from /grid/fermiapp/products/nova/externals/art/v2_02_01/include/art/Framework/Services/Optional/RandomNumberGenerator.h:162, from /grid/fermiapp/products/nova/externals/art/v2_02_01/include/art/Framework/Core/EngineCreator.h:11, from /grid/fermiapp/products/nova/externals/art/v2_02_01/include/art/Framework/Core/EDAnalyzer.h:10, from /nova/app/users/bckhouse/dev_root6_attempt2/dev/RawData/DAQHeaderAna_module.cc:10: /nova/app/users/bckhouse/dev_root6_attempt2/dev/RawData/DAQHeaderAna_module.cc: In function ‘std::string get_source_location()’: /grid/fermiapp/products/nova/externals/art/v2_02_01/include/art/Utilities/BasicHelperMacros.h:25:29: error: ‘boost::filesystem::path’ has no member named ‘native’ return bfs::complete(p).native(); \ ^ /grid/fermiapp/products/nova/externals/art/v2_02_01/include/art/Framework/Core/ModuleMacros.h:46:5: note: in expansion of macro ‘PROVIDE_FILE_PATH’ PROVIDE_FILE_PATH() \ ^ /nova/app/users/bckhouse/dev_root6_attempt2/dev/RawData/DAQHeaderAna_module.cc:123:1: note: in expansion of macro ‘DEFINE_ART_MODULE’ DEFINE_ART_MODULE(novaddt::DAQHeaderAna) ^ /grid/fermiapp/products/nova/externals/art/v2_02_01/include/art/Utilities/BasicHelperMacros.h:26:3: warning: control reaches end of non-void function [-Wreturn-type] } ^ /grid/fermiapp/products/nova/externals/art/v2_02_01/include/art/Framework/Core/ModuleMacros.h:46:5: note: in expansion of macro ‘PROVIDE_FILE_PATH’ PROVIDE_FILE_PATH() \ ^ /nova/app/users/bckhouse/dev_root6_attempt2/dev/RawData/DAQHeaderAna_module.cc:123:1: note: in expansion of macro ‘DEFINE_ART_MODULE’ DEFINE_ART_MODULE(novaddt::DAQHeaderAna) ^
The version of boost setup is v1_61_0. Is DEFINE_ART_MODULE
still what we should be using?
History
#1 Updated by Christopher Backhouse about 4 years ago
I'm suspecting some kind of version skew on our side, but if I build with VERBOSE=1 make
I see -I/grid/fermiapp/products/nova/externals/boost/v1_61_0/Linux64bit+2.6-2.12-e10-debug/include
and no other mentions of boost, and looking in /grid/fermiapp/products/nova/externals/boost/v1_61_0/Linux64bit+2.6-2.12-e10-debug/include/boost/filesystem/path.hpp
the native()
function is indeed in there.
Hmm, fiddling with the order of the options so that that -I
comes much earlier seems to have fixed it. strace
indicates that without that we wind up finding the boost headers from /usr/include/
So, fixed (if you count adding boost lines to all our makefiles "fixed"). But, colour me puzzled.
#2 Updated by Kyle Knoepfel about 4 years ago
Hi Chris, do you confirm, then, that this is not a bug in art
, but it is a build-system issue?
#3 Updated by Kyle Knoepfel about 4 years ago
- Status changed from New to Feedback
#4 Updated by Christopher Backhouse about 4 years ago
For those following along at home I finally solved it.
Our Makefiles have -I$(CPP0X_INC) -I$(BOOST_INC)
, and $CPP0X_INC
doesn't exist anymore. So actually we were never searching for the boost headers in the right place. It's kind of sad that there's a fallback to the system headers instead of an actual failure, but I don't know what we can do about that. Maybe a #error if some boost preprocessor variable indicates we have a very old version?
#5 Updated by Kyle Knoepfel about 4 years ago
- Status changed from Feedback to Rejected
After discussion, we conclude that this is an error in the build system and not art
.