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)