gnucash-docs maint: Multiple changes pushed

Geert Janssens gjanssens at code.gnucash.org
Sat Sep 7 07:07:43 EDT 2019


Updated	 via  https://github.com/Gnucash/gnucash-docs/commit/67f0c717 (commit)
	 via  https://github.com/Gnucash/gnucash-docs/commit/12ff0d04 (commit)
	 via  https://github.com/Gnucash/gnucash-docs/commit/50a06ccd (commit)
	 via  https://github.com/Gnucash/gnucash-docs/commit/9899639b (commit)
	 via  https://github.com/Gnucash/gnucash-docs/commit/ac183ad9 (commit)
	 via  https://github.com/Gnucash/gnucash-docs/commit/ee29380c (commit)
	 via  https://github.com/Gnucash/gnucash-docs/commit/715f7fa0 (commit)
	 via  https://github.com/Gnucash/gnucash-docs/commit/8cec38d5 (commit)
	 via  https://github.com/Gnucash/gnucash-docs/commit/2c6180f5 (commit)
	from  https://github.com/Gnucash/gnucash-docs/commit/47060825 (commit)



commit 67f0c71751da67d324cde31ce11e4217b6d7d5e6
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Sat Sep 7 12:22:11 2019 +0200

    CMake - revisit image handling
    
    - replace variable figdir with the hardcoded valude 'figures'. We don't
      need that much flexibility in defining where the images are stored.
    - determine list of images on a higher level so we don't have to copy
      the same code in each target function. Note there are two
      function calls to determine the list of images: one to use in the
      target functions (with absolute paths) and one to use for the
      dist target (with pathnames relative to the current source directory)

diff --git a/cmake/AddChmTarget.cmake b/cmake/AddChmTarget.cmake
index ea17dbd..0416b08 100644
--- a/cmake/AddChmTarget.cmake
+++ b/cmake/AddChmTarget.cmake
@@ -1,4 +1,4 @@
-function (add_chm_target docname lang entities figdir)
+function (add_chm_target docname lang entities figures)
 
     set(chmfile "${docname}.chm")
     set(mapfile "${docname}.hhmap")
@@ -6,8 +6,6 @@ function (add_chm_target docname lang entities figdir)
     set(BUILD_DIR "${DOCDIR_BUILD}/${lang}")
     file(MAKE_DIRECTORY "${BUILD_DIR}")
 
-    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
-
     file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/htmlhelp")
     add_custom_command(
         OUTPUT "${BUILD_DIR}/${chmfile}" "${BUILD_DIR}/${mapfile}"
diff --git a/cmake/AddEpubTarget.cmake b/cmake/AddEpubTarget.cmake
index c3ede27..46b2063 100644
--- a/cmake/AddEpubTarget.cmake
+++ b/cmake/AddEpubTarget.cmake
@@ -1,8 +1,7 @@
-function (add_epub_target docname lang entities figdir)
+function (add_epub_target docname lang entities figures)
 
     set(epubfile "${docname}.epub")
     set(EPUB_TMPDIR "${CMAKE_CURRENT_BINARY_DIR}/epub")
-    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
 
     set(BUILD_DIR "${DOCDIR_BUILD}/${lang}")
     file(MAKE_DIRECTORY "${BUILD_DIR}")
diff --git a/cmake/AddGHelpTarget.cmake b/cmake/AddGHelpTarget.cmake
index 0b34ddd..a8bc9ec 100644
--- a/cmake/AddGHelpTarget.cmake
+++ b/cmake/AddGHelpTarget.cmake
@@ -8,12 +8,11 @@
 # - entities: list of all xml files this document is composed of
 # - figdir: name of the directory holding the images
 
-function (add_ghelp_target docname lang entities figdir)
+function (add_ghelp_target docname lang entities figures)
 
-    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
     set(BUILD_DIR "${DATADIR_BUILD}/gnome/help/${docname}/${lang}")
     file(MAKE_DIRECTORY "${BUILD_DIR}")
-    file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/figures")
 
     set(source_files "")
     foreach(xml_file ${entities} ${docname}.xml)
@@ -33,10 +32,10 @@ function (add_ghelp_target docname lang entities figdir)
         WORKING_DIRECTORY "${BUILD_DIR}")
 
     # Copy figures for this document
-    file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/figures")
     add_custom_command(
         OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ghelp_figtrigger"
-        COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/${figdir}"
+        COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/figures"
         COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/ghelp_figtrigger"
         DEPENDS ${figures})
 
@@ -50,6 +49,6 @@ function (add_ghelp_target docname lang entities figdir)
         DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}"
         COMPONENT "${docname}-xml")
     install(FILES ${figures}
-        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/${figdir}"
+        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/figures"
         COMPONENT "${docname}-xml")
 endfunction()
diff --git a/cmake/AddGncDocTargets.cmake b/cmake/AddGncDocTargets.cmake
index a1ee5e9..ae054f8 100644
--- a/cmake/AddGncDocTargets.cmake
+++ b/cmake/AddGncDocTargets.cmake
@@ -2,6 +2,10 @@ function (add_gnc_doc_targets docname entities)
 
     get_filename_component(lang ${CMAKE_CURRENT_SOURCE_DIR} NAME)
 
+    file(GLOB_RECURSE figures
+        "${CMAKE_CURRENT_SOURCE_DIR}/figures/*.png"
+        "${CMAKE_CURRENT_SOURCE_DIR}/figures/figures/*.svg")
+
     if(entities)
         # Add a target to run xml lint checks on this document's source xml files
         add_custom_target("${lang}-${docname}-check"
@@ -15,19 +19,19 @@ function (add_gnc_doc_targets docname entities)
 
         # Add targets for each document format that is enabled
         if (WITH_CHM)
-            add_chm_target(${docname} ${lang} "${entities}" figures)
+            add_chm_target(${docname} ${lang} "${entities}" "${figures}")
         endif()
         if (WITH_GHELP)
-            add_ghelp_target(${docname} ${lang} "${entities}" figures)
+            add_ghelp_target(${docname} ${lang} "${entities}" "${figures}")
         endif()
         if (WITH_HTML)
-            add_html_target(${docname} ${lang} "${entities}" figures)
+            add_html_target(${docname} ${lang} "${entities}" "${figures}")
         endif()
         if (WITH_PDF)
-            add_pdf_target(${docname} ${lang} "${entities}" figures)
+            add_pdf_target(${docname} ${lang} "${entities}" "${figures}")
         endif()
         if (WITH_EPUB)
-            add_epub_target(${docname} ${lang} "${entities}" figures)
+            add_epub_target(${docname} ${lang} "${entities}" "${figures}")
         endif()
         if (WITH_MOBI)
             add_mobi_target(${docname} ${lang})
@@ -39,15 +43,15 @@ function (add_gnc_doc_targets docname entities)
         Makefile.in
         ${docname}-${lang}.omf)
 
-    file(GLOB_RECURSE figures
+    file(GLOB_RECURSE figures_dist
         RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
-        figures/*.png)
+        figures/*.png figures/*.svg)
 
     add_to_dist(
         CMakeLists.txt
         ${docname}.xml
         ${entities}
         ${autotoolsfiles}
-        ${figures})
+        ${figures_dist})
 
 endfunction()
diff --git a/cmake/AddHtmlTarget.cmake b/cmake/AddHtmlTarget.cmake
index dc17d8d..ea3dcd5 100644
--- a/cmake/AddHtmlTarget.cmake
+++ b/cmake/AddHtmlTarget.cmake
@@ -8,15 +8,14 @@
 # - entities: list of all xml files this document is composed of
 # - figdir: name of the directory holding the images
 
-function (add_html_target docname lang entities figdir)
+function (add_html_target docname lang entities figures)
 
-    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
     set(styledir "${CMAKE_SOURCE_DIR}/stylesheet")
     file(GLOB styleicons "${CMAKE_SOURCE_DIR}/stylesheet/*.png")
 
     set(BUILD_DIR "${DOCDIR_BUILD}/${lang}/${docname}")
     file(MAKE_DIRECTORY "${BUILD_DIR}")
-    file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/figures")
     file(MAKE_DIRECTORY "${BUILD_DIR}/stylesheet")
 
     # Convert xml to html with xsltproc
@@ -33,10 +32,10 @@ function (add_html_target docname lang entities figdir)
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
 
     # Copy figures for this document
-    file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/figures")
     add_custom_command(
         OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html_figtrigger"
-        COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/${figdir}"
+        COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/figures"
         COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/html_figtrigger"
         DEPENDS ${figures})
 
diff --git a/cmake/AddPdfTarget.cmake b/cmake/AddPdfTarget.cmake
index 7d73946..b813b51 100644
--- a/cmake/AddPdfTarget.cmake
+++ b/cmake/AddPdfTarget.cmake
@@ -1,8 +1,7 @@
-function (add_pdf_target docname lang entities figdir)
+function (add_pdf_target docname lang entities figures)
 
     set(fofile "${docname}.fo")
     set(pdffile "${docname}.pdf")
-    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
 
     set(BUILD_DIR "${DOCDIR_BUILD}/${lang}")
     file(MAKE_DIRECTORY "${BUILD_DIR}")

commit 12ff0d04151c1ecdac26dc30a320afd1c11344ee
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Sat Sep 7 11:43:06 2019 +0200

    CMake - revisit xml target
    
    This is really a target to install the documentation where gnome help
    searches for it rather than some generic xml target. Rename the
    target to ghelp to make this more explicit.
    
    In addition add rules to 'install' in the build directory just like
    all the other targets. The real install target is also kept as
    this is what distro packagers will be using eventually.
    
    Lastly, move the check target to a separate location as it's not
    ghelp specific. It is used to run xmllint on the source files
    which would benefit all document formats. It has been made optional
    though as calling 'make check' will always run the check. Setting
    it as dependency for other targets would in turn cause the other
    targets to always rebuild even if no source files were changed.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0edfdbb..1df8f7b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,9 +22,9 @@ set (PACKAGE_URL "https://www.gnucash.org/")
 set (CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
 include (AddChmTarget)
 include (AddEpubTarget)
+include (AddGHelpTarget)
 include (AddHtmlTarget)
 include (AddPdfTarget)
-include (AddXmlTarget)
 include (AddGncDocTargets)
 include (DistCommon)
 include (GNUInstallDirs)
@@ -41,13 +41,13 @@ unset(dist_files CACHE)
 # On any other platform chm and mobi are disabled by default
 
 if(NOT WIN32)
-    option (WITH_XML "Enable build rules for xml document format" ON)
+    option (WITH_GHELP "Enable build rules for gnome help document format" ON)
     option (WITH_HTML "Enable build rules for html document format" ON)
     option (WITH_PDF "Enable build rules for pdf document format" ON)
     option (WITH_EPUB "Enable build rules for epub document format" ON)
     option (WITH_CHM "Enable build rules for chm document format" OFF)
 else()
-    option (WITH_XML "Enable build rules for xml document format" OFF)
+    option (WITH_GHELP "Enable build rules for gnome help document format" OFF)
     option (WITH_HTML "Enable build rules for html document format" OFF)
     option (WITH_PDF "Enable build rules for pdf document format" OFF)
     option (WITH_EPUB "Enable build rules for epub document format" OFF)
@@ -144,8 +144,8 @@ add_custom_target(check)
 if (WITH_HTML)
     add_custom_target(html)
 endif()
-if (WITH_XML)
-    add_custom_target(xml)
+if (WITH_GHELP)
+    add_custom_target(ghelp)
 endif()
 if (WITH_PDF)
     add_custom_target(pdf)
diff --git a/cmake/AddGHelpTarget.cmake b/cmake/AddGHelpTarget.cmake
new file mode 100644
index 0000000..0b34ddd
--- /dev/null
+++ b/cmake/AddGHelpTarget.cmake
@@ -0,0 +1,55 @@
+#
+# Functions to install the docbook xml sources for use with gnome help
+#
+# Paremeters:
+# - docname: basename of the main xml file. Will be used to locate
+#            this primary xml file and for various output files/directories
+# - lang: language of the current document
+# - entities: list of all xml files this document is composed of
+# - figdir: name of the directory holding the images
+
+function (add_ghelp_target docname lang entities figdir)
+
+    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
+    set(BUILD_DIR "${DATADIR_BUILD}/gnome/help/${docname}/${lang}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
+
+    set(source_files "")
+    foreach(xml_file ${entities} ${docname}.xml)
+        list(APPEND source_files "${CMAKE_CURRENT_SOURCE_DIR}/${xml_file}")
+    endforeach()
+    list(APPEND source_files "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
+
+    set(dest_files "")
+    foreach(xml_file ${entities} ${docname}.xml gnc-docbookx.dtd)
+        list(APPEND dest_files "${BUILD_DIR}/${xml_file}")
+    endforeach()
+
+    add_custom_command(
+        OUTPUT ${dest_files}
+        COMMAND ${CMAKE_COMMAND} -E copy ${source_files} "${BUILD_DIR}"
+        DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd"
+        WORKING_DIRECTORY "${BUILD_DIR}")
+
+    # Copy figures for this document
+    file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
+    add_custom_command(
+        OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ghelp_figtrigger"
+        COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/${figdir}"
+        COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/ghelp_figtrigger"
+        DEPENDS ${figures})
+
+    add_custom_target("${lang}-${docname}-ghelp"
+        DEPENDS ${dest_files}
+                "${CMAKE_CURRENT_BINARY_DIR}/ghelp_figtrigger")
+
+    add_dependencies(${docname}-ghelp "${lang}-${docname}-ghelp")
+
+    install(FILES ${source_files}
+        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}"
+        COMPONENT "${docname}-xml")
+    install(FILES ${figures}
+        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/${figdir}"
+        COMPONENT "${docname}-xml")
+endfunction()
diff --git a/cmake/AddGncDocTargets.cmake b/cmake/AddGncDocTargets.cmake
index a6d2f04..a1ee5e9 100644
--- a/cmake/AddGncDocTargets.cmake
+++ b/cmake/AddGncDocTargets.cmake
@@ -3,12 +3,22 @@ function (add_gnc_doc_targets docname entities)
     get_filename_component(lang ${CMAKE_CURRENT_SOURCE_DIR} NAME)
 
     if(entities)
-        add_check_target(${docname} ${lang} "${entities}" figures)
+        # Add a target to run xml lint checks on this document's source xml files
+        add_custom_target("${lang}-${docname}-check"
+            COMMAND  ${XMLLINT} --postvalid
+                                --xinclude
+                                --noout
+                                --path ${CMAKE_SOURCE_DIR}/docbook
+                                ${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml
+            DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
+        add_dependencies(${docname}-check "${lang}-${docname}-check")
+
+        # Add targets for each document format that is enabled
         if (WITH_CHM)
             add_chm_target(${docname} ${lang} "${entities}" figures)
         endif()
-        if (WITH_XML)
-            add_xml_target(${docname} ${lang} "${entities}" figures)
+        if (WITH_GHELP)
+            add_ghelp_target(${docname} ${lang} "${entities}" figures)
         endif()
         if (WITH_HTML)
             add_html_target(${docname} ${lang} "${entities}" figures)
diff --git a/cmake/AddHtmlTarget.cmake b/cmake/AddHtmlTarget.cmake
index b94ee64..dc17d8d 100644
--- a/cmake/AddHtmlTarget.cmake
+++ b/cmake/AddHtmlTarget.cmake
@@ -35,9 +35,9 @@ function (add_html_target docname lang entities figdir)
     # Copy figures for this document
     file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
     add_custom_command(
-        OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/figurestrigger"
+        OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html_figtrigger"
         COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/${figdir}"
-        COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/figurestrigger"
+        COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/html_figtrigger"
         DEPENDS ${figures})
 
     # Copy style icons for this document (warning, info,...)
@@ -50,7 +50,7 @@ function (add_html_target docname lang entities figdir)
 
     add_custom_target("${lang}-${docname}-html"
         DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/htmltrigger"
-                "${CMAKE_CURRENT_BINARY_DIR}/figurestrigger"
+                "${CMAKE_CURRENT_BINARY_DIR}/html_figtrigger"
                 "${CMAKE_CURRENT_BINARY_DIR}/styletrigger")
 
     add_dependencies(${docname}-html "${lang}-${docname}-html")
diff --git a/cmake/AddXmlTarget.cmake b/cmake/AddXmlTarget.cmake
deleted file mode 100644
index a74c9bf..0000000
--- a/cmake/AddXmlTarget.cmake
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Functions to generate xml (docbook) documentation
-#
-# Paremeters:
-# - docname: basename of the main xml file. Will be used to locate
-#            this primary xml file and for various output files/directories
-# - lang: language of the current document
-# - entities: list of all xml files this document is composed of
-# - figdir: name of the directory holding the images
-
-# ************** Rules to install xml files for gnome-help ***********************
-function (add_xml_target docname lang entities figdir)
-
-    set(xml_files "${entities}")
-    list(APPEND xml_files "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
-    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
-
-    install(FILES ${xml_files}
-        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}"
-        COMPONENT "${docname}-xml")
-    install(FILES ${figures}
-        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/${figdir}"
-        COMPONENT "${docname}-xml")
-endfunction()
-
-
-function (add_check_target docname lang entities figdir)
-    add_custom_target("${lang}-${docname}-check"
-        COMMAND  ${XMLLINT} --postvalid
-                            --xinclude
-                            --noout
-                            --path ${CMAKE_SOURCE_DIR}/docbook
-                            ${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml
-        DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
-
-    add_dependencies(${docname}-check "${lang}-${docname}-check")
-
-endfunction()
diff --git a/guide/CMakeLists.txt b/guide/CMakeLists.txt
index 2048a53..8b047f7 100644
--- a/guide/CMakeLists.txt
+++ b/guide/CMakeLists.txt
@@ -8,10 +8,9 @@ if (WITH_HTML)
     add_dependencies(html ${docname}-html)
 endif()
 
-if (WITH_XML)
-    add_custom_target(${docname}-xml
-        DEPENDS ${docname}-check)
-    add_dependencies(xml ${docname}-xml)
+if (WITH_GHELP)
+    add_custom_target(${docname}-ghelp)
+    add_dependencies(ghelp ${docname}-ghelp)
 endif()
 
 if (WITH_PDF)
diff --git a/help/CMakeLists.txt b/help/CMakeLists.txt
index aa52ae0..dc75695 100644
--- a/help/CMakeLists.txt
+++ b/help/CMakeLists.txt
@@ -8,10 +8,9 @@ if (WITH_HTML)
     add_dependencies(html ${docname}-html)
 endif()
 
-if (WITH_XML)
-    add_custom_target(${docname}-xml
-        DEPENDS ${docname}-check)
-    add_dependencies(xml ${docname}-xml)
+if (WITH_GHELP)
+    add_custom_target(${docname}-ghelp)
+    add_dependencies(ghelp ${docname}-ghelp)
 endif()
 
 if (WITH_PDF)

commit 50a06ccd1f391064b202efd92597610ea087e98d
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Sat Sep 7 10:40:17 2019 +0200

    CMake - refactor targets into custom commands
    
    A custom target will always run its commands. However we only want
    to run the commands if one of the dependencies changes. This is
    exactly how custom commands work. A custom target is still defined as well
    for each document/lang/format triplet as that is needed for dependency
    management across directories and to have a direct target to pass to make
    
    Note for the html target(s) this posed a challenge. When cmake is run
    to set up the build system it is unknown still what the final html files
    will be for the html targets so it's impossible to add dependencies at
    set up time. Instead a dummy file is created when the html build rule
    is run. Whenever any of the dependencies is newer than this dummy file
    the build rule will be triggered.

diff --git a/cmake/AddChmTarget.cmake b/cmake/AddChmTarget.cmake
index 28cf33b..ea17dbd 100644
--- a/cmake/AddChmTarget.cmake
+++ b/cmake/AddChmTarget.cmake
@@ -9,7 +9,8 @@ function (add_chm_target docname lang entities figdir)
     file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
 
     file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/htmlhelp")
-    add_custom_target("${lang}-${docname}-chm"
+    add_custom_command(
+        OUTPUT "${BUILD_DIR}/${chmfile}" "${BUILD_DIR}/${mapfile}"
         COMMAND ${CMAKE_COMMAND} -v
            -D docname=${docname}
            -D SRC_DIR=${CMAKE_SOURCE_DIR}
@@ -21,10 +22,12 @@ function (add_chm_target docname lang entities figdir)
            "-Dentities=\"${entities}\""
            -D HHC=${HHC}
            -P ${CMAKE_SOURCE_DIR}/cmake/MakeChm.cmake
-        BYPRODUCTS "${BUILD_DIR}/${chmfile}" "${BUILD_DIR}/${mapfile}"
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd" ${figures}
         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/htmlhelp")
 
+    add_custom_target("${lang}-${docname}-chm"
+        DEPENDS "${BUILD_DIR}/${chmfile}" "${BUILD_DIR}/${mapfile}")
+
     add_dependencies(${docname}-chm "${lang}-${docname}-chm")
 
     install(FILES
diff --git a/cmake/AddEpubTarget.cmake b/cmake/AddEpubTarget.cmake
index 515ece8..c3ede27 100644
--- a/cmake/AddEpubTarget.cmake
+++ b/cmake/AddEpubTarget.cmake
@@ -7,7 +7,8 @@ function (add_epub_target docname lang entities figdir)
     set(BUILD_DIR "${DOCDIR_BUILD}/${lang}")
     file(MAKE_DIRECTORY "${BUILD_DIR}")
 
-    add_custom_target("${lang}-${docname}-epub"
+    add_custom_command(
+        OUTPUT "${BUILD_DIR}/${epubfile}"
         COMMAND rm -fr "${EPUB_TMPDIR}"
         COMMAND mkdir "${EPUB_TMPDIR}"
         COMMAND echo "application/epub+zip" > "${EPUB_TMPDIR}/mimetype"
@@ -21,9 +22,11 @@ function (add_epub_target docname lang entities figdir)
                             "${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml"
         COMMAND cmake -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/figures" "${EPUB_TMPDIR}/OEBPS/figures"
         COMMAND cd "${EPUB_TMPDIR}" && zip -X -r "${BUILD_DIR}/${epubfile}" mimetype META-INF OEBPS
-        BYPRODUCTS "${BUILD_DIR}/${epubfile}"
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd" ${figures})
 
+    add_custom_target("${lang}-${docname}-epub"
+        DEPENDS "${BUILD_DIR}/${epubfile}")
+
     add_dependencies(${docname}-epub "${lang}-${docname}-epub")
 
 endfunction()
@@ -36,10 +39,13 @@ function (add_mobi_target docname lang)
     set(epubfile "${BUILD_DIR}/${docname}.epub")
     set(mobifile "${BUILD_DIR}/${docname}.mobi")
 
+    add_custom_command(
+        OUTPUT "${mobifile}"
+        COMMAND ${EBOOK_CONVERT} "${epubfile}" "${mobifile}"
+        DEPENDS "${epubfile}")
+
     add_custom_target("${lang}-${docname}-mobi"
-        COMMAND ${EBOOK_CONVERT} ${epubfile} ${mobifile}
-        BYPRODUCTS "${mobifile}"
-        DEPENDS "${lang}-${docname}-epub")
+        DEPENDS "${epubfile}")
 
     add_dependencies(${docname}-mobi "${lang}-${docname}-mobi")
 
diff --git a/cmake/AddHtmlTarget.cmake b/cmake/AddHtmlTarget.cmake
index 4e4c05a..b94ee64 100644
--- a/cmake/AddHtmlTarget.cmake
+++ b/cmake/AddHtmlTarget.cmake
@@ -16,32 +16,42 @@ function (add_html_target docname lang entities figdir)
 
     set(BUILD_DIR "${DOCDIR_BUILD}/${lang}/${docname}")
     file(MAKE_DIRECTORY "${BUILD_DIR}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/stylesheet")
 
     # Convert xml to html with xsltproc
     # xsltproc --xinclude -o outputdir/ /usr/share/sgml/docbook/xsl-stylesheets/html/chunk.xsl filename.xml
-    add_custom_target("${lang}-${docname}-html-files"
+    add_custom_command(
+        OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/htmltrigger"
         COMMAND  ${XSLTPROC} ${XSLTPROCFLAGS} ${XSLTPROCFLAGS_HTML}
                              -o "${BUILD_DIR}/"
                              --param use.id.as.filename "1"
                              --stringparam chunker.output.encoding UTF-8
                              "${CMAKE_SOURCE_DIR}/xsl/general-customization.xsl"
                              "${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml"
+        COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/htmltrigger"
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
 
     # Copy figures for this document
     file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
-    add_custom_target("${lang}-${docname}-html-figures"
-        COMMAND  ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/${figdir}"
+    add_custom_command(
+        OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/figurestrigger"
+        COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/${figdir}"
+        COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/figurestrigger"
         DEPENDS ${figures})
 
     # Copy style icons for this document (warning, info,...)
     file(MAKE_DIRECTORY "${BUILD_DIR}/stylesheet")
-    add_custom_target("${lang}-${docname}-html-style"
+    add_custom_command(
+        OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/styletrigger"
         COMMAND  ${CMAKE_COMMAND} -E copy ${styleicons} "${BUILD_DIR}/stylesheet"
+        COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/styletrigger"
         DEPENDS ${styleicons})
 
     add_custom_target("${lang}-${docname}-html"
-        DEPENDS "${lang}-${docname}-html-files" "${lang}-${docname}-html-figures" "${lang}-${docname}-html-style")
+        DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/htmltrigger"
+                "${CMAKE_CURRENT_BINARY_DIR}/figurestrigger"
+                "${CMAKE_CURRENT_BINARY_DIR}/styletrigger")
 
     add_dependencies(${docname}-html "${lang}-${docname}-html")
 
diff --git a/cmake/AddPdfTarget.cmake b/cmake/AddPdfTarget.cmake
index 4d96226..7d73946 100644
--- a/cmake/AddPdfTarget.cmake
+++ b/cmake/AddPdfTarget.cmake
@@ -20,24 +20,28 @@ function (add_pdf_target docname lang entities figdir)
         endif()
     endif()
 
-    add_custom_target("${lang}-${docname}-fo"
+    add_custom_command(
+        OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${fofile}"
         COMMAND ${XSLTPROC} ${XSLTPROCFLAGS} ${XSLTPROCFLAGS_FO}
                             -o "${CMAKE_CURRENT_BINARY_DIR}/${fofile}"
                             --stringparam fop1.extensions 1
                             "${CMAKE_SOURCE_DIR}/xsl/1.79.2/fo/docbook.xsl"
                             "${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml"
-        BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${fofile}"
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
 
     configure_file("${FOP_XCONF}" "${CMAKE_CURRENT_BINARY_DIR}/fop.xconf")
-    add_custom_target("${lang}-${docname}-pdf"
+
+    add_custom_command(
+        OUTPUT "${BUILD_DIR}/${pdffile}"
         COMMAND ${FOP} ${FOPFLAGS}
                         -l ${lang}
                         -c "${CMAKE_CURRENT_BINARY_DIR}/fop.xconf"
                         -fo "${CMAKE_CURRENT_BINARY_DIR}/${fofile}"
                         -pdf "${BUILD_DIR}/${pdffile}"
-        BYPRODUCTS "${BUILD_DIR}/${pdffile}"
-        DEPENDS ${lang}-${docname}-fo ${figures})
+        DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${fofile}" ${figures})
+
+    add_custom_target("${lang}-${docname}-pdf"
+        DEPENDS "${BUILD_DIR}/${pdffile}")
 
     add_dependencies(${docname}-pdf "${lang}-${docname}-pdf")
 
diff --git a/cmake/MakeChm.cmake b/cmake/MakeChm.cmake
index ae773eb..ef977f9 100644
--- a/cmake/MakeChm.cmake
+++ b/cmake/MakeChm.cmake
@@ -53,7 +53,6 @@ foreach(src_xml ${entities})
     endforeach()
 endforeach()
 
-
 set(HHP "${HHP};${MAP}")
 string(REPLACE ";" "\n" HHP_OUT "${HHP}")
 string(REPLACE ";" "\n" HHMAP_OUT "${HHMAP}")

commit 9899639bd32b9e369da978bf1b026ff51145e248
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Fri Sep 6 19:48:57 2019 +0200

    CMake - Define options to enable or disable document formats
    
    The defaults depend on the target platform
    - Windows: only the chm format is enabled by default
    - Other: all but chm and mobi formats are enabled by default

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 404d8f6..0edfdbb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,7 +35,24 @@ unset(dist_files CACHE)
 # ############################################################
 # These options are settable from the CMake command line. For example,
 # to enable mobi, put -D WITH_MOBI=ON on the command line.
-
+# To mimic the autotools' behaviour the targets enabled by default
+# are different for Windows vs the other supported platforms.
+# On windows only chm is enabled by default
+# On any other platform chm and mobi are disabled by default
+
+if(NOT WIN32)
+    option (WITH_XML "Enable build rules for xml document format" ON)
+    option (WITH_HTML "Enable build rules for html document format" ON)
+    option (WITH_PDF "Enable build rules for pdf document format" ON)
+    option (WITH_EPUB "Enable build rules for epub document format" ON)
+    option (WITH_CHM "Enable build rules for chm document format" OFF)
+else()
+    option (WITH_XML "Enable build rules for xml document format" OFF)
+    option (WITH_HTML "Enable build rules for html document format" OFF)
+    option (WITH_PDF "Enable build rules for pdf document format" OFF)
+    option (WITH_EPUB "Enable build rules for epub document format" OFF)
+    option (WITH_CHM "Enable build rules for chm document format" ON)
+endif()
 option (WITH_MOBI "Enable build rules for Mobipocket document format" OFF)
 
 # ############################################################
@@ -74,21 +91,22 @@ if(NOT XMLLINT)
 endif(NOT XMLLINT)
 
 # Check for optional fop
-set (PDF YES)
-find_program(FOP fop)
-if(NOT FOP)
-    message(WARNING "Can't find fop. You will not be able to generate PDF files.")
-    set (PDF NO)
-endif(NOT FOP)
-
-set(MOBI NO)
+if(WITH_PDF)
+    find_program(FOP fop)
+    if(NOT FOP)
+        message(WARNING "Can't find fop. You will not be able to generate PDF files.")
+        set (WITH_PDF OFF)
+    endif(NOT FOP)
+endif()
+
 if(WITH_MOBI)
     find_program(EBOOK_CONVERT ebook-convert)
-    if (EBOOK_CONVERT)
-        set(MOBI YES)
-    else()
+    if (NOT EBOOK_CONVERT)
+        set(WITH_MOBI OFF)
         message(SEND_ERROR "Couldn't find ebook-convert required for mobi file format support. Please install the Calibre package: https://www.calibre-ebook.com/")
     endif()
+    # Mobi is based on epub so enable epub if mobi is requested
+    set(WITH_EPUB ON)
 else()
     message(STATUS "Mobi file format support is disabled.  Specify -DWITH_MOBY=ON if you want to enable it.")
 endif()
@@ -104,32 +122,43 @@ set (FOP_XCONF_DFLT "${CMAKE_SOURCE_DIR}/fop.xconf.in")
 set (FOP_XCONF "${FOP_XCONF_DFLT}")
 
 # Find the htmlhelp compiler for chm output
-if(WIN32)
-    find_program(HHC hhc.exe
-        PATHS "c:/Program Files (x86)/Html Help Workshop" "c:/Program Files/Html Help Workshop")
-    if(NOT HHC)
-        message(ERROR "Html Help Workshop not found")
-    endif()
-else(WIN32)
-    find_program(HHC chmcmd)
-    if(NOT HHC)
-        message(STATUS "Free Pascal's chmcmd not found. The chm build rules will not be able to generate the final chm file, but are still enabled for debugging purposes.")
-    endif()
-endif(WIN32)
+if(WITH_CHM)
+    if(WIN32)
+        find_program(HHC hhc.exe
+            PATHS "c:/Program Files (x86)/Html Help Workshop" "c:/Program Files/Html Help Workshop")
+        if(NOT HHC)
+            message(SEND_ERROR "Html Help Workshop not found")
+        endif()
+    else(WIN32)
+        find_program(HHC chmcmd)
+        if(NOT HHC)
+            set(WITH_CHM OFF)
+            message(WARNING "Free Pascal's chmcmd not found. Chm related targets will be disabled.")
+        endif()
+    endif(WIN32)
+endif(WITH_CHM)
 
 # The global targets. Their dependencies will be filled in by subsequent commands in
 # the respective subdirectories.
-add_custom_target(html)
 add_custom_target(check)
-add_custom_target(xml)
-if (PDF)
+if (WITH_HTML)
+    add_custom_target(html)
+endif()
+if (WITH_XML)
+    add_custom_target(xml)
+endif()
+if (WITH_PDF)
     add_custom_target(pdf)
 endif()
-add_custom_target(epub)
-if (MOBI)
+if (WITH_EPUB)
+    add_custom_target(epub)
+endif()
+if (WITH_MOBI)
     add_custom_target(mobi)
 endif()
-add_custom_target(chm)
+if (WITH_CHM)
+    add_custom_target(chm)
+endif()
 
 
 add_subdirectory (guide)
diff --git a/cmake/AddEpubTarget.cmake b/cmake/AddEpubTarget.cmake
index da241aa..515ece8 100644
--- a/cmake/AddEpubTarget.cmake
+++ b/cmake/AddEpubTarget.cmake
@@ -39,7 +39,7 @@ function (add_mobi_target docname lang)
     add_custom_target("${lang}-${docname}-mobi"
         COMMAND ${EBOOK_CONVERT} ${epubfile} ${mobifile}
         BYPRODUCTS "${mobifile}"
-        DEPENDS "${epubfile}")
+        DEPENDS "${lang}-${docname}-epub")
 
     add_dependencies(${docname}-mobi "${lang}-${docname}-mobi")
 
diff --git a/cmake/AddGncDocTargets.cmake b/cmake/AddGncDocTargets.cmake
index cf4c277..a6d2f04 100644
--- a/cmake/AddGncDocTargets.cmake
+++ b/cmake/AddGncDocTargets.cmake
@@ -3,14 +3,23 @@ function (add_gnc_doc_targets docname entities)
     get_filename_component(lang ${CMAKE_CURRENT_SOURCE_DIR} NAME)
 
     if(entities)
-        add_chm_target(${docname} ${lang} "${entities}" figures)
-        add_xml_target(${docname} ${lang} "${entities}" figures)
-        add_html_target(${docname} ${lang} "${entities}" figures)
-        if (PDF)
+        add_check_target(${docname} ${lang} "${entities}" figures)
+        if (WITH_CHM)
+            add_chm_target(${docname} ${lang} "${entities}" figures)
+        endif()
+        if (WITH_XML)
+            add_xml_target(${docname} ${lang} "${entities}" figures)
+        endif()
+        if (WITH_HTML)
+            add_html_target(${docname} ${lang} "${entities}" figures)
+        endif()
+        if (WITH_PDF)
             add_pdf_target(${docname} ${lang} "${entities}" figures)
         endif()
-        add_epub_target(${docname} ${lang} "${entities}" figures)
-        if (MOBI)
+        if (WITH_EPUB)
+            add_epub_target(${docname} ${lang} "${entities}" figures)
+        endif()
+        if (WITH_MOBI)
             add_mobi_target(${docname} ${lang})
         endif()
     endif()
diff --git a/cmake/AddXmlTarget.cmake b/cmake/AddXmlTarget.cmake
index 21189c5..a74c9bf 100644
--- a/cmake/AddXmlTarget.cmake
+++ b/cmake/AddXmlTarget.cmake
@@ -21,7 +21,10 @@ function (add_xml_target docname lang entities figdir)
     install(FILES ${figures}
         DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/${figdir}"
         COMPONENT "${docname}-xml")
+endfunction()
+
 
+function (add_check_target docname lang entities figdir)
     add_custom_target("${lang}-${docname}-check"
         COMMAND  ${XMLLINT} --postvalid
                             --xinclude
@@ -32,8 +35,4 @@ function (add_xml_target docname lang entities figdir)
 
     add_dependencies(${docname}-check "${lang}-${docname}-check")
 
-# TODO Uninstall target
-# uninstall-hook:
-# 	rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(gnomehelpfiguresdir)"
-# 	rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(gnomehelpdir)"
 endfunction()
diff --git a/guide/CMakeLists.txt b/guide/CMakeLists.txt
index 86633bf..2048a53 100644
--- a/guide/CMakeLists.txt
+++ b/guide/CMakeLists.txt
@@ -1,31 +1,38 @@
 set (docname "gnucash-guide")
 
-add_custom_target(${docname}-html)
-add_dependencies(html ${docname}-html)
-
 add_custom_target(${docname}-check)
 add_dependencies(check ${docname}-check)
 
-add_custom_target(${docname}-xml
-    DEPENDS ${docname}-check
-)
-add_dependencies(xml ${docname}-xml)
+if (WITH_HTML)
+    add_custom_target(${docname}-html)
+    add_dependencies(html ${docname}-html)
+endif()
+
+if (WITH_XML)
+    add_custom_target(${docname}-xml
+        DEPENDS ${docname}-check)
+    add_dependencies(xml ${docname}-xml)
+endif()
 
-if (PDF)
+if (WITH_PDF)
     add_custom_target(${docname}-pdf)
     add_dependencies(pdf ${docname}-pdf)
 endif()
 
-add_custom_target(${docname}-epub)
-add_dependencies(epub ${docname}-epub)
+if (WITH_EPUB)
+    add_custom_target(${docname}-epub)
+    add_dependencies(epub ${docname}-epub)
+endif()
 
-if (MOBI)
+if (WITH_MOBI)
     add_custom_target(${docname}-mobi)
     add_dependencies(mobi ${docname}-mobi)
 endif()
 
-add_custom_target(${docname}-chm)
-add_dependencies(chm ${docname}-chm)
+if (WITH_CHM)
+    add_custom_target(${docname}-chm)
+    add_dependencies(chm ${docname}-chm)
+endif()
 
 add_subdirectory(C)
 add_subdirectory(de)
diff --git a/help/CMakeLists.txt b/help/CMakeLists.txt
index 6aabf28..aa52ae0 100644
--- a/help/CMakeLists.txt
+++ b/help/CMakeLists.txt
@@ -1,31 +1,38 @@
 set (docname "gnucash-help")
 
-add_custom_target(${docname}-html)
-add_dependencies(html ${docname}-html)
-
 add_custom_target(${docname}-check)
 add_dependencies(check ${docname}-check)
 
-add_custom_target(${docname}-xml
-    DEPENDS ${docname}-check
-)
-add_dependencies(xml ${docname}-xml)
+if (WITH_HTML)
+    add_custom_target(${docname}-html)
+    add_dependencies(html ${docname}-html)
+endif()
+
+if (WITH_XML)
+    add_custom_target(${docname}-xml
+        DEPENDS ${docname}-check)
+    add_dependencies(xml ${docname}-xml)
+endif()
 
-if (PDF)
+if (WITH_PDF)
     add_custom_target(${docname}-pdf)
     add_dependencies(pdf ${docname}-pdf)
 endif()
 
-add_custom_target(${docname}-epub)
-add_dependencies(epub ${docname}-epub)
+if (WITH_EPUB)
+    add_custom_target(${docname}-epub)
+    add_dependencies(epub ${docname}-epub)
+endif()
 
-if (MOBI)
+if (WITH_MOBI)
     add_custom_target(${docname}-mobi)
     add_dependencies(mobi ${docname}-mobi)
 endif()
 
-add_custom_target(${docname}-chm)
-add_dependencies(chm ${docname}-chm)
+if (WITH_CHM)
+    add_custom_target(${docname}-chm)
+    add_dependencies(chm ${docname}-chm)
+endif()
 
 add_subdirectory(C)
 add_subdirectory(de)

commit ac183ad9135f62d36cdaff7111926abee0a4feb3
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Fri Sep 6 19:13:26 2019 +0200

    CMake - Add uninstall target

diff --git a/CMakeLists.txt b/CMakeLists.txt
index fefa165..404d8f6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -201,3 +201,12 @@ add_custom_target(distcheck DEPENDS dist
         )
 
 ############################# END MAKE DIST #################
+
+# uninstall target
+configure_file(
+        "${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
+        "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+        @ONLY)
+
+add_custom_target(uninstall
+        COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
diff --git a/CMakeNotes.txt b/CMakeNotes.txt
index 05d2670..6a84f1a 100644
--- a/CMakeNotes.txt
+++ b/CMakeNotes.txt
@@ -8,10 +8,9 @@ Current status:
 - the common code to generate xml (install only) and html (build
   and install) has been ported to cmake commands
 - pdf, epub and mobi generation has been ported
-- dist and distcheck targets are implemented
+- dist and distcheck and uninstall targets are implemented
 
 To do:
-- provide uninstall functionality like in the gnucash cmake build system
 - handle the special build rules for it (guide and help)
 - add windows specific chm file generation
 
diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in
new file mode 100644
index 0000000..f3b1d03
--- /dev/null
+++ b/cmake/cmake_uninstall.cmake.in
@@ -0,0 +1,23 @@
+# This is taken from https://cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
+
+if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+  message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+
+file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
+string(REGEX REPLACE "\n" ";" files "${files}")
+foreach(file ${files})
+  message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
+  if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+    exec_program(
+      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
+      OUTPUT_VARIABLE rm_out
+      RETURN_VALUE rm_retval
+      )
+    if(NOT "${rm_retval}" STREQUAL 0)
+      message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
+    endif(NOT "${rm_retval}" STREQUAL 0)
+  else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+    message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
+  endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+endforeach(file)

commit ee29380ca75fb3af0b559a578271aea289de7252
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Fri Sep 6 19:03:15 2019 +0200

    CMake - revisit build and install file locations
    
    - add install rules only for xml (gnome-help) and chm (windows help).
      For the other documentation formats there's not much use as they
      are not typically installed
    - at build time mimic the install locations. That is all final documents
      that we build will be stored under BUILD_DIR/share/doc/gnucash-docs/LANG
      You will find there a directory for the html format and the final documents
      for the other formats (pdf, chm, epub, mobi)
    - files that are only needed to build the end document formats will
      remain in the traditional build directories
      (BUILDDIR/guide/LANG and BUILDDIR/help/LANG)
      These are for example the intermediate fo file (which is used
      for final pdf generation), the fop xconf file, a temporary directory
      used for epub generation,...

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b6b7023..fefa165 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -52,6 +52,10 @@ set(JAPANESE_MINCHO_TTF "ume-tmo3.ttf" CACHE STRING "Mincho TrueType font used f
 set(JAPANESE_GOTHIC_TTF "ume-tmo3.ttf" CACHE STRING "Gothic TrueType font used for Japanese pdf")
 set(japanese_fontdir "${CMAKE_SOURCE_DIR}/fonts/truetype" CACHE STRING "Directory to search for Japanese fonts")
 
+# Buildtime destination directories for our generated documentation
+set(DATADIR_BUILD "${CMAKE_BINARY_DIR}/share")
+set(DOCDIR_BUILD  "${DATADIR_BUILD}/doc/${PACKAGE}")
+
 # ############################################################
 # Find the documentation dependencies
 
diff --git a/cmake/AddChmTarget.cmake b/cmake/AddChmTarget.cmake
index 61aebc7..28cf33b 100644
--- a/cmake/AddChmTarget.cmake
+++ b/cmake/AddChmTarget.cmake
@@ -3,6 +3,9 @@ function (add_chm_target docname lang entities figdir)
     set(chmfile "${docname}.chm")
     set(mapfile "${docname}.hhmap")
 
+    set(BUILD_DIR "${DOCDIR_BUILD}/${lang}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}")
+
     file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
 
     file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/htmlhelp")
@@ -12,15 +15,22 @@ function (add_chm_target docname lang entities figdir)
            -D SRC_DIR=${CMAKE_SOURCE_DIR}
            -D CURRENT_SRC_DIR=${CMAKE_CURRENT_SOURCE_DIR}
            -D CURRENT_BIN_DIR=${CMAKE_CURRENT_BINARY_DIR}
+           -D BUILD_DIR=${BUILD_DIR}
            -D XSLTPROC=${XSLTPROC}
            "-DXSLTPROCFLAGS=\"${XSLTPROCFLAGS}\""
            "-Dentities=\"${entities}\""
            -D HHC=${HHC}
            -P ${CMAKE_SOURCE_DIR}/cmake/MakeChm.cmake
-        # TODO amend htmlhelp.hhp, create mymaps and htmlhelp.hhmap, run hhc
+        BYPRODUCTS "${BUILD_DIR}/${chmfile}" "${BUILD_DIR}/${mapfile}"
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd" ${figures}
         WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/htmlhelp")
 
     add_dependencies(${docname}-chm "${lang}-${docname}-chm")
 
+    install(FILES
+            "${BUILD_DIR}/${chmfile}"
+            "${BUILD_DIR}/${mapfile}"
+        DESTINATION "${CMAKE_INSTALL_DOCDIR}/${lang}"
+        COMPONENT "${docname}-chm")
+
 endfunction()
diff --git a/cmake/AddEpubTarget.cmake b/cmake/AddEpubTarget.cmake
index c2498eb..da241aa 100644
--- a/cmake/AddEpubTarget.cmake
+++ b/cmake/AddEpubTarget.cmake
@@ -1,9 +1,12 @@
 function (add_epub_target docname lang entities figdir)
 
     set(epubfile "${docname}.epub")
-    set(EPUB_TMPDIR "${CMAKE_CURRENT_BINARY_DIR}/epub_tmp")
+    set(EPUB_TMPDIR "${CMAKE_CURRENT_BINARY_DIR}/epub")
     file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
 
+    set(BUILD_DIR "${DOCDIR_BUILD}/${lang}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}")
+
     add_custom_target("${lang}-${docname}-epub"
         COMMAND rm -fr "${EPUB_TMPDIR}"
         COMMAND mkdir "${EPUB_TMPDIR}"
@@ -17,26 +20,27 @@ function (add_epub_target docname lang entities figdir)
                             "${CMAKE_SOURCE_DIR}/xsl/1.79.2/epub/docbook.xsl"
                             "${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml"
         COMMAND cmake -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/figures" "${EPUB_TMPDIR}/OEBPS/figures"
-        COMMAND cd "${EPUB_TMPDIR}" && zip -X -r ../${epubfile} mimetype META-INF OEBPS
+        COMMAND cd "${EPUB_TMPDIR}" && zip -X -r "${BUILD_DIR}/${epubfile}" mimetype META-INF OEBPS
+        BYPRODUCTS "${BUILD_DIR}/${epubfile}"
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd" ${figures})
 
     add_dependencies(${docname}-epub "${lang}-${docname}-epub")
 
-#     CLEANFILES += $(epubfile)
-
 endfunction()
 
 function (add_mobi_target docname lang)
 
-    set(epubfile "${CMAKE_CURRENT_BINARY_DIR}/${docname}.epub")
-    set(mobifile "${CMAKE_CURRENT_BINARY_DIR}/${docname}.mobi")
+    set(BUILD_DIR "${DOCDIR_BUILD}/${lang}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}")
+
+    set(epubfile "${BUILD_DIR}/${docname}.epub")
+    set(mobifile "${BUILD_DIR}/${docname}.mobi")
 
     add_custom_target("${lang}-${docname}-mobi"
         COMMAND ${EBOOK_CONVERT} ${epubfile} ${mobifile}
-        DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${docname}.epub")
+        BYPRODUCTS "${mobifile}"
+        DEPENDS "${epubfile}")
 
     add_dependencies(${docname}-mobi "${lang}-${docname}-mobi")
 
-#     CLEANFILES += $(epubfile)
-
 endfunction()
diff --git a/cmake/AddHtmlTarget.cmake b/cmake/AddHtmlTarget.cmake
index 40417e8..4e4c05a 100644
--- a/cmake/AddHtmlTarget.cmake
+++ b/cmake/AddHtmlTarget.cmake
@@ -14,15 +14,14 @@ function (add_html_target docname lang entities figdir)
     set(styledir "${CMAKE_SOURCE_DIR}/stylesheet")
     file(GLOB styleicons "${CMAKE_SOURCE_DIR}/stylesheet/*.png")
 
-    # TODO clean target
-    #CLEANFILES += $(docname)/*.html
+    set(BUILD_DIR "${DOCDIR_BUILD}/${lang}/${docname}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}")
 
     # Convert xml to html with xsltproc
     # xsltproc --xinclude -o outputdir/ /usr/share/sgml/docbook/xsl-stylesheets/html/chunk.xsl filename.xml
-    file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${docname}")
     add_custom_target("${lang}-${docname}-html-files"
         COMMAND  ${XSLTPROC} ${XSLTPROCFLAGS} ${XSLTPROCFLAGS_HTML}
-                             -o "${CMAKE_CURRENT_BINARY_DIR}/${docname}/"
+                             -o "${BUILD_DIR}/"
                              --param use.id.as.filename "1"
                              --stringparam chunker.output.encoding UTF-8
                              "${CMAKE_SOURCE_DIR}/xsl/general-customization.xsl"
@@ -30,15 +29,15 @@ function (add_html_target docname lang entities figdir)
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
 
     # Copy figures for this document
-    file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${docname}/${figdir}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/${figdir}")
     add_custom_target("${lang}-${docname}-html-figures"
-        COMMAND  ${CMAKE_COMMAND} -E copy ${figures} "${CMAKE_CURRENT_BINARY_DIR}/${docname}/${figdir}"
+        COMMAND  ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/${figdir}"
         DEPENDS ${figures})
 
     # Copy style icons for this document (warning, info,...)
-    file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${docname}/stylesheet")
+    file(MAKE_DIRECTORY "${BUILD_DIR}/stylesheet")
     add_custom_target("${lang}-${docname}-html-style"
-        COMMAND  ${CMAKE_COMMAND} -E copy ${styleicons} "${CMAKE_CURRENT_BINARY_DIR}/${docname}/stylesheet"
+        COMMAND  ${CMAKE_COMMAND} -E copy ${styleicons} "${BUILD_DIR}/stylesheet"
         DEPENDS ${styleicons})
 
     add_custom_target("${lang}-${docname}-html"
@@ -46,30 +45,4 @@ function (add_html_target docname lang entities figdir)
 
     add_dependencies(${docname}-html "${lang}-${docname}-html")
 
-    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${docname}
-        DESTINATION "${CMAKE_INSTALL_DOCDIR}/${PACKAGE_NAME}/${lang}"
-        COMPONENT "${lang}-${docname}-html")
-
-    # TODO uninstall target
-#     uninstall-html:
-#             -if test "$(docname)"; then \
-#                 if test "$(figdir)"; then \
-#                     for file in $(docname)/$(figdir)/*.png; do \
-#                         basefile=`basename $$file`; \
-#                         rm -f "$(DESTDIR)$(otherdocdir)/$(docname)/$(figdir)/$$basefile"; \
-#                     done; \
-#                     rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(otherdocdir)/$(docname)/$(figdir)"; \
-#                 fi; \
-#                 for file in $(styledir)/*.png; do \
-#                     basefile=`basename $$file`; \
-#                     rm -f "$(DESTDIR)$(otherdocdir)/$(docname)/stylesheet/$$basefile"; \
-#                 done; \
-#                 rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(otherdocdir)/$(docname)/stylesheet"; \
-#                 for file in $(docname)/*.html; do \
-#                     basefile=`basename $$file`; \
-#                     rm -f "$(DESTDIR)$(otherdocdir)/$(docname)/$$basefile"; \
-#                 done; \
-#                 rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(otherdocdir)/$(docname)"; \
-#                 rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(otherdocdir)"; \
-#             fi
 endfunction()
diff --git a/cmake/AddPdfTarget.cmake b/cmake/AddPdfTarget.cmake
index b1af7ac..4d96226 100644
--- a/cmake/AddPdfTarget.cmake
+++ b/cmake/AddPdfTarget.cmake
@@ -4,6 +4,9 @@ function (add_pdf_target docname lang entities figdir)
     set(pdffile "${docname}.pdf")
     file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
 
+    set(BUILD_DIR "${DOCDIR_BUILD}/${lang}")
+    file(MAKE_DIRECTORY "${BUILD_DIR}")
+
     # Determine paper format depending on language (which maps to the document's directory name)
     # * for language "C" (fallback language) determine paper format based on current locale
     # * for other languages, the will be set to letter. All others use A4.
@@ -23,6 +26,7 @@ function (add_pdf_target docname lang entities figdir)
                             --stringparam fop1.extensions 1
                             "${CMAKE_SOURCE_DIR}/xsl/1.79.2/fo/docbook.xsl"
                             "${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml"
+        BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${fofile}"
         DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
 
     configure_file("${FOP_XCONF}" "${CMAKE_CURRENT_BINARY_DIR}/fop.xconf")
@@ -31,7 +35,8 @@ function (add_pdf_target docname lang entities figdir)
                         -l ${lang}
                         -c "${CMAKE_CURRENT_BINARY_DIR}/fop.xconf"
                         -fo "${CMAKE_CURRENT_BINARY_DIR}/${fofile}"
-                        -pdf "${CMAKE_CURRENT_BINARY_DIR}/${pdffile}"
+                        -pdf "${BUILD_DIR}/${pdffile}"
+        BYPRODUCTS "${BUILD_DIR}/${pdffile}"
         DEPENDS ${lang}-${docname}-fo ${figures})
 
     add_dependencies(${docname}-pdf "${lang}-${docname}-pdf")
diff --git a/cmake/AddXmlTarget.cmake b/cmake/AddXmlTarget.cmake
index 9c1a13d..21189c5 100644
--- a/cmake/AddXmlTarget.cmake
+++ b/cmake/AddXmlTarget.cmake
@@ -17,10 +17,10 @@ function (add_xml_target docname lang entities figdir)
 
     install(FILES ${xml_files}
         DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}"
-        COMPONENT "${lang}-${docname}-xml")
+        COMPONENT "${docname}-xml")
     install(FILES ${figures}
         DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/${figdir}"
-        COMPONENT "${lang}-${docname}-xml")
+        COMPONENT "${docname}-xml")
 
     add_custom_target("${lang}-${docname}-check"
         COMMAND  ${XMLLINT} --postvalid
@@ -32,10 +32,8 @@ function (add_xml_target docname lang entities figdir)
 
     add_dependencies(${docname}-check "${lang}-${docname}-check")
 
-# TODO Uninstall and dist targets
+# TODO Uninstall target
 # uninstall-hook:
 # 	rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(gnomehelpfiguresdir)"
 # 	rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(gnomehelpdir)"
-#
-# EXTRA_DIST = ${xml_files} ${omffile} ${figures}
 endfunction()
diff --git a/cmake/MakeChm.cmake b/cmake/MakeChm.cmake
index 46f62bf..ae773eb 100644
--- a/cmake/MakeChm.cmake
+++ b/cmake/MakeChm.cmake
@@ -58,11 +58,13 @@ set(HHP "${HHP};${MAP}")
 string(REPLACE ";" "\n" HHP_OUT "${HHP}")
 string(REPLACE ";" "\n" HHMAP_OUT "${HHMAP}")
 file(APPEND "${htmlhelpdir}/htmlhelp.hhp" ${HHP_OUT})
-file(WRITE "${CURRENT_BIN_DIR}/htmlhelp/${mapfile}" ${HHMAP_OUT})
+file(WRITE "${BUILD_DIR}/${mapfile}" ${HHMAP_OUT})
 
 execute_process(
     COMMAND ${HHC} htmlhelp.hhp
-    WORKING_DIRECTORY "${CURRENT_BIN_DIR}/htmlhelp"
-#    OUTPUT_QUIET
-#    ERROR_QUIET
+    WORKING_DIRECTORY "${htmlhelpdir}"
+    OUTPUT_QUIET
+    ERROR_QUIET
 )
+
+file(COPY "${htmlhelpdir}/${docname}.chm" DESTINATION "${BUILD_DIR}")

commit 715f7fa0e69b33b079f1b847cfe009147bcae398
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Wed Sep 4 22:07:49 2019 +0200

    CMake - add chm target for windows documentation

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9332fcd..b6b7023 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,6 +20,7 @@ set (PACKAGE_URL "https://www.gnucash.org/")
 
 # Extra cmake macros
 set (CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
+include (AddChmTarget)
 include (AddEpubTarget)
 include (AddHtmlTarget)
 include (AddPdfTarget)
@@ -98,21 +99,19 @@ endif()
 set (FOP_XCONF_DFLT "${CMAKE_SOURCE_DIR}/fop.xconf.in")
 set (FOP_XCONF "${FOP_XCONF_DFLT}")
 
-#
-# ac_cv_gnc_windows="no"
-# case $host_os in
-#   mingw*)
-#   ac_cv_gnc_windows="yes"
-#   AC_PATH_PROG([HHC], hhc.exe, [hhc_not_found], [/c/Program Files (x86)/Html Help Workshop:/c/Program Files/Html Help Workshop])
-#   if test ! -x "${HHC}"; then
-#      AC_MSG_ERROR([Html Help Workshop Not Found])
-#   fi
-#   AM_EXTRA_RECURSIVE_TARGETS([chm install-chm])
-#   ;;
-#   *)
-#   ;;
-# esac
-# AM_CONDITIONAL([GNC_WINDOWS], [test x${ac_cv_gnc_windows} = "xyes"])
+# Find the htmlhelp compiler for chm output
+if(WIN32)
+    find_program(HHC hhc.exe
+        PATHS "c:/Program Files (x86)/Html Help Workshop" "c:/Program Files/Html Help Workshop")
+    if(NOT HHC)
+        message(ERROR "Html Help Workshop not found")
+    endif()
+else(WIN32)
+    find_program(HHC chmcmd)
+    if(NOT HHC)
+        message(STATUS "Free Pascal's chmcmd not found. The chm build rules will not be able to generate the final chm file, but are still enabled for debugging purposes.")
+    endif()
+endif(WIN32)
 
 # The global targets. Their dependencies will be filled in by subsequent commands in
 # the respective subdirectories.
@@ -126,6 +125,7 @@ add_custom_target(epub)
 if (MOBI)
     add_custom_target(mobi)
 endif()
+add_custom_target(chm)
 
 
 add_subdirectory (guide)
diff --git a/cmake/AddChmTarget.cmake b/cmake/AddChmTarget.cmake
new file mode 100644
index 0000000..61aebc7
--- /dev/null
+++ b/cmake/AddChmTarget.cmake
@@ -0,0 +1,26 @@
+function (add_chm_target docname lang entities figdir)
+
+    set(chmfile "${docname}.chm")
+    set(mapfile "${docname}.hhmap")
+
+    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
+
+    file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/htmlhelp")
+    add_custom_target("${lang}-${docname}-chm"
+        COMMAND ${CMAKE_COMMAND} -v
+           -D docname=${docname}
+           -D SRC_DIR=${CMAKE_SOURCE_DIR}
+           -D CURRENT_SRC_DIR=${CMAKE_CURRENT_SOURCE_DIR}
+           -D CURRENT_BIN_DIR=${CMAKE_CURRENT_BINARY_DIR}
+           -D XSLTPROC=${XSLTPROC}
+           "-DXSLTPROCFLAGS=\"${XSLTPROCFLAGS}\""
+           "-Dentities=\"${entities}\""
+           -D HHC=${HHC}
+           -P ${CMAKE_SOURCE_DIR}/cmake/MakeChm.cmake
+        # TODO amend htmlhelp.hhp, create mymaps and htmlhelp.hhmap, run hhc
+        DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd" ${figures}
+        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/htmlhelp")
+
+    add_dependencies(${docname}-chm "${lang}-${docname}-chm")
+
+endfunction()
diff --git a/cmake/AddGncDocTargets.cmake b/cmake/AddGncDocTargets.cmake
index e3c14ec..cf4c277 100644
--- a/cmake/AddGncDocTargets.cmake
+++ b/cmake/AddGncDocTargets.cmake
@@ -3,6 +3,7 @@ function (add_gnc_doc_targets docname entities)
     get_filename_component(lang ${CMAKE_CURRENT_SOURCE_DIR} NAME)
 
     if(entities)
+        add_chm_target(${docname} ${lang} "${entities}" figures)
         add_xml_target(${docname} ${lang} "${entities}" figures)
         add_html_target(${docname} ${lang} "${entities}" figures)
         if (PDF)
diff --git a/cmake/MakeChm.cmake b/cmake/MakeChm.cmake
new file mode 100644
index 0000000..46f62bf
--- /dev/null
+++ b/cmake/MakeChm.cmake
@@ -0,0 +1,68 @@
+# Create CHM help files for Win32
+# Procedure translated to cmake from make_chm() in gnucash-on-windows.git:install-impl.sh,
+# originally written by Andreas Köhler.
+
+
+set(chmfile "${docname}.chm")
+set(mapfile "${docname}.hhmap")
+set(htmlhelpdir "${CURRENT_BIN_DIR}/htmlhelp")
+
+#string(REPLACE ";" " " xlstprocflagslst "${XSLTPROCFLAGS}")
+#message(STATUS "XSLTPROCFLAGS: ${XSLTPROCFLAGS}\nxlstprocflagslst: ${xlstprocflagslst}")
+
+set(htmlhelp_xsl "http://docbook.sourceforge.net/release/xsl/current/htmlhelp/htmlhelp.xsl")
+
+execute_process(
+    # FIXME Reusing ${XSLTPROCFLAGS} fails as xsltproc gets this as one single parameter instead of 3...
+    COMMAND ${XSLTPROC} --path "${SRC_DIR}/docbook" --xinclude
+                        --stringparam htmlhelp.chm ${chmfile}
+                        "${SRC_DIR}/xsl/1.79.2/htmlhelp/htmlhelp.xsl"
+                        "${CURRENT_SRC_DIR}/${docname}.xml"
+    WORKING_DIRECTORY "${htmlhelpdir}")
+
+file(COPY "${CURRENT_SRC_DIR}/figures" DESTINATION "${htmlhelpdir}")
+
+set(count 0)
+set(HPP "")
+list(APPEND HHP "" "[ALIAS]" "IDH_0=index.html")
+set(MAP "")
+list(APPEND MAP "" "[MAP]" "#define IDH_0 0")
+set(HHMAP "[MAP]")
+message(STATUS "Searching for anchors...")
+
+file(GLOB allhtml RELATIVE "${htmlhelpdir}" "${htmlhelpdir}/*.html")
+foreach(src_xml ${entities})
+    file(STRINGS "${CURRENT_SRC_DIR}/${src_xml}" sectlines REGEX "sect.*id=[\"'][^\"']*[\"']")
+    foreach(sectline ${sectlines})
+        string(REGEX REPLACE ".*sect.*id=[\"']([^\"']*)[\"'].*" "\\1" sectid ${sectline})
+        #message(STATUS "allhtml: ${allhtml}\nsectline: ${sectline}\nsrc_xml: ${sectid}")
+        unset(html_id_file)
+        foreach(htmlfile ${allhtml})
+            file(STRINGS "${htmlhelpdir}/${htmlfile}" searchresult REGEX "[\"']${sectid}[\"']")
+            if(searchresult)
+                set(html_id_file ${htmlfile})
+                break()
+            endif()
+        endforeach()
+        if(html_id_file)
+            MATH(EXPR count "${count}+1")
+            list(APPEND HHP "IDH_${count}=${html_id_file}#${sectid}")
+            list(APPEND MAP "#define IDH_${count} ${count}")
+            list(APPEND HHMAP "${sectid}=${count}")
+        endif()
+    endforeach()
+endforeach()
+
+
+set(HHP "${HHP};${MAP}")
+string(REPLACE ";" "\n" HHP_OUT "${HHP}")
+string(REPLACE ";" "\n" HHMAP_OUT "${HHMAP}")
+file(APPEND "${htmlhelpdir}/htmlhelp.hhp" ${HHP_OUT})
+file(WRITE "${CURRENT_BIN_DIR}/htmlhelp/${mapfile}" ${HHMAP_OUT})
+
+execute_process(
+    COMMAND ${HHC} htmlhelp.hhp
+    WORKING_DIRECTORY "${CURRENT_BIN_DIR}/htmlhelp"
+#    OUTPUT_QUIET
+#    ERROR_QUIET
+)
diff --git a/guide/CMakeLists.txt b/guide/CMakeLists.txt
index b099e2b..86633bf 100644
--- a/guide/CMakeLists.txt
+++ b/guide/CMakeLists.txt
@@ -24,6 +24,9 @@ if (MOBI)
     add_dependencies(mobi ${docname}-mobi)
 endif()
 
+add_custom_target(${docname}-chm)
+add_dependencies(chm ${docname}-chm)
+
 add_subdirectory(C)
 add_subdirectory(de)
 add_subdirectory(it)
diff --git a/help/CMakeLists.txt b/help/CMakeLists.txt
index ab7aab2..6aabf28 100644
--- a/help/CMakeLists.txt
+++ b/help/CMakeLists.txt
@@ -24,6 +24,9 @@ if (MOBI)
     add_dependencies(mobi ${docname}-mobi)
 endif()
 
+add_custom_target(${docname}-chm)
+add_dependencies(chm ${docname}-chm)
+
 add_subdirectory(C)
 add_subdirectory(de)
 add_subdirectory(it)

commit 8cec38d55670d2858332d48db06287f4596533cf
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Wed Sep 4 16:14:06 2019 +0200

    CMake - Use xslt parameter to set chm file name

diff --git a/chm.make b/chm.make
index d91d9f8..ddc293f 100644
--- a/chm.make
+++ b/chm.make
@@ -19,7 +19,7 @@ install-chm-local: $(chmfile) $(mapfile)
 	$(INSTALL_DATA) $(mapfile) $(DESTDIR)$(docdir)/$(lang)
 
 .xml.chm:
-	${XSLTPROC} $(XSLTPROCFLAGS) ${htmlhelp_xsl} ${srcdir}/$(docname).xml
+	${XSLTPROC} $(XSLTPROCFLAGS) --stringparam htmlhelp.chm $(chmfile) ${htmlhelp_xsl} ${srcdir}/$(docname).xml
 	if test ! -d ${builddir}/figures ; then \
 		ln -s ${srcdir}/figures ${builddir} ; \
 	fi
@@ -41,7 +41,6 @@ install-chm-local: $(chmfile) $(mapfile)
 	cat mymaps >> htmlhelp.hhp
 	rm mymaps
 	"${HHC}" htmlhelp.hhp  >/dev/null  || true
-	mv htmlhelp.chm $(chmfile)
 	mv htmlhelp.hhmap $(mapfile)
 
 CLEANFILES += $(chmfile) $(mapfile) htmlhelp.hhp *.html toc.hhc

commit 2c6180f5ba509e2ce13a040f59f6abba28b141f9
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Wed Sep 4 15:13:50 2019 +0200

    CMake - Rename cmake modules for clarity
    
    This also moves the html rules to a separate file

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 32a76f7..9332fcd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,11 +20,12 @@ set (PACKAGE_URL "https://www.gnucash.org/")
 
 # Extra cmake macros
 set (CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
-include (xmldocs)
-include (pdf)
-include (epub)
-include (gnc_doc_targets)
-include (dist)
+include (AddEpubTarget)
+include (AddHtmlTarget)
+include (AddPdfTarget)
+include (AddXmlTarget)
+include (AddGncDocTargets)
+include (DistCommon)
 include (GNUInstallDirs)
 
 # Clear cache variables that will be filled later during the cmake run
diff --git a/cmake/epub.cmake b/cmake/AddEpubTarget.cmake
similarity index 100%
rename from cmake/epub.cmake
rename to cmake/AddEpubTarget.cmake
diff --git a/cmake/gnc_doc_targets.cmake b/cmake/AddGncDocTargets.cmake
similarity index 100%
rename from cmake/gnc_doc_targets.cmake
rename to cmake/AddGncDocTargets.cmake
diff --git a/cmake/xmldocs.cmake b/cmake/AddHtmlTarget.cmake
similarity index 71%
rename from cmake/xmldocs.cmake
rename to cmake/AddHtmlTarget.cmake
index 455e94e..40417e8 100644
--- a/cmake/xmldocs.cmake
+++ b/cmake/AddHtmlTarget.cmake
@@ -1,5 +1,5 @@
 #
-# Functions to generate xml (docbook) or html documentation
+# Functions to generate html documentation
 #
 # Paremeters:
 # - docname: basename of the main xml file. Will be used to locate
@@ -8,39 +8,6 @@
 # - entities: list of all xml files this document is composed of
 # - figdir: name of the directory holding the images
 
-# ************** Rules to install xml files for gnome-help ***********************
-function (add_xml_target docname lang entities figdir)
-
-    set(xml_files "${entities}")
-    list(APPEND xml_files "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
-    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
-
-    install(FILES ${xml_files}
-        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}"
-        COMPONENT "${lang}-${docname}-xml")
-    install(FILES ${figures}
-        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/${figdir}"
-        COMPONENT "${lang}-${docname}-xml")
-
-    add_custom_target("${lang}-${docname}-check"
-        COMMAND  ${XMLLINT} --postvalid
-                            --xinclude
-                            --noout
-                            --path ${CMAKE_SOURCE_DIR}/docbook
-                            ${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml
-        DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
-
-    add_dependencies(${docname}-check "${lang}-${docname}-check")
-
-# TODO Uninstall and dist targets
-# uninstall-hook:
-# 	rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(gnomehelpfiguresdir)"
-# 	rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(gnomehelpdir)"
-#
-# EXTRA_DIST = ${xml_files} ${omffile} ${figures}
-endfunction()
-
-# ************** Rules to make and install html documentation ********************
 function (add_html_target docname lang entities figdir)
 
     file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
diff --git a/cmake/pdf.cmake b/cmake/AddPdfTarget.cmake
similarity index 100%
rename from cmake/pdf.cmake
rename to cmake/AddPdfTarget.cmake
diff --git a/cmake/AddXmlTarget.cmake b/cmake/AddXmlTarget.cmake
new file mode 100644
index 0000000..9c1a13d
--- /dev/null
+++ b/cmake/AddXmlTarget.cmake
@@ -0,0 +1,41 @@
+#
+# Functions to generate xml (docbook) documentation
+#
+# Paremeters:
+# - docname: basename of the main xml file. Will be used to locate
+#            this primary xml file and for various output files/directories
+# - lang: language of the current document
+# - entities: list of all xml files this document is composed of
+# - figdir: name of the directory holding the images
+
+# ************** Rules to install xml files for gnome-help ***********************
+function (add_xml_target docname lang entities figdir)
+
+    set(xml_files "${entities}")
+    list(APPEND xml_files "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
+    file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png")
+
+    install(FILES ${xml_files}
+        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}"
+        COMPONENT "${lang}-${docname}-xml")
+    install(FILES ${figures}
+        DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/${figdir}"
+        COMPONENT "${lang}-${docname}-xml")
+
+    add_custom_target("${lang}-${docname}-check"
+        COMMAND  ${XMLLINT} --postvalid
+                            --xinclude
+                            --noout
+                            --path ${CMAKE_SOURCE_DIR}/docbook
+                            ${CMAKE_CURRENT_SOURCE_DIR}/${docname}.xml
+        DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd")
+
+    add_dependencies(${docname}-check "${lang}-${docname}-check")
+
+# TODO Uninstall and dist targets
+# uninstall-hook:
+# 	rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(gnomehelpfiguresdir)"
+# 	rmdir --ignore-fail-on-non-empty "$(DESTDIR)$(gnomehelpdir)"
+#
+# EXTRA_DIST = ${xml_files} ${omffile} ${figures}
+endfunction()
diff --git a/cmake/dist.cmake b/cmake/DistCommon.cmake
similarity index 100%
rename from cmake/dist.cmake
rename to cmake/DistCommon.cmake
diff --git a/cmake/MakeDist.cmake b/cmake/MakeDist.cmake
index 76f17d1..7ae269e 100644
--- a/cmake/MakeDist.cmake
+++ b/cmake/MakeDist.cmake
@@ -8,7 +8,7 @@
 # 3. Create the tarball and compress it with gzip and bzip2.
 # 4. Then remove the dist directory.
 
-include(${CMAKE_MODULE_PATH}/dist.cmake)
+include(${CMAKE_MODULE_PATH}/DistCommon.cmake)
 
 function(make_dist PACKAGE_PREFIX GNUCASH_SOURCE_DIR BUILD_SOURCE_DIR)
 
diff --git a/cmake/MakeDistCheck.cmake b/cmake/MakeDistCheck.cmake
index abb2532..c634134 100644
--- a/cmake/MakeDistCheck.cmake
+++ b/cmake/MakeDistCheck.cmake
@@ -1,5 +1,5 @@
 
-include(${CMAKE_MODULE_PATH}/dist.cmake)
+include(${CMAKE_MODULE_PATH}/DistCommon.cmake)
 
 function(run_dist_check PACKAGE_PREFIX EXT)
 



Summary of changes:
 CMakeLists.txt                            | 117 ++++++++++++++++++++----------
 CMakeNotes.txt                            |   3 +-
 chm.make                                  |   3 +-
 cmake/AddChmTarget.cmake                  |  37 ++++++++++
 cmake/{epub.cmake => AddEpubTarget.cmake} |  35 +++++----
 cmake/AddGHelpTarget.cmake                |  54 ++++++++++++++
 cmake/AddGncDocTargets.cmake              |  57 +++++++++++++++
 cmake/AddHtmlTarget.cmake                 |  57 +++++++++++++++
 cmake/{pdf.cmake => AddPdfTarget.cmake}   |  20 +++--
 cmake/{dist.cmake => DistCommon.cmake}    |   0
 cmake/MakeChm.cmake                       |  69 ++++++++++++++++++
 cmake/MakeDist.cmake                      |   2 +-
 cmake/MakeDistCheck.cmake                 |   2 +-
 cmake/cmake_uninstall.cmake.in            |  23 ++++++
 cmake/gnc_doc_targets.cmake               |  33 ---------
 cmake/xmldocs.cmake                       | 108 ---------------------------
 guide/CMakeLists.txt                      |  31 +++++---
 help/CMakeLists.txt                       |  31 +++++---
 18 files changed, 457 insertions(+), 225 deletions(-)
 create mode 100644 cmake/AddChmTarget.cmake
 rename cmake/{epub.cmake => AddEpubTarget.cmake} (60%)
 create mode 100644 cmake/AddGHelpTarget.cmake
 create mode 100644 cmake/AddGncDocTargets.cmake
 create mode 100644 cmake/AddHtmlTarget.cmake
 rename cmake/{pdf.cmake => AddPdfTarget.cmake} (78%)
 rename cmake/{dist.cmake => DistCommon.cmake} (100%)
 create mode 100644 cmake/MakeChm.cmake
 create mode 100644 cmake/cmake_uninstall.cmake.in
 delete mode 100644 cmake/gnc_doc_targets.cmake
 delete mode 100644 cmake/xmldocs.cmake



More information about the gnucash-changes mailing list