From eb1bd725b710c9098e8ec7fb5254ce49da9f5e27 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Tue, 12 Sep 2023 08:02:24 +0100 Subject: [PATCH] Add an option to avoid wchar APIs on Windows With this, fmt can be used on Windows 98 and the Original Xbox with: set(FMT_OS OFF) It is not exposed as a CMake option but one can define it manually in the fmt subproject, e.g.: target_compile_definitions(fmt PUBLIC FMT_WINDOWS_NO_WCHAR) Fixes #3631 --- include/fmt/core.h | 2 +- include/fmt/format-inl.h | 4 ++-- test/format-impl-test.cc | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/fmt/core.h b/include/fmt/core.h index f9e3b7d6dc163..d5b7fbd03ab9c 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -2675,7 +2675,7 @@ void vformat_to(buffer& buf, basic_string_view fmt, typename vformat_args::type args, locale_ref loc = {}); FMT_API void vprint_mojibake(std::FILE*, string_view, format_args); -#ifndef _WIN32 +#if !defined(_WIN32) || defined(FMT_WINDOWS_NO_WCHAR) inline void vprint_mojibake(std::FILE*, string_view, format_args) {} #endif } // namespace detail diff --git a/include/fmt/format-inl.h b/include/fmt/format-inl.h index 553e7ce88d4b8..f4763bd7ac2e0 100644 --- a/include/fmt/format-inl.h +++ b/include/fmt/format-inl.h @@ -18,7 +18,7 @@ # include #endif -#ifdef _WIN32 +#if defined(_WIN32) && !defined(FMT_WINDOWS_NO_WCHAR) # include // _isatty #endif @@ -1426,7 +1426,7 @@ FMT_FUNC std::string vformat(string_view fmt, format_args args) { } namespace detail { -#ifndef _WIN32 +#if !defined(_WIN32) || defined(FMT_WINDOWS_NO_WCHAR) FMT_FUNC bool write_console(std::FILE*, string_view) { return false; } #else using dword = conditional_t; diff --git a/test/format-impl-test.cc b/test/format-impl-test.cc index 1c468b4388aa9..4d6198b68d9f8 100644 --- a/test/format-impl-test.cc +++ b/test/format-impl-test.cc @@ -351,7 +351,7 @@ TEST(format_impl_test, write_dragon_even) { if (!FMT_MSC_VERSION) EXPECT_EQ(s, "33554450"); } -#ifdef _WIN32 +#if defined(_WIN32) && !defined(FMT_WINDOWS_NO_WCHAR) # include TEST(format_impl_test, write_console_signature) {