diff --git a/CMakeLists.txt b/CMakeLists.txt index 99d81319..017ea3e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,6 +81,8 @@ macro(set_path what val desc) endif() endmacro(set_path) +set(LOCALEDIR_NAME "share/locale") + string(REGEX REPLACE "^liblib" "lib" LIBDIR_NAME "lib${LIB_SUFFIX}") set_path(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" "Installation directory for architecture-independent files") set_path(EXEC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" "Installation directory for architecture-dependent files") @@ -94,7 +96,7 @@ set_path(SERVICE_FILE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/dbus-1/services" "Ins set_path(ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/icons" "Installation directory for icons") set_path(INCLUDE_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/include" "Installation directory for C header files") set_path(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/${LIBDIR_NAME}" "Installation directory for object code libraries") -set_path(LOCALE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/locale" "Installation directory for locale files") +set_path(LOCALE_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/${LOCALEDIR_NAME}" "Installation directory for locale files") set_path(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/dino/plugins" "Installation directory for dino plugin object code files") set_path(VAPI_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/vala/vapi" "Installation directory for Vala API files") diff --git a/libdino/CMakeLists.txt b/libdino/CMakeLists.txt index 2475fde8..4fba44f7 100644 --- a/libdino/CMakeLists.txt +++ b/libdino/CMakeLists.txt @@ -102,7 +102,8 @@ DEPENDS ${CMAKE_BINARY_DIR}/exports/dino_i18n.h ) -add_definitions(${VALA_CFLAGS} -DDINO_SYSTEM_PLUGIN_DIR="${PLUGIN_INSTALL_DIR}" -DDINO_SYSTEM_LIBDIR_NAME="${LIBDIR_NAME}" -DG_LOG_DOMAIN="libdino" -DDINO_VERSION=\"${PROJECT_VERSION}\") +add_definitions(${VALA_CFLAGS} -DDINO_SYSTEM_PLUGIN_DIR="${PLUGIN_INSTALL_DIR}" -DDINO_SYSTEM_LIBDIR_NAME="${LIBDIR_NAME}" -DG_LOG_DOMAIN="libdino" + -DDINO_VERSION=\"${PROJECT_VERSION}\" -DDINO_SYSTEM_LOCALEDIR_NAME="${LOCALEDIR_NAME}") add_library(libdino SHARED ${LIBDINO_VALA_C} ${CMAKE_BINARY_DIR}/exports/dino_i18n.h) add_dependencies(libdino dino-vapi) target_link_libraries(libdino xmpp-vala qlite ${LIBDINO_PACKAGES} m) diff --git a/libdino/meson.build b/libdino/meson.build index c1cbbb70..0cb641bb 100644 --- a/libdino/meson.build +++ b/libdino/meson.build @@ -80,6 +80,7 @@ sources = files( sources += [version_vala] c_args = [ '-DDINO_SYSTEM_LIBDIR_NAME="@0@"'.format(get_option('libdir')), + '-DDINO_SYSTEM_LOCALEDIR_NAME="@0@"'.format(get_option('localedir')), '-DDINO_SYSTEM_PLUGIN_DIR="@0@"'.format(get_option('prefix') / get_option('libdir') / get_option('plugindir')), '-DG_LOG_DOMAIN="libdino"', ] diff --git a/libdino/src/util/util.vala b/libdino/src/util/util.vala index c691a279..f203c62d 100644 --- a/libdino/src/util/util.vala +++ b/libdino/src/util/util.vala @@ -2,6 +2,7 @@ namespace Dino { private extern const string SYSTEM_LIBDIR_NAME; private extern const string SYSTEM_PLUGIN_DIR; +private extern const string SYSTEM_LOCALEDIR_NAME; public class SearchPathGenerator { @@ -12,14 +13,21 @@ public class SearchPathGenerator { } public string get_locale_path(string gettext_package, string locale_install_dir) { - string? locale_dir = null; - if (Path.get_dirname(exec_path).contains("dino") || Path.get_dirname(exec_path) == "." || Path.get_dirname(exec_path).contains("build")) { - string exec_locale = Path.build_filename(Path.get_dirname(exec_path), "locale"); - if (FileUtils.test(Path.build_filename(exec_locale, "en", "LC_MESSAGES", gettext_package + ".mo"), FileTest.IS_REGULAR)) { - locale_dir = exec_locale; + if (exec_path != null) { + var exec_dir = Path.get_dirname(exec_path); + string[] search_paths = new string[] { + Path.build_filename(exec_dir, "locale"), + Path.build_filename(Path.get_dirname(exec_dir), SYSTEM_LOCALEDIR_NAME) + }; + foreach (var path in search_paths) { + if (FileUtils.test(Path.build_filename(path, "en", "LC_MESSAGES", gettext_package + ".mo"), FileTest.IS_REGULAR)) { + debug(@"Found locale $(gettext_package).mo in $(path)"); + return path; + } } } - return locale_dir ?? locale_install_dir; + + return locale_install_dir; } public string[] get_plugin_paths() {