meltygui-imgui 2.0.0.post2__tar.gz → 2.0.0.post3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/MELTYGUI.md +14 -4
  2. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/PKG-INFO +19 -8
  3. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/README.md +14 -4
  4. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui.egg-info/PKG-INFO +19 -8
  5. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui.egg-info/SOURCES.txt +1 -0
  6. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/setup.py +3 -2
  7. meltygui_imgui-2.0.0.post3/tools/build_windows.py +59 -0
  8. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tools/smoke.py +1 -1
  9. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tools/verify.py +18 -7
  10. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/LICENSE +0 -0
  11. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/LICENSES/imgui-MIT.txt +0 -0
  12. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/LICENSES/imstb_rectpack.h.license.txt +0 -0
  13. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/LICENSES/imstb_textedit.h.license.txt +0 -0
  14. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/LICENSES/imstb_truetype.h.license.txt +0 -0
  15. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/MANIFEST.in +0 -0
  16. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/UPSTREAM.json +0 -0
  17. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/ansifeed-cpp/AnsiTextColored.cpp +0 -0
  18. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/ansifeed-cpp/AnsiTextColored.h +0 -0
  19. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/config-cpp/py_imconfig.cpp +0 -0
  20. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/config-cpp/py_imconfig.h +0 -0
  21. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_allegro5.cpp +0 -0
  22. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_allegro5.h +0 -0
  23. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_android.cpp +0 -0
  24. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_android.h +0 -0
  25. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_dx10.cpp +0 -0
  26. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_dx10.h +0 -0
  27. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_dx11.cpp +0 -0
  28. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_dx11.h +0 -0
  29. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_dx12.cpp +0 -0
  30. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_dx12.h +0 -0
  31. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_dx9.cpp +0 -0
  32. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_dx9.h +0 -0
  33. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_glfw.cpp +0 -0
  34. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_glfw.h +0 -0
  35. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_glut.cpp +0 -0
  36. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_glut.h +0 -0
  37. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_marmalade.cpp +0 -0
  38. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_marmalade.h +0 -0
  39. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_metal.h +0 -0
  40. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_opengl2.cpp +0 -0
  41. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_opengl2.h +0 -0
  42. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_opengl3.cpp +0 -0
  43. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_opengl3.h +0 -0
  44. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_osx.h +0 -0
  45. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_sdl.cpp +0 -0
  46. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_sdl.h +0 -0
  47. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_vulkan.cpp +0 -0
  48. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_vulkan.h +0 -0
  49. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_wgpu.cpp +0 -0
  50. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_wgpu.h +0 -0
  51. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_win32.cpp +0 -0
  52. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/backends/imgui_impl_win32.h +0 -0
  53. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imconfig.h +0 -0
  54. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imgui.cpp +0 -0
  55. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imgui.h +0 -0
  56. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imgui_demo.cpp +0 -0
  57. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imgui_draw.cpp +0 -0
  58. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imgui_internal.h +0 -0
  59. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imgui_tables.cpp +0 -0
  60. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imgui_widgets.cpp +0 -0
  61. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imstb_rectpack.h +0 -0
  62. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imstb_textedit.h +0 -0
  63. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/imstb_truetype.h +0 -0
  64. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/misc/cpp/imgui_stdlib.cpp +0 -0
  65. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/misc/cpp/imgui_stdlib.h +0 -0
  66. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/misc/fonts/binary_to_compressed_c.cpp +0 -0
  67. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/misc/freetype/imgui_freetype.cpp +0 -0
  68. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/misc/freetype/imgui_freetype.h +0 -0
  69. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/imgui-cpp/misc/single_file/imgui_single_file.h +0 -0
  70. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/__init__.py +0 -0
  71. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/_compat.py +0 -0
  72. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/ansifeed.pxd +0 -0
  73. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/cimgui.pxd +0 -0
  74. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/common.pyx +0 -0
  75. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/core.cpp +0 -0
  76. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/core.h +0 -0
  77. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/core.pxd +0 -0
  78. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/core.pyx +0 -0
  79. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/enums.pxd +0 -0
  80. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/enums_internal.pxd +0 -0
  81. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/extra.py +0 -0
  82. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/__init__.py +0 -0
  83. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/base.py +0 -0
  84. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/cocos2d.py +0 -0
  85. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/glfw.py +0 -0
  86. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/glumpy.py +0 -0
  87. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/opengl.py +0 -0
  88. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/pygame.py +0 -0
  89. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/pyglet.py +0 -0
  90. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/integrations/sdl2.py +0 -0
  91. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/internal.cpp +0 -0
  92. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/internal.h +0 -0
  93. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/internal.pxd +0 -0
  94. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui/internal.pyx +0 -0
  95. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui.egg-info/dependency_links.txt +0 -0
  96. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui.egg-info/requires.txt +2 -2
  97. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/meltygui_imgui.egg-info/top_level.txt +0 -0
  98. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/pyproject.toml +0 -0
  99. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/setup.cfg +0 -0
  100. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tests/test_begin_end_context_managers.py +0 -0
  101. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tests/test_context_mem_safety.py +0 -0
  102. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tests/test_crazy_callbacks.py +0 -0
  103. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tests/test_graphics_mem_safety.py +0 -0
  104. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tests/test_gui_style_initialization.py +0 -0
  105. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tools/build.py +0 -0
  106. {meltygui_imgui-2.0.0.post2 → meltygui_imgui-2.0.0.post3}/tools/build_in_container.sh +0 -0
@@ -12,8 +12,8 @@ uv pip install meltygui-imgui
12
12
  import meltygui_imgui
13
13
  ```
14
14
 
15
- The current release is **2.0.0.post2**, with wheels for Linux x86-64 (glibc 2.28
16
- or newer) on CPython 3.11, 3.12 and 3.13. It installs `meltygui_imgui` without
15
+ The current release is **2.0.0.post3**, with wheels for Linux x86-64 (glibc 2.28
16
+ or newer) and Windows x86-64 on CPython 3.11, 3.12 and 3.13. It installs `meltygui_imgui` without
17
17
  overwriting the upstream `imgui` package. The 3.13 wheel is generated with
18
18
  Cython 3.2; 3.11 and 3.12 keep the Cython 0.29 bindings.
19
19
 
@@ -43,10 +43,20 @@ uvx --from twine==7.0.0 twine check --strict dist/*.whl dist/*.tar.gz
43
43
 
44
44
  Use `--sudo-docker` if Docker requires sudo. Source builds require a C++ compiler.
45
45
 
46
+ The Windows wheels are built on Windows from that same source archive. With the
47
+ MSVC build tools and uv installed, and the archive from `tools/build.py` in `dist`:
48
+
49
+ ```sh
50
+ python tools/build_windows.py
51
+ python tools/verify.py dist --platform windows
52
+ ```
53
+
54
+ delvewheel bundles the MSVC C++ runtime, so the wheels need no redistributable.
55
+
46
56
  ## Publish
47
57
 
48
58
  Pushes to `main` and pull requests build and test without uploading. A `v*` tag
49
- or a manual run with `publish=true` publishes the verified wheel and source
59
+ or a manual run with `publish=true` publishes the verified Linux and Windows wheels and the source
50
60
  archive through PyPI trusted publishing. Published versions cannot be replaced.
51
61
 
52
62
  Configure a pending GitHub publisher at https://pypi.org/manage/account/publishing/:
@@ -59,7 +69,7 @@ Configure a pending GitHub publisher at https://pypi.org/manage/account/publishi
59
69
  | Workflow | `release.yml` |
60
70
  | Environment | `pypi` |
61
71
 
62
- Then, after the main-branch build passes, create and push `v2.0.0.post2`.
72
+ Then, after the main-branch build passes, create and push `v2.0.0.post3`.
63
73
  No API token belongs in this repository.
64
74
 
65
75
  ## Licenses and changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meltygui-imgui
3
- Version: 2.0.0.post2
3
+ Version: 2.0.0.post3
4
4
  Summary: Cython-based Python bindings for dear meltygui_imgui
5
5
  Home-page: https://github.com/Attentio-AI/meltygui-imgui
6
6
  Author: Michał Jaworski
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Classifier: Programming Language :: Python :: Implementation :: CPython
15
15
  Classifier: Programming Language :: Cython
16
16
  Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Operating System :: Microsoft :: Windows
17
18
  Classifier: Topic :: Games/Entertainment
18
19
  Requires-Python: >=3.11,<3.14
19
20
  Description-Content-Type: text/markdown
@@ -44,13 +45,13 @@ Requires-Dist: PyOpenGL; extra == "pyglet"
44
45
  Requires-Dist: pyglet; sys_platform != "darwin" and extra == "pyglet"
45
46
  Requires-Dist: pyglet>=1.5.6; sys_platform == "darwin" and extra == "pyglet"
46
47
  Provides-Extra: full
48
+ Requires-Dist: PyOpenGL; extra == "full"
47
49
  Requires-Dist: pygame; extra == "full"
48
50
  Requires-Dist: glfw; extra == "full"
49
- Requires-Dist: pyglet; sys_platform != "darwin" and extra == "full"
50
51
  Requires-Dist: pyglet>=1.5.6; sys_platform == "darwin" and extra == "full"
51
- Requires-Dist: PySDL2; extra == "full"
52
- Requires-Dist: PyOpenGL; extra == "full"
53
52
  Requires-Dist: cocos2d; extra == "full"
53
+ Requires-Dist: PySDL2; extra == "full"
54
+ Requires-Dist: pyglet; sys_platform != "darwin" and extra == "full"
54
55
  Requires-Dist: Cython<0.30,>=0.24; extra == "full"
55
56
  Dynamic: author
56
57
  Dynamic: author-email
@@ -78,8 +79,8 @@ uv pip install meltygui-imgui
78
79
  import meltygui_imgui
79
80
  ```
80
81
 
81
- The current release is **2.0.0.post2**, with wheels for Linux x86-64 (glibc 2.28
82
- or newer) on CPython 3.11, 3.12 and 3.13. It installs `meltygui_imgui` without
82
+ The current release is **2.0.0.post3**, with wheels for Linux x86-64 (glibc 2.28
83
+ or newer) and Windows x86-64 on CPython 3.11, 3.12 and 3.13. It installs `meltygui_imgui` without
83
84
  overwriting the upstream `imgui` package. The 3.13 wheel is generated with
84
85
  Cython 3.2; 3.11 and 3.12 keep the Cython 0.29 bindings.
85
86
 
@@ -109,10 +110,20 @@ uvx --from twine==7.0.0 twine check --strict dist/*.whl dist/*.tar.gz
109
110
 
110
111
  Use `--sudo-docker` if Docker requires sudo. Source builds require a C++ compiler.
111
112
 
113
+ The Windows wheels are built on Windows from that same source archive. With the
114
+ MSVC build tools and uv installed, and the archive from `tools/build.py` in `dist`:
115
+
116
+ ```sh
117
+ python tools/build_windows.py
118
+ python tools/verify.py dist --platform windows
119
+ ```
120
+
121
+ delvewheel bundles the MSVC C++ runtime, so the wheels need no redistributable.
122
+
112
123
  ## Publish
113
124
 
114
125
  Pushes to `main` and pull requests build and test without uploading. A `v*` tag
115
- or a manual run with `publish=true` publishes the verified wheel and source
126
+ or a manual run with `publish=true` publishes the verified Linux and Windows wheels and the source
116
127
  archive through PyPI trusted publishing. Published versions cannot be replaced.
117
128
 
118
129
  Configure a pending GitHub publisher at https://pypi.org/manage/account/publishing/:
@@ -125,7 +136,7 @@ Configure a pending GitHub publisher at https://pypi.org/manage/account/publishi
125
136
  | Workflow | `release.yml` |
126
137
  | Environment | `pypi` |
127
138
 
128
- Then, after the main-branch build passes, create and push `v2.0.0.post2`.
139
+ Then, after the main-branch build passes, create and push `v2.0.0.post3`.
129
140
  No API token belongs in this repository.
130
141
 
131
142
  ## Licenses and changes
@@ -12,8 +12,8 @@ uv pip install meltygui-imgui
12
12
  import meltygui_imgui
13
13
  ```
14
14
 
15
- The current release is **2.0.0.post2**, with wheels for Linux x86-64 (glibc 2.28
16
- or newer) on CPython 3.11, 3.12 and 3.13. It installs `meltygui_imgui` without
15
+ The current release is **2.0.0.post3**, with wheels for Linux x86-64 (glibc 2.28
16
+ or newer) and Windows x86-64 on CPython 3.11, 3.12 and 3.13. It installs `meltygui_imgui` without
17
17
  overwriting the upstream `imgui` package. The 3.13 wheel is generated with
18
18
  Cython 3.2; 3.11 and 3.12 keep the Cython 0.29 bindings.
19
19
 
@@ -43,10 +43,20 @@ uvx --from twine==7.0.0 twine check --strict dist/*.whl dist/*.tar.gz
43
43
 
44
44
  Use `--sudo-docker` if Docker requires sudo. Source builds require a C++ compiler.
45
45
 
46
+ The Windows wheels are built on Windows from that same source archive. With the
47
+ MSVC build tools and uv installed, and the archive from `tools/build.py` in `dist`:
48
+
49
+ ```sh
50
+ python tools/build_windows.py
51
+ python tools/verify.py dist --platform windows
52
+ ```
53
+
54
+ delvewheel bundles the MSVC C++ runtime, so the wheels need no redistributable.
55
+
46
56
  ## Publish
47
57
 
48
58
  Pushes to `main` and pull requests build and test without uploading. A `v*` tag
49
- or a manual run with `publish=true` publishes the verified wheel and source
59
+ or a manual run with `publish=true` publishes the verified Linux and Windows wheels and the source
50
60
  archive through PyPI trusted publishing. Published versions cannot be replaced.
51
61
 
52
62
  Configure a pending GitHub publisher at https://pypi.org/manage/account/publishing/:
@@ -59,7 +69,7 @@ Configure a pending GitHub publisher at https://pypi.org/manage/account/publishi
59
69
  | Workflow | `release.yml` |
60
70
  | Environment | `pypi` |
61
71
 
62
- Then, after the main-branch build passes, create and push `v2.0.0.post2`.
72
+ Then, after the main-branch build passes, create and push `v2.0.0.post3`.
63
73
  No API token belongs in this repository.
64
74
 
65
75
  ## Licenses and changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meltygui-imgui
3
- Version: 2.0.0.post2
3
+ Version: 2.0.0.post3
4
4
  Summary: Cython-based Python bindings for dear meltygui_imgui
5
5
  Home-page: https://github.com/Attentio-AI/meltygui-imgui
6
6
  Author: Michał Jaworski
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Classifier: Programming Language :: Python :: Implementation :: CPython
15
15
  Classifier: Programming Language :: Cython
16
16
  Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Operating System :: Microsoft :: Windows
17
18
  Classifier: Topic :: Games/Entertainment
18
19
  Requires-Python: >=3.11,<3.14
19
20
  Description-Content-Type: text/markdown
@@ -44,13 +45,13 @@ Requires-Dist: PyOpenGL; extra == "pyglet"
44
45
  Requires-Dist: pyglet; sys_platform != "darwin" and extra == "pyglet"
45
46
  Requires-Dist: pyglet>=1.5.6; sys_platform == "darwin" and extra == "pyglet"
46
47
  Provides-Extra: full
48
+ Requires-Dist: PyOpenGL; extra == "full"
47
49
  Requires-Dist: pygame; extra == "full"
48
50
  Requires-Dist: glfw; extra == "full"
49
- Requires-Dist: pyglet; sys_platform != "darwin" and extra == "full"
50
51
  Requires-Dist: pyglet>=1.5.6; sys_platform == "darwin" and extra == "full"
51
- Requires-Dist: PySDL2; extra == "full"
52
- Requires-Dist: PyOpenGL; extra == "full"
53
52
  Requires-Dist: cocos2d; extra == "full"
53
+ Requires-Dist: PySDL2; extra == "full"
54
+ Requires-Dist: pyglet; sys_platform != "darwin" and extra == "full"
54
55
  Requires-Dist: Cython<0.30,>=0.24; extra == "full"
55
56
  Dynamic: author
56
57
  Dynamic: author-email
@@ -78,8 +79,8 @@ uv pip install meltygui-imgui
78
79
  import meltygui_imgui
79
80
  ```
80
81
 
81
- The current release is **2.0.0.post2**, with wheels for Linux x86-64 (glibc 2.28
82
- or newer) on CPython 3.11, 3.12 and 3.13. It installs `meltygui_imgui` without
82
+ The current release is **2.0.0.post3**, with wheels for Linux x86-64 (glibc 2.28
83
+ or newer) and Windows x86-64 on CPython 3.11, 3.12 and 3.13. It installs `meltygui_imgui` without
83
84
  overwriting the upstream `imgui` package. The 3.13 wheel is generated with
84
85
  Cython 3.2; 3.11 and 3.12 keep the Cython 0.29 bindings.
85
86
 
@@ -109,10 +110,20 @@ uvx --from twine==7.0.0 twine check --strict dist/*.whl dist/*.tar.gz
109
110
 
110
111
  Use `--sudo-docker` if Docker requires sudo. Source builds require a C++ compiler.
111
112
 
113
+ The Windows wheels are built on Windows from that same source archive. With the
114
+ MSVC build tools and uv installed, and the archive from `tools/build.py` in `dist`:
115
+
116
+ ```sh
117
+ python tools/build_windows.py
118
+ python tools/verify.py dist --platform windows
119
+ ```
120
+
121
+ delvewheel bundles the MSVC C++ runtime, so the wheels need no redistributable.
122
+
112
123
  ## Publish
113
124
 
114
125
  Pushes to `main` and pull requests build and test without uploading. A `v*` tag
115
- or a manual run with `publish=true` publishes the verified wheel and source
126
+ or a manual run with `publish=true` publishes the verified Linux and Windows wheels and the source
116
127
  archive through PyPI trusted publishing. Published versions cannot be replaced.
117
128
 
118
129
  Configure a pending GitHub publisher at https://pypi.org/manage/account/publishing/:
@@ -125,7 +136,7 @@ Configure a pending GitHub publisher at https://pypi.org/manage/account/publishi
125
136
  | Workflow | `release.yml` |
126
137
  | Environment | `pypi` |
127
138
 
128
- Then, after the main-branch build passes, create and push `v2.0.0.post2`.
139
+ Then, after the main-branch build passes, create and push `v2.0.0.post3`.
129
140
  No API token belongs in this repository.
130
141
 
131
142
  ## Licenses and changes
@@ -100,5 +100,6 @@ tests/test_graphics_mem_safety.py
100
100
  tests/test_gui_style_initialization.py
101
101
  tools/build.py
102
102
  tools/build_in_container.sh
103
+ tools/build_windows.py
103
104
  tools/smoke.py
104
105
  tools/verify.py
@@ -26,7 +26,7 @@ if _CYTHONIZE_WITH_COVERAGE and not USE_CYTHON:
26
26
  )
27
27
 
28
28
 
29
- PREBUILT_WHEELS = "Linux x86-64 (glibc 2.28+), CPython 3.11, 3.12 and 3.13"
29
+ PREBUILT_WHEELS = "Linux x86-64 (glibc 2.28+) and Windows x86-64, CPython 3.11, 3.12 and 3.13"
30
30
  COMPILING_COMMANDS = {"bdist_wheel", "build_ext", "build", "install", "develop", "editable_wheel"}
31
31
 
32
32
  # Installers run this file only when no prebuilt wheel matches: say so.
@@ -174,7 +174,7 @@ EXTENSIONS = [
174
174
 
175
175
  setup(
176
176
  name="meltygui-imgui",
177
- version="2.0.0.post2",
177
+ version="2.0.0.post3",
178
178
  python_requires=">=3.11,<3.14",
179
179
  packages=find_packages('.'),
180
180
 
@@ -208,6 +208,7 @@ setup(
208
208
  'Programming Language :: Cython',
209
209
 
210
210
  'Operating System :: POSIX :: Linux',
211
+ 'Operating System :: Microsoft :: Windows',
211
212
 
212
213
  'Topic :: Games/Entertainment',
213
214
  ],
@@ -0,0 +1,59 @@
1
+ """Build Windows x86-64 wheels (one per supported CPython) from the release source archive."""
2
+ import argparse
3
+ import hashlib
4
+ import json
5
+ import os
6
+ from pathlib import Path
7
+ import subprocess
8
+ import tarfile
9
+ import tempfile
10
+ import zipfile
11
+
12
+ from build import KIND, PYTHONS, ROOT
13
+
14
+ # Bundles the MSVC C++ runtime (msvcp140.dll), which CPython does not ship.
15
+ DELVEWHEEL = "delvewheel==1.13.1"
16
+ TARGET = "win_amd64"
17
+
18
+
19
+ def main():
20
+ parser = argparse.ArgumentParser(description=__doc__)
21
+ parser.add_argument("--output", type=Path, default=ROOT / "dist",
22
+ help="Directory holding the sdist from tools/build.py; the wheels land beside it")
23
+ args = parser.parse_args()
24
+ output = args.output.resolve()
25
+ archives = list(output.glob("*.tar.gz"))
26
+ if len(archives) != 1:
27
+ parser.error("Expected exactly one sdist from tools/build.py in the output directory")
28
+ if any(output.glob(f"*-{TARGET}.whl")):
29
+ parser.error("Use an output directory without existing Windows wheels")
30
+ # The release build is the one compilation that is not a missing-wheel fallback.
31
+ environment = {**os.environ, f"MELTYGUI_{KIND.upper()}_RELEASE_BUILD": "1"}
32
+ with tempfile.TemporaryDirectory(prefix="meltygui-native-") as work:
33
+ # Every wheel is built from the source archive users fall back to.
34
+ with tarfile.open(archives[0]) as archive:
35
+ archive.extractall(work, filter="data")
36
+ source = next(Path(work).iterdir())
37
+ raw = Path(work) / "raw"
38
+ for tag in PYTHONS:
39
+ version = f"{tag[2]}.{tag[3:]}"
40
+ subprocess.run(["uv", "build", "--wheel", "--python", version, str(source), "--out-dir", str(raw)],
41
+ check=True, env=environment)
42
+ for wheel in sorted(raw.glob("*.whl")):
43
+ subprocess.run(["uvx", "--from", DELVEWHEEL, "delvewheel", "repair", "--wheel-dir", str(output),
44
+ str(wheel)], check=True)
45
+ wheels = sorted(output.glob(f"*-{TARGET}.whl"))
46
+ # The auditwheel.txt counterpart: the DLLs each repaired wheel carries.
47
+ report = []
48
+ for wheel in wheels:
49
+ with zipfile.ZipFile(wheel) as archive:
50
+ bundled = sorted(Path(n).name for n in archive.namelist() if ".libs/" in n and n.lower().endswith(".dll"))
51
+ report.append(f"{wheel.name}\n" + "".join(f" bundles {name}\n" for name in bundled))
52
+ (output / "delvewheel.txt").write_text("\n".join(report))
53
+ receipt = {"kind": KIND, "sdist": archives[0].name, "repair": DELVEWHEEL, "python": PYTHONS, "target": TARGET,
54
+ "sha256": {p.name: hashlib.sha256(p.read_bytes()).hexdigest() for p in [archives[0], *wheels]}}
55
+ (output / "build-windows.json").write_text(json.dumps(receipt, indent=2) + "\n")
56
+
57
+
58
+ if __name__ == "__main__":
59
+ main()
@@ -4,7 +4,7 @@ import importlib.util
4
4
 
5
5
  import meltygui_imgui as imgui
6
6
 
7
- assert importlib.metadata.version('meltygui-imgui') == '2.0.0.post2'
7
+ assert importlib.metadata.version('meltygui-imgui') == '2.0.0.post3'
8
8
  assert importlib.util.find_spec('imgui') is None
9
9
  context = imgui.create_context()
10
10
  try:
@@ -7,13 +7,16 @@ import tarfile
7
7
  import zipfile
8
8
 
9
9
  KIND = "imgui"
10
- VERSION = "2.0.0.post2"
10
+ VERSION = "2.0.0.post3"
11
11
  PYTHONS = ["cp311", "cp312", "cp313"]
12
12
  NAMESPACE = "meltygui_" + KIND
13
+ # platform -> (wheel platform tag prefix, extension module suffix)
14
+ PLATFORMS = {"linux": ("manylinux", ".so"), "windows": ("win_amd64", ".pyd")}
13
15
 
14
16
 
15
- def verify_wheel(wheel):
16
- assert f"-{wheel.name.split('-')[2]}-manylinux" in wheel.name
17
+ def verify_wheel(wheel, platform):
18
+ tag, extension = PLATFORMS[platform]
19
+ assert f"-{wheel.name.split('-')[2]}-{tag}" in wheel.name
17
20
  with zipfile.ZipFile(wheel) as archive:
18
21
  names = archive.namelist()
19
22
  metadata = BytesParser().parsebytes(archive.read(next(n for n in names if n.endswith(".dist-info/METADATA"))))
@@ -23,7 +26,10 @@ def verify_wheel(wheel):
23
26
  assert metadata["Home-page"] == "https://github.com/Attentio-AI/meltygui-" + KIND
24
27
  assert any(n.startswith(NAMESPACE + "/") for n in names)
25
28
  assert not any(n.startswith(KIND + "/") for n in names), "Must not overwrite upstream package"
26
- assert any(n.endswith(".so") for n in names)
29
+ assert any(n.endswith(extension) for n in names)
30
+ if platform == "windows":
31
+ # CPython ships vcruntime140 but not the C++ runtime the extension links.
32
+ assert any(".libs/msvcp140" in n for n in names)
27
33
  assert any("/licenses/LICENSE" in n for n in names)
28
34
  assert not any(n.startswith(("meltygui/", "meltygui_pro/", "meltyprivate/")) for n in names)
29
35
  if KIND == "pycuda":
@@ -37,6 +43,8 @@ def verify_wheel(wheel):
37
43
  def main():
38
44
  parser = argparse.ArgumentParser(description=__doc__)
39
45
  parser.add_argument("directory", type=Path, nargs="?", default=Path("dist"))
46
+ parser.add_argument("--platform", choices=sorted(PLATFORMS), nargs="+", default=["linux"],
47
+ help="Platforms whose wheels the directory must hold")
40
48
  args = parser.parse_args()
41
49
  ref = os.environ.get("GITHUB_REF", "")
42
50
  if ref.startswith("refs/tags/"):
@@ -44,15 +52,18 @@ def main():
44
52
  wheels = list(args.directory.glob("*.whl"))
45
53
  archives = list(args.directory.glob("*.tar.gz"))
46
54
  assert len(archives) == 1, "Expected exactly one sdist"
47
- assert sorted(w.name.split("-")[2] for w in wheels) == PYTHONS, "Expected one wheel per supported CPython"
55
+ platform_of = {w: next((p for p, (tag, _) in PLATFORMS.items() if f"-{tag}" in w.name), "") for w in wheels}
56
+ expected = sorted((platform, tag) for platform in args.platform for tag in PYTHONS)
57
+ assert sorted((platform_of[w], w.name.split("-")[2]) for w in wheels) == expected, \
58
+ "Expected one wheel per supported CPython and platform"
48
59
  for wheel in wheels:
49
- metadata = verify_wheel(wheel)
60
+ metadata = verify_wheel(wheel, platform_of[wheel])
50
61
  with tarfile.open(archives[0]) as archive:
51
62
  names = archive.getnames()
52
63
  assert any(n.endswith("/UPSTREAM.json") for n in names)
53
64
  assert any(n.endswith("/LICENSE") for n in names)
54
65
  assert any("/" + NAMESPACE + "/" in n for n in names)
55
- print(f"Verified {metadata['Name']} {VERSION}: wheel, sdist, namespace and licenses")
66
+ print(f"Verified {metadata['Name']} {VERSION} for {', '.join(args.platform)}: wheels, sdist, namespace and licenses")
56
67
 
57
68
 
58
69
  if __name__ == "__main__":
@@ -10,11 +10,11 @@ cocos2d
10
10
  pyglet>=1.5.6
11
11
 
12
12
  [full]
13
+ PyOpenGL
13
14
  pygame
14
15
  glfw
15
- PySDL2
16
- PyOpenGL
17
16
  cocos2d
17
+ PySDL2
18
18
  Cython<0.30,>=0.24
19
19
 
20
20
  [full:sys_platform != "darwin"]