On Sat, Feb 14, 2026 at 1:10 AM Pierrick Bouvier
<[email protected]> wrote:
>
> This make sure we can include all possible headers without breaking
> build for environments missing them. It fixes compilation on openbsd.
>
> We don't want to pollute configure script, as it's really a special case
> here to make sure we don't have a compilation regression with
> qemu-plugins header.
>
> Signed-off-by: Pierrick Bouvier <[email protected]>

Tested-by: John Snow <[email protected]>

Thanks!

> ---
>  contrib/plugins/cpp.cpp | 261 +++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 259 insertions(+), 2 deletions(-)
>
> diff --git a/contrib/plugins/cpp.cpp b/contrib/plugins/cpp.cpp
> index 1ff54896d97..0673c4f074d 100644
> --- a/contrib/plugins/cpp.cpp
> +++ b/contrib/plugins/cpp.cpp
> @@ -6,103 +6,360 @@
>
>  #include <qemu-plugin.h>
>
> -/* https://en.cppreference.com/w/cpp/headers.html */
> +/*
> + * We include all C++ standard headers (without deprecated ones),
> + * taken from: https://en.cppreference.com/w/cpp/headers.html
> + *
> + * To update, copy page text, and then:
> + * grep '^<' |
> + * sort -u |
> + * grep -v strstream |
> + * grep -v codecvt |
> + * sed -e 's/\(.*\)/#if __has_include(\1)\n#include \1\n#endif/'
> + */
> +
> +#if __has_include(<algorithm>)
>  #include <algorithm>
> +#endif
> +#if __has_include(<any>)
>  #include <any>
> +#endif
> +#if __has_include(<array>)
>  #include <array>
> +#endif
> +#if __has_include(<atomic>)
>  #include <atomic>
> +#endif
> +#if __has_include(<barrier>)
>  #include <barrier>
> +#endif
> +#if __has_include(<bit>)
>  #include <bit>
> +#endif
> +#if __has_include(<bitset>)
>  #include <bitset>
> +#endif
> +#if __has_include(<cassert>)
>  #include <cassert>
> +#endif
> +#if __has_include(<cctype>)
>  #include <cctype>
> +#endif
> +#if __has_include(<cerrno>)
>  #include <cerrno>
> +#endif
> +#if __has_include(<cfenv>)
>  #include <cfenv>
> +#endif
> +#if __has_include(<cfloat>)
>  #include <cfloat>
> +#endif
> +#if __has_include(<charconv>)
>  #include <charconv>
> +#endif
> +#if __has_include(<chrono>)
>  #include <chrono>
> +#endif
> +#if __has_include(<cinttypes>)
>  #include <cinttypes>
> +#endif
> +#if __has_include(<climits>)
>  #include <climits>
> +#endif
> +#if __has_include(<clocale>)
>  #include <clocale>
> +#endif
> +#if __has_include(<cmath>)
>  #include <cmath>
> -#include <codecvt>
> +#endif
> +#if __has_include(<compare>)
>  #include <compare>
> +#endif
> +#if __has_include(<complex>)
>  #include <complex>
> +#endif
> +#if __has_include(<concepts>)
>  #include <concepts>
> +#endif
> +#if __has_include(<condition_variable>)
>  #include <condition_variable>
> +#endif
> +#if __has_include(<contracts>)
> +#include <contracts>
> +#endif
> +#if __has_include(<coroutine>)
>  #include <coroutine>
> +#endif
> +#if __has_include(<csetjmp>)
>  #include <csetjmp>
> +#endif
> +#if __has_include(<csignal>)
>  #include <csignal>
> +#endif
> +#if __has_include(<cstdarg>)
>  #include <cstdarg>
> +#endif
> +#if __has_include(<cstddef>)
>  #include <cstddef>
> +#endif
> +#if __has_include(<cstdint>)
>  #include <cstdint>
> +#endif
> +#if __has_include(<cstdio>)
>  #include <cstdio>
> +#endif
> +#if __has_include(<cstdlib>)
>  #include <cstdlib>
> +#endif
> +#if __has_include(<cstring>)
>  #include <cstring>
> +#endif
> +#if __has_include(<ctime>)
>  #include <ctime>
> +#endif
> +#if __has_include(<cuchar>)
>  #include <cuchar>
> +#endif
> +#if __has_include(<cwchar>)
>  #include <cwchar>
> +#endif
> +#if __has_include(<cwctype>)
>  #include <cwctype>
> +#endif
> +#if __has_include(<debugging>)
> +#include <debugging>
> +#endif
> +#if __has_include(<deque>)
>  #include <deque>
> +#endif
> +#if __has_include(<exception>)
>  #include <exception>
> +#endif
> +#if __has_include(<execution>)
>  #include <execution>
> +#endif
> +#if __has_include(<expected>)
> +#include <expected>
> +#endif
> +#if __has_include(<filesystem>)
>  #include <filesystem>
> +#endif
> +#if __has_include(<flat_map>)
> +#include <flat_map>
> +#endif
> +#if __has_include(<flat_set>)
> +#include <flat_set>
> +#endif
> +#if __has_include(<format>)
> +#include <format>
> +#endif
> +#if __has_include(<forward_list>)
>  #include <forward_list>
> +#endif
> +#if __has_include(<fstream>)
>  #include <fstream>
> +#endif
> +#if __has_include(<functional>)
>  #include <functional>
> +#endif
> +#if __has_include(<future>)
>  #include <future>
> +#endif
> +#if __has_include(<generator>)
> +#include <generator>
> +#endif
> +#if __has_include(<hazard_pointer>)
> +#include <hazard_pointer>
> +#endif
> +#if __has_include(<hive>)
> +#include <hive>
> +#endif
> +#if __has_include(<initializer_list>)
>  #include <initializer_list>
> +#endif
> +#if __has_include(<inplace_vector>)
> +#include <inplace_vector>
> +#endif
> +#if __has_include(<iomanip>)
>  #include <iomanip>
> +#endif
> +#if __has_include(<ios>)
>  #include <ios>
> +#endif
> +#if __has_include(<iosfwd>)
>  #include <iosfwd>
> +#endif
> +#if __has_include(<iostream>)
>  #include <iostream>
> +#endif
> +#if __has_include(<istream>)
>  #include <istream>
> +#endif
> +#if __has_include(<iterator>)
>  #include <iterator>
> +#endif
> +#if __has_include(<latch>)
>  #include <latch>
> +#endif
> +#if __has_include(<limits>)
>  #include <limits>
> +#endif
> +#if __has_include(<linalg>)
> +#include <linalg>
> +#endif
> +#if __has_include(<list>)
>  #include <list>
> +#endif
> +#if __has_include(<locale>)
>  #include <locale>
> +#endif
> +#if __has_include(<map>)
>  #include <map>
> +#endif
> +#if __has_include(<mdspan>)
> +#include <mdspan>
> +#endif
> +#if __has_include(<memory>)
>  #include <memory>
> +#endif
> +#if __has_include(<memory_resource>)
>  #include <memory_resource>
> +#endif
> +#if __has_include(<mutex>)
>  #include <mutex>
> +#endif
> +#if __has_include(<new>)
>  #include <new>
> +#endif
> +#if __has_include(<numbers>)
>  #include <numbers>
> +#endif
> +#if __has_include(<numeric>)
>  #include <numeric>
> +#endif
> +#if __has_include(<optional>)
>  #include <optional>
> +#endif
> +#if __has_include(<ostream>)
>  #include <ostream>
> +#endif
> +#if __has_include(<print>)
> +#include <print>
> +#endif
> +#if __has_include(<queue>)
>  #include <queue>
> +#endif
> +#if __has_include(<random>)
>  #include <random>
> +#endif
> +#if __has_include(<ranges>)
>  #include <ranges>
> +#endif
> +#if __has_include(<ratio>)
>  #include <ratio>
> +#endif
> +#if __has_include(<rcu>)
> +#include <rcu>
> +#endif
> +#if __has_include(<regex>)
>  #include <regex>
> +#endif
> +#if __has_include(<scoped_allocator>)
>  #include <scoped_allocator>
> +#endif
> +#if __has_include(<semaphore>)
>  #include <semaphore>
> +#endif
> +#if __has_include(<set>)
>  #include <set>
> +#endif
> +#if __has_include(<shared_mutex>)
>  #include <shared_mutex>
> +#endif
> +#if __has_include(<simd>)
> +#include <simd>
> +#endif
> +#if __has_include(<source_location>)
>  #include <source_location>
> +#endif
> +#if __has_include(<span>)
>  #include <span>
> +#endif
> +#if __has_include(<spanstream>)
> +#include <spanstream>
> +#endif
> +#if __has_include(<sstream>)
>  #include <sstream>
> +#endif
> +#if __has_include(<stack>)
>  #include <stack>
> +#endif
> +#if __has_include(<stacktrace>)
> +#include <stacktrace>
> +#endif
> +#if __has_include(<stdexcept>)
>  #include <stdexcept>
> +#endif
> +#if __has_include(<stdfloat>)
> +#include <stdfloat>
> +#endif
> +#if __has_include(<stop_token>)
>  #include <stop_token>
> +#endif
> +#if __has_include(<streambuf>)
>  #include <streambuf>
> +#endif
> +#if __has_include(<string>)
>  #include <string>
> +#endif
> +#if __has_include(<string_view>)
>  #include <string_view>
> +#endif
> +#if __has_include(<syncstream>)
>  #include <syncstream>
> +#endif
> +#if __has_include(<system_error>)
>  #include <system_error>
> +#endif
> +#if __has_include(<text_encoding>)
> +#include <text_encoding>
> +#endif
> +#if __has_include(<thread>)
>  #include <thread>
> +#endif
> +#if __has_include(<tuple>)
>  #include <tuple>
> +#endif
> +#if __has_include(<typeindex>)
>  #include <typeindex>
> +#endif
> +#if __has_include(<typeinfo>)
>  #include <typeinfo>
> +#endif
> +#if __has_include(<type_traits>)
>  #include <type_traits>
> +#endif
> +#if __has_include(<unordered_map>)
>  #include <unordered_map>
> +#endif
> +#if __has_include(<unordered_set>)
>  #include <unordered_set>
> +#endif
> +#if __has_include(<utility>)
>  #include <utility>
> +#endif
> +#if __has_include(<valarray>)
>  #include <valarray>
> +#endif
> +#if __has_include(<variant>)
>  #include <variant>
> +#endif
> +#if __has_include(<vector>)
>  #include <vector>
> +#endif
> +#if __has_include(<version>)
>  #include <version>
> +#endif
>
>  QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
>
> --
> 2.47.3
>


Reply via email to