-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
[Bug]: Cygwin build fails due to use of Windows-only functions in _tkagg.cpp #22997
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
This was last touched in 9d325ae I suspect we "just" need some better gating around cygwin? |
Actions here:
|
That looks like a good summary. Where should the Cygwin CI run end up? |
If it can be done on GHA, add it to I assume you found this already, but we have Lines 15 to 27 in 7bb3ff5
|
I can do CI on GHA. I'm less sure about the fixing-my-problem part. Yes. That's from #17415; basically Cygwin inherits Windows's dynamic library semantics, so treating them the same (for related issues) generally solves more problems than it causes. |
I guess you need something like diff --git i/src/_tkagg.cpp w/src/_tkagg.cpp
index 5a5616bea5..c54463dca7 100644
--- i/src/_tkagg.cpp
+++ w/src/_tkagg.cpp
@@ -24,6 +24,8 @@
* also.
*/
#define WIN32_DLL
+#define PyErr_SetFromWindowsErr(ierr) \
+ PyErr_SetString(PyExc_OSError, "Call to EnumProcessModules failed")
#endif
#ifdef WIN32_DLL (not the cleanest solution, but inlining all the implementation of PyErr_SetFromWindowsErr from cpython's errors.c seems a bit overkill; I would also suggest opening an issue on the cpython tracker to make PyErr_SetFromWindowsErr (and related functions) available on cygwin too -- from a first look (I may well be mistaken), it's just an oversight on their side?) |
Would a function like: static inline PyObject *PyErr_SetFromWindowsErr(int ierr) {
return PyErr_SetString(PyExc_OSError, "Call to EnumProcessModules failed");
} also work? Compiler error reporting around preprocessor tokens has gotten better recently, but reporting around functions is often better still. On a related note, should I make a separate PR for these fixes, since trying to make get a Cygwin CI working in #22999 is still fighting me? |
I guess so? (x2) |
The barebones function based on the macro proposed earlier has been proposed as PR #23066. |
Sorry my request for CI sent you down a rabbit hole! Thank you for your work and patience |
I've done a few Cygwin CI setups, so I thought that would be simpler. I wasn't expecting that updating the Libtool configuration of FreeType would fail. |
Bug summary
When the build gets to https://github.com/matplotlib/matplotlib/blob/main/src/_tkagg.cpp#L262-L273 on Cygwin, the build fails with a few
goto crosses initialization
warnings, which are easy to fix (closed by #23051), and twoerror: ‘PyErr_SetFromWindowsErr’ was not declared in this scope
, which are less easy to fix.Code for reproduction
Actual outcome
Expected outcome
Additional information
Cygwin 3.3.4
GCC 11.2.0
Python 3.8.12
I've installed matplotlib in earlier versions. #17415 rather suggests that Cygwin builds worked at that time, and probably made using the default backend somewhat easier. #22445 seems to be where the
PyErr_SetFromWindowsErr
calls came in.I've attempted to create a dummy
PyErr_SetFromWindowsErr
on Cygwin, but, given the number of failures in the test suite, I probably didn't do it right.Operating system
Cygwin 3.3.4 on Windows 10
Matplotlib Version
3.5.2
Matplotlib Backend
TkAgg
Python version
3.8.12
Jupyter version
N/A
Installation
pip
The text was updated successfully, but these errors were encountered: