Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

  • 5608dcc
  • /
  • CMakeLists.txt
Raw File Download
Permalinks

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
content badge Iframe embedding
swh:1:cnt:4fa6889c9dc04507b890ab8e81b007feaed387e1
directory badge Iframe embedding
swh:1:dir:5608dcc648f5694d481e889306766d42729f5cd8
Citations

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • content
  • directory
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
CMakeLists.txt
# FIXME: Tell CMake to cache the pdf files so they are not regenerated each time.

FILE(GLOB_RECURSE IMAGE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.png")
FILE(GLOB_RECURSE IMAGES_PATHS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "images")
FILE(GLOB_RECURSE XML_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.xml")

message(STATUS ${IMAGES_PATHS})

if(BUILD_USERMANUAL)
	add_custom_target(usermanual ALL)
	add_custom_target(lua-api ALL)
else(BUILD_USERMANUAL)
	add_custom_target(usermanual)
	add_custom_target(lua-api)
endif(BUILD_USERMANUAL)

set(can_build_usermanual ON)

find_program(Fop_BIN fop)
find_program(Xml2po_BIN xml2po)
find_package(Saxon)
find_program(Xsltproc_BIN xsltproc)
find_program(Convert_BIN convert)

if(${Fop_BIN} STREQUAL "Fop_BIN-NOTFOUND")
	message("Missing fop")
	set(can_build_usermanual OFF)
endif()

if((NOT Saxon_FOUND) AND (${Xsltproc_BIN} STREQUAL "Xsltproc_BIN-NOTFOUND"))
	message("No Xslt processor found")
	set(can_build_usermanual OFF)
endif()

if(NOT Saxon_FOUND)
        message("Xslt processor saxon not found. HTML usermanual will be built with xsltproc;")
        message("expect usermanual with inconsistent screenshot and image dimensions.")
	set(XSLT_XSLTPROC_EXECUTABLE "${Xsltproc_BIN}")
endif()

if(${Xml2po_BIN} STREQUAL "Xml2po_BIN-NOTFOUND")
	message("Missing xml2po. No localized usermanuals are build")
# 	set(can_build_usermanual OFF)
endif()

if(${Convert_BIN} STREQUAL "Convert_BIN-NOTFOUND")
	message("Missing convert from ImageMagick")
	set(can_build_usermanual OFF)
endif()

if(USE_XMLLINT)
  add_custom_target(
    validate_usermanual_xml
    COMMAND ${Xmllint_BIN} --nonet --xinclude --noout --postvalid ${CMAKE_CURRENT_SOURCE_DIR}/darktable.xml
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/darktable.xml
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/
    COMMENT "Checking validity of the usermanual darktable.xml"
  )
endif(USE_XMLLINT)

if(can_build_usermanual)

	set(TARGET_MEDIA_COMPRESSION_QUALITY "90")
	set(TARGET_MEDIA_RESIZE "800x800>")

	# Create directory tree for media target image transformation
	foreach(image ${IMAGE_FILES})
		# Rewrite output url for transformed images
		string(REGEX REPLACE "\\images/" "" _image ${image})
		set(_image "images/${_image}")
		# cut out filename from path
		string(REGEX REPLACE "\\/[^/]+.png$" "" path ${_image})
		file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/media/${path})
	endforeach()

	# Images converting for different media targets
	set(TARGET_MEDIA_IMAGES "")

	foreach(image ${IMAGE_FILES})
		# Remove image extensions png
		string(REGEX REPLACE "\\.png$" "" image ${image})

		# Rewrite output url for transformed images
		string(REGEX REPLACE "\\images/" "" new_image ${image})
		set(new_image "images/${new_image}")
		set(TARGET_MEDIA_IMAGES ${TARGET_MEDIA_IMAGES} "${CMAKE_CURRENT_BINARY_DIR}/media/${new_image}.jpg")
		add_custom_command(
			OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/media/${new_image}.jpg"
			COMMAND ${Convert_BIN} -resize ${TARGET_MEDIA_RESIZE} -quality ${TARGET_MEDIA_COMPRESSION_QUALITY} -filter Lanczos ${CMAKE_CURRENT_SOURCE_DIR}/${image}.png ${CMAKE_CURRENT_BINARY_DIR}/media/${new_image}.jpg
			COMMENT "Transforming image ${image}.png into media target" VERBATIM
		)
	endforeach()
	add_custom_target(target_media_images DEPENDS  ${TARGET_MEDIA_IMAGES})

	#
	# First pass generate one big docbook xml
	# all generation of original language documents should depend on and use this file
        # all translated usermanuals should depend on the profiled xml file
	#
	string(REGEX REPLACE "/" "\\\\/" binary_path ${CMAKE_CURRENT_BINARY_DIR})
	if (WIN32)
		# On Windows/MINGW the path name works only with the preceding '/'
		set (binary_path "\\/${binary_path}")
	endif()

	add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/darktable_profile.xml
		COMMAND ${Xsltproc_BIN} --nonet --xinclude --output ${CMAKE_CURRENT_BINARY_DIR}/darktable_profile.xml xsl/darktable_profile.xsl darktable.xml
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS darktable.xml ${XML_FILES}
		COMMENT "Generating the profiled docbook xml file" VERBATIM
	)
	add_custom_target(darktable_profile_xml DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_profile.xml)
	add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
		COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/darktable_profile.xml | sed "s/fileref=\"\\([^>]*\\)\\(\\/images\\/\\)\\([^>]*\\)\\(.png\\)\"/fileref=\"${binary_path}\\/media\\/images\\/\\1\\/\\3.jpg\"/g ; s/fileref=\"images\\/\\([^>]*\\)\\(.png\\)\"/fileref=\"${binary_path}\\/media\\/images\\/\\1.jpg\"/g" > ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS darktable_profile.xml ${XML_FILES}
		COMMENT "Generating the main docbook xml file" VERBATIM
	)
	add_custom_target(darktable_single_xml DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml)

if(USE_XMLLINT)
  add_dependencies(darktable_single_xml validate_usermanual_xml)
endif(USE_XMLLINT)



#	#
#	# add target for final xml file
#	#
#	add_custom_command(
#		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/darktable_single_final.xml
#		COMMAND ${Xsltproc_BIN} --nonet --output ${CMAKE_CURRENT_BINARY_DIR}/darktable_single_final.xml --stringparam profile.status "final" xsl/darktable_profile.xsl ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
#		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
#		DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
#		COMMENT "Profiling final docbook xml file" VERBATIM
#	)
#	add_custom_target(darktable_single_final_xml DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml)

	#
	# draft pdf usermanual
	#
	add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual.pdf
		COMMAND ${Xsltproc_BIN} --nonet --output ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual.fo xsl/darktable_fo.xsl  ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
		COMMAND fop -c fopconfig.xml ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual.fo -pdf ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual.pdf
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS  ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
		COMMENT "Building usermanual" VERBATIM
	)
	add_custom_target(darktable-usermanual DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual.pdf)
  add_dependencies(usermanual darktable-usermanual)
	add_dependencies(darktable-usermanual target_media_images darktable_single_xml )
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual.pdf DESTINATION ${CMAKE_INSTALL_DOCDIR}/usermanual OPTIONAL COMPONENT DTDocuments)

	#
	# draft chunked html usermanual for web
	#
	add_custom_command(
		OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/html/usermanual.css
		COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/usermanual.css ${CMAKE_CURRENT_BINARY_DIR}/html/usermanual.css
		DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/usermanual.css
		COMMENT "Updating usermanual.css" VERBATIM
	)

        if (Saxon_FOUND)
	    add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
                COMMAND ${XSLT_SAXON_COMMAND} ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml xsl/darktable_html_single_ext.xsl chunker.output.encoding=UTF-8 base.dir=${CMAKE_CURRENT_BINARY_DIR}/html/
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/html -name *.html -exec sed -n -i "1h;1!H;\${;g;s/${binary_path}\\/media\\///g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/html -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<body[^>]*>/<body class='usermanual' onLoad='parent.onContentLoad(this);'>/g;p;}" {} \;
		COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/media/images ${CMAKE_CURRENT_BINARY_DIR}/html/
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml ${CMAKE_CURRENT_BINARY_DIR}/html/usermanual.css
		COMMENT "Building html usermanual" VERBATIM
	)
        else (Saxon_FOUND)
            add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
                COMMAND ${XSLT_XSLTPROC_EXECUTABLE} --stringparam chunker.output.encoding UTF-8 --stringparam base.dir ${CMAKE_CURRENT_BINARY_DIR}/html/ xsl/darktable_html_single.xsl ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/html -name *.html -exec sed -i s/${binary_path}\\/media\\///g {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/html -name *.html -exec sed -i "s/<body[^>]*>/<body class='usermanual' onLoad='parent.onContentLoad(this);'>/g" {} \;
		COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/media/images ${CMAKE_CURRENT_BINARY_DIR}/html/
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml ${CMAKE_CURRENT_BINARY_DIR}/html/usermanual.css
		COMMENT "Building html usermanual" VERBATIM
	)
        endif (Saxon_FOUND)
	add_custom_target(darktable-usermanual-html DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html/index.html )
	add_dependencies(darktable-usermanual-html target_media_images darktable_single_xml )
    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION ${CMAKE_INSTALL_DOCDIR}/usermanual OPTIONAL COMPONENT DTDocuments)

	#
	# draft chunked usermanual for wordpress
	#

        if (Saxon_FOUND)
            add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/wp/index.html.php
                COMMAND ${XSLT_SAXON_COMMAND} ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml xsl/darktable_html_ext.xsl chunker.output.encoding=UTF-8 base.dir=${CMAKE_CURRENT_BINARY_DIR}/wp/
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -n -i "1h;1!H;\${;g;s/${binary_path}\\/media\\///g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<html>.*<title>/<?php define('WP_USE_THEMES', false);require('\\.\\.\\/wp-config\\.php'); add_filter('wp_title', 'set_title_page'); function set_title_page(){echo '/g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<\\/title>.*<\\/head>/ | user manual | ';}?>/g;p;}" {} \;

		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<body[^>]*>/<?php get_header(); ?><div id=\"primary\"><div id=\"content\" role=\"main\"><div class=\"usermanual\">/g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<\\/body><\\/html>/<\\/div><\\/div><\\/div><?php get_footer(); ?>/g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -n -i "1h;1!H;\${;g;s|\"\\([^\":]*\\.html\\)|\"\\1.php|g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec mv {} {}.php \;
		COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/media/images ${CMAKE_CURRENT_BINARY_DIR}/wp/
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
		COMMENT "Building php usermanual" VERBATIM
	)
        else (Saxon_FOUND)
            add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/wp/index.html.php
                COMMAND ${XSLT_XSLTPROC_EXECUTABLE} --stringparam chunker.output.encoding UTF-8 --stringparam base.dir ${CMAKE_CURRENT_BINARY_DIR}/wp/ xsl/darktable_html.xsl ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -i s/${binary_path}\\/media\\///g {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -i "s/<html>.*<title>/<?php define('WP_USE_THEMES', false);require('\\.\\.\\/wp-config\\.php'); add_filter('wp_title', 'set_title_page'); function set_title_page(){echo '/g" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -i "s/<\\/title>.*<\\/head>/ | user manual | ';}?>/g" {} \;

		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -i "s/<body[^>]*>/<?php get_header(); ?><div id=\"primary\"><div id=\"content\" role=\"main\"><div class=\"usermanual\">/g" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -i "s/<\\/body><\\/html>/<\\/div><\\/div><\\/div><?php get_footer(); ?>/g" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec sed -i "s|\"\\([^\":]*\\.html\\)|\"\\1.php|g" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp -name *.html -exec mv {} {}.php \;
		COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/media/images ${CMAKE_CURRENT_BINARY_DIR}/wp/
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
		COMMENT "Building php usermanual" VERBATIM
	)
        endif (Saxon_FOUND)
	add_custom_target(darktable-usermanual-wordpress DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/wp/index.html.php )
	add_dependencies(darktable-usermanual-wordpress target_media_images darktable_single_xml )
    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/wp DESTINATION ${CMAKE_INSTALL_DOCDIR}/usermanual OPTIONAL COMPONENT DTDocuments)

#	#
#	# final translated usermanual's
#	#
#	add_custom_command(
#		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual-en.pdf
#		COMMAND ${Xsltproc_BIN} --nonet --output ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual_profiled_final.fo xsl/darktable_fo.xsl ${CMAKE_CURRENT_BINARY_DIR}/darktable_single_final.xml
#		COMMAND fop -c fopconfig.xml ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual_profiled_final.fo -pdf ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual-final.pdf
#		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
#		DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
#		COMMENT "Building final usermanual" VERBATIM
#	)
#	add_custom_target(darktable-usermanual-final DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual-en.pdf )
#	add_dependencies(darktable-usermanual-final target_media_images darktable_single_final_xml )
#	add_dependencies(usermanual darktable-usermanual-final)
#	install(FILES ${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual-final.pdf DESTINATION ${CMAKE_INSTALL_DOCDIR}/usermanual OPTIONAL COMPONENT DTDocuments)
#
#	if(NOT ${Xml2po_BIN} STREQUAL "Xml2po_BIN-NOTFOUND")
#		# localized final usermanuals
#		file(GLOB LANGUAGES po/*.po)
#		foreach(language ${LANGUAGES})
#			set(pofile ${language})
#			string(REGEX REPLACE "(.+(\\\\|/))+" "" language ${language})
#			string(REGEX REPLACE "\\.po$" "" language ${language})
#			set(pdffile "${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual-${language}.pdf")
#			set(fofile "${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual-${language}.fo")
#			set(xmlfile "${CMAKE_CURRENT_BINARY_DIR}/darktable_single_final.xml")
#			set(xmllangfile "${CMAKE_CURRENT_BINARY_DIR}/darktable_single_final-${language}.xml")
#			add_custom_command(
#				OUTPUT ${pdffile}
#				COMMAND xml2po -e -p ${pofile} -l ${language} ${xmlfile} > ${xmllangfile}
#				COMMAND ${Xsltproc_BIN} --nonet --output ${fofile} xsl/darktable_fo.xsl ${xmllangfile}
#				COMMAND fop -c fopconfig.xml ${fofile} -pdf ${pdffile}
#				DEPENDS ${pofile} ${CMAKE_CURRENT_BINARY_DIR}/darktable_single_final.xml
#				WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
#				COMMENT "Building ${language} usermanual" VERBATIM
#			)
#			add_custom_target(darktable-usermanual-${language} DEPENDS ${pdffile})
#			add_dependencies(usermanual darktable-usermanual-${language})
#			add_dependencies(darktable-usermanual-${language} target_media_images darktable_single_final_xml )
#			install(FILES ${pdffile} DESTINATION ${CMAKE_INSTALL_DOCDIR}/usermanual OPTIONAL COMPONENT DTDocuments)
#		endforeach(language)
#	endif()

	#
	# draft translated usermanuals
	#
	if(NOT ${Xml2po_BIN} STREQUAL "Xml2po_BIN-NOTFOUND")
		# localized draft usermanuals
		file(STRINGS "po/LINGUAS" LANGUAGES)
		foreach(language ${LANGUAGES})
			set(pofile "po/${language}.po")
			set(pdffile "${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual-${language}.pdf")
			set(fofile "${CMAKE_CURRENT_BINARY_DIR}/darktable-usermanual-${language}.fo")
			set(xmlfile "${CMAKE_CURRENT_BINARY_DIR}/darktable_profile.xml")
			set(xmllangfile "${CMAKE_CURRENT_BINARY_DIR}/darktable_single-${language}.xml")
			set(xmllangtmp "${CMAKE_CURRENT_BINARY_DIR}/darktable_single-${language}.tmp")
			add_custom_command(
				OUTPUT ${pdffile}
				COMMAND xml2po -e -p ${pofile} -l ${language} ${xmlfile} > ${xmllangtmp}
		                COMMAND cat ${xmllangtmp} | sed "s/fileref=\"\\([^>]*\\)\\(\\/images\\/\\)\\([^>]*\\)\\(.png\\)\"/fileref=\"${binary_path}\\/media\\/images\\/\\1\\/\\3.jpg\"/g ; s/fileref=\"images\\/\\([^>]*\\)\\(.png\\)\"/fileref=\"${binary_path}\\/media\\/images\\/\\1.jpg\"/g" > ${xmllangfile}
				COMMAND ${Xsltproc_BIN} --nonet --output ${fofile} xsl/darktable_fo.xsl ${xmllangfile}
				COMMAND fop -c fopconfig.xml ${fofile} -pdf ${pdffile}
				DEPENDS ${pofile} ${CMAKE_CURRENT_BINARY_DIR}/darktable_single.xml
				WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
				COMMENT "Building ${language} usermanual" VERBATIM
			)
			add_custom_target(darktable-usermanual-${language} DEPENDS ${pdffile})
			add_dependencies(usermanual darktable-usermanual-${language})
			add_dependencies(darktable-usermanual-${language} target_media_images darktable_profile_xml )
            install(FILES ${pdffile} DESTINATION ${CMAKE_INSTALL_DOCDIR}/usermanual OPTIONAL COMPONENT DTDocuments)
		endforeach(language)
	endif()
#
# LUA API GENERATION
#

	#
	# draft pdf API
	#
	add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/darktable-lua-api.pdf
		COMMAND ${Xsltproc_BIN} --nonet --output ${CMAKE_CURRENT_BINARY_DIR}/darktable-lua-api.fo xsl/darktable_fo.xsl  ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml
		COMMAND fop -c fopconfig.xml ${CMAKE_CURRENT_BINARY_DIR}/darktable-lua-api.fo -pdf ${CMAKE_CURRENT_BINARY_DIR}/darktable-lua-api.pdf
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS  ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml
		COMMENT "Building Lua API" VERBATIM
	)
	add_custom_target(darktable-lua-api DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/darktable-lua-api.pdf)
  add_dependencies(lua-api darktable-lua-api)
	add_dependencies(darktable-lua-api target_media_images )
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/darktable-lua-api.pdf DESTINATION ${CMAKE_INSTALL_DOCDIR}/lua-api OPTIONAL COMPONENT DTDocuments)

	#
	# draft chunked html api for web
	#
	add_custom_command(
		OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/usermanual.css
		COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/usermanual.css ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/usermanual.css
		DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/usermanual.css
		COMMENT "Updating usermanual.css" VERBATIM
	)

        if (Saxon_FOUND)
	    add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/index.html
                COMMAND ${XSLT_SAXON_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml xsl/darktable_html_single_ext.xsl chunker.output.encoding=UTF-8 base.dir=${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api -name *.html -exec sed -n -i "1h;1!H;\${;g;s/${binary_path}\\/media\\///g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<body[^>]*>/<body class='usermanual' onLoad='parent.onContentLoad(this);'>/g;p;}" {} \;
		COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/media/images ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/usermanual.css
		COMMENT "Building html Lua API" VERBATIM
	)
        else (Saxon_FOUND)
            add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/index.html
                COMMAND ${XSLT_XSLTPROC_EXECUTABLE} --stringparam chunker.output.encoding UTF-8 --stringparam base.dir ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/ xsl/darktable_html_single.xsl ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api -name *.html -exec sed -i s/${binary_path}\\/media\\///g {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api -name *.html -exec sed -i "s/<body[^>]*>/<body class='usermanual' onLoad='parent.onContentLoad(this);'>/g" {} \;
		COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/media/images ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/usermanual.css
		COMMENT "Building html Lua API" VERBATIM
	)
        endif (Saxon_FOUND)
	add_custom_target(darktable-lua-api-html DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api/index.html )
	add_dependencies(darktable-lua-api-html target_media_images)
    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html_lua_api DESTINATION ${CMAKE_INSTALL_DOCDIR}/lua-api OPTIONAL COMPONENT DTDocuments)

	#
	# draft chunked usermanual for wordpress
	#

        if (Saxon_FOUND)
            add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api/index.html.php
                COMMAND ${XSLT_SAXON_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml xsl/darktable_html_ext.xsl chunker.output.encoding=UTF-8 base.dir=${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api/
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -n -i "1h;1!H;\${;g;s/${binary_path}\\/media\\///g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<html>.*<title>/<?php define('WP_USE_THEMES', false);require('\\.\\.\\/wp-config\\.php'); add_filter('wp_title', 'set_title_page'); function set_title_page(){echo '/g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<\\/title>.*<\\/head>/ | user manual | ';}?>/g;p;}" {} \;

		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<body[^>]*>/<?php get_header(); ?><div id=\"primary\"><div id=\"content\" role=\"main\"><div class=\"usermanual\">/g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -n -i "1h;1!H;\${;g;s/<\\/body><\\/html>/<\\/div><\\/div><\\/div><?php get_footer(); ?>/g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -n -i "1h;1!H;\${;g;s|\"\\([^\":]*\\.html\\)|\"\\1.php|g;p;}" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec mv {} {}.php \;
		COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/media/images ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api/
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml
		COMMENT "Building php Lua API" VERBATIM
	)
        else (Saxon_FOUND)
            add_custom_command(
		OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api/index.html.php
                COMMAND ${XSLT_XSLTPROC_EXECUTABLE} --stringparam chunker.output.encoding UTF-8 --stringparam base.dir ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api/ xsl/darktable_html.xsl ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -i s/${binary_path}\\/media\\///g {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -i "s/<html>.*<title>/<?php define('WP_USE_THEMES', false);require('\\.\\.\\/wp-config\\.php'); add_filter('wp_title', 'set_title_page'); function set_title_page(){echo '/g" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -i "s/<\\/title>.*<\\/head>/ | user manual | ';}?>/g" {} \;

		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -i "s/<body[^>]*>/<?php get_header(); ?><div id=\"primary\"><div id=\"content\" role=\"main\"><div class=\"usermanual\">/g" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -i "s/<\\/body><\\/html>/<\\/div><\\/div><\\/div><?php get_footer(); ?>/g" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec sed -i "s|\"\\([^\":]*\\.html\\)|\"\\1.php|g" {} \;
		COMMAND find ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api -name *.html -exec mv {} {}.php \;
		COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/media/images ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api/
		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
		DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml
		COMMENT "Building php Lua API" VERBATIM
	)
        endif (Saxon_FOUND)
	add_custom_target(darktable-lua-api-wordpress DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api/index.html.php )
	add_dependencies(darktable-lua-api-wordpress target_media_images)
    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/wp_lua_api DESTINATION ${CMAKE_INSTALL_DOCDIR}/lua-api OPTIONAL COMPONENT DTDocuments)


	#
	# draft translated API
	#
	if(NOT ${Xml2po_BIN} STREQUAL "Xml2po_BIN-NOTFOUND")
		# localized draft usermanuals
		file(STRINGS "po/LINGUAS" LANGUAGES)
		foreach(language ${LANGUAGES})
			set(pofile "po/${language}.po")
			set(pdffile "${CMAKE_CURRENT_BINARY_DIR}/darktable-lua-api-${language}.pdf")
			set(fofile "${CMAKE_CURRENT_BINARY_DIR}/darktable-lua-api-${language}.fo")
			set(xmlfile "${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml")
			set(xmllangfile "${CMAKE_CURRENT_BINARY_DIR}/darktable_lua_api-${language}.xml")
			set(xmllangtmp "${CMAKE_CURRENT_BINARY_DIR}/darktable_lua_api-${language}.tmp")
			add_custom_command(
				OUTPUT ${pdffile}
				COMMAND xml2po -e -p ${pofile} -l ${language} ${xmlfile} > ${xmllangtmp}
		                COMMAND cat ${xmllangtmp} | sed "s/fileref=\"\\([^>]*\\)\\(\\/images\\/\\)\\([^>]*\\)\\(.png\\)\"/fileref=\"${binary_path}\\/media\\/images\\/\\1\\/\\3.jpg\"/g ; s/fileref=\"images\\/\\([^>]*\\)\\(.png\\)\"/fileref=\"${binary_path}\\/media\\/images\\/\\1.jpg\"/g" > ${xmllangfile}
				COMMAND ${Xsltproc_BIN} --nonet --output ${fofile} xsl/darktable_fo.xsl ${xmllangfile}
				COMMAND fop -c fopconfig.xml ${fofile} -pdf ${pdffile}
				DEPENDS ${pofile} ${CMAKE_CURRENT_SOURCE_DIR}/lua/lua_api.xml
				WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
				COMMENT "Building ${language} API" VERBATIM
			)
			add_custom_target(darktable-lua-api-${language} DEPENDS ${pdffile})
			add_dependencies(lua-api darktable-lua-api-${language})
			add_dependencies(darktable-lua-api-${language} target_media_images darktable_profile_xml )
            install(FILES ${pdffile} DESTINATION ${CMAKE_INSTALL_DOCDIR}/lua-api OPTIONAL COMPONENT DTDocuments)
		endforeach(language)
	endif()
else(can_build_usermanual)
	message("Can NOT build Lua API documentation")
endif(can_build_usermanual)

add_subdirectory(po)


Software Heritage — Copyright (C) 2015–2025, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Contact— JavaScript license information— Web API

back to top