Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
680629ac
Commit
680629ac
authored
Jul 17, 2023
by
Konstantin A. Lepikhov
Browse files
Options
Browse Files
Download
Plain Diff
Merge tag 'v0.23.13' of
https://github.com/MusicPlayerDaemon/MPD
into sisyphus
release v0.23.13
parents
3344811b
8842650c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
53 changed files
with
301 additions
and
180 deletions
+301
-180
NEWS
NEWS
+18
-0
build.py
android/build.py
+1
-0
mpdconf.example
doc/mpdconf.example
+1
-1
user.rst
doc/user.rst
+5
-0
meson.build
meson.build
+1
-1
autotools.py
python/build/autotools.py
+15
-2
cmake.py
python/build/cmake.py
+35
-6
libs.py
python/build/libs.py
+0
-0
makeproject.py
python/build/makeproject.py
+8
-3
meson.py
python/build/meson.py
+3
-2
project.py
python/build/project.py
+7
-4
tar.py
python/build/tar.py
+4
-2
zlib.py
python/build/zlib.py
+24
-14
CommandLine.cxx
src/CommandLine.cxx
+4
-0
CommandLine.hxx
src/CommandLine.hxx
+7
-0
Main.cxx
src/Main.cxx
+4
-1
SongPrint.cxx
src/SongPrint.cxx
+3
-2
SongSave.cxx
src/SongSave.cxx
+7
-1
SongSave.hxx
src/SongSave.hxx
+1
-1
TagPrint.cxx
src/TagPrint.cxx
+2
-1
TimePrint.cxx
src/TimePrint.cxx
+1
-1
DatabaseCommands.cxx
src/command/DatabaseCommands.cxx
+2
-0
FileCommands.cxx
src/command/FileCommands.cxx
+2
-5
PlayerCommands.cxx
src/command/PlayerCommands.cxx
+2
-1
StorageCommands.cxx
src/command/StorageCommands.cxx
+0
-4
Directory.cxx
src/db/plugins/simple/Directory.cxx
+12
-0
Directory.hxx
src/db/plugins/simple/Directory.hxx
+8
-0
DirectorySave.cxx
src/db/plugins/simple/DirectorySave.cxx
+3
-1
Archive.cxx
src/db/update/Archive.cxx
+13
-4
Walk.cxx
src/db/update/Walk.cxx
+1
-0
DecoderList.cxx
src/decoder/DecoderList.cxx
+3
-3
GmeDecoderPlugin.cxx
src/decoder/plugins/GmeDecoderPlugin.cxx
+1
-6
meson.build
src/decoder/plugins/meson.build
+1
-1
Loop.cxx
src/event/Loop.cxx
+3
-4
Charset.cxx
src/fs/Charset.cxx
+1
-4
AsyncInputStream.cxx
src/input/AsyncInputStream.cxx
+10
-2
CurlInputPlugin.cxx
src/input/plugins/CurlInputPlugin.cxx
+0
-1
meson.build
src/lib/crypto/meson.build
+2
-2
AppendIter.hxx
src/lib/dbus/AppendIter.hxx
+1
-0
LogError.cxx
src/lib/ffmpeg/LogError.cxx
+0
-42
LogError.hxx
src/lib/ffmpeg/LogError.hxx
+0
-29
meson.build
src/lib/ffmpeg/meson.build
+25
-3
OSXOutputPlugin.cxx
src/output/plugins/OSXOutputPlugin.cxx
+1
-1
PipeWireOutputPlugin.cxx
src/output/plugins/PipeWireOutputPlugin.cxx
+2
-0
CurlStorage.cxx
src/storage/plugins/CurlStorage.cxx
+4
-2
SignalHandlers.cxx
src/unix/SignalHandlers.cxx
+13
-1
SignalHandlers.hxx
src/unix/SignalHandlers.hxx
+3
-3
ScopeExit.hxx
src/util/ScopeExit.hxx
+10
-7
expat.wrap
subprojects/expat.wrap
+5
-4
sqlite3.wrap
subprojects/sqlite3.wrap
+9
-8
meson.build
systemd/system/meson.build
+6
-0
meson.build
systemd/user/meson.build
+6
-0
build.py
win32/build.py
+1
-0
No files found.
NEWS
View file @
680629ac
ver 0.23.13 (2023/05/22)
* input
- curl: fix busy loop after connection failed
- curl: hide "404" log messages for non-existent ".mpdignore" files
* archive
- zzip: fix crash bug
* database
- simple: reveal hidden songs after deleting containing CUE
* decoder
- ffmpeg: reorder to a lower priority than "gme"
- gme: require GME 0.6 or later
* output
- pipewire: fix corruption bug due to missing lock
* Linux
- shut down if parent process dies in --no-daemon mode
- determine systemd unit directories via pkg-config
* support libfmt 10
ver 0.23.12 (2023/01/17)
* input
- curl: require CURL 7.55.0 or later
...
...
android/build.py
View file @
680629ac
...
...
@@ -100,6 +100,7 @@ class AndroidNdkToolchain:
common_flags
+=
' -fvisibility=hidden -fdata-sections -ffunction-sections'
self
.
ar
=
os
.
path
.
join
(
llvm_bin
,
'llvm-ar'
)
self
.
arflags
=
'rcs'
self
.
ranlib
=
os
.
path
.
join
(
llvm_bin
,
'llvm-ranlib'
)
self
.
nm
=
os
.
path
.
join
(
llvm_bin
,
'llvm-nm'
)
self
.
strip
=
os
.
path
.
join
(
llvm_bin
,
'llvm-strip'
)
...
...
doc/mpdconf.example
View file @
680629ac
...
...
@@ -181,7 +181,7 @@
#
#database {
# plugin "simple"
# path "~/.local/share/mpd/db
# path "~/.local/share/mpd/db
"
# cache_directory "~/.local/share/mpd/cache"
#}
#
...
...
doc/user.rst
View file @
680629ac
...
...
@@ -611,6 +611,11 @@ If ReplayGain is enabled, then the setting ``replaygain_preamp`` is
set to a value (in dB) between ``-15`` and ``15``. This is the gain
applied to songs with ReplayGain tags.
On songs without ReplayGain tags, the setting
``replaygain_missing_preamp`` is used instead. If this setting is not
configured, then no ReplayGain is applied to such songs, and they will
appear too loud.
ReplayGain is usually implemented with a software volume filter (which
prevents `Bit-perfect playback`_). To use a hardware mixer, set
``replay_gain_handler`` to ``mixer`` in the ``audio_output`` section
...
...
meson.build
View file @
680629ac
project(
'mpd',
['c', 'cpp'],
version: '0.23.1
2
',
version: '0.23.1
3
',
meson_version: '>= 0.56.0',
default_options: [
'c_std=c11',
...
...
python/build/autotools.py
View file @
680629ac
...
...
@@ -45,14 +45,27 @@ class AutotoolsProject(MakeProject):
'LDFLAGS='
+
toolchain
.
ldflags
+
' '
+
self
.
ldflags
,
'LIBS='
+
toolchain
.
libs
+
' '
+
self
.
libs
,
'AR='
+
toolchain
.
ar
,
'ARFLAGS='
+
toolchain
.
arflags
,
'RANLIB='
+
toolchain
.
ranlib
,
'STRIP='
+
toolchain
.
strip
,
'--host='
+
toolchain
.
arch
,
'--prefix='
+
toolchain
.
install_prefix
,
'--
en
able-silent-rules'
,
'--
dis
able-silent-rules'
,
]
+
self
.
configure_args
subprocess
.
check_call
(
configure
,
cwd
=
build
,
env
=
toolchain
.
env
)
try
:
print
(
configure
)
subprocess
.
check_call
(
configure
,
cwd
=
build
,
env
=
toolchain
.
env
)
except
subprocess
.
CalledProcessError
:
# dump config.log after a failed configure run
try
:
with
open
(
os
.
path
.
join
(
build
,
'config.log'
))
as
f
:
sys
.
stdout
.
write
(
f
.
read
())
except
:
pass
# re-raise the exception
raise
return
build
def
_build
(
self
,
toolchain
):
...
...
python/build/cmake.py
View file @
680629ac
import
os
import
re
import
subprocess
from
build.project
import
Project
...
...
@@ -25,13 +26,33 @@ set(CMAKE_SYSTEM_PROCESSOR {toolchain.actual_arch.split('-', 1)[0]})
set(CMAKE_C_COMPILER_TARGET {toolchain.actual_arch})
set(CMAKE_CXX_COMPILER_TARGET {toolchain.actual_arch})
set(CMAKE_C_FLAGS "{toolchain.cflags} {toolchain.cppflags}")
set(CMAKE_CXX_FLAGS "{toolchain.cxxflags} {toolchain.cppflags}")
set(CMAKE_C_FLAGS
_INIT
"{toolchain.cflags} {toolchain.cppflags}")
set(CMAKE_CXX_FLAGS
_INIT
"{toolchain.cxxflags} {toolchain.cppflags}")
"""
)
__write_cmake_compiler
(
f
,
'C'
,
toolchain
.
cc
)
__write_cmake_compiler
(
f
,
'CXX'
,
toolchain
.
cxx
)
def
configure
(
toolchain
,
src
,
build
,
args
=
()):
if
cmake_system_name
==
'Darwin'
:
# On macOS, cmake forcibly adds an "-isysroot" flag even if
# one is already present in the flags variable; this breaks
# cross-compiling for iOS, and can be worked around by setting
# the CMAKE_OSX_SYSROOT variable
# (https://cmake.org/cmake/help/latest/variable/CMAKE_OSX_SYSROOT.html).
m
=
re
.
search
(
r'-isysroot +(\S+)'
,
toolchain
.
cflags
)
if
m
:
sysroot
=
m
.
group
(
1
)
print
(
f
'set(CMAKE_OSX_SYSROOT {sysroot})'
,
file
=
f
)
# search libraries and headers only in the sysroot, not on
# the build host
f
.
write
(
f
"""
set(CMAKE_FIND_ROOT_PATH "{toolchain.install_prefix};{sysroot}")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
"""
)
def
configure
(
toolchain
,
src
,
build
,
args
=
(),
env
=
None
):
cross_args
=
[]
if
toolchain
.
is_windows
:
...
...
@@ -61,15 +82,23 @@ def configure(toolchain, src, build, args=()):
'-GNinja'
,
]
+
cross_args
+
args
subprocess
.
check_call
(
configure
,
env
=
toolchain
.
env
,
cwd
=
build
)
if
env
is
None
:
env
=
toolchain
.
env
else
:
env
=
{
**
toolchain
.
env
,
**
env
}
print
(
configure
)
subprocess
.
check_call
(
configure
,
env
=
env
,
cwd
=
build
)
class
CmakeProject
(
Project
):
def
__init__
(
self
,
url
,
md5
,
installed
,
configure_args
=
[],
windows_configure_args
=
[],
env
=
None
,
**
kwargs
):
Project
.
__init__
(
self
,
url
,
md5
,
installed
,
**
kwargs
)
self
.
configure_args
=
configure_args
self
.
windows_configure_args
=
windows_configure_args
self
.
env
=
env
def
configure
(
self
,
toolchain
):
src
=
self
.
unpack
(
toolchain
)
...
...
@@ -77,10 +106,10 @@ class CmakeProject(Project):
configure_args
=
self
.
configure_args
if
toolchain
.
is_windows
:
configure_args
=
configure_args
+
self
.
windows_configure_args
configure
(
toolchain
,
src
,
build
,
configure_args
)
configure
(
toolchain
,
src
,
build
,
configure_args
,
self
.
env
)
return
build
def
_build
(
self
,
toolchain
):
build
=
self
.
configure
(
toolchain
)
subprocess
.
check_call
([
'ninja'
,
'install'
],
subprocess
.
check_call
([
'ninja'
,
'
-v'
,
'
install'
],
cwd
=
build
,
env
=
toolchain
.
env
)
python/build/libs.py
View file @
680629ac
This diff is collapsed.
Click to expand it.
python/build/makeproject.py
View file @
680629ac
import
subprocess
import
subprocess
,
multiprocessing
from
build.project
import
Project
...
...
@@ -10,7 +10,12 @@ class MakeProject(Project):
self
.
install_target
=
install_target
def
get_simultaneous_jobs
(
self
):
return
12
try
:
# use twice as many simultaneous jobs as we have CPU cores
return
multiprocessing
.
cpu_count
()
*
2
except
NotImplementedError
:
# default to 12, if multiprocessing.cpu_count() is not implemented
return
12
def
get_make_args
(
self
,
toolchain
):
return
[
'--quiet'
,
'-j'
+
str
(
self
.
get_simultaneous_jobs
())]
...
...
@@ -19,7 +24,7 @@ class MakeProject(Project):
return
[
'--quiet'
,
self
.
install_target
]
def
make
(
self
,
toolchain
,
wd
,
args
):
subprocess
.
check_call
([
'
/usr/bin/
make'
]
+
args
,
subprocess
.
check_call
([
'make'
]
+
args
,
cwd
=
wd
,
env
=
toolchain
.
env
)
def
build_make
(
self
,
toolchain
,
wd
,
install
=
True
):
...
...
python/build/meson.py
View file @
680629ac
import
os.path
,
subprocess
,
sys
import
os
import
subprocess
import
platform
from
build.project
import
Project
...
...
@@ -115,5 +116,5 @@ class MesonProject(Project):
def
_build
(
self
,
toolchain
):
build
=
self
.
configure
(
toolchain
)
subprocess
.
check_call
([
'ninja'
,
'install'
],
subprocess
.
check_call
([
'ninja'
,
'
-v'
,
'
install'
],
cwd
=
build
,
env
=
toolchain
.
env
)
python/build/project.py
View file @
680629ac
...
...
@@ -14,13 +14,14 @@ class Project:
if
base
is
None
:
basename
=
os
.
path
.
basename
(
url
)
m
=
re
.
match
(
r'^(.+)\.(tar(\.(gz|bz2|xz|lzma))?|zip)$'
,
basename
)
if
not
m
:
raise
if
not
m
:
raise
RuntimeError
(
'Could not identify tarball name: '
+
basename
)
self
.
base
=
m
.
group
(
1
)
else
:
self
.
base
=
base
if
name
is
None
or
version
is
None
:
m
=
re
.
match
(
r'^([-\w]+)-(\d[\d.]*[a-z]?[\d.]*(?:-(?:alpha|beta)\d+)?)(\+.*)?$'
,
self
.
base
)
if
not
m
:
raise
RuntimeError
(
'Could not identify tarball name: '
+
self
.
base
)
if
name
is
None
:
name
=
m
.
group
(
1
)
if
version
is
None
:
version
=
m
.
group
(
2
)
...
...
@@ -55,8 +56,8 @@ class Project:
parent_path
=
toolchain
.
src_path
else
:
parent_path
=
toolchain
.
build_path
path
=
untar
(
self
.
download
(
toolchain
),
parent_path
,
self
.
base
)
path
=
untar
(
self
.
download
(
toolchain
),
parent_path
,
self
.
base
,
lazy
=
out_of_tree
and
self
.
patches
is
None
)
if
self
.
patches
is
not
None
:
push_all
(
toolchain
,
path
,
self
.
patches
)
...
...
@@ -71,8 +72,10 @@ class Project:
return
path
def
make_build_path
(
self
,
toolchain
):
def
make_build_path
(
self
,
toolchain
,
lazy
=
False
):
path
=
os
.
path
.
join
(
toolchain
.
build_path
,
self
.
base
)
if
lazy
and
os
.
path
.
isdir
(
path
):
return
path
try
:
shutil
.
rmtree
(
path
)
except
FileNotFoundError
:
...
...
python/build/tar.py
View file @
680629ac
import
os
,
shutil
,
subprocess
def
untar
(
tarball_path
,
parent_path
,
base
):
def
untar
(
tarball_path
,
parent_path
,
base
,
lazy
=
False
):
path
=
os
.
path
.
join
(
parent_path
,
base
)
if
lazy
and
os
.
path
.
isdir
(
path
):
return
path
try
:
shutil
.
rmtree
(
path
)
except
FileNotFoundError
:
pass
os
.
makedirs
(
parent_path
,
exist_ok
=
True
)
try
:
subprocess
.
check_call
([
'
/bin/
tar'
,
'xfC'
,
tarball_path
,
parent_path
])
subprocess
.
check_call
([
'tar'
,
'xfC'
,
tarball_path
,
parent_path
])
except
FileNotFoundError
:
import
tarfile
tar
=
tarfile
.
open
(
tarball_path
)
...
...
python/build/zlib.py
View file @
680629ac
import
os.path
,
subprocess
import
subprocess
from
build.
project
import
Project
from
build.
makeproject
import
Make
Project
class
ZlibProject
(
Project
):
class
ZlibProject
(
Make
Project
):
def
__init__
(
self
,
url
,
md5
,
installed
,
**
kwargs
):
Project
.
__init__
(
self
,
url
,
md5
,
installed
,
**
kwargs
)
MakeProject
.
__init__
(
self
,
url
,
md5
,
installed
,
**
kwargs
)
def
get_make_args
(
self
,
toolchain
):
return
MakeProject
.
get_make_args
(
self
,
toolchain
)
+
[
'CC='
+
toolchain
.
cc
+
' '
+
toolchain
.
cppflags
+
' '
+
toolchain
.
cflags
,
'CPP='
+
toolchain
.
cc
+
' -E '
+
toolchain
.
cppflags
,
'AR='
+
toolchain
.
ar
,
'ARFLAGS='
+
toolchain
.
arflags
,
'RANLIB='
+
toolchain
.
ranlib
,
'LDSHARED='
+
toolchain
.
cc
+
' -shared'
,
'libz.a'
]
def
get_make_install_args
(
self
,
toolchain
):
return
[
'RANLIB='
+
toolchain
.
ranlib
,
self
.
install_target
]
def
_build
(
self
,
toolchain
):
src
=
self
.
unpack
(
toolchain
,
out_of_tree
=
False
)
subprocess
.
check_call
([
'/usr/bin/make'
,
'--quiet'
,
'-f'
,
'win32/Makefile.gcc'
,
'PREFIX='
+
toolchain
.
arch
+
'-'
,
'-j12'
,
'install'
,
'INCLUDE_PATH='
+
os
.
path
.
join
(
toolchain
.
install_prefix
,
'include'
),
'LIBRARY_PATH='
+
os
.
path
.
join
(
toolchain
.
install_prefix
,
'lib'
),
'BINARY_PATH='
+
os
.
path
.
join
(
toolchain
.
install_prefix
,
'bin'
),
],
cwd
=
src
,
env
=
toolchain
.
env
)
subprocess
.
check_call
([
'./configure'
,
'--prefix='
+
toolchain
.
install_prefix
,
'--static'
],
cwd
=
src
,
env
=
toolchain
.
env
)
self
.
build_make
(
toolchain
,
src
)
src/CommandLine.cxx
View file @
680629ac
...
...
@@ -352,12 +352,16 @@ ParseCommandLine(int argc, char **argv, CommandLineOptions &options,
break
;
case
OPTION_NO_DAEMON
:
#ifdef ENABLE_DAEMON
options
.
daemon
=
false
;
#endif
break
;
#ifdef __linux__
case
OPTION_SYSTEMD
:
#ifdef ENABLE_DAEMON
options
.
daemon
=
false
;
#endif
options
.
systemd
=
true
;
break
;
#endif
...
...
src/CommandLine.hxx
View file @
680629ac
...
...
@@ -20,11 +20,18 @@
#ifndef MPD_COMMAND_LINE_HXX
#define MPD_COMMAND_LINE_HXX
#include "config.h" // for ENABLE_DAEMON
struct
ConfigData
;
struct
CommandLineOptions
{
bool
kill
=
false
;
#ifdef ENABLE_DAEMON
bool
daemon
=
true
;
#else
static
constexpr
bool
daemon
=
false
;
#endif
#ifdef __linux__
bool
systemd
=
false
;
...
...
src/Main.cxx
View file @
680629ac
...
...
@@ -482,7 +482,10 @@ MainConfigured(const CommandLineOptions &options,
#ifndef ANDROID
setup_log_output
();
const
ScopeSignalHandlersInit
signal_handlers_init
(
instance
);
const
ScopeSignalHandlersInit
signal_handlers_init
{
instance
,
options
.
daemon
,
};
#endif
instance
.
io_thread
.
Start
();
...
...
src/SongPrint.cxx
View file @
680629ac
...
...
@@ -24,6 +24,7 @@
#include "TagPrint.hxx"
#include "client/Response.hxx"
#include "fs/Traits.hxx"
#include "lib/fmt/AudioFormatFormatter.hxx"
#include "time/ChronoUtil.hxx"
#include "util/StringBuffer.hxx"
#include "util/UriUtil.hxx"
...
...
@@ -93,7 +94,7 @@ song_print_info(Response &r, const LightSong &song, bool base) noexcept
time_print
(
r
,
"Last-Modified"
,
song
.
mtime
);
if
(
song
.
audio_format
.
IsDefined
())
r
.
Fmt
(
FMT_STRING
(
"Format: {}
\n
"
),
ToString
(
song
.
audio_format
)
);
r
.
Fmt
(
FMT_STRING
(
"Format: {}
\n
"
),
song
.
audio_format
);
tag_print_values
(
r
,
song
.
tag
);
...
...
@@ -116,7 +117,7 @@ song_print_info(Response &r, const DetachedSong &song, bool base) noexcept
time_print
(
r
,
"Last-Modified"
,
song
.
GetLastModified
());
if
(
const
auto
&
f
=
song
.
GetAudioFormat
();
f
.
IsDefined
())
r
.
Fmt
(
FMT_STRING
(
"Format: {}
\n
"
),
ToString
(
f
)
);
r
.
Fmt
(
FMT_STRING
(
"Format: {}
\n
"
),
f
);
tag_print_values
(
r
,
song
.
GetTag
());
...
...
src/SongSave.cxx
View file @
680629ac
...
...
@@ -63,6 +63,9 @@ song_save(BufferedOutputStream &os, const Song &song)
if
(
song
.
audio_format
.
IsDefined
())
os
.
Format
(
"Format: %s
\n
"
,
ToString
(
song
.
audio_format
).
c_str
());
if
(
song
.
in_playlist
)
os
.
Write
(
"InPlaylist: yes
\n
"
);
if
(
!
IsNegative
(
song
.
mtime
))
os
.
Format
(
SONG_MTIME
": %li
\n
"
,
(
long
)
std
::
chrono
::
system_clock
::
to_time_t
(
song
.
mtime
));
...
...
@@ -86,7 +89,7 @@ song_save(BufferedOutputStream &os, const DetachedSong &song)
DetachedSong
song_load
(
LineReader
&
file
,
const
char
*
uri
,
std
::
string
*
target_r
)
std
::
string
*
target_r
,
bool
*
in_playlist_r
)
{
DetachedSong
song
(
uri
);
...
...
@@ -132,6 +135,9 @@ song_load(LineReader &file, const char *uri,
song
.
SetStartTime
(
SongTime
::
FromMS
(
start_ms
));
song
.
SetEndTime
(
SongTime
::
FromMS
(
end_ms
));
}
else
if
(
StringIsEqual
(
line
,
"InPlaylist"
))
{
if
(
in_playlist_r
!=
nullptr
)
*
in_playlist_r
=
StringIsEqual
(
value
,
"yes"
);
}
else
{
throw
FormatRuntimeError
(
"unknown line in db: %s"
,
line
);
}
...
...
src/SongSave.hxx
View file @
680629ac
...
...
@@ -44,6 +44,6 @@ song_save(BufferedOutputStream &os, const DetachedSong &song);
*/
DetachedSong
song_load
(
LineReader
&
file
,
const
char
*
uri
,
std
::
string
*
target_r
=
nullptr
);
std
::
string
*
target_r
=
nullptr
,
bool
*
in_playlist_r
=
nullptr
);
#endif
src/TagPrint.cxx
View file @
680629ac
...
...
@@ -35,8 +35,9 @@ tag_print_types(Response &r) noexcept
}
void
tag_print
(
Response
&
r
,
TagType
type
,
StringView
value
)
noexcept
tag_print
(
Response
&
r
,
TagType
type
,
StringView
_
value
)
noexcept
{
const
std
::
string_view
value
{
_value
};
r
.
Fmt
(
FMT_STRING
(
"{}: {}
\n
"
),
tag_item_names
[
type
],
value
);
}
...
...
src/TimePrint.cxx
View file @
680629ac
...
...
@@ -36,5 +36,5 @@ time_print(Response &r, const char *name,
return
;
}
r
.
Fmt
(
FMT_STRING
(
"{}: {}
\n
"
),
name
,
s
);
r
.
Fmt
(
FMT_STRING
(
"{}: {}
\n
"
),
name
,
s
.
c_str
()
);
}
src/command/DatabaseCommands.cxx
View file @
680629ac
...
...
@@ -41,6 +41,8 @@
#include <memory>
#include <vector>
#include <limits.h> // for UINT_MAX
CommandResult
handle_listfiles_db
(
Client
&
client
,
Response
&
r
,
const
char
*
uri
)
{
...
...
src/command/FileCommands.cxx
View file @
680629ac
...
...
@@ -100,10 +100,6 @@ handle_listfiles_local(Response &r, Path path_fs)
return
CommandResult
::
OK
;
}
#if defined(_WIN32) && GCC_CHECK_VERSION(4,6)
#pragma GCC diagnostic pop
#endif
gcc_pure
static
bool
IsValidName
(
const
StringView
s
)
noexcept
...
...
@@ -130,7 +126,8 @@ public:
explicit
PrintCommentHandler
(
Response
&
_response
)
noexcept
:
NullTagHandler
(
WANT_PAIR
),
response
(
_response
)
{}
void
OnPair
(
StringView
key
,
StringView
value
)
noexcept
override
{
void
OnPair
(
StringView
_key
,
StringView
_value
)
noexcept
override
{
const
std
::
string_view
key
{
_key
},
value
{
_value
};
if
(
IsValidName
(
key
)
&&
IsValidValue
(
value
))
response
.
Fmt
(
FMT_STRING
(
"{}: {}
\n
"
),
key
,
value
);
}
...
...
src/command/PlayerCommands.cxx
View file @
680629ac
...
...
@@ -28,6 +28,7 @@
#include "Partition.hxx"
#include "Instance.hxx"
#include "IdleFlags.hxx"
#include "lib/fmt/AudioFormatFormatter.hxx"
#include "util/StringBuffer.hxx"
#include "util/ScopeExit.hxx"
#include "util/Exception.hxx"
...
...
@@ -185,7 +186,7 @@ handle_status(Client &client, [[maybe_unused]] Request args, Response &r)
if
(
player_status
.
audio_format
.
IsDefined
())
r
.
Fmt
(
FMT_STRING
(
COMMAND_STATUS_AUDIO
": {}
\n
"
),
ToString
(
player_status
.
audio_format
)
);
player_status
.
audio_format
);
}
#ifdef ENABLE_DATABASE
...
...
src/command/StorageCommands.cxx
View file @
680629ac
...
...
@@ -83,10 +83,6 @@ handle_listfiles_storage(Response &r, StorageDirectoryReader &reader)
}
}
#if defined(_WIN32) && GCC_CHECK_VERSION(4,6)
#pragma GCC diagnostic pop
#endif
CommandResult
handle_listfiles_storage
(
Response
&
r
,
Storage
&
storage
,
const
char
*
uri
)
{
...
...
src/db/plugins/simple/Directory.cxx
View file @
680629ac
...
...
@@ -127,6 +127,18 @@ Directory::LookupTargetSong(std::string_view _target) noexcept
}
void
Directory
::
ClearInPlaylist
()
noexcept
{
assert
(
holding_db_lock
());
for
(
auto
&
child
:
children
)
child
.
ClearInPlaylist
();
for
(
auto
&
song
:
songs
)
song
.
in_playlist
=
false
;
}
void
Directory
::
PruneEmpty
()
noexcept
{
assert
(
holding_db_lock
());
...
...
src/db/plugins/simple/Directory.hxx
View file @
680629ac
...
...
@@ -288,6 +288,14 @@ public:
SongPtr
RemoveSong
(
Song
*
song
)
noexcept
;
/**
* Recursively walk through the whole tree and set all
* `Song::in_playlist` fields to `false`.
*
* Caller must lock the #db_mutex.
*/
void
ClearInPlaylist
()
noexcept
;
/**
* Caller must lock the #db_mutex.
*/
void
PruneEmpty
()
noexcept
;
...
...
src/db/plugins/simple/DirectorySave.cxx
View file @
680629ac
...
...
@@ -168,12 +168,14 @@ directory_load(LineReader &file, Directory &directory)
throw
FormatRuntimeError
(
"Duplicate song '%s'"
,
name
);
std
::
string
target
;
bool
in_playlist
=
false
;
auto
detached_song
=
song_load
(
file
,
name
,
&
target
);
&
target
,
&
in_playlist
);
auto
song
=
std
::
make_unique
<
Song
>
(
std
::
move
(
detached_song
),
directory
);
song
->
target
=
std
::
move
(
target
);
song
->
in_playlist
=
in_playlist
;
directory
.
AddSong
(
std
::
move
(
song
));
}
else
if
((
p
=
StringAfterPrefix
(
line
,
PLAYLIST_META_BEGIN
)))
{
...
...
src/db/update/Archive.cxx
View file @
680629ac
...
...
@@ -51,6 +51,15 @@ LockFindSong(Directory &directory, std::string_view name) noexcept
return
directory
.
FindSong
(
name
);
}
[[
gnu
::
pure
]]
static
bool
IsAcceptableFilename
(
std
::
string_view
name
)
noexcept
{
return
!
name
.
empty
()
&&
/* newlines cannot be represented in MPD's protocol */
name
.
find
(
'\n'
)
==
name
.
npos
;
}
void
UpdateWalk
::
UpdateArchiveTree
(
ArchiveFile
&
archive
,
Directory
&
directory
,
const
char
*
name
)
noexcept
...
...
@@ -58,6 +67,9 @@ UpdateWalk::UpdateArchiveTree(ArchiveFile &archive, Directory &directory,
const
char
*
tmp
=
std
::
strchr
(
name
,
'/'
);
if
(
tmp
)
{
const
std
::
string_view
child_name
(
name
,
tmp
-
name
);
if
(
!
IsAcceptableFilename
(
child_name
))
return
;
//add dir is not there already
Directory
*
subdir
=
LockMakeChild
(
directory
,
child_name
);
subdir
->
device
=
DEVICE_INARCHIVE
;
...
...
@@ -65,11 +77,8 @@ UpdateWalk::UpdateArchiveTree(ArchiveFile &archive, Directory &directory,
//create directories first
UpdateArchiveTree
(
archive
,
*
subdir
,
tmp
+
1
);
}
else
{
if
(
StringIsEmpty
(
name
))
{
LogWarning
(
update_domain
,
"archive returned directory only"
);
if
(
!
IsAcceptableFilename
(
name
))
return
;
}
//add file
Song
*
song
=
LockFindSong
(
directory
,
name
);
...
...
src/db/update/Walk.cxx
View file @
680629ac
...
...
@@ -531,6 +531,7 @@ UpdateWalk::Walk(Directory &root, const char *path, bool discard) noexcept
{
const
ScopeDatabaseLock
protect
;
root
.
ClearInPlaylist
();
PurgeDanglingFromPlaylists
(
root
);
}
...
...
src/decoder/DecoderList.cxx
View file @
680629ac
...
...
@@ -114,12 +114,12 @@ constexpr const struct DecoderPlugin *decoder_plugins[] = {
#ifdef ENABLE_ADPLUG
&
adplug_decoder_plugin
,
#endif
#ifdef ENABLE_FFMPEG
&
ffmpeg_decoder_plugin
,
#endif
#ifdef ENABLE_GME
&
gme_decoder_plugin
,
#endif
#ifdef ENABLE_FFMPEG
&
ffmpeg_decoder_plugin
,
#endif
&
pcm_decoder_plugin
,
nullptr
};
...
...
src/decoder/plugins/GmeDecoderPlugin.cxx
View file @
680629ac
...
...
@@ -56,20 +56,17 @@ struct GmeContainerPath {
unsigned
track
;
};
#if GME_VERSION >= 0x000600
static
int
gme_accuracy
;
#endif
static
unsigned
gme_default_fade
;
static
bool
gme_plugin_init
([[
maybe_unused
]]
const
ConfigBlock
&
block
)
{
#if GME_VERSION >= 0x000600
auto
accuracy
=
block
.
GetBlockParam
(
"accuracy"
);
gme_accuracy
=
accuracy
!=
nullptr
?
(
int
)
accuracy
->
GetBoolValue
()
:
-
1
;
#endif
auto
fade
=
block
.
GetBlockParam
(
"default_fade"
);
gme_default_fade
=
fade
!=
nullptr
?
fade
->
GetUnsignedValue
()
*
1000
...
...
@@ -163,10 +160,8 @@ gme_file_decode(DecoderClient &client, Path path_fs)
FmtDebug
(
gme_domain
,
"emulator type '{}'"
,
gme_type_system
(
gme_type
(
emu
)));
#if GME_VERSION >= 0x000600
if
(
gme_accuracy
>=
0
)
gme_enable_accuracy
(
emu
,
gme_accuracy
);
#endif
gme_info_t
*
ti
;
const
char
*
gme_err
=
gme_track_info
(
emu
,
&
ti
,
container
.
track
);
...
...
src/decoder/plugins/meson.build
View file @
680629ac
...
...
@@ -81,7 +81,7 @@ if libfaad_dep.found()
decoder_plugins_sources += 'FaadDecoderPlugin.cxx'
endif
libgme_dep =
c_compiler.find_library('gme
', required: get_option('gme'))
libgme_dep =
dependency('libgme', version: '>= 0.6
', required: get_option('gme'))
decoder_features.set('ENABLE_GME', libgme_dep.found())
if libgme_dep.found()
decoder_plugins_sources += 'GmeDecoderPlugin.cxx'
...
...
src/event/Loop.cxx
View file @
680629ac
...
...
@@ -272,9 +272,8 @@ EventLoop::Run() noexcept
#endif
assert
(
IsInside
());
assert
(
!
quit
);
#ifdef HAVE_THREADED_EVENT_LOOP
assert
(
alive
);
assert
(
alive
||
quit
);
assert
(
busy
);
wake_event
.
Schedule
(
SocketEvent
::
READ
);
...
...
@@ -299,7 +298,7 @@ EventLoop::Run() noexcept
steady_clock_cache
.
flush
();
do
{
while
(
!
quit
)
{
again
=
false
;
/* invoke timers */
...
...
@@ -361,7 +360,7 @@ EventLoop::Run() noexcept
socket_event
.
Dispatch
();
}
}
while
(
!
quit
);
}
#ifdef HAVE_THREADED_EVENT_LOOP
#ifndef NDEBUG
...
...
src/fs/Charset.cxx
View file @
680629ac
...
...
@@ -20,7 +20,6 @@
#include "Charset.hxx"
#include "Features.hxx"
#include "Domain.hxx"
#include "Log.hxx"
#include "lib/icu/Converter.hxx"
#include "util/AllocatedString.hxx"
#include "config.h"
...
...
@@ -45,11 +44,9 @@ SetFSCharset(const char *charset)
assert
(
charset
!=
nullptr
);
assert
(
fs_converter
==
nullptr
);
fs_charset
=
charset
;
fs_converter
=
IcuConverter
::
Create
(
charset
);
assert
(
fs_converter
!=
nullptr
);
FmtDebug
(
path_domain
,
"SetFSCharset: fs charset is {}"
,
fs_charset
);
}
#endif
...
...
src/input/AsyncInputStream.cxx
View file @
680629ac
...
...
@@ -101,9 +101,17 @@ AsyncInputStream::Seek(std::unique_lock<Mutex> &lock,
assert
(
IsReady
());
assert
(
seek_state
==
SeekState
::
NONE
);
if
(
new_offset
==
offset
)
/* no-op */
if
(
new_offset
==
offset
)
{
/* no-op, but if the stream is not open anymore (maybe
because it has failed), nothing can be read, so we
should check for errors here instead of pretending
everything's fine */
if
(
!
open
)
Check
();
return
;
}
if
(
!
IsSeekable
())
throw
std
::
runtime_error
(
"Not seekable"
);
...
...
src/input/plugins/CurlInputPlugin.cxx
View file @
680629ac
...
...
@@ -417,7 +417,6 @@ CurlInputStream::InitEasy()
request
->
SetOption
(
CURLOPT_HTTP200ALIASES
,
http_200_aliases
);
request
->
SetOption
(
CURLOPT_FOLLOWLOCATION
,
1L
);
request
->
SetOption
(
CURLOPT_MAXREDIRS
,
5L
);
request
->
SetOption
(
CURLOPT_FAILONERROR
,
1L
);
/* this option eliminates the probe request when
username/password are specified */
...
...
src/lib/crypto/meson.build
View file @
680629ac
...
...
@@ -18,13 +18,13 @@ endif
conf.set('HAVE_MD5', crypto_md5_dep.found())
if
libav
util_dep.found()
if
ffmpeg_
util_dep.found()
crypto_base64 = static_library(
'crypto_base64',
'Base64.cxx',
include_directories: inc,
dependencies: [
libav
util_dep,
ffmpeg_
util_dep,
],
)
...
...
src/lib/dbus/AppendIter.hxx
View file @
680629ac
...
...
@@ -36,6 +36,7 @@
#include "Iter.hxx"
#include "Values.hxx"
#include <cstdint>
#include <stdexcept>
namespace
ODBus
{
...
...
src/lib/ffmpeg/LogError.cxx
deleted
100644 → 0
View file @
3344811b
/*
* Copyright 2003-2021 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "LogError.hxx"
#include "Domain.hxx"
#include "Log.hxx"
extern
"C"
{
#include <libavutil/error.h>
}
void
LogFfmpegError
(
int
errnum
)
{
char
msg
[
256
];
av_strerror
(
errnum
,
msg
,
sizeof
(
msg
));
LogError
(
ffmpeg_domain
,
msg
);
}
void
LogFfmpegError
(
int
errnum
,
const
char
*
prefix
)
{
char
msg
[
256
];
av_strerror
(
errnum
,
msg
,
sizeof
(
msg
));
FmtError
(
ffmpeg_domain
,
"{}: {}"
,
prefix
,
msg
);
}
src/lib/ffmpeg/LogError.hxx
deleted
100644 → 0
View file @
3344811b
/*
* Copyright 2003-2021 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef MPD_FFMPEG_LOG_ERROR_HXX
#define MPD_FFMPEG_LOG_ERROR_HXX
void
LogFfmpegError
(
int
errnum
);
void
LogFfmpegError
(
int
errnum
,
const
char
*
prefix
);
#endif
src/lib/ffmpeg/meson.build
View file @
680629ac
...
...
@@ -13,6 +13,29 @@ else
endif
conf.set('HAVE_LIBAVFILTER', libavfilter_dep.found())
if not libavutil_dep.found()
ffmpeg_util_dep = dependency('', required: false)
ffmpeg_dep = dependency('', required: false)
subdir_done()
endif
ffmpeg_util = static_library(
'ffmpeg_util',
'Interleave.cxx',
'Error.cxx',
include_directories: inc,
dependencies: [
libavutil_dep,
],
)
ffmpeg_util_dep = declare_dependency(
link_with: ffmpeg_util,
dependencies: [
libavutil_dep,
],
)
if not enable_ffmpeg
ffmpeg_dep = dependency('', required: false)
subdir_done()
...
...
@@ -30,17 +53,16 @@ ffmpeg = static_library(
'ffmpeg',
'Init.cxx',
'Interleave.cxx',
'LogError.cxx',
'LogCallback.cxx',
'Error.cxx',
'Domain.cxx',
ffmpeg_sources,
include_directories: inc,
dependencies: [
ffmpeg_util_dep,
libavformat_dep,
libavcodec_dep,
libavfilter_dep,
libavutil_dep,
log_dep,
],
)
...
...
@@ -48,9 +70,9 @@ ffmpeg = static_library(
ffmpeg_dep = declare_dependency(
link_with: ffmpeg,
dependencies: [
ffmpeg_util_dep,
libavformat_dep,
libavcodec_dep,
libavfilter_dep,
libavutil_dep,
],
)
src/output/plugins/OSXOutputPlugin.cxx
View file @
680629ac
...
...
@@ -627,7 +627,7 @@ osx_render(void *vdata,
{
OSXOutput
*
od
=
(
OSXOutput
*
)
vdata
;
in
t
count
=
in_number_frames
*
od
->
asbd
.
mBytesPerFrame
;
std
::
size_
t
count
=
in_number_frames
*
od
->
asbd
.
mBytesPerFrame
;
buffer_list
->
mBuffers
[
0
].
mDataByteSize
=
od
->
ring_buffer
->
pop
((
uint8_t
*
)
buffer_list
->
mBuffers
[
0
].
mData
,
count
);
...
...
src/output/plugins/PipeWireOutputPlugin.cxx
View file @
680629ac
...
...
@@ -973,6 +973,8 @@ PipeWireOutput::SendTag(const Tag &tag)
struct
spa_dict
dict
=
SPA_DICT_INIT
(
items
,
n_items
);
const
PipeWire
::
ThreadLoopLock
lock
(
thread_loop
);
auto
rc
=
pw_stream_update_properties
(
stream
,
&
dict
);
if
(
rc
<
0
)
LogWarning
(
pipewire_output_domain
,
"Error updating properties"
);
...
...
src/storage/plugins/CurlStorage.cxx
View file @
680629ac
...
...
@@ -22,6 +22,7 @@
#include "storage/StorageInterface.hxx"
#include "storage/FileInfo.hxx"
#include "storage/MemoryDirectoryReader.hxx"
#include "lib/curl/Error.hxx"
#include "lib/curl/Init.hxx"
#include "lib/curl/Global.hxx"
#include "lib/curl/Slist.hxx"
...
...
@@ -300,8 +301,9 @@ private:
/* virtual methods from CurlResponseHandler */
void
OnHeaders
(
unsigned
status
,
Curl
::
Headers
&&
headers
)
final
{
if
(
status
!=
207
)
throw
FormatRuntimeError
(
"Status %d from WebDAV server; expected
\"
207 Multi-Status
\"
"
,
status
);
throw
HttpStatusError
(
status
,
StringFormat
<
80
>
(
"Status %u from WebDAV server; expected
\"
207 Multi-Status
\"
"
,
status
).
c_str
());
if
(
!
IsXmlContentType
(
headers
))
throw
std
::
runtime_error
(
"Unexpected Content-Type from WebDAV server"
);
...
...
src/unix/SignalHandlers.cxx
View file @
680629ac
...
...
@@ -30,6 +30,10 @@
#include <csignal>
#ifdef __linux__
#include <sys/prctl.h>
#endif
static
constexpr
Domain
signal_handlers_domain
(
"signal_handlers"
);
static
void
...
...
@@ -60,7 +64,7 @@ handle_reload_event(void *ctx) noexcept
#endif
void
SignalHandlersInit
(
Instance
&
instance
)
SignalHandlersInit
(
Instance
&
instance
,
bool
daemon
)
{
auto
&
loop
=
instance
.
event_loop
;
...
...
@@ -79,6 +83,14 @@ SignalHandlersInit(Instance &instance)
SignalMonitorRegister
(
SIGHUP
,
{
&
instance
,
handle_reload_event
});
#endif
if
(
!
daemon
)
{
#ifdef __linux__
/* if MPD was not daemonized, shut it down when the
parent process dies */
prctl
(
PR_SET_PDEATHSIG
,
SIGTERM
);
#endif
}
}
void
...
...
src/unix/SignalHandlers.hxx
View file @
680629ac
...
...
@@ -23,15 +23,15 @@
struct
Instance
;
void
SignalHandlersInit
(
Instance
&
instance
);
SignalHandlersInit
(
Instance
&
instance
,
bool
daemon
);
void
SignalHandlersFinish
()
noexcept
;
class
ScopeSignalHandlersInit
{
public
:
ScopeSignalHandlersInit
(
Instance
&
instance
)
{
SignalHandlersInit
(
instance
);
ScopeSignalHandlersInit
(
Instance
&
instance
,
bool
daemon
)
{
SignalHandlersInit
(
instance
,
daemon
);
}
~
ScopeSignalHandlersInit
()
noexcept
{
...
...
src/util/ScopeExit.hxx
View file @
680629ac
...
...
@@ -40,14 +40,17 @@ class ScopeExitGuard : F {
bool
enabled
=
true
;
public
:
explicit
ScopeExitGuard
(
F
&&
f
)
:
F
(
std
::
forward
<
F
>
(
f
))
{}
explicit
ScopeExitGuard
(
F
&&
f
)
noexcept
:
F
(
std
::
forward
<
F
>
(
f
))
{}
ScopeExitGuard
(
ScopeExitGuard
&&
src
)
:
F
(
std
::
move
(
src
)),
enabled
(
src
.
enabled
)
{
src
.
enabled
=
false
;
}
ScopeExitGuard
(
ScopeExitGuard
&&
src
)
noexcept
:
F
(
std
::
move
(
src
)),
enabled
(
std
::
exchange
(
src
.
enabled
,
false
))
{}
~
ScopeExitGuard
()
{
/* destructors are "noexcept" by default; this explicit
"noexcept" declaration allows the destructor to throw if
the function can throw; without this, a throwing function
would std::terminate() */
~
ScopeExitGuard
()
noexcept
(
noexcept
(
std
::
declval
<
F
>
()()))
{
if
(
enabled
)
F
::
operator
()();
}
...
...
@@ -64,7 +67,7 @@ struct ScopeExitTag {
parantheses at the end of the expression AtScopeExit()
call */
template
<
typename
F
>
ScopeExitGuard
<
F
>
operator
+
(
F
&&
f
)
{
ScopeExitGuard
<
F
>
operator
+
(
F
&&
f
)
noexcept
{
return
ScopeExitGuard
<
F
>
(
std
::
forward
<
F
>
(
f
));
}
};
...
...
subprojects/expat.wrap
View file @
680629ac
...
...
@@ -3,10 +3,11 @@ directory = expat-2.5.0
source_url = https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.xz
source_filename = expat-2.5.0.tar.bz2
source_hash = ef2420f0232c087801abf705e89ae65f6257df6b7931d37846a193ef2e8cdcbe
patch_filename = expat_2.5.0-1_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.5.0-1/get_patch
patch_hash = 0d0d6e07ed21cf4892126a8270f5fd182012ab34b3ebe24932a2bef5ca608a61
wrapdb_version = 2.5.0-1
patch_filename = expat_2.5.0-2_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.5.0-2/get_patch
patch_hash = f6cc5ff0d909a2f51a907cc6ca655fb18517a0f58bbe67e4a9c621f1549560c9
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/expat_2.5.0-2/expat-2.5.0.tar.bz2
wrapdb_version = 2.5.0-2
[provide]
expat = expat_dep
subprojects/sqlite3.wrap
View file @
680629ac
[wrap-file]
directory = sqlite-amalgamation-3390300
source_url = https://sqlite.org/2022/sqlite-amalgamation-3390300.zip
source_filename = sqlite-amalgamation-3390300.zip
source_hash = a89db3030d229d860ae56a8bac50ac9761434047ae886e47e7c8f9f428fa98ad
patch_filename = sqlite3_3.39.3-1_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/sqlite3_3.39.3-1/get_patch
patch_hash = f5c41ff7b3da1108ed221b9a820b41188550cafb8a6c3d247bb40bd598775050
wrapdb_version = 3.39.3-1
directory = sqlite-amalgamation-3410200
source_url = https://www.sqlite.org/2023/sqlite-amalgamation-3410200.zip
source_filename = sqlite-amalgamation-3410200.zip
source_hash = 01df06a84803c1ab4d62c64e995b151b2dbcf5dbc93bbc5eee213cb18225d987
patch_filename = sqlite3_3.41.2-2_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/sqlite3_3.41.2-2/get_patch
patch_hash = 246681dfb731a14bfa61bcde651d5581a7e1c7d14851bfb57a941fac540a6810
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/sqlite3_3.41.2-2/sqlite-amalgamation-3410200.zip
wrapdb_version = 3.41.2-2
[provide]
sqlite3 = sqlite3_dep
systemd/system/meson.build
View file @
680629ac
systemd_system_unit_dir = get_option('systemd_system_unit_dir')
if systemd_system_unit_dir == ''
systemd = dependency('systemd', required: false)
if systemd.found()
systemd_system_unit_dir = systemd.get_variable(pkgconfig: 'systemdsystemunitdir')
endif
endif
if systemd_system_unit_dir == ''
systemd_system_unit_dir = join_paths(get_option('prefix'), 'lib', 'systemd', 'system')
endif
...
...
systemd/user/meson.build
View file @
680629ac
systemd_user_unit_dir = get_option('systemd_user_unit_dir')
if systemd_user_unit_dir == ''
systemd = dependency('systemd', required: false)
if systemd.found()
systemd_user_unit_dir = systemd.get_variable(pkgconfig: 'systemduserunitdir')
endif
endif
if systemd_user_unit_dir == ''
systemd_user_unit_dir = join_paths(get_option('prefix'), 'lib', 'systemd', 'user')
endif
...
...
win32/build.py
View file @
680629ac
...
...
@@ -48,6 +48,7 @@ class CrossGccToolchain:
self
.
cc
=
os
.
path
.
join
(
toolchain_bin
,
arch
+
'-gcc'
)
self
.
cxx
=
os
.
path
.
join
(
toolchain_bin
,
arch
+
'-g++'
)
self
.
ar
=
os
.
path
.
join
(
toolchain_bin
,
arch
+
'-ar'
)
self
.
arflags
=
'rcs'
self
.
ranlib
=
os
.
path
.
join
(
toolchain_bin
,
arch
+
'-ranlib'
)
self
.
nm
=
os
.
path
.
join
(
toolchain_bin
,
arch
+
'-nm'
)
self
.
strip
=
os
.
path
.
join
(
toolchain_bin
,
arch
+
'-strip'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment