2021-10-14 13:47:35 +02:00

198 lines
7.9 KiB
Plaintext

# Author Yann Renard / INRIA
# Date 2008-10-15
#
# this CMake script iterates over several source documentation directories in
# order to compile it with doxygen. It has the ability to configure the
# doxyfile depending on some variables and to build documentation sources from
# computer generated templates (.dox-skeleton) and hand written documentation
# parts (.dox-part)
MESSAGE(STATUS "Launching Create Doxygen CMake script")
SET(RESOURCE_FILES "@RESOURCE_FILES@")
SET(ov_doxy_final "@ov_doxy_final@")
SET(ov_doxy_version "@ov_doxy_version@")
SET(ov_doxy_input "@ov_doxy_input@")
SET(CURRENT_PROJECTS "@CURRENT_PROJECTS@")
SET(CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@")
MESSAGE(STATUS "Running plugin inspector")
#MESSAGE(STATUS "@CMAKE_INSTALL_FULL_BINDIR@/../lib/")
IF(UNIX)
EXECUTE_PROCESS(
COMMAND @CMAKE_INSTALL_FULL_BINDIR@/../openvibe-plugin-inspector.sh
-d "@CMAKE_CURRENT_BINARY_DIR@" -p @CMAKE_INSTALL_FULL_BINDIR@/../lib/
-k "@CMAKE_INSTALL_FULL_BINDIR@/../lib/"
-c "@CMAKE_INSTALL_FULL_BINDIR@/../share/openvibe/kernel/openvibe.conf"
WORKING_DIRECTORY "@CMAKE_INSTALL_FULL_BINDIR@/"
)
ELSEIF(WIN32)
EXECUTE_PROCESS(
COMMAND @CMAKE_INSTALL_FULL_BINDIR@/../openvibe-plugin-inspector.cmd
-d "@CMAKE_CURRENT_BINARY_DIR@" -p @CMAKE_INSTALL_FULL_BINDIR@
-k "@CMAKE_INSTALL_FULL_BINDIR@"
-c "@CMAKE_INSTALL_FULL_BINDIR@/../share/openvibe/kernel/openvibe.conf"
WORKING_DIRECTORY "@CMAKE_INSTALL_FULL_BINDIR@/"
)
ENDIF(UNIX)
#go through all of the .dox-part files we have found previously and extract information
FOREACH(dox @DOX_PART_FILES@)
GET_FILENAME_COMPONENT(dox_filename ${dox} NAME_WE)
MESSAGE(STATUS " Documentation part found ${dox}")
SET(dox_tag_name NOTFOUND)
# iterates on each line of the file to look after begin/end tags
# "dox_tag_name" stores the name of the variable
# to use to configure the skeleton file. It is computed from the
# begin tag.
FILE(READ ${dox} dox_lines)
# replaces empty cariage returns with semi colons to be compliant
# with CMake lists. note the space before and after the semi
# colon, this is for CMake not to skip empty lines
STRING(REPLACE "\n" " ; " dox_lines " ${dox_lines} ")
FOREACH(dox_line ${dox_lines})
# this regex removes the spaces we added before the loop
STRING(REGEX REPLACE "^ (.*) $" "\\1" dox_line ${dox_line})
# we initialize several variables that will be used in
# this loop
SET(dox_line_processed FALSE)
SET(dox_tag_begin NOTFOUND)
SET(dox_tag_end NOTFOUND)
SET(dox_tag NOTFOUND)
# and look for a new tag in this line
STRING(REGEX MATCH "\\|[a-zA-Z0-9_]+\\|" dox_tag "${dox_line}")
IF(dox_tag)
# a tag is found, so we want to know if it is a
# OVP_DocBegin* or OVP_DocEnd* tag
STRING(REGEX MATCH "\\|OVP_DocBegin_[a-zA-Z0-9_]*\\|" dox_tag_begin "${dox_line}")
STRING(REGEX MATCH "\\|OVP_DocEnd_[a-zA-Z0-9_]*\\|" dox_tag_end "${dox_line}")
# in case we already have something in
# dox_tag_name, it means that begin tag has
# already been processed, so either we terminate with end
# tag, either we continue with come content to add in the
# variable
IF(dox_tag_name AND dox_tag_end)
# in case we find end tag, we just terminate cleaning
# the tag and what follows. We then terminate and
# create a new CMake variable with the content of this
# begin/end tagged things.
STRING(REGEX REPLACE ".*\\|OVP_DocEnd_([a-zA-Z0-9_]*)\\|.*" "\\1" dox_tag_name_check ${dox_line})
STRING(REGEX REPLACE "\\|OVP_DocEnd_([a-zA-Z0-9_]*)\\|.*" "" dox_line "${dox_line}")
# MESSAGE(STATUS " - Completed tag pair |${dox_tag_name}|")
SET(dox_tag_name_value "${dox_tag_name_value}\n${dox_line}")
SET("Doc_${dox_tag_name}_Content" ${dox_tag_name_value})
SET(dox_tag_name NOTFOUND)
SET(dox_line_processed TRUE)
ENDIF(dox_tag_name AND dox_tag_end)
# in case dox_tag_name is empty, it means
# that begin tag has not yet been found, so we just look at it
# or skip to next line
IF(NOT dox_tag_name AND dox_tag_begin)
# in case we find begin tag, we just start saving the
# CMake variable name, and clean the tag and what
# comes before. We then intialize the content of the
# begin/end tagged thing with what comes after begin
# tag.
STRING(REGEX REPLACE ".*\\|OVP_DocBegin_([a-zA-Z0-9_]*)\\|.*" "\\1" dox_tag_name ${dox_line})
STRING(REGEX REPLACE ".*\\|OVP_DocBegin_([a-zA-Z0-9_]*)\\|" "" dox_line "${dox_line}")
SET(dox_tag_name_value "${dox_line}")
SET(dox_line_processed TRUE)
ENDIF(NOT dox_tag_name AND dox_tag_begin)
# in case dox tag is not OVP_DocBegin* or OVP_DocEnd*
# just print a warning and continue
IF(NOT dox_line_processed)
MESSAGE(STATUS " - Unexpected tag ${dox_tag} in ${dox} will be ignored")
ENDIF(NOT dox_line_processed)
ENDIF(dox_tag)
# in case this line was not processed, either because it does
# not have any tag, either because the tag was unexpected, we
# just append the whole line to the content of the current
# variable
IF(dox_tag_name AND NOT dox_line_processed)
# in case we don't find the end tag, just append this
# new line to the current content
SET(dox_tag_name_value "${dox_tag_name_value}\n${dox_line}")
ENDIF(dox_tag_name AND NOT dox_line_processed)
ENDFOREACH(dox_line)
ENDFOREACH(dox)
# install the remaining resource files
# now we have stored all the begin/end tagged things in variable, we just
# have to configure the skeleton configuration files with those variables.
# note that the skeleton files should be prepared to receive the CMake
# variables with anywhere it is needed.
#
# in order to do so, we look after all the (.dox-skeleton) files and call
# the configure command to build the final documentation (.dox) file.
MESSAGE(STATUS "Current bin dir: @CMAKE_CURRENT_BINARY_DIR@")
FILE(GLOB_RECURSE dox_skeletons "@CMAKE_CURRENT_BINARY_DIR@/*.dox-skeleton")
FOREACH(dox_skeleton ${dox_skeletons})
GET_FILENAME_COMPONENT(dox_skeleton_filename ${dox_skeleton} NAME_WE)
CONFIGURE_FILE(
"${dox_skeleton}"
"@CMAKE_CURRENT_BINARY_DIR@/${dox_skeleton_filename}.dox"
@ONLY)
# MESSAGE(STATUS " [ OK ] Configured skeleton ${dox_skeleton}")
ENDFOREACH(dox_skeleton)
CONFIGURE_FILE(
"@CMAKE_CURRENT_SOURCE_DIR@/doxyfile-skeleton"
${ov_doxy_final}
@ONLY)
# and a post-build command is added in order to run doxygen
MESSAGE(STATUS "Running doxygen")
EXECUTE_PROCESS(
COMMAND "@doxygen_bin@" "@ov_doxy_final@"
WORKING_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@"
)
# 'patch' the docs, this takes some time, is it worth doing it?
# original linux-build directive:
# find $target_dist/doc -name *.html -exec sed -i -e "s/\xC2\?\xA7OpenViBE\xC2\?\xA7/OpenViBE/g" "{}" \;
# \xC2\?\xA7 is the character that has been put everywhere to clearly make the distinction between the project and the software
#MESSAGE(STATUS "Patching special characters in HTML docs ...")
#FILE(GLOB_RECURSE HTML_DOCS "${CMAKE_CURRENT_BINARY_DIR}/../doc/html/*.html")
#MESSAGE(STATUS "IAMIN ${CMAKE_CURRENT_BINARY_DIR}/../doc/html/")
#MESSAGE(STATUS "got ${HTML_DOCS}")
#FOREACH(HTML_DOC ${HTML_DOCS})
# MESSAGE(STATUS "Processing ${HTML_DOC}")
# FILE(READ ${HTML_DOC} ORIG_FILE)
# STRING(REGEX REPLACE "[^ a-zA-Z0-9:.,]OpenViBE[^ a-zA-Z0-9:.,]" "OpenViBE" TRANSLATED_FILE ${ORIG_FILE})
# FILE(WRITE ${HTML_DOC} ${TRANSLATED_FILE})
#ENDFOREACH(HTML_DOC)
FILE(GLOB_RECURSE resource_files_tmp "@CMAKE_CURRENT_BINARY_DIR@/*.png")
SET(RESOURCE_FILES ${RESOURCE_FILES} ${resource_files_tmp})
# hax to install all files under the doc/html folder in the script-launched installer
FILE(GLOB_RECURSE resource_files_tmp "@CMAKE_CURRENT_BINARY_DIR@/../doc/html/*.*")
SET(RESOURCE_FILES ${RESOURCE_FILES} ${resource_files_tmp})
IF(RESOURCE_FILES)
FILE(INSTALL FILES ${RESOURCE_FILES} DESTINATION "@CMAKE_INSTALL_FULL_DOCDIR@")
ENDIF(RESOURCE_FILES)