It was necessary for me to disable some dependencies from the standard package when I cross-compiled boost recently so I made a quick patch to the 1.38 libs/CMakeList.txt to allow this. All it does is remove values from BOOST_SUBPROJECT_DIRECTORIES if the user selected ENABLE_$LIB = NO or the lib depends on another which has been removed.
I don't know if this functionality has already been patched in but in case it is of use to someone building 1.38 here are the changes I made. I bequeath this to boost if you want it :) --James
--- boost_1_38_0/libs/CMakeLists.txt 2009-01-24 18:57:20.000000000 +0000 +++ boost_1_38_0.patched/libs/CMakeLists.txt 2009-04-01 17:44:35.000000000 +0100 @@ -35,6 +35,51 @@ set(CPACK_INSTALL_CMAKE_COMPONENTS_ALL) list(SORT BOOST_SUBPROJECT_DIRS) topological_sort(BOOST_SUBPROJECT_DIRS BOOST_ _DEPENDS) + +# Make a bunch of options like ENABLE_upcase(lib) in the cache. Check +# if they've been disabled and add the lib to the PRUNE_LIST if they +# have. Make a reverse dependancy table while we're at it. +set(PRUNE_LIST) +foreach (proj ${BOOST_SUBPROJECT_DIRS}) + string(TOUPPER ${proj} proj_caps) + set(option_var ENABLE_${proj_caps}) + option(${option_var} "Build the boost.${proj} library; if no then reverse deps are disabled." YES) + + set(dep_list_var "BOOST_${proj_caps}_DEPENDS") + foreach (dep ${${dep_list_var}}) + string(TOUPPER ${dep} dep_caps) + list(APPEND "BOOST_${dep_caps}_REVDEPENDS" ${proj}) + endforeach() + + if (NOT ${option_var}) + message(STATUS "Disabling ${proj} because ${option_var} is off.") + set(mark_${dep}_removed TRUE) + list(APPEND PRUNE_LIST ${proj}) + endif() +endforeach() + +# Loop a stack of things to remove. Take them from BOOST_SUBPROJECT_DIRS. +# mark_$proj_is our visited flag. +while(PRUNE_LIST) + list(GET PRUNE_LIST 0 proj) + set(mark_${proj}_removed TRUE) + list(REMOVE_AT PRUNE_LIST 0) + list(REMOVE_ITEM BOOST_SUBPROJECT_DIRS ${proj}) + + string(TOUPPER ${proj} proj_caps) + # message(STATUS "Disable lib ${proj}") + set(revdep_var "BOOST_${proj_caps}_REVDEPENDS") + foreach(dep ${${revdep_var}}) + # Don't recurse uselessly. + if (NOT mark_${dep}_removed) + message(STATUS "Disable ${dep} because it depends on ${proj}") + list(INSERT PRUNE_LIST 0 ${dep}) + endif() + endforeach() + + set(${revdep_var}) +endwhile() + add_subdirectories(" + " ${BOOST_SUBPROJECT_DIRS}) # Write out a GraphViz file containing inter-library dependencies.
_______________________________________________ Boost-cmake mailing list Boost-cmake@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-cmake