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