[gtk-doc/wip/tintou/cmake-content-files: 10/10] cmake: allow to give content files
- From: Corentin Noël <corentinnoel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk-doc/wip/tintou/cmake-content-files: 10/10] cmake: allow to give content files
- Date: Wed, 17 Oct 2018 15:25:08 +0000 (UTC)
commit 244b21913a7dfae54acb668fd1e0bc06f20b3775
Author: Corentin Noël <corentin elementary io>
Date: Fri Oct 5 16:39:10 2018 +0200
cmake: allow to give content files
The behavior is inspired from the Meson build system.
buildsystems/cmake/GtkDocConfig.cmake | 48 +++++++++++++++++++++++++++++++++--
1 file changed, 46 insertions(+), 2 deletions(-)
---
diff --git a/buildsystems/cmake/GtkDocConfig.cmake b/buildsystems/cmake/GtkDocConfig.cmake
index 2de8d83..c8dab59 100644
--- a/buildsystems/cmake/GtkDocConfig.cmake
+++ b/buildsystems/cmake/GtkDocConfig.cmake
@@ -52,7 +52,8 @@ find_file(GTKDOC_SCANGOBJ_WRAPPER GtkDocScanGObjWrapper.cmake PATH ${_this_dir})
# XML xmlfile
# [LIBRARIES depend1...]
# [FIXXREFOPTS fixxrefoption1...]
-# [IGNOREHEADERS header1...])
+# [IGNOREHEADERS header1...]
+# [CONTENT_FILES example1...])
#
# Add a module with documentation to be processed with GTK-Doc.
#
@@ -71,6 +72,9 @@ find_file(GTKDOC_SCANGOBJ_WRAPPER GtkDocScanGObjWrapper.cmake PATH ${_this_dir})
# can also manually add additional targets as dependencies of the
# documentation build with the DEPENDS option.
#
+# The 'CONTENT_FILES' option is here to copy the files extending the documentation
+# such as exemples and custom xml files.
+#
# This function a target named "doc-${doc_prefix}". You will need to manually
# add it to the ALL target if you want it to be built by default, you can do
# something like this:
@@ -85,7 +89,7 @@ find_file(GTKDOC_SCANGOBJ_WRAPPER GtkDocScanGObjWrapper.cmake PATH ${_this_dir})
function(gtk_doc_add_module _doc_prefix)
set(_one_value_args "XML")
set(_multi_value_args "FIXXREFOPTS" "IGNOREHEADERS" "LIBRARIES" "LIBRARY_DIRS" "SOURCE" "SUFFIXES"
- "CFLAGS" "DEPENDS" "LDFLAGS" "LDPATH")
+ "CFLAGS" "DEPENDS" "LDFLAGS" "LDPATH" "CONTENT_FILES")
cmake_parse_arguments("GTK_DOC" "" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
if(NOT GTK_DOC_SOURCE)
@@ -100,6 +104,8 @@ function(gtk_doc_add_module _doc_prefix)
set(_library_dirs ${GTK_DOC_LIBRARY_DIRS})
set(_suffixes ${GTK_DOC_SUFFIXES})
+ set(_content_files ${GTK_DOC_CONTENT_FILES})
+
set(_extra_cflags ${GTK_DOC_CFLAGS})
set(_depends ${GTK_DOC_DEPENDS})
set(_extra_ldflags ${GTK_DOC_LDFLAGS})
@@ -168,6 +174,11 @@ function(gtk_doc_add_module _doc_prefix)
set(_output_html_stamp "${_output_dir}/html.stamp")
+ # we depend on the content files being there before doing anything
+ if(_content_files)
+ list(APPEND _depends ${_content_files})
+ endif(_content_files)
+
# add a command to create output directory
add_custom_command(
OUTPUT "${_output_dir_stamp}" "${_output_dir}"
@@ -240,6 +251,38 @@ function(gtk_doc_add_module _doc_prefix)
COMMAND ${CMAKE_COMMAND} -E remove ${_default_xml_file})
endif(_xml_file)
+ set(_copy_content_files_if_needed "")
+ if(_content_files)
+ foreach(_content_file ${_content_files})
+ # We need to copy the content files to the build directory.
+ # We respect the folder tree if the file comes from the current
+ # source or binary directory but copy the file to the current binary
+ # directory if it comes from somewhere else.
+ get_filename_component(_content_file ${_content_file} ABSOLUTE)
+ string(REGEX MATCH "^${CMAKE_CURRENT_SOURCE_DIR}" _is_in_source ${_content_file})
+ string(REGEX MATCH "^${CMAKE_CURRENT_BINARY_DIR}" _is_in_binary ${_content_file})
+ if (_is_in_source OR _is_in_binary)
+ if(_is_in_source)
+ file(RELATIVE_PATH _content_file_relative ${CMAKE_CURRENT_SOURCE_DIR} ${_content_file})
+ else(_is_in_source)
+ file(RELATIVE_PATH _content_file_relative ${CMAKE_CURRENT_BINARY_DIR} ${_content_file})
+ endif(_is_in_source)
+ set(_content_file_destination
+ "${_output_dir}/${_content_file_relative}")
+ else(_is_in_source OR _is_in_binary)
+ get_filename_component(_content_file_name ${_content_file} NAME)
+ set(_content_file_destination
+ "${_output_dir}/${_content_file_name}")
+ endif(_is_in_source OR _is_in_binary)
+ get_filename_component(_content_file_destination ${_content_file_destination} ABSOLUTE)
+ if(NOT ${_content_file_destination} EQUAL ${_content_file})
+ set(_copy_content_files_if_needed
+ ${_copy_content_files_if_needed}
+ COMMAND ${CMAKE_COMMAND} -E copy "${_content_file}" "${_content_file_destination}")
+ endif(NOT ${_content_file_destination} EQUAL ${_content_file})
+ endforeach(_content_file)
+ endif(_content_files)
+
# add a command to make the database
add_custom_command(
OUTPUT
@@ -253,6 +296,7 @@ function(gtk_doc_add_module _doc_prefix)
${_depends}
${_remove_xml_if_needed}
COMMAND ${CMAKE_COMMAND} -E remove_directory ${_output_xml_dir}
+ ${_copy_content_files_if_needed}
COMMAND ${GTKDOC_MKDB_EXE}
--module=${_doc_prefix}
${_source_dirs_opt}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]