From f55e0df614f3e60d28d459c8e7a8821cf049ebe1 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Tue, 28 Jan 2025 18:52:35 +0100
Subject: [PATCH 01/13] lib/curl/meson.build: add missing internal dependency
 on libevent.a

---
 src/lib/curl/meson.build | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lib/curl/meson.build b/src/lib/curl/meson.build
index e1cc8adcf..8b69f188e 100644
--- a/src/lib/curl/meson.build
+++ b/src/lib/curl/meson.build
@@ -24,6 +24,7 @@ curl = static_library(
   'Form.cxx',
   include_directories: inc,
   dependencies: [
+    event_dep,
     log_dep,
     curl_dep,
   ],

From 2752f67877a2171d29ff0ee6e980802b01a7a9c5 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Tue, 28 Jan 2025 19:05:08 +0100
Subject: [PATCH 02/13] lib/nfs/meson.build: add missing dependency on
 libevent.a

---
 src/lib/nfs/meson.build | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/lib/nfs/meson.build b/src/lib/nfs/meson.build
index 467da596b..5788e6bb7 100644
--- a/src/lib/nfs/meson.build
+++ b/src/lib/nfs/meson.build
@@ -15,6 +15,7 @@ nfs = static_library(
   'Blocking.cxx',
   include_directories: inc,
   dependencies: [
+    event_dep,
     nfs_dep,
     log_dep,
   ],
@@ -23,6 +24,7 @@ nfs = static_library(
 nfs_dep = declare_dependency(
   link_with: nfs,
   dependencies: [
+    event_dep,
     nfs_dep,
   ],
 )

From efa8304d2d7c2bc097a8ffcf457d985039d94bc7 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Tue, 28 Jan 2025 19:12:30 +0100
Subject: [PATCH 03/13] subprojects/.gitignore: sort

---
 subprojects/.gitignore | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 24f8cf399..c675a6449 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -3,8 +3,8 @@
 /expat-*/
 /fmt-*/
 /googletest-*/
-/sqlite-*/
 /libmicrohttpd*
 /libnpupnp-*/
 /liburing-*/
 /libvorbis-*/
+/sqlite-*/

From 578c94081f4c575ec57d74b3e3872c25836b2f09 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Mon, 11 Dec 2023 10:02:35 +0100
Subject: [PATCH 04/13] subprojects: add curl

---
 android/build.py                              |  1 -
 meson.build                                   | 35 +++++++++++++++++++
 python/build/libs.py                          | 35 -------------------
 .../no_CMAKE_C_IMPLICIT_LINK_LIBRARIES.patch  | 13 -------
 src/lib/curl/patches/no_netrc.patch           | 20 -----------
 src/lib/curl/patches/series                   |  2 --
 subprojects/.gitignore                        |  1 +
 subprojects/curl.wrap                         | 13 +++++++
 win32/build.py                                |  1 -
 9 files changed, 49 insertions(+), 72 deletions(-)
 delete mode 100644 src/lib/curl/patches/no_CMAKE_C_IMPLICIT_LINK_LIBRARIES.patch
 delete mode 100644 src/lib/curl/patches/no_netrc.patch
 delete mode 100644 src/lib/curl/patches/series
 create mode 100644 subprojects/curl.wrap

diff --git a/android/build.py b/android/build.py
index 8164682e1..2b658cc45 100755
--- a/android/build.py
+++ b/android/build.py
@@ -41,7 +41,6 @@ thirdparty_libs = [
     gme,
     ffmpeg,
     openssl,
-    curl,
     libnfs,
     boost,
 ]
diff --git a/meson.build b/meson.build
index f9749468b..d5a084c5f 100644
--- a/meson.build
+++ b/meson.build
@@ -12,6 +12,7 @@ project(
 
     # If we build those libraries as Meson subproject, they shall be
     # linked statically into the MPD executable.
+    'curl:default_library=static',
     'expat:default_library=static',
     'fmt:default_library=static',
     'gtest:default_library=static',
@@ -22,6 +23,8 @@ project(
     'vorbis:default_library=static',
 
     # Not interested in compiler warnings from subprojects.
+    'curl:werror=false',
+    'curl:warning_level=0',
     'expat:werror=false',
     'expat:warning_level=0',
     'fmt:warning_level=0',
@@ -31,6 +34,38 @@ project(
     'liburing:warning_level=0',
     'sqlite3:warning_level=0',
     'vorbis:warning_level=0',
+
+    # Disable subprojects features we don't need
+    'curl:tool=disabled',
+    'curl:tests=disabled',
+    'curl:unittests=disabled',
+    'curl:brotli=disabled',
+    'curl:cookies=disabled',
+    'curl:progress-meter=disabled',
+    'curl:zstd=disabled',
+    'curl:kerberos-auth=disabled',
+    'curl:negotiate-auth=disabled',
+    'curl:gss-api=disabled',
+    'curl:ntlm=disabled',
+    'curl:ssh=disabled',
+    'curl:dict=disabled',
+    'curl:file=disabled',
+    'curl:ftp=disabled',
+    'curl:gopher=disabled',
+    'curl:imap=disabled',
+    'curl:ldap=disabled',
+    'curl:ldaps=disabled',
+    'curl:mqtt=disabled',
+    'curl:pop3=disabled',
+    'curl:rtmp=disabled',
+    'curl:rtsp=disabled',
+    'curl:smb=disabled',
+    'curl:smtp=disabled',
+    'curl:telnet=disabled',
+    'curl:tftp=disabled',
+    'opus:docs=disabled',
+    'opus:extra-programs=disabled',
+    'opus:tests=disabled',
   ],
   license: 'GPLv2+',
 )
diff --git a/python/build/libs.py b/python/build/libs.py
index 2d9a752fb..891c7f9a9 100644
--- a/python/build/libs.py
+++ b/python/build/libs.py
@@ -609,41 +609,6 @@ openssl = OpenSSLProject(
     'include/openssl/ossl_typ.h',
 )
 
-curl = CmakeProject(
-    ('https://curl.se/download/curl-8.5.0.tar.xz',
-     'https://github.com/curl/curl/releases/download/curl-8_5_0/curl-8.5.0.tar.xz'),
-    '42ab8db9e20d8290a3b633e7fbb3cec15db34df65fd1015ef8ac1e4723750eeb',
-    'lib/libcurl.a',
-    [
-        '-DBUILD_CURL_EXE=OFF',
-        '-DBUILD_SHARED_LIBS=OFF',
-        '-DCURL_DISABLE_LDAP=ON',
-        '-DCURL_DISABLE_TELNET=ON',
-        '-DCURL_DISABLE_DICT=ON',
-        '-DCURL_DISABLE_FILE=ON',
-        '-DCURL_DISABLE_FTP=ON',
-        '-DCURL_DISABLE_TFTP=ON',
-        '-DCURL_DISABLE_LDAPS=ON',
-        '-DCURL_DISABLE_RTSP=ON',
-        '-DCURL_DISABLE_PROXY=ON',
-        '-DCURL_DISABLE_POP3=ON',
-        '-DCURL_DISABLE_IMAP=ON',
-        '-DCURL_DISABLE_SMTP=ON',
-        '-DCURL_DISABLE_GOPHER=ON',
-        '-DCURL_DISABLE_COOKIES=ON',
-        '-DCURL_DISABLE_CRYPTO_AUTH=ON',
-        '-DCURL_DISABLE_ALTSVC=ON',
-        '-DCMAKE_USE_LIBSSH2=OFF',
-        '-DCURL_WINDOWS_SSPI=OFF',
-        '-DCURL_DISABLE_NTLM=ON',
-        '-DBUILD_TESTING=OFF',
-    ],
-    windows_configure_args=[
-        '-DCURL_USE_SCHANNEL=ON',
-    ],
-    patches='src/lib/curl/patches',
-)
-
 libnfs = AutotoolsProject(
     'https://github.com/sahlberg/libnfs/archive/libnfs-5.0.3.tar.gz',
     'd945cb4f4c8f82ee1f3640893a168810f794a28e1010bb007ec5add345e9df3e',
diff --git a/src/lib/curl/patches/no_CMAKE_C_IMPLICIT_LINK_LIBRARIES.patch b/src/lib/curl/patches/no_CMAKE_C_IMPLICIT_LINK_LIBRARIES.patch
deleted file mode 100644
index 8c3e6202a..000000000
--- a/src/lib/curl/patches/no_CMAKE_C_IMPLICIT_LINK_LIBRARIES.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: curl-7.85.0/CMakeLists.txt
-===================================================================
---- curl-7.85.0.orig/CMakeLists.txt
-+++ curl-7.85.0/CMakeLists.txt
-@@ -1655,7 +1655,7 @@
-   set(LDFLAGS                 "${CMAKE_SHARED_LINKER_FLAGS}")
-   set(LIBCURL_LIBS            "")
-   set(libdir                  "${CMAKE_INSTALL_PREFIX}/lib")
--  foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS})
-+  foreach(_lib ${CURL_LIBS})
-     if(TARGET "${_lib}")
-       set(_libname "${_lib}")
-       get_target_property(_imported "${_libname}" IMPORTED)
diff --git a/src/lib/curl/patches/no_netrc.patch b/src/lib/curl/patches/no_netrc.patch
deleted file mode 100644
index 35b83b621..000000000
--- a/src/lib/curl/patches/no_netrc.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: curl-7.84.0/lib/url.c
-===================================================================
---- curl-7.84.0.orig/lib/url.c
-+++ curl-7.84.0/lib/url.c
-@@ -3003,6 +3003,7 @@ static CURLcode override_login(struct Cu
- 
- #ifndef CURL_DISABLE_NETRC
-   conn->bits.netrc = FALSE;
-+#ifndef __BIONIC__
-   if(data->set.use_netrc && !data->set.str[STRING_USERNAME]) {
-     bool netrc_user_changed = FALSE;
-     bool netrc_passwd_changed = FALSE;
-@@ -3079,6 +3080,7 @@ static CURLcode override_login(struct Cu
-         return CURLE_OUT_OF_MEMORY;
-     }
-   }
-+#endif
- 
-   return CURLE_OK;
- }
diff --git a/src/lib/curl/patches/series b/src/lib/curl/patches/series
deleted file mode 100644
index 979436b3c..000000000
--- a/src/lib/curl/patches/series
+++ /dev/null
@@ -1,2 +0,0 @@
-no_CMAKE_C_IMPLICIT_LINK_LIBRARIES.patch
-no_netrc.patch
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index c675a6449..4baf86ff4 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -1,5 +1,6 @@
 /packagecache/
 
+/curl-*/
 /expat-*/
 /fmt-*/
 /googletest-*/
diff --git a/subprojects/curl.wrap b/subprojects/curl.wrap
new file mode 100644
index 000000000..f7e384b85
--- /dev/null
+++ b/subprojects/curl.wrap
@@ -0,0 +1,13 @@
+[wrap-file]
+directory = curl-8.10.1
+source_url = https://github.com/curl/curl/releases/download/curl-8_10_1/curl-8.10.1.tar.xz
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/curl_8.10.1-1/curl-8.10.1.tar.xz
+source_filename = curl-8.10.1.tar.xz
+source_hash = 73a4b0e99596a09fa5924a4fb7e4b995a85fda0d18a2c02ab9cf134bebce04ee
+patch_filename = curl_8.10.1-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/curl_8.10.1-1/get_patch
+patch_hash = 707c28f35fc9b0e8d68c0c2800712007612f922a31da9637ce706a2159f3ddd8
+wrapdb_version = 8.10.1-1
+
+[provide]
+dependency_names = libcurl
diff --git a/win32/build.py b/win32/build.py
index 7a51298ad..69a97c2e8 100755
--- a/win32/build.py
+++ b/win32/build.py
@@ -50,7 +50,6 @@ thirdparty_libs = [
     wildmidi,
     gme,
     ffmpeg,
-    curl,
     libnfs,
     jack,
     boost,

From dcf3cf42164ba163d81934d0f2a04f75a990e072 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Mon, 11 Dec 2023 10:02:59 +0100
Subject: [PATCH 05/13] subprojects: add ogg, flac, opus

---
 android/build.py       |  3 ---
 meson.build            |  9 +++++++++
 python/build/libs.py   | 36 ++++--------------------------------
 subprojects/.gitignore |  3 +++
 subprojects/flac.wrap  | 13 +++++++++++++
 subprojects/ogg.wrap   | 13 +++++++++++++
 subprojects/opus.wrap  | 10 ++++++++++
 win32/build.py         |  3 ---
 8 files changed, 52 insertions(+), 38 deletions(-)
 create mode 100644 subprojects/flac.wrap
 create mode 100644 subprojects/ogg.wrap
 create mode 100644 subprojects/opus.wrap

diff --git a/android/build.py b/android/build.py
index 2b658cc45..b584647f9 100755
--- a/android/build.py
+++ b/android/build.py
@@ -32,9 +32,6 @@ from build.toolchain import AndroidNdkToolchain
 from build.libs import *
 thirdparty_libs = [
     libmpdclient,
-    libogg,
-    opus,
-    flac,
     libid3tag,
     libmodplug,
     wildmidi,
diff --git a/meson.build b/meson.build
index d5a084c5f..d6ebd77cf 100644
--- a/meson.build
+++ b/meson.build
@@ -14,11 +14,14 @@ project(
     # linked statically into the MPD executable.
     'curl:default_library=static',
     'expat:default_library=static',
+    'flac:default_library=static',
     'fmt:default_library=static',
     'gtest:default_library=static',
     'libmicrohttpd:default_library=static',
     'libnpupnp:default_library=static',
     'liburing:default_library=static',
+    'ogg:default_library=static',
+    'opus:default_library=static',
     'sqlite3:default_library=static',
     'vorbis:default_library=static',
 
@@ -27,12 +30,18 @@ project(
     'curl:warning_level=0',
     'expat:werror=false',
     'expat:warning_level=0',
+    'flac:werror=false',
+    'flac:warning_level=0',
     'fmt:warning_level=0',
     'gtest:warning_level=0',
     'libmicrohttpd:warning_level=0',
     'libnpupnp:warning_level=0',
     'liburing:warning_level=0',
     'sqlite3:warning_level=0',
+    'oggiopus:werror=false',
+    'ogg:warning_level=0',
+    'opus:werror=false',
+    'opus:warning_level=0',
     'vorbis:warning_level=0',
 
     # Disable subprojects features we don't need
diff --git a/python/build/libs.py b/python/build/libs.py
index 891c7f9a9..f840ef1d8 100644
--- a/python/build/libs.py
+++ b/python/build/libs.py
@@ -17,10 +17,10 @@ libmpdclient = MesonProject(
     'lib/libmpdclient.a',
 )
 
-libogg = CmakeProject(
-    'http://downloads.xiph.org/releases/ogg/libogg-1.3.5.tar.xz',
-    'c4d91be36fc8e54deae7575241e03f4211eb102afb3fc0775fbbc1b740016705',
-    'lib/libogg.a',
+libsamplerate = CmakeProject(
+    'https://github.com/libsndfile/libsamplerate/releases/download/0.2.2/libsamplerate-0.2.2.tar.xz',
+    '97c010fc25156c33cddc272c1935afab',
+    'lib/libsamplerate.a',
     [
         '-DBUILD_SHARED_LIBS=OFF',
         '-DINSTALL_DOCS=OFF',
@@ -28,34 +28,6 @@ libogg = CmakeProject(
     ],
 )
 
-opus = AutotoolsProject(
-    'https://downloads.xiph.org/releases/opus/opus-1.4.tar.gz',
-    'c9b32b4253be5ae63d1ff16eea06b94b5f0f2951b7a02aceef58e3a3ce49c51f',
-    'lib/libopus.a',
-    [
-        '--disable-shared', '--enable-static',
-        '--disable-doc',
-        '--disable-extra-programs',
-    ],
-
-    # suppress "visibility default" from opus_defines.h
-    cppflags='-DOPUS_EXPORT=',
-)
-
-flac = AutotoolsProject(
-    'http://downloads.xiph.org/releases/flac/flac-1.4.3.tar.xz',
-    '6c58e69cd22348f441b861092b825e591d0b822e106de6eb0ee4d05d27205b70',
-    'lib/libFLAC.a',
-    [
-        '--disable-shared', '--enable-static',
-        '--disable-stack-smash-protection',
-        '--disable-xmms-plugin', '--disable-cpplibs',
-        '--disable-doxygen-docs',
-        '--disable-programs',
-    ],
-    subdirs=['include', 'src/libFLAC'],
-)
-
 zlib = ZlibProject(
     ('http://zlib.net/zlib-1.3.1.tar.xz',
      'https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.xz'),
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 4baf86ff4..9f9db2a85 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -2,10 +2,13 @@
 
 /curl-*/
 /expat-*/
+/flac-*/
 /fmt-*/
 /googletest-*/
 /libmicrohttpd*
 /libnpupnp-*/
+/libogg-*/
 /liburing-*/
 /libvorbis-*/
+/opus-*/
 /sqlite-*/
diff --git a/subprojects/flac.wrap b/subprojects/flac.wrap
new file mode 100644
index 000000000..ee3647912
--- /dev/null
+++ b/subprojects/flac.wrap
@@ -0,0 +1,13 @@
+[wrap-file]
+directory = flac-1.4.3
+source_url = https://github.com/xiph/flac/releases/download/1.4.3/flac-1.4.3.tar.xz
+source_filename = flac-1.4.3.tar.xz
+source_hash = 6c58e69cd22348f441b861092b825e591d0b822e106de6eb0ee4d05d27205b70
+patch_filename = flac_1.4.3-2_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/flac_1.4.3-2/get_patch
+patch_hash = 3eace1bd0769d3e0d4ff099960160766a5185d391c8f583293b087a1f96c2a9c
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/flac_1.4.3-2/flac-1.4.3.tar.xz
+wrapdb_version = 1.4.3-2
+
+[provide]
+flac = flac_dep
diff --git a/subprojects/ogg.wrap b/subprojects/ogg.wrap
new file mode 100644
index 000000000..e7f23ebf1
--- /dev/null
+++ b/subprojects/ogg.wrap
@@ -0,0 +1,13 @@
+[wrap-file]
+directory = libogg-1.3.5
+source_url = https://downloads.xiph.org/releases/ogg/libogg-1.3.5.tar.xz
+source_filename = libogg-1.3.5.tar.xz
+source_hash = c4d91be36fc8e54deae7575241e03f4211eb102afb3fc0775fbbc1b740016705
+patch_filename = ogg_1.3.5-6_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/ogg_1.3.5-6/get_patch
+patch_hash = 8be6dcd5f93bbf9c0b9c8ec1fa29810226a60f846383074ca05b313a248e78b2
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/ogg_1.3.5-6/libogg-1.3.5.tar.xz
+wrapdb_version = 1.3.5-6
+
+[provide]
+ogg = libogg_dep
diff --git a/subprojects/opus.wrap b/subprojects/opus.wrap
new file mode 100644
index 000000000..357643b19
--- /dev/null
+++ b/subprojects/opus.wrap
@@ -0,0 +1,10 @@
+[wrap-file]
+directory = opus-1.5.2
+source_url = https://downloads.xiph.org/releases/opus/opus-1.5.2.tar.gz
+source_filename = opus-1.5.2.tar.gz
+source_hash = 65c1d2f78b9f2fb20082c38cbe47c951ad5839345876e46941612ee87f9a7ce1
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/opus_1.5.2-1/opus-1.5.2.tar.gz
+wrapdb_version = 1.5.2-1
+
+[provide]
+opus = opus_dep
diff --git a/win32/build.py b/win32/build.py
index 69a97c2e8..8dd91fe70 100755
--- a/win32/build.py
+++ b/win32/build.py
@@ -39,9 +39,6 @@ root_path = os.path.join(arch_path, 'root')
 from build.libs import *
 thirdparty_libs = [
     libmpdclient,
-    libogg,
-    opus,
-    flac,
     zlib,
     libid3tag,
     liblame,

From 9723af3f3583801ab63545270efe0efc24e8d00c Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Mon, 11 Dec 2023 10:58:10 +0100
Subject: [PATCH 06/13] subprojects: add openssl

---
 android/build.py         |  1 -
 meson.build              |  5 +++
 python/build/libs.py     |  8 -----
 python/build/openssl.py  | 78 ----------------------------------------
 subprojects/.gitignore   |  1 +
 subprojects/openssl.wrap | 15 ++++++++
 6 files changed, 21 insertions(+), 87 deletions(-)
 delete mode 100644 python/build/openssl.py
 create mode 100644 subprojects/openssl.wrap

diff --git a/android/build.py b/android/build.py
index b584647f9..f17c0ee84 100755
--- a/android/build.py
+++ b/android/build.py
@@ -37,7 +37,6 @@ thirdparty_libs = [
     wildmidi,
     gme,
     ffmpeg,
-    openssl,
     libnfs,
     boost,
 ]
diff --git a/meson.build b/meson.build
index d6ebd77cf..8f6c45f59 100644
--- a/meson.build
+++ b/meson.build
@@ -21,6 +21,7 @@ project(
     'libnpupnp:default_library=static',
     'liburing:default_library=static',
     'ogg:default_library=static',
+    'openssl:default_library=static',
     'opus:default_library=static',
     'sqlite3:default_library=static',
     'vorbis:default_library=static',
@@ -40,6 +41,8 @@ project(
     'sqlite3:warning_level=0',
     'oggiopus:werror=false',
     'ogg:warning_level=0',
+    'openssl:werror=false',
+    'openssl:warning_level=0',
     'opus:werror=false',
     'opus:warning_level=0',
     'vorbis:warning_level=0',
@@ -72,6 +75,8 @@ project(
     'curl:smtp=disabled',
     'curl:telnet=disabled',
     'curl:tftp=disabled',
+    'openssl:build_cli=false',
+    'openssl:asm=disabled',
     'opus:docs=disabled',
     'opus:extra-programs=disabled',
     'opus:tests=disabled',
diff --git a/python/build/libs.py b/python/build/libs.py
index f840ef1d8..9952eda74 100644
--- a/python/build/libs.py
+++ b/python/build/libs.py
@@ -7,7 +7,6 @@ from build.meson import MesonProject
 from build.cmake import CmakeProject
 from build.autotools import AutotoolsProject
 from build.ffmpeg import FfmpegProject
-from build.openssl import OpenSSLProject
 from build.boost import BoostProject
 from build.jack import JackProject
 
@@ -574,13 +573,6 @@ ffmpeg = FfmpegProject(
     ],
 )
 
-openssl = OpenSSLProject(
-    ('https://www.openssl.org/source/openssl-3.1.4.tar.gz',
-     'https://artfiles.org/openssl.org/source/openssl-3.1.4.tar.gz'),
-    '840af5366ab9b522bde525826be3ef0fb0af81c6a9ebd84caa600fea1731eee3',
-    'include/openssl/ossl_typ.h',
-)
-
 libnfs = AutotoolsProject(
     'https://github.com/sahlberg/libnfs/archive/libnfs-5.0.3.tar.gz',
     'd945cb4f4c8f82ee1f3640893a168810f794a28e1010bb007ec5add345e9df3e',
diff --git a/python/build/openssl.py b/python/build/openssl.py
deleted file mode 100644
index 8b0224598..000000000
--- a/python/build/openssl.py
+++ /dev/null
@@ -1,78 +0,0 @@
-import subprocess
-from typing import Optional, Sequence, Union
-
-from build.makeproject import MakeProject
-from .toolchain import AnyToolchain
-
-class OpenSSLProject(MakeProject):
-    def __init__(self, url: Union[str, Sequence[str]], md5: str, installed: str,
-                 **kwargs):
-        MakeProject.__init__(self, url, md5, installed, install_target='install_dev', **kwargs)
-
-    def get_make_args(self, toolchain: AnyToolchain) -> list[str]:
-        return MakeProject.get_make_args(self, toolchain) + [
-            'CC=' + toolchain.cc,
-            'CFLAGS=' + toolchain.cflags,
-            'CPPFLAGS=' + toolchain.cppflags,
-            'AR=' + toolchain.ar,
-            'RANLIB=' + toolchain.ranlib,
-            'build_libs',
-        ]
-
-    def get_make_install_args(self, toolchain: AnyToolchain) -> list[str]:
-        # OpenSSL's Makefile runs "ranlib" during installation
-        return MakeProject.get_make_install_args(self, toolchain) + [
-            'RANLIB=' + toolchain.ranlib,
-        ]
-
-    def _build(self, toolchain: AnyToolchain) -> None:
-        src = self.unpack(toolchain, out_of_tree=False)
-
-        # OpenSSL has a weird target architecture scheme with lots of
-        # hard-coded architectures; this table translates between our
-        # host triplet and the OpenSSL target
-        openssl_archs = {
-            # not using "android-*" because those OpenSSL targets want
-            # to know where the SDK is, but our own build scripts
-            # prepared everything already to look like a regular Linux
-            # build
-            'armv7a-linux-androideabi': 'linux-generic32',
-            'aarch64-linux-android': 'linux-aarch64',
-            'i686-linux-android': 'linux-x86-clang',
-            'x86_64-linux-android': 'linux-x86_64-clang',
-
-            # generic Linux
-            'arm-linux-gnueabihf': 'linux-generic32',
-
-            # Windows
-            'i686-w64-mingw32': 'mingw',
-            'x86_64-w64-mingw32': 'mingw64',
-
-            # Apple
-            'x86_64-apple-darwin': 'darwin64-x86_64-cc',
-            'aarch64-apple-darwin': 'darwin64-arm64-cc',
-        }
-
-        configure = [
-            './Configure',
-            'no-shared',
-            'no-module',
-            'no-engine',
-            'no-static-engine',
-            'no-async',
-            'no-tests',
-            'no-makedepend',
-            '--libdir=lib', # no "lib64" on amd64, please
-            '--prefix=' + toolchain.install_prefix,
-        ]
-
-        if toolchain.is_windows:
-            # workaround for build failures
-            configure.append('no-asm')
-
-        if toolchain.host_triplet is not None:
-            configure.append(openssl_archs[toolchain.host_triplet])
-            configure.append(f'--cross-compile-prefix={toolchain.host_triplet}-')
-
-        subprocess.check_call(configure, cwd=src, env=toolchain.env)
-        self.build_make(toolchain, src)
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 9f9db2a85..416503efb 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -10,5 +10,6 @@
 /libogg-*/
 /liburing-*/
 /libvorbis-*/
+/openssl-*/
 /opus-*/
 /sqlite-*/
diff --git a/subprojects/openssl.wrap b/subprojects/openssl.wrap
new file mode 100644
index 000000000..873d55106
--- /dev/null
+++ b/subprojects/openssl.wrap
@@ -0,0 +1,15 @@
+[wrap-file]
+directory = openssl-3.0.8
+source_url = https://www.openssl.org/source/openssl-3.0.8.tar.gz
+source_filename = openssl-3.0.8.tar.gz
+source_hash = 6c13d2bf38fdf31eac3ce2a347073673f5d63263398f1f69d0df4a41253e4b3e
+patch_filename = openssl_3.0.8-3_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/openssl_3.0.8-3/get_patch
+patch_hash = 300da189e106942347d61a4a4295aa2edbcf06184f8d13b4cee0bed9fb936963
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/openssl_3.0.8-3/openssl-3.0.8.tar.gz
+wrapdb_version = 3.0.8-3
+
+[provide]
+libcrypto = libcrypto_dep
+libssl = libssl_dep
+openssl = openssl_dep

From 56cc2f4c65d5a73d670136ce08e7983b8ccd0efa Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Wed, 20 Dec 2023 17:06:15 +0100
Subject: [PATCH 07/13] subprojects: add libmpdclient wrap

---
 android/build.py              | 1 -
 meson.build                   | 3 +++
 python/build/libs.py          | 6 ------
 subprojects/.gitignore        | 1 +
 subprojects/libmpdclient.wrap | 6 ++++++
 win32/build.py                | 1 -
 6 files changed, 10 insertions(+), 8 deletions(-)
 create mode 100644 subprojects/libmpdclient.wrap

diff --git a/android/build.py b/android/build.py
index f17c0ee84..434b5988b 100755
--- a/android/build.py
+++ b/android/build.py
@@ -31,7 +31,6 @@ from build.toolchain import AndroidNdkToolchain
 # a list of third-party libraries to be used by MPD on Android
 from build.libs import *
 thirdparty_libs = [
-    libmpdclient,
     libid3tag,
     libmodplug,
     wildmidi,
diff --git a/meson.build b/meson.build
index 8f6c45f59..fa204fc71 100644
--- a/meson.build
+++ b/meson.build
@@ -18,6 +18,7 @@ project(
     'fmt:default_library=static',
     'gtest:default_library=static',
     'libmicrohttpd:default_library=static',
+    'libmpdclient:default_library=static',
     'libnpupnp:default_library=static',
     'liburing:default_library=static',
     'ogg:default_library=static',
@@ -75,6 +76,8 @@ project(
     'curl:smtp=disabled',
     'curl:telnet=disabled',
     'curl:tftp=disabled',
+    'libmpdclient:documentation=false',
+    'libmpdclient:test=false',
     'openssl:build_cli=false',
     'openssl:asm=disabled',
     'opus:docs=disabled',
diff --git a/python/build/libs.py b/python/build/libs.py
index 9952eda74..6f10393bf 100644
--- a/python/build/libs.py
+++ b/python/build/libs.py
@@ -10,12 +10,6 @@ from build.ffmpeg import FfmpegProject
 from build.boost import BoostProject
 from build.jack import JackProject
 
-libmpdclient = MesonProject(
-    'https://www.musicpd.org/download/libmpdclient/2/libmpdclient-2.20.tar.xz',
-    '18793f68e939c3301e34d8fcadea1f7daa24143941263cecadb80126194e277d',
-    'lib/libmpdclient.a',
-)
-
 libsamplerate = CmakeProject(
     'https://github.com/libsndfile/libsamplerate/releases/download/0.2.2/libsamplerate-0.2.2.tar.xz',
     '97c010fc25156c33cddc272c1935afab',
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 416503efb..0263a7068 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -6,6 +6,7 @@
 /fmt-*/
 /googletest-*/
 /libmicrohttpd*
+/libmpdclient/
 /libnpupnp-*/
 /libogg-*/
 /liburing-*/
diff --git a/subprojects/libmpdclient.wrap b/subprojects/libmpdclient.wrap
new file mode 100644
index 000000000..2610fb5df
--- /dev/null
+++ b/subprojects/libmpdclient.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+url = https://github.com/MusicPlayerDaemon/libmpdclient
+revision = v2.22
+
+[provide]
+libmpdclient = libmpdclient_dep
diff --git a/win32/build.py b/win32/build.py
index 8dd91fe70..07669a28d 100755
--- a/win32/build.py
+++ b/win32/build.py
@@ -38,7 +38,6 @@ root_path = os.path.join(arch_path, 'root')
 # a list of third-party libraries to be used by MPD on Android
 from build.libs import *
 thirdparty_libs = [
-    libmpdclient,
     zlib,
     libid3tag,
     liblame,

From eb3cd7bed329f2a9c4bb2a9f71a030cd71932428 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Mon, 11 Dec 2023 11:06:52 +0100
Subject: [PATCH 08/13] subprojects: add lame

---
 meson.build                     |  5 +++++
 python/build/libs.py            | 11 -----------
 src/encoder/plugins/meson.build | 14 +++++++++++++-
 subprojects/.gitignore          |  1 +
 subprojects/lame.wrap           | 14 ++++++++++++++
 win32/build.py                  |  1 -
 6 files changed, 33 insertions(+), 13 deletions(-)
 create mode 100644 subprojects/lame.wrap

diff --git a/meson.build b/meson.build
index fa204fc71..ac9a74900 100644
--- a/meson.build
+++ b/meson.build
@@ -17,6 +17,7 @@ project(
     'flac:default_library=static',
     'fmt:default_library=static',
     'gtest:default_library=static',
+    'lame:default_library=static',
     'libmicrohttpd:default_library=static',
     'libmpdclient:default_library=static',
     'libnpupnp:default_library=static',
@@ -36,6 +37,8 @@ project(
     'flac:warning_level=0',
     'fmt:warning_level=0',
     'gtest:warning_level=0',
+    'lame:werror=false',
+    'lame:warning_level=0',
     'libmicrohttpd:warning_level=0',
     'libnpupnp:warning_level=0',
     'liburing:warning_level=0',
@@ -76,6 +79,8 @@ project(
     'curl:smtp=disabled',
     'curl:telnet=disabled',
     'curl:tftp=disabled',
+    'lame:decoder=false',
+    'lame:tools=disabled',
     'libmpdclient:documentation=false',
     'libmpdclient:test=false',
     'openssl:build_cli=false',
diff --git a/python/build/libs.py b/python/build/libs.py
index 6f10393bf..f3fe4d97e 100644
--- a/python/build/libs.py
+++ b/python/build/libs.py
@@ -59,17 +59,6 @@ libmad = AutotoolsProject(
     autogen=True,
 )
 
-liblame = AutotoolsProject(
-    'http://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz',
-    'ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e',
-    'lib/libmp3lame.a',
-    [
-        '--disable-shared', '--enable-static',
-        '--disable-gtktest', '--disable-analyzer-hooks',
-        '--disable-decoder', '--disable-frontend',
-    ],
-)
-
 libmodplug = AutotoolsProject(
     'https://downloads.sourceforge.net/modplug-xmms/libmodplug/0.8.9.0/libmodplug-0.8.9.0.tar.gz',
     '457ca5a6c179656d66c01505c0d95fafaead4329b9dbaa0f997d00a3508ad9de',
diff --git a/src/encoder/plugins/meson.build b/src/encoder/plugins/meson.build
index 854c736bb..b0c4aed7b 100644
--- a/src/encoder/plugins/meson.build
+++ b/src/encoder/plugins/meson.build
@@ -16,7 +16,19 @@ if libvorbisenc_dep.found()
   encoder_plugins_sources += 'VorbisEncoderPlugin.cxx'
 endif
 
-liblame_dep = c_compiler.find_library('mp3lame', required: get_option('lame'))
+if not get_option('lame').disabled()
+  # LAME doesn't have a pkg-config file so we have to use
+  # find_library()
+  liblame_dep = c_compiler.find_library('mp3lame', required: false)
+  if not liblame_dep.found()
+    # only if that was not found, use dependency() which may use the
+    # LAME subproject
+    liblame_dep = dependency('mp3lame', required: get_option('lame'))
+  endif
+else
+  liblame_dep = dependency('', required: false)
+endif
+
 encoder_features.set('ENABLE_LAME', liblame_dep.found())
 if liblame_dep.found()
   encoder_plugins_sources += 'LameEncoderPlugin.cxx'
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index 0263a7068..fc9a7c17b 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -5,6 +5,7 @@
 /flac-*/
 /fmt-*/
 /googletest-*/
+/lame-*/
 /libmicrohttpd*
 /libmpdclient/
 /libnpupnp-*/
diff --git a/subprojects/lame.wrap b/subprojects/lame.wrap
new file mode 100644
index 000000000..9719ed4f4
--- /dev/null
+++ b/subprojects/lame.wrap
@@ -0,0 +1,14 @@
+[wrap-file]
+directory = lame-3.100
+source_url = http://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
+source_filename = lame-3.100.tar.gz
+source_hash = ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e
+patch_filename = lame_3.100-9_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/lame_3.100-9/get_patch
+patch_hash = bedda639a621b2046fb04110a51870d6c9640f2f4282b5d877bc452e9943c22e
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/lame_3.100-9/lame-3.100.tar.gz
+wrapdb_version = 3.100-9
+
+[provide]
+mp3lame = lame_dep
+mpglib = mpglib_dep
diff --git a/win32/build.py b/win32/build.py
index 07669a28d..4321c9fcc 100755
--- a/win32/build.py
+++ b/win32/build.py
@@ -40,7 +40,6 @@ from build.libs import *
 thirdparty_libs = [
     zlib,
     libid3tag,
-    liblame,
     libmodplug,
     libopenmpt,
     wildmidi,

From 7770accee0db37b474e5862fdc4cb724a1096ec8 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Fri, 22 Dec 2023 17:17:59 +0100
Subject: [PATCH 09/13] python/build/libs.py: remove libmad (unused)

---
 python/build/libs.py | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/python/build/libs.py b/python/build/libs.py
index f3fe4d97e..c337193cb 100644
--- a/python/build/libs.py
+++ b/python/build/libs.py
@@ -46,19 +46,6 @@ libid3tag = AutotoolsProject(
     }
 )
 
-libmad = AutotoolsProject(
-    'ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz',
-    '1be543bc30c56fb6bea1d7bf6a64e66c',
-    'lib/libmad.a',
-    [
-        '--disable-shared', '--enable-static',
-
-        # without this, libmad's configure.ac ignores -O* and -f*
-        '--disable-debugging',
-    ],
-    autogen=True,
-)
-
 libmodplug = AutotoolsProject(
     'https://downloads.sourceforge.net/modplug-xmms/libmodplug/0.8.9.0/libmodplug-0.8.9.0.tar.gz',
     '457ca5a6c179656d66c01505c0d95fafaead4329b9dbaa0f997d00a3508ad9de',

From 5b5b101c568dc9dcfce56dd3f517fd83d1cc1574 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Fri, 22 Dec 2023 17:10:57 +0100
Subject: [PATCH 10/13] subprojects: add id3tag

---
 android/build.py                            |  1 -
 meson.build                                 |  3 ++
 python/build/libs.py                        | 18 ---------
 subprojects/.gitignore                      |  1 +
 subprojects/id3tag.wrap                     |  9 +++++
 subprojects/packagefiles/id3tag/meson.build | 41 +++++++++++++++++++++
 win32/build.py                              |  1 -
 7 files changed, 54 insertions(+), 20 deletions(-)
 create mode 100644 subprojects/id3tag.wrap
 create mode 100644 subprojects/packagefiles/id3tag/meson.build

diff --git a/android/build.py b/android/build.py
index 434b5988b..3a4e528bb 100755
--- a/android/build.py
+++ b/android/build.py
@@ -31,7 +31,6 @@ from build.toolchain import AndroidNdkToolchain
 # a list of third-party libraries to be used by MPD on Android
 from build.libs import *
 thirdparty_libs = [
-    libid3tag,
     libmodplug,
     wildmidi,
     gme,
diff --git a/meson.build b/meson.build
index ac9a74900..6777a12f7 100644
--- a/meson.build
+++ b/meson.build
@@ -17,6 +17,7 @@ project(
     'flac:default_library=static',
     'fmt:default_library=static',
     'gtest:default_library=static',
+    'id3tag:default_library=static',
     'lame:default_library=static',
     'libmicrohttpd:default_library=static',
     'libmpdclient:default_library=static',
@@ -37,6 +38,8 @@ project(
     'flac:warning_level=0',
     'fmt:warning_level=0',
     'gtest:warning_level=0',
+    'id3tag:werror=false',
+    'id3tag:warning_level=0',
     'lame:werror=false',
     'lame:warning_level=0',
     'libmicrohttpd:warning_level=0',
diff --git a/python/build/libs.py b/python/build/libs.py
index c337193cb..3f53ba11b 100644
--- a/python/build/libs.py
+++ b/python/build/libs.py
@@ -28,24 +28,6 @@ zlib = ZlibProject(
     'lib/libz.a',
 )
 
-libid3tag = AutotoolsProject(
-    'ftp://ftp.mars.org/pub/mpeg/libid3tag-0.15.1b.tar.gz',
-    'e5808ad997ba32c498803822078748c3',
-    'lib/libid3tag.a',
-    [
-        '--disable-shared', '--enable-static',
-
-        # without this, libid3tag's configure.ac ignores -O* and -f*
-        '--disable-debugging',
-    ],
-    autogen=True,
-
-    edits={
-        # fix bug in libid3tag's configure.ac which discards all but the last optimization flag
-        'configure.ac': lambda data: re.sub(r'optimize="\$1"', r'optimize="$optimize $1"', data, count=1),
-    }
-)
-
 libmodplug = AutotoolsProject(
     'https://downloads.sourceforge.net/modplug-xmms/libmodplug/0.8.9.0/libmodplug-0.8.9.0.tar.gz',
     '457ca5a6c179656d66c01505c0d95fafaead4329b9dbaa0f997d00a3508ad9de',
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
index fc9a7c17b..79b60614e 100644
--- a/subprojects/.gitignore
+++ b/subprojects/.gitignore
@@ -6,6 +6,7 @@
 /fmt-*/
 /googletest-*/
 /lame-*/
+/libid3tag-*/
 /libmicrohttpd*
 /libmpdclient/
 /libnpupnp-*/
diff --git a/subprojects/id3tag.wrap b/subprojects/id3tag.wrap
new file mode 100644
index 000000000..5723b528e
--- /dev/null
+++ b/subprojects/id3tag.wrap
@@ -0,0 +1,9 @@
+[wrap-file]
+directory = libid3tag-0.15.1b
+source_url = ftp://ftp.mars.org/pub/mpeg/libid3tag-0.15.1b.tar.gz
+source_filename = libid3tag-0.15.1b.tar.gz
+source_hash = 63da4f6e7997278f8a3fef4c6a372d342f705051d1eeb6a46a86b03610e26151
+patch_directory = id3tag
+
+[provide]
+id3tag = libid3tag_dep
diff --git a/subprojects/packagefiles/id3tag/meson.build b/subprojects/packagefiles/id3tag/meson.build
new file mode 100644
index 000000000..f35cee41d
--- /dev/null
+++ b/subprojects/packagefiles/id3tag/meson.build
@@ -0,0 +1,41 @@
+fs = import('fs')
+
+project(
+  'libid3tag', 'c',
+  version: '0.15.1b',
+  license: 'GPLv2+',
+)
+
+compiler = meson.get_compiler('c')
+
+conf = configuration_data()
+conf.set('HAVE_ASSERT_H', true)
+conf.set('HAVE_FTRUNCATE', compiler.has_function('ftruncate'))
+conf.set('HAVE_INTTYPES_H', true)
+conf.set('HAVE_LIBZ', false) # TODO
+conf.set('HAVE_STDINT_H', true)
+conf.set('HAVE_STDIO_H', true)
+conf.set('HAVE_STDLIB_H', true)
+conf.set('HAVE_STRINGS_H', true)
+conf.set('HAVE_STRING_H', true)
+conf.set('HAVE_SYS_STAT_H', compiler.has_header('sys/stat.h'))
+conf.set('HAVE_SYS_TYPES_H', true)
+conf.set('HAVE_UNISTD_H', compiler.has_header('unistd.h'))
+configure_file(output: 'config.h', configuration: conf)
+
+add_project_arguments('-DHAVE_CONFIG_H', language: 'c')
+
+libid3tag = static_library(
+  'id3tag',
+  'version.c', 'ucs4.c', 'latin1.c', 'utf16.c', 'utf8.c',
+  'parse.c', 'render.c', 'field.c', 'frametype.c', 'compat.c',
+  'genre.c', 'frame.c', 'crc.c', 'util.c', 'tag.c', 'file.c',
+)
+
+copy = fs.copyfile('id3tag.h', 'include/id3tag.h')
+
+libid3tag_dep = declare_dependency(
+  link_with: libid3tag,
+  dependencies: [copy]
+  include_directories: include_directories('include'),
+)
diff --git a/win32/build.py b/win32/build.py
index 4321c9fcc..5688601cc 100755
--- a/win32/build.py
+++ b/win32/build.py
@@ -39,7 +39,6 @@ root_path = os.path.join(arch_path, 'root')
 from build.libs import *
 thirdparty_libs = [
     zlib,
-    libid3tag,
     libmodplug,
     libopenmpt,
     wildmidi,

From 3798d11a8d4e0e9e9090876cabaa37b1465e3244 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Tue, 28 Jan 2025 19:23:20 +0100
Subject: [PATCH 11/13] .github/workflows/build.yml: disable NFS support

Homebrew comes with libnfs 6 which is not supported by MPD 0.23.
---
 .github/workflows/build.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 436778636..7c9c5433b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -122,7 +122,6 @@ jobs:
             googletest \
             icu4c \
             ffmpeg \
-            libnfs \
             yajl \
             libupnp \
             libid3tag \

From 0aeda01ba6d22a8d9fc583faa67ffc6473869a43 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Mon, 6 May 2024 13:29:29 +0200
Subject: [PATCH 12/13] lib/yajl: drop "yajl/" prefix from #include paths

According to the yajl API documentation, #include lines should have
the "yajl/" path prefix, but the actual pkg-config file contains:

 includedir=${dollar}{prefix}/include/yajl

.. which already contains this directory name, and thus the "yajl/"
prefix cannot work.  Unfortunately, the yajl project hasn't been
maintained for nearly 10 years, and there's little chance this bug
will ever be fixed.
---
 src/lib/yajl/Callbacks.hxx | 7 ++-----
 src/lib/yajl/Gen.hxx       | 7 ++-----
 src/lib/yajl/Handle.hxx    | 7 ++-----
 3 files changed, 6 insertions(+), 15 deletions(-)

diff --git a/src/lib/yajl/Callbacks.hxx b/src/lib/yajl/Callbacks.hxx
index 643c3a0cd..0fde0fcf8 100644
--- a/src/lib/yajl/Callbacks.hxx
+++ b/src/lib/yajl/Callbacks.hxx
@@ -27,13 +27,12 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef YAJL_CALLBACKS_HXX
-#define YAJL_CALLBACKS_HXX
+#pragma once
 
 #include "util/Cast.hxx"
 #include "util/StringView.hxx"
 
-#include <yajl/yajl_parse.h>
+#include <yajl_parse.h>
 
 namespace Yajl {
 
@@ -81,5 +80,3 @@ struct CallbacksWrapper {
 };
 
 } // namespace Yajl
-
-#endif
diff --git a/src/lib/yajl/Gen.hxx b/src/lib/yajl/Gen.hxx
index 14ea7ec7e..f7a88e187 100644
--- a/src/lib/yajl/Gen.hxx
+++ b/src/lib/yajl/Gen.hxx
@@ -27,12 +27,11 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef YAJL_GEN_HXX
-#define YAJL_GEN_HXX
+#pragma once
 
 #include "util/ConstBuffer.hxx"
 
-#include <yajl/yajl_gen.h>
+#include <yajl_gen.h>
 
 #include <algorithm>
 #include <string_view>
@@ -101,5 +100,3 @@ public:
 };
 
 } // namespace Yajl
-
-#endif
diff --git a/src/lib/yajl/Handle.hxx b/src/lib/yajl/Handle.hxx
index 6b87883ba..abd5989e0 100644
--- a/src/lib/yajl/Handle.hxx
+++ b/src/lib/yajl/Handle.hxx
@@ -27,10 +27,9 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef YAJL_HANDLE_HXX
-#define YAJL_HANDLE_HXX
+#pragma once
 
-#include <yajl/yajl_parse.h>
+#include <yajl_parse.h>
 
 #include <utility>
 
@@ -82,5 +81,3 @@ private:
 };
 
 } // namespace Yajl
-
-#endif

From cf9a2eb5088e6a30fa7486e62abae6b75e68a233 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Tue, 28 Jan 2025 19:31:14 +0100
Subject: [PATCH 13/13] .github/workflows/build.yml: disable yajl on macOS

This yajl on Homebrew comes with broken headers:

 /opt/homebrew/Cellar/yajl/2.1.0/include/yajl/yajl_parse.h:22:10: fatal error: 'yajl/yajl_common.h' file not found
 #include <yajl/yajl_common.h>
          ^~~~~~~~~~~~~~~~~~~~
---
 .github/workflows/build.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 7c9c5433b..018c3ab0a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -122,7 +122,6 @@ jobs:
             googletest \
             icu4c \
             ffmpeg \
-            yajl \
             libupnp \
             libid3tag \
             chromaprint \