if(POLICY CMP0177)
cmake_policy(SET CMP0177 NEW)
endif()
set(_languages ca de it nl pt ru sv uk)
# Use -DDOWNLOAD_POS=ON to download the translations directly from SVN.
if(DOWNLOAD_POS STREQUAL "REMOVE")
message(STATUS "Removing po, docs")
file(REMOVE_RECURSE "${CMAKE_CURRENT_SOURCE_DIR}/po")
file(REMOVE_RECURSE "${CMAKE_CURRENT_SOURCE_DIR}/docs")
elseif(DOWNLOAD_POS)
execute_process(COMMAND ${CMAKE_COMMAND}
-P "${CMAKE_CURRENT_SOURCE_DIR}/download-pos.cmake" "${_languages}"
RESULT_VARIABLE result)
if(NOT "${result}" STREQUAL "0")
message(STATUS "Download failed, removing po, docs")
file(REMOVE_RECURSE "${CMAKE_CURRENT_SOURCE_DIR}/po")
file(REMOVE_RECURSE "${CMAKE_CURRENT_SOURCE_DIR}/docs")
endif()
endif()
# Create HTML handbook from DocBook file in language directory
macro(kid3_create_handbook _docbook _lang)
get_filename_component(_input ${_docbook} ABSOLUTE)
set(_output ${CMAKE_CURRENT_BINARY_DIR}/${_lang}/kid3_${_lang}.html)
set(_fixdocbook_py ${CMAKE_CURRENT_SOURCE_DIR}/fixdocbook.py)
set(_fixhtml_py ${CMAKE_CURRENT_SOURCE_DIR}/fixhtml.py)
set(_docbook_xsl ${DOCBOOK_XSL_DIR}/xhtml/docbook.xsl)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_lang})
if(WIN32)
# The expressions in pipes do not work for Windows,
# so temporary files are used.
set(_tmp_xml ${CMAKE_CURRENT_BINARY_DIR}/${_lang}/tmp.xml)
set(_tmp_html ${CMAKE_CURRENT_BINARY_DIR}/${_lang}/tmp.html)
add_custom_command(OUTPUT ${_tmp_xml}
COMMAND ${PYTHON_EXECUTABLE} ${_fixdocbook_py} ${_input} >${_tmp_xml}
DEPENDS ${_input}
)
add_custom_command(OUTPUT ${_tmp_html}
COMMAND ${XSLTPROC} --novalid --nonet ${_docbook_xsl} ${_tmp_xml} >${_tmp_html}
DEPENDS ${_tmp_xml}
)
add_custom_command(OUTPUT ${_output}
COMMAND ${PYTHON_EXECUTABLE} ${_fixhtml_py} <${_tmp_html} >${_output}
DEPENDS ${_tmp_html}
)
else()
add_custom_command(OUTPUT ${_output}
COMMAND
${PYTHON_EXECUTABLE} ${_fixdocbook_py} ${_input} |
${XSLTPROC} --maxdepth 20000 --novalid --nonet ${_docbook_xsl} - |
${PYTHON_EXECUTABLE} ${_fixhtml_py} >${_output}
DEPENDS ${_input}
)
endif()
add_custom_target("${_lang}-html-handbook" ALL DEPENDS ${_output})
install(FILES ${_output} DESTINATION ${WITH_DOCDIR})
endmacro()
# Create handbook for KDE 5.
# Replace meinproc5 with wrapper to change DTD version, then generate KDE help.
macro(kf5_create_handbook _docbook _lang)
cmake_minimum_required(VERSION 3.16)
find_package(ECM REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
include(KDEInstallDirs)
find_package(KF${QT_MAJOR_VERSION} REQUIRED COMPONENTS DocTools)
set(KDOCTOOLS_MEINPROC_EXECUTABLE ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/kf5-meinproc-wrapper.py)
if(QT_VERSION_MAJOR EQUAL 6 AND NOT HTML_INSTALL_DIR)
# TODO KF6: If there something defined?
set(HTML_INSTALL_DIR "${WITH_DATAROOTDIR}/doc/HTML")
endif()
kdoctools_create_handbook(${_docbook} INSTALL_DESTINATION ${HTML_INSTALL_DIR}/${_lang} SUBDIR kid3)
endmacro()
if(UNIX)
if(NOT WITH_NO_MANCOMPRESS)
find_program(GZIP_EXECUTABLE gzip)
endif()
# Create man page from DocBook file in language directory
macro(kid3_create_manpage _docbook _lang)
get_filename_component(_input ${_docbook} ABSOLUTE)
set(_output ${CMAKE_CURRENT_BINARY_DIR}/${_lang}/kid3.1)
set(_fixdocbook_py ${CMAKE_CURRENT_SOURCE_DIR}/fixmandocbook.py)
set(_docbook_xsl ${DOCBOOK_XSL_DIR}/manpages/docbook.xsl)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_lang})
add_custom_command(OUTPUT ${_output}
COMMAND
${PYTHON_EXECUTABLE} ${_fixdocbook_py} ${_input} |
${XSLTPROC} --maxdepth 20000 --novalid --nonet ${_docbook_xsl} -
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_lang}
DEPENDS ${_input}
)
if(WITH_NO_MANCOMPRESS)
set(_gzExt "")
set(_output_gz ${_output})
else()
set(_gzExt ".gz")
set(_output_gz ${_output}${_gzExt})
add_custom_command(OUTPUT ${_output_gz}
COMMAND ${GZIP_EXECUTABLE} -cn ${_output} >${_output_gz}
DEPENDS ${_output}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_lang}
)
endif()
add_custom_target("${_lang}-man-handbook" ALL DEPENDS ${_output_gz})
if(_lang STREQUAL "en")
set(_install_dir ${WITH_MANDIR}/man1)
else()
set(_install_dir ${WITH_MANDIR}/${_lang}/man1)
endif()
install(FILES ${_output_gz} DESTINATION ${_install_dir})
if(BUILD_QT_APP)
install(CODE
"execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink kid3.1${_gzExt} \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_install_dir}/kid3-qt.1${_gzExt}\")")
endif()
if(BUILD_CLI_APP)
install(CODE
"execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink kid3.1${_gzExt} \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_install_dir}/kid3-cli.1${_gzExt}\")")
endif()
endmacro()
endif()
if(BUILD_KDE_APP)
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/kf5-meinproc-wrapper.py
CONTENT "#!/usr/bin/env python3
import sys, os, tempfile
args = sys.argv[1:]
docbook = args.pop()
out_fh = tempfile.NamedTemporaryFile(mode='wb')
with open(docbook, 'rb') as in_fh:
for line in in_fh:
line = line.replace(
b'\"-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN\" \"dtd/kdex.dtd\"',
b'\"-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN\" \"dtd/kdedbx45.dtd\"'
).replace(
b'',
b'' +
b'\\n Debian\\'>' +
b'\\n macOS\\'>' +
b'\\n JSON\">' +
b'\\n JavaScript\">' +
b'\\n Del\">' +
b'\\n Up\">'
b'\\n Down\">')
out_fh.write(line)
out_fh.flush()
args.append(out_fh.name)
os.execv('$', args)
")
endif()
list(APPEND _languages en)
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po")
set(_po_dir ${CMAKE_CURRENT_SOURCE_DIR}/po)
message(WARNING "Using custom translations from ${_po_dir}")
else()
set(_po_dir ${CMAKE_SOURCE_DIR}/po)
endif()
foreach(_lang ${_languages})
if(_lang STREQUAL "en")
set(_dir ${CMAKE_CURRENT_SOURCE_DIR}/en)
else()
set(_dir ${_po_dir}/${_lang}/docs/kid3)
endif()
if(BUILD_KDE_APP)
kf5_create_handbook(${_dir}/index.docbook ${_lang})
endif()
if(BUILD_QT_APP)
kid3_create_handbook(${_dir}/index.docbook ${_lang})
endif()
if(UNIX)
kid3_create_manpage(${_dir}/index.docbook ${_lang})
endif()
endforeach()