diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 8a7835c1e7..3f05869e05 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -157,7 +157,7 @@ jobs: runs-on: macos-latest env: - MACOSX_DEPLOYMENT_TARGET: 10.9 + MACOSX_DEPLOYMENT_TARGET: 10.14 steps: - name: Checkout diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 447b165f9c..90d1a9d5b3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -470,7 +470,7 @@ jobs: runs-on: macos-10.15 env: - MACOSX_DEPLOYMENT_TARGET: 10.9 + MACOSX_DEPLOYMENT_TARGET: 10.14 steps: - name: Download source diff --git a/CMakeLists.txt b/CMakeLists.txt index fe03b5ae11..36d504e105 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ if (EMSCRIPTEN) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") -set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) +set(CMAKE_OSX_DEPLOYMENT_TARGET 10.14) # Use GNUInstallDirs to allow customisation # but set our own default data and bin dir diff --git a/src/settings.cpp b/src/settings.cpp index 5e3ba5be74..9d0e125b04 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -87,6 +87,7 @@ std::string _config_file; ///< Configuration file of OpenTTD typedef std::list ErrorList; static ErrorList _settings_error_list; ///< Errors while loading minimal settings. +typedef span SettingTable; typedef void SettingDescProc(IniFile *ini, const SettingTable &desc, const char *grpname, void *object, bool only_startup); typedef void SettingDescProcList(IniFile *ini, const char *grpname, StringList &list); @@ -98,9 +99,9 @@ static bool IsSignedVarMemType(VarType vt); * @param desc The type of the iterator of the value in SettingTable. * @return The actual pointer to SettingDesc. */ -static const SettingDesc *GetSettingDesc(const std::unique_ptr &desc) +static constexpr const SettingDesc *GetSettingDesc(const SettingVariant &desc) { - return desc.get(); + return std::visit([](auto&& arg) -> const SettingDesc * { return &arg; }, desc); } /** diff --git a/src/settings_internal.h b/src/settings_internal.h index 5b35d328ad..0e6637a5b7 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -10,6 +10,7 @@ #ifndef SETTINGS_INTERNAL_H #define SETTINGS_INTERNAL_H +#include #include "saveload/saveload.h" enum SettingFlag : uint16 { @@ -299,7 +300,7 @@ struct NullSettingDesc : SettingDesc { bool IsSameValue(const IniItem *item, void *object) const override { NOT_REACHED(); } }; -typedef std::initializer_list> SettingTable; +typedef std::variant SettingVariant; const SettingDesc *GetSettingFromName(const std::string_view name); void GetSettingSaveLoadByPrefix(const std::string_view prefix, std::vector &saveloads); diff --git a/src/table/settings.h.preamble b/src/table/settings.h.preamble index c9b47626c4..5fd1a9bac6 100644 --- a/src/table/settings.h.preamble +++ b/src/table/settings.h.preamble @@ -54,7 +54,7 @@ static size_t ConvertLandscape(const char *value); * on the appropriate macro. */ -#define NSD(type, ...) std::unique_ptr(new type##SettingDesc(__VA_ARGS__)) +#define NSD(type, ...) SettingVariant { std::in_place_type, __VA_ARGS__ } /* Macros for various objects to go in the configuration file. * This section is for global variables */ diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index 71f99d5a21..e5019305f7 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -12,7 +12,7 @@ static void UpdateAllServiceInterval(int32 new_value); static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value); static void UpdateServiceInterval(VehicleType type, int32 new_value); -static const SettingTable _company_settings{ +static const SettingVariant _company_settings[] = { [post-amble] }; [templates] diff --git a/src/table/settings/currency_settings.ini b/src/table/settings/currency_settings.ini index c8ba3d76cd..d0950db8e6 100644 --- a/src/table/settings/currency_settings.ini +++ b/src/table/settings/currency_settings.ini @@ -7,7 +7,7 @@ ; Settings for the in-game custom currency. [pre-amble] -static const SettingTable _currency_settings{ +static const SettingVariant _currency_settings[] = { [post-amble] }; [templates] diff --git a/src/table/settings/gameopt_settings.ini b/src/table/settings/gameopt_settings.ini index ce28def632..4474006236 100644 --- a/src/table/settings/gameopt_settings.ini +++ b/src/table/settings/gameopt_settings.ini @@ -33,7 +33,7 @@ static std::initializer_list _osk_activation{"disabled", "double", static std::initializer_list _settings_profiles{"easy", "medium", "hard"}; static std::initializer_list _news_display{ "off", "summarized", "full"}; -static const SettingTable _gameopt_settings{ +static const SettingVariant _gameopt_settings[] = { /* In version 4 a new difficulty setting has been added to the difficulty settings, * town attitude towards demolishing. Needs special handling because some dimwit thought * it funny to have the GameDifficulty struct be an array while it is a struct of diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini index 453c6e8162..9f73573b20 100644 --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -20,7 +20,7 @@ extern bool _allow_hidpi_window; #define WITHOUT_COCOA #endif -static const SettingTable _misc_settings{ +static const SettingVariant _misc_settings[] = { [post-amble] }; [templates] diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 6fe4d9d515..a0a835364e 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -49,7 +49,7 @@ static void UpdateClientConfigValues(); * assigns its own value. If the setting was company-based, that would mean that * vehicles could decide on different moments that they are heading back to a * service depot, causing desyncs on a massive scale. */ -const SettingTable _settings{ +static const SettingVariant _settings[] = { [post-amble] }; [templates] diff --git a/src/table/settings/win32_settings.ini b/src/table/settings/win32_settings.ini index df1e0cb272..51b5796294 100644 --- a/src/table/settings/win32_settings.ini +++ b/src/table/settings/win32_settings.ini @@ -12,7 +12,7 @@ #if defined(_WIN32) && !defined(DEDICATED) extern bool _window_maximize; -static const SettingTable _win32_settings{ +static const SettingVariant _win32_settings[] = { [post-amble] }; #endif /* _WIN32 */ diff --git a/src/table/settings/window_settings.ini b/src/table/settings/window_settings.ini index 3a7669754f..d9327aa92c 100644 --- a/src/table/settings/window_settings.ini +++ b/src/table/settings/window_settings.ini @@ -9,7 +9,7 @@ [pre-amble] -static const SettingTable _window_settings{ +static const SettingVariant _window_settings[] = { [post-amble] }; [templates]