Add cmake support for manual generation/translation/installation

Add cmake support for manpage installation

Workaround for a bug in cmake 2.4.7
This commit is contained in:
Moritz Göbelbecker 2008-05-12 23:00:16 +00:00
parent a6ab529bdb
commit 12d1d7247d
8 changed files with 225 additions and 50 deletions

View file

@ -1,7 +1,5 @@
# most stuff should be implemented so far, mgoe should know the details (he has done all the work...)
# what is not working so far:
# * building/installing manpages
# * building/installing manual
# * fribidi support
# * Support for server uid and server gid for game server
# * Support for alternate location for game server process id file
@ -70,20 +68,16 @@ endif(PYTHON_EXECUTABLE AND NOT PYTHON_LIBRARY)
#Options
set(BINDIR "bin" CACHE STRING "Where to install binaries")
set(MANDIR "man" CACHE STRING "Where to install manpages")
set(DATAROOTDIR "${CMAKE_INSTALL_PREFIX}/share" CACHE STRING "Sets the root of data directories to a non-default location")
set(DOCDIR "${DATAROOTDIR}/doc/wesnoth" CACHE STRING "Sets the doc directory to a non-default location.")
set(DATADIRNAME "wesnoth" CACHE STRING "change the name of the directory for the read-only architecture-independent game data")
set(LOCALEDIR "translations" CACHE STRING "change the name of the locale data directory to a non-default name")
set(PREFERENCES_DIR "" CACHE STRING "Use a non-default preferences directory (.wesnoth on unix)")
set(BINARY_SUFFIX "" CACHE STRING "Suffix behind all binaries")
set(BINARY_PREFIX "" CACHE STRING "Prefix in front of all binaries")
set(GUI "normal" CACHE STRING "Set for GUI reductions for resolutions down to 800x480 (eeePC, Nokia 8x0) or 320x240 (PDAs) (normal|small|tiny)")
if(NOT CONFIGURED)
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DDEBUG -ggdb3 -W -Wall -ansi" CACHE STRING "Flags used by the compiler during debug builds." FORCE)
endif(NOT CONFIGURED)
option(ENABLE_GAME "Enable compilation of the game" ON)
option(ENABLE_CAMPAIGN_SERVER "Enable compilation of campaign server")
option(ENABLE_SERVER "Enable compilation of server" ON)
@ -94,6 +88,10 @@ option(ENABLE_TESTS "Build unit tests")
option(ENABLE_PYTHON "Enable in-game python extensions" ON)
option(ENABLE_DUMMY_LOCALES "Create dummy locales")
if(NOT CONFIGURED)
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DDEBUG -ggdb3 -W -Wall -ansi" CACHE STRING "Flags used by the compiler during debug builds." FORCE)
endif(NOT CONFIGURED)
# compose datadir path of datarootdir and datadirname
set(DATADIR ${DATAROOTDIR}/${DATADIRNAME})
@ -119,6 +117,8 @@ if(ENABLE_PYTHON AND PYTHON_LIBRARY)
add_definitions(-DHAVE_PYTHON)
endif(ENABLE_PYTHON AND PYTHON_LIBRARY)
#create dummy-locales
if(ENABLE_DUMMY_LOCALES)
add_definitions(-DUSE_DUMMYLOCALES)
@ -146,16 +146,20 @@ if(ENABLE_DUMMY_LOCALES)
endforeach(LANGFILE ${LANGS})
add_custom_target(create-dummy-locales ALL DEPENDS ${DUMMY_LOCALES})
# this is a workaround for a bug in 2.4-7
file(MAKE_DIRECTORY locales)
install(DIRECTORY locales DESTINATION ${DATADIR} )
endif(ENABLE_DUMMY_LOCALES)
#configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
file(READ po/LINGUAS LINGUAS)
string(REPLACE "\n" "" LINGUAS ${LINGUAS})
separate_arguments(LINGUAS)
# only one of the subdirs working so far...
add_subdirectory(doc)
add_subdirectory(po)
add_subdirectory(src)
#add_subdirectory(doc)
#shrink images
if(GUI STREQUAL "tiny")
@ -163,7 +167,7 @@ if(GUI STREQUAL "tiny")
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
set(IMAGE_BUILD_DIR ${CMAKE_SOURCE_DIR}/tiny_images)
else(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
else()
set(IMAGE_BUILD_DIR ${CMAKE_BINARY_DIR})
endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
@ -177,6 +181,8 @@ if(GUI STREQUAL "tiny")
########### install files ###############
# this is a workaround for a bug in 2.4-7
file(MAKE_DIRECTORY ${IMAGE_BUILD_DIR}/data ${IMAGE_BUILD_DIR}/images)
install(DIRECTORY ${IMAGE_BUILD_DIR}/data ${IMAGE_BUILD_DIR}/images DESTINATION ${DATADIR})
install(DIRECTORY data fonts sounds DESTINATION ${DATADIR}
PATTERN "*.png" EXCLUDE

View file

@ -79,3 +79,67 @@ if(GETTEXT_MSGFMT_EXECUTABLE)
endif(GETTEXT_MSGFMT_EXECUTABLE)
ENDMACRO (ADD_MO_TARGETS DOMAIN)
macro(ADD_PO4A_POT_TARGET FILES DOMAIN TYPE OPTIONS)
set(_FILES ${FILES})
separate_arguments(_FILES)
set(_OPTIONS ${OPTIONS})
separate_arguments(_OPTIONS)
set(_FILE_OPTION)
foreach(FILE ${_FILES})
file(RELATIVE_PATH _REL_FILE ${CMAKE_CURRENT_SOURCE_DIR} ${FILE} )
list(APPEND _FILE_OPTION -m ${_REL_FILE})
endforeach(FILE ${FILES})
add_custom_command(OUTPUT ${DOMAIN}.pot
COMMAND ${PO4A_GETTEXTTIZE_EXECUTABLE}
-f ${TYPE} ${_OPTIONS} ${_FILE_OPTION} -p ${DOMAIN}.pot
DEPENDS ${FILES}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_custom_target(update-pot-${DOMAIN} DEPENDS ${DOMAIN}.pot)
add_dependencies(update-pot update-pot-${DOMAIN})
endmacro(ADD_PO4A_POT_TARGET FILES DOMAIN)
macro(ADD_PO4A_TRANSLATE_TARGET INFILE OUTFILE STAMPFILE DOMAIN FORMAT CHARSET OPTIONS)
set(_LINGUAS ${ARGN})
set(_OPTIONS ${OPTIONS})
separate_arguments(_OPTIONS)
string(REGEX REPLACE ".*/([^ /]*)$" "\\1" _FILENAME ${INFILE})
set(_PO4AFILES)
foreach(_LANG ${_LINGUAS})
set(_POFILE ${_LANG}.po)
set(LANG ${_LANG})
string(CONFIGURE ${OUTFILE} _OUTFILE)
string(CONFIGURE ${STAMPFILE} _STAMPFILE)
set(LANG)
set(_CHARSET ${${CHARSET}_${_LANG}})
if(NOT _CHARSET)
set(_CHARSET ${${CHARSET}_default})
if(NOT _CHARSET)
set(_CHARSET "utf-8")
endif(NOT _CHAREST)
endif(NOT _CHAREST)
set_source_files_properties(${_POFILE} PROPERTIES GENERATED TRUE)
add_custom_command(OUTPUT "${_STAMPFILE}"
COMMAND ${PO4A_TRANSLATE_EXECUTABLE}
-f ${FORMAT} ${_OPTIONS} -L ${_CHARSET} -m ${INFILE} -p "${_POFILE}" -l "${_OUTFILE}"
COMMAND ${CMAKE_COMMAND} -E touch "${_STAMPFILE}"
MAIN_DEPENDENCY "${_POFILE}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
list(APPEND _PO4AFILES ${_STAMPFILE})
endforeach(_LANG ${_LINGUAS})
add_custom_target(update-po4a-${_FILENAME} DEPENDS ${_PO4AFILES})
endmacro(ADD_PO4A_TRANSLATE_TARGET INFILE OUTFILE DOMAIN FORMAT OPTIONS)

2
doc/CMakeLists.txt Normal file
View file

@ -0,0 +1,2 @@
add_subdirectory(man)
add_subdirectory(manual)

18
doc/man/CMakeLists.txt Normal file
View file

@ -0,0 +1,18 @@
SET(MANPAGES)
if(ENABLE_GAME)
SET(MANPAGES ${MANPAGES} wesnoth.6)
endif()
if(ENABLE_EDITOR)
SET(MANPAGES ${MANPAGES} wesnoth_editor.6)
endif()
if(ENABLE_SERVER)
SET(MANPAGES ${MANPAGES} wesnothd.6)
endif(ENABLE_EDITOR)
foreach(MANPAGE ${MANPAGES})
install(FILES ${MANPAGE} DESTINATION "${MANDIR}/man6/")
foreach(LANG ${LINGUAS})
install(FILES ${LANG}/${MANPAGE} DESTINATION "${MANDIR}/${LANG}/man6/" OPTIONAL)
endforeach(LANG ${LINGUAS})
endforeach(MANPAGE ${MANPAGES})

51
doc/manual/CMakeLists.txt Normal file
View file

@ -0,0 +1,51 @@
set(XSLTOPTS
--nonet
--stringparam callout.graphics 0
--stringparam navig.graphics 0
--stringparam admon.textlabel 1
--stringparam admon.graphics 0
--stringparam html.stylesheet "./styles/manual.css"
)
find_program(ASCIIDOC_EXECUTABLE "asciidoc")
find_program(DOS2UNIX_EXECUTABLE "dos2unix")
find_program(XSLTPROC_EXECUTABLE "xsltproc")
if(ASCIIDOC_EXECUTABLE AND DOS2UNIX_EXECUTABLE AND XSLTPROC_EXECUTABLE)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/manual.en.xml
COMMAND ${ASCIIDOC_EXECUTABLE} -b docbook -d book -n -a toc -o manual.en.xml ${CMAKE_CURRENT_SOURCE_DIR}/manual.txt
COMMAND ${DOS2UNIX_EXECUTABLE} manual.en.xml
MAIN_DEPENDENCY manual.txt)
add_custom_target(manual.xml DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/manual.en.xml)
add_custom_command(OUTPUT manual.en.html
COMMAND ${XSLTPROC_EXECUTABLE} ${XSLTOPTS} /etc/asciidoc/docbook-xsl/xhtml.xsl
manual.en.xml > ${CMAKE_CURRENT_SOURCE_DIR}/manual.en.html
MAIN_DEPENDENCY ${CMAKE_CURRENT_BINARY_DIR}/manual.en.xml)
set(TRANSLATED)
foreach(LANG ${LINGUAS})
set(INFILE manual.${LANG}.xml)
set(OUTFILE ${CMAKE_CURRENT_SOURCE_DIR}/manual.${LANG}.html)
set(STAMPFILE ${CMAKE_CURRENT_BINARY_DIR}/manual.${LANG}.xml.stamp)
set_source_files_properties(${STAMPFILE} PROPERTIES GENERATED TRUE)
add_custom_command(OUTPUT ${OUTFILE}
COMMAND test -f ${INFILE} &&
${XSLTPROC_EXECUTABLE} ${XSLTOPTS} /etc/asciidoc/docbook-xsl/xhtml.xsl
${INFILE} > ${OUTFILE} || true
MAIN_DEPENDENCY ${STAMPFILE})
list(APPEND TRANSLATED ${OUTFILE})
endforeach(LANG ${LINGUAS})
add_custom_target(docs DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/manual.en.html ${TRANSLATED})
add_dependencies(docs update-po4a-wesnoth-manual)
endif(ASCIIDOC_EXECUTABLE AND DOS2UNIX_EXECUTABLE AND XSLTPROC_EXECUTABLE)
install(FILES manual.en.html DESTINATION "${DOCDIR}")
install(DIRECTORY images styles DESTINATION "${DOCDIR}")
foreach(LANG ${LINGUAS})
install(FILES manual.${LANG}.html DESTINATION "${DOCDIR}" OPTIONAL)
endforeach(LANG ${LINGUAS})

View file

@ -3,10 +3,6 @@ set(XGETTEXT_OPTIONS "--from-code=UTF-8 --sort-by-file --keyword=sgettext --keyw
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/pot-update.sh.in ${CMAKE_CURRENT_BINARY_DIR}/pot-update.sh)
file(READ LINGUAS LINGUAS)
string(REPLACE "\n" "" LINGUAS ${LINGUAS})
separate_arguments(LINGUAS)
add_custom_target(update-pot)
add_custom_target(update-po)
add_custom_target(update-po4a)

View file

@ -1,26 +1,52 @@
find_program(PO4A_EXECUTABLE "po4a")
find_program(PO4A_GETTEXTTIZE_EXECUTABLE "po4a-gettextize")
find_program(PO4A_TRANSLATE_EXECUTABLE "po4a-translate")
#get domain from current dir
file(RELATIVE_PATH REL ${CMAKE_SOURCE_DIR}/po ${CMAKE_CURRENT_SOURCE_DIR} )
set(DOMAIN ${REL})
if(PO4A_GETTEXTTIZE_EXECUTABLE AND PO4A_TRANSLATE_EXECUTABLE)
#get domain from current dir
file(RELATIVE_PATH REL ${CMAKE_SOURCE_DIR}/po ${CMAKE_CURRENT_SOURCE_DIR} )
set(DOMAIN ${REL})
if(PO4A_EXECUTABLE)
set(PO4A_ARGS --rm-backups --copyright-holder "Wesnoth Development Team")
set(FILES "${CMAKE_SOURCE_DIR}/doc/man/wesnoth.6"
"${CMAKE_SOURCE_DIR}/doc/man/wesnoth_editor.6"
"${CMAKE_SOURCE_DIR}/doc/man/wesnothd.6")
add_custom_target(update-po4a-${DOMAIN}
COMMAND ${PO4A_EXECUTABLE}
${PO4A_ARGS} ${DOMAIN}.cfg
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
set(CHARSET_default iso-8859-1)
set(CHARSET_bg cp1251)
set(CHARSET_ca_ES@valencia iso-8859-15)
set(CHARSET_cs iso-8859-2)
set(CHARSET_el iso-8859-7)
set(CHARSET_he iso-8859-8)
set(CHARSET_hr utf8)
set(CHARSET_hu iso-8859-2)
set(CHARSET_ja euc-jp)
set(CHARSET_ko euc-kr)
set(CHARSET_lt iso-8859-13)
set(CHARSET_pl iso-8859-2)
set(CHARSET_ro iso-8859-2)
set(CHARSET_ru iso-8859-5)
set(CHARSET_sk iso-8859-2)
set(CHARSET_sl iso-8859-2)
set(CHARSET_sr utf8)
set(CHARSET_sr@latin utf8)
set(CHARSET_tr iso-8859-9)
set(CHARSET_zh_CN gb2312)
ADD_PO4A_POT_TARGET("${FILES}" ${DOMAIN} man "")
ADD_PO_TARGETS(${DOMAIN} ${LINGUAS})
set(LANG)
ADD_PO4A_TRANSLATE_TARGET("${CMAKE_SOURCE_DIR}/doc/man/wesnoth.6"
"${CMAKE_SOURCE_DIR}/doc/man/@LANG@/wesnoth.6"
"${CMAKE_BINARY_DIR}/doc/man/wesnoth.6.@LANG@.stamp" ${DOMAIN} man "CHARSET" "-k 80" ${LINGUAS})
ADD_PO4A_TRANSLATE_TARGET("${CMAKE_SOURCE_DIR}/doc/man/wesnoth_editor.6"
"${CMAKE_SOURCE_DIR}/doc/man/@LANG@/wesnoth_editor.6"
"${CMAKE_BINARY_DIR}/doc/man/wesnoth_editor.6.@LANG@.stamp" ${DOMAIN} man "CHARSET" "-k 80" ${LINGUAS})
ADD_PO4A_TRANSLATE_TARGET("${CMAKE_SOURCE_DIR}/doc/man/wesnothd.6"
"${CMAKE_SOURCE_DIR}/doc/man/@LANG@/wesnothd.6"
"${CMAKE_BINARY_DIR}/doc/man/wesnothd.6.@LANG@.stamp" ${DOMAIN} man "CHARSET" "-k 80" ${LINGUAS})
add_custom_target(update-po4a-${DOMAIN})
add_dependencies(update-po4a-${DOMAIN} update-po4a-wesnoth_editor.6 update-po4a-wesnothd.6 update-po4a-wesnoth.6)
add_dependencies(update-po4a update-po4a-${DOMAIN})
add_custom_target(update-pot-${DOMAIN}
COMMAND ${PO4A_EXECUTABLE}
${PO4A_ARGS} --no-translations ${DOMAIN}.cfg
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
#po4a creates po- and pot-files at the same time, so add it to both targets
add_dependencies(update-pot update-pot-${DOMAIN})
add_dependencies(update-po update-pot-${DOMAIN})
endif(PO4A_EXECUTABLE)
endif(PO4A_GETTEXTTIZE_EXECUTABLE AND PO4A_TRANSLATE_EXECUTABLE)

View file

@ -1,26 +1,38 @@
find_program(PO4A_EXECUTABLE "po4a")
find_program(PO4A_GETTEXTTIZE_EXECUTABLE "po4a-gettextize")
find_program(PO4A_TRANSLATE_EXECUTABLE "po4a-translate")
#get domain from current dir
file(RELATIVE_PATH REL ${CMAKE_SOURCE_DIR}/po ${CMAKE_CURRENT_SOURCE_DIR} )
set(DOMAIN ${REL})
if(PO4A_EXECUTABLE)
set(PO4A_ARGS --rm-backups --copyright-holder "Wesnoth Development Team")
ADD_PO_TARGETS(${DOMAIN} ${LINGUAS})
add_custom_target(update-po4a-${DOMAIN}
COMMAND ${PO4A_EXECUTABLE}
${PO4A_ARGS} ${DOMAIN}.cfg
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
if(ASCIIDOC_EXECUTABLE AND DOS2UNIX_EXECUTABLE AND XSLTPROC_EXECUTABLE)
set(CAN_GENERATE_DOC TRUE)
endif()
add_dependencies(update-po4a update-po4a-${DOMAIN})
if(PO4A_GETTEXTTIZE_EXECUTABLE AND PO4A_TRANSLATE_EXECUTABLE)
if(EXISTS "${CMAKE_BINARY_DIR}/doc/manual/manual.en.xml" OR CAN_GENERATE_DOC)
add_custom_target(update-pot-${DOMAIN}
COMMAND ${PO4A_EXECUTABLE}
${PO4A_ARGS} --no-translations ${DOMAIN}.cfg
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
set(FILES "${CMAKE_BINARY_DIR}/doc/manual/manual.en.xml")
set(MANUAL_CHARSET_default utf-8)
#po4a creates po- and pot-files at the same time, so add it to both targets
add_dependencies(update-pot update-pot-${DOMAIN})
add_dependencies(update-po update-pot-${DOMAIN})
ADD_PO4A_POT_TARGET("${FILES}" ${DOMAIN} docbook "-M utf-8")
endif(PO4A_EXECUTABLE)
add_custom_target(update-po4a-${DOMAIN})
set(LANG)
ADD_PO4A_TRANSLATE_TARGET("${CMAKE_BINARY_DIR}/doc/manual/manual.en.xml"
"${CMAKE_BINARY_DIR}/doc/manual/manual.@LANG@.xml"
"${CMAKE_BINARY_DIR}/doc/manual/manual.@LANG@.xml.stamp"
${DOMAIN} docbook "MANUAL_CHARSET" "-k 80" ${LINGUAS})
add_dependencies(update-po4a-${DOMAIN} update-po4a-manual.en.xml)
add_dependencies(update-po4a update-po4a-${DOMAIN})
if(CAN_GENERATE_DOC)
add_dependencies(update-pot-${DOMAIN} manual.xml)
add_dependencies(update-po4a-manual.en.xml manual.xml)
endif(CAN_GENERATE_DOC)
endif()
endif()