diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba82d35a..24f0dc56 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,10 +37,11 @@ jobs: conan_compiler: Visual Studio conan_compiler_version: 17 conan_compiler_runtime: --settings compiler.runtime=MD + conan_compiler_libcxx: '' conan_package_manager: '' artifact_suffix: windows-x64 - name: linux64_gcc - os: ubuntu-22.04 + os: ubuntu-24.04 build_type: Release env_cc: gcc-11 env_cxx: g++-11 @@ -53,9 +54,28 @@ jobs: conan_arch: x86_64 conan_compiler: gcc conan_compiler_version: 11 + conan_compiler_libcxx: --settings compiler.libcxx=libstdc++ conan_compiler_runtime: '' conan_package_manager: --conf tools.system.package_manager:mode=install --conf tools.system.package_manager:sudo=True artifact_suffix: linux-x64 + - name: linux64_clang + os: ubuntu-24.04 + build_type: Release + env_cc: clang-17 + env_cxx: clang++-17 + compiler: clang + qt_version: 6.7.2 + qt_arch_aqt: linux_gcc_64 + qt_arch_dir: gcc_64 + qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport + qt_tools: '' + conan_arch: x86_64 + conan_compiler: clang + conan_compiler_version: 17 + conan_compiler_libcxx: --settings compiler.libcxx=libstdc++11 + conan_compiler_runtime: '' + conan_package_manager: --conf tools.system.package_manager:mode=install --conf tools.system.package_manager:sudo=True + artifact_suffix: linux-clang-x64 name: ${{ matrix.name }} env: CC: ${{ matrix.env_cc }} @@ -89,12 +109,15 @@ jobs: vsversion: ${{ matrix.msvc_version }} - name: Setup Ubuntu Environment - if: matrix.os == 'ubuntu-22.04' + if: matrix.os == 'ubuntu-24.04' shell: bash run: | sudo apt-get install doxygen \ libfuse2 \ - ninja-build + ninja-build \ + clang-17 \ + gcc-11 \ + g++-11 - name: Setup Python Environment shell: pwsh @@ -114,6 +137,7 @@ jobs: --settings build_type=${{ matrix.build_type }} ` --settings compiler="${{ matrix.conan_compiler }}" ` --settings compiler.version=${{ matrix.conan_compiler_version }} ` + ${{ matrix.conan_compiler_libcxx }} ` ${{ matrix.conan_compiler_runtime }} ` ${{ matrix.conan_package_manager }} @@ -129,7 +153,7 @@ jobs: ninja supercell-wx wxtest - name: Separate Debug Symbols (Linux) - if: matrix.os == 'ubuntu-22.04' + if: matrix.os == 'ubuntu-24.04' shell: bash run: | cd build/ @@ -148,7 +172,7 @@ jobs: cmake --install . --component supercell-wx - name: Collect Artifacts - if: matrix.os == 'ubuntu-22.04' + if: matrix.os == 'ubuntu-24.04' shell: bash run: | pushd supercell-wx/ @@ -180,14 +204,14 @@ jobs: path: ${{ github.workspace }}/build/bin/*.pdb - name: Upload Artifacts (Linux) - if: matrix.os == 'ubuntu-22.04' + if: matrix.os == 'ubuntu-24.04' uses: actions/upload-artifact@v4 with: name: supercell-wx-${{ matrix.artifact_suffix }} path: ${{ github.workspace }}/supercell-wx-${{ matrix.artifact_suffix }}.tar.gz - name: Upload Debug Artifacts (Linux) - if: matrix.os == 'ubuntu-22.04' + if: matrix.os == 'ubuntu-24.04' uses: actions/upload-artifact@v4 with: name: supercell-wx-debug-${{ matrix.artifact_suffix }} @@ -210,7 +234,7 @@ jobs: path: ${{ github.workspace }}/build/supercell-wx-*.msi* - name: Build AppImage (Linux) - if: matrix.os == 'ubuntu-22.04' + if: matrix.os == 'ubuntu-24.04' env: APPIMAGE_DIR: ${{ github.workspace }}/supercell-wx/ LDAI_UPDATE_INFORMATION: gh-releases-zsync|dpaulat|supercell-wx|latest|*x86_64.AppImage.zsync @@ -234,10 +258,10 @@ jobs: rm -f linuxdeploy-x86_64.AppImage - name: Upload AppImage (Linux) - if: matrix.os == 'ubuntu-22.04' + if: matrix.os == 'ubuntu-24.04' uses: actions/upload-artifact@v4 with: - name: supercell-wx-appimage-x64 + name: supercell-wx-appimage-${{ matrix.artifact_suffix }} path: ${{ github.workspace }}/*-x86_64.AppImage* - name: Test Supercell Wx diff --git a/scwx-qt/source/scwx/qt/config/radar_site.cpp b/scwx-qt/source/scwx/qt/config/radar_site.cpp index c0cb4636..782436df 100644 --- a/scwx-qt/source/scwx/qt/config/radar_site.cpp +++ b/scwx-qt/source/scwx/qt/config/radar_site.cpp @@ -10,7 +10,7 @@ #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -271,7 +271,7 @@ size_t RadarSite::ReadConfig(const std::string& path) try { -#if defined(_MSC_VER) +#if (defined(_MSC_VER) || defined(__clang__)) using namespace std::chrono; #else using namespace date; diff --git a/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp b/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp index f7df44c4..281b189a 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp @@ -22,7 +22,7 @@ class DrawItem { public: explicit DrawItem(OpenGLFunctions& gl); - ~DrawItem(); + virtual ~DrawItem(); DrawItem(const DrawItem&) = delete; DrawItem& operator=(const DrawItem&) = delete; diff --git a/scwx-qt/source/scwx/qt/gl/draw/icons.cpp b/scwx-qt/source/scwx/qt/gl/draw/icons.cpp index 473b8a79..d7f6b64c 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/icons.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/icons.cpp @@ -24,7 +24,6 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_); static constexpr std::size_t kNumRectangles = 1; static constexpr std::size_t kNumTriangles = kNumRectangles * 2; static constexpr std::size_t kVerticesPerTriangle = 3; -static constexpr std::size_t kVerticesPerRectangle = kVerticesPerTriangle * 2; static constexpr std::size_t kPointsPerVertex = 10; static constexpr std::size_t kPointsPerTexCoord = 3; static constexpr std::size_t kIconBufferLength = diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp index 8fdce9f1..58b86c37 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp @@ -18,13 +18,9 @@ namespace draw static const std::string logPrefix_ = "scwx::qt::gl::draw::placefile_lines"; static const auto logger_ = scwx::util::Logger::Create(logPrefix_); -static constexpr std::size_t kNumRectangles = 1; -static constexpr std::size_t kNumTriangles = kNumRectangles * 2; static constexpr std::size_t kVerticesPerTriangle = 3; static constexpr std::size_t kVerticesPerRectangle = kVerticesPerTriangle * 2; static constexpr std::size_t kPointsPerVertex = 9; -static constexpr std::size_t kBufferLength = - kNumTriangles * kVerticesPerTriangle * kPointsPerVertex; // Threshold, start time, end time static constexpr std::size_t kIntegersPerVertex_ = 3; diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_polygons.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_polygons.cpp index 2944fa20..4f7f2c81 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_polygons.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_polygons.cpp @@ -31,7 +31,6 @@ static constexpr std::size_t kIntegersPerVertex_ = 3; static constexpr std::size_t kTessVertexScreenX_ = 0; static constexpr std::size_t kTessVertexScreenY_ = 1; -static constexpr std::size_t kTessVertexScreenZ_ = 2; static constexpr std::size_t kTessVertexXOffset_ = 3; static constexpr std::size_t kTessVertexYOffset_ = 4; static constexpr std::size_t kTessVertexR_ = 5; diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index d511241a..711aed80 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -52,7 +52,7 @@ #include #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp index 595cda6d..377c7aff 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -413,7 +413,7 @@ const scwx::util::time_zone* RadarProductManager::default_time_zone() const } case types::DefaultTimeZone::Local: -#if defined(_MSC_VER) +#if (defined(_MSC_VER) || defined(__clang__)) return std::chrono::current_zone(); #else return date::current_zone(); diff --git a/scwx-qt/source/scwx/qt/map/alert_layer.hpp b/scwx-qt/source/scwx/qt/map/alert_layer.hpp index 99609210..d51391e3 100644 --- a/scwx-qt/source/scwx/qt/map/alert_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/alert_layer.hpp @@ -1,6 +1,7 @@ #pragma once #include + #include #include diff --git a/scwx-qt/source/scwx/qt/map/map_provider.cpp b/scwx-qt/source/scwx/qt/map/map_provider.cpp index 586d012c..4b9964f9 100644 --- a/scwx-qt/source/scwx/qt/map/map_provider.cpp +++ b/scwx-qt/source/scwx/qt/map/map_provider.cpp @@ -24,10 +24,10 @@ static const std::vector mapboxDrawBelow_ { static const std::unordered_map mapProviderInfo_ { {MapProvider::Mapbox, MapProviderInfo { - .mapProvider_ {MapProvider::Mapbox}, + .mapProvider_ = MapProvider::Mapbox, .cacheDbName_ {"mbgl-cache.db"}, - .providerTemplate_ { - QMapLibre::Settings::ProviderTemplate::MapboxProvider}, + .providerTemplate_ = + QMapLibre::Settings::ProviderTemplate::MapboxProvider, .mapStyles_ { {.name_ {"Streets"}, .url_ {"mapbox://styles/mapbox/streets-v11"}, @@ -117,10 +117,10 @@ static const std::unordered_map mapProviderInfo_ { .drawBelow_ {mapboxDrawBelow_}}}}}, {MapProvider::MapTiler, MapProviderInfo { - .mapProvider_ {MapProvider::MapTiler}, + .mapProvider_ = MapProvider::MapTiler, .cacheDbName_ {"maptiler-cache.db"}, - .providerTemplate_ { - QMapLibre::Settings::ProviderTemplate::MapTilerProvider}, + .providerTemplate_ = + QMapLibre::Settings::ProviderTemplate::MapTilerProvider, .mapStyles_ { {.name_ {"Satellite"}, .url_ {"https://api.maptiler.com/maps/hybrid/style.json"}, diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp index b2fada95..0151b6cb 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp @@ -22,7 +22,7 @@ #include #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif diff --git a/scwx-qt/source/scwx/qt/map/radar_product_layer.cpp b/scwx-qt/source/scwx/qt/map/radar_product_layer.cpp index 79d03ce6..be564926 100644 --- a/scwx-qt/source/scwx/qt/map/radar_product_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/radar_product_layer.cpp @@ -31,9 +31,6 @@ namespace qt namespace map { -static constexpr uint32_t MAX_RADIALS = 720; -static constexpr uint32_t MAX_DATA_MOMENT_GATES = 1840; - static const std::string logPrefix_ = "scwx::qt::map::radar_product_layer"; static const auto logger_ = scwx::util::Logger::Create(logPrefix_); diff --git a/scwx-qt/source/scwx/qt/model/layer_model.cpp b/scwx-qt/source/scwx/qt/model/layer_model.cpp index 35f188a9..999a2de9 100644 --- a/scwx-qt/source/scwx/qt/model/layer_model.cpp +++ b/scwx-qt/source/scwx/qt/model/layer_model.cpp @@ -66,13 +66,6 @@ static const std::vector kImmovableLayers_ { {types::LayerType::Map, types::MapLayer::MapUnderlay, false}, }; -static const std::array kAlertPhenomena_ { - awips::Phenomenon::Tornado, - awips::Phenomenon::SnowSquall, - awips::Phenomenon::SevereThunderstorm, - awips::Phenomenon::FlashFlood, - awips::Phenomenon::Marine}; - class LayerModel::Impl { public: diff --git a/scwx-qt/source/scwx/qt/settings/map_settings.cpp b/scwx-qt/source/scwx/qt/settings/map_settings.cpp index 2d8e93b0..f0efea78 100644 --- a/scwx-qt/source/scwx/qt/settings/map_settings.cpp +++ b/scwx-qt/source/scwx/qt/settings/map_settings.cpp @@ -29,8 +29,6 @@ static const std::string kRadarProductGroupName_ {"radar_product_group"}; static const std::string kRadarProductName_ {"radar_product"}; static const std::string kDefaultMapStyle_ {"?"}; -static constexpr common::RadarProductGroup kDefaultRadarProductGroup_ = - common::RadarProductGroup::Level3; static const std::string kDefaultRadarProductGroupString_ = "L3"; static const std::array kDefaultRadarProduct_ { "N0B", "N0G", "N0C", "N0X"}; diff --git a/scwx-qt/source/scwx/qt/settings/settings_category.hpp b/scwx-qt/source/scwx/qt/settings/settings_category.hpp index d7c86abd..2da7b9ab 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_category.hpp +++ b/scwx-qt/source/scwx/qt/settings/settings_category.hpp @@ -18,7 +18,7 @@ class SettingsCategory { public: explicit SettingsCategory(const std::string& name); - ~SettingsCategory(); + virtual ~SettingsCategory(); SettingsCategory(const SettingsCategory&) = delete; SettingsCategory& operator=(const SettingsCategory&) = delete; diff --git a/scwx-qt/source/scwx/qt/settings/settings_container.cpp b/scwx-qt/source/scwx/qt/settings/settings_container.cpp index 1eb5b06a..cf8f9c18 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_container.cpp +++ b/scwx-qt/source/scwx/qt/settings/settings_container.cpp @@ -1,5 +1,3 @@ -#define SETTINGS_CONTAINER_IMPLEMENTATION - #include #include @@ -172,6 +170,8 @@ bool SettingsContainer::Equals(const SettingsVariableBase& o) const p->elementMaximum_ == v.p->elementMaximum_; } +template class SettingsContainer>; + } // namespace settings } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/settings/settings_container.hpp b/scwx-qt/source/scwx/qt/settings/settings_container.hpp index b35201c6..9c2ea487 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_container.hpp +++ b/scwx-qt/source/scwx/qt/settings/settings_container.hpp @@ -99,10 +99,6 @@ private: std::unique_ptr p; }; -#ifdef SETTINGS_CONTAINER_IMPLEMENTATION -template class SettingsContainer>; -#endif - } // namespace settings } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/settings/settings_interface.cpp b/scwx-qt/source/scwx/qt/settings/settings_interface.cpp index 9a24c5ae..61a793e8 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_interface.cpp +++ b/scwx-qt/source/scwx/qt/settings/settings_interface.cpp @@ -1,5 +1,3 @@ -#define SETTINGS_INTERFACE_IMPLEMENTATION - #include #include #include @@ -616,6 +614,14 @@ void SettingsInterface::Impl::UpdateResetButton() } } +template class SettingsInterface; +template class SettingsInterface; +template class SettingsInterface; +template class SettingsInterface; + +// Containers are not to be used directly +template class SettingsInterface>; + } // namespace settings } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/settings/settings_interface.hpp b/scwx-qt/source/scwx/qt/settings/settings_interface.hpp index b049dcc1..2092b1b4 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_interface.hpp +++ b/scwx-qt/source/scwx/qt/settings/settings_interface.hpp @@ -131,16 +131,6 @@ private: std::unique_ptr p; }; -#ifdef SETTINGS_INTERFACE_IMPLEMENTATION -template class SettingsInterface; -template class SettingsInterface; -template class SettingsInterface; -template class SettingsInterface; - -// Containers are not to be used directly -template class SettingsInterface>; -#endif - } // namespace settings } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/settings/settings_variable.cpp b/scwx-qt/source/scwx/qt/settings/settings_variable.cpp index 1a7160f5..71db421e 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_variable.cpp +++ b/scwx-qt/source/scwx/qt/settings/settings_variable.cpp @@ -1,5 +1,3 @@ -#define SETTINGS_VARIABLE_IMPLEMENTATION - #include #include @@ -402,6 +400,14 @@ bool SettingsVariable::Equals(const SettingsVariableBase& o) const p->maximum_ == v.p->maximum_; } +template class SettingsVariable; +template class SettingsVariable; +template class SettingsVariable; +template class SettingsVariable; + +// Containers are not to be used directly +template class SettingsVariable>; + } // namespace settings } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/settings/settings_variable.hpp b/scwx-qt/source/scwx/qt/settings/settings_variable.hpp index 4141f96b..72d61dde 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_variable.hpp +++ b/scwx-qt/source/scwx/qt/settings/settings_variable.hpp @@ -239,16 +239,6 @@ private: std::unique_ptr p; }; -#ifdef SETTINGS_VARIABLE_IMPLEMENTATION -template class SettingsVariable; -template class SettingsVariable; -template class SettingsVariable; -template class SettingsVariable; - -// Containers are not to be used directly -template class SettingsVariable>; -#endif - } // namespace settings } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/ui/level3_products_widget.cpp b/scwx-qt/source/scwx/qt/ui/level3_products_widget.cpp index ae2c8866..98f091ac 100644 --- a/scwx-qt/source/scwx/qt/ui/level3_products_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/level3_products_widget.cpp @@ -420,7 +420,7 @@ void Level3ProductsWidgetImpl::UpdateCategorySelection( std::for_each(categoryButtons_.cbegin(), categoryButtons_.cend(), - [&, this](auto& toolButton) + [&](auto& toolButton) { if (toolButton->text().toStdString() == categoryName) { @@ -444,7 +444,7 @@ void Level3ProductsWidgetImpl::UpdateProductSelection( std::for_each(awipsProductMap_.cbegin(), awipsProductMap_.cend(), - [&, this](const auto& pair) + [&](const auto& pair) { if (pair.second == awipsId) { diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index 8159fb69..cd72b4ee 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -181,7 +181,7 @@ public: void SetupTextTab(); void SetupHotkeysTab(); - void ShowColorDialog(QLineEdit* lineEdit, QFrame* frame = nullptr); + void ShowColorDialog(QLineEdit* lineEdit); void UpdateRadarDialogLocation(const std::string& id); void UpdateAlertRadarDialogLocation(const std::string& id); @@ -784,7 +784,7 @@ void SettingsDialogImpl::SetupPalettesColorTablesTab() QObject::connect(dialog, &QFileDialog::fileSelected, self_, - [this, lineEdit](const QString& file) + [lineEdit](const QString& file) { QString path = QDir::toNativeSeparators(file); @@ -913,12 +913,12 @@ void SettingsDialogImpl::SetupPalettesAlertsTab() &QAbstractButton::clicked, self_, [=, this]() - { ShowColorDialog(activeEdit, activeFrame); }); + { ShowColorDialog(activeEdit); }); QObject::connect(inactiveButton, &QAbstractButton::clicked, self_, [=, this]() - { ShowColorDialog(inactiveEdit, inactiveFrame); }); + { ShowColorDialog(inactiveEdit); }); } } @@ -1384,7 +1384,7 @@ void SettingsDialogImpl::LoadColorTablePreview(const std::string& key, }); } -void SettingsDialogImpl::ShowColorDialog(QLineEdit* lineEdit, QFrame* frame) +void SettingsDialogImpl::ShowColorDialog(QLineEdit* lineEdit) { QColorDialog* dialog = new QColorDialog(self_); @@ -1401,7 +1401,7 @@ void SettingsDialogImpl::ShowColorDialog(QLineEdit* lineEdit, QFrame* frame) dialog, &QColorDialog::colorSelected, self_, - [this, lineEdit, frame](const QColor& color) + [lineEdit](const QColor& color) { QString colorName = color.name(QColor::NameFormat::HexArgb); diff --git a/scwx-qt/source/scwx/qt/util/q_file_buffer.cpp b/scwx-qt/source/scwx/qt/util/q_file_buffer.cpp index 5d55361c..1808d283 100644 --- a/scwx-qt/source/scwx/qt/util/q_file_buffer.cpp +++ b/scwx-qt/source/scwx/qt/util/q_file_buffer.cpp @@ -224,6 +224,9 @@ QFileBuffer::pos_type QFileBuffer::seekoff(off_type off, break; } + default: + logger_->error("Got invalid seekdir value"); + break; } if (newPos != static_cast(-1)) diff --git a/scwx-qt/source/scwx/qt/util/time.cpp b/scwx-qt/source/scwx/qt/util/time.cpp index f34c6ea5..ea3afa1d 100644 --- a/scwx-qt/source/scwx/qt/util/time.cpp +++ b/scwx-qt/source/scwx/qt/util/time.cpp @@ -12,8 +12,6 @@ std::chrono::sys_days SysDays(const QDate& date) using namespace std::chrono; using sys_days = time_point; constexpr auto julianEpoch = sys_days {-4713y / November / 24d}; - constexpr auto unixEpoch = sys_days {1970y / January / 1d}; - constexpr auto offset = std::chrono::days(julianEpoch - unixEpoch); return std::chrono::sys_days(std::chrono::days(date.toJulianDay()) + julianEpoch); diff --git a/scwx-qt/source/scwx/qt/view/level3_product_view.cpp b/scwx-qt/source/scwx/qt/view/level3_product_view.cpp index 551d04e4..a700b206 100644 --- a/scwx-qt/source/scwx/qt/view/level3_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_product_view.cpp @@ -17,7 +17,7 @@ #include #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif diff --git a/test/source/scwx/common/products.test.cpp b/test/source/scwx/common/products.test.cpp index 5b945bf3..bec8a29b 100644 --- a/test/source/scwx/common/products.test.cpp +++ b/test/source/scwx/common/products.test.cpp @@ -1,6 +1,7 @@ #include #include +#include namespace scwx { diff --git a/wxdata/include/scwx/awips/coded_location.hpp b/wxdata/include/scwx/awips/coded_location.hpp index 0ac03d95..0b147444 100644 --- a/wxdata/include/scwx/awips/coded_location.hpp +++ b/wxdata/include/scwx/awips/coded_location.hpp @@ -7,8 +7,17 @@ #include #include +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wunused-parameter" +#endif + #include +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + namespace scwx { namespace awips diff --git a/wxdata/include/scwx/awips/coded_time_motion_location.hpp b/wxdata/include/scwx/awips/coded_time_motion_location.hpp index 6b7b9a19..123ea6e3 100644 --- a/wxdata/include/scwx/awips/coded_time_motion_location.hpp +++ b/wxdata/include/scwx/awips/coded_time_motion_location.hpp @@ -8,8 +8,17 @@ #include #include +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wunused-parameter" +#endif + #include +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + namespace scwx { namespace awips diff --git a/wxdata/include/scwx/awips/text_product_message.hpp b/wxdata/include/scwx/awips/text_product_message.hpp index d402cfd5..dec4af09 100644 --- a/wxdata/include/scwx/awips/text_product_message.hpp +++ b/wxdata/include/scwx/awips/text_product_message.hpp @@ -105,7 +105,7 @@ public: std::chrono::system_clock::time_point segment_event_begin(std::size_t s) const; - std::size_t data_size() const; + std::size_t data_size() const override; bool Parse(std::istream& is) override; diff --git a/wxdata/include/scwx/util/time.hpp b/wxdata/include/scwx/util/time.hpp index 62242589..780a31c3 100644 --- a/wxdata/include/scwx/util/time.hpp +++ b/wxdata/include/scwx/util/time.hpp @@ -15,7 +15,7 @@ namespace scwx namespace util { -#if defined(_MSC_VER) +#if (defined(_MSC_VER) || defined(__clang__)) typedef std::chrono::time_zone time_zone; #else typedef date::time_zone time_zone; diff --git a/wxdata/include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp b/wxdata/include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp index 9b94ba34..135b81ec 100644 --- a/wxdata/include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp @@ -29,16 +29,16 @@ public: operator=(DigitalRadialDataArrayPacket&&) noexcept; uint16_t packet_code() const override; - uint16_t index_of_first_range_bin() const; - uint16_t number_of_range_bins() const; - int16_t i_center_of_sweep() const; - int16_t j_center_of_sweep() const; + uint16_t index_of_first_range_bin() const override; + uint16_t number_of_range_bins() const override; + int16_t i_center_of_sweep() const override; + int16_t j_center_of_sweep() const override; float range_scale_factor() const; - uint16_t number_of_radials() const; + uint16_t number_of_radials() const override; - float start_angle(uint16_t r) const; - float delta_angle(uint16_t r) const; - const std::vector& level(uint16_t r) const; + float start_angle(uint16_t r) const override; + float delta_angle(uint16_t r) const override; + const std::vector& level(uint16_t r) const override; size_t data_size() const override; diff --git a/wxdata/include/scwx/wsr88d/rpg/graphic_alphanumeric_block.hpp b/wxdata/include/scwx/wsr88d/rpg/graphic_alphanumeric_block.hpp index 9b1f2019..5823d66d 100644 --- a/wxdata/include/scwx/wsr88d/rpg/graphic_alphanumeric_block.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/graphic_alphanumeric_block.hpp @@ -35,7 +35,7 @@ public: const std::vector>>& page_list() const; - bool Parse(std::istream& is); + bool Parse(std::istream& is) override; static constexpr size_t SIZE = 102u; diff --git a/wxdata/include/scwx/wsr88d/rpg/graphic_product_message.hpp b/wxdata/include/scwx/wsr88d/rpg/graphic_product_message.hpp index a14df940..cf52badd 100644 --- a/wxdata/include/scwx/wsr88d/rpg/graphic_product_message.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/graphic_product_message.hpp @@ -30,7 +30,7 @@ public: GraphicProductMessage(GraphicProductMessage&&) noexcept; GraphicProductMessage& operator=(GraphicProductMessage&&) noexcept; - std::shared_ptr description_block() const; + std::shared_ptr description_block() const override; std::shared_ptr symbology_block() const; std::shared_ptr graphic_block() const; std::shared_ptr tabular_block() const; diff --git a/wxdata/include/scwx/wsr88d/rpg/product_symbology_block.hpp b/wxdata/include/scwx/wsr88d/rpg/product_symbology_block.hpp index d597532c..69eac4c6 100644 --- a/wxdata/include/scwx/wsr88d/rpg/product_symbology_block.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/product_symbology_block.hpp @@ -34,7 +34,7 @@ public: size_t data_size() const override; - bool Parse(std::istream& is); + bool Parse(std::istream& is) override; static constexpr size_t SIZE = 102u; diff --git a/wxdata/include/scwx/wsr88d/rpg/radar_coded_message.hpp b/wxdata/include/scwx/wsr88d/rpg/radar_coded_message.hpp index f1a22b5e..7d7846f0 100644 --- a/wxdata/include/scwx/wsr88d/rpg/radar_coded_message.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/radar_coded_message.hpp @@ -27,7 +27,7 @@ public: RadarCodedMessage(RadarCodedMessage&&) noexcept; RadarCodedMessage& operator=(RadarCodedMessage&&) noexcept; - std::shared_ptr description_block() const; + std::shared_ptr description_block() const override; bool Parse(std::istream& is) override; diff --git a/wxdata/include/scwx/wsr88d/rpg/radial_data_packet.hpp b/wxdata/include/scwx/wsr88d/rpg/radial_data_packet.hpp index dd6e61ec..34540dc8 100644 --- a/wxdata/include/scwx/wsr88d/rpg/radial_data_packet.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/radial_data_packet.hpp @@ -27,16 +27,16 @@ public: RadialDataPacket& operator=(RadialDataPacket&&) noexcept; uint16_t packet_code() const override; - uint16_t index_of_first_range_bin() const; - uint16_t number_of_range_bins() const; - int16_t i_center_of_sweep() const; - int16_t j_center_of_sweep() const; + uint16_t index_of_first_range_bin() const override; + uint16_t number_of_range_bins() const override; + int16_t i_center_of_sweep() const override; + int16_t j_center_of_sweep() const override; float scale_factor() const; - uint16_t number_of_radials() const; + uint16_t number_of_radials() const override; - float start_angle(uint16_t r) const; - float delta_angle(uint16_t r) const; - const std::vector& level(uint16_t r) const; + float start_angle(uint16_t r) const override; + float delta_angle(uint16_t r) const override; + const std::vector& level(uint16_t r) const override; size_t data_size() const override; diff --git a/wxdata/include/scwx/wsr88d/rpg/tabular_alphanumeric_block.hpp b/wxdata/include/scwx/wsr88d/rpg/tabular_alphanumeric_block.hpp index 0d41fe62..267bd0e5 100644 --- a/wxdata/include/scwx/wsr88d/rpg/tabular_alphanumeric_block.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/tabular_alphanumeric_block.hpp @@ -33,7 +33,7 @@ public: const std::vector>& page_list() const; - bool Parse(std::istream& is); + bool Parse(std::istream& is) override; bool Parse(std::istream& is, bool skipHeader); static constexpr size_t SIZE = 102u; diff --git a/wxdata/include/scwx/wsr88d/rpg/tabular_product_message.hpp b/wxdata/include/scwx/wsr88d/rpg/tabular_product_message.hpp index 006d5e82..ff9231cc 100644 --- a/wxdata/include/scwx/wsr88d/rpg/tabular_product_message.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/tabular_product_message.hpp @@ -28,7 +28,7 @@ public: TabularProductMessage(TabularProductMessage&&) noexcept; TabularProductMessage& operator=(TabularProductMessage&&) noexcept; - std::shared_ptr description_block() const; + std::shared_ptr description_block() const override; std::shared_ptr tabular_block() const; bool Parse(std::istream& is) override; diff --git a/wxdata/source/scwx/awips/coded_time_motion_location.cpp b/wxdata/source/scwx/awips/coded_time_motion_location.cpp index 61e5ba27..40358eef 100644 --- a/wxdata/source/scwx/awips/coded_time_motion_location.cpp +++ b/wxdata/source/scwx/awips/coded_time_motion_location.cpp @@ -13,7 +13,7 @@ #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -107,7 +107,7 @@ bool CodedTimeMotionLocation::Parse(const StringRange& lines, { using namespace std::chrono; -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) using namespace date; #endif diff --git a/wxdata/source/scwx/awips/pvtec.cpp b/wxdata/source/scwx/awips/pvtec.cpp index a661a037..426a58d3 100644 --- a/wxdata/source/scwx/awips/pvtec.cpp +++ b/wxdata/source/scwx/awips/pvtec.cpp @@ -17,7 +17,7 @@ #include #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -143,7 +143,7 @@ bool PVtec::Parse(const std::string& s) { using namespace std::chrono; -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) using namespace date; #endif diff --git a/wxdata/source/scwx/common/color_table.cpp b/wxdata/source/scwx/common/color_table.cpp index aff48f3d..32a4684f 100644 --- a/wxdata/source/scwx/common/color_table.cpp +++ b/wxdata/source/scwx/common/color_table.cpp @@ -10,8 +10,18 @@ #include #include + +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wunused-parameter" +#endif + #include +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + #include namespace scwx diff --git a/wxdata/source/scwx/gr/placefile.cpp b/wxdata/source/scwx/gr/placefile.cpp index 1806cdfe..70881299 100644 --- a/wxdata/source/scwx/gr/placefile.cpp +++ b/wxdata/source/scwx/gr/placefile.cpp @@ -20,7 +20,7 @@ #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -284,7 +284,7 @@ void Placefile::Impl::ProcessLine(const std::string& line) { using namespace std::chrono; -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) using namespace date; #endif diff --git a/wxdata/source/scwx/network/dir_list.cpp b/wxdata/source/scwx/network/dir_list.cpp index 3c6dabd4..e4a2c4c3 100644 --- a/wxdata/source/scwx/network/dir_list.cpp +++ b/wxdata/source/scwx/network/dir_list.cpp @@ -11,7 +11,7 @@ #include #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -200,7 +200,7 @@ void DirListSAXHandler::Characters(void* userData, const xmlChar* ch, int len) { using namespace std::chrono; -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) using namespace date; #endif diff --git a/wxdata/source/scwx/provider/aws_level2_data_provider.cpp b/wxdata/source/scwx/provider/aws_level2_data_provider.cpp index 6ac939c0..87f0d2a2 100644 --- a/wxdata/source/scwx/provider/aws_level2_data_provider.cpp +++ b/wxdata/source/scwx/provider/aws_level2_data_provider.cpp @@ -5,7 +5,7 @@ #include #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -82,7 +82,7 @@ AwsLevel2DataProvider::GetTimePointFromKey(const std::string& key) { using namespace std::chrono; -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) using namespace date; #endif diff --git a/wxdata/source/scwx/provider/aws_level3_data_provider.cpp b/wxdata/source/scwx/provider/aws_level3_data_provider.cpp index 901eb41d..e052b907 100644 --- a/wxdata/source/scwx/provider/aws_level3_data_provider.cpp +++ b/wxdata/source/scwx/provider/aws_level3_data_provider.cpp @@ -12,7 +12,7 @@ #include #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -110,7 +110,7 @@ AwsLevel3DataProvider::GetTimePointFromKey(const std::string& key) { using namespace std::chrono; -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) using namespace date; #endif diff --git a/wxdata/source/scwx/provider/warnings_provider.cpp b/wxdata/source/scwx/provider/warnings_provider.cpp index d187763a..443582c7 100644 --- a/wxdata/source/scwx/provider/warnings_provider.cpp +++ b/wxdata/source/scwx/provider/warnings_provider.cpp @@ -14,7 +14,7 @@ #include #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -30,8 +30,6 @@ namespace provider static const std::string logPrefix_ = "scwx::provider::warnings_provider"; static const auto logger_ = util::Logger::Create(logPrefix_); -static constexpr std::chrono::seconds kUpdatePeriod_ {15}; - class WarningsProvider::Impl { public: @@ -73,7 +71,7 @@ WarningsProvider::ListFiles(std::chrono::system_clock::time_point newerThan) { using namespace std::chrono; -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) using namespace date; #endif diff --git a/wxdata/source/scwx/util/time.cpp b/wxdata/source/scwx/util/time.cpp index 5cf091fe..dcf763d2 100644 --- a/wxdata/source/scwx/util/time.cpp +++ b/wxdata/source/scwx/util/time.cpp @@ -17,7 +17,7 @@ #include -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) # include #endif @@ -59,7 +59,7 @@ std::string TimeString(std::chrono::system_clock::time_point time, { using namespace std::chrono; -#if defined(_MSC_VER) +#if (defined(_MSC_VER) || defined(__clang__)) # define FORMAT_STRING_24_HOUR "{:%Y-%m-%d %H:%M:%S %Z}" # define FORMAT_STRING_12_HOUR "{:%Y-%m-%d %I:%M:%S %p %Z}" namespace date = std::chrono; @@ -128,7 +128,7 @@ TryParseDateTime(const std::string& dateTimeFormat, const std::string& str) { using namespace std::chrono; -#if !defined(_MSC_VER) +#if !(defined(_MSC_VER) || defined(__clang__)) using namespace date; #endif diff --git a/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp b/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp index 4870c1c3..54c0ba2c 100644 --- a/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp +++ b/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp @@ -721,15 +721,15 @@ bool DigitalRadarDataGeneric::Parse(std::istream& is) { case DataBlockType::Volume: p->volumeDataBlock_ = - std::move(VolumeDataBlock::Create(dataBlockType, dataName, is)); + VolumeDataBlock::Create(dataBlockType, dataName, is); break; case DataBlockType::Elevation: p->elevationDataBlock_ = - std::move(ElevationDataBlock::Create(dataBlockType, dataName, is)); + ElevationDataBlock::Create(dataBlockType, dataName, is); break; case DataBlockType::Radial: p->radialDataBlock_ = - std::move(RadialDataBlock::Create(dataBlockType, dataName, is)); + RadialDataBlock::Create(dataBlockType, dataName, is); break; case DataBlockType::MomentRef: case DataBlockType::MomentVel: @@ -739,7 +739,7 @@ bool DigitalRadarDataGeneric::Parse(std::istream& is) case DataBlockType::MomentRho: case DataBlockType::MomentCfp: p->momentDataBlock_[dataBlock] = - std::move(MomentDataBlock::Create(dataBlockType, dataName, is)); + MomentDataBlock::Create(dataBlockType, dataName, is); break; default: logger_->warn("Unknown data name: {}", dataName);