diff --git a/CMakeLists.txt b/CMakeLists.txt index 32a76f7d7..de17a572a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,13 +6,13 @@ project (gnucash-docs) # Version number of gnucash set (GNUCASH_MAJOR_VERSION 3) -set (GNUCASH_MINOR_VERSION 6) +set (GNUCASH_MINOR_VERSION 7) set (VERSION "${GNUCASH_MAJOR_VERSION}.${GNUCASH_MINOR_VERSION}") set (GNUCASH_LATEST_STABLE_SERIES 3.x) set (PACKAGE gnucash-docs) set (PACKAGE_NAME GnuCash Docs) -set (PACKAGE_VERSION 3.6) +set (PACKAGE_VERSION 3.7) set (PACKAGE_BUGREPORT "https://bugs.gnucash.org/describecomponents.cgi?product=Documentation") set (PACKAGE_TARNAME ${PACKAGE}) set (PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") @@ -20,11 +20,13 @@ 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 (AddChmTarget) +include (AddEpubTarget) +include (AddGHelpTarget) +include (AddHtmlTarget) +include (AddPdfTarget) +include (AddGncDocTargets) +include (DistCommon) include (GNUInstallDirs) # Clear cache variables that will be filled later during the cmake run @@ -33,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_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_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) + option (WITH_CHM "Enable build rules for chm document format" ON) +endif() option (WITH_MOBI "Enable build rules for Mobipocket document format" OFF) # ############################################################ @@ -50,6 +69,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 @@ -68,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() @@ -97,34 +121,44 @@ 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(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_GHELP) + add_custom_target(ghelp) +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() +if (WITH_CHM) + add_custom_target(chm) +endif() add_subdirectory (guide) @@ -196,3 +230,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 05d2670b3..6a84f1a4b 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/ChangeLog b/ChangeLog index cd787462f..c46179f9b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,167 @@ +2019-09-07 Geert Janssens + + * CMake - update installation components (HEAD -> maint, origin/maint) + +2019-09-07 Geert Janssens + + * CMake - revisit image handling + +2019-09-07 Geert Janssens + + * CMake - revisit xml target + +2019-09-07 Geert Janssens + + * CMake - refactor targets into custom commands + +2019-09-06 Geert Janssens + + * CMake - Define options to enable or disable document formats + +2019-09-06 Geert Janssens + + * CMake - Add uninstall target + +2019-09-06 Geert Janssens + + * CMake - revisit build and install file locations + +2019-09-04 Geert Janssens + + * CMake - add chm target for windows documentation + +2019-09-04 Geert Janssens + + * CMake - Use xslt parameter to set chm file name + +2019-09-04 Geert Janssens + + * CMake - Rename cmake modules for clarity + +2019-09-02 Geert Janssens + + * CMake - Make note of missing Windows chm build rules + +2019-09-02 Geert Janssens + + * CMake - add dist and distcheck targets + +2019-09-02 Geert Janssens + + * paper format fixup + +2019-09-02 Geert Janssens + + * CMake - factor out common calls to reduce code duplication + +2019-09-02 Geert Janssens + + * cmake pdf - determine papersize on source directory instead of environment + +2019-09-02 Geert Janssens + + * Add epub and mobi support to cmake build system + +2019-09-02 Geert Janssens + + * Add a note about the cmake build system + +2019-09-02 Geert Janssens + + * Add pdf targets to CMake build system + +2019-09-02 Geert Janssens + + * Drop scrollkeeper/omf related bits from cmake build system + +2019-08-31 Geert Janssens + + * Provide rules to build xml and html versions of our docs + +2019-08-31 Geert Janssens + + * Setup basic structure for cmake based build system + +2019-08-17 Geert Janssens + + * Bug 797324 - yelp 3.32.2 does not find entities while listing 'all documents' + +2019-08-16 Frank H. Ellenberger + + * Apply commit 5f84f78 also on de and ru + +2019-08-16 Frank H. Ellenberger + + * Remove a totally wrong sentence about expenses + +2019-08-16 Frank H. Ellenberger + + * 2 "This" for different parts is confusing + +2019-08-16 Frank H. Ellenberger + + * Minor review of platform compatibility + +2019-08-12 Frank H. Ellenberger + + * 1 Tippfeher und mehrere "mindestens " FQ-Version + +2019-08-11 Frank H. Ellenberger + + * A few minor textual improvements of Help:Tips + +2019-08-11 Frank H. Ellenberger + + * Reformat help tips + +2019-08-11 Frank H. Ellenberger + + * Add note about fundlibrary's id + +2019-08-07 Frank H. Ellenberger + + * remove gnome-money.png + +2019-08-07 Frank H. Ellenberger + + * Define ac_abs_top_srcdir before first use + +2019-08-06 John Ralls + + * Fix fragile method of getting an absolute path to the soure directory. + +2019-08-04 Frank H. Ellenberger + + * Reformat Author section + +2019-08-04 Frank H. Ellenberger + + * Minor improvements on Import Matcher section + +2019-08-01 David Cousens + + * Improve Transactions:Import matcher -corrections + +2019-07-31 David Cousens + + * Improve Transactions:Import matcher + +2019-07-25 Frank H. Ellenberger + + * Merge commit 'da3bd778e8d9662ff834f395867fb9500f48904f' into maint + +2019-07-14 Tad + + * PR #124: Optimize all PNGs with optipng + +2019-07-24 Frank H. Ellenberger + + * Fix syntax of a note in previous commit from PR #125 + +2019-07-16 David Cousens + + * Help:Transactions: Modify Matcher and Multiple Selection Docs + 2018-12-30 John Ralls * Release GnuCash Documentation for version 3.4. (tag: 3.4) diff --git a/Makefile.am b/Makefile.am index aee79dff8..b40a83183 100644 --- a/Makefile.am +++ b/Makefile.am @@ -12,13 +12,17 @@ EXTRA_DIST = COPYING-DOCS \ xsl \ HACKING \ README \ - cmake/dist.cmake \ - cmake/epub.cmake \ - cmake/gnc_doc_targets.cmake \ - cmake/MakeDistCheck.cmake \ - cmake/MakeDist.cmake \ - cmake/pdf.cmake \ - cmake/xmldocs.cmake \ + cmake/AddChmTarget.cmake \ + cmake/AddEpubTarget.cmake + cmake/AddGHelpTarget.cmake + cmake/AddGncDocTargets.cmake + cmake/AddHtmlTarget.cmake + cmake/AddPdfTarget.cmake + cmake/cmake_uninstall.cmake.in + cmake/DistCommon.cmake + cmake/MakeChm.cmake + cmake/MakeDistCheck.cmake + cmake/MakeDist.cmake fonts/gothic.xml \ fonts/mincho.xml \ fonts/truetype/ume-tgo4.ttf \ diff --git a/NEWS b/NEWS index c4bef076a..c9038cb26 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,12 @@ Version History --------------- + 3.7 - 8 September 2019 + o Bug 797324 - yelp 3.32.2 does not find entities while listing 'all + documents' + o Now builds with CMake as well as with autotools. + o All pngs have been optimized, reducing the size of the documentation + by ~28MB. + o Document the new import matcher multiselection feature. 3.6 - 20 June 2019 o Guide: Move the FDL appendix into the appendix part o Guide Bus: Add IDs to tables so that they will appear in the diff --git a/chm.make b/chm.make index d91d9f8c1..ddc293f0f 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 diff --git a/cmake/AddChmTarget.cmake b/cmake/AddChmTarget.cmake new file mode 100644 index 000000000..d6be1afb9 --- /dev/null +++ b/cmake/AddChmTarget.cmake @@ -0,0 +1,37 @@ +function (add_chm_target docname lang entities figures) + + set(chmfile "${docname}.chm") + set(mapfile "${docname}.hhmap") + + set(BUILD_DIR "${DOCDIR_BUILD}/${lang}") + file(MAKE_DIRECTORY "${BUILD_DIR}") + + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/htmlhelp") + add_custom_command( + OUTPUT "${BUILD_DIR}/${chmfile}" "${BUILD_DIR}/${mapfile}" + 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 BUILD_DIR=${BUILD_DIR} + -D XSLTPROC=${XSLTPROC} + "-DXSLTPROCFLAGS=\"${XSLTPROCFLAGS}\"" + "-Dentities=\"${entities}\"" + -D HHC=${HHC} + -P ${CMAKE_SOURCE_DIR}/cmake/MakeChm.cmake + 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 + "${BUILD_DIR}/${chmfile}" + "${BUILD_DIR}/${mapfile}" + DESTINATION "${CMAKE_INSTALL_DOCDIR}/${lang}" + COMPONENT "chm") + +endfunction() diff --git a/cmake/epub.cmake b/cmake/AddEpubTarget.cmake similarity index 60% rename from cmake/epub.cmake rename to cmake/AddEpubTarget.cmake index c2498eb67..46b20631c 100644 --- a/cmake/epub.cmake +++ b/cmake/AddEpubTarget.cmake @@ -1,10 +1,13 @@ -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_tmp") - file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png") + set(EPUB_TMPDIR "${CMAKE_CURRENT_BINARY_DIR}/epub") - add_custom_target("${lang}-${docname}-epub" + set(BUILD_DIR "${DOCDIR_BUILD}/${lang}") + file(MAKE_DIRECTORY "${BUILD_DIR}") + + add_custom_command( + OUTPUT "${BUILD_DIR}/${epubfile}" COMMAND rm -fr "${EPUB_TMPDIR}" COMMAND mkdir "${EPUB_TMPDIR}" COMMAND echo "application/epub+zip" > "${EPUB_TMPDIR}/mimetype" @@ -17,26 +20,32 @@ 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 DEPENDS ${entities} "${docname}.xml" "${CMAKE_SOURCE_DIR}/docbook/gnc-docbookx.dtd" ${figures}) - add_dependencies(${docname}-epub "${lang}-${docname}-epub") + add_custom_target("${lang}-${docname}-epub" + DEPENDS "${BUILD_DIR}/${epubfile}") -# CLEANFILES += $(epubfile) + add_dependencies(${docname}-epub "${lang}-${docname}-epub") 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_command( + OUTPUT "${mobifile}" + COMMAND ${EBOOK_CONVERT} "${epubfile}" "${mobifile}" + DEPENDS "${epubfile}") add_custom_target("${lang}-${docname}-mobi" - COMMAND ${EBOOK_CONVERT} ${epubfile} ${mobifile} - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${docname}.epub") + DEPENDS "${epubfile}") add_dependencies(${docname}-mobi "${lang}-${docname}-mobi") -# CLEANFILES += $(epubfile) - endfunction() diff --git a/cmake/AddGHelpTarget.cmake b/cmake/AddGHelpTarget.cmake new file mode 100644 index 000000000..a974d0da1 --- /dev/null +++ b/cmake/AddGHelpTarget.cmake @@ -0,0 +1,54 @@ +# +# 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 figures) + + set(BUILD_DIR "${DATADIR_BUILD}/gnome/help/${docname}/${lang}") + file(MAKE_DIRECTORY "${BUILD_DIR}") + file(MAKE_DIRECTORY "${BUILD_DIR}/figures") + + 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}/figures") + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ghelp_figtrigger" + COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/figures" + 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 "ghelp") + install(FILES ${figures} + DESTINATION "${CMAKE_INSTALL_DATADIR}/gnome/help/${docname}/${lang}/figures" + COMPONENT "ghelp") +endfunction() diff --git a/cmake/AddGncDocTargets.cmake b/cmake/AddGncDocTargets.cmake new file mode 100644 index 000000000..ae054f8dc --- /dev/null +++ b/cmake/AddGncDocTargets.cmake @@ -0,0 +1,57 @@ +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" + 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_GHELP) + add_ghelp_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() + if (WITH_EPUB) + add_epub_target(${docname} ${lang} "${entities}" "${figures}") + endif() + if (WITH_MOBI) + add_mobi_target(${docname} ${lang}) + endif() + endif() + + set(autotoolsfiles + Makefile.am + Makefile.in + ${docname}-${lang}.omf) + + file(GLOB_RECURSE figures_dist + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + figures/*.png figures/*.svg) + + add_to_dist( + CMakeLists.txt + ${docname}.xml + ${entities} + ${autotoolsfiles} + ${figures_dist}) + +endfunction() diff --git a/cmake/AddHtmlTarget.cmake b/cmake/AddHtmlTarget.cmake new file mode 100644 index 000000000..ea3dcd52f --- /dev/null +++ b/cmake/AddHtmlTarget.cmake @@ -0,0 +1,57 @@ +# +# Functions to generate html 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 + +function (add_html_target docname lang entities figures) + + 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}/figures") + 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_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}/figures") + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html_figtrigger" + COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${BUILD_DIR}/figures" + COMMAND touch "${CMAKE_CURRENT_BINARY_DIR}/html_figtrigger" + DEPENDS ${figures}) + + # Copy style icons for this document (warning, info,...) + file(MAKE_DIRECTORY "${BUILD_DIR}/stylesheet") + 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 "${CMAKE_CURRENT_BINARY_DIR}/htmltrigger" + "${CMAKE_CURRENT_BINARY_DIR}/html_figtrigger" + "${CMAKE_CURRENT_BINARY_DIR}/styletrigger") + + add_dependencies(${docname}-html "${lang}-${docname}-html") + +endfunction() diff --git a/cmake/pdf.cmake b/cmake/AddPdfTarget.cmake similarity index 78% rename from cmake/pdf.cmake rename to cmake/AddPdfTarget.cmake index b1af7ac98..b813b51ce 100644 --- a/cmake/pdf.cmake +++ b/cmake/AddPdfTarget.cmake @@ -1,8 +1,10 @@ -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}") # 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 @@ -17,7 +19,8 @@ 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 @@ -26,13 +29,18 @@ function (add_pdf_target docname lang entities figdir) 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 "${CMAKE_CURRENT_BINARY_DIR}/${pdffile}" - DEPENDS ${lang}-${docname}-fo ${figures}) + -pdf "${BUILD_DIR}/${pdffile}" + 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/dist.cmake b/cmake/DistCommon.cmake similarity index 100% rename from cmake/dist.cmake rename to cmake/DistCommon.cmake diff --git a/cmake/MakeChm.cmake b/cmake/MakeChm.cmake new file mode 100644 index 000000000..ef977f9bd --- /dev/null +++ b/cmake/MakeChm.cmake @@ -0,0 +1,69 @@ +# 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 "${BUILD_DIR}/${mapfile}" ${HHMAP_OUT}) + +execute_process( + COMMAND ${HHC} htmlhelp.hhp + WORKING_DIRECTORY "${htmlhelpdir}" + OUTPUT_QUIET + ERROR_QUIET +) + +file(COPY "${htmlhelpdir}/${docname}.chm" DESTINATION "${BUILD_DIR}") diff --git a/cmake/MakeDist.cmake b/cmake/MakeDist.cmake index 76f17d1cd..7ae269e54 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 abb253223..c634134f0 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) diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in new file mode 100644 index 000000000..f3b1d03c4 --- /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) diff --git a/cmake/gnc_doc_targets.cmake b/cmake/gnc_doc_targets.cmake deleted file mode 100644 index e3c14ec2b..000000000 --- a/cmake/gnc_doc_targets.cmake +++ /dev/null @@ -1,33 +0,0 @@ -function (add_gnc_doc_targets docname entities) - - get_filename_component(lang ${CMAKE_CURRENT_SOURCE_DIR} NAME) - - if(entities) - add_xml_target(${docname} ${lang} "${entities}" figures) - add_html_target(${docname} ${lang} "${entities}" figures) - if (PDF) - add_pdf_target(${docname} ${lang} "${entities}" figures) - endif() - add_epub_target(${docname} ${lang} "${entities}" figures) - if (MOBI) - add_mobi_target(${docname} ${lang}) - endif() - endif() - - set(autotoolsfiles - Makefile.am - Makefile.in - ${docname}-${lang}.omf) - - file(GLOB_RECURSE figures - RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - figures/*.png) - - add_to_dist( - CMakeLists.txt - ${docname}.xml - ${entities} - ${autotoolsfiles} - ${figures}) - -endfunction() diff --git a/cmake/xmldocs.cmake b/cmake/xmldocs.cmake deleted file mode 100644 index 455e94e62..000000000 --- a/cmake/xmldocs.cmake +++ /dev/null @@ -1,108 +0,0 @@ -# -# Functions to generate xml (docbook) or html 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() - -# ************** Rules to make and install html documentation ******************** -function (add_html_target docname lang entities figdir) - - file(GLOB figures "${CMAKE_CURRENT_SOURCE_DIR}/${figdir}/*.png") - set(styledir "${CMAKE_SOURCE_DIR}/stylesheet") - file(GLOB styleicons "${CMAKE_SOURCE_DIR}/stylesheet/*.png") - - # TODO clean target - #CLEANFILES += $(docname)/*.html - - # 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}/" - --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" - 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}") - add_custom_target("${lang}-${docname}-html-figures" - COMMAND ${CMAKE_COMMAND} -E copy ${figures} "${CMAKE_CURRENT_BINARY_DIR}/${docname}/${figdir}" - DEPENDS ${figures}) - - # Copy style icons for this document (warning, info,...) - file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${docname}/stylesheet") - add_custom_target("${lang}-${docname}-html-style" - COMMAND ${CMAKE_COMMAND} -E copy ${styleicons} "${CMAKE_CURRENT_BINARY_DIR}/${docname}/stylesheet" - DEPENDS ${styleicons}) - - add_custom_target("${lang}-${docname}-html" - DEPENDS "${lang}-${docname}-html-files" "${lang}-${docname}-html-figures" "${lang}-${docname}-html-style") - - 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/docbook/gnc-docbookx.dtd b/docbook/gnc-docbookx.dtd index 038e2145e..72a38ad67 100644 --- a/docbook/gnc-docbookx.dtd +++ b/docbook/gnc-docbookx.dtd @@ -32,10 +32,10 @@ own entity definitions to use across all of our DocBook pages. --> 1. Publication - should only be changed by the release manager! --> - - + + - + diff --git a/guide/C/gnucash-guide.xml b/guide/C/gnucash-guide.xml index 72e494ba6..6aa36edac 100644 --- a/guide/C/gnucash-guide.xml +++ b/guide/C/gnucash-guide.xml @@ -10,8 +10,8 @@ -->