cmake_minimum_required(VERSION 3.12...3.31) project(Documentation NONE) # Check whether this cmake script is the top level one if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) # decide if this is a branch build if(NOT EXISTS "${CMAKE_SOURCE_DIR}/../VERSION") set(CGAL_BRANCH_BUILD ON CACHE INTERNAL "CGAL Branch build") endif() if(CGAL_BRANCH_BUILD) set(CGAL_ROOT "${CMAKE_SOURCE_DIR}/../..") else() set(CGAL_ROOT "${CMAKE_SOURCE_DIR}/..") endif() get_filename_component(CGAL_ROOT ${CGAL_ROOT} REALPATH) else() option(BUILD_DOC "Build the doxygen documentation" OFF) if(NOT BUILD_DOC) return() endif() set(CGAL_ROOT "${CMAKE_SOURCE_DIR}") endif() cmake_minimum_required(VERSION 3.18...3.31) # for list(SORT ... COMPARE NATURAL) find_package(Doxygen REQUIRED) find_package(Python3 REQUIRED COMPONENTS Interpreter) if (NOT Python3_EXECUTABLE) message(FATAL_ERROR "Cannot build the documentation without Python3!") return() endif() message(VERBOSE "Using Python version ${Python3_VERSION}: ${Python3_EXECUTABLE}") if(NOT DOXYGEN_FOUND) message(WARNING "Cannot build the documentation without Doxygen!") return() endif() #starting from cmake 3.9 the usage of DOXYGEN_EXECUTABLE is deprecated if(TARGET Doxygen::doxygen) get_property( DOXYGEN_EXECUTABLE TARGET Doxygen::doxygen PROPERTY IMPORTED_LOCATION) endif() # Visual Studio users might appreciate this # set_property(GLOBAL PROPERTY USE_FOLDERS ON) macro(subdirlist result curdir) file( GLOB children RELATIVE ${curdir} ${curdir}/*) set(dirlist "") foreach(child ${children}) if(IS_DIRECTORY ${curdir}/${child}) set(dirlist ${dirlist} ${child}) endif() endforeach() set(${result} ${dirlist}) endmacro() function(configure_doxygen_package CGAL_PACKAGE_NAME) if(CGAL_BRANCH_BUILD) set(CGAL_PACKAGE_DIR ${CGAL_ROOT}/${CGAL_PACKAGE_NAME}) else() set(CGAL_PACKAGE_DIR ${CGAL_ROOT}) endif() set(CGAL_PACKAGE_DOC_DIR ${CGAL_PACKAGE_DIR}/doc/${CGAL_PACKAGE_NAME}) set(CGAL_PACKAGE_INCLUDE_DIR ${CGAL_PACKAGE_DIR}/include/) if(NOT EXISTS ${CGAL_PACKAGE_DOC_DIR}/Doxyfile.in) return() endif() set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CGAL_PACKAGE_DOC_DIR}/Doxyfile.in) set(CGAL_DOC_PACKAGE_DEFAULTS ${CGAL_DOC_DXY_DIR}/${CGAL_PACKAGE_NAME}_defaults.dxy) file(REMOVE ${CGAL_DOC_PACKAGE_DEFAULTS}) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "@INCLUDE = ${CGAL_DOC_DOXY_DEFAULT}\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "OUTPUT_DIRECTORY = ${CGAL_DOC_OUTPUT_DIR}/${CGAL_PACKAGE_NAME}\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "HTML_OUTPUT = .\n") if(CGAL_DOC_CREATE_LOGS) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "WARN_LOGFILE = ${CGAL_DOC_LOG_DIR}/${CGAL_PACKAGE_NAME}.log\n") endif() if(CGAL_DOC_RELEASE) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "GENERATE_TODOLIST = NO\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "GENERATE_BUGLIST = NO\n") endif() if(EXISTS "${CGAL_PACKAGE_DIR}/examples") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "EXAMPLE_PATH = ${CGAL_PACKAGE_DIR}/examples\n") endif() if(CGAL_GENERATE_XML) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "GENERATE_XML = YES\n") endif() file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "GENERATE_TAGFILE = ${CGAL_DOC_TAG_GEN_DIR}/${CGAL_PACKAGE_NAME}.tag\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_PATH = ${CGAL_PACKAGE_DOC_DIR}/\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_PATH += ${CGAL_PACKAGE_DIR}/include/\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_INC_PATH = ${CGAL_PACKAGE_DOC_DIR}/\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "STRIP_FROM_INC_PATH += ${CGAL_PACKAGE_DIR}/include/\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "ALIASES += \"cgalPkgDescriptionBegin{2}=\\details \"\n") file( APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "ALIASES += \"cgalPkgManuals{2}=
\"\n") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "INPUT = ${CGAL_PACKAGE_DOC_DIR}\n") if(NOT EXISTS "${CGAL_PACKAGE_DOC_DIR}/CGAL") # This package has in-source documentation. if(CGAL_BRANCH_BUILD) # use the entire include subdir file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "INPUT += ${CGAL_PACKAGE_DIR}/include/\n") else() # use the filelist if(EXISTS "${CGAL_PACKAGE_DOC_DIR}/filelist.txt") file(STRINGS "${CGAL_PACKAGE_DOC_DIR}/filelist.txt" CGAL_PKG_FILES) foreach(pkg_file ${CGAL_PKG_FILES}) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "INPUT += ${CGAL_PACKAGE_DIR}/include/${pkg_file}\n") endforeach() endif() endif() endif() if(EXISTS "${CGAL_PACKAGE_DIR}/include/CGAL/${CGAL_PACKAGE_NAME}/internal") file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "EXCLUDE += ${CGAL_PACKAGE_DIR}/include/CGAL/${CGAL_PACKAGE_NAME}/internal\n") endif() # IMAGE_PATH is set by default. For Documentation, we generate the extra path using packages.txt set(IMAGE_PATHS "${CGAL_PACKAGE_DOC_DIR}/fig") set(DEPENDENCIES "") # figure out the dependencies, using the file `dependencies` or `packages.txt` for Documentation if(${CGAL_PACKAGE_NAME} STREQUAL "Documentation") set(PackageFile ${CGAL_PACKAGE_DOC_DIR}/packages.txt) file(STRINGS ${PackageFile} EntriesAsList REGEX "^\\\\package_listing{.+}$") foreach(Line ${EntriesAsList}) string(REGEX REPLACE "^\\\\package_listing{(.+)}$" "\\1" PKG "${Line}") list(APPEND DEPENDENCIES ${PKG}) if(CGAL_BRANCH_BUILD) set(IMG_DIR "${CGAL_ROOT}/${PKG}/doc/${PKG}/fig") else() set(IMG_DIR "${CGAL_ROOT}/doc/${PKG}/fig") endif() if(EXISTS ${IMG_DIR}) list(APPEND IMAGE_PATHS ${IMG_DIR}) endif() endforeach() else() if(EXISTS ${CGAL_PACKAGE_DOC_DIR}/dependencies) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CGAL_PACKAGE_DOC_DIR}/dependencies) file(STRINGS ${CGAL_PACKAGE_DOC_DIR}/dependencies DEPENDENCIES) endif() endif() foreach(depend ${DEPENDENCIES}) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "TAGFILES += ${CGAL_DOC_TAG_DIR}/${depend}.tag=../${depend}\n") endforeach() foreach(image_path ${IMAGE_PATHS}) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} "IMAGE_PATH += ${image_path}\n") endforeach() configure_file(${CGAL_PACKAGE_DOC_DIR}/Doxyfile.in ${CGAL_DOC_DXY_DIR}/${CGAL_PACKAGE_NAME}.dxy) # TODO we also want to run html_post_process per package as a custom_command with POST_BUILD # target that build the doc and put the tag file in the generation directory CGAL_DOC_TAG_GEN_DIR add_custom_target( ${CGAL_PACKAGE_NAME}_internal_doxygen_run ${DOXYGEN_EXECUTABLE} ${CGAL_DOC_DXY_DIR}/${CGAL_PACKAGE_NAME}.dxy) set_target_properties(${CGAL_PACKAGE_NAME}_internal_doxygen_run PROPERTIES FOLDER Documentation/Packages) #target moving the tag file into the read directory CGAL_DOC_TAG_DIR if("${CGAL_PACKAGE_NAME}" STREQUAL "Documentation") set(CGAL_PACKAGE_TAGFILE "Manual.tag") else() set(CGAL_PACKAGE_TAGFILE "${CGAL_PACKAGE_NAME}.tag") endif() add_custom_target( ${CGAL_PACKAGE_NAME}_copy_doc_tags ${CMAKE_COMMAND} -E copy "${CGAL_DOC_TAG_GEN_DIR}/${CGAL_PACKAGE_TAGFILE}" "${CGAL_DOC_TAG_DIR}/${CGAL_PACKAGE_TAGFILE}") #add the doc target doing both the doc generation and then the tag file copy add_custom_target( ${CGAL_PACKAGE_NAME}_doc ${DOXYGEN_EXECUTABLE} ${CGAL_DOC_DXY_DIR}/${CGAL_PACKAGE_NAME}.dxy COMMAND ${CMAKE_COMMAND} -E copy "${CGAL_DOC_TAG_GEN_DIR}/${CGAL_PACKAGE_TAGFILE}" "${CGAL_DOC_TAG_DIR}/${CGAL_PACKAGE_TAGFILE}") # ${depend}_doc) # don't do this for now # foreach(depend ${DEPENDENCIES}) # add_dependencies(${CGAL_PACKAGE_NAME}_doc # ${depend}_doc) # endforeach() endfunction() # set up the directories and variables if(CGAL_DOC_MATHJAX_LOCATION) set(CGAL_DOC_MATHJAX_LOCATION_FULL_OPTION_LINE "MATHJAX_RELPATH = ${CGAL_DOC_MATHJAX_LOCATION}") else() set(CGAL_DOC_MATHJAX_LOCATION "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2") endif() set(CGAL_DOC_OUTPUT_DIR "${CMAKE_BINARY_DIR}/doc_output") file(MAKE_DIRECTORY "${CGAL_DOC_OUTPUT_DIR}") option( CGAL_DOC_CREATE_LOGS "Write log files or print warnings and errors to cerr when building the doc." OFF) if(CGAL_DOC_CREATE_LOGS) set(CGAL_DOC_LOG_DIR "${CMAKE_BINARY_DIR}/doc_log") file(MAKE_DIRECTORY "${CGAL_DOC_LOG_DIR}") endif() option(CGAL_EXTRACT_ALL_NO_DETAILED_IF_EMPTY "Use CGAL special doxygen setting EXTRACT_ALL_NO_DETAILED_IF_EMPTY." ON) if(CGAL_EXTRACT_ALL_NO_DETAILED_IF_EMPTY) set(CGAL_OPT_EXTRACT_ALL_NO_DETAILED_IF_EMPTY "EXTRACT_ALL_NO_DETAILED_IF_EMPTY = YES") else() # The default is NO, so we could leave it out, but it is better to have a commented out placeholder # this will work for versions with and without the setting. set(CGAL_OPT_EXTRACT_ALL_NO_DETAILED_IF_EMPTY "#EXTRACT_ALL_NO_DETAILED_IF_EMPTY = NO") endif() option(CGAL_NO_ADDITIONAL_DETAILS "Use CGAL special doxygen setting NO_ADDITIONAL_DETAILS." ON) if(CGAL_NO_ADDITIONAL_DETAILS) set(CGAL_OPT_NO_ADDITIONAL_DETAILS "NO_ADDITIONAL_DETAILS = YES") else() # The default is NO, so we could leave it out, but it is better to have a commented out placeholder # this will work for versions with and without the setting. set(CGAL_OPT_NO_ADDITIONAL_DETAILS "#NO_ADDITIONAL_DETAILS = NO") endif() #we use two directories for the generation/reading of tag files to prevent issues #if the targets are built in parallel set(CGAL_DOC_TAG_GEN_DIR "${CMAKE_BINARY_DIR}/doc_gen_tags") file(MAKE_DIRECTORY "${CGAL_DOC_TAG_GEN_DIR}") set(CGAL_DOC_TAG_DIR "${CMAKE_BINARY_DIR}/doc_tags") file(MAKE_DIRECTORY "${CGAL_DOC_TAG_DIR}") set(CGAL_DOC_DXY_DIR "${CMAKE_BINARY_DIR}/doc_dxy") file(MAKE_DIRECTORY "${CGAL_DOC_DXY_DIR}") #Setting the resource directory depending on the version of doxygen set(CGAL_DOC_RESOURCE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/resources") # first look if resources for the specific doxygen version is available, fallback # on the default otherwise #select only the version number (not the commit hash) string(REPLACE " " ";" DOXYGEN_VERSION ${DOXYGEN_VERSION}) list(GET DOXYGEN_VERSION 0 DOXYGEN_VERSION) message(VERBOSE "Doxygen version ${DOXYGEN_VERSION}: ${DOXYGEN_EXECUTABLE}") # The Doxygen version is search in that sorted list (to find the index for which the version is less or equal) set(CGAL_DOXYGEN_RESOURCES_VERSIONS 1.8.13 1.9.6 1.14.0) list(SORT CGAL_DOXYGEN_RESOURCES_VERSIONS COMPARE NATURAL) # The GLOB is here to check that the list in CGAL_DOXYGEN_RESOURCES_VERSIONS is correct. # CGAL_DOXYGEN_RESOURCES_DIRS is also used below. file(GLOB CGAL_DOXYGEN_RESOURCES_DIRS RELATIVE "${CGAL_DOC_RESOURCE_PREFIX_DIR}" "${CGAL_DOC_RESOURCE_PREFIX_DIR}/*") list(SORT CGAL_DOXYGEN_RESOURCES_DIRS COMPARE NATURAL) if(NOT CGAL_DOXYGEN_RESOURCES_DIRS STREQUAL CGAL_DOXYGEN_RESOURCES_VERSIONS) message(WARNING "The directories in ${CGAL_DOC_RESOURCE_PREFIX_DIR} do not match the expected versions:\n" " [${CGAL_DOXYGEN_RESOURCES_DIRS}] vs [${CGAL_DOXYGEN_RESOURCES_VERSIONS}]") endif() function(CGAL_insert_in_sorted_list list_name value) set(list ${${list_name}}) if(NOT value IN_LIST list) list(APPEND list "${value}") list(SORT list COMPARE NATURAL) endif() set(${list_name} ${list} PARENT_SCOPE) endfunction() if(DOXYGEN_VERSION IN_LIST CGAL_DOXYGEN_RESOURCES_DIRS) list(FIND CGAL_DOXYGEN_RESOURCES_DIRS "${DOXYGEN_VERSION}" DOXYGEN_VERSION_INDEX) else() CGAL_insert_in_sorted_list(CGAL_DOXYGEN_RESOURCES_DIRS ${DOXYGEN_VERSION}) list(FIND CGAL_DOXYGEN_RESOURCES_DIRS ${DOXYGEN_VERSION} DOXYGEN_VERSION_INDEX) math(EXPR DOXYGEN_VERSION_INDEX "${DOXYGEN_VERSION_INDEX} - 1") endif() list(GET CGAL_DOXYGEN_RESOURCES_DIRS "${DOXYGEN_VERSION_INDEX}" CGAL_DOC_RESOURCE_DIR) set(CGAL_DOC_RESOURCE_DIR "${CGAL_DOC_RESOURCE_PREFIX_DIR}/${CGAL_DOC_RESOURCE_DIR}") if(NOT EXISTS "${CGAL_DOC_RESOURCE_DIR}") message(FATAL_ERROR "Doxygen resources for version ${DOXYGEN_VERSION} not found") else() message(VERBOSE "Using Doxygen resources from ${CGAL_DOC_RESOURCE_DIR}") endif() set(CGAL_DOC_BIBLIO_DIR "${CMAKE_CURRENT_LIST_DIR}/biblio") set(CGAL_DOC_SCRIPT_DIR "${CMAKE_CURRENT_LIST_DIR}/scripts") set(CGAL_DOC_HEADER ${CGAL_DOC_DXY_DIR}/header.html) configure_file(${CGAL_DOC_RESOURCE_DIR}/header.html ${CGAL_DOC_HEADER} @ONLY) set(CGAL_DOC_HEADER_PACKAGE ${CGAL_DOC_DXY_DIR}/header_package.html) configure_file(${CGAL_DOC_RESOURCE_DIR}/header_package.html ${CGAL_DOC_HEADER_PACKAGE} @ONLY) #Generate the bibtex file #this is needed also for BaseDoxyfile.in string(TIMESTAMP CGAL_BUILD_YEAR4 "%Y") string(TIMESTAMP CGAL_BUILD_YEAR2 "%y") string(TIMESTAMP CGAL_BUILD_MONTH "%m") if(${CGAL_BUILD_MONTH} GREATER 6) set(CGAL_RELEASE_YEAR_ID "${CGAL_BUILD_YEAR2}b") else() set(CGAL_RELEASE_YEAR_ID "${CGAL_BUILD_YEAR2}a") endif() if(NOT CGAL_CREATED_VERSION_NUM) if(CGAL_BRANCH_BUILD) include(${CGAL_ROOT}/CGALConfigVersion.cmake) if(CGAL_BUGFIX_VERSION AND CGAL_BUGFIX_VERSION GREATER 0) set(CGAL_CREATED_VERSION_NUM "${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}.${CGAL_BUGFIX_VERSION}") else() set(CGAL_CREATED_VERSION_NUM "${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}") endif() else() if(EXISTS "${CGAL_ROOT}/doc/public_release_name") file(STRINGS "${CGAL_ROOT}/doc/public_release_name" CGAL_VERSION_LINE) string(REGEX REPLACE "CGAL-" "" CGAL_CREATED_VERSION_NUM "${CGAL_VERSION_LINE}") else() #read version.h and get the line with CGAL_VERSION file(STRINGS "${CGAL_ROOT}/include/CGAL/version.h" CGAL_VERSION_LINE REGEX "CGAL_VERSION ") #extract release id string(REGEX MATCH "[0-9]+\\.[0-9]+\\.?[0-9]*" CGAL_CREATED_VERSION_NUM "${CGAL_VERSION_LINE}") endif() endif() endif() # Introduce our own version variable. This way we avoid tying this too # closely to the convoluted versioning code and can adapt without a # huge diff. set(CGAL_DOC_VERSION ${CGAL_CREATED_VERSION_NUM}) ## generate how_to_cite files execute_process( COMMAND ${Python3_EXECUTABLE} ${CGAL_DOC_SCRIPT_DIR}/generate_how_to_cite.py ${CGAL_ROOT} ${CMAKE_BINARY_DIR} "${CGAL_BRANCH_BUILD}" RESULT_VARIABLE GENERATE_HOW_TO_CITE_RESULT) if(NOT GENERATE_HOW_TO_CITE_RESULT EQUAL "0") message(FATAL_ERROR "generate_how_to_cite did not exit correctly") endif() configure_file(${CMAKE_BINARY_DIR}/how_to_cite_cgal.bib.in ${CMAKE_BINARY_DIR}/how_to_cite_cgal.bib) configure_file(${CMAKE_BINARY_DIR}/how_to_cite_cgal.txt.in ${CMAKE_BINARY_DIR}/how_to_cite_cgal.txt) configure_file(${CMAKE_BINARY_DIR}/how_to_cite.html.in ${CMAKE_BINARY_DIR}/how_to_cite.html) # configure_file(${CGAL_DOC_RESOURCE_DIR}/BaseDoxyfile.in ${CGAL_DOC_DXY_DIR}/BaseDoxyfile) set(CGAL_DOC_DOXY_DEFAULT "${CGAL_DOC_DXY_DIR}/BaseDoxyfile") if (BE_QUIET) file(APPEND ${CGAL_DOC_DOXY_DEFAULT} "WARN_LOGFILE=doxygen.log\n") endif() # pkglist_filter gets the path to the pkglist_filter of this source # directory. if(WIN32) configure_file(${CGAL_DOC_SCRIPT_DIR}/pkglist_filter.bat ${CMAKE_BINARY_DIR}/pkglist_filter.bat) endif() configure_file(${CGAL_DOC_SCRIPT_DIR}/pkglist_filter ${CMAKE_BINARY_DIR}/pkglist_filter) configure_file(${CGAL_DOC_SCRIPT_DIR}/pkglist_filter.py ${CMAKE_BINARY_DIR}/pkglist_filter.py) set(CGAL_DOC_PACKAGES "") if(CGAL_BRANCH_BUILD) file( GLOB CGAL_ALL_PACKAGES RELATIVE ${CGAL_ROOT} "${CGAL_ROOT}/*") foreach(pkg ${CGAL_ALL_PACKAGES}) #detect packages with documentation to process if(IS_DIRECTORY ${CGAL_ROOT}/${pkg}) if(EXISTS "${CGAL_ROOT}/${pkg}/doc/${pkg}/PackageDescription.txt") list(APPEND CGAL_DOC_PACKAGES ${pkg}) endif() endif() #set up directories of packages if(IS_DIRECTORY ${CGAL_ROOT}/${pkg}/examples) set(CGAL_${pkg}_EXAMPLE_DIR "${CGAL_ROOT}/${pkg}/examples") endif() if(IS_DIRECTORY ${CGAL_ROOT}/${pkg}/include) set(CGAL_${pkg}_INCLUDE_DIR "${CGAL_ROOT}/${pkg}/include") endif() if(IS_DIRECTORY ${CGAL_ROOT}/${pkg}/demo) set(CGAL_${pkg}_DEMO_DIR "${CGAL_ROOT}/${pkg}/demo") endif() endforeach() else() subdirlist(CGAL_DOC_PACKAGES_TMP ${CGAL_ROOT}/doc) set(CGAL_DOC_PACKAGES) foreach(package ${CGAL_DOC_PACKAGES_TMP}) if(EXISTS "${CGAL_ROOT}/doc/${package}/PackageDescription.txt") list(APPEND CGAL_DOC_PACKAGES "${package}") endif() endforeach() subdirlist(CGAL_EXAMPLE_PACKAGES ${CGAL_ROOT}/examples) subdirlist(CGAL_DEMO_PACKAGES ${CGAL_ROOT}/demo) list(APPEND CGAL_EXAMPLE_PACKAGES "BGL" )# manually add BGL to the list of packages foreach(pkg ${CGAL_EXAMPLE_PACKAGES}) set(CGAL_${pkg}_EXAMPLE_DIR "${CGAL_ROOT}/examples") # This might not be entirely correct, but there is no reliable, # easy way to get a list of all package names when not in a # branch build. set(CGAL_${pkg}_INCLUDE_DIR "${CGAL_ROOT}/include") endforeach() foreach(pkg ${CGAL_DEMO_PACKAGES}) set(CGAL_${pkg}_DEMO_DIR "${CGAL_ROOT}/demo") endforeach() endif() #special cases foreach(pkg "Mesher_level") if(CGAL_BRANCH_BUILD) set(CGAL_${pkg}_INCLUDE_DIR "${CGAL_ROOT}/${pkg}/include") else() set(CGAL_${pkg}_INCLUDE_DIR "${CGAL_ROOT}/include") endif() endforeach() option(CGAL_BUILD_THREE_DOC "Build the documentation of the Three package" OFF) if(NOT CGAL_BUILD_THREE_DOC) list(REMOVE_ITEM CGAL_DOC_PACKAGES "Three") endif() foreach(package ${CGAL_DOC_PACKAGES}) configure_doxygen_package(${package}) endforeach() # Add a custom target "doc" add_custom_target(doc) add_custom_target(doc_pre) add_custom_target(doc_post) # do the main package manually, it isn't part of ${CGAL_CONFIGURED_PACKAGES_NAMES} configure_doxygen_package("Documentation") set_target_properties(Documentation_doc PROPERTIES FOLDER Documentation) # hard-code that doc depends on all packages foreach(depend ${CGAL_DOC_PACKAGES}) add_dependencies(doc_pre ${depend}_internal_doxygen_run) add_dependencies(doc_post ${depend}_copy_doc_tags) add_dependencies(${depend}_copy_doc_tags doc_pre) endforeach() add_dependencies(doc_pre Documentation_internal_doxygen_run) add_dependencies(doc_post Documentation_copy_doc_tags) add_dependencies(Documentation_copy_doc_tags doc_pre) #total level doc dependencies add_dependencies(doc doc_post) set(CGAL_DOC_TESTSUITE_SCRIPT "${CGAL_DOC_SCRIPT_DIR}/testsuite.py") add_custom_target( doc_with_postprocessing ${Python3_EXECUTABLE} ${CGAL_DOC_SCRIPT_DIR}/html_output_post_processing.py --output ${CGAL_DOC_OUTPUT_DIR} --resources ${CGAL_DOC_RESOURCE_DIR}) add_dependencies(doc_with_postprocessing doc) if(CGAL_DOC_CREATE_LOGS) add_custom_target( Documentation_test ${Python3_EXECUTABLE} ${CGAL_DOC_TESTSUITE_SCRIPT} --output-dir ${CGAL_DOC_OUTPUT_DIR} --doc-log-dir ${CGAL_DOC_LOG_DIR}) add_dependencies(Documentation_test doc) add_custom_target( Documentation_test_publish ${Python3_EXECUTABLE} ${CGAL_DOC_TESTSUITE_SCRIPT} --output-dir ${CGAL_DOC_OUTPUT_DIR} --doc-log-dir ${CGAL_DOC_LOG_DIR} --publish ${CGAL_DOC_PUBLISH_DIR} --do-copy-results) add_dependencies(Documentation_test_publish doc) add_custom_target( doc_and_publish_testsuite ${Python3_EXECUTABLE} ${CGAL_DOC_TESTSUITE_SCRIPT} --output-dir ${CGAL_DOC_OUTPUT_DIR} --doc-log-dir ${CGAL_DOC_LOG_DIR} --publish ${CGAL_DOC_PUBLISH_DIR} --do-copy-results --cgal-version "${CGAL_FULL_VERSION}" --version-to-keep 10) add_dependencies(doc_and_publish_testsuite doc_with_postprocessing) endif()