123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- # this keeps track of the targets that are generated for doxygen,
- # used to set up the doc target later on
- # unfortunately, this has to be a property instead of a variable due to cmake's
- # weird scoping rules
- set_property(GLOBAL PROPERTY _nvbio_doxygen_target_list "")
- # set up doxygen for a given nvbio module
- # checks if there's a Doxyfile.in in the module directory
- # and sets up build rules to generate documentation for this module
- macro(_nvbio_doxygen_module name)
- if (DOXYGEN_FOUND)
- # set up paths
- set(doxy_in_directory "${CMAKE_CURRENT_SOURCE_DIR}/doxy")
- set(doxy_out_directory "${CMAKE_CURRENT_BINARY_DIR}/doxy")
- # set up the path to the Doxyfile.in for the current module
- set(doxyfile_in "${doxy_in_directory}/Doxyfile.in")
- # set up the path to the Doxyfile that we'll generate from Doxyfile.in
- set(doxyfile_out "${doxy_out_directory}/Doxyfile")
- # test if the current module has a Doxyfile.in
- if (EXISTS ${doxyfile_in})
- message("==> Found Doxygen file for module ${name}")
- # parse the Doxyfile.in with cmake to substitute build variables and generate the Doxyfile
- configure_file(${doxyfile_in} ${doxyfile_out} @ONLY)
- add_custom_target(doc_${name}_copy
- ${CMAKE_COMMAND} -E copy_directory ${doxy_in_directory} ${doxy_out_directory})
- add_custom_target(doc_${name}
- DEPENDS doc_${name}_copy
- COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
- WORKING_DIRECTORY ${doxy_out_directory}
- COMMENT "Generating API documentation for ${name} with Doxygen" VERBATIM)
- set_property(GLOBAL APPEND PROPERTY _nvbio_doxygen_target_list doc_${name})
- endif()
- endif()
- endmacro(_nvbio_doxygen_module)
- # generate the doc target
- # doc will depend on all doc_* targets generated for any modules with doxygen.in files
- macro(nvbio_doxygen)
- if (DOXYGEN_FOUND)
- get_property(_targets GLOBAL PROPERTY _nvbio_doxygen_target_list)
- add_custom_target(doc DEPENDS ${_targets})
- endif()
- endmacro(nvbio_doxygen)
- # start a new nvbio module (library or executable)
- # this will match a MSVC project
- macro(nvbio_module name)
- set(_current_nvbio_module ${name})
- set(_current_nvbio_module_srcs "")
- set(_current_nvbio_directory "")
- _nvbio_doxygen_module(${name})
- endmacro(nvbio_module)
- # add sources to the current module or directory
- macro(addsources)
- set(_src_list_TMP "")
- # add the directory path
- foreach(l ${ARGN})
- list(APPEND _src_list_TMP ${_current_nvbio_directory}${l})
- endforeach()
- if (NOT "${_current_nvbio_directory}" STREQUAL "")
- # chop the trailing '/' off the group name
- string(REGEX REPLACE "/$" "" _tmp_group ${_current_nvbio_directory})
- # convert '/' into '\\'
- string(REGEX REPLACE "/" "\\\\" _tmp_group ${_tmp_group})
- source_group(${_tmp_group} FILES ${_src_list_TMP})
- unset(_tmp_group)
- else()
- source_group("" FILES ${_src_list_TMP})
- endif()
- list(APPEND ${_current_nvbio_module}_srcs ${_src_list_TMP})
- unset(_src_list_TMP)
- endmacro(addsources)
- # add a module directory
- macro(nvbio_add_module_directory directory)
- set(_current_nvbio_directory "${directory}/")
- include(${directory}/CMakeLists.txt)
- endmacro(nvbio_add_module_directory)
|