diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a9476d3460..e323081a91 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -42,6 +42,7 @@ repos: (?x)^( ^src_c/_sdl2/.*$ | ^src_c/doc/.*$ + | ^src_c/.+/.*_doc.h$ | docs/reST/_static/script.js | docs/reST/_templates/header.h | src_c/include/sse2neon.h diff --git a/buildconfig/Setup.Android.SDL2.in b/buildconfig/Setup.Android.SDL2.in index 610d897d8c..4c76330ee5 100644 --- a/buildconfig/Setup.Android.SDL2.in +++ b/buildconfig/Setup.Android.SDL2.in @@ -48,18 +48,18 @@ key src_c/key.c $(SDL) $(DEBUG) mouse src_c/mouse.c $(SDL) $(DEBUG) rect src_c/rect.c src_c/pgcompat_rect.c $(SDL) $(DEBUG) rwobject src_c/rwobject.c $(SDL) $(DEBUG) -surface src_c/simd_blitters_sse2.c src_c/simd_blitters_avx2.c src_c/surface.c src_c/alphablit.c src_c/surface_fill.c src_c/simd_surface_fill_avx2.c src_c/simd_surface_fill_sse2.c $(SDL) $(DEBUG) +surface src_c/surface/simd_blitters_sse2.c src_c/surface/simd_blitters_avx2.c src_c/surface/surface.c src_c/surface/alphablit.c src_c/surface/surface_fill.c src_c/surface/simd_surface_fill_avx2.c src_c/surface/simd_surface_fill_sse2.c $(SDL) $(DEBUG) -Isrc_c/include surflock src_c/surflock.c $(SDL) $(DEBUG) time src_c/time.c $(SDL) $(DEBUG) joystick src_c/joystick.c $(SDL) $(DEBUG) draw src_c/draw.c $(SDL) $(DEBUG) image src_c/image.c $(SDL) $(DEBUG) -transform src_c/simd_transform_sse2.c src_c/simd_transform_avx2.c src_c/transform.c src_c/rotozoom.c src_c/scale2x.c src_c/scale_mmx.c $(SDL) $(DEBUG) -D_NO_MMX_FOR_X86_64 +transform src_c/simd_transform_sse2.c src_c/simd_transform_avx2.c src_c/transform.c src_c/rotozoom.c src_c/scale2x.c src_c/scale_mmx.c $(SDL) $(DEBUG) -D_NO_MMX_FOR_X86_64 -Isrc_c/include mask src_c/mask.c src_c/bitmask.c $(SDL) $(DEBUG) bufferproxy src_c/bufferproxy.c $(SDL) $(DEBUG) -pixelarray src_c/pixelarray.c $(SDL) $(DEBUG) +pixelarray src_c/pixelarray.c $(SDL) $(DEBUG) -Isrc_c/surface math src_c/math.c $(SDL) $(DEBUG) -pixelcopy src_c/pixelcopy.c $(SDL) $(DEBUG) +pixelcopy src_c/pixelcopy.c $(SDL) $(DEBUG) -Isrc_c/include newbuffer src_c/newbuffer.c $(SDL) $(DEBUG) window src_c/window.c $(SDL) $(DEBUG) _render src_c/render.c $(SDL) $(DEBUG) diff --git a/buildconfig/Setup.Emscripten.SDL2.in b/buildconfig/Setup.Emscripten.SDL2.in index 9c465102f1..7163bc7cdd 100644 --- a/buildconfig/Setup.Emscripten.SDL2.in +++ b/buildconfig/Setup.Emscripten.SDL2.in @@ -33,7 +33,7 @@ math src_c/math.c $(SDL) $(DEBUG) GFX = src_c/SDL_gfx/SDL_gfxPrimitives.c -static src_c/static.c $(SDL) $(FREETYPE) $(FONT) $(MIXER) $(IMAGE) $(PNG) $(JPEG) $(DEBUG) +static src_c/static.c $(SDL) $(FREETYPE) $(FONT) $(MIXER) $(IMAGE) $(PNG) $(JPEG) $(DEBUG) -Isrc_c/include -Isrc_c/surface # these should not be altered they already are in static.c merging file above time src_c/void.c diff --git a/buildconfig/Setup.SDL2.in b/buildconfig/Setup.SDL2.in index 0acde7e2fe..3356753d32 100644 --- a/buildconfig/Setup.SDL2.in +++ b/buildconfig/Setup.SDL2.in @@ -59,18 +59,18 @@ key src_c/key.c $(SDL) $(DEBUG) mouse src_c/mouse.c $(SDL) $(DEBUG) rect src_c/rect.c src_c/pgcompat_rect.c $(SDL) $(DEBUG) rwobject src_c/rwobject.c $(SDL) $(DEBUG) -surface src_c/simd_blitters_sse2.c src_c/simd_blitters_avx2.c src_c/surface.c src_c/alphablit.c src_c/surface_fill.c src_c/simd_surface_fill_avx2.c src_c/simd_surface_fill_sse2.c $(SDL) $(DEBUG) +surface src_c/surface/simd_blitters_sse2.c src_c/surface/simd_blitters_avx2.c src_c/surface/surface.c src_c/surface/alphablit.c src_c/surface/surface_fill.c src_c/surface/simd_surface_fill_avx2.c src_c/surface/simd_surface_fill_sse2.c $(SDL) $(DEBUG) -Isrc_c/include surflock src_c/surflock.c $(SDL) $(DEBUG) time src_c/time.c $(SDL) $(DEBUG) joystick src_c/joystick.c $(SDL) $(DEBUG) draw src_c/draw.c $(SDL) $(DEBUG) image src_c/image.c $(SDL) $(DEBUG) -transform src_c/simd_transform_sse2.c src_c/simd_transform_avx2.c src_c/transform.c src_c/rotozoom.c src_c/scale2x.c src_c/scale_mmx.c $(SDL) $(DEBUG) +transform src_c/simd_transform_sse2.c src_c/simd_transform_avx2.c src_c/transform.c src_c/rotozoom.c src_c/scale2x.c src_c/scale_mmx.c $(SDL) $(DEBUG) -Isrc_c/include mask src_c/mask.c src_c/bitmask.c $(SDL) $(DEBUG) bufferproxy src_c/bufferproxy.c $(SDL) $(DEBUG) -pixelarray src_c/pixelarray.c $(SDL) $(DEBUG) +pixelarray src_c/pixelarray.c $(SDL) $(DEBUG) -Isrc_c/surface math src_c/math.c $(SDL) $(DEBUG) -pixelcopy src_c/pixelcopy.c $(SDL) $(DEBUG) +pixelcopy src_c/pixelcopy.c $(SDL) $(DEBUG) -Isrc_c/include newbuffer src_c/newbuffer.c $(SDL) $(DEBUG) system src_c/system.c $(SDL) $(DEBUG) geometry src_c/geometry.c $(SDL) $(DEBUG) diff --git a/buildconfig/make_docs.py b/buildconfig/make_docs.py index 25664042c9..c80b1b45de 100755 --- a/buildconfig/make_docs.py +++ b/buildconfig/make_docs.py @@ -3,6 +3,7 @@ import sys import os import subprocess +import glob rst_dir = 'docs' rst_source_dir = os.path.join(rst_dir, 'reST') @@ -11,6 +12,20 @@ c_header_dir = os.path.join('src_c', 'doc') +ignore_dirs = ["freetype"] + + +def move_doc_headers(): + for file in glob.glob(f'{c_header_dir}/*.h'): + file_name = file.replace(c_header_dir + os.sep, '') + module_name = file.replace('_doc.h', '').replace(c_header_dir + os.sep, '') + if module_name not in ignore_dirs: + args = ['src_c', module_name] + path = os.path.join(*args) + if os.path.exists(path): + os.replace(file, os.path.join(path, file_name)) + + def run(): full_generation_flag = False for argument in sys.argv[1:]: @@ -27,7 +42,11 @@ def run(): if full_generation_flag: subprocess_args.append('-E') print("Executing sphinx in subprocess with args:", subprocess_args) - return subprocess.run(subprocess_args).returncode + returncode = subprocess.run(subprocess_args).returncode + if returncode != 0: + return returncode + move_doc_headers() + return 0 except Exception: print('---') print('Have you installed sphinx?') diff --git a/docs/reST/c_api/surface.rst b/docs/reST/c_api/surface.rst index a394d629f0..310a098ebe 100644 --- a/docs/reST/c_api/surface.rst +++ b/docs/reST/c_api/surface.rst @@ -6,7 +6,7 @@ Class Surface API exported by pygame.surface ************************************************ -src_c/surface.c +src_c/surface/surface.c =============== This extension module defines Python type :py:class:`pygame.Surface`. diff --git a/src_c/_surface.h b/src_c/_surface.h deleted file mode 100644 index bb07437d0f..0000000000 --- a/src_c/_surface.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - pygame-ce - Python Game Library - Copyright (C) 2000-2001 Pete Shinners - Copyright (C) 2007 Marcus von Appen - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Pete Shinners - pete@shinners.org -*/ - -#ifndef _SURFACE_H -#define _SURFACE_H - -#include "_pygame.h" -#include "surface.h" - -#endif diff --git a/src_c/freetype/ft_pixel.h b/src_c/freetype/ft_pixel.h index 46c5b47732..d35df3bcfa 100644 --- a/src_c/freetype/ft_pixel.h +++ b/src_c/freetype/ft_pixel.h @@ -20,7 +20,7 @@ #ifndef _PYGAME_FREETYPE_PIXEL_H_ #define _PYGAME_FREETYPE_PIXEL_H_ -#include "../surface.h" +#include "../surface/surface.h" #define GET_RGB_VALS(pixel, fmt, r, g, b, a) \ (r) = ((pixel) & (fmt)->Rmask) >> (fmt)->Rshift; \ diff --git a/src_c/gfxdraw.c b/src_c/gfxdraw.c index 09cbb050b8..6d1b1a1ec1 100644 --- a/src_c/gfxdraw.c +++ b/src_c/gfxdraw.c @@ -34,8 +34,6 @@ #include "doc/gfxdraw_doc.h" -#include "surface.h" - #include "pgcompat.h" #include "SDL_gfx/SDL_gfxPrimitives.h" diff --git a/src_c/palette.h b/src_c/include/palette.h similarity index 100% rename from src_c/palette.h rename to src_c/include/palette.h diff --git a/src_c/simd_shared.h b/src_c/include/simd_shared.h similarity index 98% rename from src_c/simd_shared.h rename to src_c/include/simd_shared.h index a697fffb0c..02f7257351 100644 --- a/src_c/simd_shared.h +++ b/src_c/include/simd_shared.h @@ -2,8 +2,6 @@ #ifndef SIMD_SHARED_H #define SIMD_SHARED_H -#include "_surface.h" - int pg_sse2_at_runtime_but_uncompiled(); int diff --git a/src_c/mask.c b/src_c/mask.c index f5e83f75f1..1c94ec804e 100644 --- a/src_c/mask.c +++ b/src_c/mask.c @@ -127,7 +127,7 @@ mask_get_size(PyObject *self, PyObject *_null) * Returns: * Rect object or NULL to indicate a fail * - * Ref: src_c/surface.c surf_get_rect() + * Ref: src_c/surface/surface.c surf_get_rect() */ static PyObject * mask_get_rect(PyObject *self, PyObject *args, PyObject *kwargs) diff --git a/src_c/meson.build b/src_c/meson.build index 0c1479a812..156d057f01 100644 --- a/src_c/meson.build +++ b/src_c/meson.build @@ -86,52 +86,7 @@ rwobject = py.extension_module( # TODO: support SDL3 if sdl_api != 3 -simd_blitters_avx2 = static_library( - 'simd_blitters_avx2', - 'simd_blitters_avx2.c', - dependencies: pg_base_deps, - c_args: simd_avx2_flags + warnings_error, -) - -simd_blitters_sse2 = static_library( - 'simd_blitters_sse2', - 'simd_blitters_sse2.c', - dependencies: pg_base_deps, - c_args: simd_sse2_neon_flags + warnings_error, -) - -simd_surface_fill_avx2 = static_library( - 'simd_surface_fill_avx2', - 'simd_surface_fill_avx2.c', - dependencies: pg_base_deps, - c_args: simd_avx2_flags + warnings_error, -) - -simd_surface_fill_sse2 = static_library( - 'simd_surface_fill_sse2', - 'simd_surface_fill_sse2.c', - dependencies: pg_base_deps, - c_args: simd_sse2_neon_flags + warnings_error, -) - -surface = py.extension_module( - 'surface', - [ - 'surface.c', - 'alphablit.c', - 'surface_fill.c', - ], - c_args: warnings_error, - link_with: [ - simd_blitters_avx2, - simd_blitters_sse2, - simd_surface_fill_avx2, - simd_surface_fill_sse2, - ], - dependencies: pg_base_deps, - install: true, - subdir: pg, -) + subdir('surface') endif surflock = py.extension_module( @@ -182,6 +137,7 @@ image = py.extension_module( simd_transform_avx2 = static_library( 'simd_transform_avx2', 'simd_transform_avx2.c', + include_directories: 'surface', dependencies: pg_base_deps, c_args: simd_avx2_flags + warnings_error, ) @@ -189,6 +145,7 @@ simd_transform_avx2 = static_library( simd_transform_sse2 = static_library( 'simd_transform_sse2', 'simd_transform_sse2.c', + include_directories: 'surface', dependencies: pg_base_deps, c_args: simd_sse2_neon_flags + warnings_error, ) @@ -212,6 +169,7 @@ endif transform = py.extension_module( 'transform', transform_sources, + include_directories: ['include', 'surface'], c_args: warnings_error, link_with: [simd_transform_avx2, simd_transform_sse2], objects: transform_objs, @@ -241,6 +199,7 @@ bufferproxy = py.extension_module( pixelarray = py.extension_module( 'pixelarray', 'pixelarray.c', + include_directories: 'surface', c_args: warnings_error, dependencies: pg_base_deps, install: true, @@ -259,6 +218,7 @@ math = py.extension_module( pixelcopy = py.extension_module( 'pixelcopy', 'pixelcopy.c', + include_directories: 'include', c_args: warnings_error, dependencies: pg_base_deps, install: true, diff --git a/src_c/simd_transform.h b/src_c/simd_transform.h index 30f0379568..011d910f87 100644 --- a/src_c/simd_transform.h +++ b/src_c/simd_transform.h @@ -1,5 +1,5 @@ #define NO_PYGAME_C_API -#include "_surface.h" +#include "surface.h" /* TODO: This compat code should probably go in some place like simd_shared.h * That header file however is inconsistently used at the moment and not diff --git a/src_c/static.c b/src_c/static.c index d40c30189c..9e216a7985 100644 --- a/src_c/static.c +++ b/src_c/static.c @@ -427,9 +427,9 @@ PyInit_pygame_static() #undef pgSurface_Type #undef pgSurface_SetSurface -#include "surface.c" -#include "simd_blitters_avx2.c" -#include "simd_blitters_sse2.c" +#include "surface/surface.c" +#include "surface/simd_blitters_avx2.c" +#include "surface/simd_blitters_sse2.c" #include "window.c" @@ -492,9 +492,9 @@ PyInit_pygame_static() #include "gfxdraw.c" -#include "alphablit.c" +#include "surface/alphablit.c" -#include "surface_fill.c" +#include "surface/surface_fill.c" #include "pixelarray.c" #include "pixelcopy.c" #include "newbuffer.c" diff --git a/src_c/_blit_info.h b/src_c/surface/_blit_info.h similarity index 96% rename from src_c/_blit_info.h rename to src_c/surface/_blit_info.h index 0bd289dec9..fa78d11ba5 100644 --- a/src_c/_blit_info.h +++ b/src_c/surface/_blit_info.h @@ -1,7 +1,7 @@ #ifndef _BLIT_INFO_H #define _BLIT_INFO_H #define NO_PYGAME_C_API -#include "_surface.h" +#include "surface.h" /* The structure passed to the low level blit functions */ typedef struct { diff --git a/src_c/alphablit.c b/src_c/surface/alphablit.c similarity index 99% rename from src_c/alphablit.c rename to src_c/surface/alphablit.c index 8e7d8df919..8b1e44c329 100644 --- a/src_c/alphablit.c +++ b/src_c/surface/alphablit.c @@ -23,7 +23,7 @@ */ #define NO_PYGAME_C_API -#include "_surface.h" +#include "surface.h" #include "simd_shared.h" #include "simd_blitters.h" diff --git a/src_c/surface/meson.build b/src_c/surface/meson.build new file mode 100644 index 0000000000..9a3685d547 --- /dev/null +++ b/src_c/surface/meson.build @@ -0,0 +1,52 @@ +simd_blitters_avx2 = static_library( + 'simd_blitters_avx2', + 'simd_blitters_avx2.c', + include_directories: '../include', + dependencies: pg_base_deps, + c_args: simd_avx2_flags + warnings_error, +) + +simd_blitters_sse2 = static_library( + 'simd_blitters_sse2', + 'simd_blitters_sse2.c', + include_directories: '../include', + dependencies: pg_base_deps, + c_args: simd_sse2_neon_flags + warnings_error, +) + +simd_surface_fill_avx2 = static_library( + 'simd_surface_fill_avx2', + 'simd_surface_fill_avx2.c', + include_directories: '../include', + dependencies: pg_base_deps, + c_args: simd_avx2_flags + warnings_error, +) + +simd_surface_fill_sse2 = static_library( + 'simd_surface_fill_sse2', + 'simd_surface_fill_sse2.c', + include_directories: '../include', + dependencies: pg_base_deps, + c_args: simd_sse2_neon_flags + warnings_error, +) + +surface = py.extension_module( + 'surface', + [ + 'surface.c', + 'alphablit.c', + 'surface_fill.c', + ], + include_directories: '../include', + c_args: warnings_error, + link_with: [ + simd_blitters_avx2, + simd_blitters_sse2, + simd_surface_fill_avx2, + simd_surface_fill_sse2, + ], + dependencies: pg_base_deps, + install: true, + subdir: pg, +) +install_data('surface.pyi', install_dir: pg_dir, install_tag: 'pg-tag') diff --git a/src_c/simd_blitters.h b/src_c/surface/simd_blitters.h similarity index 99% rename from src_c/simd_blitters.h rename to src_c/surface/simd_blitters.h index 0c02207c26..5967227b96 100644 --- a/src_c/simd_blitters.h +++ b/src_c/surface/simd_blitters.h @@ -1,5 +1,5 @@ #define NO_PYGAME_C_API -#include "_surface.h" +#include "surface.h" #include "_blit_info.h" #if !defined(PG_ENABLE_ARM_NEON) && defined(__aarch64__) diff --git a/src_c/simd_blitters_avx2.c b/src_c/surface/simd_blitters_avx2.c similarity index 100% rename from src_c/simd_blitters_avx2.c rename to src_c/surface/simd_blitters_avx2.c diff --git a/src_c/simd_blitters_sse2.c b/src_c/surface/simd_blitters_sse2.c similarity index 99% rename from src_c/simd_blitters_sse2.c rename to src_c/surface/simd_blitters_sse2.c index 65bb926721..5f592702af 100644 --- a/src_c/simd_blitters_sse2.c +++ b/src_c/surface/simd_blitters_sse2.c @@ -2,7 +2,7 @@ #if PG_ENABLE_ARM_NEON // sse2neon.h is from here: https://github.com/DLTcollab/sse2neon -#include "include/sse2neon.h" +#include "sse2neon.h" #endif /* PG_ENABLE_ARM_NEON */ /* See if we are compiled 64 bit on GCC or MSVC */ diff --git a/src_c/simd_fill.h b/src_c/surface/simd_fill.h similarity index 99% rename from src_c/simd_fill.h rename to src_c/surface/simd_fill.h index db80008c1d..7d134879fd 100644 --- a/src_c/simd_fill.h +++ b/src_c/surface/simd_fill.h @@ -1,5 +1,5 @@ #define NO_PYGAME_C_API -#include "_surface.h" +#include "surface.h" #if !defined(PG_ENABLE_ARM_NEON) && defined(__aarch64__) // arm64 has neon optimisations enabled by default, even when fpu=neon is not diff --git a/src_c/simd_surface_fill_avx2.c b/src_c/surface/simd_surface_fill_avx2.c similarity index 100% rename from src_c/simd_surface_fill_avx2.c rename to src_c/surface/simd_surface_fill_avx2.c diff --git a/src_c/simd_surface_fill_sse2.c b/src_c/surface/simd_surface_fill_sse2.c similarity index 99% rename from src_c/simd_surface_fill_sse2.c rename to src_c/surface/simd_surface_fill_sse2.c index 7e4a80b030..b481af7cce 100644 --- a/src_c/simd_surface_fill_sse2.c +++ b/src_c/surface/simd_surface_fill_sse2.c @@ -2,7 +2,7 @@ #if PG_ENABLE_ARM_NEON // sse2neon.h is from here: https://github.com/DLTcollab/sse2neon -#include "include/sse2neon.h" +#include "sse2neon.h" #endif /* PG_ENABLE_ARM_NEON */ #define BAD_SSE2_FUNCTION_CALL \ diff --git a/src_c/surface.c b/src_c/surface/surface.c similarity index 99% rename from src_c/surface.c rename to src_c/surface/surface.c index 35b0ef1786..73bee1f302 100644 --- a/src_c/surface.c +++ b/src_c/surface/surface.c @@ -28,8 +28,8 @@ #include "palette.h" #include "structmember.h" -#include "pgcompat.h" -#include "doc/surface_doc.h" +#include "../pgcompat.h" +#include "surface_doc.h" /* stdint.h is missing from some versions of MSVC. */ #ifdef _MSC_VER diff --git a/src_c/surface.h b/src_c/surface/surface.h similarity index 99% rename from src_c/surface.h rename to src_c/surface/surface.h index fb8ac2ede3..61d7db8f34 100644 --- a/src_c/surface.h +++ b/src_c/surface/surface.h @@ -29,13 +29,7 @@ #undef _POSIX_C_SOURCE #endif -#ifdef PG_SDL3 -#include -#else -#include -#endif - -#include "pygame.h" +#include "../pygame.h" /* Blend modes */ #define PYGAME_BLEND_ADD 0x1 diff --git a/buildconfig/stubs/pygame/surface.pyi b/src_c/surface/surface.pyi similarity index 100% rename from buildconfig/stubs/pygame/surface.pyi rename to src_c/surface/surface.pyi diff --git a/src_c/doc/surface_doc.h b/src_c/surface/surface_doc.h similarity index 100% rename from src_c/doc/surface_doc.h rename to src_c/surface/surface_doc.h diff --git a/src_c/surface_fill.c b/src_c/surface/surface_fill.c similarity index 100% rename from src_c/surface_fill.c rename to src_c/surface/surface_fill.c