Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package fluidsynth for openSUSE:Factory 
checked in at 2026-02-27 17:02:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fluidsynth (Old)
 and      /work/SRC/openSUSE:Factory/.fluidsynth.new.29461 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fluidsynth"

Fri Feb 27 17:02:29 2026 rev:87 rq:1335003 version:2.5.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/fluidsynth/fluidsynth.changes    2026-02-07 
15:33:42.210063606 +0100
+++ /work/SRC/openSUSE:Factory/.fluidsynth.new.29461/fluidsynth.changes 
2026-02-27 17:04:40.687112132 +0100
@@ -1,0 +2,9 @@
+Tue Feb 24 19:14:21 UTC 2026 - Martin Hauke <[email protected]>
+
+- Update to version 2.5.3
+  * Several minor fixes for the CMake buildsystem (#1742).
+  * Several documentation updates (#1745, #1736).
+  * Fix a build issue when fluidsynth is consumed as part of a
+    bigger CMake project (#1752).
+
+-------------------------------------------------------------------

Old:
----
  fluidsynth-2.5.2.tar.gz

New:
----
  fluidsynth-2.5.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fluidsynth.spec ++++++
--- /var/tmp/diff_new_pack.L0Il3g/_old  2026-02-27 17:04:41.295137290 +0100
+++ /var/tmp/diff_new_pack.L0Il3g/_new  2026-02-27 17:04:41.295137290 +0100
@@ -20,7 +20,7 @@
 
 %define sover   3
 Name:           fluidsynth
-Version:        2.5.2
+Version:        2.5.3
 Release:        0
 Summary:        A Real-Time Software Synthesizer That Uses Soundfont(tm)
 License:        LGPL-2.1-or-later

++++++ fluidsynth-2.5.2.tar.gz -> fluidsynth-2.5.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/.azure/azure-pipelines-alpine.yml 
new/fluidsynth-2.5.3/.azure/azure-pipelines-alpine.yml
--- old/fluidsynth-2.5.2/.azure/azure-pipelines-alpine.yml      2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/.azure/azure-pipelines-alpine.yml      2026-02-21 
12:49:48.000000000 +0100
@@ -10,8 +10,7 @@
       - '.azure/azure-pipelines-vcpkg.yml'
       - '.azure/azure-pipelines-win.yml'
       - '.circleci/config.yml'
-      - '.github/workflows/linux.yml'
-      - '.github/workflows/sonarcloud.yml'
+      - '.github/workflows/*'
       - '.cirrus.yml'
       - 'README.md'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/.azure/azure-pipelines-android.yml 
new/fluidsynth-2.5.3/.azure/azure-pipelines-android.yml
--- old/fluidsynth-2.5.2/.azure/azure-pipelines-android.yml     2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/.azure/azure-pipelines-android.yml     2026-02-21 
12:49:48.000000000 +0100
@@ -10,8 +10,7 @@
       - '.azure/azure-pipelines-win.yml'
       - '.azure/Dockerfile.azure-alpine'
       - '.circleci/config.yml'
-      - '.github/workflows/linux.yml'
-      - '.github/workflows/sonarcloud.yml'
+      - '.github/workflows/*'
       - '.cirrus.yml'
       - 'README.md'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/.azure/azure-pipelines-mac.yml 
new/fluidsynth-2.5.3/.azure/azure-pipelines-mac.yml
--- old/fluidsynth-2.5.2/.azure/azure-pipelines-mac.yml 2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/.azure/azure-pipelines-mac.yml 2026-02-21 
12:49:48.000000000 +0100
@@ -11,8 +11,7 @@
       - '.azure/azure-pipelines-win.yml'
       - '.azure/Dockerfile.azure-alpine'
       - '.circleci/config.yml'
-      - '.github/workflows/linux.yml'
-      - '.github/workflows/sonarcloud.yml'
+      - '.github/workflows/*'
       - '.cirrus.yml'
       - 'README.md'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/.azure/azure-pipelines-vcpkg.yml 
new/fluidsynth-2.5.3/.azure/azure-pipelines-vcpkg.yml
--- old/fluidsynth-2.5.2/.azure/azure-pipelines-vcpkg.yml       2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/.azure/azure-pipelines-vcpkg.yml       2026-02-21 
12:49:48.000000000 +0100
@@ -11,8 +11,7 @@
       - '.azure/azure-pipelines-win.yml'
       - '.azure/Dockerfile.azure-alpine'
       - '.circleci/config.yml'
-      - '.github/workflows/linux.yml'
-      - '.github/workflows/sonarcloud.yml'
+      - '.github/workflows/*'
       - '.cirrus.yml'
       - 'README.md'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/.gitattributes 
new/fluidsynth-2.5.3/.gitattributes
--- old/fluidsynth-2.5.2/.gitattributes 1970-01-01 01:00:00.000000000 +0100
+++ new/fluidsynth-2.5.3/.gitattributes 2026-02-21 12:49:48.000000000 +0100
@@ -0,0 +1,7 @@
+# Ensure binary files are not modified by line ending conversion
+*.sf2 binary
+*.sf3 binary
+*.dls binary
+*.mid binary
+*.midi binary
+*.wav binary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/.github/workflows/solaris.yml 
new/fluidsynth-2.5.3/.github/workflows/solaris.yml
--- old/fluidsynth-2.5.2/.github/workflows/solaris.yml  2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/.github/workflows/solaris.yml  2026-02-21 
12:49:48.000000000 +0100
@@ -34,7 +34,7 @@
             submodules: true
 
         - name: Build & test
-          uses: vmactions/[email protected]
+          uses: vmactions/[email protected]
           with:
             envs: 'CFLAGS_SOLARIS_CC'
             usesh: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/.github/workflows/sonarcloud.yml 
new/fluidsynth-2.5.3/.github/workflows/sonarcloud.yml
--- old/fluidsynth-2.5.2/.github/workflows/sonarcloud.yml       2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/.github/workflows/sonarcloud.yml       2026-02-21 
12:49:48.000000000 +0100
@@ -4,6 +4,7 @@
   push:
     branches:
       - master
+      - release/**
     paths-ignore:
       - '.azure/**'
       - '.circleci/**'
@@ -25,7 +26,7 @@
 name: SonarCloud Workflow
 jobs:
   sonarcloud:
-    runs-on: ubuntu-22.04
+    runs-on: ubuntu-24.04
     steps:
     - uses: actions/checkout@v6
       with:
@@ -33,11 +34,6 @@
         fetch-depth: 0
         submodules: recursive
 
-    
-    - name: Add apt-get repositories
-      run: |
-        sudo add-apt-repository ppa:ubuntu-toolchain-r/test
-
     - name: Update apt
       run: sudo apt-get update -y
 
@@ -51,24 +47,14 @@
         cmake -E make_directory ${{github.workspace}}/build
         echo $PATH
 
-    - name: Get Sonar Build Wrapper
-      shell: bash
-      working-directory: ${{github.workspace}}/build
-      run: |
-        set -ex
-        wget https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip
-        unzip build-wrapper-linux-x86.zip
-        mv build-wrapper-linux-x86/* .
-      
+    - name: Install Build Wrapper
+      uses: SonarSource/sonarqube-scan-action/install-build-wrapper@v7
+
     - name: Configure CMake
       # Use a bash shell so we can use the same syntax for environment variable
       # access regardless of the host operating system
       shell: bash
-      working-directory: ${{github.workspace}}/build
-      run: cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -Werror=dev 
-Denable-portaudio=1 -Denable-ladspa=1 -Denable-coverage=1 -DNO_GUI=1 
$GITHUB_WORKSPACE
-      
-    - name: Install sonar-scanner and build-wrapper
-      uses: SonarSource/sonarcloud-github-c-cpp@v2
+      run: cmake -S . -B build -DCMAKE_BUILD_TYPE=$BUILD_TYPE -Werror=dev 
-Denable-portaudio=1 -Denable-ladspa=1 -Denable-coverage=1 -DNO_GUI=1 
$GITHUB_WORKSPACE
 
     - name: Build
       working-directory: ${{github.workspace}}/build
@@ -89,16 +75,12 @@
       run: |
        rm -rf ${{ github.workspace }}/sf2
        gcovr --version
-       gcovr --help
-       ls -la ${{ github.workspace }}
-       ls -la ${{ github.workspace }}/build
-       ls -la ${{ github.workspace }}/build/coverage
 
-    - name: Run sonar-scanner
+    - name: SonarQube Scan
+      uses: SonarSource/sonarqube-scan-action@v7
       env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
-      run: |
-          sonar-scanner \
-            
-Dsonar.cfamily.build-wrapper-output="${{github.workspace}}/build/${{ 
env.BUILD_WRAPPER_OUT_DIR }}" \
+      with:
+        args: >
+            -Dsonar.cfamily.build-wrapper-output=build/${{ 
env.BUILD_WRAPPER_OUT_DIR }}
             
-Dsonar.coverageReportPaths=${{github.workspace}}/build/coverage/sonarqube.report
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/.github/workflows/windows.yml 
new/fluidsynth-2.5.3/.github/workflows/windows.yml
--- old/fluidsynth-2.5.2/.github/workflows/windows.yml  2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/.github/workflows/windows.yml  2026-02-21 
12:49:48.000000000 +0100
@@ -24,6 +24,7 @@
   LIBSNDFILE_URL_X86: 
'https://github.com/libsndfile/libsndfile/releases/download/1.2.2/libsndfile-1.2.2-win32.zip'
   LIBSNDFILE_URL_X64: 
'https://github.com/libsndfile/libsndfile/releases/download/1.2.2/libsndfile-1.2.2-win64.zip'
   MINGW_URL_X64: 
'https://sourceforge.net/projects/mingw-w64/files/Toolchains%%20targetting%%20Win64/Personal%%20Builds/mingw-builds/8.1.0/threads-win32/sjlj/x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0.7z'
+  MINGW_URL_X86: 
'https://sourceforge.net/projects/mingw-w64/files/Toolchains%%20targetting%%20Win32/Personal%%20Builds/mingw-builds/8.1.0/threads-win32/sjlj/i686-8.1.0-release-win32-sjlj-rt_v6-rev0.7z'
   SDL3_URL: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-VC.zip'
 
 jobs:
@@ -118,7 +119,7 @@
         mkdir build && cd build || exit /b 1
         cmake -Werror=dev -A ${{ matrix.platform }} -T v143 ^
           -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}\${{ 
env.INSTALL_LOCATION }} ^
-          -Denable-readline=0 -Denable-floats=1 -Denable-jack=0 
-Denable-sdl2=0 ^
+          -Denable-readline=0 -Denable-floats=1 -Denable-jack=0 
-Denable-sdl3=0 ^
           -Dosal=${{ matrix.osal }} -Denable-libinstpatch=0 -Denable-dls=1 ^
           ${{ matrix.CMAKEFLAGS }} -DCMAKE_BUILD_TYPE=Release ^
           -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded ^
@@ -269,7 +270,7 @@
           -DCMAKE_VERBOSE_MAKEFILE=1 ${{ matrix.CMAKE_FLAGS }} ^
           -DNO_GUI=1 -Dwindows-version=0x0A00 -Denable-jack=0 ^
           -Denable-pulseaudio=0 -Denable-ladspa=0 -Denable-dbus=0 ^
-          -Denable-readline=0 -Denable-sdl2=0 -Denable-libinstpatch=0 .. || 
exit /b 1
+          -Denable-readline=0 -Denable-sdl3=0 -Denable-libinstpatch=0 .. || 
exit /b 1
 
     - name: Build
       shell: cmd
@@ -302,12 +303,32 @@
       fail-fast: false
       matrix:
         include:
-          - CMAKE_FLAGS: ""
+          - CMAKE_FLAGS: '-Denable-sdl3=0 -Denable-openmp=0 
-Denable-libsndfile=0'
+            artifactPrefix: "fluidsynth-mingw1"
+            platform: x86
+            sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz'
+            sdl3-subdir: 'i686-w64-mingw32'
+          - CMAKE_FLAGS: '-Denable-sdl3=0 -Denable-openmp=0 
-Denable-libsndfile=0 -DCMAKE_C_FLAGS="-mfpmath=387" 
-DCMAKE_CXX_FLAGS="-mfpmath=387"'
+            artifactPrefix: "fluidsynth-mingw2"
+            platform: x86
+            sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz'
+            sdl3-subdir: 'i686-w64-mingw32'
+          - CMAKE_FLAGS: '-Denable-sdl3=0 -Denable-openmp=0 
-Denable-libsndfile=0 -DCMAKE_RC_FLAGS="-F pe-i386" -DCMAKE_C_FLAGS="-m32 
-mfpmath=387" -DCMAKE_CXX_FLAGS="-m32 -mfpmath=387"'
+            artifactPrefix: "fluidsynth-mingw"
+            platform: x86
+            sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz'
+            sdl3-subdir: 'i686-w64-mingw32'
+          - CMAKE_FLAGS: '-Denable-sdl3=0 -Denable-openmp=0 
-Denable-libsndfile=0 -DCMAKE_RC_FLAGS="-F pe-i386" -DCMAKE_C_FLAGS="-m32 
-mfpmath=387 -ffloat-store" -DCMAKE_CXX_FLAGS="-m32 -mfpmath=387 -ffloat-store"'
+            artifactPrefix: "fluidsynth-mingw-ffloat-store"
+            platform: x86
+            sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz'
+            sdl3-subdir: 'i686-w64-mingw32'
+          - CMAKE_FLAGS: "-Denable-openmp=0"
             artifactPrefix: "fluidsynth-mingw"
             platform: x64
             sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz'
             sdl3-subdir: 'x86_64-w64-mingw32'
-          - CMAKE_FLAGS: '-DBUILD_SHARED_LIBS=0'
+          - CMAKE_FLAGS: '-DBUILD_SHARED_LIBS=0 -Denable-openmp=0'
             artifactPrefix: "fluidsynth-mingw-static"
             platform: x64
             sdl3-url: 
'https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz'
@@ -327,16 +348,25 @@
         @ECHO ON
         mkdir d:\deps || exit /b 1
         cd d:\deps || exit /b 1
-        if not "${{ env.GTK_BUNDLE_X64 }}"=="" (
-          curl -LfsS -o gtk-bundle-dev.zip "${{ env.GTK_BUNDLE_X64 }}" || exit 
/b 1
+        if "${{ matrix.platform }}"=="x86" (
+          set GTK_URL=${{ env.GTK_BUNDLE_X86 }}
+          set LIBSNDFILE_URL=${{ env.LIBSNDFILE_URL_X86 }}
+          set MINGW_URL=${{ env.MINGW_URL_X86 }}
+        ) else (
+          set GTK_URL=${{ env.GTK_BUNDLE_X64 }}
+          set LIBSNDFILE_URL=${{ env.LIBSNDFILE_URL_X64 }}
+          set MINGW_URL=${{ env.MINGW_URL_X64 }}
+        )
+        if not "%GTK_URL%"=="" (
+          curl -LfsS -o gtk-bundle-dev.zip "%GTK_URL%" || exit /b 1
           7z x -aos -- gtk-bundle-dev.zip > NUL || exit /b 1
         )
-        if not "${{ env.LIBSNDFILE_URL_X64 }}"=="" (
-          curl -LfsS -o libsndfile-dev.zip "${{ env.LIBSNDFILE_URL_X64 }}" || 
exit /b 1
+        if not "%LIBSNDFILE_URL%"=="" (
+          curl -LfsS -o libsndfile-dev.zip "%LIBSNDFILE_URL%" || exit /b 1
           7z x -aos -- libsndfile-dev.zip > NUL || exit /b 1
         )
-        if not "${{ env.MINGW_URL_X64 }}"=="" (
-          curl -LfsS -o mingw.zip "${{ env.MINGW_URL_X64 }}" || exit /b 1
+        if not "%MINGW_URL%"=="" (
+          curl -LfsS -o mingw.zip "%MINGW_URL%" || exit /b 1
           7z x -aos -- mingw.zip > NUL || exit /b 1
         )
         curl -LfsS -o sdl3.tar.gz "${{ matrix.sdl3-url }}" || exit /b 1
@@ -376,7 +406,7 @@
           -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}\${{ 
env.INSTALL_LOCATION }} ^
           ${{ matrix.CMAKE_FLAGS }} -Denable-readline=0 -Denable-floats=1 ^
           -Denable-jack=0 -Denable-pulseaudio=0 -Denable-ladspa=0 ^
-          -Denable-dbus=0 -Denable-sdl2=0 -DCMAKE_BUILD_TYPE=Release ^
+          -Denable-dbus=0 -DCMAKE_BUILD_TYPE=Release ^
           -DCMAKE_VERBOSE_MAKEFILE=1 -DNO_GUI=1 .. || exit /b 1
 
     - name: Build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/CMakeLists.txt 
new/fluidsynth-2.5.3/CMakeLists.txt
--- old/fluidsynth-2.5.2/CMakeLists.txt 2025-12-23 20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/CMakeLists.txt 2026-02-21 12:49:48.000000000 +0100
@@ -1,6 +1,6 @@
 # FluidSynth - A Software Synthesizer
 #
-# Copyright (C) 2003-2025 Peter Hanappe and others.
+# Copyright (C) 2003-2026 Peter Hanappe and others.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public License
@@ -47,7 +47,7 @@
 # FluidSynth package version
 set ( FLUIDSYNTH_VERSION_MAJOR 2 )
 set ( FLUIDSYNTH_VERSION_MINOR 5 )
-set ( FLUIDSYNTH_VERSION_MICRO 2 )
+set ( FLUIDSYNTH_VERSION_MICRO 3 )
 set ( VERSION 
"${FLUIDSYNTH_VERSION_MAJOR}.${FLUIDSYNTH_VERSION_MINOR}.${FLUIDSYNTH_VERSION_MICRO}"
 )
 set ( FLUIDSYNTH_VERSION ${VERSION} )
 
@@ -62,7 +62,7 @@
 # This is not exactly the same algorithm as the libtool one, but the results 
are the same.
 set ( LIB_VERSION_CURRENT 3 )
 set ( LIB_VERSION_AGE 5 )
-set ( LIB_VERSION_REVISION 1 )
+set ( LIB_VERSION_REVISION 2 )
 set ( LIB_VERSION_INFO
       "${LIB_VERSION_CURRENT}.${LIB_VERSION_AGE}.${LIB_VERSION_REVISION}" )
 
@@ -80,7 +80,7 @@
 option ( enable-aufile "compile support for sound file output" on )
 option ( BUILD_SHARED_LIBS "Build a shared object or DLL" on )
 option ( enable-dbus "compile DBUS support (if it is available)" on )
-option ( enable-ipv6  "enable IPv6 support at the cost of disabling IPv4" on )
+option ( enable-ipv6  "enable IPv6 support" on )
 option ( enable-jack "compile JACK support (if it is available)" on )
 option ( enable-ladspa "enable LADSPA effect units" on )
 option ( enable-libinstpatch "use libinstpatch (if available) to load DLS and 
GIG files" on )
@@ -113,9 +113,12 @@
 if ( CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS" )
     option ( enable-coreaudio "compile CoreAudio support (if it is available)" 
on )
     option ( enable-coremidi "compile CoreMIDI support (if it is available)" 
on )
-    option ( enable-framework "create a Mac OSX style FluidSynth.framework" on 
)
 endif ( CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS" )
 
+if ( CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS" )
+    option ( enable-framework "create a Mac OSX style FluidSynth.framework" on 
)
+endif ( CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS" )
+
 if ( CMAKE_SYSTEM MATCHES "OS2" )
     option ( enable-dart "compile DART support (if it is available)" on )
     option ( enable-kai "compile KAI support (if it is available)" on )
@@ -203,7 +206,7 @@
 
 if ( CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR 
CMAKE_C_COMPILER_ID STREQUAL "Intel" )
   # If we ever bump to CMake 3.29+, replace this with 
CMAKE_LANG_COMPILER_LINKER_ID
-  if (NOT (CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|OS2|Emscripten|SunOS") )
+  if (NOT (CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|OS2|Emscripten|SunOS") )
     set ( CMAKE_EXE_LINKER_FLAGS
           "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed" )
     set ( CMAKE_SHARED_LINKER_FLAGS
@@ -284,17 +287,17 @@
   # windows-version is supposed to be non-official variable that can be used 
to tweak the Windows target version.
   # Its value defaults to the Windows Version we are compiling for.
   if ( NOT windows-version )
-    if(CMAKE_SYSTEM_VERSION EQUAL 10) # Windows 10
+    if(CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 10) # Windows 10
         set ( windows-version "0x0A00" )
-    elseif(CMAKE_SYSTEM_VERSION EQUAL 6.3) # Windows 8.1
+    elseif(CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 6.3) # Windows 8.1
         set ( windows-version "0x0603" )
-    elseif(CMAKE_SYSTEM_VERSION EQUAL 6.2) # Windows 8
+    elseif(CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 6.2) # Windows 8
         set ( windows-version "0x0602" )
-    elseif(CMAKE_SYSTEM_VERSION EQUAL 6.1) # Windows 7
+    elseif(CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 6.1) # Windows 7
         set ( windows-version "0x0601" )
-    elseif(CMAKE_SYSTEM_VERSION EQUAL 6.0) # Windows Vista
+    elseif(CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 6.0) # Windows Vista
         set ( windows-version "0x0600" )
-    elseif(CMAKE_SYSTEM_VERSION EQUAL 5.1) # Windows XP
+    elseif(CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 5.1) # Windows XP
         set ( windows-version "0x0501" )
     else()
         set ( windows-version "0x0400" )
@@ -366,6 +369,11 @@
 
 find_package ( GCEM REQUIRED )
 
+find_library ( HAS_LIBM NAMES "m" )
+if ( HAS_LIBM )
+  set ( MATH_LIBRARY "m" )
+endif ( HAS_LIBM )
+
 set ( LIBFLUID_LIBS ${MATH_LIBRARY} )
 if (NOT ((CMAKE_SYSTEM_NAME MATCHES "SunOS") OR (osal STREQUAL "embedded")))
   # Check for threads and math
@@ -373,11 +381,6 @@
   list ( APPEND LIBFLUID_LIBS "Threads::Threads" )
 endif ()
 
-find_library ( HAS_LIBM NAMES "m" )
-if ( HAS_LIBM )
-  set ( MATH_LIBRARY "m" )
-endif ( HAS_LIBM )
-
 # IBM OS/2
 unset ( DART_SUPPORT CACHE )
 unset ( DART_LIBS CACHE )
@@ -416,7 +419,7 @@
 unset ( COREMIDI_LIBS CACHE )
 unset ( DARWIN CACHE )
 unset ( MACOSX_FRAMEWORK CACHE )
-if ( CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS" )
+if ( CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS" )
   set ( DARWIN 1 )
   set ( CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_FULL_LIBDIR} )
   if ( enable-coreaudio )
@@ -441,7 +444,7 @@
   if ( enable-framework )
     set ( MACOSX_FRAMEWORK 1 )
   endif ( enable-framework )
-endif ( CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS" )
+endif ( CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS" )
 
 # Android
 if ( ANDROID_ABI )
@@ -544,7 +547,7 @@
 # Set the minimum version desired for libraries
 set ( ALSA_MINIMUM_VERSION 0.9.1 )
 set ( DBUS_MINIMUM_VERSION 1.11.12 )
-set ( GLIB2_MINUMUM_VERSION 2.6.5 )
+set ( GLIB2_MINIMUM_VERSION 2.6.5 )
 set ( LIBINSTPATCH_MINIMUM_VERSION 1.1.0 )
 set ( LIBSNDFILE_MINIMUM_VERSION 1.0.0 )
 set ( PIPEWIRE_MINIMUM_VERSION 0.3 )
@@ -561,7 +564,7 @@
 unset ( GLIB_SUPPORT CACHE )
 if ( osal STREQUAL "glib" )
     # Mandatory libraries: glib and gthread
-    find_package ( GLib2 ${GLIB2_MINUMUM_VERSION} REQUIRED )
+    find_package ( GLib2 ${GLIB2_MINIMUM_VERSION} REQUIRED )
     list( APPEND PC_REQUIRES_PRIV "glib-2.0" "gthread-2.0")
     set ( GLIB_SUPPORT 1 )
 
@@ -597,12 +600,12 @@
         set ( LIBSNDFILE_SUPPORT 1 )
         message ( STATUS "Found libSndFile: ${SndFile_VERSION}" )
         #cmake_print_properties(TARGETS SndFile::sndfile PROPERTIES LOCATION 
INTERFACE_INCLUDE_DIRECTORIES IMPORTED_CONFIGURATIONS)
-        cmake_print_variables(SndFile_WITH_EXTERNAL_LIBS SndFile_WITH_MPEG)
+        #cmake_print_variables(SndFile_WITH_EXTERNAL_LIBS SndFile_WITH_MPEG)
         list( APPEND PC_REQUIRES_PRIV "sndfile")
         if ( SndFile_WITH_EXTERNAL_LIBS )
             set ( LIBSNDFILE_HASVORBIS 1 )
         else (SndFile_WITH_EXTERNAL_LIBS)
-            message ( NOTICE "Seems like libsndfile was compiled without 
OGG/Vorbis support." )
+            message ( "Seems like libsndfile was compiled without OGG/Vorbis 
support." )
         endif (SndFile_WITH_EXTERNAL_LIBS)
     else ( SndFile_FOUND )
         message( STATUS "Could NOT find SndFile (Set SndFile_DIR to the 
directory containing its CMake config) (Required is at least version 
${LIBSNDFILE_MINIMUM_VERSION})" )
@@ -710,7 +713,10 @@
 if ( enable-oboe )
   find_package ( oboe )
   if ( oboe_FOUND )
-    set(CMAKE_CXX_STANDARD 14)
+    if(CMAKE_CXX_STANDARD VERSION_LESS 14)
+      message ( STATUS "Setting C++ standard to C++14 for Oboe support" )
+      set(CMAKE_CXX_STANDARD 14)
+    endif()
     set(CMAKE_CXX_STANDARD_REQUIRED ON)
     set ( OBOE_SUPPORT 1 )
     list( APPEND PC_REQUIRES_PRIV "oboe-1.0")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/FluidSynthConfig.cmake.in 
new/fluidsynth-2.5.3/FluidSynthConfig.cmake.in
--- old/fluidsynth-2.5.2/FluidSynthConfig.cmake.in      2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/FluidSynthConfig.cmake.in      2026-02-21 
12:49:48.000000000 +0100
@@ -75,7 +75,7 @@
   endif()
 
   if(FLUIDSYNTH_SUPPORT_GLIB AND (NOT TARGET GLib2::glib-2 OR NOT TARGET 
GLib2::gthread-2))
-    find_dependency(GLib2 @GLIB2_MINUMUM_VERSION@)
+    find_dependency(GLib2 @GLIB2_MINIMUM_VERSION@)
   endif()
 
   if(FLUIDSYNTH_SUPPORT_ALSA AND NOT TARGET ALSA::ALSA)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/cmake_admin/FindGCEM.cmake 
new/fluidsynth-2.5.3/cmake_admin/FindGCEM.cmake
--- old/fluidsynth-2.5.2/cmake_admin/FindGCEM.cmake     2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/cmake_admin/FindGCEM.cmake     2026-02-21 
12:49:48.000000000 +0100
@@ -23,7 +23,7 @@
 #]=======================================================================]
 
 # Find the headers and library
-find_path(GCEM_INCLUDE_DIR NAMES "gcem.hpp" PATHS 
"${CMAKE_SOURCE_DIR}/gcem/include")
+find_path(GCEM_INCLUDE_DIR NAMES "gcem.hpp" PATHS 
"${CMAKE_CURRENT_SOURCE_DIR}/gcem/include")
 
 include(FindPackageHandleStandardArgs)
 
@@ -39,9 +39,9 @@
       "and extract its contents into the 'gcem' directory in the repository 
root."
     )
   else()
-    message(NOTICE "The 'gcem' submodule directory seems to be empty or 
incomplete. Attempting to download gcem from Github.")
-    set(GCEM_ZIP_FILE "${CMAKE_BINARY_DIR}/gcem.zip")
-    set(GCEM_EXTRACT_DIR "${CMAKE_BINARY_DIR}/gcem-extracted")
+    message("The 'gcem' submodule directory seems to be empty or incomplete. 
Attempting to download gcem from Github.")
+    set(GCEM_ZIP_FILE "${CMAKE_CURRENT_BINARY_DIR}/gcem.zip")
+    set(GCEM_EXTRACT_DIR "${CMAKE_CURRENT_BINARY_DIR}/gcem-extracted")
 
     file(DOWNLOAD "${GCEM_ZIP_URL}" "${GCEM_ZIP_FILE}"
           SHOW_PROGRESS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/cmake_admin/VersionResource.rc.in 
new/fluidsynth-2.5.3/cmake_admin/VersionResource.rc.in
--- old/fluidsynth-2.5.2/cmake_admin/VersionResource.rc.in      2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/cmake_admin/VersionResource.rc.in      2026-02-21 
12:49:48.000000000 +0100
@@ -22,7 +22,7 @@
             VALUE "Full Version", 
"@FLUIDSYNTH_VERSION_MAJOR@.@FLUIDSYNTH_VERSION_MINOR@.@[email protected]"
             VALUE "InternalName", "FluidSynth"
             VALUE "ProductName", "@PRODUCT_NAME@"
-            VALUE "LegalCopyright", "Copyright (C) 2003-2025 Peter Hanappe and 
others. Licensed under the terms of the LGPL v2.1"
+            VALUE "LegalCopyright", "Copyright (C) 2003-2026 Peter Hanappe and 
others. Licensed under the terms of the LGPL v2.1"
             VALUE "OriginalFilename", "@TARGET_FILENAME@"
             VALUE "ProductVersion", 
"@FLUIDSYNTH_VERSION_MAJOR@.@FLUIDSYNTH_VERSION_MINOR@.@FLUIDSYNTH_VERSION_MICRO@"
         END
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/doc/fluidsettings.xml 
new/fluidsynth-2.5.3/doc/fluidsettings.xml
--- old/fluidsynth-2.5.2/doc/fluidsettings.xml  2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/doc/fluidsettings.xml  2026-02-21 12:49:48.000000000 
+0100
@@ -385,10 +385,23 @@
             <def>44100.0</def>
             <min>8000.0</min>
             <max>96000.0</max>
-            <desc>
-                The sample rate of the audio generated by the synthesizer. For 
optimal performance, make sure this value equals the native output rate of the 
audio driver (in case you are using any of fluidsynth's audio drivers). Some 
drivers, such as Oboe, will interpolate sample-rates, whereas others, such as 
Jack, will override this setting, if a mismatch with the native output rate is 
detected.
-            </desc>
-        </setting>
+                       <desc>
+                               The sample rate of the audio generated by the 
synthesizer. For optimal performance,
+                               make sure this value equals the native output 
rate of the audio driver (in case you
+                               are using any of FluidSynth's audio drivers). 
Some drivers, such as Oboe, will
+                               interpolate sample rates, whereas others, such 
as JACK, will override this setting
+                               if a mismatch with the native output rate is 
detected.
+                               <br /><br />
+                               Important: This setting should not be changed 
during runtime of the synthesizer.
+                               <br /><br />
+                               The sample rate is applied when the synthesizer 
is created and controls the
+                               rate at which samples are synthesized. Changing 
this value after creating the
+                               synthesizer does not affect the synthesizer. 
Audio drivers created later may use
+                               the updated setting value and cause the audio 
to play out of tune. If you need to
+                               change the sample rate, recreate both the 
synthesizer and the audio driver using
+                               settings with the new sample rate.
+                       </desc>
+               </setting>
         <setting>
             <name>threadsafe-api</name>
             <type>bool</type>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/doc/fluidsynth-v20-devdoc.txt 
new/fluidsynth-2.5.3/doc/fluidsynth-v20-devdoc.txt
--- old/fluidsynth-2.5.2/doc/fluidsynth-v20-devdoc.txt  2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/doc/fluidsynth-v20-devdoc.txt  2026-02-21 
12:49:48.000000000 +0100
@@ -7,9 +7,9 @@
 \author Josh Green
 \author David Henningsson
 \author Tom Moebert
-\author Copyright &copy; 2003-2025 Peter Hanappe, Conrad Berhörster, Antoine 
Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson, Tom Moebert
-\version Revision 2.5.2
-\date 2025-12-23
+\author Copyright &copy; 2003-2026 Peter Hanappe, Conrad Berhörster, Antoine 
Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson, Tom Moebert
+\version Revision 2.5.3
+\date 2026-02-21
 
 All the source code examples in this document are in the public domain; you 
can use them as you please. This document is licensed under the Creative 
Commons Attribution-Share Alike 3.0 Unported License. To view a copy of this 
license, visit https://creativecommons.org/licenses/by-sa/3.0/ . The FluidSynth 
library is distributed under the GNU Lesser General Public License. A copy of 
the GNU Lesser General Public License is contained in the FluidSynth package; 
if not, visit https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/doc/fluidsynth.1 
new/fluidsynth-2.5.3/doc/fluidsynth.1
--- old/fluidsynth-2.5.2/doc/fluidsynth.1       2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/doc/fluidsynth.1       2026-02-21 12:49:48.000000000 
+0100
@@ -13,7 +13,7 @@
 .\" along with this program; see the file LICENSE.  If not, write to
 .\" the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 .\"
-.TH FluidSynth 1 "Feb 2, 2025"
+.TH FluidSynth 1 "Feb 21, 2026"
 .\" Please update the above date whenever this man page is modified.
 .\"
 .\" Some roff macros, for reference:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/doc/usage/audio_driver.txt 
new/fluidsynth-2.5.3/doc/usage/audio_driver.txt
--- old/fluidsynth-2.5.2/doc/usage/audio_driver.txt     2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/doc/usage/audio_driver.txt     2026-02-21 
12:49:48.000000000 +0100
@@ -20,18 +20,19 @@
 - pulseaudio: PulseAudio (Linux, Mac OS X, Windows)
 - coreaudio: Apple CoreAudio (Mac OS X)
 - dsound: Microsoft DirectSound (Windows)
+- wasapi: Windows Audio Session API (Windows Vista and later)
+- waveout: Microsoft WaveOut, alternative to DirectSound (Windows CE x86,
+  Windows Mobile 2003 for ARMv5, Windows 98 SE, Windows NT 4.0, Windows XP
+  and later)
 - portaudio: PortAudio Library (Mac OS 9 & X, Windows, Linux)
 - sndman: Apple SoundManager (Mac OS Classic)
 - dart: DART sound driver (OS/2)
 - opensles: OpenSL ES (Android)
 - oboe: Oboe (Android)
-- waveout: Microsoft WaveOut, alternative to DirectSound (Windows CE x86,
-  Windows Mobile 2003 for ARMv5, Windows 98 SE, Windows NT 4.0, Windows XP
-  and later)
-- file: Driver to output audio to a file
 - sdl3*: Simple DirectMedia Layer (Linux, Windows, Mac OS X, iOS, Android,
   FreeBSD, Haiku, etc.)
 - pipewire**: PipeWire (Linux)
+- file: Driver to output audio to a file
 
 The default audio driver depends on the settings with which FluidSynth was
 compiled. You can get the default driver with
@@ -40,11 +41,21 @@
 with fluid_settings_setstr(). In most cases, the default driver should work
 out of the box. 
 
-Additional options that define the audio quality and latency are
+Additional audio driver options that define the audio quality and latency 
include
 \setting{audio_sample-format}, \setting{audio_period-size}, and
-\setting{audio_periods}. The details are described later.
+\setting{audio_periods}. The synthesizer's \setting{synth.sample-rate} is also
+involved. The details are described later.
+
+Important: Configure the synthesizer before creating the audio driver.
+In particular, set \setting{synth.sample-rate} before instantiating the synth
+with new_fluid_synth(). After the synth has been created, changing
+\setting{synth.sample-rate} in the settings object may not change the sample
+rate used by the synthesizer, while audio drivers created later may
+use the updated setting value and cause the audio to be played out of tune. 
+If you need to change the sample rate, recreate both the synthesizer and the 
+audio driver using settings with the new sample rate.
 
-You create the audio driver with the new_fluid_audio_driver() function. This
+You can create the audio driver with the new_fluid_audio_driver() function. 
This
 function takes the settings and synthesizer object as arguments. For example: 
 
 \code
@@ -64,8 +75,9 @@
 \endcode
 
 As soon as the audio driver is created, it will start playing. The audio
-driver creates a separate thread that uses the synthesizer object to generate
-the audio.
+driver creates a separate thread that receives audio samples from the
+synthesizer object and transfers them to an audio endpoint to generate
+sound.
  
 There are a number of general audio driver settings. The audio.driver settings
 define the audio subsystem that will be used. The \setting{audio_periods} and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/include/fluidsynth/audio.h 
new/fluidsynth-2.5.3/include/fluidsynth/audio.h
--- old/fluidsynth-2.5.2/include/fluidsynth/audio.h     2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/include/fluidsynth/audio.h     2026-02-21 
12:49:48.000000000 +0100
@@ -32,7 +32,7 @@
  * The file renderer is used for fast rendering of MIDI files to
  * audio files. The audio drivers are a high-level interface to
  * connect the synthesizer with external audio sinks or to render
- * real-time audio to files.
+ * realtime audio to files.
  */
 
 /**
@@ -131,7 +131,7 @@
  * as possible. Please see \ref FileRenderer for a full example.
  *
  * If you are looking for a way to write audio generated
- * from real-time events (for example from an external sequencer or a MIDI 
controller) to a file,
+ * from realtime events (for example from an external sequencer or a MIDI 
controller) to a file,
  * please have a look at the \c file \ref audio_driver instead.
  *
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/include/fluidsynth/synth.h 
new/fluidsynth-2.5.3/include/fluidsynth/synth.h
--- old/fluidsynth-2.5.2/include/fluidsynth/synth.h     2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/include/fluidsynth/synth.h     2026-02-21 
12:49:48.000000000 +0100
@@ -334,7 +334,7 @@
  * but can also be used manually for custom processing of the rendered audio.
  *
  * @note Please note that all following functions block during rendering. If 
your goal is to
- * render real-time audio, ensure that you call these functions from a 
high-priority
+ * render realtime audio, ensure that you call these functions from a 
high-priority
  * thread with little to no other duties other than calling the rendering 
functions.
  *
  * @warning
@@ -344,7 +344,7 @@
  * synth with every call (cf. fluid_synth_get_internal_bufsize()), it will 
become evident when requesting larger sample chunks:
  * With larger sample chunks it will get harder for the synth to react on 
those spontaneously occurring events in time
  * (like events received from a MIDI driver, or directly made synth API calls).
- * In those real-time scenarios, prefer requesting smaller
+ * In those realtime scenarios, prefer requesting smaller
  * sample chunks from the synth with each call, to avoid poor quantization of 
your events in the synthesized audio.
  * This issue is not applicable when using the MIDI player or sequencer for 
event dispatching. Also
  * refer to the documentation of \setting{audio_period-size}.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/sonar-project.properties 
new/fluidsynth-2.5.3/sonar-project.properties
--- old/fluidsynth-2.5.2/sonar-project.properties       2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/sonar-project.properties       2026-02-21 
12:49:48.000000000 +0100
@@ -1,6 +1,6 @@
 sonar.projectKey=FluidSynth_fluidsynth
 sonar.organization=fluidsynth
-
+sonar.sourceEncoding=UTF-8
 sonar.cfamily.threads=2
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/CMakeLists.txt 
new/fluidsynth-2.5.3/src/CMakeLists.txt
--- old/fluidsynth-2.5.2/src/CMakeLists.txt     2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/src/CMakeLists.txt     2026-02-21 12:49:48.000000000 
+0100
@@ -1,6 +1,6 @@
 # FluidSynth - A Software Synthesizer
 #
-# Copyright (C) 2003-2025 Peter Hanappe and others.
+# Copyright (C) 2003-2026 Peter Hanappe and others.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public License
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/bindings/fluid_cmd.c 
new/fluidsynth-2.5.3/src/bindings/fluid_cmd.c
--- old/fluidsynth-2.5.2/src/bindings/fluid_cmd.c       2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/bindings/fluid_cmd.c       2026-02-21 
12:49:48.000000000 +0100
@@ -231,7 +231,7 @@
     /* settings commands */
     {
         "set", "settings", fluid_handle_set,
-        "set name value             Set the value of a setting (must be a 
real-time setting to take effect immediately)"
+        "set name value             Set the value of a setting (must be a 
realtime setting to take effect immediately)"
     },
     {
         "get", "settings", fluid_handle_get,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/drivers/fluid_adriver.c 
new/fluidsynth-2.5.3/src/drivers/fluid_adriver.c
--- old/fluidsynth-2.5.2/src/drivers/fluid_adriver.c    2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/drivers/fluid_adriver.c    2026-02-21 
12:49:48.000000000 +0100
@@ -333,7 +333,9 @@
  * completed before calling this function.
  * Thus, of all object types in use (synth, midi player, sequencer, etc.) the 
audio
  * driver should always be the last one to be created and the first one to be 
deleted!
- * Also refer to the order of object creation in the code examples.
+ * Also refer to the order of object creation in the code examples. Deleting 
and re-creating
+ * the audio driver is supported. However, only settings marked as realtime 
can reconfigure
+ * an already created \p synth.
  */
 fluid_audio_driver_t *
 new_fluid_audio_driver(fluid_settings_t *settings, fluid_synth_t *synth)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/drivers/fluid_aufile.c 
new/fluidsynth-2.5.3/src/drivers/fluid_aufile.c
--- old/fluidsynth-2.5.2/src/drivers/fluid_aufile.c     2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/drivers/fluid_aufile.c     2026-02-21 
12:49:48.000000000 +0100
@@ -19,7 +19,7 @@
 
 /* fluid_aufile.c
  *
- * Audio driver, outputs the audio to a file (non real-time)
+ * Audio driver, outputs the audio to a file (non realtime)
  *
  */
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/fluidsynth.c 
new/fluidsynth-2.5.3/src/fluidsynth.c
--- old/fluidsynth-2.5.2/src/fluidsynth.c       2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/src/fluidsynth.c       2026-02-21 12:49:48.000000000 
+0100
@@ -1201,7 +1201,7 @@
 print_welcome(void)
 {
     printf("FluidSynth runtime version %s\n"
-           "Copyright (C) 2000-2025 Peter Hanappe and others.\n"
+           "Copyright (C) 2000-2026 Peter Hanappe and others.\n"
            "Distributed under the LGPL license.\n"
            "SoundFont(R) is a registered trademark of Creative Technology 
Ltd.\n\n",
            fluid_version_str());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/midi/fluid_midi.c 
new/fluidsynth-2.5.3/src/midi/fluid_midi.c
--- old/fluidsynth-2.5.2/src/midi/fluid_midi.c  2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/src/midi/fluid_midi.c  2026-02-21 12:49:48.000000000 
+0100
@@ -165,7 +165,7 @@
     size_t n;
 
     /* Work out the length of the file in advance */
-    if(FLUID_FSEEK(fp, 0, SEEK_END) != 0)
+    if(fluid_file_seek(fp, 0, SEEK_END) != 0)
     {
         FLUID_LOG(FLUID_ERR, "File load: Could not seek within file");
         return NULL;
@@ -173,7 +173,7 @@
 
     buflen = ftell(fp);
 
-    if(FLUID_FSEEK(fp, 0, SEEK_SET) != 0)
+    if(fluid_file_seek(fp, 0, SEEK_SET) != 0)
     {
         FLUID_LOG(FLUID_ERR, "File load: Could not seek within file");
         return NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/midi/fluid_midi.h 
new/fluidsynth-2.5.3/src/midi/fluid_midi.h
--- old/fluidsynth-2.5.2/src/midi/fluid_midi.h  2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/src/midi/fluid_midi.h  2026-02-21 12:49:48.000000000 
+0100
@@ -62,7 +62,7 @@
     MIDI_SONG_SELECT = 0xf3,
     MIDI_TUNE_REQUEST = 0xf6,
     MIDI_EOX = 0xf7,
-    /* system real-time - never in midi files */
+    /* system realtime - never in midi files */
     MIDI_SYNC = 0xf8,
     MIDI_TICK = 0xf9,
     MIDI_START = 0xfa,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fluidsynth-2.5.2/src/rvoice/fluid_iir_filter_impl.cpp 
new/fluidsynth-2.5.3/src/rvoice/fluid_iir_filter_impl.cpp
--- old/fluidsynth-2.5.2/src/rvoice/fluid_iir_filter_impl.cpp   2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/rvoice/fluid_iir_filter_impl.cpp   2026-02-21 
12:49:48.000000000 +0100
@@ -25,7 +25,7 @@
 #include <cmath>
 
 
-// Calculating the sine and cosine coefficients for every possible cutoff 
frequency is too CPU expensive and can harm real-time playback.
+// Calculating the sine and cosine coefficients for every possible cutoff 
frequency is too CPU expensive and can harm realtime playback.
 // Therefore, we precalculate the coefficients with a precision of CENTS_STEP 
and store them in a table.
 extern "C" void fluid_iir_filter_init_table(fluid_iir_sincos_t *sincos_table, 
fluid_real_t sample_rate)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/rvoice/fluid_rvoice.h 
new/fluidsynth-2.5.3/src/rvoice/fluid_rvoice.h
--- old/fluidsynth-2.5.2/src/rvoice/fluid_rvoice.h      2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/rvoice/fluid_rvoice.h      2026-02-21 
12:49:48.000000000 +0100
@@ -155,7 +155,7 @@
 
 
 /*
- * Hard real-time parameters needed to synthesize a voice
+ * Hard realtime parameters needed to synthesize a voice
  */
 struct _fluid_rvoice_t
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/rvoice/fluid_rvoice_mixer.c 
new/fluidsynth-2.5.3/src/rvoice/fluid_rvoice_mixer.c
--- old/fluidsynth-2.5.2/src/rvoice/fluid_rvoice_mixer.c        2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/rvoice/fluid_rvoice_mixer.c        2026-02-21 
12:49:48.000000000 +0100
@@ -613,7 +613,7 @@
 }
 
 /**
- * Update polyphony - max number of voices (NOTE: not hard real-time capable)
+ * Update polyphony - max number of voices (NOTE: not hard realtime capable)
  * @return FLUID_OK or FLUID_FAILED
  */
 DECLARE_FLUID_RVOICE_FUNCTION(fluid_rvoice_mixer_set_polyphony)
@@ -757,7 +757,7 @@
 }
 
 /**
- * Note: Not hard real-time capable (calls malloc)
+ * Note: Not hard realtime capable (calls malloc)
  */
 DECLARE_FLUID_RVOICE_FUNCTION(fluid_rvoice_mixer_set_samplerate)
 {
@@ -1629,7 +1629,7 @@
 /**
  * Update amount of extra mixer threads.
  * @param thread_count Number of extra mixer threads for multi-core rendering
- * @param prio_level real-time prio level for the extra mixer threads
+ * @param prio_level realtime prio level for the extra mixer threads
  */
 static int fluid_rvoice_mixer_set_threads(fluid_rvoice_mixer_t *mixer, int 
thread_count, int prio_level)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/sfloader/fluid_sffile.c 
new/fluidsynth-2.5.3/src/sfloader/fluid_sffile.c
--- old/fluidsynth-2.5.2/src/sfloader/fluid_sffile.c    2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/sfloader/fluid_sffile.c    2026-02-21 
12:49:48.000000000 +0100
@@ -158,9 +158,11 @@
 #define READCHUNK(sf, var)                                                  \
     do                                                                      \
     {                                                                       \
-        if (sf->fcbs->fread(var, 8, sf->sffd) == FLUID_FAILED)              \
+        if (sf->fcbs->fread(&(var)->id, 4, sf->sffd) == FLUID_FAILED)       \
             return FALSE;                                                   \
-        ((SFChunk *)(var))->size = FLUID_LE32TOH(((SFChunk *)(var))->size); \
+        if (sf->fcbs->fread(&(var)->size, 4, sf->sffd) == FLUID_FAILED)     \
+            return FALSE;                                                   \
+        (var)->size = FLUID_LE32TOH((var)->size); \
     } while (0)
 
 #define READD(sf, var)                                            \
@@ -291,7 +293,7 @@
             break;
         }
 
-        if(FLUID_FSEEK(fp, 4, SEEK_CUR))
+        if(fluid_file_seek(fp, 4, SEEK_CUR))
         {
             FLUID_LOG(FLUID_ERR, "fluid_is_soundfont(): cannot seek +4 
bytes.");
             break;
@@ -663,7 +665,8 @@
 
     if(chunk->id != LIST_FCC)  /* error if ! list chunk */
     {
-        FLUID_LOG(FLUID_ERR, "Invalid chunk id in level 0 parse");
+        unsigned char *p = (unsigned char *)&chunk->id;
+        FLUID_LOG(FLUID_ERR, "Invalid chunk id '0x%X 0x%X 0x%X 0x%X' (%d 
bytes) in level 0 parse", (int)p[0], (int)p[1], (int)p[2], (int)p[3], 
chunk->size);
         return FALSE;
     }
 
@@ -2447,8 +2450,6 @@
         goto error_exit_unlock;
     }
 
-    FLUID_LOG(FLUID_DBG, "ftell(): %llu, fread(): %ld bytes", 
sf->fcbs->ftell(sf->sffd), num_samples * sizeof(short));
-
     if(sf->fcbs->fread(loaded_data, num_samples * sizeof(short), sf->sffd) == 
FLUID_FAILED)
     {
         FLUID_LOG(FLUID_ERR, "Failed to read sample data");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/sfloader/fluid_sfont.c 
new/fluidsynth-2.5.3/src/sfloader/fluid_sfont.c
--- old/fluidsynth-2.5.2/src/sfloader/fluid_sfont.c     2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/sfloader/fluid_sfont.c     2026-02-21 
12:49:48.000000000 +0100
@@ -45,44 +45,16 @@
     return FLUID_FTELL((FILE *)handle);
 }
 
-#ifdef _WIN32
-#define FLUID_PRIi64 "I64d"
-#else
-#define FLUID_PRIi64 "lld"
-#endif
-
-int safe_fread(void *buf, fluid_long_long_t count, void *fd)
+int safe_fread(void *buf, fluid_long_long_t count, void *handle)
 {
-    if(FLUID_FREAD(buf, (size_t)count, 1, (FILE *)fd) != 1)
-    {
-        if(feof((FILE *)fd))
-        {
-            FLUID_LOG(FLUID_ERR, "EOF while attempting to read %" FLUID_PRIi64 
" bytes", count);
-        }
-        else
-        {
-            FLUID_LOG(FLUID_ERR, "File read failed");
-        }
-
-        return FLUID_FAILED;
-    }
-
-    return FLUID_OK;
+    return fluid_file_read(buf, count, handle);
 }
 
-int safe_fseek(void *fd, fluid_long_long_t ofs, int whence)
+int safe_fseek(void *handle, fluid_long_long_t ofs, int whence)
 {
-    if(FLUID_FSEEK((FILE *)fd, ofs, whence) != 0)
-    {
-        FLUID_LOG(FLUID_ERR, "File seek failed with offset = %" FLUID_PRIi64 " 
and whence = %d", ofs, whence);
-        return FLUID_FAILED;
-    }
-
-    return FLUID_OK;
+    return fluid_file_seek(handle, ofs, whence);
 }
 
-#undef FLUID_PRIi64
-
 /**
  * Creates a new SoundFont loader.
  *
@@ -325,7 +297,7 @@
  * @param mod_out A reference to a fluid_mod_t array. The provided pointer 
variable will be populated by fluidsynth to point to an array. The caller is 
responsible for freeing the array with fluid_free().
  * @return #FLUID_FAILED on error (e.g. out of memory). Otherwise it contains 
the number of modulators saved into the buffer. The caller must always free the 
buffer, even if the return value is zero!
  * @since 2.5.0
- * @note This function involves memory allocation and is therefore not 
real-time safe!
+ * @note This function involves memory allocation and is therefore not 
realtime safe!
  * @warning This function is not thread-safe. So only call this function when 
no synthesis thread is concurrently using this @p sfont instance!
  */
 int fluid_sfont_get_default_mod(fluid_sfont_t *sfont, fluid_mod_t **mod_out)
@@ -370,7 +342,7 @@
  * SoundFont will be unset, causing the synth's default modulators to be added 
to voices again.
  * The behavior is undefined if the array @p mods contains multiple identical 
modulators
  * (i.e. fluid_mod_test_identity() evaluates to true).
- * Further note that this function involves memory allocation and is therefore 
not real-time safe!
+ * Further note that this function involves memory allocation and is therefore 
not realtime safe!
  *
  * @warning This function is not thread-safe. So only call this function when 
no synthesis thread is concurrently using this @p sfont instance!
  * @since 2.5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/synth/fluid_synth.c 
new/fluidsynth-2.5.3/src/synth/fluid_synth.c
--- old/fluidsynth-2.5.2/src/synth/fluid_synth.c        2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/synth/fluid_synth.c        2026-02-21 
12:49:48.000000000 +0100
@@ -134,7 +134,7 @@
 
 static int fluid_parse_portamento_time_str(const char* value);
 
-/* Callback handlers for real-time settings */
+/* Callback handlers for realtime settings */
 static void fluid_synth_handle_gain(void *data, const char *name, double 
value);
 static void fluid_synth_handle_polyphony(void *data, const char *name, int 
value);
 static void fluid_synth_handle_device_id(void *data, const char *name, int 
value);
@@ -660,8 +660,8 @@
  * @note The @p settings parameter is used directly, but the synth does not 
take ownership of it.
  * Hence, the caller is responsible for freeing it, when no longer needed.
  * Further note that you may modify FluidSettings of the
- * @p settings instance. However, only those FluidSettings marked as 
'realtime' will
- * affect the synth immediately. See the \ref fluidsettings for more details.
+ * @p settings instance. However, only synth settings marked as realtime in 
\ref fluidsettings will
+ * affect the synth at runtime. fluid_settings_is_realtime() can be used to 
check this.
  *
  * @warning The @p settings object should only be used by a single synth at a 
time. I.e. creating
  * multiple synth instances with a single @p settings object causes undefined 
behavior. Once the
@@ -1116,7 +1116,7 @@
 
     fluid_profiling_print();
 
-    /* unregister all real-time settings callback, to avoid a use-after-free 
when changing those settings after
+    /* unregister all realtime settings callback, to avoid a use-after-free 
when changing those settings after
      * this synth has been deleted*/
 
     fluid_settings_callback_num(synth->settings, "synth.gain",
@@ -3684,7 +3684,7 @@
  * Set up an event to change the sample-rate of the synth during the next 
rendering call.
  * @warning This function is broken-by-design! Don't use it! Starting with 
fluidsynth 2.4.4 it's a no-op. Instead, specify the sample-rate when creating 
the synth.
  * @deprecated As of fluidsynth 2.1.0 this function has been deprecated.
- * Changing the sample-rate is generally not considered to be a real-time 
use-case, as it always produces some audible artifact ("click", "pop") on the 
dry sound and effects (because LFOs for chorus and reverb need to be 
reinitialized).
+ * Changing the sample-rate is generally not considered to be a realtime 
use-case, as it always produces some audible artifact ("click", "pop") on the 
dry sound and effects (because LFOs for chorus and reverb need to be 
reinitialized).
  * The sample-rate change may also require memory allocation deep down in the 
effect units.
  * However, this memory allocation may fail and there is no way for the caller 
to know that, because the actual change of the sample-rate is executed during 
rendering.
  * This function cannot (must not) do the sample-rate change itself, otherwise 
the synth needs to be locked down, causing rendering to block.
@@ -7747,7 +7747,7 @@
 /**
  * Apply an offset to a SoundFont generator on a MIDI channel.
  *
- * This function allows to set an offset for the specified destination 
generator in real-time.
+ * This function allows to set an offset for the specified destination 
generator in realtime.
  * The offset will be applied immediately to all voices that are currently and 
subsequently playing
  * on the given MIDI channel. This functionality works equivalent to using 
NRPN MIDI messages to
  * manipulate synthesis parameters. See SoundFont spec, paragraph 8.1.3, for 
details on SoundFont
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/synth/fluid_voice.c 
new/fluidsynth-2.5.3/src/synth/fluid_voice.c
--- old/fluidsynth-2.5.2/src/synth/fluid_voice.c        2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/synth/fluid_voice.c        2026-02-21 
12:49:48.000000000 +0100
@@ -738,7 +738,7 @@
  * fluid_voice_update_param can be called during the setup of the
  * voice (to calculate the initial value for a voice parameter), or
  * during its operation (a generator has been changed due to
- * real-time parameter modifications like pitch-bend).
+ * realtime parameter modifications like pitch-bend).
  *
  * Note: The generator holds three values: The base value .val, an
  * offset caused by modulators .mod, and an offset caused by the
@@ -1566,7 +1566,7 @@
  * @return Note on unique ID
  *
  * A SoundFont loader may store pointers to voices it has created for
- * real-time control during the operation of a voice (for example: parameter
+ * realtime control during the operation of a voice (for example: parameter
  * changes in SoundFont editor). The synth uses a pool of voices internally 
which are
  * 'recycled' and never deallocated.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/utils/fluid_settings.c 
new/fluidsynth-2.5.3/src/utils/fluid_settings.c
--- old/fluidsynth-2.5.2/src/utils/fluid_settings.c     2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/utils/fluid_settings.c     2026-02-21 
12:49:48.000000000 +0100
@@ -904,11 +904,11 @@
 }
 
 /**
- * Ask whether the setting is changeable in real-time.
+ * Ask whether the setting is changeable in realtime.
  *
  * @param settings a settings object
  * @param name a setting's name
- * @return TRUE if the setting is changeable in real-time, FALSE otherwise
+ * @return TRUE if the setting is changeable in realtime, FALSE otherwise
  *
  * @note Before using this function, make sure the @p settings object has 
already been used to create
  * a synthesizer, a MIDI driver, an audio driver, a MIDI player, or a command 
handler (depending on
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/utils/fluid_sys.c 
new/fluidsynth-2.5.3/src/utils/fluid_sys.c
--- old/fluidsynth-2.5.2/src/utils/fluid_sys.c  2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/src/utils/fluid_sys.c  2026-02-21 12:49:48.000000000 
+0100
@@ -1641,6 +1641,64 @@
 #endif
 }
 
+#ifdef _WIN32
+#define FLUID_PRIi64 "I64d"
+#else
+#define FLUID_PRIi64 "lld"
+#endif
+
+int fluid_file_read(void *buf, fluid_long_long_t count, FILE *fd)
+{
+    if(FLUID_FREAD(buf, (size_t)count, 1, (FILE *)fd) != 1)
+    {
+        if(feof((FILE *)fd))
+        {
+            FLUID_LOG(FLUID_ERR, "EOF while attempting to read %" FLUID_PRIi64 
" bytes", count);
+        }
+        else
+        {
+            FLUID_LOG(FLUID_ERR, "File read failed");
+        }
+
+        return FLUID_FAILED;
+    }
+
+    return FLUID_OK;
+}
+
+int fluid_file_seek(FILE *fd, fluid_long_long_t ofs, int whence)
+{
+#if defined(__MINGW32__) && defined(__i386__)
+    // Some older versions of MinGW i686 report incorrect values for 
_ftelli64(). This is problematic,
+    // because _fseeki64() below would use these incorrect values when seeking 
with SEEK_CUR,
+    // resulting in incorrect file positions. So we need to work around this 
by doing the SEEK_CUR
+    // calculation ourselves.
+    // See https://sourceforge.net/p/mingw-w64/bugs/864/ for more details.
+    if(whence == SEEK_CUR)
+    {
+        whence = SEEK_SET;
+        ofs += fluid_file_tell((FILE *)fd);
+    }
+#endif
+
+#ifdef _WIN32
+#define FLUID_FSEEK(_f,_n,_set)      _fseeki64(_f,_n,_set)
+#else
+#define FLUID_FSEEK(_f,_n,_set)      fseek(_f,_n,_set)
+#endif
+
+    if(FLUID_FSEEK((FILE *)fd, ofs, whence) != 0)
+    {
+        FLUID_LOG(FLUID_ERR, "File seek failed with offset = %" FLUID_PRIi64 " 
and whence = %d", ofs, whence);
+        return FLUID_FAILED;
+    }
+#undef FLUID_FSEEK
+
+    return FLUID_OK;
+}
+
+#undef FLUID_PRIi64
+
 #if defined(_WIN32) || defined(__CYGWIN__)
 // not thread-safe!
 #define FLUID_WINDOWS_MEX_ERROR_LEN    1024
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/utils/fluid_sys.h 
new/fluidsynth-2.5.3/src/utils/fluid_sys.h
--- old/fluidsynth-2.5.2/src/utils/fluid_sys.h  2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/src/utils/fluid_sys.h  2026-02-21 12:49:48.000000000 
+0100
@@ -309,6 +309,8 @@
 /* File access */
 FILE* fluid_file_open(const char* filename, const char** errMsg);
 fluid_long_long_t fluid_file_tell(FILE* f);
+int fluid_file_read(void *buf, fluid_long_long_t count, FILE *fd);
+int fluid_file_seek(FILE *fd, fluid_long_long_t ofs, int whence);
 
 
 /* Profiling */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/src/utils/fluidsynth_priv.h 
new/fluidsynth-2.5.3/src/utils/fluidsynth_priv.h
--- old/fluidsynth-2.5.2/src/utils/fluidsynth_priv.h    2025-12-23 
20:39:40.000000000 +0100
+++ new/fluidsynth-2.5.3/src/utils/fluidsynth_priv.h    2026-02-21 
12:49:48.000000000 +0100
@@ -210,12 +210,6 @@
 
 FILE *fluid_fopen(const char *filename, const char *mode);
 
-#ifdef _WIN32
-#define FLUID_FSEEK(_f,_n,_set)      _fseeki64(_f,_n,_set)
-#else
-#define FLUID_FSEEK(_f,_n,_set)      fseek(_f,_n,_set)
-#endif
-
 #define FLUID_FTELL(_f)              fluid_file_tell(_f)
 
 /* Memory functions */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/test/CMakeLists.txt 
new/fluidsynth-2.5.3/test/CMakeLists.txt
--- old/fluidsynth-2.5.2/test/CMakeLists.txt    2025-12-23 20:39:40.000000000 
+0100
+++ new/fluidsynth-2.5.3/test/CMakeLists.txt    2026-02-21 12:49:48.000000000 
+0100
@@ -33,6 +33,8 @@
 ADD_FLUID_TEST(test_portamento_time)
 ADD_FLUID_TEST(test_modulator)
 ADD_FLUID_TEST(test_default_mod)
+ADD_FLUID_TEST(test_ABI)
+ADD_FLUID_TEST(test_file_seek_tell)
 
 if ( GLIB_SUPPORT AND GLib2_VERSION VERSION_GREATER_EQUAL 2.33.12 )
     # Earlier versions of GLib had broken comment handling and should not be 
compared to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/test/test_ABI.cpp 
new/fluidsynth-2.5.3/test/test_ABI.cpp
--- old/fluidsynth-2.5.2/test/test_ABI.cpp      1970-01-01 01:00:00.000000000 
+0100
+++ new/fluidsynth-2.5.3/test/test_ABI.cpp      2026-02-21 12:49:48.000000000 
+0100
@@ -0,0 +1,110 @@
+/*
+  Prints sizeof(...) and alignof(...) for common fundamental/intrinsic types.
+
+  Build:
+    c++ -std=c++11 -Wall -Wextra -pedantic -O2 print_type_sizes_align.cpp -o 
print_type_sizes_align
+
+  Run:
+    ./print_type_sizes_align
+*/
+
+#include "test.h"
+#include "fluidsynth.h"
+#include "fluid_sffile.h"
+
+#include <iostream>
+#include <iomanip>
+#include <type_traits>
+#include <cstddef>
+#include <cstdint>
+#include <cwchar>
+
+template <typename T>
+void print_type(const char* name) {
+    std::cout << std::left << std::setw(28) << name
+              << " sizeof=" << std::setw(2) << sizeof(T)
+              << " alignof=" << std::setw(2) << alignof(T)
+              << "\n";
+}
+
+int main() {
+    std::cout << "sizeof(...) and alignof(...) in bytes on this platform:\n\n";
+
+    // Fundamental character / boolean types
+    print_type<char>("char");
+    print_type<signed char>("signed char");
+    print_type<unsigned char>("unsigned char");
+    print_type<wchar_t>("wchar_t");
+    print_type<bool>("bool");
+
+    // C++11 Unicode character types
+    print_type<char16_t>("char16_t");
+    print_type<char32_t>("char32_t");
+
+    // Integers
+    print_type<short>("short");
+    print_type<unsigned short>("unsigned short");
+    print_type<int>("int");
+    print_type<unsigned int>("unsigned int");
+    print_type<long>("long");
+    print_type<unsigned long>("unsigned long");
+    print_type<long long>("long long");
+    print_type<unsigned long long>("unsigned long long");
+
+    // Floating point
+    print_type<float>("float");
+    print_type<double>("double");
+    print_type<long double>("long double");
+
+    // Pointers / size-related
+    print_type<void*>("void*");
+    print_type<char*>("char*");
+    print_type<std::size_t>("std::size_t");
+    print_type<std::ptrdiff_t>("std::ptrdiff_t");
+
+    std::cout << "\n<stdint> fixed-width integer types:\n\n";
+    print_type<std::int8_t>("std::int8_t");
+    print_type<std::uint8_t>("std::uint8_t");
+    print_type<std::int16_t>("std::int16_t");
+    print_type<std::uint16_t>("std::uint16_t");
+    print_type<std::int32_t>("std::int32_t");
+    print_type<std::uint32_t>("std::uint32_t");
+    print_type<std::int64_t>("std::int64_t");
+    print_type<std::uint64_t>("std::uint64_t");
+
+    std::cout << "\n<stdint> least / fast / pointer integer types:\n\n";
+    print_type<std::int_least8_t>("std::int_least8_t");
+    print_type<std::uint_least8_t>("std::uint_least8_t");
+    print_type<std::int_fast8_t>("std::int_fast8_t");
+    print_type<std::uint_fast8_t>("std::uint_fast8_t");
+
+    print_type<std::int_least16_t>("std::int_least16_t");
+    print_type<std::uint_least16_t>("std::uint_least16_t");
+    print_type<std::int_fast16_t>("std::int_fast16_t");
+    print_type<std::uint_fast16_t>("std::uint_fast16_t");
+
+    print_type<std::int_least32_t>("std::int_least32_t");
+    print_type<std::uint_least32_t>("std::uint_least32_t");
+    print_type<std::int_fast32_t>("std::int_fast32_t");
+    print_type<std::uint_fast32_t>("std::uint_fast32_t");
+
+    print_type<std::int_least64_t>("std::int_least64_t");
+    print_type<std::uint_least64_t>("std::uint_least64_t");
+    print_type<std::int_fast64_t>("std::int_fast64_t");
+    print_type<std::uint_fast64_t>("std::uint_fast64_t");
+
+    print_type<std::intptr_t>("std::intptr_t");
+    print_type<std::uintptr_t>("std::uintptr_t");
+
+    // (Optional) show max alignment type
+    std::cout << "\nMax fundamental alignment-related type:\n\n";
+    print_type<std::max_align_t>("std::max_align_t");
+
+    std::cout << "\nCustom FluidSynth types:\n\n";
+    print_type<fluid_long_long_t>("fluid_long_long_t");
+    TEST_ASSERT(sizeof(fluid_long_long_t) == 8);
+    print_type<SFChunk>("SFChunk");
+    TEST_ASSERT(sizeof(SFChunk) == 8);
+
+    return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.5.2/test/test_file_seek_tell.c 
new/fluidsynth-2.5.3/test/test_file_seek_tell.c
--- old/fluidsynth-2.5.2/test/test_file_seek_tell.c     1970-01-01 
01:00:00.000000000 +0100
+++ new/fluidsynth-2.5.3/test/test_file_seek_tell.c     2026-02-21 
12:49:48.000000000 +0100
@@ -0,0 +1,243 @@
+#include "test.h"
+#include "fluidsynth.h"
+#include "sfloader/fluid_sfont.h"
+#include "sfloader/fluid_defsfont.h"
+#include "utils/fluid_sys.h"
+
+void noop(void)
+{
+    // do nothing
+}
+
+// A unit test that fails when compiled with MinGW32 8.1.0, due to 
inconsistencies when using fseek(SEEK_CUR).
+// Mimic the simple behavior of the sfont loader to test seek and tell are 
working as expected.
+int main(void)
+{
+    fluid_long_long_t pos, size;
+    fluid_sfloader_t* loader = new_fluid_sfloader((fluid_sfloader_load_t)noop, 
(fluid_sfloader_free_t)noop);
+    
+    fluid_file_callbacks_t* fcbs = &loader->file_callbacks;
+
+    void * file = fcbs->fopen(TEST_SOUNDFONT);
+    TEST_ASSERT(file != NULL);
+
+    pos = fcbs->ftell(file);
+    TEST_ASSERT(pos == 0);
+
+    TEST_ASSERT(fcbs->fseek(file, 0, SEEK_END) == FLUID_OK);
+    size = fcbs->ftell(file);
+    TEST_ASSERT(size == 314640);
+
+    TEST_ASSERT(fcbs->fseek(file, 0, SEEK_SET) == FLUID_OK);
+    pos = fcbs->ftell(file);
+    TEST_ASSERT(pos == 0);
+
+    {
+        unsigned char buf[1024];
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 4);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 8);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 12);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 16);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 20);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 24);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 28);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 32);
+
+        TEST_ASSERT(fcbs->fread(buf, 2, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 34);
+
+        TEST_ASSERT(fcbs->fread(buf, 2, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 36);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 40);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 44);
+
+        TEST_ASSERT(fcbs->fread(buf, 28, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 72);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 76);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 80);
+
+        TEST_ASSERT(fcbs->fread(buf, 8, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 88);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 92);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 96);
+
+        TEST_ASSERT(fcbs->fread(buf, 6, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 102);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 106);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 110);
+
+        TEST_ASSERT(fcbs->fread(buf, 2, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 112);
+
+        TEST_ASSERT(fcbs->fread(buf, 2, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 114);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 118);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 122);
+
+        TEST_ASSERT(fcbs->fread(buf, 8, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 130);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 134);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 138);
+
+        TEST_ASSERT(fcbs->fread(buf, 12, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 150);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 154);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 158);
+
+        TEST_ASSERT(fcbs->fread(buf, 24, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 182);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 186);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 190);
+
+        TEST_ASSERT(fcbs->fread(buf, 14, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 204);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 208);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 212);
+
+        TEST_ASSERT(fcbs->fread(buf, 184, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 396);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 400);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 404);
+
+        TEST_ASSERT(fcbs->fread(buf, 40, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 444);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 448);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 452);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 456);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 460);
+
+        TEST_ASSERT(fcbs->fread(buf, 4, file) == FLUID_OK);
+        pos = fcbs->ftell(file);
+        TEST_ASSERT(pos == 464);
+    }
+
+    TEST_ASSERT(fcbs->fseek(file, 252534, SEEK_CUR) == FLUID_OK);
+    pos = fcbs->ftell(file);
+    TEST_ASSERT(pos == 252534 + 464);
+
+    TEST_ASSERT(fcbs->fseek(file, 0, SEEK_CUR) == FLUID_OK);
+    pos = fcbs->ftell(file);
+    TEST_ASSERT(pos == 252534 + 464);
+
+    TEST_ASSERT(fcbs->fseek(file, -252534, SEEK_CUR) == FLUID_OK);
+    pos = fcbs->ftell(file);
+    TEST_ASSERT(pos == 464);
+
+    TEST_ASSERT(fcbs->fseek(file, 0, SEEK_SET) == FLUID_OK);
+    pos = fcbs->ftell(file);
+    TEST_ASSERT(pos == 0);
+
+    TEST_ASSERT(fcbs->fclose(file) == FLUID_OK);
+    delete_fluid_sfloader(loader);
+
+    return EXIT_SUCCESS;
+}

Reply via email to