#!
#! \brief Compile a CMake doxygen input filter
#!
#! \param OUT <out-file> (optional) Supply an absolute filename for
#! the generated executable.
#! \param NAMESPACE <namespace> (optional) Supply a C++ namespace in
#! which the generated function declrarations
#! should be wrapped.
#!
#! \return This function sets the CMakeDoxygenFilter_EXECUTABLE
#! variable to the absolute path of the generated input filter executable
#! in the parent scope. If is specified, they will be the same.
#!
#! This CMake function compiles the http://github.com/saschazelzer/CMakeDoxygenFilter
#! project into a doxygen input filter executable. See
#! http://github.com/saschazelzer/CMakeDoxygenFilter/blob/master/README for more details.
#!
#! \ingroup CMakeUtilities
function(ctkFunctionCMakeDoxygenFilterCompile)
#-------------------- parse function arguments -------------------
set(DEFAULT_ARGS)
set(prefix "FILTER")
set(arg_names "OUT;NAMESPACE")
set(option_names "")
foreach(arg_name ${arg_names})
set(${prefix}_${arg_name})
endforeach()
foreach(option ${option_names})
set(${prefix}_${option} FALSE)
endforeach()
set(current_arg_name DEFAULT_ARGS)
set(current_arg_list)
foreach(arg ${ARGN})
set(larg_names ${arg_names})
list(FIND larg_names "${arg}" is_arg_name)
if(is_arg_name GREATER -1)
set(${prefix}_${current_arg_name} ${current_arg_list})
set(current_arg_name "${arg}")
set(current_arg_list)
else()
set(loption_names ${option_names})
list(FIND loption_names "${arg}" is_option)
if(is_option GREATER -1)
set(${prefix}_${arg} TRUE)
else()
set(current_arg_list ${current_arg_list} "${arg}")
endif()
endif()
endforeach()
set(${prefix}_${current_arg_name} ${current_arg_list})
#------------------- finished parsing arguments ----------------------
if(FILTER_OUT)
set(copy_file "${FILTER_OUT}")
else()
set(copy_file "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/CMakeDoxygenFilter${CMAKE_EXECUTABLE_SUFFIX}")
endif()
set(compile_defs "")
if(FILTER_NAMESPACE)
set(compile_defs "${compile_defs} -DUSE_NAMESPACE=${FILTER_NAMESPACE}")
endif()
set(cmake_doxygen_filter_src "${CTK_SOURCE_DIR}/Documentation/CMakeDoxygenFilter.cpp")
try_compile(result_var
"${CMAKE_CURRENT_BINARY_DIR}"
"${cmake_doxygen_filter_src}"
COMPILE_DEFINITIONS ${compile_defs}
OUTPUT_VARIABLE compile_output
COPY_FILE ${copy_file}
)
if(NOT result_var)
message(FATAL_ERROR "error: Faild to compile ${cmake_doxygen_filter_src} (result: ${result_var})\n${compile_output}")
endif()
set(CMakeDoxygenFilter_EXECUTABLE "${copy_file}" PARENT_SCOPE)
endfunction()