From e2520914c446d8646088bc3aa061b5723aa52036 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <awilfox@adelielinux.org>
Date: Wed, 20 Jul 2016 21:19:14 -0500
Subject: [PATCH] Determine if _nl_msg_cat_cntr exists before use
GNU gettext does not guarantee that GNU libintl will be used. This
assumption breaks the build against the musl libc.
BUG: 365917
---
.gitignore | 1 +
CMakeLists.txt | 3 +++
cmake/FindLibIntl.cmake | 3 +++
src/config.h.in | 25 +++++++++++++++++++++++++
src/kcatalog.cpp | 5 +++--
5 files changed, 35 insertions(+), 2 deletions(-)
create mode 100644 src/config.h.in
diff --git a/.gitignore b/.gitignore
index 1a6b0c4..42a96a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
doc-gen/
+src/config.h
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 00e4001..09dc6af 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,6 +59,9 @@ endif()
add_subdirectory(src)
add_subdirectory(autotests)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h")
+
# create a Config.cmake and a ConfigVersion.cmake file and install them
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5I18n")
diff --git a/cmake/FindLibIntl.cmake b/cmake/FindLibIntl.cmake
index cde5da8..a457112 100644
--- a/cmake/FindLibIntl.cmake
+++ b/cmake/FindLibIntl.cmake
@@ -56,3 +56,6 @@ else()
message(STATUS "libintl is a separate library.")
find_package_handle_standard_args(LibIntl REQUIRED_VARS LibIntl_INCLUDE_DIRS LibIntl_LIBRARIES)
endif()
+
+set(CMAKE_REQUIRED_LIBRARIES ${LibIntl_LIBRARIES})
+check_cxx_source_compiles("extern \"C\" int _nl_msg_cat_cntr; int main(void) { ++_nl_msg_cat_cntr; return 0; }" HAVE_NL_MSG_CAT_CNTR)
diff --git a/src/config.h.in b/src/config.h.in
new file mode 100644
index 0000000..f445f88
--- /dev/null
+++ b/src/config.h.in
@@ -0,0 +1,25 @@
+/* This file is part of the KDE libraries
+ Copyright (c) 2016 A. Wilcox <awilfox@adelielinux.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KF5_KI18N_CONFIG_H
+#define KF5_KI18N_CONFIG_H
+
+#cmakedefine HAVE_NL_MSG_CAT_CNTR
+
+#endif
diff --git a/src/kcatalog.cpp b/src/kcatalog.cpp
index 6682d62..a15e661 100644
--- a/src/kcatalog.cpp
+++ b/src/kcatalog.cpp
@@ -21,6 +21,7 @@
#include <stdlib.h>
#include <locale.h>
#include "gettext.h"
+#include "config.h"
#include <qstandardpaths.h>
#include <QByteArray>
@@ -41,7 +42,7 @@
#endif
#endif
-#if defined(__USE_GNU_GETTEXT)
+#if defined(HAVE_NL_MSG_CAT_CNTR)
extern "C" int Q_DECL_IMPORT _nl_msg_cat_cntr;
#endif
@@ -171,9 +172,9 @@ void KCatalogPrivate::setupGettextEnv()
//qDebug() << "bindtextdomain" << domain << localeDir;
bindtextdomain(domain, localeDir);
+#if defined(HAVE_NL_MSG_CAT_CNTR)
// Magic to make sure GNU Gettext doesn't use stale cached translation
// from previous language.
-#if defined(__USE_GNU_GETTEXT)
++_nl_msg_cat_cntr;
#endif
}
--
2.9.2