From 3cc770a00b3c0cdb89dc820cbfbf011ca0775e7e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 23 Jan 2023 13:18:40 +0100 Subject: [PATCH] remove obsolete Boost dependency Boost makes building a piece of software much more difficult than necessary. It's a huge library, and just uncompressing it takes a considerable amount of time. MPD only used a tiny fraction of it, yet its header bloat made the MPD build very slow. Locating Boost was difficult due to its arcane build system and its resistance to use pkg-config; it's always a special case. MPD could never use features of newer Boost versions because Linux distributions always shipped old Boost versions. Boost made everything complicated and slow. So, finally, after getting rid of GLib (commit ccdb94b06c), switching to C++ and using Boost (commit 0801b3f495a), we've finally get rid of it 8 years later. Unfortunately, I had to reimplement parts of it along the way (e.g. IntrusiveList). Kind of NIH, but on the other hand, compiling MPD has become much easier for users. --- .github/workflows/build.yml | 3 +-- NEWS | 1 + android/build.py | 1 - doc/user.rst | 2 -- meson.build | 7 ------- python/build/boost.py | 28 ---------------------------- python/build/libs.py | 7 ------- python/build/meson.py | 3 --- src/apple/meson.build | 3 --- src/db/meson.build | 1 - src/input/meson.build | 4 ---- src/output/plugins/meson.build | 3 +-- src/storage/meson.build | 1 - win32/build.py | 1 - 14 files changed, 3 insertions(+), 62 deletions(-) delete mode 100644 python/build/boost.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a26660f00..aec272782 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,7 +60,7 @@ jobs: sudo apt-get update sudo apt-get install -y --no-install-recommends \ ${{ matrix.cxx }} ${{matrix.cc }} \ - libfmt-dev libboost-dev \ + libfmt-dev \ libgtest-dev \ libpcre2-dev \ libsystemd-dev libdbus-1-dev \ @@ -137,7 +137,6 @@ jobs: brew install \ meson ninja \ fmt \ - boost \ googletest \ icu4c \ ffmpeg \ diff --git a/NEWS b/NEWS index c106d80fb..788f93d53 100644 --- a/NEWS +++ b/NEWS @@ -25,6 +25,7 @@ ver 0.24 (not yet released) - GCC 10 or clang 11 (or newer) recommended * static partition configuration * remove Haiku support +* remove Boost dependency * require libfmt 7 or later ver 0.23.12 (2023/01/17) diff --git a/android/build.py b/android/build.py index aa4f8b193..e69cc8a8d 100755 --- a/android/build.py +++ b/android/build.py @@ -160,7 +160,6 @@ thirdparty_libs = [ openssl, curl, libnfs, - boost, ] # build the third-party libraries diff --git a/doc/user.rst b/doc/user.rst index 4170808c8..d90d090dc 100644 --- a/doc/user.rst +++ b/doc/user.rst @@ -60,7 +60,6 @@ In any case, you need: * a C++20 compiler (e.g. GCC 10 or clang 11) * `Meson 0.56.0 `__ and `Ninja `__ -* Boost 1.58 * pkg-config Each plugin usually needs a codec library, which you also need to @@ -95,7 +94,6 @@ For example, the following installs a fairly complete list of build dependencies libsqlite3-dev \ libsystemd-dev \ libgtest-dev \ - libboost-dev \ libicu-dev \ libchromaprint-dev \ libgcrypt20-dev diff --git a/meson.build b/meson.build index 226dce99b..5aefd0725 100644 --- a/meson.build +++ b/meson.build @@ -240,13 +240,6 @@ inc = include_directories( '.', ) -boost_dep = dependency('boost', version: '>= 1.58') -if boost_dep.version() == '1.67' - # https://github.com/MusicPlayerDaemon/MPD/pull/384 - # https://github.com/boostorg/lockfree/commit/12726cda009a855073b9bedbdce57b6ce7763da2 - warning('Your Boost version 1.67 is known to be buggy, and the MPD build will fail. Please upgrade to Boost 1.68 or later.') -endif - subdir('src/lib/fmt') log = static_library( diff --git a/python/build/boost.py b/python/build/boost.py deleted file mode 100644 index 786a068b9..000000000 --- a/python/build/boost.py +++ /dev/null @@ -1,28 +0,0 @@ -import os, shutil -import re - -from build.project import Project - -class BoostProject(Project): - def __init__(self, url, md5, installed, - **kwargs): - m = re.match(r'.*/boost_(\d+)_(\d+)_(\d+)\.tar\.bz2$', url) - version = "%s.%s.%s" % (m.group(1), m.group(2), m.group(3)) - Project.__init__(self, url, md5, installed, - name='boost', version=version, - **kwargs) - - def _build(self, toolchain): - src = self.unpack(toolchain) - - # install the headers manually; don't build any library - # (because right now, we only use header-only libraries) - includedir = os.path.join(toolchain.install_prefix, 'include') - dest = os.path.join(includedir, 'boost') - shutil.rmtree(dest, ignore_errors=True) - shutil.copytree(os.path.join(src, 'boost'), dest) - - # touch the boost/version.hpp file to ensure it's newer than - # the downloaded Boost tarball, to avoid reinstalling Boost on - # every run - os.utime(os.path.join(toolchain.install_prefix, self.installed)) diff --git a/python/build/libs.py b/python/build/libs.py index c9cebf372..7a4d2ce22 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -8,7 +8,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 libmpdclient = MesonProject( @@ -448,9 +447,3 @@ jack = JackProject( '38f674bbc57852a8eb3d9faa1f96a0912d26f7d5df14c11005ad499c8ae352f2', 'lib/pkgconfig/jack.pc', ) - -boost = BoostProject( - 'https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.bz2', - '71feeed900fbccca04a3b4f2f84a7c217186f28a940ed8b7ed4725986baf99fa', - 'include/boost/version.hpp', -) diff --git a/python/build/meson.py b/python/build/meson.py index d86c48e6a..366cdbdf2 100644 --- a/python/build/meson.py +++ b/python/build/meson.py @@ -96,9 +96,6 @@ def configure(toolchain, src, build, args=()): env = toolchain.env.copy() - # Meson 0.54 requires the BOOST_ROOT environment variable - env['BOOST_ROOT'] = toolchain.install_prefix - subprocess.check_call(configure, env=env) class MesonProject(Project): diff --git a/src/apple/meson.build b/src/apple/meson.build index 160c62bc4..482738d92 100644 --- a/src/apple/meson.build +++ b/src/apple/meson.build @@ -5,9 +5,6 @@ endif audiounit_dep = declare_dependency( link_args: ['-framework', 'AudioUnit', '-framework', 'CoreAudio', '-framework', 'CoreServices'], - dependencies: [ - boost_dep, - ], ) apple = static_library( diff --git a/src/db/meson.build b/src/db/meson.build index bef22224f..0cf4af270 100644 --- a/src/db/meson.build +++ b/src/db/meson.build @@ -53,7 +53,6 @@ db_glue = static_library( db_glue_sources, include_directories: inc, dependencies: [ - boost_dep, fmt_dep, log_dep, ], diff --git a/src/input/meson.build b/src/input/meson.build index 282474ba6..36026d425 100644 --- a/src/input/meson.build +++ b/src/input/meson.build @@ -10,9 +10,6 @@ input_api = static_library( 'ProxyInputStream.cxx', 'LastInputStream.cxx', include_directories: inc, - dependencies: [ - boost_dep, - ], ) input_api_dep = declare_dependency( @@ -44,7 +41,6 @@ input_glue = static_library( 'cache/Stream.cxx', include_directories: inc, dependencies: [ - boost_dep, log_dep, ], ) diff --git a/src/output/plugins/meson.build b/src/output/plugins/meson.build index a5caa6899..c790a52c0 100644 --- a/src/output/plugins/meson.build +++ b/src/output/plugins/meson.build @@ -36,7 +36,7 @@ if get_option('httpd') 'httpd/HttpdClient.cxx', 'httpd/HttpdOutputPlugin.cxx', ] - output_plugins_deps += [ event_dep, net_dep, boost_dep ] + output_plugins_deps += [ event_dep, net_dep ] need_encoder = true endif @@ -177,7 +177,6 @@ output_plugins = static_library( sles_dep, winmm_dep, wasapi_dep, - boost_dep, output_plugins_deps, ], ) diff --git a/src/storage/meson.build b/src/storage/meson.build index cc214548c..51a8c1d1e 100644 --- a/src/storage/meson.build +++ b/src/storage/meson.build @@ -19,7 +19,6 @@ storage_glue = static_library( 'Configured.cxx', include_directories: inc, dependencies: [ - boost_dep, log_dep, ], ) diff --git a/win32/build.py b/win32/build.py index f29d75302..a3565d56e 100755 --- a/win32/build.py +++ b/win32/build.py @@ -106,7 +106,6 @@ thirdparty_libs = [ curl, libnfs, jack, - boost, ] # build the third-party libraries