From ce69e784c1be610c34aff2fd4838b452a1b84999 Mon Sep 17 00:00:00 2001 From: Raed Rizqie Date: Fri, 22 Nov 2024 18:57:09 +0800 Subject: [PATCH] Add MinGW support (#1540) * rssguard.rc: avoid redefinition warnings * use fully qualified name for std::move * mingw use fhs structure * adjust default setting * cmake: initial support for mingw --- resources/rssguard.rc.in | 2 ++ src/cmake_plugins.cmake | 6 +++++- .../src/3rd-party/mimesis/mimesis.cpp | 14 +++++++------- .../src/3rd-party/mimesis/mimesis.cpp | 14 +++++++------- src/librssguard/CMakeLists.txt | 10 ++++++++-- src/librssguard/miscellaneous/application.cpp | 5 +++++ src/librssguard/miscellaneous/pluginfactory.cpp | 5 +++++ src/librssguard/miscellaneous/settings.cpp | 4 ++-- src/rssguard/CMakeLists.txt | 8 +++++--- 9 files changed, 46 insertions(+), 22 deletions(-) diff --git a/resources/rssguard.rc.in b/resources/rssguard.rc.in index b15e3e5a6..af8028f01 100644 --- a/resources/rssguard.rc.in +++ b/resources/rssguard.rc.in @@ -1,9 +1,11 @@ #include +#ifdef _MSC_VER #define VS_FF_DEBUG 0x00000001L #define VOS__WINDOWS32 0x00000004L #define VFT_UNKNOWN 0x00000000L #define VFT2_UNKNOWN 0x00000000L +#endif IDI_ICON1 ICON "@CMAKE_PROJECT_NAME@.ico" diff --git a/src/cmake_plugins.cmake b/src/cmake_plugins.cmake index 25c2b2a48..41770d914 100644 --- a/src/cmake_plugins.cmake +++ b/src/cmake_plugins.cmake @@ -28,8 +28,12 @@ function(prepare_rssguard_plugin plugin_target_name) ${LIBRSSGUARD_SOURCE_PATH} ) - if(WIN32 OR OS2) + if(MSVC OR OS2) install(TARGETS ${plugin_target_name} DESTINATION plugins) + elseif(MINGW) + include (GNUInstallDirs) + install(TARGETS ${plugin_target_name} + DESTINATION ${CMAKE_INSTALL_DATADIR}/rssguard/plugins) elseif(UNIX AND NOT APPLE AND NOT ANDROID) include (GNUInstallDirs) install(TARGETS ${plugin_target_name} diff --git a/src/librssguard-gmail/src/3rd-party/mimesis/mimesis.cpp b/src/librssguard-gmail/src/3rd-party/mimesis/mimesis.cpp index c0cf25710..f425dcca4 100644 --- a/src/librssguard-gmail/src/3rd-party/mimesis/mimesis.cpp +++ b/src/librssguard-gmail/src/3rd-party/mimesis/mimesis.cpp @@ -865,16 +865,16 @@ namespace Mimesis { Part part; - part.preamble = move(preamble); - part.epilogue = move(epilogue); - part.parts = move(parts); - part.boundary = move(boundary); + part.preamble = std::move(preamble); + part.epilogue = std::move(epilogue); + part.parts = std::move(parts); + part.boundary = std::move(boundary); part.multipart = true; part.set_header("Content-Type", get_header("Content-Type")); part.set_header("Content-Disposition", get_header("Content-Disposition")); erase_header("Content-Disposition"); part.crlf = crlf; - parts.emplace_back(move(part)); + parts.emplace_back(std::move(part)); } else { multipart = true; @@ -888,7 +888,7 @@ namespace Mimesis { part.set_header("Content-Type", get_header("Content-Type")); part.set_header("Content-Disposition", get_header("Content-Disposition")); erase_header("Content-Disposition"); - part.body = move(body); + part.body = std::move(body); } } @@ -919,7 +919,7 @@ namespace Mimesis { set_header("Content-Disposition", part.get_header("Content-Disposition")); if (part.multipart) { - parts = move(part.parts); + parts = std::move(part.parts); } else { multipart = false; diff --git a/src/librssguard-reddit/src/3rd-party/mimesis/mimesis.cpp b/src/librssguard-reddit/src/3rd-party/mimesis/mimesis.cpp index c0cf25710..f425dcca4 100644 --- a/src/librssguard-reddit/src/3rd-party/mimesis/mimesis.cpp +++ b/src/librssguard-reddit/src/3rd-party/mimesis/mimesis.cpp @@ -865,16 +865,16 @@ namespace Mimesis { Part part; - part.preamble = move(preamble); - part.epilogue = move(epilogue); - part.parts = move(parts); - part.boundary = move(boundary); + part.preamble = std::move(preamble); + part.epilogue = std::move(epilogue); + part.parts = std::move(parts); + part.boundary = std::move(boundary); part.multipart = true; part.set_header("Content-Type", get_header("Content-Type")); part.set_header("Content-Disposition", get_header("Content-Disposition")); erase_header("Content-Disposition"); part.crlf = crlf; - parts.emplace_back(move(part)); + parts.emplace_back(std::move(part)); } else { multipart = true; @@ -888,7 +888,7 @@ namespace Mimesis { part.set_header("Content-Type", get_header("Content-Type")); part.set_header("Content-Disposition", get_header("Content-Disposition")); erase_header("Content-Disposition"); - part.body = move(body); + part.body = std::move(body); } } @@ -919,7 +919,7 @@ namespace Mimesis { set_header("Content-Disposition", part.get_header("Content-Disposition")); if (part.multipart) { - parts = move(part.parts); + parts = std::move(part.parts); } else { multipart = false; diff --git a/src/librssguard/CMakeLists.txt b/src/librssguard/CMakeLists.txt index a06f5c586..25685b3de 100644 --- a/src/librssguard/CMakeLists.txt +++ b/src/librssguard/CMakeLists.txt @@ -623,14 +623,20 @@ if(APPLE) ) elseif(WIN32) target_link_libraries(rssguard PUBLIC - Shell32.lib + shell32 odbc32 ) endif() -if(WIN32 OR OS2) +if(MSVC OR OS2) install(TARGETS rssguard DESTINATION .) set(HEADERS_FOLDER "include/librssguard") +elseif(MINGW) + include (GNUInstallDirs) + install(TARGETS rssguard + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + set(HEADERS_FOLDER "${CMAKE_INSTALL_INCLUDEDIR}/librssguard") elseif(UNIX AND NOT APPLE AND NOT ANDROID) include (GNUInstallDirs) install(TARGETS rssguard DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index a1ebae54d..829a7bd1e 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -579,7 +579,12 @@ QString Application::userDataAppFolder() const { // In "app" folder, we would like to separate all user data into own subfolder, // therefore stick to "data" folder in this mode. +#ifdef _MSC_VER return QDir::toNativeSeparators(applicationDirPath() + QDir::separator() + QSL("data%1").arg(major_version)); +#else + return QDir::toNativeSeparators(applicationDirPath() + QDir::separator() + QSL("..") + QDir::separator() + + QSL("share") + QDir::separator() + QSL(APP_LOW_NAME) + QDir::separator() + QSL("data%1").arg(major_version)); +#endif } QString Application::userDataFolder() { diff --git a/src/librssguard/miscellaneous/pluginfactory.cpp b/src/librssguard/miscellaneous/pluginfactory.cpp index d3d3c75c5..475814afe 100644 --- a/src/librssguard/miscellaneous/pluginfactory.cpp +++ b/src/librssguard/miscellaneous/pluginfactory.cpp @@ -77,7 +77,12 @@ QStringList PluginFactory::pluginPaths() const { paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("..") + QDir::separator() + QL1S(RSSGUARD_LIBDIR) + QDir::separator() + QL1S(APP_LOW_NAME); #elif defined(Q_OS_WIN) +#ifdef _MSC_VER paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("plugins"); +#else + paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("..") + QDir::separator() + + QL1S("share") + QDir::separator() + QL1S(APP_LOW_NAME) + QDir::separator() + QL1S("plugins"); +#endif #else paths << QCoreApplication::applicationDirPath(); #endif diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index 4867d19ce..0514b3cb8 100644 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -31,7 +31,7 @@ DKEY Node::ID = "nodejs"; DKEY Node::NodeJsExecutable = QSL("nodejs_executable_") + OS_ID; -#if defined(Q_OS_WIN) || defined(Q_OS_OS2) +#if (defined(Q_OS_WIN) && defined(_MSC_VER)) || defined(Q_OS_OS2) DVALUE(QString) Node::NodeJsExecutableDef = "node.exe"; #else DVALUE(QString) Node::NodeJsExecutableDef = "node"; @@ -39,7 +39,7 @@ DVALUE(QString) Node::NodeJsExecutableDef = "node"; DKEY Node::NpmExecutable = QSL("npm_executable_") + OS_ID; -#if defined(Q_OS_WIN) +#if defined(Q_OS_WIN) && defined(_MSC_VER) DVALUE(QString) Node::NpmExecutableDef = "npm.cmd"; #elif defined(Q_OS_OS2) DVALUE(QString) Node::NpmExecutableDef = "npm.exe"; diff --git a/src/rssguard/CMakeLists.txt b/src/rssguard/CMakeLists.txt index a51ba43bb..fa48a7d7a 100644 --- a/src/rssguard/CMakeLists.txt +++ b/src/rssguard/CMakeLists.txt @@ -36,12 +36,12 @@ if(APPLE) ) elseif(WIN32) target_link_libraries(app PUBLIC - Shell32.lib - odbc32.lib + shell32 + odbc32 ) endif() -if(WIN32) +if(MSVC) install(TARGETS app DESTINATION .) install(FILES ${CMAKE_SOURCE_DIR}/resources/graphics/${CMAKE_PROJECT_NAME}.ico DESTINATION . @@ -55,6 +55,8 @@ if(WIN32) ) elseif(OS2) install(TARGETS app DESTINATION .) +elseif(MINGW) + install(TARGETS app DESTINATION ${CMAKE_INSTALL_BINDIR}) elseif(UNIX AND NOT APPLE AND NOT ANDROID) include (GNUInstallDirs) install(TARGETS app