Rework appdata and desktop file generation

- attempt to merge in translations before merging in version data
- add the intermediate file (with translations) to the dist tarball
- dist builds no longer have to run the translation merge, but can instead
  use the included intermediate file. This accomodates distros with
  older gettext versions.
pull/644/head
Geert Janssens 6 years ago
parent 8243496ed0
commit cce69e37d2

@ -9,6 +9,6 @@ endif()
set_dist_list(cmake_DIST CMakeLists.txt README_CMAKE.txt cmake_uninstall.cmake.in
configure-appdata.cmake configure-manpage.cmake git2version-info.cmake
insert-vcs-data.cmake configure-manpage.cmake git2version-info.cmake
version-info2env.cmake
)

@ -13,4 +13,4 @@
include (${SRC_DIR}/cmake/version-info2env.cmake)
versioninfo2env (${VCS_INFO_FILE})
configure_file(${SRC} ${DST} )
configure_file(${SRC} ${DST})

@ -153,62 +153,91 @@ install(TARGETS gnc-gnome
# No headers to install
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml.in
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.appdata.xml.in.in ${VCS_INFO_FILE}
COMMAND ${CMAKE_COMMAND} -D SRC=${CMAKE_CURRENT_SOURCE_DIR}/gnucash.appdata.xml.in.in
-D DST=${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml.in
-D VCS_INFO_FILE=${VCS_INFO_FILE}
-D SRC_DIR=${CMAKE_SOURCE_DIR}
-P ${CMAKE_SOURCE_DIR}/cmake/configure-appdata.cmake)
if (TRANSLATE_GNUCASH_APPDATA)
set (GNC_APPDATA_IN ${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml.in)
if (NOT BUILDING_FROM_VCS)
# We're building from a dist tarball.
# As a convenience to packagers we have included a pretranslated
# intermediate appdata file in the dist tarball.
set (GNC_APPDATA_IN ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.appdata.xml.in)
elseif (TRANSLATE_GNUCASH_APPDATA)
# FIXME: where does LC_ALL=C come from?
add_custom_command (
OUTPUT gnucash.appdata.xml
OUTPUT ${GNC_APPDATA_IN}
COMMAND ${CMAKE_COMMAND} -E env
LC_ALL=C
${GETTEXT_MSGFMT_EXECUTABLE}
--xml --template ${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml.in
--xml --template ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.appdata.xml.in.in
-d ${CMAKE_SOURCE_DIR}/po
-o gnucash.appdata.xml
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml.in ${VCS_INFO_FILE})
-o ${GNC_APPDATA_IN}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.appdata.xml.in.in)
else()
# Gettext is too old to be able to merge an appdata file.
# Gettext is too old to be able to merge a desktop file
# and we're building from git.
# Fall back to providing an unmerged (and hence untranslated) appdata file.
# Note the build system won't allow generating a dist tarball in this scenario.
add_custom_command (
OUTPUT gnucash.appdata.xml
OUTPUT ${GNC_APPDATA_IN}
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml.in
${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml.in ${VCS_INFO_FILE})
${CMAKE_CURRENT_SOURCE_DIR}/gnucash.appdata.xml.in.in
${GNC_APPDATA_IN}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.appdata.xml.in.in)
endif()
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml
DEPENDS ${GNC_APPDATA_IN} ${VCS_INFO_FILE}
COMMAND ${CMAKE_COMMAND} -D SRC=${GNC_APPDATA_IN}
-D DST=${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml
-D VCS_INFO_FILE=${VCS_INFO_FILE}
-D PROJECT_VERSION=${PROJECT_VERSION}
-D SRC_DIR=${CMAKE_SOURCE_DIR}
-P ${CMAKE_SOURCE_DIR}/cmake/insert-vcs-data.cmake)
add_custom_target(gnucash-appdata ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
#=======
configure_file(gnucash.desktop.in.in gnucash.desktop.in)
if (TRANSLATE_GNUCASH_DESKTOP)
set (GNC_DESKTOP_IN ${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop.in)
if (NOT BUILDING_FROM_VCS)
# We're building from a dist tarball.
# As a convenience to packagers we have included a pretranslated
# intermediate desktop file in the dist tarball.
set (GNC_DESKTOP_IN ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.desktop.in)
elseif (TRANSLATE_GNUCASH_DESKTOP)
add_custom_command (
OUTPUT gnucash.desktop
OUTPUT ${GNC_DESKTOP_IN}
COMMAND ${CMAKE_COMMAND} -E env
LC_ALL=C
${GETTEXT_MSGFMT_EXECUTABLE}
--desktop --template gnucash.desktop.in
--desktop --template ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.desktop.in.in
-d ${CMAKE_SOURCE_DIR}/po
-o gnucash.desktop
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop.in)
-o ${GNC_DESKTOP_IN}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.desktop.in.in)
else()
# Gettext is too old to be able to merge a desktop file.
# Gettext is too old to be able to merge a desktop file
# and we're building from git.
# Fall back to providing an unmerged (and hence untranslated) desktop file.
configure_file (${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop.in
${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop COPYONLY)
# Note the build system won't allow generating a dist tarball in this scenario.
add_custom_command (
OUTPUT ${GNC_DESKTOP_IN}
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/gnucash.desktop.in.in
${GNC_DESKTOP_IN}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gnucash.desktop.in.in)
endif()
add_custom_command (
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop
DEPENDS ${GNC_DESKTOP_IN} ${VCS_INFO_FILE}
COMMAND ${CMAKE_COMMAND} -D SRC=${GNC_DESKTOP_IN}
-D DST=${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop
-D VCS_INFO_FILE=${VCS_INFO_FILE}
-D PROJECT_VERSION=${PROJECT_VERSION}
-D SRC_DIR=${CMAKE_SOURCE_DIR}
-P ${CMAKE_SOURCE_DIR}/cmake/insert-vcs-data.cmake)
add_custom_target(gnucash-desktop ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
@ -216,3 +245,4 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gnucash.desktop DESTINATION ${CMAKE_I
set_dist_list(gnome_DIST
CMakeLists.txt gnome.i gnucash.appdata.xml.in.in gnucash.desktop.in.in
${gnc_gnome_noinst_HEADERS} ${gnc_gnome_SOURCES})
dist_add_generated(${BUILDING_FROM_VCS} gnucash.appdata.xml.in gnucash.desktop.in)

Loading…
Cancel
Save