function(generate_translations) file(STRINGS "${CMAKE_SOURCE_DIR}/resources/po/POTFILES" TRANSLATE_FILES) file(STRINGS "${CMAKE_SOURCE_DIR}/resources/po/LINGUAS" LINGUAS) set(POT_FILE "${CMAKE_SOURCE_DIR}/resources/po/${SHORT_NAME}.pot") file(STRINGS "${CMAKE_SOURCE_DIR}/docs/po/LINGUAS" DOC_LINGUAS) set(DOC_POT_FILE "${CMAKE_SOURCE_DIR}/docs/po/${SHORT_NAME}.pot") find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext) find_program(GETTEXT_MSGMERGE_EXECUTABLE msgmerge) find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt) find_program(ITSTOOL_EXECUTABLE itstool) find_program(YELP_BUILD_EXECUTABLE yelp-build) if(EXISTS "${GETTEXT_XGETTEXT_EXECUTABLE}") if(EXISTS "${GETTEXT_MSGMERGE_EXECUTABLE}") if(EXISTS "${GETTEXT_MSGFMT_EXECUTABLE}") set(HAS_GETTEXT TRUE) endif() endif() endif() if(EXISTS "${ITSTOOL_EXECUTABLE}") if(EXISTS "${YELP_BUILD_EXECUTABLE}") set(HAS_YELP TRUE) endif() endif() if(HAS_GETTEXT) add_custom_command(TARGET ${OUTPUT_NAME} 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}") foreach(LINGUA IN ITEMS ${LINGUAS}) add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${GETTEXT_MSGMERGE_EXECUTABLE}" --backup=off --update "${CMAKE_SOURCE_DIR}/resources/po/${LINGUA}.po" "${POT_FILE}") endforeach() if(HAS_YELP) add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${ITSTOOL_EXECUTABLE}" -o "docs/po/${SHORT_NAME}.pot" "docs/yelp/C/*.page" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") foreach(LINGUA IN ITEMS ${DOC_LINGUAS}) # Update Po add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${GETTEXT_MSGMERGE_EXECUTABLE}" --backup=off --update "${CMAKE_SOURCE_DIR}/docs/po/${LINGUA}.po" "${DOC_POT_FILE}") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${GETTEXT_MSGFMT_EXECUTABLE}" "${CMAKE_SOURCE_DIR}/docs/po/${LINGUA}.po" --output-file="${CMAKE_SOURCE_DIR}/docs/po/${LINGUA}.mo") # Generate Yelp Pages add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_SOURCE_DIR}/docs/yelp/${LINGUA}") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${ITSTOOL_EXECUTABLE}" -m "${CMAKE_SOURCE_DIR}/docs/po/${LINGUA}.mo" -o "${CMAKE_SOURCE_DIR}/docs/yelp/${LINGUA}/" "${CMAKE_SOURCE_DIR}/docs/yelp/C/*.page") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E rm "${CMAKE_SOURCE_DIR}/docs/po/${LINGUA}.mo") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_SOURCE_DIR}/docs/yelp/${LINGUA}/figures") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_directory_if_different "${CMAKE_SOURCE_DIR}/docs/yelp/C/figures" "${CMAKE_SOURCE_DIR}/docs/yelp/${LINGUA}/figures") # Generate HTML Pages add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_SOURCE_DIR}/docs/html/${LINGUA}") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_SOURCE_DIR}/docs/html/${LINGUA}/figures") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_directory_if_different "${CMAKE_SOURCE_DIR}/docs/yelp/${LINGUA}/figures" "${CMAKE_SOURCE_DIR}/docs/html/${LINGUA}/figures") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${YELP_BUILD_EXECUTABLE}" html -o "${CMAKE_SOURCE_DIR}/docs/html/${LINGUA}/" "${CMAKE_SOURCE_DIR}/docs/yelp/${LINGUA}/") endforeach() # Generate English HTML add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_SOURCE_DIR}/docs/html/C") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_SOURCE_DIR}/docs/html/C/figures") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_directory_if_different "${CMAKE_SOURCE_DIR}/docs/yelp/C/figures" "${CMAKE_SOURCE_DIR}/docs/html/C/figures") add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${YELP_BUILD_EXECUTABLE}" html -o "${CMAKE_SOURCE_DIR}/docs/html/C/" "${CMAKE_SOURCE_DIR}/docs/yelp/C/") # Install install(DIRECTORY "${CMAKE_SOURCE_DIR}/docs/yelp/C/" DESTINATION "${CMAKE_INSTALL_DATADIR}/help/C/${SHORT_NAME}") foreach(LINGUA IN ITEMS ${DOC_LINGUAS}) install(DIRECTORY "${CMAKE_SOURCE_DIR}/docs/yelp/${LINGUA}/" DESTINATION "${CMAKE_INSTALL_DATADIR}/help/${LINGUA}/${SHORT_NAME}") endforeach() else() message(WARNING "yelp not found, documentation will not be generated") endif() foreach(LINGUA IN ITEMS ${LINGUAS}) if(MSVC) add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/$/${LINGUA}/LC_MESSAGES") 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") else() add_custom_command(TARGET ${OUTPUT_NAME} PRE_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/${LINGUA}/LC_MESSAGES") 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") endif() endforeach() else() message(WARNING "gettext not found, translations will not be generated") endif() endfunction() function(generate_unix_install) if(NOT UNIX) return() endif() configure_file("${CMAKE_SOURCE_DIR}/resources/linux/${PROJECT_NAME}.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.desktop" @ONLY) configure_file("${CMAKE_SOURCE_DIR}/resources/linux/${PROJECT_NAME}.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}" @ONLY) configure_file("${CMAKE_SOURCE_DIR}/resources/linux/${PROJECT_NAME}.metainfo.xml.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.metainfo.xml" @ONLY) if(DBUS_ACTIVATABLE) configure_file("${CMAKE_SOURCE_DIR}/resources/linux/${PROJECT_NAME}.service.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.service" @ONLY) endif() install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}") 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}") 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}") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.desktop" DESTINATION "${CMAKE_INSTALL_DATADIR}/applications") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.metainfo.xml" DESTINATION "${CMAKE_INSTALL_DATADIR}/metainfo") if(DBUS_ACTIVATABLE) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.service" DESTINATION "${CMAKE_INSTALL_DATADIR}/dbus-1/services") endif() 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") install(FILES "${CMAKE_SOURCE_DIR}/resources/${PROJECT_NAME}-symbolic.svg" DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/symbolic/apps") install(DIRECTORY "${CMAKE_SOURCE_DIR}/resources/yt-dlp-plugins/" DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/plugins") find_program(GTK_UPDATE_ICON_CACHE_EXECUTABLE gtk-update-icon-cache) if(GTK_UPDATE_ICON_CACHE_EXECUTABLE) install(CODE "execute_process(COMMAND ${GTK_UPDATE_ICON_CACHE_EXECUTABLE})") else() message(WARNING "gtk-update-icon-cache not found, icons will not be updated") endif() find_program(UPDATE_DESKTOP_DATABASE_EXECUTABLE update-desktop-database) if(UPDATE_DESKTOP_DATABASE_EXECUTABLE) install(CODE "execute_process(COMMAND ${UPDATE_DESKTOP_DATABASE_EXECUTABLE})") else() message(WARNING "update-desktop-database not found, desktop database will not be updated") endif() endfunction()