Download raw body.
New: sdl12-compat - SDL1 reimplentation layered on top of SDL2
New: sdl12-compat - SDL1 reimplentation layered on top of SDL2
New: sdl12-compat - SDL1 reimplentation layered on top of SDL2
På onsdag 19. august 2026 kl. 13:05, skrev Stuart Henderson <stu@spacehopper.org>:
> On 2026/08/19 10:20, yaydn@protonmail.com wrote:
> > For testing purposes, that would be removing the old devel/sdl folder,
> > putting this in devel/sdl as oppose to devel/sdl12-compat with a Makefile
> > something like this?
>
Thank you. This applied cleanly. Rebuilt mplayer, sdl-image, vlc with
this. Mplayer continues playing videos with this and ffmpeg-9.0.
Reinstalling vlc as part of arcan and plasma-desktop, the vlc bin from
ftp mirrors started and plays av1/vp9 videos in sway/xwayland just fine.
And the rebuilt vlc builds with this where it did not previously. Also
plays as well.
No changes other than bumped REVISION, except for sdl-image that has
changes to PLIST. Attached for convenience of review.
--
yaydn
>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/sdl/Makefile,v
> diff -u -p -r1.108 Makefile
> --- Makefile 21 Sep 2023 09:50:05 -0000 1.108
> +++ Makefile 19 Aug 2026 11:05:11 -0000
> @@ -1,79 +1,34 @@
> -COMMENT= cross-platform multimedia library
> +COMMENT = compatiblity layer SDL 1.2 on SDL2
>
> -VERSION= 1.2.15
> -DISTNAME= SDL-${VERSION}
> -PKGNAME= ${DISTNAME:L}
> -REVISION= 12
> -CATEGORIES= devel
> -MAINTAINER= Thomas Frohwein <thfr@openbsd.org>
> -SITES= ${HOMEPAGE}release/
> -
> -SHARED_LIBS= SDL 8.0
> -
> -HOMEPAGE= https://www.libsdl.org/
> -
> -# LGPLv2.1+
> -PERMIT_PACKAGE= Yes
> -
> -WANTLIB= iconv m pthread sndio usbhid
> -
> -LIB_DEPENDS= converters/libiconv
> -
> -AUTOCONF_VERSION= 2.61
> -BUILD_DEPENDS+= ${MODGNU_AUTOCONF_DEPENDS}
> -
> -.if ${MACHINE_ARCH} == "i386"
> -BUILD_DEPENDS+= devel/nasm
> -.endif
> -
> -FLAVORS= aa no_x11
> -FLAVOR?=
> -
> -USE_GMAKE= Yes
> -SEPARATE_BUILD= Yes
> -CONFIGURE_STYLE= gnu
> -MODGNU_CONFIG_GUESS_DIRS= ${WRKSRC} ${WRKSRC}/test
> -CONFIGURE_ARGS+= --disable-alsa \
> - --disable-arts \
> - --disable-esd \
> - --disable-oss \
> - --disable-pulseaudio
> -CONFIGURE_ENV+= CPPFLAGS="-I${LOCALBASE}/include" \
> - LDFLAGS="-L${LOCALBASE}/lib"
> -
> -# in case devel/usb is installed, don't pick it up.
> -CONFIGURE_ENV+= ac_cv_lib_usb_hid_init=no \
> - ac_cv_header_usb_h=no
> -
> -.if ${FLAVOR:Maa}
> -WANTLIB+= aa
> -LIB_DEPENDS+= graphics/aalib
> -CONFIGURE_ARGS+= --enable-video-aalib
> -.endif
> -
> -.if ${FLAVOR:Mno_x11}
> -CONFIGURE_ARGS+= --without-x \
> - --disable-video-x11
> -.else
> -#
> -# X11/Xext/Xrender/Xrandr are dlopen'd by SDL
> -#
> -WANTLIB+= X11 Xau Xdmcp Xext Xrandr Xrender xcb
> -.endif
> -
> -NO_TEST= Yes
> -
> -# The assembly code contains AltiVec instructions, whose support is not
> -# properly detected at runtime. Fix SIGILLs on macppc G3s, while keeping
> -# it for powerpc64.
> -.if ${MACHINE_ARCH} == "powerpc"
> -CONFIGURE_ARGS+= --enable-altivec=no
> -.endif
> +V = 1.2.76
> +
> +DISTNAME = sdl12-compat-${V}
> +PKGNAME = sdl-${V}
> +
> +SHARED_LIBS += SDL 8.1
> +
> +CATEGORIES = devel
> +
> +HOMEPAGE = https://github.com/libsdl-org/sdl12-compat
> +
> +MAINTAINER = Thomas Frohwein <thfr@openbsd.org>
> +
> +# zlib
> +PERMIT_PACKAGE = Yes
> +
> +# SDL2 is dlopen(3)'d
> +WANTLIB += SDL2
> +
> +SITES = https://github.com/libsdl-org/sdl12-compat/releases/download/release-${V}/
> +
> +MODULES = devel/cmake
> +
> +BUILD_DEPENDS = converters/libiconv
> +LIB_DEPENDS = devel/sdl2
> +
> +CFLAGS += -I${X11BASE}/include -I${LOCALBASE}/include
>
> pre-configure:
> - @mkdir -p ${WRKSRC}/src/audio/sndio
> - @cp ${FILESDIR}/SDL_sndioaudio.{c,h} ${WRKSRC}/src/audio/sndio
> - @cd ${WRKSRC} && AUTOCONF_VERSION=${AUTOCONF_VERSION} PATH=${PORTPATH} \
> - ./autogen.sh
> + ${SUBST_CMD} ${WRKSRC}/CMakeLists.txt
>
> .include <bsd.port.mk>
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/devel/sdl/distinfo,v
> diff -u -p -r1.19 distinfo
> --- distinfo 18 Jan 2015 03:13:47 -0000 1.19
> +++ distinfo 19 Aug 2026 11:05:11 -0000
> @@ -1,2 +1,2 @@
> -SHA256 (SDL-1.2.15.tar.gz) = 1tMWp5Pl40gVXw3ZO5eXmJM/uYqh7evMEIgp1kdKrQA=
> -SIZE (SDL-1.2.15.tar.gz) = 3920622
> +SHA256 (sdl12-compat-1.2.76.tar.gz) = poR3AJwkvG6HYyax6N0L7ewrDDesvdvd+QrLpI+6Szg=
> +SIZE (sdl12-compat-1.2.76.tar.gz) = 487319
> Index: files/SDL_sndioaudio.c
> ===================================================================
> RCS file: files/SDL_sndioaudio.c
> diff -N files/SDL_sndioaudio.c
> --- files/SDL_sndioaudio.c 19 Dec 2013 09:24:18 -0000 1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,243 +0,0 @@
> -/*
> - * Copyright (c) 2008 Jacob Meuser <jakemsr@sdf.lonestar.org>
> - *
> - * Permission to use, copy, modify, and distribute this software for any
> - * purpose with or without fee is hereby granted, provided that the above
> - * copyright notice and this permission notice appear in all copies.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> - */
> -
> -#include "SDL_config.h"
> -
> -/* Allow access to a raw mixing buffer */
> -
> -#ifdef HAVE_SIGNAL_H
> -#include <signal.h>
> -#endif
> -#include <unistd.h>
> -
> -#include "SDL_timer.h"
> -#include "SDL_audio.h"
> -#include "../SDL_audiomem.h"
> -#include "../SDL_audio_c.h"
> -#include "../SDL_audiodev_c.h"
> -#include "SDL_sndioaudio.h"
> -
> -/* The tag name used by sndio audio */
> -#define SNDIO_DRIVER_NAME "sndio"
> -
> -/* Audio driver functions */
> -static int SNDIO_OpenAudio(_THIS, SDL_AudioSpec *spec);
> -static void SNDIO_WaitAudio(_THIS);
> -static void SNDIO_PlayAudio(_THIS);
> -static Uint8 *SNDIO_GetAudioBuf(_THIS);
> -static void SNDIO_CloseAudio(_THIS);
> -
> -/* Audio driver bootstrap functions */
> -
> -static int Audio_Available(void)
> -{
> - struct sio_hdl *this_hdl;
> - int available = 0;
> -
> - if ( (this_hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0)) != NULL ) {
> - sio_close(this_hdl);
> - available = 1;
> - }
> -
> - return available;
> -}
> -
> -static void Audio_DeleteDevice(SDL_AudioDevice *device)
> -{
> - SDL_free(device->hidden);
> - SDL_free(device);
> -}
> -
> -static SDL_AudioDevice *Audio_CreateDevice(int devindex)
> -{
> - SDL_AudioDevice *this;
> -
> - /* Initialize all variables that we clean on shutdown */
> - this = (SDL_AudioDevice *)SDL_malloc(sizeof(SDL_AudioDevice));
> - if ( this ) {
> - SDL_memset(this, 0, (sizeof *this));
> - this->hidden = (struct SDL_PrivateAudioData *)
> - SDL_malloc((sizeof *this->hidden));
> - }
> - if ( (this == NULL) || (this->hidden == NULL) ) {
> - SDL_OutOfMemory();
> - if ( this ) {
> - SDL_free(this);
> - }
> - return(0);
> - }
> - SDL_memset(this->hidden, 0, (sizeof *this->hidden));
> -
> - /* Set the function pointers */
> - this->OpenAudio = SNDIO_OpenAudio;
> - this->WaitAudio = SNDIO_WaitAudio;
> - this->PlayAudio = SNDIO_PlayAudio;
> - this->GetAudioBuf = SNDIO_GetAudioBuf;
> - this->CloseAudio = SNDIO_CloseAudio;
> -
> - this->free = Audio_DeleteDevice;
> -
> - hdl = NULL;
> -
> - return this;
> -}
> -
> -AudioBootStrap SNDIO_bootstrap = {
> - SNDIO_DRIVER_NAME, "sndio",
> - Audio_Available, Audio_CreateDevice
> -};
> -
> -
> -
> -/* This function waits until it is possible to write a full sound buffer */
> -static void SNDIO_WaitAudio(_THIS)
> -{
> - /* nothing, we're using the blocking api */
> -}
> -
> -static void SNDIO_PlayAudio(_THIS)
> -{
> - int written;
> -
> - /* Write the audio data */
> - written = sio_write(hdl, mixbuf, mixlen);
> -
> - /* If we couldn't write, assume fatal error for now */
> - if ( written == 0 ) {
> - this->enabled = 0;
> - }
> -#ifdef DEBUG_AUDIO
> - fprintf(stderr, "Wrote %d bytes of audio data\n", written);
> -#endif
> -}
> -
> -static Uint8 *SNDIO_GetAudioBuf(_THIS)
> -{
> - return(mixbuf);
> -}
> -
> -static void SNDIO_CloseAudio(_THIS)
> -{
> - if ( mixbuf != NULL ) {
> - SDL_FreeAudioMem(mixbuf);
> - mixbuf = NULL;
> - }
> - if ( hdl != NULL ) {
> - sio_close(hdl);
> - hdl = NULL;
> - }
> -}
> -
> -static int SNDIO_OpenAudio(_THIS, SDL_AudioSpec *spec)
> -{
> - struct sio_par par;
> -
> - mixbuf = NULL;
> -
> - if ((hdl = sio_open(NULL, SIO_PLAY, 0)) == NULL) {
> - SDL_SetError("sio_open() failed");
> - return(-1);
> - }
> -
> - sio_initpar(&par);
> -
> - switch (spec->format) {
> - case AUDIO_S16LSB:
> - par.bits = 16;
> - par.sig = 1;
> - par.le = 1;
> - break;
> - case AUDIO_S16MSB:
> - par.bits = 16;
> - par.sig = 1;
> - par.le = 0;
> - break;
> - case AUDIO_S8:
> - par.bits = 8;
> - par.sig = 1;
> - break;
> - case AUDIO_U16LSB:
> - par.bits = 16;
> - par.sig = 0;
> - par.le = 1;
> - break;
> - case AUDIO_U16MSB:
> - par.bits = 16;
> - par.sig = 0;
> - par.le = 0;
> - break;
> - case AUDIO_U8:
> - par.bits = 8;
> - par.sig = 0;
> - break;
> - default:
> - SDL_SetError("SNDIO unknown format");
> - return(-1);
> - }
> -
> - par.rate = spec->freq;
> - par.pchan = spec->channels;
> - par.round = spec->samples;
> - par.appbufsz = par.round * 2;
> -
> - if (sio_setpar(hdl, &par) == 0) {
> - SDL_SetError("sio_setpar() failed");
> - return(-1);
> - }
> -
> - if (sio_getpar(hdl, &par) == 0) {
> - SDL_SetError("sio_getpar() failed");
> - return(-1);
> - }
> -
> - if (par.bits == 16) {
> - if (par.sig && par.le) {
> - spec->format = AUDIO_S16LSB;
> - } else if (par.sig && !par.le) {
> - spec->format = AUDIO_S16MSB;
> - } else if (!par.sig && par.le) {
> - spec->format = AUDIO_U16LSB;
> - } else
> - spec->format = AUDIO_U16MSB;
> - } else if (par.bits == 8) {
> - spec->format = par.sig ? AUDIO_S8 : AUDIO_U8;
> - } else {
> - SDL_SetError("SNDIO couldn't configure a suitable format");
> - return(-1);
> - }
> -
> - spec->freq = par.rate;
> - spec->channels = par.pchan;
> - spec->samples = par.round;
> -
> - SDL_CalculateAudioSpec(spec);
> -
> - /* Allocate mixing buffer */
> - mixlen = spec->size;
> - mixbuf = (Uint8 *)SDL_AllocAudioMem(mixlen);
> - if ( mixbuf == NULL ) {
> - return(-1);
> - }
> - SDL_memset(mixbuf, spec->silence, spec->size);
> -
> - if ( sio_start(hdl) == 0 ) {
> - SDL_SetError("sio_start() failed");
> - return(-1);
> - }
> -
> - /* We're ready to rock and roll. :-) */
> - return(0);
> -}
> Index: files/SDL_sndioaudio.h
> ===================================================================
> RCS file: files/SDL_sndioaudio.h
> diff -N files/SDL_sndioaudio.h
> --- files/SDL_sndioaudio.h 15 Dec 2013 01:57:55 -0000 1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,50 +0,0 @@
> -/*
> - * Copyright (c) 2008 Jacob Meuser <jakemsr@sdf.lonestar.org>
> - *
> - * Permission to use, copy, modify, and distribute this software for any
> - * purpose with or without fee is hereby granted, provided that the above
> - * copyright notice and this permission notice appear in all copies.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> - */
> -
> -#include "SDL_config.h"
> -
> -#ifndef _SDL_sndioaudio_h
> -#define _SDL_sndioaudio_h
> -
> -#include <sndio.h>
> -
> -#include "../SDL_sysaudio.h"
> -
> -/* Hidden "this" pointer for the video functions */
> -#define _THIS SDL_AudioDevice *this
> -
> -struct SDL_PrivateAudioData {
> - /* The stream descriptor for the audio device */
> - struct sio_hdl *hdl;
> -
> - /* The parent process id, to detect when application quits */
> - pid_t parent;
> -
> - /* Raw mixing buffer */
> - Uint8 *mixbuf;
> - int mixlen;
> -
> -};
> -
> -/* Old variable names */
> -#define stream (this->hidden->stream)
> -#define parent (this->hidden->parent)
> -#define mixbuf (this->hidden->mixbuf)
> -#define mixlen (this->hidden->mixlen)
> -#define hdl (this->hidden->hdl)
> -
> -#endif /* _SDL_sndioaudio_h */
> -
> Index: patches/patch-CMakeLists_txt
> ===================================================================
> RCS file: patches/patch-CMakeLists_txt
> diff -N patches/patch-CMakeLists_txt
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-CMakeLists_txt 19 Aug 2026 11:05:11 -0000
> @@ -0,0 +1,44 @@
> +Index: CMakeLists.txt
> +--- CMakeLists.txt.orig
> ++++ CMakeLists.txt
> +@@ -93,6 +93,11 @@ if(APPLE)
> + set_target_properties(SDL PROPERTIES
> + OUTPUT_NAME "SDL-1.2.0"
> + )
> ++elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
> ++ set_target_properties(SDL PROPERTIES
> ++ VERSION "${PROJECT_VERSION}"
> ++ OUTPUT_NAME "SDL"
> ++ )
> + elseif(UNIX AND NOT ANDROID)
> + set_target_properties(SDL PROPERTIES
> + VERSION "${PROJECT_VERSION}"
> +@@ -194,9 +199,17 @@ if(SDL12DEVEL)
> + set(SDL_STATIC_LIBS "")
> + set(SDL_RLD_FLAGS "") # !!! FIXME: this forces rpath, which we might want?
> + else() # unix
> +- set(SDL_CFLAGS "-D_GNU_SOURCE=1 -D_REENTRANT")
> ++ if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
> ++ set(SDL_CFLAGS "-D_GNU_SOURCE=1 -D_REENTRANT -I${LOCALBASE}/include -I${X11BASE}/include -DXTHREADS")
> ++ else()
> ++ set(SDL_CFLAGS "-D_GNU_SOURCE=1 -D_REENTRANT")
> ++ endif()
> + set(SDL_RLD_FLAGS "") # !!! FIXME: this forces rpath, which we might want?
> +- set(SDL_LIBS "-lSDL")
> ++ if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
> ++ set(SDL_LIBS "-lSDL -pthread -L${X11BASE}/lib")
> ++ else()
> ++ set(SDL_LIBS "-lSDL")
> ++ endif()
> + set(SDL_STATIC_LIBS "")
> + foreach(lib ${CMAKE_DL_LIBS})
> + set(SDL_STATIC_LIBS "-l${lib}")
> +@@ -235,7 +248,7 @@ if(SDL12DEVEL)
> +
> + set(SOEXT ${CMAKE_SHARED_LIBRARY_SUFFIX})
> + get_target_property(SONAME SDL OUTPUT_NAME)
> +- if(UNIX AND NOT ANDROID)
> ++ if(UNIX AND NOT ANDROID AND NOT (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD"))
> + install(CODE "
> + execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
> + \"lib${SONAME}${SOPOSTFIX}${SOEXT}\" \"libSDL${SOPOSTFIX}${SOEXT}\"
> Index: patches/patch-Makefile_in
> ===================================================================
> RCS file: patches/patch-Makefile_in
> diff -N patches/patch-Makefile_in
> --- patches/patch-Makefile_in 11 Mar 2022 18:53:23 -0000 1.5
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,11 +0,0 @@
> ---- Makefile.in.orig Thu Jan 19 01:30:05 2012
> -+++ Makefile.in Wed Feb 22 13:39:54 2012
> -@@ -49,7 +49,7 @@ LT_AGE = @LT_AGE@
> - LT_CURRENT = @LT_CURRENT@
> - LT_RELEASE = @LT_RELEASE@
> - LT_REVISION = @LT_REVISION@
> --LT_LDFLAGS = -no-undefined -rpath $(DESTDIR)$(libdir) -release $(LT_RELEASE) -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
> -+LT_LDFLAGS = -no-undefined -rpath $(DESTDIR)$(libdir) -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
> -
> - all: $(srcdir)/configure Makefile $(objects) $(objects)/$(TARGET) $(objects)/$(SDLMAIN_TARGET)
> -
> Index: patches/patch-configure_in
> ===================================================================
> RCS file: patches/patch-configure_in
> diff -N patches/patch-configure_in
> --- patches/patch-configure_in 11 Mar 2022 18:53:23 -0000 1.31
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,88 +0,0 @@
> ---- configure.in.orig Thu Jan 19 01:30:05 2012
> -+++ configure.in Thu Dec 5 14:41:54 2013
> -@@ -486,6 +486,35 @@ AC_HELP_STRING([--enable-esd-shared], [dynamically loa
> - fi
> - }
> -
> -+dnl Find Sndio
> -+CheckSndio()
> -+{
> -+ AC_ARG_ENABLE(sndio,
> -+AC_HELP_STRING([--enable-sndio], [support the sndio audio API [[default=yes]]]),
> -+ , enable_sndioaudio=yes)
> -+ if test x$enable_audio = xyes -a x$enable_sndioaudio = xyes; then
> -+ AC_CHECK_HEADER(sndio.h, have_sndio_hdr=yes)
> -+ AC_CHECK_LIB(sndio, sio_open, have_sndio_lib=yes)
> -+
> -+ AC_MSG_CHECKING(for sndio support)
> -+ have_sndio=no
> -+
> -+ if test x$have_sndio_hdr = xyes -a x$have_sndio_lib = xyes; then
> -+ have_sndio=yes
> -+ SNDIO_LIBS="-lsndio"
> -+ fi
> -+
> -+ AC_MSG_RESULT($have_sndio)
> -+
> -+ if test x$have_sndio = xyes; then
> -+ AC_DEFINE(SDL_AUDIO_DRIVER_SNDIO)
> -+ SOURCES="$SOURCES $srcdir/src/audio/sndio/*.c"
> -+ EXTRA_LDFLAGS="$EXTRA_LDFLAGS $SNDIO_LIBS"
> -+ have_audio=yes
> -+ fi
> -+ fi
> -+}
> -+
> - dnl Find PulseAudio
> - CheckPulseAudio()
> - {
> -@@ -860,8 +889,8 @@ CheckVisibilityHidden()
> - save_CFLAGS="$CFLAGS"
> - CFLAGS="$save_CFLAGS $visibility_CFLAGS -Werror"
> - AC_TRY_COMPILE([
> -- #if !defined(__GNUC__) || __GNUC__ < 4
> -- #error SDL only uses visibility attributes in GCC 4 or newer
> -+ #if !defined(__GNUC__) || __GNUC__ < 3
> -+ #error SDL only uses visibility attributes in GCC 3 or newer
> - #endif
> - ],[
> - ],[
> -@@ -1005,6 +1034,12 @@ AC_HELP_STRING([--enable-x11-shared], [dynamically loa
> - x11_lib='libX11.so'
> - x11ext_lib='libXext.so'
> - ;;
> -+ *-*-openbsd*)
> -+ x11_lib='libX11.so'
> -+ x11ext_lib='libXext.so'
> -+ xrender_lib='libXrender.so'
> -+ xrandr_lib='libXrandr.so'
> -+ ;;
> - *)
> - x11_lib=[`find_lib "libX11.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
> - x11ext_lib=[`find_lib "libXext.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
> -@@ -1034,7 +1069,7 @@ AC_HELP_STRING([--enable-x11-shared], [dynamically loa
> - fi
> - if test x$x11_symbols_private != xyes && \
> - test x$enable_x11_shared = xyes; then
> -- AC_MSG_WARN([You must have gcc4 (-fvisibility=hidden) for dynamic X11 loading])
> -+ AC_MSG_WARN([You must have gcc3 (-fvisibility=hidden) for dynamic X11 loading])
> - enable_x11_shared=no
> - fi
> -
> -@@ -2358,6 +2393,7 @@ case "$host" in
> - CheckALSA
> - CheckARTSC
> - CheckESD
> -+ CheckSndio
> - CheckPulseAudio
> - CheckNAS
> - CheckX11
> -@@ -2390,7 +2426,7 @@ case "$host" in
> - SOURCES="$SOURCES $srcdir/src/audio/sun/*.c"
> - have_audio=yes
> - ;;
> -- netbsd|openbsd)
> -+ netbsd)
> - AC_DEFINE(SDL_AUDIO_DRIVER_BSD)
> - SOURCES="$SOURCES $srcdir/src/audio/bsd/*.c"
> - have_audio=yes
> Index: patches/patch-include_SDL_config_h_in
> ===================================================================
> RCS file: patches/patch-include_SDL_config_h_in
> diff -N patches/patch-include_SDL_config_h_in
> --- patches/patch-include_SDL_config_h_in 11 Mar 2022 18:53:23 -0000 1.4
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,10 +0,0 @@
> ---- include/SDL_config.h.in.orig Thu Jan 19 01:30:05 2012
> -+++ include/SDL_config.h.in Wed Feb 22 13:39:54 2012
> -@@ -184,6 +184,7 @@
> - #undef SDL_AUDIO_DRIVER_QNXNTO
> - #undef SDL_AUDIO_DRIVER_SNDMGR
> - #undef SDL_AUDIO_DRIVER_SUNAUDIO
> -+#undef SDL_AUDIO_DRIVER_SNDIO
> - #undef SDL_AUDIO_DRIVER_WAVEOUT
> -
> - /* Enable various cdrom drivers */
> Index: patches/patch-include_SDL_opengl_h
> ===================================================================
> RCS file: patches/patch-include_SDL_opengl_h
> diff -N patches/patch-include_SDL_opengl_h
> --- patches/patch-include_SDL_opengl_h 11 Mar 2022 18:53:23 -0000 1.4
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,28 +0,0 @@
> -Index: include/SDL_opengl.h
> ---- include/SDL_opengl.h.orig
> -+++ include/SDL_opengl.h
> -@@ -35,7 +35,12 @@
> - #endif
> - #ifndef NO_SDL_GLEXT
> - #define __glext_h_ /* Don't let gl.h include glext.h */
> -+#define __gl_glext_h_ /* Don't let gl.h include glext.h */
> -+#ifndef GL_ARB_shader_objects
> -+#define GL_ARB_shader_objects 0
> -+#define undef_GL_ARB
> - #endif
> -+#endif
> - #if defined(__MACOSX__)
> - #include <OpenGL/gl.h> /* Header File For The OpenGL Library */
> - #include <OpenGL/glu.h> /* Header File For The GLU Library */
> -@@ -48,6 +53,11 @@
> - #endif
> - #ifndef NO_SDL_GLEXT
> - #undef __glext_h_
> -+#undef __gl_glext_h_
> -+#ifdef undef_GL_ARB
> -+#undef GL_ARB_shader_objects
> -+#undef undef_GL_ARB
> -+#endif
> - #endif
> -
> - /** @name GLext.h
> Index: patches/patch-include_begin_code_h
> ===================================================================
> RCS file: patches/patch-include_begin_code_h
> diff -N patches/patch-include_begin_code_h
> --- patches/patch-include_begin_code_h 11 Mar 2022 18:53:23 -0000 1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,11 +0,0 @@
> ---- include/begin_code.h.orig Tue Jan 15 19:09:01 2013
> -+++ include/begin_code.h Tue Jan 15 19:09:45 2013
> -@@ -77,7 +77,7 @@
> - # define DECLSPEC
> - # endif
> - # else
> --# if defined(__GNUC__) && __GNUC__ >= 4
> -+# if defined(__GNUC__) && __GNUC__ >= 3
> - # define DECLSPEC __attribute__ ((visibility("default")))
> - # else
> - # define DECLSPEC
> Index: patches/patch-sdl-config_in
> ===================================================================
> RCS file: patches/patch-sdl-config_in
> diff -N patches/patch-sdl-config_in
> --- patches/patch-sdl-config_in 11 Mar 2022 18:53:23 -0000 1.7
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,15 +0,0 @@
> ---- sdl-config.in.orig Sun Dec 30 20:48:39 2007
> -+++ sdl-config.in Tue Mar 18 20:33:17 2008
> -@@ -42,10 +42,10 @@ while test $# -gt 0; do
> - echo @SDL_VERSION@
> - ;;
> - --cflags)
> -- echo -I@includedir@/SDL @SDL_CFLAGS@
> -+ echo -I@includedir@ -I@includedir@/SDL @SDL_CFLAGS@ @X_CFLAGS@
> - ;;
> - @ENABLE_SHARED_TRUE@ --libs)
> --@ENABLE_SHARED_TRUE@ echo -L@libdir@ @SDL_RLD_FLAGS@ @SDL_LIBS@
> -+@ENABLE_SHARED_TRUE@ echo -L@libdir@ @SDL_RLD_FLAGS@ @SDL_LIBS@ @X_LIBS@
> - @ENABLE_SHARED_TRUE@ ;;
> - @ENABLE_STATIC_TRUE@@ENABLE_SHARED_TRUE@ --static-libs)
> - @ENABLE_STATIC_TRUE@@ENABLE_SHARED_FALSE@ --libs|--static-libs)
> Index: patches/patch-sdl_pc_in
> ===================================================================
> RCS file: patches/patch-sdl_pc_in
> diff -N patches/patch-sdl_pc_in
> --- patches/patch-sdl_pc_in 11 Mar 2022 18:53:23 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,11 +0,0 @@
> ---- sdl.pc.in.orig Mon Oct 12 19:07:20 2009
> -+++ sdl.pc.in Sat Nov 7 13:30:12 2009
> -@@ -10,6 +10,5 @@ Description: Simple DirectMedia Layer is a cross-platf
> - Version: @SDL_VERSION@
> - Requires:
> - Conflicts:
> --Libs: -L${libdir} @SDL_RLD_FLAGS@ @SDL_LIBS@
> --Libs.private: @SDL_STATIC_LIBS@
> --Cflags: -I${includedir}/SDL @SDL_CFLAGS@
> -+Libs: -L${libdir} @SDL_RLD_FLAGS@ @SDL_LIBS@ @X_LIBS@
> -+Cflags: -I${includedir}/SDL @SDL_CFLAGS@ @X_CFLAGS@
> Index: patches/patch-src_SDL12_compat_c
> ===================================================================
> RCS file: patches/patch-src_SDL12_compat_c
> diff -N patches/patch-src_SDL12_compat_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-src_SDL12_compat_c 19 Aug 2026 11:05:11 -0000
> @@ -0,0 +1,16 @@
> +Index: src/SDL12_compat.c
> +--- src/SDL12_compat.c.orig
> ++++ src/SDL12_compat.c
> +@@ -1341,7 +1341,11 @@ static char loaderror[256];
> + }
> + #elif defined(__unix__)
> + #include <dlfcn.h>
> +- #define SDL20_LIBNAME "libSDL2-2.0.so.0"
> ++ #ifdef __OpenBSD__
> ++ #define SDL20_LIBNAME "libSDL2.so"
> ++ #else
> ++ #define SDL20_LIBNAME "libSDL2-2.0.so.0"
> ++ #endif
> + #define SDL20_REQUIRED_VER SDL_VERSIONNUM(2,0,7)
> + static void *Loaded_SDL20 = NULL;
> + #define LoadSDL20Library() ((Loaded_SDL20 = dlopen(SDL20_LIBNAME, RTLD_LOCAL|RTLD_NOW)) != NULL)
> Index: patches/patch-src_audio_SDL_audio_c
> ===================================================================
> RCS file: patches/patch-src_audio_SDL_audio_c
> diff -N patches/patch-src_audio_SDL_audio_c
> --- patches/patch-src_audio_SDL_audio_c 11 Mar 2022 18:53:23 -0000 1.18
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,18 +0,0 @@
> ---- src/audio/SDL_audio.c.orig Thu Jan 19 01:30:06 2012
> -+++ src/audio/SDL_audio.c Wed Feb 22 13:41:58 2012
> -@@ -36,11 +36,15 @@
> -
> - /* Available audio drivers */
> - static AudioBootStrap *bootstrap[] = {
> -+
> - #if SDL_AUDIO_DRIVER_PULSE
> - &PULSE_bootstrap,
> - #endif
> - #if SDL_AUDIO_DRIVER_ALSA
> - &ALSA_bootstrap,
> -+#endif
> -+#if SDL_AUDIO_DRIVER_SNDIO
> -+ &SNDIO_bootstrap,
> - #endif
> - #if SDL_AUDIO_DRIVER_BSD
> - &BSD_AUDIO_bootstrap,
> Index: patches/patch-src_audio_SDL_sysaudio_h
> ===================================================================
> RCS file: patches/patch-src_audio_SDL_sysaudio_h
> diff -N patches/patch-src_audio_SDL_sysaudio_h
> --- patches/patch-src_audio_SDL_sysaudio_h 11 Mar 2022 18:53:23 -0000 1.7
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,12 +0,0 @@
> ---- src/audio/SDL_sysaudio.h.orig Thu Jan 19 01:30:06 2012
> -+++ src/audio/SDL_sysaudio.h Wed Feb 22 13:39:54 2012
> -@@ -105,6 +105,9 @@ typedef struct AudioBootStrap {
> - #if SDL_AUDIO_DRIVER_BSD
> - extern AudioBootStrap BSD_AUDIO_bootstrap;
> - #endif
> -+#if SDL_AUDIO_DRIVER_SNDIO
> -+extern AudioBootStrap SNDIO_bootstrap;
> -+#endif
> - #if SDL_AUDIO_DRIVER_PULSE
> - extern AudioBootStrap PULSE_bootstrap;
> - #endif
> Index: patches/patch-src_cpuinfo_SDL_cpuinfo_c
> ===================================================================
> RCS file: patches/patch-src_cpuinfo_SDL_cpuinfo_c
> diff -N patches/patch-src_cpuinfo_SDL_cpuinfo_c
> --- patches/patch-src_cpuinfo_SDL_cpuinfo_c 11 Mar 2022 18:53:23 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,37 +0,0 @@
> ---- src/cpuinfo/SDL_cpuinfo.c.orig Thu Jan 19 01:30:06 2012
> -+++ src/cpuinfo/SDL_cpuinfo.c Fri Feb 24 16:08:00 2012
> -@@ -28,6 +28,10 @@
> -
> - #if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))
> - #include <sys/sysctl.h> /* For AltiVec check */
> -+#elif defined(__OpenBSD__) && defined(__powerpc__)
> -+#include <sys/param.h>
> -+#include <sys/sysctl.h> /* For AltiVec check */
> -+#include <machine/cpu.h>
> - #elif SDL_ALTIVEC_BLITTERS && HAVE_SETJMP
> - #include <signal.h>
> - #include <setjmp.h>
> -@@ -42,7 +46,7 @@
> - #define CPU_HAS_SSE2 0x00000080
> - #define CPU_HAS_ALTIVEC 0x00000100
> -
> --#if SDL_ALTIVEC_BLITTERS && HAVE_SETJMP && !__MACOSX__
> -+#if SDL_ALTIVEC_BLITTERS && HAVE_SETJMP && !__MACOSX__ && !__OpenBSD__
> - /* This is the brute force way of detecting instruction sets...
> - the idea is borrowed from the libmpeg2 library - thanks!
> - */
> -@@ -359,8 +363,12 @@ static __inline__ int CPU_haveSSE2(void)
> - static __inline__ int CPU_haveAltiVec(void)
> - {
> - volatile int altivec = 0;
> --#if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))
> -- int selectors[2] = { CTL_HW, HW_VECTORUNIT };
> -+#if (defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))) || (defined(__OpenBSD__) && defined(__powerpc__))
> -+# ifdef __OpenBSD__
> -+ int selectors[2] = { CTL_MACHDEP, CPU_ALTIVEC };
> -+# else
> -+ int selectors[2] = { CTL_HW, HW_VECTORUNIT };
> -+# endif
> - int hasVectorUnit = 0;
> - size_t length = sizeof(hasVectorUnit);
> - int error = sysctl(selectors, 2, &hasVectorUnit, &length, NULL, 0);
> Index: patches/patch-src_joystick_bsd_SDL_sysjoystick_c
> ===================================================================
> RCS file: patches/patch-src_joystick_bsd_SDL_sysjoystick_c
> diff -N patches/patch-src_joystick_bsd_SDL_sysjoystick_c
> --- patches/patch-src_joystick_bsd_SDL_sysjoystick_c 11 Mar 2022 18:53:23 -0000 1.13
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,24 +0,0 @@
> -It is easy to exhaust uhid devices in this day and age.
> -use ujoy(4) device nodes
> -
> -Index: src/joystick/bsd/SDL_sysjoystick.c
> ---- src/joystick/bsd/SDL_sysjoystick.c.orig
> -+++ src/joystick/bsd/SDL_sysjoystick.c
> -@@ -77,7 +77,7 @@
> - #include "../SDL_sysjoystick.h"
> - #include "../SDL_joystick_c.h"
> -
> --#define MAX_UHID_JOYS 4
> -+#define MAX_UHID_JOYS 16
> - #define MAX_JOY_JOYS 2
> - #define MAX_JOYS (MAX_UHID_JOYS + MAX_JOY_JOYS)
> -
> -@@ -170,7 +170,7 @@ SDL_SYS_JoystickInit(void)
> - for (i = 0; i < MAX_UHID_JOYS; i++) {
> - SDL_Joystick nj;
> -
> -- SDL_snprintf(s, SDL_arraysize(s), "/dev/uhid%d", i);
> -+ SDL_snprintf(s, SDL_arraysize(s), "/dev/ujoy/%d", i);
> -
> - nj.index = SDL_numjoysticks;
> - joynames[nj.index] = strdup(s);
> Index: patches/patch-src_thread_pthread_SDL_syssem_c
> ===================================================================
> RCS file: patches/patch-src_thread_pthread_SDL_syssem_c
> diff -N patches/patch-src_thread_pthread_SDL_syssem_c
> --- patches/patch-src_thread_pthread_SDL_syssem_c 11 Mar 2022 18:53:23 -0000 1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,22 +0,0 @@
> -Fixed bug 1426 - SDL_SemWaitTimeout returns -1 and sets error instead of
> -SDL_MUTEX_TIMEDOUT on time out
> -
> ---- src/thread/pthread/SDL_syssem.c.orig Fri Mar 2 04:42:50 2012
> -+++ src/thread/pthread/SDL_syssem.c Fri Mar 2 04:44:23 2012
> -@@ -144,8 +144,14 @@ int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout)
> - retval = sem_timedwait(&sem->sem, &ts_timeout);
> - while (retval == -1 && errno == EINTR);
> -
> -- if (retval == -1)
> -- SDL_SetError(strerror(errno));
> -+ if (retval == -1) {
> -+ if (errno == ETIMEDOUT) {
> -+ retval = SDL_MUTEX_TIMEDOUT;
> -+ }
> -+ else {
> -+ SDL_SetError(strerror(errno));
> -+ }
> -+ }
> - #else
> - end = SDL_GetTicks() + timeout;
> - while ((retval = SDL_SemTryWait(sem)) == SDL_MUTEX_TIMEDOUT) {
> Index: patches/patch-src_video_SDL_blit_N_c
> ===================================================================
> RCS file: patches/patch-src_video_SDL_blit_N_c
> diff -N patches/patch-src_video_SDL_blit_N_c
> --- patches/patch-src_video_SDL_blit_N_c 11 Mar 2022 18:53:23 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,59 +0,0 @@
> -- Fixed bug 1424 - Handling of alpha channel in Altivec accelerated blit functions
> -- Use fast path for RGB 565 -> 32-bit XRGB 8888
> -
> ---- src/video/SDL_blit_N.c.orig Thu Jan 19 01:30:06 2012
> -+++ src/video/SDL_blit_N.c Thu Oct 25 21:57:48 2012
> -@@ -689,6 +689,8 @@ static void ConvertAltivec32to32_noprefetch(SDL_BlitIn
> - while ((UNALIGNED_PTR(dst)) && (width)) {
> - bits = *(src++);
> - RGBA_FROM_8888(bits, srcfmt, r, g, b, a);
> -+ if(!srcfmt->Amask)
> -+ a = srcfmt->alpha;
> - *(dst++) = MAKE8888(dstfmt, r, g, b, a);
> - width--;
> - }
> -@@ -716,6 +718,8 @@ static void ConvertAltivec32to32_noprefetch(SDL_BlitIn
> - while (extrawidth) {
> - bits = *(src++); /* max 7 pixels, don't bother with prefetch. */
> - RGBA_FROM_8888(bits, srcfmt, r, g, b, a);
> -+ if(!srcfmt->Amask)
> -+ a = srcfmt->alpha;
> - *(dst++) = MAKE8888(dstfmt, r, g, b, a);
> - extrawidth--;
> - }
> -@@ -769,6 +773,8 @@ static void ConvertAltivec32to32_prefetch(SDL_BlitInfo
> - vec_dstst(dst+scalar_dst_lead, DST_CTRL(2,32,1024), DST_CHAN_DEST);
> - bits = *(src++);
> - RGBA_FROM_8888(bits, srcfmt, r, g, b, a);
> -+ if(!srcfmt->Amask)
> -+ a = srcfmt->alpha;
> - *(dst++) = MAKE8888(dstfmt, r, g, b, a);
> - width--;
> - }
> -@@ -798,6 +804,8 @@ static void ConvertAltivec32to32_prefetch(SDL_BlitInfo
> - while (extrawidth) {
> - bits = *(src++); /* max 7 pixels, don't bother with prefetch. */
> - RGBA_FROM_8888(bits, srcfmt, r, g, b, a);
> -+ if(!srcfmt->Amask)
> -+ a = srcfmt->alpha;
> - *(dst++) = MAKE8888(dstfmt, r, g, b, a);
> - extrawidth--;
> - }
> -@@ -2299,13 +2307,13 @@ static const struct blit_table normal_blit_2[] = {
> - 2, NULL, Blit_RGB555_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA },
> - #endif
> - { 0x0000F800,0x000007E0,0x0000001F, 4, 0x00FF0000,0x0000FF00,0x000000FF,
> -- 0, NULL, Blit_RGB565_ARGB8888, SET_ALPHA },
> -+ 0, NULL, Blit_RGB565_ARGB8888, NO_ALPHA | COPY_ALPHA | SET_ALPHA },
> - { 0x0000F800,0x000007E0,0x0000001F, 4, 0x000000FF,0x0000FF00,0x00FF0000,
> -- 0, NULL, Blit_RGB565_ABGR8888, SET_ALPHA },
> -+ 0, NULL, Blit_RGB565_ABGR8888, NO_ALPHA | COPY_ALPHA | SET_ALPHA },
> - { 0x0000F800,0x000007E0,0x0000001F, 4, 0xFF000000,0x00FF0000,0x0000FF00,
> -- 0, NULL, Blit_RGB565_RGBA8888, SET_ALPHA },
> -+ 0, NULL, Blit_RGB565_RGBA8888, NO_ALPHA | COPY_ALPHA | SET_ALPHA },
> - { 0x0000F800,0x000007E0,0x0000001F, 4, 0x0000FF00,0x00FF0000,0xFF000000,
> -- 0, NULL, Blit_RGB565_BGRA8888, SET_ALPHA },
> -+ 0, NULL, Blit_RGB565_BGRA8888, NO_ALPHA | COPY_ALPHA | SET_ALPHA },
> -
> - /* Default for 16-bit RGB source, used if no other blitter matches */
> - { 0,0,0, 0, 0,0,0, 0, NULL, BlitNtoN, 0 }
> Index: patches/patch-src_video_x11_SDL_x11events_c
> ===================================================================
> RCS file: patches/patch-src_video_x11_SDL_x11events_c
> diff -N patches/patch-src_video_x11_SDL_x11events_c
> --- patches/patch-src_video_x11_SDL_x11events_c 11 Mar 2022 18:53:23 -0000 1.4
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,28 +0,0 @@
> -Fixed bug 1390 - X11_KeyToUnicode
> -
> ---- src/video/x11/SDL_x11events.c.orig Wed Feb 22 19:31:47 2012
> -+++ src/video/x11/SDL_x11events.c Wed Feb 22 19:33:27 2012
> -@@ -1246,14 +1246,23 @@ static void get_modifier_masks(Display *display)
> - * sequences (dead accents, compose key sequences) will not work since the
> - * state has been irrevocably lost.
> - */
> -+extern DECLSPEC Uint16 SDLCALL X11_KeyToUnicode(SDLKey, SDLMod);
> -+
> - Uint16 X11_KeyToUnicode(SDLKey keysym, SDLMod modifiers)
> - {
> -+ static int warning = 0;
> - struct SDL_VideoDevice *this = current_video;
> - char keybuf[32];
> - int i;
> - KeySym xsym = 0;
> - XKeyEvent xkey;
> - Uint16 unicode;
> -+
> -+ if ( warning ) {
> -+ warning = 0;
> -+ fprintf(stderr, "WARNING: Application is using X11_KeyToUnicode().\n");
> -+ fprintf(stderr, "This is not an official SDL function, please report this as a bug.\n");
> -+ }
> -
> - if ( !this || !SDL_Display ) {
> - return 0;
> Index: patches/patch-src_video_x11_SDL_x11gl_c
> ===================================================================
> RCS file: patches/patch-src_video_x11_SDL_x11gl_c
> diff -N patches/patch-src_video_x11_SDL_x11gl_c
> --- patches/patch-src_video_x11_SDL_x11gl_c 11 Mar 2022 18:53:23 -0000 1.15
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,11 +0,0 @@
> ---- src/video/x11/SDL_x11gl.c.orig Thu Jan 19 01:30:06 2012
> -+++ src/video/x11/SDL_x11gl.c Wed Feb 22 13:39:54 2012
> -@@ -34,7 +34,7 @@
> - #elif defined(__QNXNTO__)
> - #define DEFAULT_OPENGL "libGL.so.3"
> - #elif defined(__OpenBSD__)
> --#define DEFAULT_OPENGL "libGL.so.4.0"
> -+#define DEFAULT_OPENGL "libGL.so"
> - #else
> - #define DEFAULT_OPENGL "libGL.so.1"
> - #endif
> Index: patches/patch-src_video_x11_SDL_x11sym_h
> ===================================================================
> RCS file: patches/patch-src_video_x11_SDL_x11sym_h
> diff -N patches/patch-src_video_x11_SDL_x11sym_h
> --- patches/patch-src_video_x11_SDL_x11sym_h 11 Mar 2022 18:53:23 -0000 1.4
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,11 +0,0 @@
> ---- src/video/x11/SDL_x11sym.h.orig Tue Apr 30 00:39:44 2013
> -+++ src/video/x11/SDL_x11sym.h Tue Apr 30 00:40:30 2013
> -@@ -165,7 +165,7 @@ SDL_X11_SYM(Bool,XShmQueryExtension,(Display* a),(a),r
> - */
> - #ifdef LONG64
> - SDL_X11_MODULE(IO_32BIT)
> --SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
> -+SDL_X11_SYM(int,_XData32,(Display *dpy,register const long *data,unsigned len),(dpy,data,len),return)
> - SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)
> - #endif
> -
> Index: patches/patch-src_video_x11_SDL_x11video_c
> ===================================================================
> RCS file: patches/patch-src_video_x11_SDL_x11video_c
> diff -N patches/patch-src_video_x11_SDL_x11video_c
> --- patches/patch-src_video_x11_SDL_x11video_c 11 Mar 2022 18:53:23 -0000 1.4
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,29 +0,0 @@
> -Fixed bug 1427 - integer passed to XChangeProperty() causes crash
> -
> ---- src/video/x11/SDL_x11video.c.orig Wed Feb 22 19:34:11 2012
> -+++ src/video/x11/SDL_x11video.c Wed Feb 22 19:36:25 2012
> -@@ -418,16 +418,21 @@ static void create_aux_windows(_THIS)
> - }
> -
> - {
> -- pid_t pid = getpid();
> -+ union align_pid {
> -+ pid_t pid;
> -+ long dummy;
> -+ } a_pid;
> - char hostname[256];
> -
> -- if (pid > 0 && gethostname(hostname, sizeof(hostname)) > -1) {
> -+ a_pid.pid = getpid();
> -+
> -+ if (a_pid.pid > 0 && gethostname(hostname, sizeof(hostname)) > -1) {
> - Atom _NET_WM_PID = XInternAtom(SDL_Display, "_NET_WM_PID", False);
> - Atom WM_CLIENT_MACHINE = XInternAtom(SDL_Display, "WM_CLIENT_MACHINE", False);
> -
> - hostname[sizeof(hostname)-1] = '\0';
> - XChangeProperty(SDL_Display, WMwindow, _NET_WM_PID, XA_CARDINAL, 32,
> -- PropModeReplace, (unsigned char *)&pid, 1);
> -+ PropModeReplace, (unsigned char *)&a_pid.pid, 1);
> - XChangeProperty(SDL_Display, WMwindow, WM_CLIENT_MACHINE, XA_STRING, 8,
> - PropModeReplace, (unsigned char *)hostname, SDL_strlen(hostname));
> - }
> Index: patches/patch-src_video_x11_SDL_x11wm_c
> ===================================================================
> RCS file: patches/patch-src_video_x11_SDL_x11wm_c
> diff -N patches/patch-src_video_x11_SDL_x11wm_c
> --- patches/patch-src_video_x11_SDL_x11wm_c 11 Mar 2022 18:53:23 -0000 1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,94 +0,0 @@
> -Use _NET_WM_ICON if possible for X11's SDL_WM_SetIcon() implementation.
> -
> ---- src/video/x11/SDL_x11wm.c.orig Thu Oct 25 21:58:52 2012
> -+++ src/video/x11/SDL_x11wm.c Thu Oct 25 22:01:06 2012
> -@@ -43,6 +43,7 @@ static Uint8 reverse_byte(Uint8 x)
> -
> - void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
> - {
> -+ Atom _NET_WM_ICON = XInternAtom(SDL_Display, "_NET_WM_ICON", False);
> - SDL_Surface *sicon;
> - XWMHints *wmhints;
> - XImage *icon_image;
> -@@ -59,6 +60,81 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask
> - int masksize;
> -
> - SDL_Lock_EventThread();
> -+
> -+ if (_NET_WM_ICON) { /* better interface for modern systems. */
> -+ SDL_PixelFormat format;
> -+ SDL_Surface *surface;
> -+ int propsize;
> -+ long *propdata;
> -+
> -+ /* Convert the icon to ARGB for modern window managers */
> -+ SDL_memset(&format, 0, sizeof (format));
> -+ format.BitsPerPixel = 32;
> -+ format.BytesPerPixel = 4;
> -+ #if SDL_BYTEORDER == SDL_BIG_ENDIAN
> -+ format.Rshift = 8;
> -+ format.Gshift = 16;
> -+ format.Bshift = 24;
> -+ format.Ashift = 0;
> -+ #else
> -+ format.Rshift = 16;
> -+ format.Gshift = 8;
> -+ format.Bshift = 0;
> -+ format.Ashift = 24;
> -+ #endif
> -+ format.Rmask = 0xFF << format.Rshift;
> -+ format.Gmask = 0xFF << format.Gshift;
> -+ format.Bmask = 0xFF << format.Bshift;
> -+ format.Amask = 0xFF << format.Ashift;
> -+ format.alpha = SDL_ALPHA_OPAQUE;
> -+
> -+ surface = SDL_ConvertSurface(icon, &format, 0);
> -+ if (!surface) {
> -+ return;
> -+ }
> -+
> -+ /* Set the _NET_WM_ICON property */
> -+ propsize = 2 + (icon->w * icon->h);
> -+ propdata = SDL_malloc(propsize * sizeof(long));
> -+ if (propdata) {
> -+ const Uint32 alpha = format.Amask;
> -+ int x, y;
> -+ Uint32 *src;
> -+ long *dst;
> -+
> -+ propdata[0] = icon->w;
> -+ propdata[1] = icon->h;
> -+ dst = &propdata[2];
> -+
> -+ size_t maskidx = 0;
> -+ for (y = 0; y < icon->h; ++y) {
> -+ src = (Uint32*)((Uint8*)surface->pixels + y * surface->pitch);
> -+ for (x = 0; x < icon->w; ++x) {
> -+ const Uint32 pixel = *(src++);
> -+ if (mask[maskidx / 8] & (1<<(7-(maskidx % 8)))) {
> -+ *dst++ = pixel | alpha;
> -+ } else {
> -+ *dst++ = pixel & ~alpha;
> -+ }
> -+ maskidx++;
> -+ }
> -+ }
> -+
> -+ XChangeProperty(SDL_Display, WMwindow, _NET_WM_ICON, XA_CARDINAL,
> -+ 32, PropModeReplace, (unsigned char *) propdata,
> -+ propsize);
> -+ }
> -+
> -+ SDL_FreeSurface(surface);
> -+ SDL_free(propdata);
> -+
> -+ XFlush(SDL_Display);
> -+ SDL_Unlock_EventThread();
> -+
> -+ return;
> -+ }
> -+
> -+ /* Do it the old way... */
> -
> - /* The icon must use the default visual, depth and colormap of the
> - screen, so it might need a conversion */
> Index: pkg/DESCR
> ===================================================================
> RCS file: /cvs/ports/devel/sdl/pkg/DESCR,v
> diff -u -p -r1.11 DESCR
> --- pkg/DESCR 2 Mar 2012 09:10:38 -0000 1.11
> +++ pkg/DESCR 19 Aug 2026 11:05:11 -0000
> @@ -1,11 +1,3 @@
> -Simple DirectMedia Layer is a cross-platform multimedia
> -library designed to provide fast access to the graphics
> -framebuffer and audio device. It is used by MPEG playback
> -software, emulators, and many popular games.
> -
> -Packages can be built with additional FLAVORs:
> -
> - aa: SDL built with ASCII art support.
> - This FLAVOR requires the aalib package.
> -
> - no_x11: Built without X11.
> +sdl12-compat is a compatibility layer; it provides a binary and source
> +compatible API for programs written against SDL 1.2, but it uses SDL 2.0
> +behind the scenes.
> Index: pkg/PLIST
> ===================================================================
> RCS file: /cvs/ports/devel/sdl/pkg/PLIST,v
> diff -u -p -r1.19 PLIST
> --- pkg/PLIST 11 Mar 2022 18:53:23 -0000 1.19
> +++ pkg/PLIST 19 Aug 2026 11:05:11 -0000
> @@ -10,6 +10,7 @@ include/SDL/SDL_audio.h
> include/SDL/SDL_byteorder.h
> include/SDL/SDL_cdrom.h
> include/SDL/SDL_config.h
> +include/SDL/SDL_copying.h
> include/SDL/SDL_cpuinfo.h
> include/SDL/SDL_endian.h
> include/SDL/SDL_error.h
> @@ -36,185 +37,7 @@ include/SDL/SDL_version.h
> include/SDL/SDL_video.h
> include/SDL/begin_code.h
> include/SDL/close_code.h
> -@static-lib lib/libSDL.a
> -lib/libSDL.la
> @lib lib/libSDL.so.${LIBSDL_VERSION}
> @static-lib lib/libSDLmain.a
> -lib/libSDLmain.la
> -lib/pkgconfig/sdl.pc
> -@man man/man3/SDLKey.3
> -@man man/man3/SDL_ActiveEvent.3
> -@man man/man3/SDL_AddTimer.3
> -@man man/man3/SDL_AudioCVT.3
> -@man man/man3/SDL_AudioSpec.3
> -@man man/man3/SDL_BlitSurface.3
> -@man man/man3/SDL_BuildAudioCVT.3
> -@man man/man3/SDL_CD.3
> -@man man/man3/SDL_CDClose.3
> -@man man/man3/SDL_CDEject.3
> -@man man/man3/SDL_CDName.3
> -@man man/man3/SDL_CDNumDrives.3
> -@man man/man3/SDL_CDOpen.3
> -@man man/man3/SDL_CDPause.3
> -@man man/man3/SDL_CDPlay.3
> -@man man/man3/SDL_CDPlayTracks.3
> -@man man/man3/SDL_CDResume.3
> -@man man/man3/SDL_CDStatus.3
> -@man man/man3/SDL_CDStop.3
> -@man man/man3/SDL_CDtrack.3
> -@man man/man3/SDL_CloseAudio.3
> -@man man/man3/SDL_Color.3
> -@man man/man3/SDL_CondBroadcast.3
> -@man man/man3/SDL_CondSignal.3
> -@man man/man3/SDL_CondWait.3
> -@man man/man3/SDL_CondWaitTimeout.3
> -@man man/man3/SDL_ConvertAudio.3
> -@man man/man3/SDL_ConvertSurface.3
> -@man man/man3/SDL_CreateCond.3
> -@man man/man3/SDL_CreateCursor.3
> -@man man/man3/SDL_CreateMutex.3
> -@man man/man3/SDL_CreateRGBSurface.3
> -@man man/man3/SDL_CreateRGBSurfaceFrom.3
> -@man man/man3/SDL_CreateSemaphore.3
> -@man man/man3/SDL_CreateThread.3
> -@man man/man3/SDL_CreateYUVOverlay.3
> -@man man/man3/SDL_Delay.3
> -@man man/man3/SDL_DestroyCond.3
> -@man man/man3/SDL_DestroyMutex.3
> -@man man/man3/SDL_DestroySemaphore.3
> -@man man/man3/SDL_DisplayFormat.3
> -@man man/man3/SDL_DisplayFormatAlpha.3
> -@man man/man3/SDL_DisplayYUVOverlay.3
> -@man man/man3/SDL_EnableKeyRepeat.3
> -@man man/man3/SDL_EnableUNICODE.3
> -@man man/man3/SDL_Event.3
> -@man man/man3/SDL_EventState.3
> -@man man/man3/SDL_ExposeEvent.3
> -@man man/man3/SDL_FillRect.3
> -@man man/man3/SDL_Flip.3
> -@man man/man3/SDL_FreeCursor.3
> -@man man/man3/SDL_FreeSurface.3
> -@man man/man3/SDL_FreeWAV.3
> -@man man/man3/SDL_FreeYUVOverlay.3
> -@man man/man3/SDL_GL_GetAttribute.3
> -@man man/man3/SDL_GL_GetProcAddress.3
> -@man man/man3/SDL_GL_LoadLibrary.3
> -@man man/man3/SDL_GL_SetAttribute.3
> -@man man/man3/SDL_GL_SwapBuffers.3
> -@man man/man3/SDL_GLattr.3
> -@man man/man3/SDL_GetAppState.3
> -@man man/man3/SDL_GetAudioStatus.3
> -@man man/man3/SDL_GetClipRect.3
> -@man man/man3/SDL_GetCursor.3
> -@man man/man3/SDL_GetError.3
> -@man man/man3/SDL_GetEventFilter.3
> -@man man/man3/SDL_GetGamma.3
> -@man man/man3/SDL_GetGammaRamp.3
> -@man man/man3/SDL_GetKeyName.3
> -@man man/man3/SDL_GetKeyState.3
> -@man man/man3/SDL_GetModState.3
> -@man man/man3/SDL_GetMouseState.3
> -@man man/man3/SDL_GetRGB.3
> -@man man/man3/SDL_GetRGBA.3
> -@man man/man3/SDL_GetRelativeMouseState.3
> -@man man/man3/SDL_GetThreadID.3
> -@man man/man3/SDL_GetTicks.3
> -@man man/man3/SDL_GetVideoInfo.3
> -@man man/man3/SDL_GetVideoSurface.3
> -@man man/man3/SDL_Init.3
> -@man man/man3/SDL_InitSubSystem.3
> -@man man/man3/SDL_JoyAxisEvent.3
> -@man man/man3/SDL_JoyBallEvent.3
> -@man man/man3/SDL_JoyButtonEvent.3
> -@man man/man3/SDL_JoyHatEvent.3
> -@man man/man3/SDL_JoystickClose.3
> -@man man/man3/SDL_JoystickEventState.3
> -@man man/man3/SDL_JoystickGetAxis.3
> -@man man/man3/SDL_JoystickGetBall.3
> -@man man/man3/SDL_JoystickGetButton.3
> -@man man/man3/SDL_JoystickGetHat.3
> -@man man/man3/SDL_JoystickIndex.3
> -@man man/man3/SDL_JoystickName.3
> -@man man/man3/SDL_JoystickNumAxes.3
> -@man man/man3/SDL_JoystickNumBalls.3
> -@man man/man3/SDL_JoystickNumButtons.3
> -@man man/man3/SDL_JoystickNumHats.3
> -@man man/man3/SDL_JoystickOpen.3
> -@man man/man3/SDL_JoystickOpened.3
> -@man man/man3/SDL_JoystickUpdate.3
> -@man man/man3/SDL_KeyboardEvent.3
> -@man man/man3/SDL_KillThread.3
> -@man man/man3/SDL_ListModes.3
> -@man man/man3/SDL_LoadBMP.3
> -@man man/man3/SDL_LoadWAV.3
> -@man man/man3/SDL_LockAudio.3
> -@man man/man3/SDL_LockSurface.3
> -@man man/man3/SDL_LockYUVOverlay.3
> -@man man/man3/SDL_MapRGB.3
> -@man man/man3/SDL_MapRGBA.3
> -@man man/man3/SDL_MixAudio.3
> -@man man/man3/SDL_MouseButtonEvent.3
> -@man man/man3/SDL_MouseMotionEvent.3
> -@man man/man3/SDL_NumJoysticks.3
> -@man man/man3/SDL_OpenAudio.3
> -@man man/man3/SDL_Overlay.3
> -@man man/man3/SDL_Palette.3
> -@man man/man3/SDL_PauseAudio.3
> -@man man/man3/SDL_PeepEvents.3
> -@man man/man3/SDL_PixelFormat.3
> -@man man/man3/SDL_PollEvent.3
> -@man man/man3/SDL_PumpEvents.3
> -@man man/man3/SDL_PushEvent.3
> -@man man/man3/SDL_Quit.3
> -@man man/man3/SDL_QuitEvent.3
> -@man man/man3/SDL_QuitSubSystem.3
> -@man man/man3/SDL_RWFromFile.3
> -@man man/man3/SDL_Rect.3
> -@man man/man3/SDL_RemoveTimer.3
> -@man man/man3/SDL_ResizeEvent.3
> -@man man/man3/SDL_SaveBMP.3
> -@man man/man3/SDL_SemPost.3
> -@man man/man3/SDL_SemTryWait.3
> -@man man/man3/SDL_SemValue.3
> -@man man/man3/SDL_SemWait.3
> -@man man/man3/SDL_SemWaitTimeout.3
> -@man man/man3/SDL_SetAlpha.3
> -@man man/man3/SDL_SetClipRect.3
> -@man man/man3/SDL_SetColorKey.3
> -@man man/man3/SDL_SetColors.3
> -@man man/man3/SDL_SetCursor.3
> -@man man/man3/SDL_SetEventFilter.3
> -@man man/man3/SDL_SetGamma.3
> -@man man/man3/SDL_SetGammaRamp.3
> -@man man/man3/SDL_SetModState.3
> -@man man/man3/SDL_SetPalette.3
> -@man man/man3/SDL_SetTimer.3
> -@man man/man3/SDL_SetVideoMode.3
> -@man man/man3/SDL_ShowCursor.3
> -@man man/man3/SDL_Surface.3
> -@man man/man3/SDL_SysWMEvent.3
> -@man man/man3/SDL_ThreadID.3
> -@man man/man3/SDL_UnlockAudio.3
> -@man man/man3/SDL_UnlockSurface.3
> -@man man/man3/SDL_UnlockYUVOverlay.3
> -@man man/man3/SDL_UpdateRect.3
> -@man man/man3/SDL_UpdateRects.3
> -@man man/man3/SDL_UserEvent.3
> -@man man/man3/SDL_VideoDriverName.3
> -@man man/man3/SDL_VideoInfo.3
> -@man man/man3/SDL_VideoModeOK.3
> -@man man/man3/SDL_WM_GetCaption.3
> -@man man/man3/SDL_WM_GrabInput.3
> -@man man/man3/SDL_WM_IconifyWindow.3
> -@man man/man3/SDL_WM_SetCaption.3
> -@man man/man3/SDL_WM_SetIcon.3
> -@man man/man3/SDL_WM_ToggleFullScreen.3
> -@man man/man3/SDL_WaitEvent.3
> -@man man/man3/SDL_WaitThread.3
> -@man man/man3/SDL_WarpMouse.3
> -@man man/man3/SDL_WasInit.3
> -@man man/man3/SDL_keysym.3
> -@man man/man3/SDL_mutexP.3
> -@man man/man3/SDL_mutexV.3
> -share/aclocal/
> +lib/pkgconfig/sdl12_compat.pc
> share/aclocal/sdl.m4
>
New: sdl12-compat - SDL1 reimplentation layered on top of SDL2
New: sdl12-compat - SDL1 reimplentation layered on top of SDL2
New: sdl12-compat - SDL1 reimplentation layered on top of SDL2