Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b5bd294e5c | ||
![]() |
ac60bd47f0 | ||
![]() |
b7248f0333 | ||
![]() |
8a5b5378e6 | ||
![]() |
4a49f75799 | ||
![]() |
9d2666f293 | ||
![]() |
e63fcc5982 | ||
![]() |
4c37c17f2e | ||
![]() |
722820a375 | ||
![]() |
688023eb9e | ||
![]() |
5771aeaddd | ||
![]() |
a42da90042 | ||
![]() |
d7d32ed6fc | ||
![]() |
4715acf27e | ||
![]() |
8780db5ee8 | ||
![]() |
b8bfc98618 | ||
![]() |
6e6f72a521 | ||
![]() |
a654c5d643 | ||
![]() |
c5d6aa169f | ||
![]() |
c1c67286d3 | ||
![]() |
2fb34697c7 | ||
![]() |
94b5b9f370 | ||
![]() |
a9467513e1 | ||
![]() |
17d944f6ce | ||
![]() |
0f82f18652 | ||
![]() |
3db3e577f1 | ||
![]() |
37ee821947 | ||
![]() |
916ab9a7e6 | ||
![]() |
1802cf9fd1 | ||
![]() |
1bf7d30623 | ||
![]() |
b2d89253a6 | ||
![]() |
50c1e3738a | ||
![]() |
7a939746ae |
NEWS
android
doc
meson.buildpython/build
src
subprojects
14
NEWS
14
NEWS
@@ -1,3 +1,17 @@
|
|||||||
|
ver 0.23.16 (2024/12/03)
|
||||||
|
* database
|
||||||
|
- fix integer overflows with 64-bit inode numbers
|
||||||
|
* filter
|
||||||
|
- ffmpeg: fix for filters producing no output
|
||||||
|
* support libfmt 11
|
||||||
|
* support ICU 76
|
||||||
|
|
||||||
|
ver 0.23.15 (2023/12/20)
|
||||||
|
* decoder
|
||||||
|
- ffmpeg: fix build failure with FFmpeg 6.1
|
||||||
|
* output
|
||||||
|
- alsa: limit buffer time to 2 seconds
|
||||||
|
|
||||||
ver 0.23.14 (2023/10/08)
|
ver 0.23.14 (2023/10/08)
|
||||||
* decoder
|
* decoder
|
||||||
- flac: fix scanning files with non-ASCII names on Windows
|
- flac: fix scanning files with non-ASCII names on Windows
|
||||||
|
@@ -2,8 +2,8 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.musicpd"
|
package="org.musicpd"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
android:versionCode="72"
|
android:versionCode="74"
|
||||||
android:versionName="0.23.14">
|
android:versionName="0.23.16">
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30"/>
|
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30"/>
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@ Some example code:
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
|
int
|
||||||
Foo(const char *abc, int xyz)
|
Foo(const char *abc, int xyz)
|
||||||
{
|
{
|
||||||
if (abc == nullptr) {
|
if (abc == nullptr) {
|
||||||
|
@@ -691,7 +691,8 @@ Song ids on the other hand are stable: an id is assigned to a song
|
|||||||
when it is added, and will stay the same, no matter how much it is
|
when it is added, and will stay the same, no matter how much it is
|
||||||
moved around. Adding the same song twice will assign different ids to
|
moved around. Adding the same song twice will assign different ids to
|
||||||
them, and a deleted-and-readded song will have a new id. This way, a
|
them, and a deleted-and-readded song will have a new id. This way, a
|
||||||
client can always be sure the correct song is being used.
|
client can always be sure the correct song is being used. Song ids are not
|
||||||
|
preserved across :program:`MPD` restarts.
|
||||||
|
|
||||||
Many commands come in two flavors, one for each address type.
|
Many commands come in two flavors, one for each address type.
|
||||||
Whenever possible, ids should be used.
|
Whenever possible, ids should be used.
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
project(
|
project(
|
||||||
'mpd',
|
'mpd',
|
||||||
['c', 'cpp'],
|
['c', 'cpp'],
|
||||||
version: '0.23.14',
|
version: '0.23.16',
|
||||||
meson_version: '>= 0.56.0',
|
meson_version: '>= 0.56.0',
|
||||||
default_options: [
|
default_options: [
|
||||||
'c_std=c11',
|
'c_std=c11',
|
||||||
@@ -76,6 +76,9 @@ test_common_flags = [
|
|||||||
|
|
||||||
# suppress bogus GCC12 warnings in libfmt headers
|
# suppress bogus GCC12 warnings in libfmt headers
|
||||||
'-Wno-stringop-overflow',
|
'-Wno-stringop-overflow',
|
||||||
|
|
||||||
|
# libfmt causes this warning due to -ffast-math
|
||||||
|
'-Wno-nan-infinity-disabled',
|
||||||
]
|
]
|
||||||
|
|
||||||
test_global_cxxflags = test_global_common_flags + [
|
test_global_cxxflags = test_global_common_flags + [
|
||||||
|
@@ -53,6 +53,14 @@ set(CMAKE_CXX_FLAGS_INIT "{toolchain.cxxflags} {toolchain.cppflags}")
|
|||||||
set(CMAKE_FIND_ROOT_PATH "{toolchain.install_prefix};{sysroot}")
|
set(CMAKE_FIND_ROOT_PATH "{toolchain.install_prefix};{sysroot}")
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
""")
|
||||||
|
elif cmake_system_name == 'Windows':
|
||||||
|
# search libraries and headers only in the sysroot, not on
|
||||||
|
# the build host
|
||||||
|
f.write(f"""
|
||||||
|
set(CMAKE_FIND_ROOT_PATH "{toolchain.install_prefix}")
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
""")
|
""")
|
||||||
|
|
||||||
def configure(toolchain: AnyToolchain, src: str, build: str, args: list[str]=[], env: Optional[Mapping[str, str]]=None) -> None:
|
def configure(toolchain: AnyToolchain, src: str, build: str, args: list[str]=[], env: Optional[Mapping[str, str]]=None) -> None:
|
||||||
|
@@ -57,9 +57,9 @@ flac = AutotoolsProject(
|
|||||||
)
|
)
|
||||||
|
|
||||||
zlib = ZlibProject(
|
zlib = ZlibProject(
|
||||||
('http://zlib.net/zlib-1.3.tar.xz',
|
('http://zlib.net/zlib-1.3.1.tar.xz',
|
||||||
'https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.xz'),
|
'https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.xz'),
|
||||||
'8a9ba2898e1d0d774eca6ba5b4627a11e5588ba85c8851336eb38de4683050a7',
|
'38ef96b8dfe510d42707d9c781877914792541133e1870841463bfa73f883e32',
|
||||||
'lib/libz.a',
|
'lib/libz.a',
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -116,8 +116,8 @@ libmodplug = AutotoolsProject(
|
|||||||
)
|
)
|
||||||
|
|
||||||
libopenmpt = AutotoolsProject(
|
libopenmpt = AutotoolsProject(
|
||||||
'https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.6.6+release.autotools.tar.gz',
|
'https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.7.9+release.autotools.tar.gz',
|
||||||
'6ddb9e26a430620944891796fefb1bbb38bd9148f6cfc558810c0d3f269876c7',
|
'0386e918d75d797e79d5b14edd0847165d8b359e9811ef57652c0a356a2dfcf4',
|
||||||
'lib/libopenmpt.a',
|
'lib/libopenmpt.a',
|
||||||
[
|
[
|
||||||
'--disable-shared', '--enable-static',
|
'--disable-shared', '--enable-static',
|
||||||
@@ -129,12 +129,12 @@ libopenmpt = AutotoolsProject(
|
|||||||
'--without-portaudio', '--without-portaudiocpp', '--without-sndfile',
|
'--without-portaudio', '--without-portaudiocpp', '--without-sndfile',
|
||||||
'--without-flac',
|
'--without-flac',
|
||||||
],
|
],
|
||||||
base='libopenmpt-0.6.6+release.autotools',
|
base='libopenmpt-0.7.9+release.autotools',
|
||||||
)
|
)
|
||||||
|
|
||||||
wildmidi = CmakeProject(
|
wildmidi = CmakeProject(
|
||||||
'https://github.com/Mindwerks/wildmidi/releases/download/wildmidi-0.4.5/wildmidi-0.4.5.tar.gz',
|
'https://github.com/Mindwerks/wildmidi/releases/download/wildmidi-0.4.6/wildmidi-0.4.6.tar.gz',
|
||||||
'd5e7bef00a7aa47534a53d43b1265f8d3d27f6a28e7f563c1cdf02ff4fa35b99',
|
'24ca992639ce76efa3737029fceb3672385d56e2ac0a15d50b40cc12d26e60de',
|
||||||
'lib/libWildMidi.a',
|
'lib/libWildMidi.a',
|
||||||
[
|
[
|
||||||
'-DBUILD_SHARED_LIBS=OFF',
|
'-DBUILD_SHARED_LIBS=OFF',
|
||||||
@@ -156,8 +156,8 @@ gme = CmakeProject(
|
|||||||
)
|
)
|
||||||
|
|
||||||
ffmpeg = FfmpegProject(
|
ffmpeg = FfmpegProject(
|
||||||
'http://ffmpeg.org/releases/ffmpeg-6.0.tar.xz',
|
'http://ffmpeg.org/releases/ffmpeg-6.1.tar.xz',
|
||||||
'57be87c22d9b49c112b6d24bc67d42508660e6b718b3db89c44e47e289137082',
|
'488c76e57dd9b3bee901f71d5c95eaf1db4a5a31fe46a28654e837144207c270',
|
||||||
'lib/libavcodec.a',
|
'lib/libavcodec.a',
|
||||||
[
|
[
|
||||||
'--disable-shared', '--enable-static',
|
'--disable-shared', '--enable-static',
|
||||||
@@ -464,6 +464,8 @@ ffmpeg = FfmpegProject(
|
|||||||
'--disable-decoder=pam',
|
'--disable-decoder=pam',
|
||||||
'--disable-decoder=pbm',
|
'--disable-decoder=pbm',
|
||||||
'--disable-decoder=pcx',
|
'--disable-decoder=pcx',
|
||||||
|
'--disable-decoder=pdv',
|
||||||
|
'--disable-decoder=pfm',
|
||||||
'--disable-decoder=pgm',
|
'--disable-decoder=pgm',
|
||||||
'--disable-decoder=pgmyuv',
|
'--disable-decoder=pgmyuv',
|
||||||
'--disable-decoder=pgssub',
|
'--disable-decoder=pgssub',
|
||||||
@@ -600,16 +602,16 @@ ffmpeg = FfmpegProject(
|
|||||||
)
|
)
|
||||||
|
|
||||||
openssl = OpenSSLProject(
|
openssl = OpenSSLProject(
|
||||||
('https://www.openssl.org/source/openssl-3.1.3.tar.gz',
|
('https://www.openssl.org/source/openssl-3.1.4.tar.gz',
|
||||||
'https://artfiles.org/openssl.org/source/openssl-3.1.3.tar.gz'),
|
'https://artfiles.org/openssl.org/source/openssl-3.1.4.tar.gz'),
|
||||||
'f0316a2ebd89e7f2352976445458689f80302093788c466692fb2a188b2eacf6',
|
'840af5366ab9b522bde525826be3ef0fb0af81c6a9ebd84caa600fea1731eee3',
|
||||||
'include/openssl/ossl_typ.h',
|
'include/openssl/ossl_typ.h',
|
||||||
)
|
)
|
||||||
|
|
||||||
curl = CmakeProject(
|
curl = CmakeProject(
|
||||||
('https://curl.se/download/curl-8.2.1.tar.xz',
|
('https://curl.se/download/curl-8.5.0.tar.xz',
|
||||||
'https://github.com/curl/curl/releases/download/curl-8_2_1/curl-8.2.1.tar.xz'),
|
'https://github.com/curl/curl/releases/download/curl-8_5_0/curl-8.5.0.tar.xz'),
|
||||||
'dd322f6bd0a20e6cebdfd388f69e98c3d183bed792cf4713c8a7ef498cba4894',
|
'42ab8db9e20d8290a3b633e7fbb3cec15db34df65fd1015ef8ac1e4723750eeb',
|
||||||
'lib/libcurl.a',
|
'lib/libcurl.a',
|
||||||
[
|
[
|
||||||
'-DBUILD_CURL_EXE=OFF',
|
'-DBUILD_CURL_EXE=OFF',
|
||||||
@@ -642,8 +644,8 @@ curl = CmakeProject(
|
|||||||
)
|
)
|
||||||
|
|
||||||
libnfs = AutotoolsProject(
|
libnfs = AutotoolsProject(
|
||||||
'https://github.com/sahlberg/libnfs/archive/libnfs-5.0.2.tar.gz',
|
'https://github.com/sahlberg/libnfs/archive/libnfs-5.0.3.tar.gz',
|
||||||
'637e56643b19da9fba98f06847788c4dad308b723156a64748041035dcdf9bd3',
|
'd945cb4f4c8f82ee1f3640893a168810f794a28e1010bb007ec5add345e9df3e',
|
||||||
'lib/libnfs.a',
|
'lib/libnfs.a',
|
||||||
[
|
[
|
||||||
'--disable-shared', '--enable-static',
|
'--disable-shared', '--enable-static',
|
||||||
@@ -654,7 +656,7 @@ libnfs = AutotoolsProject(
|
|||||||
|
|
||||||
'--disable-utils', '--disable-examples',
|
'--disable-utils', '--disable-examples',
|
||||||
],
|
],
|
||||||
base='libnfs-libnfs-5.0.2',
|
base='libnfs-libnfs-5.0.3',
|
||||||
autoreconf=True,
|
autoreconf=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
#include <iterator> // for std::back_inserter()
|
||||||
|
|
||||||
static constexpr Domain exception_domain("exception");
|
static constexpr Domain exception_domain("exception");
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -153,7 +153,7 @@ update_directory_stat(Storage &storage, Directory &directory) noexcept
|
|||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
FindAncestorLoop(Storage &storage, Directory *parent,
|
FindAncestorLoop(Storage &storage, Directory *parent,
|
||||||
unsigned inode, unsigned device) noexcept
|
uint64_t inode, uint64_t device) noexcept
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
if (device == 0 && inode == 0)
|
if (device == 0 && inode == 0)
|
||||||
|
@@ -26,6 +26,9 @@
|
|||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <libavutil/mem.h>
|
#include <libavutil/mem.h>
|
||||||
|
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(58, 29, 100)
|
||||||
|
#include <libavutil/error.h>
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
AvioStream::~AvioStream()
|
AvioStream::~AvioStream()
|
||||||
|
@@ -66,6 +66,9 @@ FfmpegFilter::FilterPCM(ConstBuffer<void> src)
|
|||||||
#endif
|
#endif
|
||||||
frame->nb_samples = src.size / in_audio_frame_size;
|
frame->nb_samples = src.size / in_audio_frame_size;
|
||||||
|
|
||||||
|
frame->pts = pts;
|
||||||
|
pts += frame->nb_samples;
|
||||||
|
|
||||||
frame.GetBuffer();
|
frame.GetBuffer();
|
||||||
|
|
||||||
memcpy(frame.GetData(0), src.data, src.size);
|
memcpy(frame.GetData(0), src.data, src.size);
|
||||||
|
@@ -17,14 +17,15 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MPD_FFMPEG_FILTER__HXX
|
#pragma once
|
||||||
#define MPD_FFMPEG_FILTER__HXX
|
|
||||||
|
|
||||||
#include "filter/Filter.hxx"
|
#include "filter/Filter.hxx"
|
||||||
#include "lib/ffmpeg/Buffer.hxx"
|
#include "lib/ffmpeg/Buffer.hxx"
|
||||||
#include "lib/ffmpeg/Filter.hxx"
|
#include "lib/ffmpeg/Filter.hxx"
|
||||||
#include "lib/ffmpeg/Frame.hxx"
|
#include "lib/ffmpeg/Frame.hxx"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A #Filter implementation using FFmpeg's libavfilter.
|
* A #Filter implementation using FFmpeg's libavfilter.
|
||||||
*/
|
*/
|
||||||
@@ -46,6 +47,11 @@ class FfmpegFilter final : public Filter {
|
|||||||
const size_t in_audio_frame_size;
|
const size_t in_audio_frame_size;
|
||||||
const size_t out_audio_frame_size;
|
const size_t out_audio_frame_size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Presentation timestamp. A counter for `AVFrame::pts`.
|
||||||
|
*/
|
||||||
|
int_least64_t pts = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @param _graph a checked and configured AVFilterGraph
|
* @param _graph a checked and configured AVFilterGraph
|
||||||
@@ -63,5 +69,3 @@ public:
|
|||||||
/* virtual methods from class Filter */
|
/* virtual methods from class Filter */
|
||||||
ConstBuffer<void> FilterPCM(ConstBuffer<void> src) override;
|
ConstBuffer<void> FilterPCM(ConstBuffer<void> src) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@@ -234,7 +234,7 @@ AlsaInputStream::PrepareSockets() noexcept
|
|||||||
|
|
||||||
void
|
void
|
||||||
AlsaInputStream::DispatchSockets() noexcept
|
AlsaInputStream::DispatchSockets() noexcept
|
||||||
{
|
try {
|
||||||
non_block.DispatchSockets(*this, capture_handle);
|
non_block.DispatchSockets(*this, capture_handle);
|
||||||
|
|
||||||
const std::scoped_lock<Mutex> protect(mutex);
|
const std::scoped_lock<Mutex> protect(mutex);
|
||||||
@@ -253,16 +253,17 @@ AlsaInputStream::DispatchSockets() noexcept
|
|||||||
if (n_frames == -EAGAIN)
|
if (n_frames == -EAGAIN)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (Recover(n_frames) < 0) {
|
if (Recover(n_frames) < 0)
|
||||||
postponed_exception = std::make_exception_ptr(std::runtime_error("PCM error - stream aborted"));
|
throw std::runtime_error("PCM error - stream aborted");
|
||||||
InvokeOnAvailable();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t nbytes = n_frames * frame_size;
|
size_t nbytes = n_frames * frame_size;
|
||||||
CommitWriteBuffer(nbytes);
|
CommitWriteBuffer(nbytes);
|
||||||
}
|
}
|
||||||
|
catch (...) {
|
||||||
|
postponed_exception = std::current_exception();
|
||||||
|
InvokeOnAvailable();
|
||||||
|
}
|
||||||
|
|
||||||
inline int
|
inline int
|
||||||
AlsaInputStream::Recover(int err)
|
AlsaInputStream::Recover(int err)
|
||||||
@@ -369,9 +370,14 @@ AlsaInputStream::ConfigureCapture(AudioFormat audio_format)
|
|||||||
period_size_min, period_size_max,
|
period_size_min, period_size_max,
|
||||||
period_time_min, period_time_max);
|
period_time_min, period_time_max);
|
||||||
|
|
||||||
/* choose the maximum possible buffer_size ... */
|
/* choose the maximum buffer_time up to limit of 2 seconds ... */
|
||||||
snd_pcm_hw_params_set_buffer_size(capture_handle, hw_params,
|
unsigned buffer_time = buffer_time_max;
|
||||||
buffer_size_max);
|
if (buffer_time > 2000000U)
|
||||||
|
buffer_time = 2000000U;
|
||||||
|
int direction = -1;
|
||||||
|
if ((err = snd_pcm_hw_params_set_buffer_time_near(capture_handle,
|
||||||
|
hw_params, &buffer_time, &direction)) < 0)
|
||||||
|
throw Alsa::MakeError(err, "Cannot set buffer time");
|
||||||
|
|
||||||
/* ... and calculate the period_size to have four periods in
|
/* ... and calculate the period_size to have four periods in
|
||||||
one buffer; this way, we get woken up often enough to avoid
|
one buffer; this way, we get woken up often enough to avoid
|
||||||
@@ -379,7 +385,7 @@ AlsaInputStream::ConfigureCapture(AudioFormat audio_format)
|
|||||||
snd_pcm_uframes_t buffer_size;
|
snd_pcm_uframes_t buffer_size;
|
||||||
if (snd_pcm_hw_params_get_buffer_size(hw_params, &buffer_size) == 0) {
|
if (snd_pcm_hw_params_get_buffer_size(hw_params, &buffer_size) == 0) {
|
||||||
snd_pcm_uframes_t period_size = buffer_size / 4;
|
snd_pcm_uframes_t period_size = buffer_size / 4;
|
||||||
int direction = -1;
|
direction = -1;
|
||||||
if ((err = snd_pcm_hw_params_set_period_size_near(capture_handle,
|
if ((err = snd_pcm_hw_params_set_period_size_near(capture_handle,
|
||||||
hw_params, &period_size, &direction)) < 0)
|
hw_params, &period_size, &direction)) < 0)
|
||||||
throw Alsa::MakeError(err, "Cannot set period size");
|
throw Alsa::MakeError(err, "Cannot set period size");
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
Index: curl-7.84.0/CMakeLists.txt
|
Index: curl-7.85.0/CMakeLists.txt
|
||||||
===================================================================
|
===================================================================
|
||||||
--- curl-7.84.0.orig/CMakeLists.txt
|
--- curl-7.85.0.orig/CMakeLists.txt
|
||||||
+++ curl-7.84.0/CMakeLists.txt
|
+++ curl-7.85.0/CMakeLists.txt
|
||||||
@@ -1536,7 +1536,7 @@ set(includedir "\${prefix}/
|
@@ -1655,7 +1655,7 @@
|
||||||
set(LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
|
set(LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
|
||||||
set(LIBCURL_LIBS "")
|
set(LIBCURL_LIBS "")
|
||||||
set(libdir "${CMAKE_INSTALL_PREFIX}/lib")
|
set(libdir "${CMAKE_INSTALL_PREFIX}/lib")
|
||||||
-foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS})
|
- foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS})
|
||||||
+foreach(_lib ${CURL_LIBS})
|
+ foreach(_lib ${CURL_LIBS})
|
||||||
if(TARGET "${_lib}")
|
if(TARGET "${_lib}")
|
||||||
set(_libname "${_lib}")
|
set(_libname "${_lib}")
|
||||||
get_target_property(_imported "${_libname}" IMPORTED)
|
get_target_property(_imported "${_libname}" IMPORTED)
|
||||||
|
@@ -29,7 +29,7 @@ template<>
|
|||||||
struct fmt::formatter<AVSampleFormat> : formatter<string_view>
|
struct fmt::formatter<AVSampleFormat> : formatter<string_view>
|
||||||
{
|
{
|
||||||
template<typename FormatContext>
|
template<typename FormatContext>
|
||||||
auto format(const AVSampleFormat format, FormatContext &ctx) {
|
auto format(const AVSampleFormat format, FormatContext &ctx) const {
|
||||||
const char *name = av_get_sample_fmt_name(format);
|
const char *name = av_get_sample_fmt_name(format);
|
||||||
if (name == nullptr)
|
if (name == nullptr)
|
||||||
name = "?";
|
name = "?";
|
||||||
|
@@ -39,7 +39,7 @@ template<>
|
|||||||
struct fmt::formatter<SampleFormat> : formatter<string_view>
|
struct fmt::formatter<SampleFormat> : formatter<string_view>
|
||||||
{
|
{
|
||||||
template<typename FormatContext>
|
template<typename FormatContext>
|
||||||
auto format(const SampleFormat format, FormatContext &ctx) {
|
auto format(const SampleFormat format, FormatContext &ctx) const {
|
||||||
return formatter<string_view>::format(sample_format_to_string(format),
|
return formatter<string_view>::format(sample_format_to_string(format),
|
||||||
ctx);
|
ctx);
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,7 @@ template<>
|
|||||||
struct fmt::formatter<AudioFormat> : formatter<string_view>
|
struct fmt::formatter<AudioFormat> : formatter<string_view>
|
||||||
{
|
{
|
||||||
template<typename FormatContext>
|
template<typename FormatContext>
|
||||||
auto format(const AudioFormat &af, FormatContext &ctx) {
|
auto format(const AudioFormat &af, FormatContext &ctx) const {
|
||||||
return formatter<string_view>::format(ToString(af).c_str(),
|
return formatter<string_view>::format(ToString(af).c_str(),
|
||||||
ctx);
|
ctx);
|
||||||
}
|
}
|
||||||
|
@@ -38,7 +38,7 @@ template<>
|
|||||||
struct fmt::formatter<std::exception_ptr> : formatter<string_view>
|
struct fmt::formatter<std::exception_ptr> : formatter<string_view>
|
||||||
{
|
{
|
||||||
template<typename FormatContext>
|
template<typename FormatContext>
|
||||||
auto format(std::exception_ptr e, FormatContext &ctx) {
|
auto format(std::exception_ptr e, FormatContext &ctx) const {
|
||||||
return formatter<string_view>::format(GetFullMessage(e), ctx);
|
return formatter<string_view>::format(GetFullMessage(e), ctx);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -29,7 +29,7 @@ template<>
|
|||||||
struct fmt::formatter<Path> : formatter<string_view>
|
struct fmt::formatter<Path> : formatter<string_view>
|
||||||
{
|
{
|
||||||
template<typename FormatContext>
|
template<typename FormatContext>
|
||||||
auto format(Path path, FormatContext &ctx) {
|
auto format(Path path, FormatContext &ctx) const {
|
||||||
return formatter<string_view>::format(path.ToUTF8(), ctx);
|
return formatter<string_view>::format(path.ToUTF8(), ctx);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
icu_dep = dependency('icu-i18n', version: '>= 50', required: get_option('icu'))
|
icu_i18n_dep = dependency('icu-i18n', version: '>= 50', required: get_option('icu'))
|
||||||
conf.set('HAVE_ICU', icu_dep.found())
|
icu_uc_dep = dependency('icu-uc', version: '>= 50', required: get_option('icu'))
|
||||||
|
have_icu = icu_i18n_dep.found() and icu_uc_dep.found()
|
||||||
|
conf.set('HAVE_ICU', have_icu)
|
||||||
|
|
||||||
icu_sources = [
|
icu_sources = [
|
||||||
'CaseFold.cxx',
|
'CaseFold.cxx',
|
||||||
@@ -13,7 +15,7 @@ if is_windows
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
iconv_dep = []
|
iconv_dep = []
|
||||||
if icu_dep.found()
|
if have_icu
|
||||||
icu_sources += [
|
icu_sources += [
|
||||||
'Util.cxx',
|
'Util.cxx',
|
||||||
'Init.cxx',
|
'Init.cxx',
|
||||||
@@ -44,7 +46,8 @@ icu = static_library(
|
|||||||
icu_sources,
|
icu_sources,
|
||||||
include_directories: inc,
|
include_directories: inc,
|
||||||
dependencies: [
|
dependencies: [
|
||||||
icu_dep,
|
icu_i18n_dep,
|
||||||
|
icu_uc_dep,
|
||||||
iconv_dep,
|
iconv_dep,
|
||||||
fmt_dep,
|
fmt_dep,
|
||||||
],
|
],
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
#include "WindowsCond.hxx"
|
#include "WindowsCond.hxx"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <system_error> // for std::error_category
|
||||||
#include <variant>
|
#include <variant>
|
||||||
|
|
||||||
enum class WinFutureErrc : int {
|
enum class WinFutureErrc : int {
|
||||||
|
@@ -100,9 +100,11 @@ FormatHResultError(HRESULT result, const char *fmt, ...) noexcept
|
|||||||
va_start(args1, fmt);
|
va_start(args1, fmt);
|
||||||
va_copy(args2, args1);
|
va_copy(args2, args1);
|
||||||
|
|
||||||
const int size = vsnprintf(nullptr, 0, fmt, args1);
|
int size = vsnprintf(nullptr, 0, fmt, args1);
|
||||||
va_end(args1);
|
va_end(args1);
|
||||||
assert(size >= 0);
|
|
||||||
|
if (size < 0)
|
||||||
|
size = 0;
|
||||||
|
|
||||||
auto buffer = std::make_unique<char[]>(size + 1);
|
auto buffer = std::make_unique<char[]>(size + 1);
|
||||||
vsprintf(buffer.get(), fmt, args2);
|
vsprintf(buffer.get(), fmt, args2);
|
||||||
|
@@ -1,12 +1,13 @@
|
|||||||
[wrap-file]
|
[wrap-file]
|
||||||
directory = fmt-9.1.0
|
directory = fmt-11.0.2
|
||||||
source_url = https://github.com/fmtlib/fmt/archive/9.1.0.tar.gz
|
source_url = https://github.com/fmtlib/fmt/archive/11.0.2.tar.gz
|
||||||
source_filename = fmt-9.1.0.tar.gz
|
source_filename = fmt-11.0.2.tar.gz
|
||||||
source_hash = 5dea48d1fcddc3ec571ce2058e13910a0d4a6bab4cc09a809d8b1dd1c88ae6f2
|
source_hash = 6cb1e6d37bdcb756dbbe59be438790db409cdb4868c66e888d5df9f13f7c027f
|
||||||
patch_filename = fmt_9.1.0-1_patch.zip
|
patch_filename = fmt_11.0.2-1_patch.zip
|
||||||
patch_url = https://wrapdb.mesonbuild.com/v2/fmt_9.1.0-1/get_patch
|
patch_url = https://wrapdb.mesonbuild.com/v2/fmt_11.0.2-1/get_patch
|
||||||
patch_hash = 4557b9ba87b3eb63694ed9b21d1a2117d4a97ca56b91085b10288e9a5294adf8
|
patch_hash = 90c9e3b8e8f29713d40ca949f6f93ad115d78d7fb921064112bc6179e6427c5e
|
||||||
wrapdb_version = 9.1.0-1
|
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/fmt_11.0.2-1/fmt-11.0.2.tar.gz
|
||||||
|
wrapdb_version = 11.0.2-1
|
||||||
|
|
||||||
[provide]
|
[provide]
|
||||||
fmt = fmt_dep
|
fmt = fmt_dep
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
[wrap-file]
|
[wrap-file]
|
||||||
directory = sqlite-amalgamation-3410200
|
directory = sqlite-amalgamation-3470100
|
||||||
source_url = https://www.sqlite.org/2023/sqlite-amalgamation-3410200.zip
|
source_url = https://www.sqlite.org/2024/sqlite-amalgamation-3470100.zip
|
||||||
source_filename = sqlite-amalgamation-3410200.zip
|
source_filename = sqlite-amalgamation-3470100.zip
|
||||||
source_hash = 01df06a84803c1ab4d62c64e995b151b2dbcf5dbc93bbc5eee213cb18225d987
|
source_hash = 9da21e6b14ef6a943cdc30f973df259fb390bb4483f77e7f171b9b6e977e5458
|
||||||
patch_filename = sqlite3_3.41.2-2_patch.zip
|
patch_filename = sqlite3_3.47.1-1_patch.zip
|
||||||
patch_url = https://wrapdb.mesonbuild.com/v2/sqlite3_3.41.2-2/get_patch
|
patch_url = https://wrapdb.mesonbuild.com/v2/sqlite3_3.47.1-1/get_patch
|
||||||
patch_hash = 246681dfb731a14bfa61bcde651d5581a7e1c7d14851bfb57a941fac540a6810
|
patch_hash = 7a298e69c663abfccd2d3632c6897b4f90627d36fd7fa137240c1d97c9a86466
|
||||||
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/sqlite3_3.41.2-2/sqlite-amalgamation-3410200.zip
|
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/sqlite3_3.47.1-1/sqlite-amalgamation-3470100.zip
|
||||||
wrapdb_version = 3.41.2-2
|
wrapdb_version = 3.47.1-1
|
||||||
|
|
||||||
[provide]
|
[provide]
|
||||||
sqlite3 = sqlite3_dep
|
sqlite3 = sqlite3_dep
|
||||||
|
Reference in New Issue
Block a user