forked from qt-creator/qt-creator
		
	Source and configuration files for each manual are now located in a separate subdirectory, with common configuration files in doc/config. doc |_config |_qtcreator |_qtcreatordev |_qtdesignstudio Edit the config files accordingly. Change-Id: Idc747a7c16e84f3e06add91234dc5fc908e64cc5 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
		
			
				
	
	
		
			244 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| # Generate documentation
 | |
| 
 | |
| # Options:
 | |
| option(WITH_DOCS "Build documentation" OFF)
 | |
| add_feature_info("Build documentation" WITH_DOCS "")
 | |
| 
 | |
| option(WITH_ONLINE_DOCS "Build online documentation" OFF)
 | |
| add_feature_info("Build online documentation" WITH_ONLINE_DOCS "")
 | |
| 
 | |
| option(BUILD_DEVELOPER_DOCS "Include developer documentation" OFF)
 | |
| add_feature_info("Include developer documentation" BUILD_DEVELOPER_DOCS "")
 | |
| 
 | |
| 
 | |
| # Find programs:
 | |
| function(_doc_find_program result_var)
 | |
|   if (NOT TARGET Qt5::qmake)
 | |
|     message(FATAL_ERROR "QDoc is only available in Qt5 projects")
 | |
|   endif()
 | |
| 
 | |
|   get_target_property(_qmake_binary Qt5::qmake IMPORTED_LOCATION)
 | |
|   get_filename_component(_qmake_dir "${_qmake_binary}" DIRECTORY)
 | |
|   find_program("_prg_${result_var}" ${ARGN} HINTS "${_qmake_dir}")
 | |
|   if ("_prg_${result_var}" STREQUAL "_prg_${result_var}-NOTFOUND")
 | |
|     set("_prg_${result_var}" "${result_var}-NOTFOUND")
 | |
|     message(WARNING "Could not find binary for ${result_var}")
 | |
|   endif()
 | |
| 
 | |
|   set(${result_var} "${_prg_${result_var}}" PARENT_SCOPE)
 | |
| endfunction()
 | |
| 
 | |
| function(_setup_doc_targets)
 | |
|   # Set up important targets:
 | |
|   if (NOT TARGET html_docs)
 | |
|     add_custom_target(html_docs COMMENT "Build HTML documentation")
 | |
|   endif()
 | |
|   if (NOT TARGET qch_docs)
 | |
|     add_custom_target(qch_docs COMMENT "Build QCH documentation")
 | |
|   endif()
 | |
|   if (NOT TARGET docs)
 | |
|     add_custom_target(docs COMMENT "Build documentation")
 | |
|     add_dependencies(docs html_docs qch_docs)
 | |
|   endif()
 | |
|   if (NOT TARGET install_docs)
 | |
|     add_custom_target(install_docs COMMENT "Install documentation")
 | |
|     add_dependencies(install_docs docs)
 | |
|   endif()
 | |
|   if (NOT TARGET clean_docs)
 | |
|     add_custom_target(clean_docs COMMENT "Clean documentation files from build directory")
 | |
|   endif()
 | |
| endfunction()
 | |
| 
 | |
| function(_setup_qdoc_targets _qdocconf_file _retval)
 | |
|   cmake_parse_arguments(_arg "" "HTML_DIR;INSTALL_DIR;POSTFIX"
 | |
|     "INDEXES;ENVIRONMENT_EXPORTS" ${ARGN})
 | |
| 
 | |
|   foreach(_index ${_arg_INDEXES})
 | |
|     list(APPEND _qdoc_index_args "-indexdir;${_index}")
 | |
|   endforeach()
 | |
| 
 | |
|   set(_env "")
 | |
|   foreach(_export ${_arg_ENVIRONMENT_EXPORTS})
 | |
|     if (NOT DEFINED "${_export}")
 | |
|       message(FATAL_ERROR "${_export} is not known when trying to export it to qdoc.")
 | |
|     endif()
 | |
|     list(APPEND _env "${_export}=${${_export}}")
 | |
|   endforeach()
 | |
| 
 | |
|   set(_full_qdoc_command "${_qdoc}")
 | |
|   if (_env)
 | |
|     set(_full_qdoc_command "${CMAKE_COMMAND}" "-E" "env" ${_env} "${_qdoc}")
 | |
|   endif()
 | |
| 
 | |
|   if (_arg_HTML_DIR STREQUAL "")
 | |
|     set(_arg_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc")
 | |
|   endif()
 | |
| 
 | |
|   get_filename_component(_target "${_qdocconf_file}" NAME_WE)
 | |
| 
 | |
|   set(_html_outputdir "${_arg_HTML_DIR}/${_target}${_arg_POSTFIX}")
 | |
|   file(MAKE_DIRECTORY "${_html_outputdir}")
 | |
| 
 | |
|   set(_html_target "html_docs_${_target}")
 | |
|   add_custom_target("${_html_target}"
 | |
|     ${_full_qdoc_command} "-outputdir" "${_html_outputdir}" "${_qdocconf_file}" ${_qdoc_index_args}
 | |
|     COMMENT "Build HTML documentation from ${_qdocconf_file}"
 | |
|     DEPENDS "${_qdocconf_file}"
 | |
|     SOURCES "${_qdocconf_file}"
 | |
|     WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | |
|     VERBATIM
 | |
|   )
 | |
|   add_dependencies(html_docs "${_html_target}")
 | |
| 
 | |
|   # Install HTML files as a special component
 | |
|   install(DIRECTORY "${_html_outputdir}" DESTINATION "${_arg_INSTALL_DIR}"
 | |
|     COMPONENT ${_html_target} EXCLUDE_FROM_ALL)
 | |
| 
 | |
|   add_custom_target("install_${_html_target}"
 | |
|     "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=${_html_target}
 | |
|       -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
 | |
|     COMMENT "Install HTML documentation from ${_qdocconf_file}"
 | |
|     WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | |
|     VERBATIM
 | |
|   )
 | |
|   add_dependencies(install_docs "install_${_html_target}")
 | |
| 
 | |
|   add_custom_target("clean_${_html_target}"
 | |
|     "${CMAKE_COMMAND}" -E remove_directory "${_html_outputdir}"
 | |
|     COMMENT "Clean HTML documentation from ${_qdocconf_file}"
 | |
|     WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | |
|     VERBATIM
 | |
|   )
 | |
|   add_dependencies(clean_docs "clean_${_html_target}")
 | |
| 
 | |
|   set("${_retval}" "${_html_outputdir}" PARENT_SCOPE)
 | |
| endfunction()
 | |
| 
 | |
| function(_setup_qhelpgenerator_targets _qdocconf_file _html_outputdir)
 | |
|   cmake_parse_arguments(_arg "" "QCH_DIR;INSTALL_DIR" "" ${ARGN})
 | |
|   if (_arg_UNPARSED_ARGUMENTS)
 | |
|     message(FATAL_ERROR "qdoc_build_qdocconf_file has unknown arguments: ${_arg_UNPARSED_ARGUMENTS}.")
 | |
|   endif()
 | |
| 
 | |
|   if (NOT _arg_QCH_DIR)
 | |
|     set(_arg_QCH_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc")
 | |
|   endif()
 | |
| 
 | |
|   if (NOT TARGET Qt5::qhelpgenerator)
 | |
|     message(WARNING "qhelpgenerator missing: No QCH documentation targets were generated")
 | |
|     return()
 | |
|   endif()
 | |
| 
 | |
|   get_filename_component(_target "${_qdocconf_file}" NAME_WE)
 | |
| 
 | |
|   set(_qch_outputdir "${_arg_QCH_DIR}")
 | |
|   file(MAKE_DIRECTORY "${_qch_outputdir}")
 | |
| 
 | |
|   set(_qch_target "qch_docs_${_target}")
 | |
|   set(_html_target "html_docs_${_target}")
 | |
|   add_custom_target("${_qch_target}"
 | |
|     Qt5::qhelpgenerator "${_html_outputdir}/${_target}.qhp" -o "${_qch_outputdir}/${_target}.qch"
 | |
|     COMMENT "Build QCH documentation from ${_qdocconf_file}"
 | |
|     WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | |
|     VERBATIM
 | |
|   )
 | |
|   add_dependencies("${_qch_target}" "${_html_target}")
 | |
|   add_dependencies(qch_docs "${_qch_target}")
 | |
| 
 | |
|   install(FILES "${_qch_outputdir}/${_target}.qch" DESTINATION "${_arg_INSTALL_DIR}"
 | |
|     COMPONENT ${_qch_target} EXCLUDE_FROM_ALL)
 | |
| 
 | |
|   add_custom_target("install_${_qch_target}"
 | |
|     "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=${_qch_target}
 | |
|       -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
 | |
|     WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | |
|     VERBATIM
 | |
|   )
 | |
|   add_dependencies(install_docs "install_${_qch_target}")
 | |
| 
 | |
|   add_custom_target("clean_${_qch_target}"
 | |
|     "${CMAKE_COMMAND}" -E remove -f "${_qch_outputdir}/${_target}.qch"
 | |
|     COMMENT "Clean QCH documentation generated from ${_qdocconf_file}"
 | |
|     WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | |
|     VERBATIM
 | |
|   )
 | |
|   add_dependencies(clean_docs "clean_${_qch_target}")
 | |
| endfunction()
 | |
| 
 | |
| # Helper functions:
 | |
| function(qdoc_build_qdocconf_file _qdocconf_file)
 | |
|   _setup_doc_targets()
 | |
| 
 | |
|   _doc_find_program(_qdoc NAMES qdoc qdoc-qt5)
 | |
|   if (_qdoc STREQUAL "_qdoc-NOTFOUND")
 | |
|      message(WARNING "No qdoc binary found: No documentation targets were generated")
 | |
|      return()
 | |
|   endif()
 | |
| 
 | |
|   cmake_parse_arguments(_arg "QCH" "HTML_DIR;QCH_DIR;INSTALL_DIR;POSTFIX"
 | |
|     "INDEXES;ENVIRONMENT_EXPORTS" ${ARGN})
 | |
|   if (_arg_UNPARSED_ARGUMENTS)
 | |
|     message(FATAL_ERROR "qdoc_build_qdocconf_file has unknown arguments: ${_arg_UNPARSED_ARGUMENTS}.")
 | |
|   endif()
 | |
| 
 | |
|   if (NOT _arg_INSTALL_DIR)
 | |
|     message(FATAL_ERROR "No INSTALL_DIR set when calling qdoc_build_qdocconf_file")
 | |
|   endif()
 | |
| 
 | |
|   _setup_qdoc_targets("${_qdocconf_file}" _html_outputdir
 | |
|     HTML_DIR "${_arg_HTML_DIR}" INSTALL_DIR "${_arg_INSTALL_DIR}"
 | |
|     INDEXES ${_arg_INDEXES} ENVIRONMENT_EXPORTS ${_arg_ENVIRONMENT_EXPORTS}
 | |
|     POSTFIX "${_arg_POSTFIX}")
 | |
| 
 | |
|   if (_arg_QCH)
 | |
|     _setup_qhelpgenerator_targets("${_qdocconf_file}" "${_html_outputdir}"
 | |
|       QCH_DIR "${_arg_QCH_DIR}" INSTALL_DIR "${_arg_INSTALL_DIR}")
 | |
|   endif()
 | |
| endfunction()
 | |
| 
 | |
| ### Skip docs setup if that is not needed!
 | |
| if (WITH_ONLINE_DOCS OR WITH_DOCS)
 | |
|   if (WITH_DOCS)
 | |
|     set(_qch_params "QCH;QCH_DIR;${PROJECT_BINARY_DIR}/${IDE_DOC_PATH}")
 | |
|   endif()
 | |
| 
 | |
|   set(_qdoc_params HTML_DIR "${PROJECT_BINARY_DIR}/doc/html")
 | |
|   list(APPEND _qdoc_params INDEXES "${QT_INSTALL_DOCS}" "${PROJECT_BINARY_DIR}/doc")
 | |
|   list(APPEND _qdoc_params INSTALL_DIR "${IDE_DOC_PATH}")
 | |
| 
 | |
|   # Set up environment for qdoc:
 | |
|   set(QTC_VERSION "${IDE_VERSION_DISPLAY}")
 | |
|   set(QTCREATOR_COPYRIGHT_YEAR "${IDE_COPYRIGHT_YEAR}")
 | |
|   set(IDE_SOURCE_TREE "${PROJECT_SOURCE_DIR}")
 | |
|   string(REPLACE "." "" QTC_VERSION_TAG "${IDE_VERSION}")
 | |
|   set(QTC_DOCS_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
 | |
|   set(QDOC_INDEX_DIR "${QT_INSTALL_DOCS}")
 | |
|   if (QT_INSTALL_DOCS_src)
 | |
|     set(QT_INSTALL_DOCS "${QT_INSTALL_DOCS_src}")
 | |
|   endif()
 | |
| 
 | |
|   list(APPEND _qdoc_params ENVIRONMENT_EXPORTS
 | |
|     IDE_ID IDE_CASED_ID IDE_DISPLAY_NAME
 | |
| 
 | |
|     IDE_SOURCE_TREE
 | |
| 
 | |
|     QTC_DOCS_DIR QTC_VERSION QTC_VERSION_TAG
 | |
| 
 | |
|     QTCREATOR_COPYRIGHT_YEAR
 | |
| 
 | |
|     QT_INSTALL_DOCS QDOC_INDEX_DIR)
 | |
| 
 | |
|   if (WITH_DOCS)
 | |
|     qdoc_build_qdocconf_file("qtcreator/qtcreator.qdocconf" ${_qch_params} ${_qdoc_params})
 | |
|     if (BUILD_DEVELOPER_DOCS)
 | |
|       qdoc_build_qdocconf_file("qtcreatordev/qtcreator-dev.qdocconf" ${_qch_params} ${_qdoc_params})
 | |
|     endif()
 | |
|   endif()
 | |
|   if(WITH_ONLINE_DOCS)
 | |
|     qdoc_build_qdocconf_file("qtcreator/qtcreator-online.qdocconf" ${_qdoc_params})
 | |
|     if (BUILD_DEVELOPER_DOCS)
 | |
|       qdoc_build_qdocconf_file("qtcreatordev/qtcreator-dev-online.qdocconf" ${_qdoc_params})
 | |
|     endif()
 | |
|   endif()
 | |
| endif()
 |