Doxygen: Cmake fixes and cleanup

Doxygen: Cmake fixes and cleanup

--- tools/doxygen/doxygen.cmake
+++ tools/doxygen/doxygen.cmake
@@ -40,129 +40,43 @@
     option(IVW_DOXYGEN_PROJECT "Create Inviwo doxygen files" ON)
 endif()

-function(make_template FILENAME DOXY_NAME BRIEF OUTPUT_DIR INPUT_LIST TAGFILE INPUT_TAG_LIST
-                       EXTRA_FILE_LIST image_path_list aliases_list)
-
-    set(PROJNAME ${DOXY_NAME})
-
+function(ivw_format_doxy_arg retval )
+    string(REGEX REPLACE ";" " \\\\\n                         " result "${ARGN}")
+    set(${retval} ${result} PARENT_SCOPE)
+endfunction()
+
+function(ivw_make_documentation outdir doxy_name BRIEF input_list TAGFILE input_tag_list
+         extra_file_list, image_path_list aliases_list aditional_flags_list)
+    string(TOLOWER ${doxy_name} name_lower)
+
+    set(PROJNAME ${doxy_name})
     set(MAINPAGE "${IVW_ROOT_DIR}/README.md")
-
-    list(APPEND INPUT_LIST ${MAINPAGE})
-    string(REGEX REPLACE ";" " \\\\\n                         " INPUTS "${INPUT_LIST}")
-    set(INPUTS ${INPUTS})
-
-    string(REGEX REPLACE ";" " \\\\\n                         " INPUT_TAGS "${INPUT_TAG_LIST}")
-    set(INPUT_TAGS ${INPUT_TAGS})
-
-    string(REGEX REPLACE ";" " \\\\\n                         " EXTRA_FILES "${EXTRA_FILE_LIST}")
-    set(EXTRA_FILES ${EXTRA_FILES})
-
-    string(REGEX REPLACE ";" " \\\\\n                         " IMAGE_PATH "${image_path_list}")
-    set(IMAGE_PATH ${IMAGE_PATH})
-
-    string(REGEX REPLACE ";" " \\\\\n                         " ALIASES "${aliases_list}")
-    set(ALIASES ${ALIASES})
-
-    configure_file(${ivw_doxy_dir}/Doxygen.in ${FILENAME})
+    set(OUTPUT_DIR "${outdir}/${name_lower}")
+
+    list(APPEND input_list ${MAINPAGE})
+    ivw_format_doxy_arg(INPUTS ${input_list})
+    ivw_format_doxy_arg(INPUT_TAGS ${input_tag_list})
+    ivw_format_doxy_arg(EXTRA_FILES ${extra_file_list})
+    ivw_format_doxy_arg(IMAGE_PATH ${image_path_list})
+    ivw_format_doxy_arg(ALIASES ${aliases_list})
+    string(REGEX REPLACE ";" " \n " ADITIONAL_FLAGS "${aditional_flags_list}")
+    set(ADITIONAL_FLAGS ${ADITIONAL_FLAGS}) # ADITIONAL_FLAGS is appended to Doxygen.in
+
+    configure_file(${ivw_doxy_dir}/Doxygen.in ${outdir}/${name_lower}.doxy)
+
+    add_custom_target("DOXY-${doxy_name}"
+        COMMAND ${CMAKE_COMMAND} -E echo "Building doxygen ${doxy_name}"
+        COMMAND ${CMAKE_COMMAND} -E make_directory "${outdir}/${name_lower}/html"
+        COMMAND ${DOXYGEN_EXECUTABLE} "${outdir}/${name_lower}.doxy"
+        COMMAND ${CMAKE_COMMAND} -DDEST_PATH="${outdir}/${name_lower}/html" -P "${outdir}/copy_img.cmake"
+        WORKING_DIRECTORY ${outdir}
+        COMMENT "Generating ${doxy_name} API documentation with Doxygen"
+        VERBATIM
+    )
+    set_target_properties("DOXY-${doxy_name}" PROPERTIES FOLDER "doc" EXCLUDE_FROM_ALL TRUE)
 endfunction()
-
-function(get_unique_names retval paths)
-    list(LENGTH paths npaths)
-
-    # Remove non-unique start of path
-    set(ind 0)
-    set(names ${paths})
-    set(ret ${paths})
-    list(LENGTH names n_names)
-    while(n_names EQUAL npaths)
-        set(ret ${names})
-        set(names "")
-        foreach(module ${paths})
-            set(path "")
-            set(i 0)
-            string(REPLACE "/" ";" module_list ${module})
-            foreach(dir ${module_list})
-                if( i GREATER ind OR i EQUAL ind)
-                    list(APPEND path ${dir})
-                endif()
-                MATH(EXPR i "${i}+1")
-            endforeach()
-            string(REPLACE ";" "/" path_joined "${path}")
-            list(APPEND names ${path_joined})
-        endforeach()
-        list(REMOVE_DUPLICATES names)
-        list(LENGTH names n_names)
-        MATH(EXPR ind "${ind}+1")
-    endwhile()
-
-    # Remove non-unique end of path
-    set(ind 0)
-    set(new_module_bases ${ret})
-    set(names ${ret})
-    list(LENGTH names n_names)
-    while(n_names EQUAL npaths)
-        set(ret ${names})
-        set(names "")
-        foreach(module ${new_module_bases})
-            set(path "")
-            set(i 0)
-            string(REPLACE "/" ";" module_list ${module})
-            list(REVERSE module_list)
-            foreach(dir ${module_list})
-                if( i GREATER ind OR i EQUAL ind)
-                    list(APPEND path ${dir})
-                endif()
-                MATH(EXPR i "${i}+1")
-            endforeach()
-            list(REVERSE path)
-            string(REPLACE ";" "/" path_joined "${path}")
-            list(APPEND names ${path_joined})
-        endforeach()
-        list(REMOVE_DUPLICATES names)
-        list(LENGTH names n_names)
-        MATH(EXPR ind "${ind}+1")
-    endwhile()
-    set(${retval} ${ret} PARENT_SCOPE)
-endfunction()
-
-function(make_doxy_target OUTPUT_DIR DOXY_NAME image_path_list)
-    string(TOLOWER ${DOXY_NAME} name_lower)
-    add_custom_target("DOXY-${DOXY_NAME}"
-        COMMAND ${CMAKE_COMMAND} -E echo "Building doxygen ${DOXY_NAME}"
-        COMMAND ${CMAKE_COMMAND} -E make_directory "${OUTPUT_DIR}/${name_lower}/html"
-        COMMAND ${DOXYGEN_EXECUTABLE} "${OUTPUT_DIR}/${name_lower}.doxy"
-        COMMAND ${CMAKE_COMMAND} -DDEST_PATH="${OUTPUT_DIR}/${name_lower}/html" -P "${OUTPUT_DIR}/copy_img.cmake"
-        WORKING_DIRECTORY ${OUTPUT_DIR}
-        COMMENT "Generating ${DOXY_NAME} API documentation with Doxygen"
-        VERBATIM
-    )
-    set_target_properties("DOXY-${DOXY_NAME}" PROPERTIES FOLDER "doc" EXCLUDE_FROM_ALL TRUE)
-endfunction()
-
-function(make_documentation OUTPUT_DIR DOXY_NAME BRIEF INPUT_LIST TAGFILE INPUT_TAG_LIST
-         EXTRA_FILE_LIST, image_path_list aliases_list)
-    string(TOLOWER ${DOXY_NAME} name_lower)
-
-    make_template(
-        "${OUTPUT_DIR}/${name_lower}.doxy"
-        "${DOXY_NAME}"
-        "${BRIEF}"
-        "${OUTPUT_DIR}/${name_lower}"
-        "${INPUT_LIST}"
-        "${TAGFILE}"
-        "${INPUT_TAG_LIST}"
-        "${EXTRA_FILE_LIST}"
-        "${image_path_list}"
-        "${aliases_list}"
-    )
-    make_doxy_target(
-        "${OUTPUT_DIR}"
-        "${DOXY_NAME}"
-        "${image_path_list}"
-    )
-endfunction()
-
-function(make_help INPUT_DIR SOURCE_LIST image_path_list)
+
+function(ivw_make_help INPUT_DIR SOURCE_LIST image_path_list)
     # Help, used for the help inside invowo
     set(GENERATE_QHP "YES")
     set(GENERATE_IMG "NO")
@@ -175,7 +89,7 @@
         "docpage{2}=\"\\page docpage-\\1 \\2\""
     )

-    set(ADITIONAL_FLAGS_LIST
+    set(aditional_flags_list
         "AUTOLINK_SUPPORT       = NO"
         "HIDE_SCOPE_NAMES       = YES"
         "SHOW_INCLUDE_FILES     = NO"
@@ -195,19 +109,18 @@
         "GENERATE_AUTOGEN_DEF   = NO"
         "CLASS_DIAGRAMS         = NO"
     )
-    string(REGEX REPLACE ";" " \n " ADITIONAL_FLAGS "${ADITIONAL_FLAGS_LIST}")
-    set(ADITIONAL_FLAGS ${ADITIONAL_FLAGS}) # ADITIONAL_FLAGS is appended to Doxygen.in
-
-    make_documentation(
+
+    ivw_make_documentation(
         "${ivw_doxy_out}"
         "Help"
         "Inviwo help"
         "${SOURCE_LIST}"
         ""
         ""
-        "${ivw_doxy_extra_files}"
-        "${image_path_list}"
-        "${aliases_list}"
+        "${extra_files}"
+        "${image_path_list}"
+        "${aliases_list}"
+        "${aditional_flags_list}"
     )

     get_filename_component(QT_BIN_PATH ${QT_QMAKE_EXECUTABLE} PATH)
@@ -221,7 +134,7 @@
         "        <register>"
         "            <file>inviwo.qch</file>"
         "        </register>"
-            "    </docFiles>"
+        "    </docFiles>"
         "</QHelpCollectionProject>"
     )
     string(REPLACE ";" "\n" INV_QHCP ${INV_QHCP})
@@ -254,10 +167,10 @@
         return()
     endif()

-    find_package(Perl QUIET)            # sets, PERL_FOUND, PERL_EXECUTABLE
-    find_package(Doxygen QUIET)         # sets, DOXYGEN_FOUND, DOXYGEN_EXECUTABLE,
+    find_package(Perl QUIET)            # sets: PERL_FOUND, PERL_EXECUTABLE
+    find_package(Doxygen QUIET)         # sets: DOXYGEN_FOUND, DOXYGEN_EXECUTABLE,
                                         # DOXYGEN_DOT_FOUND, DOXYGEN_DOT_EXECUTABLE
-    find_package(PythonInterp QUIET)    # sets, PYTHONINTERP_FOUND PYTHON_EXECUTABLE
+    find_package(PythonInterp QUIET)    # sets: PYTHONINTERP_FOUND PYTHON_EXECUTABLE

     if(NOT ${DOXYGEN_FOUND})
         ivw_message(WARNING "Tried to create doxygen project, but doxygen was not found")
@@ -270,40 +183,34 @@

     set(ivw_doxy_dir ${IVW_ROOT_DIR}/tools/doxygen)
     set(ivw_doxy_out ${CMAKE_CURRENT_BINARY_DIR}/doc)
-    set(ivw_doxy_tag_files "")
-    set(ivw_doxy_depends "")
+    set(tag_files "")
+    set(dependency_list "")

     set(GENERATE_IMG "YES")
-    string(REGEX REPLACE ";" " \\\\\n                         " SHADER_INC_PATH "${IVW_SHADER_INCLUDE_PATHS}")
-    set(SHADER_INC_PATH ${SHADER_INC_PATH})
-
+    ivw_format_doxy_arg(SHADER_INC_PATH ${IVW_SHADER_INCLUDE_PATHS})
+
     if(PYTHONINTERP_FOUND)
         set(PREFIX_PYTHON "")
         #set(PREFIX_PYTHON "${PYTHON_EXECUTABLE} ") # This is sometimes needed but gives errors on win7
-        set(FILER_PATTERNS_LIST
+        set(filer_patterns_list
             "\"*.frag=${PREFIX_PYTHON}${ivw_doxy_dir}/filter/glslfilter.py\""
             "\"*.vert=${PREFIX_PYTHON}${ivw_doxy_dir}/filter/glslfilter.py\""
             "\"*.geom=${PREFIX_PYTHON}${ivw_doxy_dir}/filter/glslfilter.py\""
             "\"*.glsl=${PREFIX_PYTHON}${ivw_doxy_dir}/filter/glslfilter.py\""
          )
-        string(REGEX REPLACE ";" " \\\\\n                         " FILER_PATTERNS "${FILER_PATTERNS_LIST}")
-        set(FILER_PATTERNS ${FILER_PATTERNS})
-    endif()
-
-    set(ivw_doxy_extra_files
-        "${ivw_doxy_dir}/style/img_downArrow.png"
-    )
+        ivw_format_doxy_arg(FILER_PATTERNS ${filer_patterns_list})
+    endif()
+
+    set(extra_files "${ivw_doxy_dir}/style/img_downArrow.png")

     set(aliases_list
         "docpage{1}=\"\\ingroup processors \\n \#\\1\""
         "docpage{2}=\"\\ingroup processors \\n \#\\2\""
     )

-    set(image_path_list
-        "${IVW_ROOT_DIR}/data/help/images"
-    )
-
-    set(ivw_doxy_all_sources
+    set(image_path_list "${IVW_ROOT_DIR}/data/help/images")
+
+    set(all_sources
         "${IVW_INCLUDE_DIR}"
         "${IVW_SOURCE_DIR}"
         "${IVW_APPLICATION_DIR}"
@@ -313,63 +220,66 @@
         set(WARN_FORMAT "\$file(\$line): \$text")
     endif()

+    # Group target
     add_custom_target("DOXY-ALL"
         WORKING_DIRECTORY ${ivw_doxy_out}
         COMMENT "Generating ALL API documentation with Doxygen"
         VERBATIM
     )
-    set_target_properties("DOXY-ALL" PROPERTIES FOLDER "doc")
+    set_target_properties("DOXY-ALL" PROPERTIES FOLDER "doc" EXCLUDE_FROM_ALL TRUE)

     # Core
-    set(ivw_doxy_tag_core "${ivw_doxy_out}/core/ivwcore.tag")
-    make_documentation(
+    set(core_tag "${ivw_doxy_out}/core/ivwcore.tag")
+    ivw_make_documentation(
         "${ivw_doxy_out}"
         "Core"
         "Core functionality of Inviwo"
         "${IVW_CORE_INCLUDE_DIR};${IVW_CORE_SOURCE_DIR}"
-        "${ivw_doxy_tag_core}"
-        "${ivw_doxy_tag_files}"
-        "${ivw_doxy_extra_files}"
-        "${image_path_list}"
-        "${aliases_list}"
-    )
-    list(APPEND ivw_doxy_depends "DOXY-Core")
-    list(APPEND ivw_doxy_tag_files "${ivw_doxy_tag_core}=${ivw_doxy_out}/core/html")
+        "${core_tag}"
+        "${tag_files}"
+        "${extra_files}"
+        "${image_path_list}"
+        "${aliases_list}"
+        ""
+    )
+    list(APPEND dependency_list "DOXY-Core")
+    list(APPEND tag_files "${core_tag}=${ivw_doxy_out}/core/html")

-    # OT
-    set(ivw_doxy_tag_qt "${ivw_doxy_out}/qt/ivwqt.tag")
-    #list(APPEND ivw_doxy_tag_files "qtcore.tags=http://qt-project.org/doc/qt-5/")
-    make_documentation(
+    # Ot
+    set(qt_tag "${ivw_doxy_out}/qt/ivwqt.tag")
+    #list(APPEND tag_files "qtcore.tags=http://qt-project.org/doc/qt-5/")
+    ivw_make_documentation(
         "${ivw_doxy_out}"
         "Qt"
         "Main Qt elements of Inviwo"
         "${IVW_QT_INCLUDE_DIR};${IVW_QT_SOURCE_DIR}"
-        "${ivw_doxy_tag_qt}"
-        "${ivw_doxy_tag_files}"
-        "${ivw_doxy_extra_files}"
-        "${image_path_list}"
-        "${aliases_list}"
-    )
-    foreach(depends "${ivw_doxy_depends}")
+        "${qt_tag}"
+        "${tag_files}"
+        "${extra_files}"
+        "${image_path_list}"
+        "${aliases_list}"
+        ""
+    )
+    foreach(depends "${dependency_list}")
         add_dependencies("DOXY-Qt" ${depends})
     endforeach()
-    list(APPEND ivw_doxy_depends "DOXY-Qt")
-    list(APPEND ivw_doxy_tag_files "${ivw_doxy_tag_qt}=${ivw_doxy_out}/qt/html")
+    list(APPEND dependency_list "DOXY-Qt")
+    list(APPEND tag_files "${qt_tag}=${ivw_doxy_out}/qt/html")

     # Modules
-    set(ivw_doxy_module_bases "")
+    set(module_bases "")
     foreach(mod ${${modules_var}})
-        list(APPEND ivw_doxy_module_bases ${${mod}_base})
-        list(REMOVE_DUPLICATES ivw_doxy_module_bases)
+        list(APPEND module_bases ${${mod}_base})
+        list(REMOVE_DUPLICATES module_bases)
         if(EXISTS "${${mod}_path}/docs/images")
             list(APPEND image_path_list "${${mod}_path}/docs/images")
         endif()
-        list(APPEND ivw_doxy_all_sources ${${mod}_path})
-    endforeach()
-    get_unique_names(unique_names "${ivw_doxy_module_bases}")
+        list(APPEND all_sources ${${mod}_path})
+    endforeach()
+    ivw_find_unique_path_segements(unique_names "${module_bases}")

     set(index 0)
-    foreach(base ${ivw_doxy_module_bases})
+    foreach(base ${module_bases})
         list(GET unique_names ${index} name)

         string(REPLACE "/" "-" desc_name ${name})
@@ -377,78 +287,77 @@

         set(inc_dirs "")
         foreach(mod ${${modules_var}})
-            if(${${mod}_path} STREQUAL base)
-                list(APPEND inc_dirs ${module})
+            if(${${mod}_base} STREQUAL ${base})
+                list(APPEND inc_dirs ${${mod}_path})
             endif()
         endforeach()

-        set(ivw_doxy_tag_module "${ivw_doxy_out}/${desc_name_lower}/${desc_name_lower}.tag")
-        make_documentation(
+        set(module_tag "${ivw_doxy_out}/${desc_name_lower}/${desc_name_lower}.tag")
+        ivw_make_documentation(
             "${ivw_doxy_out}"
             "${desc_name}"
             "Modules for ${desc_name}"
             "${inc_dirs}"
-            "${ivw_doxy_tag_module}"
-            "${ivw_doxy_tag_files}"
-            "${ivw_doxy_extra_files}"
+            "${module_tag}"
+            "${tag_files}"
+            "${extra_files}"
             "${image_path_list}"
             "${aliases_list}"
+            ""
         )
-        foreach(depends "${ivw_doxy_depends}")
+        foreach(depends "${dependency_list}")
             add_dependencies("DOXY-${desc_name}" ${depends})
         endforeach()
-        list(APPEND ivw_doxy_depends "DOXY-${desc_name}")
-        list(APPEND ivw_doxy_tag_files "${ivw_doxy_tag_module}=${ivw_doxy_out}/${desc_name_lower}/html")
+        list(APPEND dependency_list "DOXY-${desc_name}")
+        list(APPEND tag_files "${module_tag}=${ivw_doxy_out}/${desc_name_lower}/html")
         MATH(EXPR index "${index}+1")
     endforeach()

     # Apps
-    set(ivw_doxy_tag_apps "${ivw_doxy_out}/apps/ivwapps.tag")
-    make_documentation(
+    set(app_tag "${ivw_doxy_out}/apps/ivwapps.tag")
+    ivw_make_documentation(
         "${ivw_doxy_out}"
         "Apps"
         "Applications using Inviwo Core and Modules"
         "${IVW_APPLICATION_DIR}"
-        "${ivw_doxy_tag_apps}"
-        "${ivw_doxy_tag_files}"
-        "${ivw_doxy_extra_files}"
-        "${image_path_list}"
-        "${aliases_list}"
-    )
-    foreach(depends "${ivw_doxy_depends}")
+        "${app_tag}"
+        "${tag_files}"
+        "${extra_files}"
+        "${image_path_list}"
+        "${aliases_list}"
+        ""
+    )
+    foreach(depends "${dependency_list}")
         add_dependencies("DOXY-Apps" ${depends})
     endforeach()
-    list(APPEND ivw_doxy_depends "DOXY-Apps")
-    list(APPEND ivw_doxy_tag_files "${ivw_doxy_tag_apps}={ivw_doxy_out}/apps/html")
-
-    foreach(depends "${ivw_doxy_depends}")
+    list(APPEND dependency_list "DOXY-Apps")
+    list(APPEND tag_files "${app_tag}={ivw_doxy_out}/apps/html")
+
+    foreach(depends "${dependency_list}")
         add_dependencies("DOXY-ALL" ${depends})
     endforeach()

     # All In one.
-    make_documentation(
+    ivw_make_documentation(
         "${ivw_doxy_out}"
         "Inviwo"
         "Inviwo documentation"
-        "${ivw_doxy_all_sources}"
+        "${all_sources}"
         ""
         ""
-        "${ivw_doxy_extra_files}"
-        "${image_path_list}"
-        "${aliases_list}"
+        "${extra_files}"
+        "${image_path_list}"
+        "${aliases_list}"
+        ""
     )
     add_dependencies("DOXY-ALL" "DOXY-Inviwo")

     # Help, used for the help inside invowo
-    make_help("${ivw_doxy_dir}/help" "${ivw_doxy_all_sources}" "${image_path_list}")
+    ivw_make_help("${ivw_doxy_dir}/help" "${all_sources}" "${image_path_list}")
     add_dependencies("DOXY-ALL" "DOXY-Help")
     add_dependencies("DOXY-ALL" "DOXY-QCH")
-
-    foreach(path ${IMG_PATHS})
-        message(${path})
-    endforeach()

     # make a img-copy script
     set(COPY_SCRIPT_LIST


r9341/sofa : cmake: fix dependency problem on Win32 with shadow builds

Former-commit-id: 9304a522f01b17933cb08fedaa8b6426c1e2126d

--- sofa-dependencies.cmake
+++ sofa-dependencies.cmake
@@ -95,14 +95,14 @@
 # copy external shared objects (.dll) to the Sofa bin directory
 if(WIN32)
 	## common external dlls
-	file(GLOB sharedObjects "${SOFA_BIN_DIR}/dll_x86/*.dll")
+        file(GLOB sharedObjects "${SOFA_SRC_DIR}/bin/dll_x86/*.dll")
 	foreach(sharedObject ${sharedObjects})
-		file(COPY ${sharedObject} DESTINATION "${SOFA_BIN_DIR}")
+                file(COPY ${sharedObject} DESTINATION "${SOFA_SRC_DIR}/bin")
 	endforeach()

 	## qt dlls
 	file(GLOB sharedObjects "${EXTERNAL_QT_PATH}/bin/*.dll")
 	foreach(sharedObject ${sharedObjects})
-		file(COPY ${sharedObject} DESTINATION "${SOFA_BIN_DIR}")
+                file(COPY ${sharedObject} DESTINATION "${SOFA_SRC_DIR}/bin")
 	endforeach()
-endif()+endif()


updated so errors in cmake sub-processes get reported as errors in the main process

--- cmake/MinVRExternalProject.cmake
+++ cmake/MinVRExternalProject.cmake
@@ -36,10 +36,16 @@
     )

     h2("Generating build files for the ${DLHELPER_PROJECT_NAME} download helper project.")
-    execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . WORKING_DIRECTORY "${EXTERNAL_DIR}/${DLHELPER_PROJECT_NAME}/download-helper")
+    execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . WORKING_DIRECTORY "${EXTERNAL_DIR}/${DLHELPER_PROJECT_NAME}/download-helper" OUTPUT_VARIABLE stdout ERROR_VARIABLE stderr RESULT_VARIABLE exitcode)
+    if(NOT "${exitcode}" STREQUAL "0")
+        message(FATAL_ERROR "Error while creating download helper project: ${stdout} ${stderr}")
+    endif()

     h2("Building the ${DLHELPER_PROJECT_NAME} download helper project.  (This actually performs the download and may take some time...)")
-    execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${EXTERNAL_DIR}/${DLHELPER_PROJECT_NAME}/download-helper")
+    execute_process(COMMAND "${CMAKE_COMMAND}" --build . WORKING_DIRECTORY "${EXTERNAL_DIR}/${DLHELPER_PROJECT_NAME}/download-helper"  OUTPUT_VARIABLE stdout ERROR_VARIABLE stderr RESULT_VARIABLE exitcode)
+    if(NOT "${exitcode}" STREQUAL "0")
+        message(FATAL_ERROR "Error running download helper project: ${stdout} ${stderr}")
+    endif()

     h2("Completed download of external project ${DLHELPER_PROJECT_NAME}.")

@@ -83,10 +89,17 @@
     message(STATUS "Using build dir: ${BUILD_DIR}")
     message(STATUS "Config options: ${CMAKE_CONFIG_OPTIONS}")

-    execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" ${SRC_DIR} ${CMAKE_CONFIG_OPTIONS} WORKING_DIRECTORY ${BUILD_DIR})
+    execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" ${SRC_DIR} ${CMAKE_CONFIG_OPTIONS} WORKING_DIRECTORY ${BUILD_DIR} OUTPUT_VARIABLE stdout ERROR_VARIABLE stderr RESULT_VARIABLE exitcode)
+    if(NOT "${exitcode}" STREQUAL "0")
+        message(FATAL_ERROR "Error generating build files for external project: ${stdout} ${stderr}")
+    endif()
+

     h2("Building external project ${EXT_PROJECT_NAME}.  (This may take some time...)")
-    execute_process(COMMAND "${CMAKE_COMMAND}" --build ${BUILD_DIR} --target install)
+    execute_process(COMMAND "${CMAKE_COMMAND}" --build ${BUILD_DIR} --target install OUTPUT_VARIABLE stdout ERROR_VARIABLE stderr RESULT_VARIABLE exitcode)
+    if(NOT "${exitcode}" STREQUAL "0")
+        message(FATAL_ERROR "Error building external project: ${stdout} ${stderr}")
+    endif()

     h2("Completed external build of ${EXT_PROJECT_NAME}.")


logic is reviced.

logic is reviced.

--- cmake/Modules/FindCppUTest.cmake
+++ cmake/Modules/FindCppUTest.cmake
@@ -14,19 +14,26 @@
 find_package(PkgConfig QUIET)
 pkg_check_modules(PC_CPPUTEST QUIET cpputest)

-set(CPPUTEST_FOUND 1)
+if(PC_CPPUTEST_FOUND)
+  set(CPPUTEST_FOUND 1)
+else()
+  set(CPPUTEST_FOUND 0)
+endif()

 # find include path
 find_path(CPPUTEST_INCLUDE_DIRS CppUTest/CppUTestConfig.h
-  HINTS ${CPPUTEST_DIR}/include ${PC_CPPUTEST_INCLUDE_DIRS})
+          HINTS ${CPPUTEST_DIR}/include
+                ${PC_CPPUTEST_INCLUDE_DIRS} /usr/include)
 if(CPPUTEST_INCLUDE_DIRS MATCHES "^.*-NOTFOUND")
   set(CPPUTEST_FOUND 0)
 endif()

 # find library path
 find_path(CPPUTEST_LIBRARY_DIRS libCppUTest.a
-  HINTS  ${CPPUTEST_DIR}/lib ${CPPUTEST_DIR}/lib64
-         ${PC_CPPUTEST_LIBRARY_DIRS})
+          HINTS ${CPPUTEST_DIR}/lib64 ${CPPUTEST_DIR}/lib
+                ${PC_CPPUTEST_LIBRARY_DIRS}
+                /usr/lib64 /usr/lib
+                /usr/lib/powerpc64le-linux-gnu )
 if(CPPUTEST_LIBRARY_DIRS MATCHES "^.*-NOTFOUND")
   set(CPPUTEST_FOUND 0)
 endif()
@@ -55,4 +62,8 @@
 mark_as_advanced(CPPUTEST_INCLUDE_DIRS
   CPPUTEST_LIBRARY_DIRS CPPUTEST_LIBRARIES)

+if(CPPUTEST_FOUND)
+  message("-- CppUTest version: ${PC_CPPUTEST_VERSION}")
+endif()
+
 message("-- Detecting CppUTest package - done")


Added libclang version 3.9.1

Added libclang version 3.9.1

--- cmake/Modules/FindLibClang.cmake
+++ cmake/Modules/FindLibClang.cmake
@@ -16,6 +16,7 @@
 # most recent versions come first
 set(LIBCLANG_KNOWN_LLVM_VERSIONS 4.0.0
   4.0
+  3.9.1
   3.9.0
   3.9
   3.8.1


[cmake] Fix bug in r358779 - [CMake] Pass monorepo build settings in cross compile

Escape semicolons in the targets list so that cmake doesn't expand
them to spaces.

git-svn-id: 0ff597fd157e6f4fc38580e8d64ab130330d2411@358859 91177308-0d34-0410-b5e6-96231b3b80d8

--- cmake/modules/CrossCompile.cmake
+++ cmake/modules/CrossCompile.cmake
@@ -45,6 +45,11 @@
   string(REPLACE ";" "$<SEMICOLON>" experimental_targets_to_build_arg
          "${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}")

+  string(REPLACE ";" "$<SEMICOLON>" llvm_enable_projects_arg
+         "${LLVM_ENABLE_PROJECTS}")
+  string(REPLACE ";" "$<SEMICOLON>" llvm_external_projects_arg
+         "${LLVM_EXTERNAL_PROJECTS}")
+
   add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}/CMakeCache.txt
     COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
         -DCMAKE_MAKE_PROGRAM="${CMAKE_MAKE_PROGRAM}"
@@ -54,8 +59,8 @@
         -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${experimental_targets_to_build_arg}"
         -DLLVM_DEFAULT_TARGET_TRIPLE="${TARGET_TRIPLE}"
         -DLLVM_TARGET_ARCH="${LLVM_TARGET_ARCH}"
-        -DLLVM_ENABLE_PROJECTS="${LLVM_ENABLE_PROJECTS}"
-        -DLLVM_EXTERNAL_PROJECTS="${LLVM_EXTERNAL_PROJECTS}"
+        -DLLVM_ENABLE_PROJECTS="${llvm_enable_projects_arg}"
+        -DLLVM_EXTERNAL_PROJECTS="${llvm_external_projects_arg}"
         -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN="${LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN}"
         ${build_type_flags} ${linker_flag} ${external_clang_dir}
     WORKING_DIRECTORY ${LLVM_${target_name}_BUILD}


Add support for wasm32 architecture in `SwiftSupport.cmake`

`get_swift_host_arch` CMake function maps `CMAKE_SYSTEM_PROCESSOR` to a provided variable name. We need to support the `wasm32` case to be able to build Foundation for that architecture.

--- cmake/modules/SwiftSupport.cmake
+++ cmake/modules/SwiftSupport.cmake
@@ -33,6 +33,8 @@
     set("${result_var_name}" "i686" PARENT_SCOPE)
   elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
     set("${result_var_name}" "i686" PARENT_SCOPE)
+  elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "wasm32")
+    set("${result_var_name}" "wasm32" PARENT_SCOPE)
   else()
     message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
   endif()


added more hints to FindCPLEX

added more hints to FindCPLEX

--- cmake_extensions/FindCplex.cmake
+++ cmake_extensions/FindCplex.cmake
@@ -61,6 +61,8 @@
   NAMES cplex cplex${CPLEX_WIN_VERSION}
   HINTS ${CPLEX_ROOT_DIR}/cplex/lib/${CPLEX_WIN_PLATFORM} #windows
         ${WIN_ROOT_GUESS}/cplex/lib/${CPLEX_WIN_PLATFORM} #windows
+        ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_debian4.0_4.1/static_pic #unix
+        ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_sles10_4.1/static_pic #unix
   PATHS ENV LIBRARY_PATH #unix
         ENV LD_LIBRARY_PATH #unix
   )
@@ -69,6 +71,8 @@
   ilocplex
   HINTS ${CPLEX_ROOT_DIR}/cplex/lib/${CPLEX_WIN_PLATFORM} #windows
         ${WIN_ROOT_GUESS}/cplex/lib/${CPLEX_WIN_PLATFORM} #windows
+        ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_debian4.0_4.1/static_pic #unix
+        ${CPLEX_ROOT_DIR}/cplex/lib/x86-64_sles10_4.1/static_pic #unix
   PATHS ENV LIBRARY_PATH
         ENV LD_LIBRARY_PATH
   )
@@ -77,6 +81,8 @@
   concert
   HINTS ${CPLEX_ROOT_DIR}/concert/lib/${CPLEX_WIN_PLATFORM} #windows
         ${WIN_ROOT_GUESS}/concert/lib/${CPLEX_WIN_PLATFORM} #windows
+        ${CPLEX_ROOT_DIR}/concert/lib/x86-64_debian4.0_4.1/static_pic #unix
+        ${CPLEX_ROOT_DIR}/concert/lib/x86-64_sles10_4.1/static_pic #unix
   PATHS ENV LIBRARY_PATH
         ENV LD_LIBRARY_PATH
   )


FindCython: allow the user to specify dependencies

--- cmake/FindCython.cmake
+++ cmake/FindCython.cmake
@@ -63,6 +63,8 @@
     else(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${name}.pxd)
         set(DEPENDS ${name}.pyx)
     endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${name}.pxd)
+    # Allow the user to specify dependencies as optional arguments
+    set(DEPENDS ${DEPENDS} ${ARGN})
     add_custom_command(
         OUTPUT ${name}.cpp
         COMMAND ${CYTHON_BIN}


check version number using newer cmake functionality, instead of kde macro

--- cmake/FindEigen2.cmake
+++ cmake/FindEigen2.cmake
@@ -8,8 +8,6 @@
 # Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
 # Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
 # Redistribution and use is allowed according to the terms of the BSD license.
-
-include(MacroEnsureVersion)

 if(NOT EIGEN2_MIN_VERSION)
   if(NOT Eigen2_FIND_VERSION_MAJOR)
@@ -36,7 +34,11 @@
   set(EIGEN2_MINOR_VERSION "${CMAKE_MATCH_1}")

   set(EIGEN2_VERSION ${EIGEN2_WORLD_VERSION}.${EIGEN2_MAJOR_VERSION}.${EIGEN2_MINOR_VERSION})
-  MACRO_ENSURE_VERSION( ${EIGEN2_MIN_VERSION} ${EIGEN2_VERSION} EIGEN2_VERSION_OK)
+  if(${EIGEN2_VERSION} VERSION_LESS ${EIGEN2_MIN_VERSION})
+    set(EIGEN2_VERSION_OK FALSE)
+  else(${EIGEN2_VERSION} VERSION_LESS ${EIGEN2_MIN_VERSION})
+    set(EIGEN2_VERSION_OK TRUE)
+  endif(${EIGEN2_VERSION} VERSION_LESS ${EIGEN2_MIN_VERSION})

   if(NOT EIGEN2_VERSION_OK)


Improve FindGUROBI.cmake script.

Improve FindGUROBI.cmake script.

--- cmake/FindGUROBI.cmake
+++ cmake/FindGUROBI.cmake
@@ -1,22 +1,20 @@
 if(APPLE)
 file(GLOB dirs /Library/gurobi*)
-foreach(d in ${dirs})
-	string(REGEX MATCH "[0-9]+" GUROBI_VERSION "${d}")
-endforeach(d)
 elseif(UNIX)
-file(GLOB dirs /opt/applications/gurobi/gurobi*)
-foreach(d in ${dirs})
-	string(REGEX MATCH "[0-9]+" GUROBI_VERSION "${d}")
-endforeach(d)
+file(GLOB dirs /opt/applications/gurobi/gurobi* /opt/gurobi*)
 endif()
+list(SORT dirs)
+list(REVERSE dirs)
+list(GET dirs 0 GUROBI_DIR)
+if(APPLE)
+    string(CONCAT GUROBI_DIR ${GUROBI_DIR};/mac64)
+elseif(UNIX)
+    string(CONCAT GUROBI_DIR ${GUROBI_DIR};/linux64)
+endif()
+string(REGEX MATCH "[0-9]+" GUROBI_VERSION "${GUROBI_DIR}")

+message("Looking for Gurobi in ${GUROBI_DIR}")
 message("Gurobi version ${GUROBI_VERSION}")
-if(APPLE)
-string(CONCAT GUROBI_DIR /Library/gurobi;${GUROBI_VERSION};/mac64)
-elseif(UNIX)
-string(CONCAT GUROBI_DIR /opt/applications/gurobi/gurobi;${GUROBI_VERSION};/linux64)
-endif()
-message("Looking for Gurobi in ${GUROBI_DIR}")

 string(SUBSTRING ${GUROBI_VERSION} 0 2 GUROBI_VERSION_SHORT)


Fix OCTAVE_API_VERSION macro value

Fix OCTAVE_API_VERSION macro value

--- cmake/FindOctave.cmake
+++ cmake/FindOctave.cmake
@@ -94,7 +94,8 @@
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -p API_VERSION
                     OUTPUT_VARIABLE OCTAVE_API_VERSION
                     OUTPUT_STRIP_TRAILING_WHITESPACE )
-
+  STRING(REGEX REPLACE "[a-z\\+-]" "" OCTAVE_API_VERSION ${OCTAVE_API_VERSION})
+
   execute_process ( COMMAND ${OCTAVE_CONFIG_EXECUTABLE} -v
                     OUTPUT_VARIABLE OCTAVE_VERSION_STRING
                     OUTPUT_STRIP_TRAILING_WHITESPACE )


Update HunterGate

Update HunterGate

--- cmake/HunterGate.cmake
+++ cmake/HunterGate.cmake
@@ -287,8 +287,19 @@
   endif()

   hunter_gate_status_debug("Run generate")
+
+  # Need to add toolchain file too.
+  # Otherwise on Visual Studio + MDD this will fail with error:
+  # "Could not find an appropriate version of the Windows 10 SDK installed on this machine"
+  if(EXISTS "${CMAKE_TOOLCHAIN_FILE}")
+    set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}")
+  else()
+    # 'toolchain_arg' can't be empty
+    set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=")
+  endif()
+
   execute_process(
-      COMMAND "${CMAKE_COMMAND}" "-H${dir}" "-B${build_dir}"
+      COMMAND "${CMAKE_COMMAND}" "-H${dir}" "-B${build_dir}" "-G${CMAKE_GENERATOR}" "${toolchain_arg}"
       WORKING_DIRECTORY "${dir}"
       RESULT_VARIABLE download_result
       ${logging_params}
@@ -377,16 +388,16 @@
     string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global)
     string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath)

-    if(_empty_sha1)
-      hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory")
-    endif()
-    if(_empty_url)
-      hunter_gate_user_error("URL suboption of HunterGate is mandatory")
-    endif()
     if(_have_unparsed)
       hunter_gate_user_error(
           "HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}"
       )
+    endif()
+    if(_empty_sha1)
+      hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory")
+    endif()
+    if(_empty_url)
+      hunter_gate_user_error("URL suboption of HunterGate is mandatory")
     endif()
     if(_have_global)
       if(HUNTER_GATE_LOCAL)


Fix for Bug#11892055 - "GCC COMPILER FLAG -WOVERLOADED-VIRTUAL NOT USED, WHICH LETS BUGS IN"

--- cmake/maintainer.cmake
+++ cmake/maintainer.cmake
@@ -35,7 +35,7 @@
 # Setup G++ (GNU C++ compiler) warning options.
 MACRO(SET_MYSQL_MAINTAINER_GNU_CXX_OPTIONS)
   SET(MY_MAINTAINER_CXX_WARNINGS
-      "${MY_MAINTAINER_WARNINGS} -Wno-unused-parameter"
+      "${MY_MAINTAINER_WARNINGS} -Wno-unused-parameter -Woverloaded-virtual"
       CACHE STRING "C++ warning options used in maintainer builds.")
 ENDMACRO()


Define GMOCK_* and GTEST_* variables in a new subproject (#1101)

--- cmake/test/gtest.cmake
+++ cmake/test/gtest.cmake
@@ -314,6 +314,24 @@
 if(TARGET gtest AND TARGET gtest_main AND TARGET gmock AND TARGET gmock_main)
   set(GMOCK_FOUND TRUE)
   set(GTEST_FOUND TRUE)
+
+  # If we build these from source in a previous catkin (sub)project,
+  # define all variables from their FROM_SOURCE counterparts (again).
+  # As these variables are (explicitly!) not cached, they become reset on a new project.
+  if(GMOCK_FROM_SOURCE_FOUND)
+    set(GMOCK_INCLUDE_DIRS ${GMOCK_FROM_SOURCE_INCLUDE_DIRS})
+    set(GMOCK_LIBRARY_DIRS ${GMOCK_FROM_SOURCE_LIBRARY_DIRS})
+    set(GMOCK_LIBRARIES ${GMOCK_FROM_SOURCE_LIBRARIES})
+    set(GMOCK_MAIN_LIBRARIES ${GMOCK_FROM_SOURCE_MAIN_LIBRARIES})
+    set(GMOCK_BOTH_LIBRARIES ${GMOCK_LIBRARIES} ${GMOCK_MAIN_LIBRARIES})
+  endif()
+  if(GTEST_FROM_SOURCE_FOUND)
+    set(GTEST_INCLUDE_DIRS ${GTEST_FROM_SOURCE_INCLUDE_DIRS})
+    set(GTEST_LIBRARY_DIRS ${GTEST_FROM_SOURCE_LIBRARY_DIRS})
+    set(GTEST_LIBRARIES ${GTEST_FROM_SOURCE_LIBRARIES})
+    set(GTEST_MAIN_LIBRARIES ${GTEST_FROM_SOURCE_MAIN_LIBRARIES})
+    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
+  endif()
 else()
   find_package(GTest QUIET)
 endif()


BUG: wrong install directory for application built outside OTB

--- CMake/OTBModuleExternal.cmake
+++ CMake/OTBModuleExternal.cmake
@@ -76,6 +76,9 @@
   if(NOT OTB_INSTALL_PACKAGE_DIR)
     set(OTB_INSTALL_PACKAGE_DIR "lib/cmake/OTB-${OTB_VERSION_MAJOR}.${OTB_VERSION_MINOR}")
   endif()
+  if(NOT OTB_INSTALL_APP_DIR)
+    set(OTB_INSTALL_APP_DIR lib/otb/applications)
+  endif()

   # Use OTB's flags.
   set(CMAKE_C_FLAGS "${OTB_REQUIRED_C_FLAGS} ${CMAKE_C_FLAGS}")


FindOGRE script: Fixed static linking order for ZZip and ZLIB, added Xrandr lib for Linux

--- CMake/Packages/FindOGRE.cmake
+++ CMake/Packages/FindOGRE.cmake
@@ -215,9 +215,9 @@
   endif ()

-  set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${ZLIB_LIBRARIES} ${ZZip_LIBRARIES}
+  set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${ZZip_LIBRARIES} ${ZLIB_LIBRARIES}
     ${FreeImage_LIBRARIES} ${FREETYPE_LIBRARIES}
-    ${X11_LIBRARIES} ${X11_Xt_LIBRARIES} ${XAW_LIBRARY}
+    ${X11_LIBRARIES} ${X11_Xt_LIBRARIES} ${XAW_LIBRARY} ${X11_Xrandr_LIB}
     ${Cocoa_LIBRARIES} ${Carbon_LIBRARIES})

   if (NOT ZLIB_FOUND OR NOT ZZip_FOUND)
@@ -229,8 +229,10 @@
   if (NOT FREETYPE_FOUND)
     set(OGRE_DEPS_FOUND FALSE)
   endif ()
-  if (UNIX AND NOT X11_FOUND)
-    set(OGRE_DEPS_FOUND FALSE)
+  if (UNIX AND NOT APPLE)
+	if (NOT X11_FOUND)
+      set(OGRE_DEPS_FOUND FALSE)
+	endif ()
   endif ()

   if (OGRE_CONFIG_THREADS)


Do not find boost.

Do not find boost.

--- CmakeIncludes/FindBoost.cmake
+++ CmakeIncludes/FindBoost.cmake
@@ -1,912 +0,0 @@
-# - Try to find Boost include dirs and libraries
-# Usage of this module as follows:
-#
-# NOTE: Take note of the Boost_ADDITIONAL_VERSIONS variable below.
-# Due to Boost naming conventions and limitations in CMake this find
-# module is NOT future safe with respect to Boost version numbers,
-# and may break.
-#
-# == Using Header-Only libraries from within Boost: ==
-#
-#   find_package( Boost 1.36.0 )
-#   if(Boost_FOUND)
-#      include_directories(${Boost_INCLUDE_DIRS})
-#      add_executable(foo foo.cc)
-#   endif()
-#
-#
-# == Using actual libraries from within Boost: ==
-#
-#   set(Boost_USE_STATIC_LIBS   ON)
-#   set(Boost_USE_MULTITHREADED ON)
-#   find_package( Boost 1.36.0 COMPONENTS date_time filesystem system ... )
-#
-#   if(Boost_FOUND)
-#      include_directories(${Boost_INCLUDE_DIRS})
-#      add_executable(foo foo.cc)
-#      target_link_libraries(foo ${Boost_LIBRARIES})
-#   endif()
-#
-#
-# The components list needs to contain actual names of boost libraries only,
-# such as "date_time" for "libboost_date_time".  If you're using parts of
-# Boost that contain header files only (e.g. foreach) you do not need to
-# specify COMPONENTS.
-#
-# You should provide a minimum version number that should be used. If you provide this
-# version number and specify the REQUIRED attribute, this module will fail if it
-# can't find the specified or a later version. If you specify a version number this is
-# automatically put into the considered list of version numbers and thus doesn't need
-# to be specified in the Boost_ADDITIONAL_VERSIONS variable (see below).
-#
-# NOTE for Visual Studio Users:
-#     Automatic linking is used on MSVC & Borland compilers by default when
-#     #including things in Boost.  It's important to note that setting
-#     Boost_USE_STATIC_LIBS to OFF is NOT enough to get you dynamic linking,
-#     should you need this feature.  Automatic linking typically uses static
-#     libraries with a few exceptions (Boost.Python is one).
-#
-#     Please see the section below near Boost_LIB_DIAGNOSTIC_DEFINITIONS for
-#     more details.  Adding a TARGET_LINK_LIBRARIES() as shown in the example
-#     above appears to cause VS to link dynamically if Boost_USE_STATIC_LIBS
-#     gets set to OFF.  It is suggested you avoid automatic linking since it
-#     will make your application less portable.
-#
-# =========== The mess that is Boost_ADDITIONAL_VERSIONS (sorry?) ============
-#
-# OK, so the Boost_ADDITIONAL_VERSIONS variable can be used to specify a list of
-# boost version numbers that should be taken into account when searching
-# for Boost. Unfortunately boost puts the version number into the
-# actual filename for the libraries, so this variable will certainly be needed
-# in the future when new Boost versions are released.
-#
-# Currently this module searches for the following version numbers:
-# 1.33, 1.33.0, 1.33.1, 1.34, 1.34.0, 1.34.1, 1.35, 1.35.0, 1.35.1,
-# 1.36, 1.36.0, 1.36.1, 1.37, 1.37.0, 1.38, 1.38.0, 1.39, 1.39.0,
-# 1.40, 1.40.0
-#
-# NOTE: If you add a new major 1.x version in Boost_ADDITIONAL_VERSIONS you should
-# add both 1.x and 1.x.0 as shown above.  Official Boost include directories
-# omit the 3rd version number from include paths if it is 0 although not all
-# binary Boost releases do so.
-#
- SET(Boost_ADDITIONAL_VERSIONS "1.41" "1.42" "1.78" "1.78.0" "1.79" "1.79.0")
-#
-# ===================================== ============= ========================
-#
-# Variables used by this module, they can change the default behaviour and
-# need to be set before calling find_package:
-#
-#   Boost_USE_MULTITHREADED      Can be set to OFF to use the non-multithreaded
-#                                boost libraries.  If not specified, defaults
-#                                to ON.
-#
-#   Boost_USE_STATIC_LIBS        Can be set to ON to force the use of the static
-#                                boost libraries. Defaults to OFF.
-#
-# Other Variables used by this module which you may want to set.
-#
-#   Boost_ADDITIONAL_VERSIONS    A list of version numbers to use for searching
-#                                the boost include directory.  Please see
-#                                the documentation above regarding this
-#                                annoying, but necessary variable :(
-#
-#   Boost_DEBUG                  Set this to TRUE to enable debugging output
-#                                of FindBoost.cmake if you are having problems.
-#                                Please enable this before filing any bug
-#                                reports.
-#
-#   Boost_DETAILED_FAILURE_MSG   FindBoost doesn't output detailed information
-#                                about why it failed or how to fix the problem
-#                                unless this is set to TRUE or the REQUIRED
-#                                keyword is specified in find_package().
-#                                  [Since CMake 2.8.0]
-#
-#   Boost_COMPILER               Set this to the compiler suffix used by Boost
-#                                (e.g. "-gcc43") if FindBoost has problems finding
-#                                the proper Boost installation
-#
-# These last three variables are available also as environment variables:
-#
-#   BOOST_ROOT or BOOSTROOT      The preferred installation prefix for searching for
-#                                Boost.  Set this if the module has problems finding
-#                                the proper Boost installation.
-#
-#   BOOST_INCLUDEDIR             Set this to the include directory of Boost, if the
-#                                module has problems finding the proper Boost installation
-#
-#   BOOST_LIBRARYDIR             Set this to the lib directory of Boost, if the
-#                                module has problems finding the proper Boost installation
-#
-# Variables defined by this module:
-#
-#   Boost_FOUND                         System has Boost, this means the include dir was
-#                                       found, as well as all the libraries specified in
-#                                       the COMPONENTS list.
-#
-#   Boost_INCLUDE_DIRS                  Boost include directories: not cached
-#
-#   Boost_INCLUDE_DIR                   This is almost the same as above, but this one is
-#                                       cached and may be modified by advanced users
-#
-#   Boost_LIBRARIES                     Link to these to use the Boost libraries that you
-#                                       specified: not cached
-#
-#   Boost_LIBRARY_DIRS                  The path to where the Boost library files are.
-#
-#   Boost_VERSION                       The version number of the boost libraries that
-#                                       have been found, same as in version.hpp from Boost
-#
-#   Boost_LIB_VERSION                   The version number in filename form as
-#                                       it's appended to the library filenames
-#
-#   Boost_MAJOR_VERSION                 major version number of boost
-#   Boost_MINOR_VERSION                 minor version number of boost
-#   Boost_SUBMINOR_VERSION              subminor version number of boost
-#
-#   Boost_LIB_DIAGNOSTIC_DEFINITIONS    [WIN32 Only] You can call
-#                                       add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
-#                                       to have diagnostic information about Boost's
-#                                       automatic linking outputted during compilation time.
-#
-# For each component you specify in find_package(), the following (UPPER-CASE)
-# variables are set.  You can use these variables if you would like to pick and
-# choose components for your targets instead of just using Boost_LIBRARIES.
-#
-#   Boost_${COMPONENT}_FOUND            True IF the Boost library "component" was found.
-#
-#   Boost_${COMPONENT}_LIBRARY          Contains the libraries for the specified Boost
-#                                       "component" (includes debug and optimized keywords
-#                                       when needed).
-
-#=============================================================================
-# Copyright 2006-2009 Kitware, Inc.
-# Copyright 2006-2008 Andreas Schneider <mail@cynapses.org>
-# Copyright 2007      Wengo
-# Copyright 2007      Mike Jackson
-# Copyright 2008      Andreas Pakulat <apaku@gmx.de>
-# Copyright 2008-2009 Philip Lowman <philip@yhbt.com>
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distributed this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-#-------------------------------------------------------------------------------
-#  FindBoost functions & macros
-#
-############################################
-#
-# Check the existence of the libraries.
-#
-############################################
-# This macro was taken directly from the FindQt4.cmake file that is included
-# with the CMake distribution. This is NOT my work. All work was done by the
-# original authors of the FindQt4.cmake file. Only minor modifications were
-# made to remove references to Qt and make this file more generally applicable
-# And ELSE/ENDIF pairs were removed for readability.
-#########################################################################
-
-MACRO (_Boost_ADJUST_LIB_VARS basename)
-  IF (Boost_INCLUDE_DIR )
-    IF (Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE)
-      # if the generator supports configuration types then set
-      # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value
-      IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
-        SET(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
-      ELSE()
-        # if there are no configuration types and CMAKE_BUILD_TYPE has no value
-        # then just use the release libraries
-        SET(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} )
-      ENDIF()
-      # FIXME: This probably should be set for both cases
-      SET(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
-    ENDIF()
-
-    # if only the release version was found, set the debug variable also to the release version
-    IF (Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG)
-      SET(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE})
-      SET(Boost_${basename}_LIBRARY       ${Boost_${basename}_LIBRARY_RELEASE})
-      SET(Boost_${basename}_LIBRARIES     ${Boost_${basename}_LIBRARY_RELEASE})
-    ENDIF()
-
-    # if only the debug version was found, set the release variable also to the debug version
-    IF (Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE)
-      SET(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG})
-      SET(Boost_${basename}_LIBRARY         ${Boost_${basename}_LIBRARY_DEBUG})
-      SET(Boost_${basename}_LIBRARIES       ${Boost_${basename}_LIBRARY_DEBUG})
-    ENDIF()
-
-    IF (Boost_${basename}_LIBRARY)
-      set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY} CACHE FILEPATH "The Boost ${basename} library")
-
-      # Remove superfluous "debug" / "optimized" keywords from
-      # Boost_LIBRARY_DIRS
-      FOREACH(_boost_my_lib ${Boost_${basename}_LIBRARY})
-        GET_FILENAME_COMPONENT(_boost_my_lib_path "${_boost_my_lib}" PATH)
-        LIST(APPEND Boost_LIBRARY_DIRS ${_boost_my_lib_path})
-      ENDFOREACH()
-      LIST(REMOVE_DUPLICATES Boost_LIBRARY_DIRS)
-
-      set(Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIRS} CACHE FILEPATH "Boost library directory")
-      SET(Boost_${basename}_FOUND ON CACHE INTERNAL "Whether the Boost ${basename} library found")
-    ENDIF(Boost_${basename}_LIBRARY)
-
-  ENDIF (Boost_INCLUDE_DIR )
-  # Make variables changeble to the advanced user
-  MARK_AS_ADVANCED(
-      Boost_${basename}_LIBRARY
-      Boost_${basename}_LIBRARY_RELEASE
-      Boost_${basename}_LIBRARY_DEBUG
-  )
-ENDMACRO (_Boost_ADJUST_LIB_VARS)
-
-#-------------------------------------------------------------------------------
-
-#
-# Runs compiler with "-dumpversion" and parses major/minor
-# version with a regex.
-#
-FUNCTION(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION)
-
-  EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
-    ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
-    OUTPUT_VARIABLE _boost_COMPILER_VERSION
-  )
-  STRING(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2"
-    _boost_COMPILER_VERSION ${_boost_COMPILER_VERSION})
-
-  SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE)
-ENDFUNCTION()
-
-#
-# End functions/macros
-#
-#-------------------------------------------------------------------------------
-
-
-
-
-IF(NOT DEFINED Boost_USE_MULTITHREADED)
-    SET(Boost_USE_MULTITHREADED TRUE)
-ENDIF()
-
-if(Boost_FIND_VERSION_EXACT)
-  # The version may appear in a directory with or without the patch
-  # level, even when the patch level is non-zero.
-  set(_boost_TEST_VERSIONS
-    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}"
-    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
-else(Boost_FIND_VERSION_EXACT)
-  # The user has not requested an exact version.  Among known
-  # versions, find those that are acceptable to the user request.
-  set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
-    "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
-    "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
-    "1.34")
-  set(_boost_TEST_VERSIONS)
-  if(Boost_FIND_VERSION)
-    set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
-    # Select acceptable versions.
-    foreach(version ${_Boost_KNOWN_VERSIONS})
-      if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}")
-        # This version is high enough.
-        list(APPEND _boost_TEST_VERSIONS "${version}")
-      elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99")
-        # This version is a short-form for the requested version with
-        # the patch level dropped.
-        list(APPEND _boost_TEST_VERSIONS "${version}")
-      endif()
-    endforeach(version)
-  else(Boost_FIND_VERSION)
-    # Any version is acceptable.
-    set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}")
-  endif(Boost_FIND_VERSION)
-endif(Boost_FIND_VERSION_EXACT)
-
-# The reason that we failed to find Boost. This will be set to a
-# user-friendly message when we fail to find some necessary piece of
-# Boost.
-set(Boost_ERROR_REASON)
-
-SET( _boost_IN_CACHE TRUE)
-IF(Boost_INCLUDE_DIR)
-
-  # On versions < 1.35, remove the System library from the considered list
-  # since it wasn't added until 1.35.
-  if(Boost_VERSION AND Boost_FIND_COMPONENTS)
-     math(EXPR _boost_maj "${Boost_VERSION} / 100000")
-     math(EXPR _boost_min "${Boost_VERSION} / 100 % 1000")
-     if(${_boost_maj}.${_boost_min} VERSION_LESS 1.35)
-       list(REMOVE_ITEM Boost_FIND_COMPONENTS system)
-     endif()
-  endif()
-
-  FOREACH(COMPONENT ${Boost_FIND_COMPONENTS})
-    STRING(TOUPPER ${COMPONENT} COMPONENT)
-    IF(NOT Boost_${COMPONENT}_FOUND)
-      SET( _boost_IN_CACHE FALSE)
-    ENDIF(NOT Boost_${COMPONENT}_FOUND)
-  ENDFOREACH(COMPONENT)
-ELSE(Boost_INCLUDE_DIR)
-  SET( _boost_IN_CACHE FALSE)
-ENDIF(Boost_INCLUDE_DIR)
-
-IF (_boost_IN_CACHE)
-  # in cache already
-  SET(Boost_FOUND TRUE)
-  FOREACH(COMPONENT ${Boost_FIND_COMPONENTS})
-    STRING(TOUPPER ${COMPONENT} COMPONENT)
-    _Boost_ADJUST_LIB_VARS( ${COMPONENT} )
-    SET(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${COMPONENT}_LIBRARY})
-  ENDFOREACH(COMPONENT)
-  SET(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
-  IF(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
-    MATH(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000")
-    MATH(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000")
-    MATH(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100")
-  ENDIF(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
-  if(Boost_DEBUG)
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                     "boost ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION} "
-                     "is already in the cache.  For debugging messages, please clear the cache.")
-  endif()
-ELSE (_boost_IN_CACHE)
-  # Need to search for boost
-  if(Boost_DEBUG)
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "Boost not in cache")
-    # Output some of their choices
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}")
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "Boost_USE_MULTITHREADED = ${Boost_USE_MULTITHREADED}")
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "Boost_USE_STATIC_LIBS = ${Boost_USE_STATIC_LIBS}")
-  endif()
-
-  IF(WIN32)
-    # In windows, automatic linking is performed, so you do not have
-    # to specify the libraries.  If you are linking to a dynamic
-    # runtime, then you can choose to link to either a static or a
-    # dynamic Boost library, the default is to do a static link.  You
-    # can alter this for a specific library "whatever" by defining
-    # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be
-    # linked dynamically.  Alternatively you can force all Boost
-    # libraries to dynamic link by defining BOOST_ALL_DYN_LINK.
-
-    # This feature can be disabled for Boost library "whatever" by
-    # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining
-    # BOOST_ALL_NO_LIB.
-
-    # If you want to observe which libraries are being linked against
-    # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking
-    # code to emit a #pragma message each time a library is selected
-    # for linking.
-    SET(Boost_LIB_DIAGNOSTIC_DEFINITIONS
-      "-DBOOST_LIB_DIAGNOSTIC" CACHE STRING "Boost diagnostic define")
-  ENDIF(WIN32)
-
-  SET(_boost_INCLUDE_SEARCH_DIRS
-    C:/boost/include
-    C:/boost
-    "$ENV{ProgramFiles}/boost/include"
-    "$ENV{ProgramFiles}/boost"
-    /sw/local/include
-  )
-
-  # If BOOST_ROOT was defined in the environment, use it.
-  if (NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "")
-    set(BOOST_ROOT $ENV{BOOST_ROOT})
-  endif(NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "")
-
-  # If BOOSTROOT was defined in the environment, use it.
-  if (NOT BOOST_ROOT AND NOT $ENV{BOOSTROOT} STREQUAL "")
-    set(BOOST_ROOT $ENV{BOOSTROOT})
-  endif(NOT BOOST_ROOT AND NOT $ENV{BOOSTROOT} STREQUAL "")
-
-  # If BOOST_INCLUDEDIR was defined in the environment, use it.
-  IF( NOT $ENV{BOOST_INCLUDEDIR} STREQUAL "" )
-    set(BOOST_INCLUDEDIR $ENV{BOOST_INCLUDEDIR})
-  ENDIF( NOT $ENV{BOOST_INCLUDEDIR} STREQUAL "" )
-
-  # If BOOST_LIBRARYDIR was defined in the environment, use it.
-  IF( NOT $ENV{BOOST_LIBRARYDIR} STREQUAL "" )
-    set(BOOST_LIBRARYDIR $ENV{BOOST_LIBRARYDIR})
-  ENDIF( NOT $ENV{BOOST_LIBRARYDIR} STREQUAL "" )
-
-  IF( BOOST_ROOT )
-    file(TO_CMAKE_PATH ${BOOST_ROOT} BOOST_ROOT)
-  ENDIF( BOOST_ROOT )
-
-  if(Boost_DEBUG)
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "Declared as CMake or Environmental Variables:")
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "  BOOST_ROOT = ${BOOST_ROOT}")
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "  BOOST_INCLUDEDIR = ${BOOST_INCLUDEDIR}")
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "  BOOST_LIBRARYDIR = ${BOOST_LIBRARYDIR}")
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}")
-  endif()
-
-  IF( BOOST_ROOT )
-    SET(_boost_INCLUDE_SEARCH_DIRS
-      ${BOOST_ROOT}/include
-      ${BOOST_ROOT}
-      ${_boost_INCLUDE_SEARCH_DIRS})
-  ENDIF( BOOST_ROOT )
-
-  IF( BOOST_INCLUDEDIR )
-    file(TO_CMAKE_PATH ${BOOST_INCLUDEDIR} BOOST_INCLUDEDIR)
-    SET(_boost_INCLUDE_SEARCH_DIRS
-      ${BOOST_INCLUDEDIR} ${_boost_INCLUDE_SEARCH_DIRS})
-  ENDIF( BOOST_INCLUDEDIR )
-
-  # ------------------------------------------------------------------------
-  #  Search for Boost include DIR
-  # ------------------------------------------------------------------------
-  # Try to find Boost by stepping backwards through the Boost versions
-  # we know about.
-  IF( NOT Boost_INCLUDE_DIR )
-    # Build a list of path suffixes for each version.
-    SET(_boost_PATH_SUFFIXES)
-    FOREACH(_boost_VER ${_boost_TEST_VERSIONS})
-      # Add in a path suffix, based on the required version, ideally
-      # we could read this from version.hpp, but for that to work we'd
-      # need to know the include dir already
-      set(_boost_BOOSTIFIED_VERSION)
-
-      # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0
-      IF(_boost_VER MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+")
-          STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1_\\2_\\3"
-            _boost_BOOSTIFIED_VERSION ${_boost_VER})
-      ELSEIF(_boost_VER MATCHES "[0-9]+\\.[0-9]+")
-          STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)" "\\1_\\2"
-            _boost_BOOSTIFIED_VERSION ${_boost_VER})
-      ENDIF()
-
-      list(APPEND _boost_PATH_SUFFIXES "boost-${_boost_BOOSTIFIED_VERSION}")
-      if(WIN32)
-        # For BoostPro's underscores (and others?)
-        list(APPEND _boost_PATH_SUFFIXES "boost_${_boost_BOOSTIFIED_VERSION}")
-      endif()
-
-    ENDFOREACH(_boost_VER)
-
-    if(Boost_DEBUG)
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                     "Include debugging info:")
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                     "  _boost_INCLUDE_SEARCH_DIRS = ${_boost_INCLUDE_SEARCH_DIRS}")
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                     "  _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}")
-    endif()
-
-    # Look for a standard boost header file.
-    FIND_PATH(Boost_INCLUDE_DIR
-      NAMES         boost/config.hpp
-      HINTS         ${_boost_INCLUDE_SEARCH_DIRS}
-      PATH_SUFFIXES ${_boost_PATH_SUFFIXES}
-      )
-  ENDIF( NOT Boost_INCLUDE_DIR )
-
-  # ------------------------------------------------------------------------
-  #  Extract version information from version.hpp
-  # ------------------------------------------------------------------------
-
-  IF(Boost_INCLUDE_DIR)
-    # Extract Boost_VERSION and Boost_LIB_VERSION from version.hpp
-    # Read the whole file:
-    #
-    SET(BOOST_VERSION 0)
-    SET(BOOST_LIB_VERSION "")
-    FILE(READ "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS)
-    if(Boost_DEBUG)
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                     "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp")
-    endif()
-
-    STRING(REGEX REPLACE ".*#define BOOST_VERSION ([0-9]+).*" "\\1" Boost_VERSION "${_boost_VERSION_HPP_CONTENTS}")
-    STRING(REGEX REPLACE ".*#define BOOST_LIB_VERSION \"([0-9_]+)\".*" "\\1" Boost_LIB_VERSION "${_boost_VERSION_HPP_CONTENTS}")
-
-    SET(Boost_LIB_VERSION ${Boost_LIB_VERSION} CACHE INTERNAL "The library version string for boost libraries")
-    SET(Boost_VERSION ${Boost_VERSION} CACHE INTERNAL "The version number for boost libraries")
-
-    IF(NOT "${Boost_VERSION}" STREQUAL "0")
-      MATH(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000")
-      MATH(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000")
-      MATH(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100")
-
-      set(Boost_ERROR_REASON
-          "${Boost_ERROR_REASON}Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}\nBoost include path: ${Boost_INCLUDE_DIR}")
-    ENDIF(NOT "${Boost_VERSION}" STREQUAL "0")
-    if(Boost_DEBUG)
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                     "version.hpp reveals boost "
-                     "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
-    endif()
-  ELSE(Boost_INCLUDE_DIR)
-    set(Boost_ERROR_REASON
-      "${Boost_ERROR_REASON}Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers.")
-  ENDIF(Boost_INCLUDE_DIR)
-
-  # ------------------------------------------------------------------------
-  #  Suffix initialization and compiler suffix detection.
-  # ------------------------------------------------------------------------
-
-  # Setting some more suffixes for the library
-  SET (Boost_LIB_PREFIX "")
-  if ( WIN32 AND Boost_USE_STATIC_LIBS )
-    SET (Boost_LIB_PREFIX "lib")
-  endif()
-
-  if (Boost_COMPILER)
-    set(_boost_COMPILER ${Boost_COMPILER})
-    if(Boost_DEBUG)
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                     "using user-specified Boost_COMPILER = ${_boost_COMPILER}")
-    endif()
-  else(Boost_COMPILER)
-    # Attempt to guess the compiler suffix
-    # NOTE: this is not perfect yet, if you experience any issues
-    # please report them and use the Boost_COMPILER variable
-    # to work around the problems.
-    if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel"
-        OR "${CMAKE_CXX_COMPILER}" MATCHES "icl"
-        OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc")
-      if(WIN32)
-        set (_boost_COMPILER "-iw")
-      else()
-        set (_boost_COMPILER "-il")
-      endif()
-    elseif (MSVC90)
-      SET (_boost_COMPILER "-vc90")
-    elseif (MSVC10)
-      SET (_boost_COMPILER "-vc100")
-    elseif (MSVC80)
-      SET (_boost_COMPILER "-vc80")
-    elseif (MSVC71)
-      SET (_boost_COMPILER "-vc71")
-    elseif (MSVC70) # Good luck!
-      SET (_boost_COMPILER "-vc7") # yes, this is correct
-    elseif (MSVC60) # Good luck!
-      SET (_boost_COMPILER "-vc6") # yes, this is correct
-    elseif (BORLAND)
-      SET (_boost_COMPILER "-bcb")
-    elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro")
-      set(_boost_COMPILER "-sw")
-    elseif (MINGW)
-      if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34)
-          SET(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34
-      else()
-        _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION)
-        SET (_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}")
-      endif()
-    elseif (UNIX)
-      if (CMAKE_COMPILER_IS_GNUCXX)
-          _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION)
-          # Determine which version of GCC we have.
-          IF(APPLE)
-            IF(Boost_MINOR_VERSION)
-              IF(${Boost_MINOR_VERSION} GREATER 35)
-                # In Boost 1.36.0 and newer, the mangled compiler name used
-                # on Mac OS X/Darwin is "xgcc".
-                SET(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}")
-              ELSE(${Boost_MINOR_VERSION} GREATER 35)
-                # In Boost <= 1.35.0, there is no mangled compiler name for
-                # the Mac OS X/Darwin version of GCC.
-                SET(_boost_COMPILER "")
-              ENDIF(${Boost_MINOR_VERSION} GREATER 35)
-            ELSE(Boost_MINOR_VERSION)
-              # We don't know the Boost version, so assume it's
-              # pre-1.36.0.
-              SET(_boost_COMPILER "")
-            ENDIF(Boost_MINOR_VERSION)
-          ELSE()
-            SET (_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}")
-          ENDIF()
-      endif (CMAKE_COMPILER_IS_GNUCXX)
-    endif()
-    if(Boost_DEBUG)
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-        "guessed _boost_COMPILER = ${_boost_COMPILER}")
-    endif()
-  endif(Boost_COMPILER)
-
-  SET (_boost_MULTITHREADED "-mt")
-  if( NOT Boost_USE_MULTITHREADED )
-    set (_boost_MULTITHREADED "")
-  endif()
-  if(Boost_DEBUG)
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-      "_boost_MULTITHREADED = ${_boost_MULTITHREADED}")
-  endif()
-
-  SET( _boost_STATIC_TAG "")
-  set( _boost_ABI_TAG "")
-  IF (WIN32)
-    IF(MSVC OR "${CMAKE_CXX_COMPILER}" MATCHES "icl"
-            OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc")
-      SET (_boost_ABI_TAG "g")
-    ENDIF()
-    IF( Boost_USE_STATIC_LIBS )
-      SET( _boost_STATIC_TAG "-s")
-    ENDIF( Boost_USE_STATIC_LIBS )
-  ENDIF(WIN32)
-  SET (_boost_ABI_TAG "${_boost_ABI_TAG}d")
-  if(Boost_DEBUG)
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-      "_boost_STATIC_TAG = ${_boost_STATIC_TAG}")
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-      "_boost_ABI_TAG = ${_boost_ABI_TAG}")
-  endif()
-
-  # ------------------------------------------------------------------------
-  #  Begin finding boost libraries
-  # ------------------------------------------------------------------------
-
-  SET(_boost_LIBRARIES_SEARCH_DIRS
-    ${Boost_INCLUDE_DIR}/lib
-    ${Boost_INCLUDE_DIR}/../lib
-    C:/boost/lib
-    C:/boost
-    "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}_${Boost_SUBMINOR_VERSION}/lib"
-    "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}/lib"
-    "$ENV{ProgramFiles}/boost/lib"
-    "$ENV{ProgramFiles}/boost"
-    /sw/local/lib
-  )
-  IF( BOOST_ROOT )
-    SET(_boost_LIBRARIES_SEARCH_DIRS
-      ${BOOST_ROOT}/lib
-      ${BOOST_ROOT}/stage/lib
-      ${_boost_LIBRARIES_SEARCH_DIRS})
-  ENDIF( BOOST_ROOT )
-
-  IF( BOOST_LIBRARYDIR )
-    file(TO_CMAKE_PATH ${BOOST_LIBRARYDIR} BOOST_LIBRARYDIR)
-    SET(_boost_LIBRARIES_SEARCH_DIRS
-      ${BOOST_LIBRARYDIR} ${_boost_LIBRARIES_SEARCH_DIRS})
-  ENDIF( BOOST_LIBRARYDIR )
-
-  if(Boost_DEBUG)
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-      "_boost_LIBRARIES_SEARCH_DIRS = ${_boost_LIBRARIES_SEARCH_DIRS}")
-  endif()
-
-  FOREACH(COMPONENT ${Boost_FIND_COMPONENTS})
-    STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
-    SET( Boost_${UPPERCOMPONENT}_LIBRARY "Boost_${UPPERCOMPONENT}_LIBRARY-NOTFOUND" )
-    SET( Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE-NOTFOUND" )
-    SET( Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG "Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG-NOTFOUND")
-
-    # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
-    IF( Boost_USE_STATIC_LIBS )
-      SET( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
-      IF(WIN32)
-        SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
-      ELSE(WIN32)
-        SET(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
-      ENDIF(WIN32)
-    ENDIF( Boost_USE_STATIC_LIBS )
-
-    FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE
-        NAMES  ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}-${Boost_LIB_VERSION}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_STATIC_TAG}-${Boost_LIB_VERSION}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${Boost_LIB_VERSION}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}-${Boost_LIB_VERSION}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}
-        HINTS  ${_boost_LIBRARIES_SEARCH_DIRS}
-    )
-
-    FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG
-        NAMES  ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}-${_boost_ABI_TAG}-${Boost_LIB_VERSION}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}-${Boost_LIB_VERSION}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${_boost_ABI_TAG}-${Boost_LIB_VERSION}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}-${Boost_LIB_VERSION}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${_boost_ABI_TAG}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}
-               ${Boost_LIB_PREFIX}boost_${COMPONENT}-${_boost_ABI_TAG}
-        HINTS  ${_boost_LIBRARIES_SEARCH_DIRS}
-    )
-
-    _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT})
-    IF( Boost_USE_STATIC_LIBS )
-      SET(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
-    ENDIF( Boost_USE_STATIC_LIBS )
-  ENDFOREACH(COMPONENT)
-  # ------------------------------------------------------------------------
-  #  End finding boost libraries
-  # ------------------------------------------------------------------------
-
-  SET(Boost_INCLUDE_DIRS
-    ${Boost_INCLUDE_DIR}
-  )
-
-  SET(Boost_FOUND FALSE)
-  IF(Boost_INCLUDE_DIR)
-    SET( Boost_FOUND TRUE )
-
-    # Check the version of Boost against the requested version.
-    if (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
-      message(SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34")
-    endif (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
-    if(Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" )
-      set( Boost_FOUND FALSE )
-      set(_Boost_VERSION_AGE "old")
-    elseif(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" )
-      if(Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" )
-        set( Boost_FOUND FALSE )
-        set(_Boost_VERSION_AGE "old")
-      elseif(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" )
-        if( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" )
-          set( Boost_FOUND FALSE )
-          set(_Boost_VERSION_AGE "old")
-        endif( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" )
-      endif( Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" )
-    endif( Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" )
-
-    if (Boost_FOUND AND Boost_FIND_VERSION_EXACT)
-      # If the user requested an exact version of Boost, check
-      # that. We already know that the Boost version we have is >= the
-      # requested version.
-      set(_Boost_VERSION_AGE "new")
-
-      # If the user didn't specify a patchlevel, it's 0.
-      if (NOT Boost_FIND_VERSION_PATCH)
-        set(Boost_FIND_VERSION_PATCH 0)
-      endif (NOT Boost_FIND_VERSION_PATCH)
-
-      # We'll set Boost_FOUND true again if we have an exact version match.
-      set(Boost_FOUND FALSE)
-      if(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" )
-        if(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" )
-          if(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" )
-            set( Boost_FOUND TRUE )
-          endif(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" )
-        endif( Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" )
-      endif( Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" )
-    endif (Boost_FOUND AND Boost_FIND_VERSION_EXACT)
-
-    if(NOT Boost_FOUND)
-      # State that we found a version of Boost that is too new or too old.
-      set(Boost_ERROR_REASON
-        "${Boost_ERROR_REASON}\nDetected version of Boost is too ${_Boost_VERSION_AGE}. Requested version was ${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
-      if (Boost_FIND_VERSION_PATCH)
-        set(Boost_ERROR_REASON
-          "${Boost_ERROR_REASON}.${Boost_FIND_VERSION_PATCH}")
-      endif (Boost_FIND_VERSION_PATCH)
-      if (NOT Boost_FIND_VERSION_EXACT)
-        set(Boost_ERROR_REASON "${Boost_ERROR_REASON} (or newer)")
-      endif (NOT Boost_FIND_VERSION_EXACT)
-      set(Boost_ERROR_REASON "${Boost_ERROR_REASON}.")
-    endif (NOT Boost_FOUND)
-
-    if (Boost_FOUND)
-      set(_boost_CHECKED_COMPONENT FALSE)
-      set(_Boost_MISSING_COMPONENTS)
-      foreach(COMPONENT ${Boost_FIND_COMPONENTS})
-        string(TOUPPER ${COMPONENT} COMPONENT)
-        set(_boost_CHECKED_COMPONENT TRUE)
-        if(NOT Boost_${COMPONENT}_FOUND)
-          string(TOLOWER ${COMPONENT} COMPONENT)
-          list(APPEND _Boost_MISSING_COMPONENTS ${COMPONENT})
-          set( Boost_FOUND FALSE)
-        endif(NOT Boost_${COMPONENT}_FOUND)
-      endforeach(COMPONENT)
-    endif (Boost_FOUND)
-
-    if(Boost_DEBUG)
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] Boost_FOUND = ${Boost_FOUND}")
-    endif()
-
-    if (_Boost_MISSING_COMPONENTS)
-      # We were unable to find some libraries, so generate a sensible
-      # error message that lists the libraries we were unable to find.
-      set(Boost_ERROR_REASON
-        "${Boost_ERROR_REASON}\nThe following Boost libraries could not be found:\n")
-      foreach(COMPONENT ${_Boost_MISSING_COMPONENTS})
-        set(Boost_ERROR_REASON
-          "${Boost_ERROR_REASON}        boost_${COMPONENT}\n")
-      endforeach(COMPONENT)
-
-      list(LENGTH Boost_FIND_COMPONENTS Boost_NUM_COMPONENTS_WANTED)
-      list(LENGTH _Boost_MISSING_COMPONENTS Boost_NUM_MISSING_COMPONENTS)
-      if (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS})
-        set(Boost_ERROR_REASON
-          "${Boost_ERROR_REASON}No Boost libraries were found. You may need to set Boost_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.")
-      else (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS})
-        set(Boost_ERROR_REASON
-          "${Boost_ERROR_REASON}Some (but not all) of the required Boost libraries were found. You may need to install these additional Boost libraries. Alternatively, set Boost_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.")
-      endif (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS})
-    endif (_Boost_MISSING_COMPONENTS)
-
-    IF( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT )
-      # Compatibility Code for backwards compatibility with CMake
-      # 2.4's FindBoost module.
-
-      # Look for the boost library path.
-      # Note that the user may not have installed any libraries
-      # so it is quite possible the Boost_LIBRARY_PATH may not exist.
-      SET(_boost_LIB_DIR ${Boost_INCLUDE_DIR})
-
-      IF("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+")
-        GET_FILENAME_COMPONENT(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
-      ENDIF ("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+")
-
-      IF("${_boost_LIB_DIR}" MATCHES "/include$")
-        # Strip off the trailing "/include" in the path.
-        GET_FILENAME_COMPONENT(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
-      ENDIF("${_boost_LIB_DIR}" MATCHES "/include$")
-
-      IF(EXISTS "${_boost_LIB_DIR}/lib")
-        SET (_boost_LIB_DIR ${_boost_LIB_DIR}/lib)
-      ELSE(EXISTS "${_boost_LIB_DIR}/lib")
-        IF(EXISTS "${_boost_LIB_DIR}/stage/lib")
-          SET(_boost_LIB_DIR ${_boost_LIB_DIR}/stage/lib)
-        ELSE(EXISTS "${_boost_LIB_DIR}/stage/lib")
-          SET(_boost_LIB_DIR "")
-        ENDIF(EXISTS "${_boost_LIB_DIR}/stage/lib")
-      ENDIF(EXISTS "${_boost_LIB_DIR}/lib")
-
-      IF(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}")
-        SET(Boost_LIBRARY_DIRS ${_boost_LIB_DIR} CACHE FILEPATH "Boost library directory")
-      ENDIF(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}")
-
-    ENDIF( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT )
-
-  ELSE(Boost_INCLUDE_DIR)
-    SET( Boost_FOUND FALSE)
-  ENDIF(Boost_INCLUDE_DIR)
-
-  IF (Boost_FOUND)
-      IF (NOT Boost_FIND_QUIETLY)
-        MESSAGE(STATUS "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
-      ENDIF(NOT Boost_FIND_QUIETLY)
-      IF (NOT Boost_FIND_QUIETLY)
-        MESSAGE(STATUS "Found the following Boost libraries:")
-      ENDIF(NOT Boost_FIND_QUIETLY)
-      FOREACH ( COMPONENT  ${Boost_FIND_COMPONENTS} )
-        STRING( TOUPPER ${COMPONENT} UPPERCOMPONENT )
-        IF ( Boost_${UPPERCOMPONENT}_FOUND )
-          IF (NOT Boost_FIND_QUIETLY)
-            MESSAGE (STATUS "  ${COMPONENT}")
-          ENDIF(NOT Boost_FIND_QUIETLY)
-          SET(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${UPPERCOMPONENT}_LIBRARY})
-        ENDIF ( Boost_${UPPERCOMPONENT}_FOUND )
-      ENDFOREACH(COMPONENT)
-  else()
-    if(Boost_FIND_REQUIRED)
-      message(SEND_ERROR "Unable to find the requested Boost libraries.\n${Boost_ERROR_REASON}")
-    else()
-      if(NOT Boost_FIND_QUIETLY)
-        # we opt not to automatically output Boost_ERROR_REASON here as
-        # it could be quite lengthy and somewhat imposing in it's requests
-        # Since Boost is not always a required dependency we'll leave this
-        # up to the end-user.
-        if(Boost_DEBUG OR Boost_DETAILED_FAILURE_MSG)
-          message(STATUS "Could NOT find Boost\n${Boost_ERROR_REASON}")
-        else()
-          message(STATUS "Could NOT find Boost")
-        endif()
-      endif()
-    endif(Boost_FIND_REQUIRED)
-  endif()
-
-  # show the Boost_INCLUDE_DIRS AND Boost_LIBRARIES variables only in the advanced view
-  MARK_AS_ADVANCED(Boost_INCLUDE_DIR
-      Boost_INCLUDE_DIRS
-      Boost_LIBRARY_DIRS
-  )
-ENDIF(_boost_IN_CACHE)
-


- remove erroneous s

- remove erroneous s

--- cmake-set-dependencies.cmake
+++ cmake-set-dependencies.cmake
@@ -76,7 +76,7 @@
   endif()

   set (CLAPACK_LIBRARIES
-       ${CLAPACK_LIBRARY_LAPACK};${CLAPACK_LIBRARY_BLAS};${CLAPACK_LIBRARY_F2C}s
+       ${CLAPACK_LIBRARY_LAPACK};${CLAPACK_LIBRARY_BLAS};${CLAPACK_LIBRARY_F2C}
        CACHE FILEPATH "lapack library" FORCE)

   add_definitions(-DHAVE_BLASWRAP_H)


meta example fake dependency guard works locally

--- cmake/FindMetaExamples.cmake
+++ cmake/FindMetaExamples.cmake
@@ -1,11 +1,10 @@
 function(find_meta_examples)
 	FILE(GLOB_RECURSE META_EXAMPLE_LISTINGS ${CMAKE_SOURCE_DIR}/examples/meta/src/*.sg)
-	SET(META_EXAMPLES ${META_EXAMPLE_LISTINGS} PARENT_SCOPE)

 	# temporary hack to exclude certain meta examples that have dependencies
-	IF(DEFINED META_EXAMPLES)
-		IF(NOT HAVE_NLOPT)
-			LIST(REMOVE_ITEM META_EXAMPLES ${CMAKE_SOURCE_DIR}/examples/meta/src/gaussian_processes/gaussian_process_regression.sg)
-		ENDIF()
+	IF(NOT HAVE_NLOPT)
+		LIST(REMOVE_ITEM META_EXAMPLE_LISTINGS ${CMAKE_SOURCE_DIR}/examples/meta/src/gaussian_processes/gaussian_process_regression.sg)
 	ENDIF()
+
+	SET(META_EXAMPLES ${META_EXAMPLE_LISTINGS} PARENT_SCOPE)
 endfunction()


Override compiler flags properly

Override compiler flags properly

--- cmake/ShogunInterfaces.cmake
+++ cmake/ShogunInterfaces.cmake
@@ -4,12 +4,12 @@
 INCLUDE_DIRECTORIES(${ShogunIncludes})

 # set compiler SWIG generated cxx compiler flags
-SET(CMAKE_CXX_FLAGS ${SWIG_CXX_COMPILER_FLAGS})
+#SET(CMAKE_CXX_FLAGS ${SWIG_CXX_COMPILER_FLAGS})
 # unset any release or distribution flags
 # we don't want them when compiling SWIG generated source
-SET(CMAKE_CXX_FLAGS_RELEASE "")
-SET(CMAKE_CXX_FLAGS_DISTRIBUTION "")
-SET(CMAKE_CXX_FLAGS_DEBUG "")
+#SET(CMAKE_CXX_FLAGS_RELEASE "")
+#SET(CMAKE_CXX_FLAGS_DISTRIBUTION "")
+#SET(CMAKE_CXX_FLAGS_DEBUG "")

 if(${INTERFACE_NAME} STREQUAL "python")
 	SET(PREPEND_TARGET "_")
@@ -60,6 +60,7 @@
 		#	endforeach()

 SET_TARGET_PROPERTIES(${INTERFACE_REAL_NAME} PROPERTIES OUTPUT_NAME ${PREPEND_TARGET}shogun)
+SET_TARGET_PROPERTIES(${INTERFACE_REAL_NAME} PROPERTIES COMPILE_FLAGS "${SWIG_CXX_COMPILER_FLAGS}")
 ADD_DEPENDENCIES(${INTERFACE_REAL_NAME} ${INTERFACE_TARGET_SRC})

 #ADD_CUSTOM_COMMAND(TARGETS ${PREPEND_TARGET}interface_${INTERFACE_NAME}


automatically parallelize lint (is this a good idea?)

--- cmake/clang-cpp-checks.cmake
+++ cmake/clang-cpp-checks.cmake
@@ -50,16 +50,23 @@
     IF(RUN_CLANG_TIDY)
         # Set export commands on
         SET (CMAKE_EXPORT_COMPILE_COMMANDS ON)
-
+
+        # Get amount of processors to speed up linting
+        INCLUDE(ProcessorCount)
+        ProcessorCount(NPROC)
+        IF(NPROC EQUAL 0)
+            SET(NPROC 1)
+        ENDIF()
+
         ADD_CUSTOM_TARGET(
             lint COMMAND
-            ${RUN_CLANG_TIDY} -fix -format -header-filter=${CMAKE_SOURCE_DIR}
+            ${RUN_CLANG_TIDY} -fix -format -header-filter=${CMAKE_SOURCE_DIR} -j${NPROC}
             COMMENT "Auto fixing problems in all source files"
         )

         ADD_CUSTOM_TARGET(
             check-lint COMMAND !
-            ${RUN_CLANG_TIDY} -header-filter=${CMAKE_SOURCE_DIR}
+            ${RUN_CLANG_TIDY} -header-filter=${CMAKE_SOURCE_DIR} -j${NPROC}
             # WARNING: fix to stop with error if there are problems
             | tee /dev/stdout | grep -c ": error: " > /dev/null
             COMMENT "Checking for problems in source files"


SwiftPrivate now builds on Windows with Pull-14710

--- cmake/modules/AddSwift.cmake
+++ cmake/modules/AddSwift.cmake
@@ -1472,11 +1472,6 @@
     foreach(sdk ${SWIFTLIB_TARGET_SDKS})
       if(NOT SWIFT_SDK_${sdk}_ARCHITECTURES)
         # SWIFT_SDK_${sdk}_ARCHITECTURES is empty, so just continue
-        continue()
-      endif()
-
-      # TODO: Currently SwiftPrivate runs into linker problems on Windows. See SR-6489.
-      if ("${sdk}" STREQUAL "WINDOWS" AND "${name}" MATCHES "SwiftPrivate")
         continue()
       endif()


Use analogous rpath settings for Swift libraries on Linux

This was defaulting to the build directory, which isn't helpful
post-install. Set Swift libraries to look in the same directory
(ORIGIN) or /usr/lib/swift/linux.

rdar://problem/22766758

--- cmake/modules/AddSwift.cmake
+++ cmake/modules/AddSwift.cmake
@@ -888,10 +888,14 @@

     set_target_properties("${target}"
       PROPERTIES
-      INSTALL_NAME_DIR "${install_name_dir}"
-      BUILD_WITH_INSTALL_RPATH YES)
-  endif()
-
+      INSTALL_NAME_DIR "${install_name_dir}")
+  elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
+    set_target_properties("${target}"
+      PROPERTIES
+      INSTALL_RPATH "$ORIGIN:/usr/lib/swift/linux")
+  endif()
+
+  set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES)
   set_target_properties("${target}" PROPERTIES FOLDER "Swift libraries")

   # Configure the static library target.


build: introduce and use `swift_target_link_search_directories`

Introduce a swift_target_link_search_directories which allows you to
append a search path to the linker.  This interface also allows a tweak
to make the library search directory addition more portable across
compilers (e.g. cl vs clang).

--- cmake/modules/AddSwift.cmake
+++ cmake/modules/AddSwift.cmake
@@ -294,7 +294,7 @@
 function(_add_variant_link_flags)
   set(oneValueArgs SDK ARCH BUILD_TYPE ENABLE_ASSERTIONS ANALYZE_CODE_COVERAGE
   DEPLOYMENT_VERSION_OSX DEPLOYMENT_VERSION_IOS DEPLOYMENT_VERSION_TVOS DEPLOYMENT_VERSION_WATCHOS
-  RESULT_VAR_NAME ENABLE_LTO LTO_OBJECT_NAME)
+  RESULT_VAR_NAME ENABLE_LTO LTO_OBJECT_NAME LIBRARY_SEARCH_DIRECTORIES)
   cmake_parse_arguments(LFLAGS
     ""
     "${oneValueArgs}"
@@ -310,6 +310,7 @@
   endif()

   set(result ${${LFLAGS_RESULT_VAR_NAME}})
+  set(library_search_directories ${${LFLAGS_LIBRARY_SEARCH_DIRECTORIES}})

   _add_variant_c_compile_link_flags(
     SDK "${LFLAGS_SDK}"
@@ -337,8 +338,9 @@
   elseif("${LFLAGS_SDK}" STREQUAL "ANDROID")
     list(APPEND result
         "-ldl"
-        "-L${SWIFT_ANDROID_PREBUILT_PATH}/lib/gcc/arm-linux-androideabi/${SWIFT_ANDROID_NDK_GCC_VERSION}.x"
         "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so")
+    list(APPEND library_search_directories
+        "${SWIFT_ANDROID_PREBUILT_PATH}/lib/gcc/arm-linux-androideabi/${SWIFT_ANDROID_NDK_GCC_VERSION}.x")
   else()
     list(APPEND result "-lobjc")

@@ -357,13 +359,14 @@
   endif()

   if(NOT "${SWIFT_${LFLAGS_SDK}_ICU_UC}" STREQUAL "")
-    list(APPEND result "-L${SWIFT_${sdk}_ICU_UC}")
+    list(APPEND library_search_directories "${SWIFT_${sdk}_ICU_UC}")
   endif()
   if(NOT "${SWIFT_${LFLAGS_SDK}_ICU_I18N}" STREQUAL "")
-    list(APPEND result "-L${SWIFT_${sdk}_ICU_I18N}")
+    list(APPEND library_search_directories "${SWIFT_${sdk}_ICU_I18N}")
   endif()

   set("${LFLAGS_RESULT_VAR_NAME}" "${result}" PARENT_SCOPE)
+  set("${LFLAGS_LIBRARY_SEARCH_DIRECTORIES}" "${library_search_directories}" PARENT_SCOPE)
 endfunction()

 # Look up extra flags for a module that matches a regexp.
@@ -458,6 +461,14 @@
         OUTPUT "${LIPO_OUTPUT}"
         DEPENDS ${source_targets})
   endif()
+endfunction()
+
+function(swift_target_link_search_directories target directories)
+  set(STLD_FLAGS "")
+  foreach(directory ${directories})
+    set(STLD_FLAGS " ${CMAKE_LIBRARY_PATH_FLAG}${directory}")
+  endforeach()
+  set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS ${STLD_FLAGS})
 endfunction()

 # Add a single variant of a new Swift library.
@@ -988,6 +999,10 @@
   # Don't set PROPERTY COMPILE_FLAGS or LINK_FLAGS directly.
   set(c_compile_flags ${SWIFTLIB_SINGLE_C_COMPILE_FLAGS})
   set(link_flags ${SWIFTLIB_SINGLE_LINK_FLAGS})
+  set(library_search_directories
+      "${SWIFTLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR}"
+      "${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR}"
+      "${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")

   # Add variant-specific flags.
   if(SWIFTLIB_SINGLE_TARGET_LIBRARY)
@@ -1029,6 +1044,7 @@
     DEPLOYMENT_VERSION_TVOS "${SWIFTLIB_DEPLOYMENT_VERSION_TVOS}"
     DEPLOYMENT_VERSION_WATCHOS "${SWIFTLIB_DEPLOYMENT_VERSION_WATCHOS}"
     RESULT_VAR_NAME link_flags
+    LIBRARY_SEARCH_DIRECTORIES library_search_directories
       )

   if(SWIFT_ENABLE_GOLD_LINKER AND
@@ -1081,7 +1097,8 @@
   set_property(TARGET "${target}" APPEND_STRING PROPERTY
       COMPILE_FLAGS " ${c_compile_flags}")
   set_property(TARGET "${target}" APPEND_STRING PROPERTY
-    LINK_FLAGS " ${link_flags} -L${SWIFTLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
+      LINK_FLAGS " ${link_flags}")
+  swift_target_link_search_directories(${target} ${library_search_directories})

   # Adjust the linked libraries for windows targets.  On Windows, the link is
   # performed against the import library, and the runtime uses the dll.  Not
@@ -1133,8 +1150,12 @@
   if(target_static)
     set_property(TARGET "${target_static}" APPEND_STRING PROPERTY
         COMPILE_FLAGS " ${c_compile_flags}")
-    set_property(TARGET "${target_static}" APPEND_STRING PROPERTY
-      LINK_FLAGS " ${link_flags} -L${SWIFTSTATICLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
+    set(library_search_directories
+        "${SWIFTSTATICLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR}"
+        "${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR}"
+        "${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
+    swift_target_link_search_directories(${target_static}
+      ${library_search_directories})
     target_link_libraries("${target_static}" PRIVATE
         ${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES})
   endif()
@@ -1773,9 +1794,6 @@
     ANALYZE_CODE_COVERAGE "${SWIFT_ANALYZE_CODE_COVERAGE}"
     RESULT_VAR_NAME link_flags)

-  list(APPEND link_flags
-      "-L${SWIFTLIB_DIR}/${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK}_LIB_SUBDIR}")
-
   if(SWIFTEXE_SINGLE_DISABLE_ASLR)
     list(APPEND link_flags "-Wl,-no_pie")
   endif()
@@ -1839,6 +1857,8 @@

   set_property(TARGET ${name} APPEND_STRING PROPERTY
       COMPILE_FLAGS " ${c_compile_flags}")
+  swift_target_link_search_directories(${name}
+      "${SWIFTLIB_DIR}/${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK}_LIB_SUBDIR}")
   set_property(TARGET ${name} APPEND_STRING PROPERTY
       LINK_FLAGS " ${link_flags}")
   if (SWIFT_PARALLEL_LINK_JOBS)


Remove BOOST_ROOT cache variable

Remove BOOST_ROOT cache variable

It seems to do nothing of late (Boost_INCLUDE_DIR is a better base).

--- cmake/snippets/depends.cmake
+++ cmake/snippets/depends.cmake
@@ -13,7 +13,6 @@
 # Required for Boost.Thread.
 find_package(Threads REQUIRED)

-set(BOOST_ROOT "" CACHE PATH "The root path to Boost")
 option(Boost_USE_STATIC_LIBS "Use a statically-linked Boost" OFF)
 find_package(Boost ${sprokit_boost_version} REQUIRED
   COMPONENTS


Fix detecting arhitecture on raspberry pi

Detect arhotecture depending on size of void

Related to #1329

--- tools/cmake/helpers/platform.cmake
+++ tools/cmake/helpers/platform.cmake
@@ -74,20 +74,16 @@
 endfunction()

 function(get_arch ARCH)
-  if(ARCH_X86)
+  if( CMAKE_SIZEOF_VOID_P MATCHES 8 )
+    # void ptr = 8 byte --> x86_64
+    set(${ARCH} "x86_64" PARENT_SCOPE)
+  elseif( CMAKE_SIZEOF_VOID_P MATCHES 4 )
+    # void ptr = 4 byte --> x86
     set(${ARCH} "x86" PARENT_SCOPE)
-  elseif(ARCH_X64)
-    set(${ARCH} "x64" PARENT_SCOPE)
   else()
-    if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "i386")
-      set(${ARCH} "x86" PARENT_SCOPE)
-    elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64")
-      set(${ARCH} "x64" PARENT_SCOPE)
-    else()
       message(FATAL_ERROR "Unsupported architecture")
-    endif()
-  endif()
-endfunction()
+  endif()
+endfunction(get_arch ARCH)

 function(get_sdk SDK)
   if(SDK_QT)


BUG: Wrap FixedArray sizes also for vector components

Fixes the following warning when using
ITK_WRAP_VECTOR_COMPONENTS_INCREMENTED=2;3;4 :

Wrapping/Typedefs/itkVector.i:233: Warning 401: Nothing known about base class 'itk::FixedArray< double,5 >'. Ignored.

Change-Id: I2c70ef1232660ac57df6412e84740eab15833f8d

--- Wrapping/WrapITKTypes.cmake
+++ Wrapping/WrapITKTypes.cmake
@@ -111,6 +111,7 @@
 set(itk_Wrap_Array ${WRAPPER_TEMPLATES})

 WRAP_TYPE("itk::FixedArray" "FA")
+
   set(dims ${ITK_WRAP_IMAGE_DIMS_INCREMENTED})
   foreach(d ${ITK_WRAP_IMAGE_DIMS})
     math(EXPR d2 "${d} * 2")
@@ -118,9 +119,16 @@
     math(EXPR d3 "${d} * (${d} + 1) / 2")
     list(APPEND dims ${d2} ${d3})
   endforeach()
-  UNIQUE(array_sizes "${dims};1;2;3;4;6")
-  # make sure that 1-D FixedArrays are wrapped. Also wrap for each selected
-  # image dimension.
+
+  # FixedArray can be used with dimensions describing
+  # image dimensions or vector components. Therefore it
+  # needs to have defined sizes for:
+  # - ITK_WRAP_IMAGE_DIMS_INCREMENTED
+  # - ITK_WRAP_VECTOR_COMPONENTS_INCREMENTED
+  # Dimensions 1;2;3;4;6 should always be wrapped.
+
+  UNIQUE(array_sizes "${dims};1;2;3;4;6;${ITK_WRAP_VECTOR_COMPONENTS_INCREMENTED}")
+
   # 3-D FixedArrays are required as superclass of rgb pixels
   # TODO: Do we need fixed arrays for all of these types? For just the selected
   # pixel types plus some few basic cases? Or just for a basic set of types?


vtkhdf5: Add include directories for vtkhdf5_hl.

--- vtkIncludeDirectories.cmake
+++ vtkIncludeDirectories.cmake
@@ -203,6 +203,9 @@
 VTK_THIRD_PARTY_INCLUDE(VERDICT verdict)
 VTK_THIRD_PARTY_INCLUDE(HDF5 vtkhdf5)
 VTK_THIRD_PARTY_INCLUDE(HDF5 vtkhdf5/src)
+IF(HDF5_BUILD_HL_LIB)
+  VTK_THIRD_PARTY_INCLUDE(HDF5 vtkhdf5/hl/src)
+ENDIF(HDF5_BUILD_HL_LIB)
 IF(VTK_USE_PARALLEL)
   VTK_THIRD_PARTY_INCLUDE(Cosmo Cosmo)
   VTK_THIRD_PARTY_INCLUDE(VPIC VPIC)


CUDA: replace deprecated function.

CUDA: replace deprecated function.

--- runtime/hipacc_cu_standalone.hpp.cmake
+++ runtime/hipacc_cu_standalone.hpp.cmake
@@ -217,7 +217,7 @@
     cudaError_t err = cudaLaunchKernel(kernel, grid, block, args, 0, 0);
     checkErr(err, "cudaLaunchKernel(" + kernel_name + ")");

-    cudaThreadSynchronize();
+    cudaDeviceSynchronize();
     err = cudaGetLastError();
     checkErr(err, "cudaLaunchKernel(" + kernel_name + ")");