ROSE Compiler Framework/boost

Impact of Using Boost in ROSE edit

The current way of using of Boost in ROSE has a love&hate impact. Some developers use Boost to simplify their work, but the cost is

  • one mandatory external dependency for all other (users and developers who don't use Boost at all) and
  • portability/maintenance issues (much of the limited supported GCC versions is caused by Boost libraries).

This page tries to document the boost libraries used by ROSE. Hopefully we can figure out why we must have each of them and if some can be made optional (not required by users who are not interested in the features a library supports)


To be crystal clear, we appreciate the Open Source Boost Community providing free and wonderful libraries. The issue is how we can better use Boost in ROSE to obtain a good balance of productivity, portability, and maintainability.

Action Items edit

Make some less used libraries optional

  • thread
  • iostream
  • wave

Current dependent libraries edit

http://www.boost.org/doc/libs/ lists 113 libraries as 1/24/2015. Fortunately, we don't require all of them!

Expected complete list -- Boost version: 1.45.0 -- Found the following Boost libraries:

--   date_time
--   filesystem
--   iostreams
--   program_options
--   regex
--   system
--   wave
--   thread

Code including boost edit

demo@ubuntu:~/rose-edg4x.git/src$ grep -r  "<boost/" *

backend/asmUnparser/AsmFunctionIndex.C:#include <boost/shared_ptr.hpp>
backend/asmUnparser/unparseM68kAsm.C:#include <boost/foreach.hpp>
backend/asmUnparser/unparsePowerpcAsm.C:#include <boost/lexical_cast.hpp>
backend/unparser/JavaCodeGeneration/unparseJava_statements.C:#include <boost/foreach.hpp>
backend/unparser/unparser.C:#include <boost/algorithm/string.hpp>
backend/unparser/unparser.C:// #include <boost/test/unit_test.hpp>
backend/unparser/PythonCodeGeneration/unparsePython.C:#include <boost/foreach.hpp>
backend/unparser/X10CodeGeneration/unparseX10_statements.C:#include <boost/foreach.hpp>
frontend/ECJ_ROSE_Connection/jni_JavaSourceCodePosition.C:#include <boost/algorithm/string.hpp>
frontend/Partitioner2/Modules.C:#include <boost/algorithm/string/predicate.hpp>
frontend/Partitioner2/Modules.C:#include <boost/algorithm/string/replace.hpp>
frontend/Partitioner2/AddressUsageMap.h:#include <boost/foreach.hpp>
frontend/Partitioner2/Attribute.h:#include <boost/any.hpp>
frontend/Partitioner2/Partitioner.C:#include <boost/algorithm/string/predicate.hpp>
frontend/Partitioner2/Partitioner.C:#include <boost/foreach.hpp>
frontend/Partitioner2/ModulesM68k.C:#include <boost/foreach.hpp>
frontend/Partitioner2/ModulesPe.C:#include <boost/foreach.hpp>
frontend/Partitioner2/AddressUsageMap.C:#include <boost/foreach.hpp>
frontend/Partitioner2/ModulesElf.C:#include <boost/foreach.hpp>
frontend/Partitioner2/BasicBlock.C:#include <boost/foreach.hpp>
frontend/SageIII/rose_attributes_list.C:#include <boost/wave.hpp>
frontend/SageIII/rose_attributes_list.C:// #include <boost/wave/grammars/cpp_xpression_grammar.hpp> //as_string
frontend/SageIII/rose_graph_support.C:#include <boost/graph/adjacency_list.hpp>
frontend/SageIII/rose_graph_support.C:#include <boost/graph/kruskal_min_spanning_tree.hpp>
frontend/SageIII/attachPreprocessingInfo.C:#include <boost/wave.hpp>
frontend/SageIII/attachPreprocessingInfo.C:#include <boost/wave/cpplexer/cpp_lex_token.hpp>    // token class
frontend/SageIII/attachPreprocessingInfo.C:#include <boost/wave/cpplexer/cpp_lex_iterator.hpp> // lexer class
frontend/SageIII/attachPreprocessingInfo.C:#include <boost/filesystem.hpp>         // exsits()
frontend/SageIII/sage_support/sage_support.cpp:#include <boost/algorithm/string/join.hpp>
frontend/SageIII/sage_support/sage_support.cpp:#include <boost/filesystem.hpp>
frontend/SageIII/sage_support/sage_support.cpp:#include <boost/foreach.hpp>
frontend/SageIII/sage_support/cmdline.cpp:#include <boost/foreach.hpp>
frontend/SageIII/sage_support/cmdline.cpp:#include <boost/algorithm/string/replace.hpp>
frontend/SageIII/rose_attributes_list.h:    #include <boost/preprocessor/iteration/iterate.hpp> // Liao, 7/10/2009, required by GCC 4.4.0 for a #define line of BOOST_PP_ITERATION_DEPTH
frontend/SageIII/rose_attributes_list.h:      #include <boost/wave.hpp> // CH (4/7/2010): Put this header here to avoid compiling error about mismatch between definition and declaration
frontend/SageIII/rose_attributes_list.h:    #include <boost/wave/cpplexer/cpp_lex_token.hpp>    // token class
frontend/SageIII/rose_attributes_list.h:    #include <boost/wave/cpplexer/cpp_lex_iterator.hpp>   // lexer type
frontend/SageIII/advanced_preprocessing_hooks.h:#include <boost/assert.hpp>
frontend/SageIII/advanced_preprocessing_hooks.h:#include <boost/config.hpp>
frontend/SageIII/advanced_preprocessing_hooks.h:#include <boost/wave/token_ids.hpp>
frontend/SageIII/advanced_preprocessing_hooks.h:#include <boost/wave/util/macro_helpers.hpp>
frontend/SageIII/advanced_preprocessing_hooks.h:#include <boost/wave/preprocessing_hooks.hpp>
frontend/SageIII/sageInterface/sageBuilder_untypedNodes.C:#include <boost/algorithm/string/trim.hpp>
frontend/SageIII/sageInterface/sageBuilder.C:   #include <boost/algorithm/string/trim.hpp>
frontend/SageIII/sageInterface/sageBuilder.C:   #include <boost/foreach.hpp>
frontend/SageIII/sageInterface/sageBuilder.C:   #include <boost/algorithm/string/trim.hpp>
frontend/SageIII/sageInterface/sageBuilder.C:   #include <boost/foreach.hpp>
frontend/SageIII/sageInterface/sageBuilderAsm.C:#include <boost/foreach.hpp>
frontend/SageIII/sageInterface/sageInterface_type.C:#include <boost/foreach.hpp>
frontend/SageIII/sageInterface/sageBuilder_fortran.C:#include <boost/algorithm/string/trim.hpp>
frontend/SageIII/sageInterface/integerOps.h:#include <boost/static_assert.hpp>
frontend/SageIII/sageInterface/integerOps.h:#include <boost/optional.hpp>
frontend/SageIII/sageInterface/sageInterface.C:#include <boost/lexical_cast.hpp>
frontend/SageIII/sageInterface/sageInterface.C:#include <boost/foreach.hpp>
frontend/SageIII/rtiHelpers.h:#include <boost/lexical_cast.hpp>
frontend/SageIII/virtualCFG/staticCFG.C:#include <boost/foreach.hpp>
frontend/SageIII/virtualCFG/customFilteredCFG.C:#include <boost/foreach.hpp>
frontend/SageIII/virtualCFG/memberFunctions.C:#include <boost/foreach.hpp>
frontend/SageIII/virtualCFG/interproceduralCFG.C:#include <boost/foreach.hpp>
frontend/SageIII/astTokenStream/doCompleteMapping.h:#include <boost/tuple/tuple.hpp>
frontend/SageIII/astTokenStream/linearizeAST.C:#include <boost/lexical_cast.hpp>
frontend/SageIII/astTokenStream/tokenStreamMapping.C:// #include <boost/icl/interval_map.hpp>
frontend/SageIII/attributeListMap.h:#include <boost/wave.hpp>
frontend/SageIII/attributeListMap.h:#include <boost/wave/cpplexer/cpp_lex_token.hpp>    // token class
frontend/SageIII/attributeListMap.h:#include <boost/wave/cpplexer/cpp_lex_iterator.hpp> // lexer class
frontend/BinaryDisassembly/RoseBin_file.cpp:#include <boost/lexical_cast.hpp>
frontend/BinaryDisassembly/RoseBin_support.h:#include <boost/unordered_map.hpp>
frontend/BinaryDisassembly/RoseBin_support.h:#include <boost/unordered_set.hpp>
frontend/Disassemblers/PStatistics.C:#include <boost/graph/adjacency_list.hpp>
frontend/Disassemblers/PStatistics.C:#include <boost/graph/connected_components.hpp>
frontend/Disassemblers/PStatistics.C:#include <boost/math/special_functions/erf.hpp> // for erf
frontend/Disassemblers/BinaryDebugger.C:#include <boost/algorithm/string/case_conv.hpp>
frontend/Disassemblers/BinaryDebugger.C:#include <boost/config.hpp>
frontend/BinaryLoader/BinaryLoaderElf.C:#include <boost/regex.hpp>
frontend/BinaryLoader/BinaryLoaderElf.C:#include <boost/filesystem.hpp>
frontend/BinaryFormats/GenericFile.C:#include <boost/math/common_factor.hpp>
frontend/BinaryFormats/MemoryMap.C:#include <boost/filesystem.hpp>
frontend/BinaryFormats/MemoryMap.C:#include <boost/foreach.hpp>
frontend/BinaryFormats/MemoryMap.C:#include <boost/config.hpp>
frontend/BinaryFormats/ExtentMap.C:#include <boost/foreach.hpp>
frontend/BinaryFormats/SRecord.C:#include <boost/foreach.hpp>
frontend/BinaryFormats/WorkLists.h:#include <boost/logic/tribool.hpp>
midend/astDiagnostics/AstPerformance.C:#include <boost/thread.hpp>     // sleep()
midend/astSnippet/Snippet.h:#include <boost/shared_ptr.hpp>
midend/astSnippet/Snippet.h:#include <boost/enable_shared_from_this.hpp>
midend/astSnippet/Snippet.C:#include <boost/algorithm/string/erase.hpp>
midend/astSnippet/Snippet.C:#include <boost/algorithm/string/predicate.hpp>
midend/astSnippet/Snippet.C:#include <boost/algorithm/string/replace.hpp>
midend/astSnippet/Snippet.C:#include <boost/algorithm/string/split.hpp>
midend/astSnippet/Snippet.C:#include <boost/algorithm/string/trim.hpp>
midend/astSnippet/Snippet.C:#include <boost/filesystem.hpp>
midend/astSnippet/Snippet.C:#include <boost/foreach.hpp>
midend/astSnippet/Snippet.C:#include <boost/lexical_cast.hpp>
midend/astSnippet/Snippet.C:#include <boost/regex.hpp>
midend/programAnalysis/staticSingleAssignment/staticSingleAssignmentInterprocedural.C:#include <boost/timer.hpp>
midend/programAnalysis/staticSingleAssignment/iteratedDominanceFrontier.h:#include <boost/foreach.hpp>
midend/programAnalysis/staticSingleAssignment/iteratedDominanceFrontier.h:#include <boost/graph/adjacency_list.hpp>
midend/programAnalysis/staticSingleAssignment/iteratedDominanceFrontier.h:#include <boost/graph/topological_sort.hpp>
midend/programAnalysis/staticSingleAssignment/reachingDef.C:#include <boost/foreach.hpp>
midend/programAnalysis/staticSingleAssignment/reachingDef.C:#include <boost/unordered_set.hpp>
midend/programAnalysis/staticSingleAssignment/reachingDef.C:#include <boost/tuple/tuple.hpp>
midend/programAnalysis/staticSingleAssignment/controlDependence.h:#include <boost/foreach.hpp>
midend/programAnalysis/staticSingleAssignment/staticSingleAssignment.h:#include <boost/foreach.hpp>
midend/programAnalysis/staticSingleAssignment/staticSingleAssignment.h:#include <boost/unordered_map.hpp>
midend/programAnalysis/staticSingleAssignment/staticSingleAssignmentQueries.C:#include <boost/foreach.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/graph/adjacency_list.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/bind.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/foreach.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/tuple/tuple.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/graph/graphviz.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/graph/dominator_tree.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/graph/reverse_graph.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/graph/transpose_graph.hpp>
midend/programAnalysis/staticSingleAssignment/boostGraphCFG.h:#include <boost/algorithm/string.hpp>
midend/programAnalysis/staticSingleAssignment/uniqueNameTraversal.C:#include <boost/foreach.hpp>
midend/programAnalysis/staticSingleAssignment/staticSingleAssignmentCalculation.C:#include <boost/timer.hpp>
midend/programAnalysis/staticSingleAssignment/staticSingleAssignmentCalculation.C:#include <boost/foreach.hpp>
midend/programAnalysis/staticSingleAssignment/staticSingleAssignmentCalculation.C:#include <boost/unordered_set.hpp>
midend/programAnalysis/staticSingleAssignment/staticSingleAssignmentCalculation.C:#include <boost/tuple/tuple.hpp>
midend/programAnalysis/staticSingleAssignment/reachingDef.h:#include <boost/shared_ptr.hpp>
midend/programAnalysis/staticSingleAssignment/defsAndUsesTraversal.C:#include <boost/foreach.hpp>
midend/programAnalysis/sideEffectAnalysis/sideEffect.C:#include <boost/unordered_map.hpp>
midend/programAnalysis/sideEffectAnalysis/sideEffect.C:#include <boost/unordered_set.hpp>
midend/programAnalysis/sideEffectAnalysis/sideEffect.C:#include <boost/config.hpp>
midend/programAnalysis/sideEffectAnalysis/SqliteDatabaseGraph.h:#include <boost/graph/graphviz.hpp>
midend/programAnalysis/ssaUnfilteredCfg/reachingDefUnfilteredCfg.C:#include <boost/foreach.hpp>
midend/programAnalysis/ssaUnfilteredCfg/reachingDefUnfilteredCfg.C:#include <boost/unordered_set.hpp>
midend/programAnalysis/ssaUnfilteredCfg/reachingDefUnfilteredCfg.C:#include <boost/tuple/tuple.hpp>
midend/programAnalysis/ssaUnfilteredCfg/ssaUnfilteredCfgQueries.C:#include <boost/foreach.hpp>
midend/programAnalysis/ssaUnfilteredCfg/defsAndUsesUnfilteredCfg.C:#include <boost/foreach.hpp>
midend/programAnalysis/ssaUnfilteredCfg/reachingDefUnfilteredCfg.h:#include <boost/shared_ptr.hpp>
midend/programAnalysis/ssaUnfilteredCfg/ssaUnfilteredCfgCalculation.C:#include <boost/timer.hpp>
midend/programAnalysis/ssaUnfilteredCfg/ssaUnfilteredCfgCalculation.C:#include <boost/foreach.hpp>
midend/programAnalysis/ssaUnfilteredCfg/ssaUnfilteredCfgCalculation.C:#include <boost/unordered_set.hpp>
midend/programAnalysis/ssaUnfilteredCfg/ssaUnfilteredCfgCalculation.C:#include <boost/tuple/tuple.hpp>
midend/programAnalysis/ssaUnfilteredCfg/ssaUnfilteredCfg.h:#include <boost/foreach.hpp>
midend/programAnalysis/ssaUnfilteredCfg/ssaUnfilteredCfg.h:#include <boost/unordered_map.hpp>
midend/programAnalysis/CallGraphAnalysis/CallGraphDB.C:#include <boost/lexical_cast.hpp>
midend/programAnalysis/CallGraphAnalysis/CallGraph.C:#include <boost/foreach.hpp>
midend/programAnalysis/CallGraphAnalysis/CallGraph.h:#include <boost/foreach.hpp>
midend/programAnalysis/CallGraphAnalysis/CallGraph.h:#include <boost/unordered_map.hpp>
midend/programAnalysis/CallGraphAnalysis/ClassHierarchyGraph.h:#include <boost/unordered_set.hpp>
midend/programAnalysis/CallGraphAnalysis/ClassHierarchyGraph.C:#include <boost/foreach.hpp>
midend/programAnalysis/CallGraphAnalysis/ClassHierarchyGraph.C:#include <boost/tuple/tuple.hpp>
midend/programAnalysis/defUseAnalysis/DefUseAnalysis.cpp:#include <boost/config.hpp>
midend/programAnalysis/defUseAnalysis/DefUseAnalysis.cpp:#include <boost/bind.hpp>
midend/programAnalysis/defUseAnalysis/DefUseAnalysis.h:#include <boost/unordered_map.hpp>
midend/programAnalysis/defUseAnalysis/DefUseAnalysis.h:#include <boost/unordered_set.hpp>
midend/programAnalysis/defUseAnalysis/LivenessAnalysis.cpp:#include <boost/config.hpp>
midend/programAnalysis/defUseAnalysis/LivenessAnalysis.cpp:#include <boost/bind.hpp>
midend/programAnalysis/pointerAnal/PtrAnal.h:#include <boost/unordered_map.hpp>
midend/programAnalysis/EditDistance/TreeEditDistance.C:#include <boost/graph/dijkstra_shortest_paths.hpp>
midend/programAnalysis/EditDistance/TreeEditDistance.h:#include <boost/graph/adjacency_list.hpp>
midend/programAnalysis/EditDistance/TreeEditDistance.h:#include <boost/graph/graph_traits.hpp>
midend/programAnalysis/genericDataflow/simpleAnalyses/divAnalysis.C:#include <boost/bind.hpp>
midend/programAnalysis/genericDataflow/simpleAnalyses/divAnalysis.C:#include <boost/mem_fn.hpp>
midend/programAnalysis/genericDataflow/analysis/dataflow.h:#include <boost/shared_ptr.hpp>
midend/programAnalysis/genericDataflow/analysis/dataflow.C:#include <boost/mem_fn.hpp>
midend/programAnalysis/variableRenaming/VariableRenaming.C:#include <boost/foreach.hpp>
midend/programAnalysis/variableRenaming/VariableRenaming.C:#include <boost/unordered_set.hpp>
midend/programAnalysis/variableRenaming/VariableRenaming.h:#include <boost/foreach.hpp>
midend/programAnalysis/variableRenaming/VariableRenaming.h:#include <boost/unordered_map.hpp>
midend/programAnalysis/systemDependenceGraph/SDG.h:#include <boost/function.hpp>
midend/programAnalysis/systemDependenceGraph/SDG.h:#include <boost/unordered_map.hpp>
midend/programAnalysis/systemDependenceGraph/newDDG.C:#include <boost/bind.hpp>
midend/programAnalysis/systemDependenceGraph/newDDG.C:#include <boost/lambda/lambda.hpp>
midend/programAnalysis/systemDependenceGraph/newDDG.C:#include <boost/graph/graphviz.hpp>
midend/programAnalysis/systemDependenceGraph/newDDG.C:#include <boost/unordered_set.hpp>
midend/programAnalysis/systemDependenceGraph/SDG.C:#include <boost/algorithm/string.hpp>
midend/programAnalysis/systemDependenceGraph/SDG.C:#include <boost/bind.hpp>
midend/programAnalysis/systemDependenceGraph/SDG.C:#include <boost/foreach.hpp>
midend/programAnalysis/systemDependenceGraph/SDG.C:#include <boost/lambda/lambda.hpp>
midend/programAnalysis/systemDependenceGraph/SDG.C:#include <boost/graph/depth_first_search.hpp>
midend/programAnalysis/systemDependenceGraph/SDG.C:#include <boost/graph/graphviz.hpp>
midend/programAnalysis/systemDependenceGraph/cong_staticCFG.h:#include <boost/function.hpp>
midend/programAnalysis/systemDependenceGraph/cong_staticCFG.h:#include <boost/graph/adjacency_list.hpp>
midend/programAnalysis/systemDependenceGraph/cong_staticCFG.h:#include <boost/shared_ptr.hpp>
midend/programAnalysis/systemDependenceGraph/staticCFG.C:#include <boost/algorithm/string.hpp>
midend/programAnalysis/systemDependenceGraph/staticCFG.C:#include <boost/bind.hpp>
midend/programAnalysis/systemDependenceGraph/staticCFG.C:#include <boost/foreach.hpp>
midend/programAnalysis/systemDependenceGraph/staticCFG.C:#include <boost/graph/dominator_tree.hpp>
midend/programAnalysis/systemDependenceGraph/staticCFG.C:#include <boost/graph/graphviz.hpp>
midend/programAnalysis/systemDependenceGraph/staticCFG.C:#include <boost/graph/reverse_graph.hpp>
midend/programAnalysis/systemDependenceGraph/staticCFG.C:#include <boost/graph/transpose_graph.hpp>
midend/programAnalysis/systemDependenceGraph/staticCFG.C:#include <boost/tuple/tuple.hpp>
midend/programAnalysis/systemDependenceGraph/util.C:#include <boost/foreach.hpp>
midend/programAnalysis/systemDependenceGraph/util.C:#include <boost/graph/strong_components.hpp>
midend/programAnalysis/systemDependenceGraph/newCDG.C:#include <boost/bind.hpp>
midend/programAnalysis/systemDependenceGraph/newCDG.C:#include <boost/foreach.hpp>
midend/programAnalysis/systemDependenceGraph/newCDG.C:#include <boost/graph/graph_utility.hpp>
midend/programAnalysis/systemDependenceGraph/newCDG.C:#include <boost/graph/graphviz.hpp>
midend/programAnalysis/systemDependenceGraph/newCDG.C:#include <boost/graph/strong_components.hpp>
midend/programAnalysis/systemDependenceGraph/newCDG.C:#include <boost/tuple/tuple.hpp>
midend/programAnalysis/systemDependenceGraph/PDG.C:#include <boost/bind.hpp>
midend/programAnalysis/systemDependenceGraph/PDG.C:#include <boost/foreach.hpp>
midend/programAnalysis/systemDependenceGraph/PDG.C:#include <boost/lambda/lambda.hpp>
midend/programAnalysis/systemDependenceGraph/PDG.C:#include <boost/graph/graphviz.hpp>
midend/programAnalysis/systemDependenceGraph/defUseChains.C:#include <boost/foreach.hpp>
midend/programAnalysis/VirtualFunctionAnalysis/IntraProcAliasAnalysis.h:#include <boost/foreach.hpp>
midend/programAnalysis/VirtualFunctionAnalysis/IntraProcAliasAnalysis.h:#include <boost/shared_ptr.hpp>
midend/programAnalysis/VirtualFunctionAnalysis/IntraProcAliasAnalysis.h:#include <boost/unordered_map.hpp>
midend/programAnalysis/VirtualFunctionAnalysis/InterProcDataFlowAnalysis.C:#include <boost/foreach.hpp>
midend/programTransformation/astOutlining/PragmaInterface.cc:#include <boost/algorithm/string/trim.hpp>
midend/programTransformation/extractFunctionArgumentsNormalization/ExtractFunctionArguments.C:#include <boost/foreach.hpp>
midend/programTransformation/extractFunctionArgumentsNormalization/ExtractFunctionArguments.C:#include <boost/tuple/tuple.hpp>
midend/astQuery/nodeQuery.C:#include <boost/bind.hpp>
midend/astProcessing/SgGraphTemplate.h:#include <boost/graph/adjacency_list.hpp>
midend/astProcessing/SgGraphTemplate.h:#include <boost/graph/astar_search.hpp>
midend/astProcessing/AstAttributeMechanism.C:#include <boost/numeric/conversion/cast.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/graph/adjacency_list.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/bind.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/foreach.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/tuple/tuple.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/graph/graphviz.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/graph/dominator_tree.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/graph/reverse_graph.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/graph/transpose_graph.hpp>
midend/astProcessing/graphTemplate.h:#include <boost/algorithm/string.hpp>
midend/astProcessing/graphProcessingSgIncGraph.h:#include <boost/regex.hpp> 
midend/astProcessing/graphProcessing.h:#include <boost/regex.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/graph/adjacency_list.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/bind.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/foreach.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/tuple/tuple.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/graph/graphviz.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/graph/dominator_tree.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/graph/reverse_graph.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/graph/transpose_graph.hpp>
midend/astProcessing/graphProcessing.h:#include <boost/algorithm/string.hpp>
midend/abstractLayer/VariableIdMapping.h:#include <boost/unordered_set.hpp>
midend/binaryAnalyses/BinaryControlFlow.h:#include <boost/foreach.hpp>
midend/binaryAnalyses/BinaryControlFlow.h:#include <boost/graph/adjacency_list.hpp>
midend/binaryAnalyses/BinaryControlFlow.h:#include <boost/graph/reverse_graph.hpp>
midend/binaryAnalyses/BinaryControlFlow.h:#include <boost/graph/depth_first_search.hpp>
midend/binaryAnalyses/BinaryTaintedFlow.h:#include <boost/foreach.hpp>
midend/binaryAnalyses/BinaryTaintedFlow.h:#include <boost/shared_ptr.hpp>
midend/binaryAnalyses/BinaryReturnValueUsed.C:#include <boost/algorithm/string/erase.hpp>
midend/binaryAnalyses/BinaryReturnValueUsed.C:#include <boost/algorithm/string/predicate.hpp>
midend/binaryAnalyses/BinaryReturnValueUsed.C:#include <boost/foreach.hpp>
midend/binaryAnalyses/BinaryDominance.h:#include <boost/graph/depth_first_search.hpp>
midend/binaryAnalyses/BinaryDominance.h:#include <boost/graph/reverse_graph.hpp>
midend/binaryAnalyses/BinaryDataFlow.h:#include <boost/foreach.hpp>
midend/binaryAnalyses/BinaryDataFlow.h:#include <boost/lexical_cast.hpp>
midend/binaryAnalyses/BinaryControlFlow.C:#include <boost/graph/depth_first_search.hpp>
midend/binaryAnalyses/instructionSemantics/DispatcherM68k.C:#include <boost/foreach.hpp>
midend/binaryAnalyses/instructionSemantics/findConstants.h:#include <boost/lexical_cast.hpp>
midend/binaryAnalyses/instructionSemantics/BaseSemantics2.h:#include <boost/shared_ptr.hpp>
midend/binaryAnalyses/instructionSemantics/BaseSemantics2.h:#include <boost/enable_shared_from_this.hpp>
midend/binaryAnalyses/instructionSemantics/BaseSemantics2.h:#include <boost/optional.hpp>
midend/binaryAnalyses/instructionSemantics/DataFlowSemantics2.h:#include <boost/foreach.hpp>
midend/binaryAnalyses/binary_analysis.C:#include <boost/lexical_cast.hpp>
midend/binaryAnalyses/libraryIdentification/functionIdentification.C:#include <boost/lexical_cast.hpp>
roseExtensions/roseHPCToolkit/src/profir/profir.cc:#include <boost/lexical_cast.hpp> // DXN: converting int to string
roseExtensions/roseHPCToolkit/src/gprof/gprof_info.cc:#include <boost/version.hpp>
roseExtensions/roseHPCToolkit/src/gprof/gprof_info.cc: #include <boost/spirit/include/classic_core.hpp>
roseExtensions/roseHPCToolkit/src/gprof/gprof_info.cc: #include <boost/spirit.hpp>
roseExtensions/sqlite3x/sqlite3x.h:#include <boost/utility.hpp>
roseExtensions/qtWidgets/util/LCS.cpp:#include <boost/algorithm/string.hpp>
roseExtensions/qtWidgets/util/LCS.h:#include <boost/smart_ptr.hpp>
roseSupport/SqlDatabase.h:#include <boost/enable_shared_from_this.hpp>
roseSupport/SqlDatabase.h:#include <boost/shared_ptr.hpp>
roseSupport/SqlDatabase.C:#include <boost/regex.hpp>
roseSupport/SqlDatabase.C:#include <boost/algorithm/string.hpp>
roseSupport/SqlDatabase.C:#include <boost/algorithm/string/regex.hpp>
ROSETTA/Grammar/Support.code:#include <boost/graph/adjacency_list.hpp>
ROSETTA/Grammar/Support.code:#include <boost/graph/kruskal_min_spanning_tree.hpp>
ROSETTA/Grammar/Node.code:#include <boost/unordered_map.hpp>
ROSETTA/Grammar/Node.code:#include <boost/unordered_set.hpp>
util/stringSupport/string_functions.cpp:#include <boost/foreach.hpp>
util/stringSupport/string_functions.cpp:#include <boost/lexical_cast.hpp>
util/stringSupport/FileNameClassifier.C:#include <boost/foreach.hpp>
util/stringSupport/FileNameClassifier.C:#include <boost/filesystem.hpp>
util/stringSupport/FileNameClassifier.C:#include <boost/version.hpp>
util/ParallelSort.h:#include <boost/thread.hpp>
util/commandlineProcessing/sla++.C: #include <boost/regex.h>
util/commandlineProcessing/commandline_processing.C:# include <boost/lexical_cast.hpp>
util/Map.h:#include <boost/optional.hpp>
Binary file util/support/.FileHelper.h.swp matches
util/support/FileHelper.h:#include <boost/filesystem.hpp>
util/sawyer/BitVector.h:#include <boost/cstdint.hpp>
util/sawyer/IntervalSet.h:#include <boost/integer_traits.hpp>
util/sawyer/IntervalSet.h:#include <boost/iterator/iterator_facade.hpp>
util/sawyer/Markup.C:#include <boost/foreach.hpp>
util/sawyer/Markup.C:#include <boost/lexical_cast.hpp>
util/sawyer/Stopwatch.C:#   include <boost/chrono/duration.hpp>
util/sawyer/Stopwatch.C:#   include <boost/chrono/system_clocks.hpp>
util/sawyer/IndexedList.h:#include <boost/range/iterator_range.hpp>
util/sawyer/GraphBoost.h:#include <boost/graph/graph_traits.hpp>
util/sawyer/GraphBoost.h:#include <boost/graph/properties.hpp>
util/sawyer/CommandLine.C:#include <boost/algorithm/string/case_conv.hpp>
util/sawyer/CommandLine.C:#include <boost/algorithm/string/join.hpp>
util/sawyer/CommandLine.C:#include <boost/algorithm/string/predicate.hpp>
util/sawyer/CommandLine.C:#include <boost/algorithm/string/regex.hpp>
util/sawyer/CommandLine.C:#include <boost/algorithm/string/trim.hpp>
util/sawyer/CommandLine.C:#include <boost/config.hpp>
util/sawyer/CommandLine.C:#include <boost/foreach.hpp>
util/sawyer/CommandLine.C:#include <boost/numeric/conversion/cast.hpp>
util/sawyer/CommandLine.C:#include <boost/regex.hpp>
util/sawyer/ProgressBar.C:#include <boost/numeric/conversion/cast.hpp>
util/sawyer/AllocatingBuffer.h:#include <boost/lexical_cast.hpp>
util/sawyer/AddressSegment.h:#include <boost/cstdint.hpp>
util/sawyer/MappedBuffer.h:#include <boost/iostreams/device/mapped_file.hpp>
util/sawyer/MappedBuffer.h:#include <boost/lexical_cast.hpp>
util/sawyer/IntervalMap.h:#include <boost/cstdint.hpp>
util/sawyer/Stopwatch.h:# include <boost/chrono/duration.hpp>
util/sawyer/Stopwatch.h:# include <boost/chrono/system_clocks.hpp>
util/sawyer/Graph.h:#include <boost/range/iterator_range.hpp>
util/sawyer/Message.C:#include <boost/algorithm/string/case_conv.hpp>
util/sawyer/Message.C:#include <boost/algorithm/string/classification.hpp>
util/sawyer/Message.C:#include <boost/algorithm/string/find.hpp>
util/sawyer/Message.C:#include <boost/algorithm/string/predicate.hpp>
util/sawyer/Message.C:#include <boost/config.hpp>
util/sawyer/Message.C:#include <boost/foreach.hpp>
util/sawyer/Message.C:#   include <boost/chrono.hpp>
util/sawyer/AddressMap.h:#include <boost/algorithm/string/predicate.hpp>
util/sawyer/AddressMap.h:#include <boost/cstdint.hpp>
util/sawyer/AddressMap.h:#include <boost/foreach.hpp>
util/sawyer/AddressMap.h:#include <boost/integer_traits.hpp>
util/sawyer/AddressMap.h:#include <boost/lexical_cast.hpp>
util/sawyer/DistinctList.h:#include <boost/foreach.hpp>
util/sawyer/Sawyer.h:#include <boost/cstdint.hpp>
util/sawyer/Sawyer.h://     BOOST_WINDOWS    The Windows API is present.  This is defined (or not) by including <boost/config.hpp>.
util/sawyer/Map.h:#include <boost/range/iterator_range.hpp>
util/sawyer/BitVectorSupport.h:#include <boost/cstdint.hpp>
util/sawyer/BitVectorSupport.h:#include <boost/lexical_cast.hpp>
util/sawyer/PoolAllocator.h:#include <boost/foreach.hpp>
util/sawyer/PoolAllocator.h:#include <boost/static_assert.hpp>
util/sawyer/PoolAllocator.h:#include <boost/cstdint.hpp>
util/sawyer/MarkupPod.C:#include <boost/foreach.hpp>
util/sawyer/Message.h:#include <boost/config.hpp>
util/sawyer/Message.h:#include <boost/logic/tribool.hpp>
util/sawyer/Interval.h:#include <boost/integer_traits.hpp>
util/sawyer/CommandLine.h:#include <boost/algorithm/string/case_conv.hpp>
util/sawyer/CommandLine.h:#include <boost/any.hpp>
util/sawyer/CommandLine.h:#include <boost/cstdint.hpp>
util/sawyer/CommandLine.h:#include <boost/foreach.hpp>
util/sawyer/CommandLine.h:#include <boost/lexical_cast.hpp>
util/sawyer/CommandLine.h:#include <boost/numeric/conversion/cast.hpp>
util/GraphUtility.h:#include <boost/cstdint.hpp>

iostreams edit

The boost::iostreams is currently used only in the binary analysis parts of ROSE, and only for its portable (Windows + Unix) implementation of memory mapping. But the default boost installation process may not install it due to some unmet dependence.

Code using iostreams

  • util/sawyer/MappedBuffer.h:#include <boost/iostreams/device/mapped_file.hpp>

Cannot find error edit

If you see errors about missing iostreams, you can

  • Option 1: Configure ROSE without binary analysis support, rerun the configuration command you just used, but this time add the "--enable-binary-analysis=no" switch. this library should not bother you anymore.
  • Option 2: install iostreams: need libbz2 and zlib to install or it will be be built.
    • sudo apt-get install zlibc zlib1g zlib1g-dev libbz2-dev
    • Still have iostreams installed without bz2 and zlib: when you compile boost and your system doesn't have all boost's prerequisites installed, you need to tell it that by adding -sNO_BZIP2=1 -sNO_ZLIB=1 to boost's configuration command line. I think "-sNO_COMPRESSION=1" works also.


More information

wave edit

demo@ubuntu:~/rose-edg4x.git/src$ grep -r  wave.hpp *
frontend/SageIII/rose_attributes_list.C:#include <boost/wave.hpp>
frontend/SageIII/attachPreprocessingInfo.C:#include <boost/wave.hpp>
frontend/SageIII/rose_attributes_list.h:      #include <boost/wave.hpp> // CH (4/7/2010): Put this header here to avoid compiling error about mismatch between definition and declaration
frontend/SageIII/attributeListMap.h:#include <boost/wave.hpp>

filesystem edit

grep -r filesystem.hpp *

frontend/OpenFortranParser_SAGE_Connection/FortranModuleInfo.C:#include "boost/filesystem.hpp"
frontend/SageIII/attachPreprocessingInfo.C:#include <boost/filesystem.hpp>         // exsits()
frontend/SageIII/sage_support/sage_support.cpp:#include <boost/filesystem.hpp>
frontend/SageIII/sage_support/sage_support.h:#include "boost/filesystem.hpp"
frontend/BinaryLoader/BinaryLoaderElf.C:#include <boost/filesystem.hpp>
frontend/BinaryFormats/MemoryMap.C:#include <boost/filesystem.hpp>
midend/astSnippet/Snippet.C:#include <boost/filesystem.hpp>
midend/programTransformation/astOutlining/Outliner.cc:#include "boost/filesystem.hpp"
util/stringSupport/FileNameClassifier.C:#include <boost/filesystem.hpp>
Binary file util/support/.FileHelper.h.swp matches
util/support/FileHelper.h:#include <boost/filesystem.hpp>

Example use src/util/support/FileHelper.h

412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  16) #include <boost/filesystem.hpp>
412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  17) 
412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  18) #include <string>

no member named generic_string edit

Related error messages

In file included from ../../../../../rose-edg4x.git/src/frontend/SageIII/includeDirectivesProcessing/CompilerOutputParser.C:10:0:
../../../../../rose-edg4x.git/src/util/support/FileHelper.h: In static member function 'static std::string FileHelper::getFileName(const string&)':
../../../../../rose-edg4x.git/src/util/support/FileHelper.h:70:37: error: 'boost::filesystem2::basic_path<std::basic_string<char>, boost::filesystem2::path_traits>::string_type' has no member named 'generic_string'
         return boostPath.filename().generic_string();
                                     ^
../../../../../rose-edg4x.git/src/util/support/FileHelper.h: In static member function 'static std::string FileHelper::getRelativePath(const string&, const string&)':
../../../../../rose-edg4x.git/src/util/support/FileHelper.h:140:45: error: 'const class std::basic_string<char>' has no member named 'generic_string'
             relativePath += toPathIterator->generic_string(); //The first path element comes without the leading path delimiter
                                             ^
../../../../../rose-edg4x.git/src/util/support/FileHelper.h:155:65: error: 'const class std::basic_string<char>' has no member named 'generic_string'
                 relativePath += pathDelimiter + toPathIterator->generic_string();
                                                                 ^
In file included from /home/demo/opt/boost_1.45.0_inst/include/boost/system/system_error.hpp:14:0,
                 from /home/demo/opt/boost_1.45.0_inst/include/boost/filesystem/v2/path.hpp:21,
                 from /home/demo/opt/boost_1.45.0_inst/include/boost/filesystem.hpp:26,
                 from ../../../../../rose-edg4x.git/src/util/support/FileHelper.h:16,
                 from ../../../../../rose-edg4x.git/src/frontend/SageIII/includeDirectivesProcessing/CompilerOutputParser.C:10:


relevant code src/util/support/FileHelper.h


// DQ (3/8/2014): Adding use of BACKEND_CXX_IS_INTEL_COMPILER to support Intel compiler for backend use.
// DQ (2/10/2014): I have fixed boost filesystem 3 issues so we now want to avoid specifying this explicitly if possible.
// Non-windows support should used boost filesystem 2 if using GNU version less than 4.7.
#ifndef _MSC_VER
// #if ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7))
#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7)))
  #define BOOST_FILESYSTEM_VERSION 2
#endif
#else
// Windows support should be using boost file system 2 (for now).
  #define BOOST_FILESYSTEM_VERSION 2
#endif


412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  16) #include <boost/filesystem.hpp>
412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  17) 
412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  18) #include <string>
412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  19) 
412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  20) using namespace std;
412795ae (Stanislav Negara 2011-07-15 15:13:34 -0700  21) using namespace boost::filesystem;


#ifndef _MSC_VER
// DQ (3/8/2014): Adding use of BACKEND_CXX_IS_INTEL_COMPILER to support Intel compiler for backend use.
// #if ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7))
#if (defined(BACKEND_CXX_IS_INTEL_COMPILER) || ((BACKEND_CXX_COMPILER_MAJOR_VERSION_NUMBER == 4) && (BACKEND_CXX_COMPILER_MINOR_VERSION_NUMBER < 7)))
         // DQ (2/10/2014): I think this is the older BOOST_FILESYSTEM_VERSION 2 specific code.
            relativePath += *toPathIterator; //The first path element comes without the leading path delimiter
#else
         // DQ (2/10/2014): I think this is the BOOST_FILESYSTEM_VERSION 3 fix.
            relativePath += toPathIterator->generic_string(); //The first path element comes without the leading path delimiter
#endif
#else
         // DQ (2/10/2014): I think this is the older BOOST_FILESYSTEM_VERSION 2 specific code.
            relativePath += *toPathIterator; //The first path element comes without the leading path delimiter
#endif

thread edit

boost thread 1.45-1.47 cannot be installed with gcc 4.7 and after. Some patches are needed.


code using boost thread edit

demo@ubuntu:~/rose-edg4x.git/src$ grep -r thread.hpp *

 midend/astDiagnostics/AstPerformance.C:#include <boost/thread.hpp>     // sleep()
 util/ParallelSort.h:#include <boost/thread.hpp>


xtime.hpp error TIME_UTC edit

from /home/demo/development/priv-rose-codethorn/src/frontend/SageIII/attachPreprocessingInfo.C:30:

/home/demo/development/install/gcc-4.4.7/boost-1.45.0/include/boost/thread/xtime.hpp:23: error: expected identifier before numeric constant

WORKAROUND: in file boost/thread/xtime.hpp WORKAROUND THAT DOES WORK FOR THREAD AND WAVE:

only undefine the C11 macro: (the following 3 lines are new, followed by the existing troublesome enum in the file)

#ifdef TIME_UTC
#undef TIME_UTC
#endif

enum xtime_clock_types
{
    TIME_UTC=1
};

PS: you will also find that people fixed it by renaming the variable. This leads to errors in some libs later. Therefore I used my above workaround.

self disabled for gcc 4.7 and after edit

Threading support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS

  • I was lucky to even catch this message. It was buried in the earlier process of screen output and quickly disappeared. It would be more help to show this in the end when screen output is stopped!!

http://stackoverflow.com/questions/8297652/error-boost-disable-threads

GCC doesn't "disable" anything, Boost.Threads 1.47 failed to correctly detect thread support in the compiler, because the undocumented implementation detail that Boost relied on changed. This is also nothing to do with experimental vs release versions, the same applies to all versions of 4.7

To define 'threads' support,

GCC <= 4.6 defines _GLIBCXX__PTHREADS whereas GCC >= 4.7 defines _GLIBCXX_HAS_GTHREADS. So, in order to compile older Boosts using any GCC more recent than 4.6 you need the patch libstdcpp3.hpp.patch enclosed in that ticket. Another problem that could also prevent Boost on working with modern compiler is ticket 6940 (TIME_UTC has a special meanhing in C11, therefore Boost >= 1.50 use TIME_UTC_ instead)

patch for boost/config/stdlib/libstdcpp3.hpp

33	33	 
34	34	#ifdef __GLIBCXX__ // gcc 3.4 and greater: 
35	35	#  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ 
36	 	        || defined(_GLIBCXX__PTHREADS) 
 	36	        || defined(_GLIBCXX__PTHREADS) \ 
 	37	        || defined(_GLIBCXX_HAS_GTHREADS) 
37	38	      // 
38	39	      // If the std lib has thread support turned on, then turn it on in Boost 
39	40	      // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT