1+ function (generate_translations target )
2+ file (STRINGS "${CMAKE_SOURCE_DIR} /resources/po/POTFILES" TRANSLATE_FILES )
3+ file (STRINGS "${CMAKE_SOURCE_DIR} /resources/po/LINGUAS" LINGUAS )
4+ set (POT_FILE "${CMAKE_SOURCE_DIR} /resources/po/${SHORT_NAME} .pot" )
5+
6+ find_program (GETTEXT_XGETTEXT_EXECUTABLE xgettext )
7+ find_program (GETTEXT_MSGMERGE_EXECUTABLE msgmerge )
8+ find_program (GETTEXT_MSGFMT_EXECUTABLE msgfmt )
9+ if (EXISTS "${GETTEXT_XGETTEXT_EXECUTABLE} " )
10+ if (EXISTS "${GETTEXT_MSGMERGE_EXECUTABLE} " )
11+ if (EXISTS "${GETTEXT_MSGFMT_EXECUTABLE} " )
12+ set (HAS_GETTEXT TRUE )
13+ endif ()
14+ endif ()
15+ endif ()
16+
17+ if (HAS_GETTEXT)
18+ add_custom_command (TARGET ${target} PRE_BUILD COMMAND "${GETTEXT_XGETTEXT_EXECUTABLE} " --from-code=utf-8 --c++ --force-po --output= "${POT_FILE} " --keyword=_ --keyword=_f --keyword=_n:1,2 --keyword=_fn:1,2 --keyword=_p:1c,2 --keyword=_pn:1c,2,3 --keyword=C_:1c,2 --width=80 ${TRANSLATE_FILES} WORKING_DIRECTORY "${CMAKE_SOURCE_DIR} " )
19+ foreach (LINGUA IN ITEMS ${LINGUAS} )
20+ add_custom_command (TARGET ${target} PRE_BUILD COMMAND "${GETTEXT_MSGMERGE_EXECUTABLE} " --backup=off --update "${CMAKE_SOURCE_DIR} /resources/po/${LINGUA} .po" "${POT_FILE} " )
21+ endforeach ()
22+ foreach (LINGUA IN ITEMS ${LINGUAS} )
23+ if (MSVC )
24+ add_custom_command (TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND} " -E make_directory "${CMAKE_CURRENT_BINARY_DIR} /$<CONFIG >/${LINGUA} /LC_MESSAGES" )
25+ add_custom_command (TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${GETTEXT_MSGFMT_EXECUTABLE} " "${CMAKE_SOURCE_DIR} /resources/po/${LINGUA} .po" --output-file= "${CMAKE_CURRENT_BINARY_DIR} /$<CONFIG >/${LINGUA} /LC_MESSAGES/${SHORT_NAME} .mo" )
26+ else ()
27+ add_custom_command (TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND} " -E make_directory "${CMAKE_CURRENT_BINARY_DIR} /${LINGUA} /LC_MESSAGES" )
28+ add_custom_command (TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${GETTEXT_MSGFMT_EXECUTABLE} " "${CMAKE_SOURCE_DIR} /resources/po/${LINGUA} .po" --output-file= "${CMAKE_CURRENT_BINARY_DIR} /${LINGUA} /LC_MESSAGES/${SHORT_NAME} .mo" )
29+ endif ()
30+ endforeach ()
31+ else ()
32+ message (WARNING "gettext not found, translations will not be generated" )
33+ endif ()
34+ endfunction ()
35+
36+ function (generate_linux_install is_gtk )
37+ if (NOT LINUX )
38+ return ()
39+ endif ()
40+ configure_file ("${CMAKE_SOURCE_DIR} /resources/linux/${PROJECT_NAME} .desktop.in" "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .desktop" @ONLY )
41+ configure_file ("${CMAKE_SOURCE_DIR} /resources/linux/${PROJECT_NAME} .in" "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} " @ONLY )
42+ configure_file ("${CMAKE_SOURCE_DIR} /resources/linux/${PROJECT_NAME} .metainfo.xml.in" "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .metainfo.xml" @ONLY )
43+ install (DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /" DESTINATION "${CMAKE_INSTALL_LIBDIR} /${PROJECT_NAME} " )
44+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_NAME} " PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE DESTINATION "${CMAKE_INSTALL_LIBDIR} /${PROJECT_NAME} " )
45+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} " PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE DESTINATION "${CMAKE_INSTALL_BINDIR} " )
46+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .desktop" DESTINATION "${CMAKE_INSTALL_DATADIR} /applications" )
47+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .metainfo.xml" DESTINATION "${CMAKE_INSTALL_DATADIR} /metainfo" )
48+ install (FILES "${CMAKE_SOURCE_DIR} /resources/${PROJECT_NAME} .svg" "${CMAKE_SOURCE_DIR} /resources/${PROJECT_NAME} -devel.svg" DESTINATION "${CMAKE_INSTALL_DATADIR} /icons/hicolor/scalable/apps" )
49+ install (FILES "${CMAKE_SOURCE_DIR} /resources/${PROJECT_NAME} -symbolic.svg" DESTINATION "${CMAKE_INSTALL_DATADIR} /icons/hicolor/symbolic/apps" )
50+ find_program (GTK_UPDATE_ICON_CACHE_EXECUTABLE gtk-update-icon-cache )
51+ if (GTK_UPDATE_ICON_CACHE_EXECUTABLE)
52+ install (CODE "execute_process(COMMAND ${GTK_UPDATE_ICON_CACHE_EXECUTABLE} )" )
53+ else ()
54+ message (WARNING "gtk-update-icon-cache not found, icons will not be updated" )
55+ endif ()
56+ find_program (UPDATE_DESKTOP_DATABASE_EXECUTABLE update-desktop-database )
57+ if (UPDATE_DESKTOP_DATABASE_EXECUTABLE)
58+ install (CODE "execute_process(COMMAND ${UPDATE_DESKTOP_DATABASE_EXECUTABLE} )" )
59+ else ()
60+ message (WARNING "update-desktop-database not found, desktop database will not be updated" )
61+ endif ()
62+ endfunction ()
0 commit comments