diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 4535508026..a72d38f803 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -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 ) diff --git a/cmake/configure-appdata.cmake b/cmake/insert-vcs-data.cmake similarity index 96% rename from cmake/configure-appdata.cmake rename to cmake/insert-vcs-data.cmake index 11cc7b7653..2e0ce92ca0 100644 --- a/cmake/configure-appdata.cmake +++ b/cmake/insert-vcs-data.cmake @@ -13,4 +13,4 @@ include (${SRC_DIR}/cmake/version-info2env.cmake) versioninfo2env (${VCS_INFO_FILE}) -configure_file(${SRC} ${DST} ) +configure_file(${SRC} ${DST}) diff --git a/gnucash/gnome/CMakeLists.txt b/gnucash/gnome/CMakeLists.txt index 7a05b38b09..3a96d9169b 100644 --- a/gnucash/gnome/CMakeLists.txt +++ b/gnucash/gnome/CMakeLists.txt @@ -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)