From f55e0df614f3e60d28d459c8e7a8821cf049ebe1 Mon Sep 17 00:00:00 2001 From: Max Kellermann 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 e1cc8adcf6..8b69f188e4 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 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 467da596b5..5788e6bb73 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 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 24f8cf3994..c675a64495 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 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 8164682e1d..2b658cc45c 100755 --- a/android/build.py +++ b/android/build.py @@ -41,7 +41,6 @@ gme, ffmpeg, openssl, - curl, libnfs, boost, ] diff --git a/meson.build b/meson.build index f9749468b6..d5a084c5fb 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 2d9a752fb8..891c7f9a93 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -609,41 +609,6 @@ '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 8c3e6202a6..0000000000 --- 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 35b83b6215..0000000000 --- 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 979436b3c3..0000000000 --- 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 c675a64495..4baf86ff4d 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 0000000000..f7e384b85c --- /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 7a51298ad2..69a97c2e85 100755 --- a/win32/build.py +++ b/win32/build.py @@ -50,7 +50,6 @@ wildmidi, gme, ffmpeg, - curl, libnfs, jack, boost, From dcf3cf42164ba163d81934d0f2a04f75a990e072 Mon Sep 17 00:00:00 2001 From: Max Kellermann 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 2b658cc45c..b584647f9e 100755 --- a/android/build.py +++ b/android/build.py @@ -32,9 +32,6 @@ from build.libs import * thirdparty_libs = [ libmpdclient, - libogg, - opus, - flac, libid3tag, libmodplug, wildmidi, diff --git a/meson.build b/meson.build index d5a084c5fb..d6ebd77cff 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 891c7f9a93..f840ef1d85 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -17,10 +17,10 @@ '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 @@ ], ) -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 4baf86ff4d..9f9db2a85f 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 0000000000..ee36479126 --- /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 0000000000..e7f23ebf11 --- /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 0000000000..357643b19c --- /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 69a97c2e85..8dd91fe703 100755 --- a/win32/build.py +++ b/win32/build.py @@ -39,9 +39,6 @@ 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 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 b584647f9e..f17c0ee84f 100755 --- a/android/build.py +++ b/android/build.py @@ -37,7 +37,6 @@ wildmidi, gme, ffmpeg, - openssl, libnfs, boost, ] diff --git a/meson.build b/meson.build index d6ebd77cff..8f6c45f591 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 f840ef1d85..9952eda746 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -7,7 +7,6 @@ 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 @@ ], ) -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 8b0224598e..0000000000 --- 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 9f9db2a85f..416503efb0 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 0000000000..873d55106e --- /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 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 f17c0ee84f..434b5988b4 100755 --- a/android/build.py +++ b/android/build.py @@ -31,7 +31,6 @@ # 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 8f6c45f591..fa204fc714 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 9952eda746..6f10393bf3 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -10,12 +10,6 @@ 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 416503efb0..0263a70686 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 0000000000..2610fb5dfd --- /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 8dd91fe703..07669a28d0 100755 --- a/win32/build.py +++ b/win32/build.py @@ -38,7 +38,6 @@ # 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 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 fa204fc714..ac9a749002 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 6f10393bf3..f3fe4d97e4 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -59,17 +59,6 @@ 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 854c736bb3..b0c4aed7bd 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 0263a70686..fc9a7c17b6 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 0000000000..9719ed4f48 --- /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 07669a28d0..4321c9fcc3 100755 --- a/win32/build.py +++ b/win32/build.py @@ -40,7 +40,6 @@ thirdparty_libs = [ zlib, libid3tag, - liblame, libmodplug, libopenmpt, wildmidi, From 7770accee0db37b474e5862fdc4cb724a1096ec8 Mon Sep 17 00:00:00 2001 From: Max Kellermann 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 f3fe4d97e4..c337193cb9 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -46,19 +46,6 @@ } ) -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 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 434b5988b4..3a4e528bb5 100755 --- a/android/build.py +++ b/android/build.py @@ -31,7 +31,6 @@ # 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 ac9a749002..6777a12f78 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 c337193cb9..3f53ba11bc 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -28,24 +28,6 @@ '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 fc9a7c17b6..79b60614e3 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 0000000000..5723b528e4 --- /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 0000000000..f35cee41dd --- /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 4321c9fcc3..5688601cc0 100755 --- a/win32/build.py +++ b/win32/build.py @@ -39,7 +39,6 @@ from build.libs import * thirdparty_libs = [ zlib, - libid3tag, libmodplug, libopenmpt, wildmidi, From 3798d11a8d4e0e9e9090876cabaa37b1465e3244 Mon Sep 17 00:00:00 2001 From: Max Kellermann 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 4367786367..7c9c5433b2 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 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 643c3a0cd7..0fde0fcf8e 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 +#include 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 14ea7ec7ec..f7a88e1873 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 +#include #include #include @@ -101,5 +100,3 @@ public: }; } // namespace Yajl - -#endif diff --git a/src/lib/yajl/Handle.hxx b/src/lib/yajl/Handle.hxx index 6b87883ba1..abd5989e05 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 +#include #include @@ -82,5 +81,3 @@ private: }; } // namespace Yajl - -#endif From cf9a2eb5088e6a30fa7486e62abae6b75e68a233 Mon Sep 17 00:00:00 2001 From: Max Kellermann 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 ^~~~~~~~~~~~~~~~~~~~ --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7c9c5433b2..018c3ab0ac 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -122,7 +122,6 @@ jobs: googletest \ icu4c \ ffmpeg \ - yajl \ libupnp \ libid3tag \ chromaprint \