Mentions légales du service

Skip to content
Snippets Groups Projects
  • Jozef Legény's avatar
    4579f908
    [Documentation] Add Sphinx/RST documentation · 4579f908
    Jozef Legény authored
    This documentation can be build using only python, no doxygen required.
    It does not require any special cmake commands except those used to find
    documentation files and pool them in a single folder before building.
    
    CORE-1434
    4579f908
    History
    [Documentation] Add Sphinx/RST documentation
    Jozef Legény authored
    This documentation can be build using only python, no doxygen required.
    It does not require any special cmake commands except those used to find
    documentation files and pool them in a single folder before building.
    
    CORE-1434
OvAddProjects.cmake 5.75 KiB
# Adds the current project to the global properties
FUNCTION(OV_ADD_THIS_TO_PROJECT_LIST)
	# MESSAGE(STATUS "ADDING: ${CMAKE_CURRENT_SOURCE_DIR}")

	# Add the dir to be parsed for documentation later. We need to do this before adding subdir, in case the subdir is the actual docs dir
	#GET_PROPERTY(OV_TMP GLOBAL PROPERTY OV_PROP_CURRENT_PROJECTS)
	#SET(OV_TMP "${OV_TMP};${CMAKE_CURRENT_SOURCE_DIR}")
	#SET_PROPERTY(GLOBAL PROPERTY OV_PROP_CURRENT_PROJECTS ${OV_TMP})
	IF(NOT MULTI_BUILD)
		IF(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc AND NOT(${SKIP_DOC_OPENVIBE}))
			FILE(COPY ${CMAKE_CURRENT_SOURCE_DIR}/doc/ DESTINATION ${DIST_DOCTMP}/openvibe FILES_MATCHING PATTERN "*.dox")
			FILE(COPY ${CMAKE_CURRENT_SOURCE_DIR}/doc/ DESTINATION ${DIST_DOCTMP}/openvibe PATTERN "*.dox" EXCLUDE)
		ENDIF()

		IF(IS_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/include) AND NOT(${SKIP_DOCUMENTATION}) AND NOT(${SKIP_DOC_OPENVIBE}))
			FILE(APPEND "${DIST_DOCTMP}/openvibe/source-list.txt" "${CMAKE_CURRENT_SOURCE_DIR}/include\n")
		ENDIF()
	ENDIF()
ENDFUNCTION()

FUNCTION(OV_SET_CUSTOM_DOCUMENTATION doc_project_name doc_product_name)
	MESSAGE(STATUS "CUSTOM DOCUMENTATION ENABLED FOR ${doc_project_name}")
	SET(HAS_CUSTOM_DOCUMENTATION_${doc_project_name} "1" PARENT_SCOPE)
	IF(${BUILD_DOCUMENTATION})
		SET(CUSTOM_DOCUMENTATION_PRODUCT_NAME_${doc_project_name} "${doc_product_name}" PARENT_SCOPE)

		# if we need also the sources (e.g. the API is documented with doxygen)
		SET(ADDITIONAL_FOLDERS_STRING_LIST "")
		FOREACH(additional_cpp_source ${ARGN})
			SET(ADDITIONAL_FOLDERS_STRING_LIST "${ADDITIONAL_FOLDERS_STRING_LIST} ${CMAKE_CURRENT_SOURCE_DIR}/${doc_project_name}/${additional_cpp_source}")
		ENDFOREACH()
		SET(CUSTOM_DOCUMENTATION_CPP_SOURCES_${doc_project_name} "${ADDITIONAL_FOLDERS_STRING_LIST}" PARENT_SCOPE)
	ENDIF()
ENDFUNCTION()

#
# Adds all directories as subdirectories to the CMake build, using the branch specified (if any) in the root CMakeList.txt or
# trunk otherwise.
#
# The branch variable name that is checked is made up from ${CURRENT_BRANCH_PREFIX}_${DIRNAMEUPPER}.
#
# The script also adds the directory to the global list of projects.
#

FUNCTION(OV_ADD_PROJECTS CURRENT_FOLDER_PREFIX)

	FILE(GLOB FILENAMES "*")

	FOREACH(FULLPATH ${FILENAMES})
		IF(IS_DIRECTORY ${FULLPATH} AND EXISTS "${FULLPATH}/CMakeLists.txt")
			GET_FILENAME_COMPONENT(DIRNAME ${FULLPATH} NAME)

			STRING(TOUPPER ${DIRNAME} DIRNAMEUPPER)
			SET(SKIP_THIS_FOLDER "SKIP_${CURRENT_FOLDER_PREFIX}_${DIRNAMEUPPER}")
			SET(SKIP_THIS_CUSTOM_DOCUMENTATION "SKIP_DOC_${CURRENT_FOLDER_PREFIX}_${DIRNAMEUPPER}")

			#MESSAGE(STATUS "Checking SKIP_${CURRENT_FOLDER_PREFIX}_${DIRNAMEUPPER} as branch var ${SKIP_THIS_FOLDER}")

			IF(${SKIP_THIS_FOLDER})
				MESSAGE(STATUS "Note: ${FULLPATH} has been skipped by setting SKIP_${CURRENT_FOLDER_PREFIX}_${DIRNAMEUPPER}")
			ELSE()
				# MESSAGE(STATUS "Inserting folder ${FULLPATH}")

				# Add the dir to be parsed for documentation later. We need to do this before adding subdir, in case the subdir is the actual docs dir
				GET_PROPERTY(OV_TMP GLOBAL PROPERTY OV_PROP_CURRENT_PROJECTS)
				SET(OV_TMP "${OV_TMP};${FULLPATH}")
				SET_PROPERTY(GLOBAL PROPERTY OV_PROP_CURRENT_PROJECTS ${OV_TMP})

				SET(OV_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${DIRNAME}")
				GET_PROPERTY(OV_TMP GLOBAL PROPERTY OV_PROP_CURRENT_PROJECTS_BUILD_DIR)
				SET(OV_TMP "${OV_TMP};${OV_CURRENT_BINARY_DIR}")
				SET_PROPERTY(GLOBAL PROPERTY OV_PROP_CURRENT_PROJECTS_BUILD_DIR ${OV_TMP})


				SET(HAS_CUSTOM_DOCUMENTATION "HAS_CUSTOM_DOCUMENTATION_${DIRNAME}")
				SET(CUSTOM_DOCUMENTATION_PRODUCT_NAME "CUSTOM_DOCUMENTATION_PRODUCT_NAME_${DIRNAME}")
				SET(CUSTOM_DOCUMENTATION_CPP_SOURCES "${CUSTOM_DOCUMENTATION_CPP_SOURCES_${DIRNAME}}")
				IF(NOT(${SKIP_DOCUMENTATION}) AND NOT(${SKIP_THIS_CUSTOM_DOCUMENTATION}) AND NOT MULTI_BUILD)
					IF(NOT(${HAS_CUSTOM_DOCUMENTATION}))
						IF(${PUBLISH_DOC_ASSETS})
							IF(IS_DIRECTORY ${FULLPATH}/doc)
								MESSAGE(STATUS "Documentation files found in ${FULLPATH}/doc")
								INSTALL(DIRECTORY ${FULLPATH}/doc/ DESTINATION ${DIST_DOCTMP}/openvibe/box-algorithm-doc/dox-part/ FILES_MATCHING PATTERN "*.dox-part" PATTERN "doc/boxes" EXCLUDE)
								INSTALL(DIRECTORY ${FULLPATH}/doc/ DESTINATION ${DIST_DOCTMP}/openvibe FILES_MATCHING PATTERN "*.dox" PATTERN "doc/boxes" EXCLUDE)
								INSTALL(DIRECTORY ${FULLPATH}/doc/ DESTINATION ${DIST_DOCTMP}/openvibe
									PATTERN "doc/boxes" EXCLUDE PATTERN "*.dox-part" EXCLUDE PATTERN "*.dox" EXCLUDE)
							ENDIF()

							IF(IS_DIRECTORY ${FULLPATH}/include)
								FILE(APPEND "${DIST_DOCTMP}/openvibe/source-list.txt" "${FULLPATH}/include\n")
							ENDIF()
						ENDIF()
					ELSE()
						MESSAGE(STATUS "Project ${DIRNAME} has custom documentation")

						# we copy the doc files into the temporary folder where everything is built thanks to a cmd script
						IF(IS_DIRECTORY ${FULLPATH}/doc/)
							FILE(COPY ${FULLPATH}/doc/ DESTINATION "${DIST_DOCTMP}/${DIRNAME}")
						ENDIF()

						SET(DOC_PROJECT_NAME ${DIRNAME})
						SET(DOC_PROJECT_VERSION ${PROJECT_VERSION})
						SET(DOC_PROJECT_PRODUCT_NAME "${${CUSTOM_DOCUMENTATION_PRODUCT_NAME}}")
						SET(DOC_PROJECT_COMMITHASH ${PROJECT_COMMITHASH})
						SET(DOC_PROJECT_BRANCH ${PROJECT_BRANCH})
						SET(DOC_PROJECT_CPP_SOURCES "${CUSTOM_DOCUMENTATION_CPP_SOURCES}")

						get_directory_property( DirDefs DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS )
						SET(DOC_DEFINES "")
						foreach( d ${DirDefs} )
							#message( STATUS "Found Define: " ${d} )
							SET(DOC_DEFINES "${DOC_DEFINES} \\\\ \\n ${d}")
						endforeach()
						STRING(REPLACE "\"" "\\\"" DOC_DEFINES "${DOC_DEFINES}")

						#message( STATUS ${DOC_DEFINES} )
					ENDIF()
				ENDIF()
				add_subdirectory(${FULLPATH})
			ENDIF()
		ENDIF()
	ENDFOREACH(FULLPATH ${FILENAMES})

ENDFUNCTION(OV_ADD_PROJECTS)