From a224d0cca5f1752acfcdad8e37369e4cda42259e Mon Sep 17 00:00:00 2001 From: Boris Rasin Date: Fri, 3 Dec 2021 21:10:36 +0200 Subject: [PATCH] fix: vs2022 compilation, issue #3477 (#3497) * fix: vs2022 compilation, issue #3477 * silence warning for python 2.7 * disable warning around mbstowcs call * move disable warning code closer to call site * turn on vs2022 ci test * ci: don't run helpers on Windows 2022 & Python 3.5 * limit workaround for stdlib shipped with vs2022 or later * fix for: limit workaround for stdlib shipped with vs2022 or later * fix 2 for: limit workaround for stdlib shipped with vs2022 or later * comment * ci: add a Windows 2019 run * ci: add Python 2.7 check too Co-authored-by: Henry Schreiner --- .github/workflows/ci.yml | 16 +++++++++++----- include/pybind11/detail/common.h | 8 ++++++++ include/pybind11/embed.h | 12 ++++++++++++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dcc61ecd7..8e67baf1c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: strategy: fail-fast: false matrix: - runs-on: [ubuntu-latest, windows-latest, macos-latest] + runs-on: [ubuntu-latest, windows-2022, macos-latest] python: - '2.7' - '3.5' @@ -37,19 +37,24 @@ jobs: # present), or add new keys to an existing matrix element if all the # existing keys match. # - # We support an optional keys: args, for cmake args + # We support an optional key: args, for cmake args include: # Just add a key - runs-on: ubuntu-latest - python: 3.6 + python: '3.6' args: > -DPYBIND11_FINDPYTHON=ON - runs-on: windows-latest - python: 3.6 + python: '3.6' args: > -DPYBIND11_FINDPYTHON=ON - runs-on: macos-latest - python: pypy-2.7 + python: 'pypy-2.7' + # Inject a couple Windows 2019 runs + - runs-on: windows-2019 + python: '3.9' + - runs-on: windows-2019 + python: '2.7' name: "🐍 ${{ matrix.python }} • ${{ matrix.runs-on }} • x64 ${{ matrix.args }}" runs-on: ${{ matrix.runs-on }} @@ -181,6 +186,7 @@ jobs: # setuptools - name: Setuptools helpers test run: pytest tests/extra_setuptools + if: "!(matrix.python == '3.5' && matrix.runs-on == 'windows-2022')" deadsnakes: diff --git a/include/pybind11/detail/common.h b/include/pybind11/detail/common.h index eb5fb0868..2d57367d0 100644 --- a/include/pybind11/detail/common.h +++ b/include/pybind11/detail/common.h @@ -154,6 +154,14 @@ // C4505: 'PySlice_GetIndicesEx': unreferenced local function has been removed (PyPy only) # pragma warning(disable: 4505) # if defined(_DEBUG) && !defined(Py_DEBUG) +// Workaround for a VS 2022 issue. +// NOTE: This workaround knowingly violates the Python.h include order requirement: +// https://docs.python.org/3/c-api/intro.html#include-files +// See https://github.com/pybind/pybind11/pull/3497 for full context. +# include +# if _MSVC_STL_VERSION >= 143 +# include +# endif # define PYBIND11_DEBUG_MARKER # undef _DEBUG # endif diff --git a/include/pybind11/embed.h b/include/pybind11/embed.h index 9843f0f97..af36340f3 100644 --- a/include/pybind11/embed.h +++ b/include/pybind11/embed.h @@ -102,6 +102,13 @@ inline wchar_t *widen_chars(const char *safe_arg) { wchar_t *widened_arg = Py_DecodeLocale(safe_arg, nullptr); #else wchar_t *widened_arg = nullptr; + +// warning C4996: 'mbstowcs': This function or variable may be unsafe. +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable:4996) +#endif + # if defined(HAVE_BROKEN_MBSTOWCS) && HAVE_BROKEN_MBSTOWCS size_t count = strlen(safe_arg); # else @@ -111,6 +118,11 @@ inline wchar_t *widen_chars(const char *safe_arg) { widened_arg = new wchar_t[count + 1]; mbstowcs(widened_arg, safe_arg, count + 1); } + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + #endif return widened_arg; }