From 07b6a27dc0b7e9d02536181c9085f9a23a4e9c09 Mon Sep 17 00:00:00 2001 From: Alexander Shaduri Date: Tue, 2 Mar 2021 18:25:16 +0400 Subject: [PATCH] Fixed libintl conflicts causing compilation errors in Windows. --- src/applib/app_builder_widget.h | 2 +- src/applib/app_gtkmm_utils.cpp | 3 -- src/applib/cli_executors.h | 2 +- src/applib/cmdex_sync.cpp | 2 +- src/applib/cmdex_sync_gui.cpp | 3 -- .../examples/example_smartctl_executor.cpp | 10 ++-- src/applib/selftest.cpp | 2 +- src/applib/selftest.h | 3 -- src/applib/smartctl_executor.cpp | 6 +-- src/applib/smartctl_executor.h | 2 +- src/applib/smartctl_parser.cpp | 4 -- src/applib/storage_detector.cpp | 3 -- src/applib/storage_detector_helpers.h | 6 +-- src/applib/storage_detector_linux.cpp | 2 +- src/applib/storage_detector_other.cpp | 3 +- src/applib/storage_detector_win32.cpp | 11 ++--- src/applib/storage_device.cpp | 3 +- src/applib/storage_property.cpp | 4 -- src/applib/storage_property_colors.h | 4 -- src/applib/storage_property_descr.cpp | 4 -- src/gsc_add_device_window.cpp | 4 -- src/gsc_executor_error_dialog.cpp | 3 -- src/gsc_executor_log_window.cpp | 7 +-- src/gsc_info_window.cpp | 3 -- src/gsc_init.cpp | 6 +-- src/gsc_main_window.cpp | 3 -- src/gsc_main_window_iconview.h | 4 +- src/gsc_preferences_window.cpp | 7 +-- src/gsc_text_window.h | 2 +- src/hz/env_tools.h | 1 + src/hz/format_unit.h | 3 +- src/local_glibmm.h | 48 ++++++++++++++++++- src/rconfig/rconfig.h | 3 +- 33 files changed, 79 insertions(+), 94 deletions(-) diff --git a/src/applib/app_builder_widget.h b/src/applib/app_builder_widget.h index db7cda5..9086c28 100644 --- a/src/applib/app_builder_widget.h +++ b/src/applib/app_builder_widget.h @@ -12,9 +12,9 @@ Copyright: #ifndef APP_BUILDER_WIDGET_H #define APP_BUILDER_WIDGET_H +#include "local_glibmm.h" #include #include -#include #include "hz/debug.h" #include "hz/instance_manager.h" diff --git a/src/applib/app_gtkmm_utils.cpp b/src/applib/app_gtkmm_utils.cpp index 9011af0..aec078c 100644 --- a/src/applib/app_gtkmm_utils.cpp +++ b/src/applib/app_gtkmm_utils.cpp @@ -9,11 +9,8 @@ Copyright: /// \weakgroup applib /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include -#include #include #include // std::strlen #include diff --git a/src/applib/cli_executors.h b/src/applib/cli_executors.h index 0800613..b442148 100644 --- a/src/applib/cli_executors.h +++ b/src/applib/cli_executors.h @@ -12,7 +12,7 @@ Copyright: #ifndef CLI_EXECUTORS_H #define CLI_EXECUTORS_H -#include +#include "local_glibmm.h" #include "cmdex.h" #include "cmdex_sync.h" diff --git a/src/applib/cmdex_sync.cpp b/src/applib/cmdex_sync.cpp index c4247ec..cd85f34 100644 --- a/src/applib/cmdex_sync.cpp +++ b/src/applib/cmdex_sync.cpp @@ -9,8 +9,8 @@ Copyright: /// \weakgroup applib /// @{ +#include "local_glibmm.h" #include // g_usleep() -#include #include "cmdex_sync.h" diff --git a/src/applib/cmdex_sync_gui.cpp b/src/applib/cmdex_sync_gui.cpp index 255c9d6..0040adf 100644 --- a/src/applib/cmdex_sync_gui.cpp +++ b/src/applib/cmdex_sync_gui.cpp @@ -9,12 +9,9 @@ Copyright: /// \weakgroup applib /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include // Gtk::Main #include -#include #include "hz/string_algo.h" #include "hz/fs_ns.h" diff --git a/src/applib/examples/example_smartctl_executor.cpp b/src/applib/examples/example_smartctl_executor.cpp index 3bc5ae6..0e0a413 100644 --- a/src/applib/examples/example_smartctl_executor.cpp +++ b/src/applib/examples/example_smartctl_executor.cpp @@ -9,14 +9,10 @@ Copyright: /// \weakgroup applib_examples /// @{ -// TODO Remove this in gtkmm4. -#include // to avoid throw() macro errors. -#define throw(a) // glibmm uses dynamic exception specifications, remove them. -#include // NOT NEEDED -#undef throw - -#include +#include "local_glibmm.h" #include +#include // to avoid throw() macro errors. +#include // #include "applib/smartctl_executor_gui.h" #include "applib/smartctl_executor.h" diff --git a/src/applib/selftest.cpp b/src/applib/selftest.cpp index 2ce3e06..94aa92b 100644 --- a/src/applib/selftest.cpp +++ b/src/applib/selftest.cpp @@ -9,10 +9,10 @@ Copyright: /// \weakgroup applib /// @{ +#include "local_glibmm.h" #include // std::max, std::min #include // std::floor #include -#include #include "app_pcrecpp.h" #include "storage_property.h" diff --git a/src/applib/selftest.h b/src/applib/selftest.h index 0a4d0ed..ae4e6d6 100644 --- a/src/applib/selftest.h +++ b/src/applib/selftest.h @@ -12,10 +12,7 @@ Copyright: #ifndef SELFTEST_H #define SELFTEST_H -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - -#include // Timer #include #include #include diff --git a/src/applib/smartctl_executor.cpp b/src/applib/smartctl_executor.cpp index 326b560..96fe150 100644 --- a/src/applib/smartctl_executor.cpp +++ b/src/applib/smartctl_executor.cpp @@ -9,11 +9,7 @@ Copyright: /// \weakgroup applib /// @{ -// TODO Remove this in gtkmm4. -#include "local_glibmm.h" - -#include // Glib::shell_quote() -#include +#include "local_glibmm.h" // Glib::shell_quote() #include "smartctl_executor.h" #include "hz/win32_tools.h" diff --git a/src/applib/smartctl_executor.h b/src/applib/smartctl_executor.h index 0229d99..86b9934 100644 --- a/src/applib/smartctl_executor.h +++ b/src/applib/smartctl_executor.h @@ -12,8 +12,8 @@ Copyright: #ifndef SMARTCTL_EXECUTOR_H #define SMARTCTL_EXECUTOR_H +#include "local_glibmm.h" #include -#include #include "cmdex.h" #include "cmdex_sync.h" diff --git a/src/applib/smartctl_parser.cpp b/src/applib/smartctl_parser.cpp index 07ef9ac..9067c2f 100644 --- a/src/applib/smartctl_parser.cpp +++ b/src/applib/smartctl_parser.cpp @@ -9,13 +9,9 @@ Copyright: /// \weakgroup applib /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include // localeconv #include -#include // compose() -#include #include "hz/locale_tools.h" // ScopedCLocale, locale_c_get(). #include "hz/string_algo.h" // string_* diff --git a/src/applib/storage_detector.cpp b/src/applib/storage_detector.cpp index 78b6663..fd584e8 100644 --- a/src/applib/storage_detector.cpp +++ b/src/applib/storage_detector.cpp @@ -9,11 +9,8 @@ Copyright: /// \weakgroup applib /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include // compose() -#include #include #include "build_config.h" // CONFIG_* diff --git a/src/applib/storage_detector_helpers.h b/src/applib/storage_detector_helpers.h index c417940..d542539 100644 --- a/src/applib/storage_detector_helpers.h +++ b/src/applib/storage_detector_helpers.h @@ -15,11 +15,7 @@ Copyright: #include #include -// TODO Remove this in gtkmm4. -#include "local_glibmm.h" - -#include // Glib::shell_quote(), compose -#include +#include "local_glibmm.h" // Glib::shell_quote(), compose #include "build_config.h" #include "executor_factory.h" diff --git a/src/applib/storage_detector_linux.cpp b/src/applib/storage_detector_linux.cpp index 84762e6..3feb7dc 100644 --- a/src/applib/storage_detector_linux.cpp +++ b/src/applib/storage_detector_linux.cpp @@ -13,7 +13,7 @@ Copyright: #if defined CONFIG_KERNEL_LINUX -#include +#include "local_glibmm.h" #include // std::find #include // std::fgets(), std::FILE #include // ENXIO diff --git a/src/applib/storage_detector_other.cpp b/src/applib/storage_detector_other.cpp index f53aeaf..f4d153e 100644 --- a/src/applib/storage_detector_other.cpp +++ b/src/applib/storage_detector_other.cpp @@ -13,8 +13,7 @@ Copyright: #if !defined CONFIG_KERNEL_LINUX && !defined CONFIG_KERNEL_FAMILY_WINDOWS -#include // compose -#include +#include "local_glibmm.h" #include // std::sort #if defined CONFIG_KERNEL_OPENBSD || defined CONFIG_KERNEL_NETBSD diff --git a/src/applib/storage_detector_win32.cpp b/src/applib/storage_detector_win32.cpp index dc1a900..d30d1bc 100644 --- a/src/applib/storage_detector_win32.cpp +++ b/src/applib/storage_detector_win32.cpp @@ -13,10 +13,8 @@ Copyright: #if defined CONFIG_KERNEL_FAMILY_WINDOWS - +#include "local_glibmm.h" #include // CreateFileA(), CloseHandle(), etc... -#include -#include #include #include #include @@ -27,7 +25,7 @@ Copyright: #include "hz/string_sprintf.h" #include "hz/fs.h" #include "hz/string_num.h" -#include "rconfig/config.h" +#include "rconfig/rconfig.h" #include "app_pcrecpp.h" #include "storage_detector_win32.h" #include "storage_detector_helpers.h" @@ -541,7 +539,7 @@ inline std::string detect_drives_win32_areca(std::vector& driv use_cli = cli_found; } - std::string cli_binary; + hz::fs::path cli_binary; if (use_cli == 1) { cli_binary = hz::fs::u8path(rconfig::get_data("system/areca_cli_binary")); if (!cli_binary.is_absolute() && !cli_inst_path.empty()) { @@ -578,7 +576,8 @@ inline std::string detect_drives_win32_areca(std::vector& driv debug_out_info("app", "Scanning Areca drives using CLI...\n"); int cli_max_controllers = 1; // TODO controller # with CLI. for (int controller_no = 0; controller_no < cli_max_controllers; ++controller_no) { - std::string error_msg = areca_cli_get_drives(cli_binary, "/dev/arcmsr" + hz::number_to_string_nolocale(controller_no), controller_no, drives, ex_factory); + std::string error_msg = areca_cli_get_drives(cli_binary.string(), + "/dev/arcmsr" + hz::number_to_string_nolocale(controller_no), controller_no, drives, ex_factory); // If we get an error on controller 0, fall back to no-cli detection. if (!error_msg.empty() && controller_no == 0) { use_cli = 0; diff --git a/src/applib/storage_device.cpp b/src/applib/storage_device.cpp index 9abd11a..1928b5b 100644 --- a/src/applib/storage_device.cpp +++ b/src/applib/storage_device.cpp @@ -9,9 +9,8 @@ Copyright: /// \weakgroup applib /// @{ +#include "local_glibmm.h" #include -#include // compose() -#include #include "rconfig/rconfig.h" #include "hz/string_algo.h" // string_trim_copy, string_any_to_unix_copy diff --git a/src/applib/storage_property.cpp b/src/applib/storage_property.cpp index 91b8e7d..9b94d98 100644 --- a/src/applib/storage_property.cpp +++ b/src/applib/storage_property.cpp @@ -9,16 +9,12 @@ Copyright: /// \weakgroup applib /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include #include // not iosfwd - it doesn't work #include #include #include -#include // compose -#include #include "hz/string_num.h" // number_to_string #include "hz/stream_cast.h" // stream_cast<> diff --git a/src/applib/storage_property_colors.h b/src/applib/storage_property_colors.h index ce552b4..53e12c9 100644 --- a/src/applib/storage_property_colors.h +++ b/src/applib/storage_property_colors.h @@ -12,12 +12,8 @@ Copyright: #ifndef STORAGE_PROPERTY_COLORS_H #define STORAGE_PROPERTY_COLORS_H -// TODO Remove this in gtkmm4. #include "local_glibmm.h" -#include // compose() -#include - #include "storage_property.h" diff --git a/src/applib/storage_property_descr.cpp b/src/applib/storage_property_descr.cpp index 6116b94..377a581 100644 --- a/src/applib/storage_property_descr.cpp +++ b/src/applib/storage_property_descr.cpp @@ -9,15 +9,11 @@ Copyright: /// \weakgroup applib /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include #include #include #include -#include -#include #include "hz/string_algo.h" // string_replace_copy #include "applib/app_pcrecpp.h" diff --git a/src/gsc_add_device_window.cpp b/src/gsc_add_device_window.cpp index f607acc..3e8ffdb 100644 --- a/src/gsc_add_device_window.cpp +++ b/src/gsc_add_device_window.cpp @@ -9,11 +9,7 @@ Copyright: /// \weakgroup gsc /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - -#include -#include #include // GDK_KEY_Escape #include diff --git a/src/gsc_executor_error_dialog.cpp b/src/gsc_executor_error_dialog.cpp index c248316..6e3fd77 100644 --- a/src/gsc_executor_error_dialog.cpp +++ b/src/gsc_executor_error_dialog.cpp @@ -9,11 +9,8 @@ Copyright: /// \weakgroup gsc /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include -#include #include "gsc_executor_log_window.h" #include "gsc_executor_error_dialog.h" diff --git a/src/gsc_executor_log_window.cpp b/src/gsc_executor_log_window.cpp index 95d43d8..1c4700d 100644 --- a/src/gsc_executor_log_window.cpp +++ b/src/gsc_executor_log_window.cpp @@ -9,14 +9,11 @@ Copyright: /// \weakgroup gsc /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - +#include +#include // GDK_KEY_Escape #include #include // std::size_t -#include -#include -#include // GDK_KEY_Escape #include #include "applib/app_gtkmm_utils.h" // app_gtkmm_create_tree_view_column diff --git a/src/gsc_info_window.cpp b/src/gsc_info_window.cpp index 9324cb7..8e3580e 100644 --- a/src/gsc_info_window.cpp +++ b/src/gsc_info_window.cpp @@ -9,11 +9,8 @@ Copyright: /// \weakgroup gsc /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include -#include #include // GDK_KEY_Escape #include // better use vector, it's needed by others too #include // std::min, std::max diff --git a/src/gsc_init.cpp b/src/gsc_init.cpp index aa9fc64..8484cb0 100644 --- a/src/gsc_init.cpp +++ b/src/gsc_init.cpp @@ -9,8 +9,9 @@ Copyright: /// \weakgroup gsc /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" +#include +#include // g_, G* #include // #include // _configthreadlocale (win32) @@ -21,9 +22,6 @@ Copyright: #include #include #include -#include -#include -#include // g_, G* #ifdef _WIN32 #include diff --git a/src/gsc_main_window.cpp b/src/gsc_main_window.cpp index 0a4571d..1fe5da3 100644 --- a/src/gsc_main_window.cpp +++ b/src/gsc_main_window.cpp @@ -9,11 +9,8 @@ Copyright: /// \weakgroup gsc /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - #include -#include #include #include diff --git a/src/gsc_main_window_iconview.h b/src/gsc_main_window_iconview.h index 582f400..04f2709 100644 --- a/src/gsc_main_window_iconview.h +++ b/src/gsc_main_window_iconview.h @@ -12,8 +12,8 @@ Copyright: #ifndef GSC_MAIN_WINDOW_ICONVIEW_H #define GSC_MAIN_WINDOW_ICONVIEW_H +#include "local_glibmm.h" #include -#include #include #include // std::floor #include @@ -283,8 +283,8 @@ class GscMainWindowIconView : public Gtk::IconView { name += (drive->get_model_name().empty() ? Glib::ustring("Unknown model") : Glib::Markup::escape_text(drive->get_model_name())); if (rconfig::get_data("gui/icons_show_device_name")) { if (!drive->get_is_virtual()) { - #ifndef _WIN32 std::string dev = Glib::Markup::escape_text(drive->get_device_with_type()); + #ifndef _WIN32 name += "\n" + dev; #else name += "\n" + Glib::ustring::compose(_("%1 (%2)"), dev, drive_letters); diff --git a/src/gsc_preferences_window.cpp b/src/gsc_preferences_window.cpp index b3bcc16..20e8f0e 100644 --- a/src/gsc_preferences_window.cpp +++ b/src/gsc_preferences_window.cpp @@ -9,14 +9,11 @@ Copyright: /// \weakgroup gsc /// @{ -// TODO Remove this in gtkmm4. #include "local_glibmm.h" - +#include +#include // GDK_KEY_Escape #include #include // std::decay_t -#include -#include -#include // GDK_KEY_Escape #include #include "build_config.h" diff --git a/src/gsc_text_window.h b/src/gsc_text_window.h index fe860e0..7921060 100644 --- a/src/gsc_text_window.h +++ b/src/gsc_text_window.h @@ -12,8 +12,8 @@ Copyright: #ifndef GSC_TEXT_WINDOW_H #define GSC_TEXT_WINDOW_H +#include "local_glibmm.h" #include -#include #include // GDK_KEY_Escape #include diff --git a/src/hz/env_tools.h b/src/hz/env_tools.h index 4bc8813..01a4968 100644 --- a/src/hz/env_tools.h +++ b/src/hz/env_tools.h @@ -13,6 +13,7 @@ Copyright: #define HZ_ENV_TOOLS_H #include +#include /// \def HAVE_SETENV diff --git a/src/hz/format_unit.h b/src/hz/format_unit.h index 5d6c0b5..18ca8ce 100644 --- a/src/hz/format_unit.h +++ b/src/hz/format_unit.h @@ -27,7 +27,8 @@ Copyright: #endif #ifdef ENABLE_GLIB - #include + #include "local_glibmm.h" + // #include // may cause conflicts with std::*printf() #else #define C_(Context,String) (String) #endif diff --git a/src/local_glibmm.h b/src/local_glibmm.h index 9c30f67..77bdcc7 100644 --- a/src/local_glibmm.h +++ b/src/local_glibmm.h @@ -1,5 +1,17 @@ +/****************************************************************************** +License: GNU General Public License v3.0 only +Copyright: + (C) 2008 - 2021 Alexander Shaduri +******************************************************************************/ +/// \file +/// \author Alexander Shaduri +/// \ingroup gsc +/// \weakgroup gsc +/// @{ + +#ifndef LOCAL_GLIBMM_H +#define LOCAL_GLIBMM_H -// TODO Remove this in gtkmm4. // Glibmm before 2.50.1 uses throw(...) exception specifications which are invalid in C++17. // Try to work around that. @@ -37,3 +49,37 @@ #else #include #endif + +#include + +// Undo the macros declared by libintl.h (included by glibmm/i18n.h), +// they conflict with C++ std:: versions. +#undef fprintf +#undef vfprintf +#undef printf +#undef vprintf +#undef sprintf +#undef vsprintf +#undef snprintf +#undef vsnprintf +#undef asprintf +#undef vasprintf +#undef fwprintf +#undef vfwprintf +#undef wprintf +#undef vfwprintf +#undef swprintf +#undef vswprintf +#undef fwprintf +#undef vfwprintf +#undef wprintf +#undef vwprintf +#undef swprintf +#undef vswprintf +#undef setlocale + + + +#endif + +/// @} diff --git a/src/rconfig/rconfig.h b/src/rconfig/rconfig.h index a7f1039..b74a4b2 100644 --- a/src/rconfig/rconfig.h +++ b/src/rconfig/rconfig.h @@ -12,6 +12,8 @@ Copyright: #ifndef RCONFIG_CONFIG_H #define RCONFIG_CONFIG_H +#include "json/json.hpp" + #include #include #include @@ -19,7 +21,6 @@ Copyright: #include "hz/debug.h" #include "hz/string_algo.h" -#include "json/json.hpp"