Skip to content

Commit

Permalink
SDL2 --> SDL3 5th pass
Browse files Browse the repository at this point in the history
  • Loading branch information
misl6 committed Apr 6, 2024
1 parent 1f71b9b commit ccdd97b
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 54 deletions.
2 changes: 1 addition & 1 deletion kivy/core/window/_window_sdl2.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -814,7 +814,7 @@ cdef class _WindowSDL2Storage:
SDL_DestroySurface(flipped_surface)

def grab_mouse(self, grab):
SDL_SetWindowGrab(self.win, SDL_TRUE if grab else SDL_FALSE)
SDL_SetWindowMouseGrab(self.win, SDL_TRUE if grab else SDL_FALSE)

def get_relative_mouse_pos(self):
cdef int x, y
Expand Down
3 changes: 1 addition & 2 deletions kivy/lib/sdl2.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -624,8 +624,7 @@ cdef extern from "SDL.h":
cdef int SDL_SetWindowFullscreen(SDL_Window * window, SDL_bool fullscreen)
cdef SDL_Surface * SDL_GetWindowSurface(SDL_Window * window)
cdef int SDL_UpdateWindowSurface(SDL_Window * window)
cdef void SDL_SetWindowGrab(SDL_Window * window, SDL_bool grabbed)
cdef SDL_bool SDL_GetWindowGrab(SDL_Window * window)
cdef void SDL_SetWindowMouseGrab(SDL_Window * window, SDL_bool grabbed)
cdef int SDL_SetWindowBrightness(SDL_Window * window, float brightness)
cdef float SDL_GetWindowBrightness(SDL_Window * window)
cdef void SDL_DestroyWindow(SDL_Window * window)
Expand Down
15 changes: 9 additions & 6 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -568,7 +568,7 @@ def _check_and_fix_sdl2_mixer(f_path):

if not sdl2_valid and platform != "ios":
# use pkg-config approach instead
sdl2_flags = pkgconfig('sdl3', 'SDL2_ttf', 'SDL2_image', 'SDL2_mixer')
sdl2_flags = pkgconfig('sdl3', 'sdl3-ttf', 'sdl3-image', 'sdl3-mixer')
if 'libraries' in sdl2_flags:
print('SDL2 found via pkg-config')
c_options['use_sdl2'] = True
Expand Down Expand Up @@ -782,7 +782,10 @@ def determine_sdl2():
[
join(KIVY_DEPS_ROOT, "dist", "lib"),
join(KIVY_DEPS_ROOT, "dist", "lib64"),
join(KIVY_DEPS_ROOT, "dist", "include", "SDL2"),
join(KIVY_DEPS_ROOT, "dist", "include", "SDL3"),
join(KIVY_DEPS_ROOT, "dist", "include", "SDL3_image"),
join(KIVY_DEPS_ROOT, "dist", "include", "SDL3_mixer"),
join(KIVY_DEPS_ROOT, "dist", "include", "SDL3_ttf"),
]
)

Expand All @@ -792,18 +795,18 @@ def determine_sdl2():

# no pkgconfig info, or we want to use a specific sdl2 path, so perform
# manual configuration
flags['libraries'] = ['SDL2', 'SDL2_ttf', 'SDL2_image', 'SDL2_mixer']
flags['libraries'] = ['SDL3', 'SDL3_ttf', 'SDL3_image', 'SDL3_mixer']

sdl2_paths = kivy_sdl2_path.split(os.pathsep) if kivy_sdl2_path else []

if not sdl2_paths:
# Try to find sdl2 in default locations if we don't have a custom path
sdl2_paths = []
for include in includes + [join(sys.prefix, 'include')]:
sdl_inc = join(include, 'SDL2')
sdl_inc = join(include, 'SDL3')
if isdir(sdl_inc):
sdl2_paths.append(sdl_inc)
sdl2_paths.extend(['/usr/local/include/SDL2', '/usr/include/SDL2'])
sdl2_paths.extend(['/usr/local/include/SDL3', '/usr/include/SDL3'])

flags['include_dirs'] = sdl2_paths
flags['extra_link_args'] = []
Expand All @@ -825,7 +828,7 @@ def determine_sdl2():
if sdl2_flags:
flags = merge(flags, sdl2_flags)

# ensure headers for all the SDL2 and sub libraries are available
# ensure headers for all the SDL3 and sub libraries are available
libs_to_check = ['SDL', 'SDL_mixer', 'SDL_ttf', 'SDL_image']
can_compile = True
for lib in libs_to_check:
Expand Down
99 changes: 54 additions & 45 deletions tools/build_linux_dependencies.sh
Original file line number Diff line number Diff line change
@@ -1,25 +1,31 @@
#!/bin/bash
set -e -x

# manylinux SDL2
MANYLINUX__SDL2__VERSION="2.28.5"
MANYLINUX__SDL2__URL="https://github.com/libsdl-org/SDL/releases/download/release-$MANYLINUX__SDL2__VERSION/SDL2-$MANYLINUX__SDL2__VERSION.tar.gz"
MANYLINUX__SDL2__FOLDER="SDL2-$MANYLINUX__SDL2__VERSION"

# manylinux SDL2_image
MANYLINUX__SDL2_IMAGE__VERSION="2.8.0"
MANYLINUX__SDL2_IMAGE__URL="https://github.com/libsdl-org/SDL_image/releases/download/release-$MANYLINUX__SDL2_IMAGE__VERSION/SDL2_image-$MANYLINUX__SDL2_IMAGE__VERSION.tar.gz"
MANYLINUX__SDL2_IMAGE__FOLDER="SDL2_image-$MANYLINUX__SDL2_IMAGE__VERSION"

# manylinux SDL2_mixer
MANYLINUX__SDL2_MIXER__VERSION="2.6.3"
MANYLINUX__SDL2_MIXER__URL="https://github.com/libsdl-org/SDL_mixer/releases/download/release-$MANYLINUX__SDL2_MIXER__VERSION/SDL2_mixer-$MANYLINUX__SDL2_MIXER__VERSION.tar.gz"
MANYLINUX__SDL2_MIXER__FOLDER="SDL2_mixer-$MANYLINUX__SDL2_MIXER__VERSION"

# manylinux SDL2_ttf
MANYLINUX__SDL2_TTF__VERSION="2.20.2"
MANYLINUX__SDL2_TTF__URL="https://github.com/libsdl-org/SDL_ttf/releases/download/release-$MANYLINUX__SDL2_TTF__VERSION/SDL2_ttf-$MANYLINUX__SDL2_TTF__VERSION.tar.gz"
MANYLINUX__SDL2_TTF__FOLDER="SDL2_ttf-$MANYLINUX__SDL2_TTF__VERSION"
# manylinux SDL3
MANYLINUX__SDL3__VERSION="3.1.1"
MANYLINUX__SDL3__URL="https://github.com/libsdl-org/SDL/releases/download/prerelease-$MANYLINUX__SDL3__VERSION/SDL3-$MANYLINUX__SDL3__VERSION.tar.xz"
MANYLINUX__SDL3__FOLDER="SDL3-$MANYLINUX__SDL3__VERSION"

# manylinux SDL3_image
# MANYLINUX__SDL2_IMAGE__VERSION="2.8.0"
# MANYLINUX__SDL2_IMAGE__URL="https://github.com/libsdl-org/SDL_image/releases/download/release-$MANYLINUX__SDL2_IMAGE__VERSION/SDL2_image-$MANYLINUX__SDL2_IMAGE__VERSION.tar.gz"
# MANYLINUX__SDL2_IMAGE__FOLDER="SDL2_image-$MANYLINUX__SDL2_IMAGE__VERSION"
MANYLINUX__SDL3_IMAGE__URL="https://github.com/libsdl-org/SDL_image/archive/refs/heads/main.tar.gz"
MANYLINUX__SDL3_IMAGE__FOLDER="SDL_image-main"

# manylinux SDL3_mixer
# MANYLINUX__SDL2_MIXER__VERSION="2.6.3"
# MANYLINUX__SDL2_MIXER__URL="https://github.com/libsdl-org/SDL_mixer/releases/download/release-$MANYLINUX__SDL2_MIXER__VERSION/SDL2_mixer-$MANYLINUX__SDL2_MIXER__VERSION.tar.gz"
# MANYLINUX__SDL2_MIXER__FOLDER="SDL2_mixer-$MANYLINUX__SDL2_MIXER__VERSION"
MANYLINUX__SDL3_MIXER__URL="https://github.com/libsdl-org/SDL_mixer/archive/refs/heads/main.tar.gz"
MANYLINUX__SDL3_MIXER__FOLDER="SDL_mixer-main"

# manylinux SDL3_ttf
# MANYLINUX__SDL2_TTF__VERSION="2.20.2"
# MANYLINUX__SDL2_TTF__URL="https://github.com/libsdl-org/SDL_ttf/releases/download/release-$MANYLINUX__SDL2_TTF__VERSION/SDL2_ttf-$MANYLINUX__SDL2_TTF__VERSION.tar.gz"
# MANYLINUX__SDL2_TTF__FOLDER="SDL2_ttf-$MANYLINUX__SDL2_TTF__VERSION"
MANYLINUX__SDL3_TTF__URL="https://github.com/libsdl-org/SDL_ttf/archive/refs/heads/main.tar.gz"
MANYLINUX__SDL3_TTF__FOLDER="SDL_ttf-main"

# manylinux libpng
MANYLINUX__LIBPNG__VERSION="1.6.40"
Expand All @@ -36,21 +42,21 @@ mkdir kivy-dependencies
echo "Downloading dependencies..."
mkdir kivy-dependencies/download
pushd kivy-dependencies/download
curl -L $MANYLINUX__SDL2__URL -o "${MANYLINUX__SDL2__FOLDER}.tar.gz"
curl -L $MANYLINUX__SDL2_IMAGE__URL -o "${MANYLINUX__SDL2_IMAGE__FOLDER}.tar.gz"
curl -L $MANYLINUX__SDL2_MIXER__URL -o "${MANYLINUX__SDL2_MIXER__FOLDER}.tar.gz"
curl -L $MANYLINUX__SDL2_TTF__URL -o "${MANYLINUX__SDL2_TTF__FOLDER}.tar.gz"
curl -L $MANYLINUX__SDL3__URL -o "${MANYLINUX__SDL3__FOLDER}.tar.xz"
curl -L $MANYLINUX__SDL3_IMAGE__URL -o "${MANYLINUX__SDL3_IMAGE__FOLDER}.tar.gz"
curl -L $MANYLINUX__SDL3_MIXER__URL -o "${MANYLINUX__SDL3_MIXER__FOLDER}.tar.gz"
curl -L $MANYLINUX__SDL3_TTF__URL -o "${MANYLINUX__SDL3_TTF__FOLDER}.tar.gz"
curl -L $MANYLINUX__LIBPNG__URL -o "${MANYLINUX__LIBPNG__FOLDER}.tar.gz"
popd

# Extract the dependencies into build folder
echo "Extracting dependencies..."
mkdir kivy-dependencies/build
pushd kivy-dependencies/build
tar -xzf ../download/${MANYLINUX__SDL2__FOLDER}.tar.gz
tar -xzf ../download/${MANYLINUX__SDL2_IMAGE__FOLDER}.tar.gz
tar -xzf ../download/${MANYLINUX__SDL2_MIXER__FOLDER}.tar.gz
tar -xzf ../download/${MANYLINUX__SDL2_TTF__FOLDER}.tar.gz
tar -xJf ../download/${MANYLINUX__SDL3__FOLDER}.tar.xz
tar -xzf ../download/${MANYLINUX__SDL3_IMAGE__FOLDER}.tar.gz
tar -xzf ../download/${MANYLINUX__SDL3_MIXER__FOLDER}.tar.gz
tar -xzf ../download/${MANYLINUX__SDL3_TTF__FOLDER}.tar.gz
tar -xzf ../download/${MANYLINUX__LIBPNG__FOLDER}.tar.gz
popd

Expand All @@ -61,8 +67,8 @@ mkdir kivy-dependencies/dist
# Build the dependencies
pushd kivy-dependencies/build

echo "-- Build SDL2"
pushd $MANYLINUX__SDL2__FOLDER
echo "-- Build SDL3"
pushd $MANYLINUX__SDL3__FOLDER
cmake -S . -B build \
-DCMAKE_INSTALL_PREFIX=../../dist \
-DCMAKE_BUILD_TYPE=Release \
Expand All @@ -84,22 +90,22 @@ pushd $MANYLINUX__LIBPNG__FOLDER
cmake --install build/ --config Release
popd

echo "-- Build SDL2_mixer"
pushd $MANYLINUX__SDL2_MIXER__FOLDER
echo "-- Build SDL3_mixer"
pushd $MANYLINUX__SDL3_MIXER__FOLDER
./external/download.sh;
cmake -B build -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=Release \
-DSDL2MIXER_MOD_MODPLUG=ON \
-DSDL2MIXER_MOD_MODPLUG_SHARED=OFF \
-DSDL3MIXER_MOD_MODPLUG=ON \
-DSDL3MIXER_MOD_MODPLUG_SHARED=OFF \
-DCMAKE_INSTALL_PREFIX=../../dist \
-DSDL2MIXER_VENDORED=ON \
-DSDL3MIXER_VENDORED=ON \
-GNinja
cmake --build build/ --config Release --parallel --verbose
cmake --install build/ --config Release
popd

echo "-- Build SDL2_image"
pushd $MANYLINUX__SDL2_IMAGE__FOLDER
echo "-- Build SDL3_image"
pushd $MANYLINUX__SDL3_IMAGE__FOLDER
./external/download.sh;
# If KIVY_CROSS_PLATFORM is set to rpi, we need to build libwebp version 1.2.4,
# as previous versions have issues with NEON and ARMv7.
Expand All @@ -110,26 +116,29 @@ pushd $MANYLINUX__SDL2_IMAGE__FOLDER
fi
cmake -B build -DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DSDL2IMAGE_TIF=ON \
-DSDL2IMAGE_WEBP=ON \
-DSDL2IMAGE_TIF_SHARED=OFF \
-DSDL2IMAGE_WEBP_SHARED=OFF \
-DSDL3IMAGE_TIF_VENDORED=ON \
-DSDL3IMAGE_WEBP_VENDORED=ON \
-DSDL3IMAGE_JPG_VENDORED=ON \
-DSDL3IMAGE_PNG_VENDORED=ON \
-DSDL3IMAGE_TIF_SHARED=OFF \
-DSDL3IMAGE_WEBP_SHARED=OFF \
-DCMAKE_INSTALL_PREFIX=../../dist \
-DSDL2IMAGE_VENDORED=ON -GNinja
-DSDL3IMAGE_VENDORED=OFF -GNinja
cmake --build build/ --config Release --parallel --verbose
cmake --install build/ --config Release
popd

echo "-- Build SDL2_ttf"
pushd $MANYLINUX__SDL2_TTF__FOLDER
echo "-- Build SDL3_ttf"
pushd $MANYLINUX__SDL3_TTF__FOLDER
./external/download.sh;
cmake -B build-cmake \
-DBUILD_SHARED_LIBS=ON \
-DSDL2TTF_HARFBUZZ=ON \
-DSDL3TTF_HARFBUZZ=ON \
-DFT_DISABLE_PNG=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=../../dist \
-DSDL2TTF_VENDORED=ON -GNinja
-DSDL3TTF_VENDORED=ON -GNinja
cmake --build build-cmake --config Release --verbose
cmake --install build-cmake/ --config Release --verbose
popd
Expand Down

0 comments on commit ccdd97b

Please sign in to comment.