[Pkg-mpd-commits] [pkg-mpd] 04/06: New upstream version 0.20.13

Florian Schlichting fsfs at moszumanska.debian.org
Tue Dec 19 05:46:11 UTC 2017


This is an automated email from the git hooks/post-receive script.

fsfs pushed a commit to branch master
in repository pkg-mpd.

commit 00875a382aab0bf986f6c353148fead52b07eb5d
Author: Florian Schlichting <fsfs at debian.org>
Date:   Tue Dec 19 06:21:14 2017 +0100

    New upstream version 0.20.13
---
 Makefile.am                                        |   6 +
 Makefile.in                                        | 526 ++++++++++++++++++---
 NEWS                                               |  15 +
 android/build.py                                   |  16 +-
 configure                                          |  24 +-
 configure.ac                                       |   6 +-
 doc/doxygen.conf                                   |   2 +-
 python/build/autotools.py                          |  46 ++
 python/build/boost.py                              |  23 +
 python/build/cmdline.py                            |  29 ++
 python/build/dirs.py                               |   9 +
 python/build/download.py                           |  26 +
 python/build/ffmpeg.py                             |  54 +++
 python/build/libs.py                               | 129 +++++
 python/build/project.py                            |  59 +++
 python/build/tar.py                                |  11 +
 python/build/verify.py                             |  42 ++
 python/build/zlib.py                               |  22 +
 src/CommandLine.cxx                                |   4 +-
 src/LocateUri.hxx                                  |   2 +-
 src/LogBackend.cxx                                 |   2 +-
 src/LogInit.cxx                                    |   4 +-
 src/LogLevel.hxx                                   |   2 +-
 src/Main.cxx                                       |  12 +-
 src/Main.hxx                                       |   2 +-
 src/MusicChunk.hxx                                 |  10 +-
 src/StateFile.cxx                                  |  19 +-
 src/StateFile.hxx                                  |   4 +
 src/Stats.cxx                                      |   4 +-
 src/TimePrint.cxx                                  |   4 +-
 src/client/ClientFile.cxx                          |   2 +-
 src/client/ClientMessage.hxx                       |   2 +-
 src/client/ClientNew.cxx                           |   2 +-
 src/command/CommandResult.hxx                      |   2 +-
 src/command/FileCommands.cxx                       |   4 +-
 src/command/StorageCommands.cxx                    |   4 +-
 src/config/ConfigOption.hxx                        |   4 +-
 src/config/ConfigPath.cxx                          |   6 +-
 src/db/plugins/simple/Directory.cxx                |   4 +-
 src/db/plugins/simple/Directory.hxx                |   1 -
 src/db/plugins/simple/Mount.cxx                    |   4 +-
 src/db/plugins/simple/Mount.hxx                    |   2 +-
 src/db/plugins/simple/SimpleDatabasePlugin.cxx     |  17 +-
 src/db/update/UpdateIO.cxx                         |   2 +-
 src/db/update/Walk.cxx                             |  10 +-
 src/db/update/Walk.hxx                             |   2 +-
 src/decoder/plugins/FlacIOHandle.cxx               |   2 +-
 src/event/MultiSocketMonitor.cxx                   |   4 +-
 src/event/MultiSocketMonitor.hxx                   |   6 +-
 src/event/ServerSocket.cxx                         |   2 +-
 src/event/SignalMonitor.cxx                        |   2 +-
 src/event/SignalMonitor.hxx                        |   2 +-
 src/event/SocketMonitor.cxx                        |   2 +-
 src/event/SocketMonitor.hxx                        |   2 +-
 src/fs/AllocatedPath.cxx                           |   4 +-
 src/fs/Charset.cxx                                 |  10 +-
 src/fs/Charset.hxx                                 |   2 +-
 src/fs/CheckFile.cxx                               |   2 +-
 src/fs/DirectoryReader.cxx                         |   2 +-
 src/fs/DirectoryReader.hxx                         |   2 +-
 src/fs/FileInfo.hxx                                |  20 +-
 src/fs/FileSystem.cxx                              |   8 +-
 src/fs/FileSystem.hxx                              |  16 +-
 src/fs/Glob.hxx                                    |   8 +-
 src/fs/Limits.hxx                                  |   2 +-
 src/fs/StandardDirectory.cxx                       |  14 +-
 src/fs/StandardDirectory.hxx                       |   2 +-
 src/fs/Traits.cxx                                  |   2 +-
 src/fs/Traits.hxx                                  |  20 +-
 src/fs/io/FileOutputStream.cxx                     |   4 +-
 src/fs/io/FileOutputStream.hxx                     |  12 +-
 src/fs/io/FileReader.cxx                           |   2 +-
 src/fs/io/FileReader.hxx                           |  16 +-
 src/input/InputPlugin.hxx                          |   2 +-
 src/input/plugins/CurlInputPlugin.cxx              |   4 +-
 src/lib/icu/CaseFold.cxx                           |   4 +-
 src/lib/icu/Collate.cxx                            |   4 +-
 src/lib/upnp/Action.hxx                            |   2 +-
 src/lib/upnp/Callback.hxx                          |   2 +-
 src/lib/upnp/ClientInit.cxx                        |   2 +-
 src/lib/upnp/ClientInit.hxx                        |   2 +-
 src/lib/upnp/Compat.hxx                            |   9 +-
 src/lib/upnp/ContentDirectoryService.hxx           |   2 +-
 src/lib/upnp/Discovery.cxx                         |   2 +-
 src/lib/upnp/Discovery.hxx                         |   2 +-
 src/lib/upnp/Init.cxx                              |   6 +-
 src/lib/upnp/UniqueIxml.hxx                        |   2 +-
 src/lib/upnp/ixmlwrap.hxx                          |   2 +-
 src/mixer/plugins/AlsaMixerPlugin.cxx              |   4 +-
 src/net/Resolver.cxx                               |   2 +-
 src/net/SocketAddress.hxx                          |   4 +-
 src/net/SocketError.cxx                            |   2 +-
 src/net/SocketError.hxx                            |  14 +-
 src/net/ToString.cxx                               |   2 +-
 src/output/Source.cxx                              |   3 +-
 src/output/plugins/OSXOutputPlugin.cxx             |   9 +-
 src/pcm/SampleFormat.hxx                           |   4 +-
 src/player/Thread.cxx                              |   2 +
 src/queue/PlaylistControl.cxx                      |   3 +-
 src/queue/PlaylistEdit.cxx                         |   2 +-
 src/queue/Queue.cxx                                |  14 +-
 src/queue/Queue.hxx                                |   9 +-
 src/storage/StorageState.cxx                       | 138 ++++++
 src/{system/Clock.hxx => storage/StorageState.hxx} |  28 +-
 src/storage/plugins/LocalStorage.cxx               |   2 +-
 src/system/Clock.cxx                               |   2 +-
 src/system/Clock.hxx                               |   2 +-
 src/system/EPollFD.cxx                             |   2 +-
 src/system/Error.hxx                               |  12 +-
 src/system/EventPipe.cxx                           |  14 +-
 src/system/FatalError.cxx                          |   6 +-
 src/system/FatalError.hxx                          |   4 +-
 src/system/FileDescriptor.cxx                      |   6 +-
 src/system/FileDescriptor.hxx                      |   4 +-
 src/system/fd_util.c                               |  14 +-
 src/system/fd_util.h                               |   2 +-
 src/tag/Format.cxx                                 |   4 +-
 src/thread/Cond.hxx                                |   2 +-
 src/thread/Id.hxx                                  |  12 +-
 src/thread/Mutex.hxx                               |   2 +-
 src/thread/Thread.cxx                              |   6 +-
 src/thread/Thread.hxx                              |  10 +-
 src/thread/Util.cxx                                |   4 +-
 src/unix/Daemon.cxx                                |   6 +-
 src/unix/Daemon.hxx                                |  14 +-
 src/unix/SignalHandlers.cxx                        |   4 +-
 src/util/FormatString.cxx                          |   4 +-
 src/util/HugeAllocator.cxx                         |   2 +-
 src/util/HugeAllocator.hxx                         |   2 +-
 src/util/StringAPI.hxx                             |   2 +-
 src/util/TimeParser.cxx                            |   6 +-
 src/util/WStringAPI.hxx                            |   2 +-
 src/win32/Win32Main.cxx                            |   2 +-
 test/ShutdownHandler.cxx                           |   2 +-
 test/ShutdownHandler.hxx                           |   2 +-
 test/run_resolver.cxx                              |   2 +-
 win32/build.py                                     | 126 +++++
 137 files changed, 1558 insertions(+), 367 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 1d47c61..396bc0c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -702,6 +702,7 @@ libstorage_a_SOURCES = \
 	src/storage/MemoryDirectoryReader.cxx src/storage/MemoryDirectoryReader.hxx \
 	src/storage/Configured.cxx src/storage/Configured.hxx \
 	src/storage/plugins/LocalStorage.cxx src/storage/plugins/LocalStorage.hxx \
+	src/storage/StorageState.cxx src/storage/StorageState.hxx \
 	src/storage/FileInfo.hxx
 
 libstorage_a_CPPFLAGS = $(AM_CPPFLAGS) \
@@ -754,6 +755,7 @@ libneighbor_a_SOURCES = \
 	src/neighbor/NeighborPlugin.hxx
 
 libneighbor_a_CPPFLAGS = $(AM_CPPFLAGS) \
+	$(UPNP_CFLAGS) \
 	$(SMBCLIENT_CFLAGS)
 
 if ENABLE_SMBCLIENT
@@ -803,6 +805,8 @@ libdb_plugins_a_SOURCES = \
 	src/db/plugins/simple/PrefixedLightSong.hxx \
 	src/db/plugins/simple/SimpleDatabasePlugin.cxx \
 	src/db/plugins/simple/SimpleDatabasePlugin.hxx
+libdb_plugins_a_CPPFLAGS = $(AM_CPPFLAGS) \
+	$(UPNP_CFLAGS)
 
 if ENABLE_LIBMPDCLIENT
 libdb_plugins_a_SOURCES += \
@@ -2412,6 +2416,7 @@ EXTRA_DIST = $(doc_DATA) autogen.sh \
 	$(man_MANS) $(DOCBOOK_FILES) doc/mpdconf.example doc/doxygen.conf \
 	$(wildcard $(srcdir)/doc/include/*.xml) \
 	systemd/system/mpd.socket \
+	$(wildcard $(srcdir)/python/build/*.py) \
 	android/AndroidManifest.xml \
 	android/build.py \
 	android/custom_rules.xml \
@@ -2419,5 +2424,6 @@ EXTRA_DIST = $(doc_DATA) autogen.sh \
 	android/src/Bridge.java \
 	android/src/Loader.java \
 	android/src/Main.java \
+	win32/build.py \
 	win32/res/mpd.rc.in win32/res/mpd.ico \
 	src/haiku/App_MusicPD
diff --git a/Makefile.in b/Makefile.in
index a22dfaa..ad743d3 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -747,32 +747,32 @@ am__libdb_plugins_a_SOURCES_DIST = src/PlaylistDatabase.cxx \
 	src/db/plugins/upnp/Directory.cxx \
 	src/db/plugins/upnp/Directory.hxx \
 	src/db/plugins/upnp/Object.cxx src/db/plugins/upnp/Object.hxx
- at ENABLE_DATABASE_TRUE@@ENABLE_LIBMPDCLIENT_TRUE at am__objects_4 = src/db/plugins/ProxyDatabasePlugin.$(OBJEXT)
-am__objects_5 = src/lib/upnp/Init.$(OBJEXT) \
-	src/lib/upnp/ClientInit.$(OBJEXT) \
-	src/lib/upnp/Device.$(OBJEXT) \
-	src/lib/upnp/ContentDirectoryService.$(OBJEXT) \
-	src/lib/upnp/Discovery.$(OBJEXT) \
-	src/lib/upnp/ixmlwrap.$(OBJEXT) src/lib/upnp/Util.$(OBJEXT)
+ at ENABLE_DATABASE_TRUE@@ENABLE_LIBMPDCLIENT_TRUE at am__objects_4 = src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.$(OBJEXT)
+am__objects_5 = src/lib/upnp/libdb_plugins_a-Init.$(OBJEXT) \
+	src/lib/upnp/libdb_plugins_a-ClientInit.$(OBJEXT) \
+	src/lib/upnp/libdb_plugins_a-Device.$(OBJEXT) \
+	src/lib/upnp/libdb_plugins_a-ContentDirectoryService.$(OBJEXT) \
+	src/lib/upnp/libdb_plugins_a-Discovery.$(OBJEXT) \
+	src/lib/upnp/libdb_plugins_a-ixmlwrap.$(OBJEXT) \
+	src/lib/upnp/libdb_plugins_a-Util.$(OBJEXT)
 @ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE at am__objects_6 =  \
 @ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	$(am__objects_5) \
- at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/UpnpDatabasePlugin.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/Tags.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/ContentDirectoryService.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/Directory.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/Object.$(OBJEXT)
- at ENABLE_DATABASE_TRUE@am_libdb_plugins_a_OBJECTS =  \
- at ENABLE_DATABASE_TRUE@	src/PlaylistDatabase.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/Registry.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/Helpers.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/UniqueTags.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/DatabaseSave.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/DirectorySave.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/Directory.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/Song.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/SongSort.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/Mount.$(OBJEXT) \
- at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/SimpleDatabasePlugin.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/libdb_plugins_a-Tags.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/libdb_plugins_a-Directory.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@@ENABLE_UPNP_TRUE@	src/db/plugins/upnp/libdb_plugins_a-Object.$(OBJEXT)
+ at ENABLE_DATABASE_TRUE@am_libdb_plugins_a_OBJECTS = src/libdb_plugins_a-PlaylistDatabase.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/libdb_plugins_a-Registry.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/libdb_plugins_a-Helpers.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/libdb_plugins_a-UniqueTags.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/libdb_plugins_a-DatabaseSave.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/libdb_plugins_a-DirectorySave.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/libdb_plugins_a-Directory.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/libdb_plugins_a-Song.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/libdb_plugins_a-SongSort.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/libdb_plugins_a-Mount.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.$(OBJEXT) \
 @ENABLE_DATABASE_TRUE@	$(am__objects_4) $(am__objects_6)
 libdb_plugins_a_OBJECTS = $(am_libdb_plugins_a_OBJECTS)
 libdecoder_a_AR = $(AR) $(ARFLAGS)
@@ -1772,10 +1772,12 @@ am__libstorage_a_SOURCES_DIST = src/storage/StoragePlugin.hxx \
 	src/storage/MemoryDirectoryReader.hxx \
 	src/storage/Configured.cxx src/storage/Configured.hxx \
 	src/storage/plugins/LocalStorage.cxx \
-	src/storage/plugins/LocalStorage.hxx src/storage/FileInfo.hxx \
-	src/lib/smbclient/Domain.cxx src/lib/smbclient/Domain.hxx \
-	src/lib/smbclient/Mutex.cxx src/lib/smbclient/Mutex.hxx \
-	src/lib/smbclient/Init.cxx src/lib/smbclient/Init.hxx \
+	src/storage/plugins/LocalStorage.hxx \
+	src/storage/StorageState.cxx src/storage/StorageState.hxx \
+	src/storage/FileInfo.hxx src/lib/smbclient/Domain.cxx \
+	src/lib/smbclient/Domain.hxx src/lib/smbclient/Mutex.cxx \
+	src/lib/smbclient/Mutex.hxx src/lib/smbclient/Init.cxx \
+	src/lib/smbclient/Init.hxx \
 	src/storage/plugins/SmbclientStorage.cxx \
 	src/storage/plugins/SmbclientStorage.hxx \
 	src/lib/nfs/Callback.hxx src/lib/nfs/Cancellable.hxx \
@@ -1812,6 +1814,7 @@ am__objects_97 = src/lib/nfs/libstorage_a-Connection.$(OBJEXT) \
 @ENABLE_DATABASE_TRUE@	src/storage/libstorage_a-MemoryDirectoryReader.$(OBJEXT) \
 @ENABLE_DATABASE_TRUE@	src/storage/libstorage_a-Configured.$(OBJEXT) \
 @ENABLE_DATABASE_TRUE@	src/storage/plugins/libstorage_a-LocalStorage.$(OBJEXT) \
+ at ENABLE_DATABASE_TRUE@	src/storage/libstorage_a-StorageState.$(OBJEXT) \
 @ENABLE_DATABASE_TRUE@	$(am__objects_96) $(am__objects_98) \
 @ENABLE_DATABASE_TRUE@	$(am__objects_99)
 libstorage_a_OBJECTS = $(am_libstorage_a_OBJECTS)
@@ -3671,6 +3674,8 @@ NFS_SOURCES = \
 @ENABLE_DATABASE_TRUE@	src/storage/Configured.hxx \
 @ENABLE_DATABASE_TRUE@	src/storage/plugins/LocalStorage.cxx \
 @ENABLE_DATABASE_TRUE@	src/storage/plugins/LocalStorage.hxx \
+ at ENABLE_DATABASE_TRUE@	src/storage/StorageState.cxx \
+ at ENABLE_DATABASE_TRUE@	src/storage/StorageState.hxx \
 @ENABLE_DATABASE_TRUE@	src/storage/FileInfo.hxx \
 @ENABLE_DATABASE_TRUE@	$(am__append_19) $(am__append_20) \
 @ENABLE_DATABASE_TRUE@	$(am__append_21)
@@ -3697,6 +3702,7 @@ NFS_SOURCES = \
 @ENABLE_NEIGHBOR_PLUGINS_TRUE@	$(am__append_24) \
 @ENABLE_NEIGHBOR_PLUGINS_TRUE@	$(am__append_25)
 @ENABLE_NEIGHBOR_PLUGINS_TRUE at libneighbor_a_CPPFLAGS = $(AM_CPPFLAGS) \
+ at ENABLE_NEIGHBOR_PLUGINS_TRUE@	$(UPNP_CFLAGS) \
 @ENABLE_NEIGHBOR_PLUGINS_TRUE@	$(SMBCLIENT_CFLAGS)
 
 @ENABLE_NEIGHBOR_PLUGINS_TRUE at NEIGHBOR_LIBS = $(SMBCLIENT_LIBS) \
@@ -3724,6 +3730,9 @@ NFS_SOURCES = \
 @ENABLE_DATABASE_TRUE@	src/db/plugins/simple/SimpleDatabasePlugin.cxx \
 @ENABLE_DATABASE_TRUE@	src/db/plugins/simple/SimpleDatabasePlugin.hxx \
 @ENABLE_DATABASE_TRUE@	$(am__append_28) $(am__append_29)
+ at ENABLE_DATABASE_TRUE@libdb_plugins_a_CPPFLAGS = $(AM_CPPFLAGS) \
+ at ENABLE_DATABASE_TRUE@	$(UPNP_CFLAGS)
+
 @ENABLE_DATABASE_TRUE at DB_LIBS = libdb_plugins.a $(LIBMPDCLIENT_LIBS) \
 @ENABLE_DATABASE_TRUE@	$(am__append_30)
 @ENABLE_ARCHIVE_TRUE at libarchive_a_SOURCES =  \
@@ -4682,6 +4691,7 @@ EXTRA_DIST = $(doc_DATA) autogen.sh \
 	$(man_MANS) $(DOCBOOK_FILES) doc/mpdconf.example doc/doxygen.conf \
 	$(wildcard $(srcdir)/doc/include/*.xml) \
 	systemd/system/mpd.socket \
+	$(wildcard $(srcdir)/python/build/*.py) \
 	android/AndroidManifest.xml \
 	android/build.py \
 	android/custom_rules.xml \
@@ -4689,6 +4699,7 @@ EXTRA_DIST = $(doc_DATA) autogen.sh \
 	android/src/Bridge.java \
 	android/src/Loader.java \
 	android/src/Main.java \
+	win32/build.py \
 	win32/res/mpd.rc.in win32/res/mpd.ico \
 	src/haiku/App_MusicPD
 
@@ -4864,7 +4875,7 @@ libconf.a: $(libconf_a_OBJECTS) $(libconf_a_DEPENDENCIES) $(EXTRA_libconf_a_DEPE
 	$(AM_V_at)-rm -f libconf.a
 	$(AM_V_AR)$(libconf_a_AR) libconf.a $(libconf_a_OBJECTS) $(libconf_a_LIBADD)
 	$(AM_V_at)$(RANLIB) libconf.a
-src/PlaylistDatabase.$(OBJEXT): src/$(am__dirstamp) \
+src/libdb_plugins_a-PlaylistDatabase.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 src/db/$(am__dirstamp):
 	@$(MKDIR_P) src/db
@@ -4872,11 +4883,11 @@ src/db/$(am__dirstamp):
 src/db/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/db/$(DEPDIR)
 	@: > src/db/$(DEPDIR)/$(am__dirstamp)
-src/db/Registry.$(OBJEXT): src/db/$(am__dirstamp) \
+src/db/libdb_plugins_a-Registry.$(OBJEXT): src/db/$(am__dirstamp) \
 	src/db/$(DEPDIR)/$(am__dirstamp)
-src/db/Helpers.$(OBJEXT): src/db/$(am__dirstamp) \
+src/db/libdb_plugins_a-Helpers.$(OBJEXT): src/db/$(am__dirstamp) \
 	src/db/$(DEPDIR)/$(am__dirstamp)
-src/db/UniqueTags.$(OBJEXT): src/db/$(am__dirstamp) \
+src/db/libdb_plugins_a-UniqueTags.$(OBJEXT): src/db/$(am__dirstamp) \
 	src/db/$(DEPDIR)/$(am__dirstamp)
 src/db/plugins/simple/$(am__dirstamp):
 	@$(MKDIR_P) src/db/plugins/simple
@@ -4884,25 +4895,25 @@ src/db/plugins/simple/$(am__dirstamp):
 src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/db/plugins/simple/$(DEPDIR)
 	@: > src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/simple/DatabaseSave.$(OBJEXT):  \
+src/db/plugins/simple/libdb_plugins_a-DatabaseSave.$(OBJEXT):  \
 	src/db/plugins/simple/$(am__dirstamp) \
 	src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/simple/DirectorySave.$(OBJEXT):  \
+src/db/plugins/simple/libdb_plugins_a-DirectorySave.$(OBJEXT):  \
 	src/db/plugins/simple/$(am__dirstamp) \
 	src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/simple/Directory.$(OBJEXT):  \
+src/db/plugins/simple/libdb_plugins_a-Directory.$(OBJEXT):  \
 	src/db/plugins/simple/$(am__dirstamp) \
 	src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/simple/Song.$(OBJEXT):  \
+src/db/plugins/simple/libdb_plugins_a-Song.$(OBJEXT):  \
 	src/db/plugins/simple/$(am__dirstamp) \
 	src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/simple/SongSort.$(OBJEXT):  \
+src/db/plugins/simple/libdb_plugins_a-SongSort.$(OBJEXT):  \
 	src/db/plugins/simple/$(am__dirstamp) \
 	src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/simple/Mount.$(OBJEXT):  \
+src/db/plugins/simple/libdb_plugins_a-Mount.$(OBJEXT):  \
 	src/db/plugins/simple/$(am__dirstamp) \
 	src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/simple/SimpleDatabasePlugin.$(OBJEXT):  \
+src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.$(OBJEXT):  \
 	src/db/plugins/simple/$(am__dirstamp) \
 	src/db/plugins/simple/$(DEPDIR)/$(am__dirstamp)
 src/db/plugins/$(am__dirstamp):
@@ -4911,7 +4922,7 @@ src/db/plugins/$(am__dirstamp):
 src/db/plugins/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/db/plugins/$(DEPDIR)
 	@: > src/db/plugins/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/ProxyDatabasePlugin.$(OBJEXT):  \
+src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.$(OBJEXT):  \
 	src/db/plugins/$(am__dirstamp) \
 	src/db/plugins/$(DEPDIR)/$(am__dirstamp)
 src/lib/upnp/$(am__dirstamp):
@@ -4920,20 +4931,26 @@ src/lib/upnp/$(am__dirstamp):
 src/lib/upnp/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/lib/upnp/$(DEPDIR)
 	@: > src/lib/upnp/$(DEPDIR)/$(am__dirstamp)
-src/lib/upnp/Init.$(OBJEXT): src/lib/upnp/$(am__dirstamp) \
+src/lib/upnp/libdb_plugins_a-Init.$(OBJEXT):  \
+	src/lib/upnp/$(am__dirstamp) \
 	src/lib/upnp/$(DEPDIR)/$(am__dirstamp)
-src/lib/upnp/ClientInit.$(OBJEXT): src/lib/upnp/$(am__dirstamp) \
+src/lib/upnp/libdb_plugins_a-ClientInit.$(OBJEXT):  \
+	src/lib/upnp/$(am__dirstamp) \
 	src/lib/upnp/$(DEPDIR)/$(am__dirstamp)
-src/lib/upnp/Device.$(OBJEXT): src/lib/upnp/$(am__dirstamp) \
+src/lib/upnp/libdb_plugins_a-Device.$(OBJEXT):  \
+	src/lib/upnp/$(am__dirstamp) \
 	src/lib/upnp/$(DEPDIR)/$(am__dirstamp)
-src/lib/upnp/ContentDirectoryService.$(OBJEXT):  \
+src/lib/upnp/libdb_plugins_a-ContentDirectoryService.$(OBJEXT):  \
 	src/lib/upnp/$(am__dirstamp) \
 	src/lib/upnp/$(DEPDIR)/$(am__dirstamp)
-src/lib/upnp/Discovery.$(OBJEXT): src/lib/upnp/$(am__dirstamp) \
+src/lib/upnp/libdb_plugins_a-Discovery.$(OBJEXT):  \
+	src/lib/upnp/$(am__dirstamp) \
 	src/lib/upnp/$(DEPDIR)/$(am__dirstamp)
-src/lib/upnp/ixmlwrap.$(OBJEXT): src/lib/upnp/$(am__dirstamp) \
+src/lib/upnp/libdb_plugins_a-ixmlwrap.$(OBJEXT):  \
+	src/lib/upnp/$(am__dirstamp) \
 	src/lib/upnp/$(DEPDIR)/$(am__dirstamp)
-src/lib/upnp/Util.$(OBJEXT): src/lib/upnp/$(am__dirstamp) \
+src/lib/upnp/libdb_plugins_a-Util.$(OBJEXT):  \
+	src/lib/upnp/$(am__dirstamp) \
 	src/lib/upnp/$(DEPDIR)/$(am__dirstamp)
 src/db/plugins/upnp/$(am__dirstamp):
 	@$(MKDIR_P) src/db/plugins/upnp
@@ -4941,19 +4958,19 @@ src/db/plugins/upnp/$(am__dirstamp):
 src/db/plugins/upnp/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) src/db/plugins/upnp/$(DEPDIR)
 	@: > src/db/plugins/upnp/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/upnp/UpnpDatabasePlugin.$(OBJEXT):  \
+src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.$(OBJEXT):  \
 	src/db/plugins/upnp/$(am__dirstamp) \
 	src/db/plugins/upnp/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/upnp/Tags.$(OBJEXT):  \
+src/db/plugins/upnp/libdb_plugins_a-Tags.$(OBJEXT):  \
 	src/db/plugins/upnp/$(am__dirstamp) \
 	src/db/plugins/upnp/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/upnp/ContentDirectoryService.$(OBJEXT):  \
+src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.$(OBJEXT):  \
 	src/db/plugins/upnp/$(am__dirstamp) \
 	src/db/plugins/upnp/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/upnp/Directory.$(OBJEXT):  \
+src/db/plugins/upnp/libdb_plugins_a-Directory.$(OBJEXT):  \
 	src/db/plugins/upnp/$(am__dirstamp) \
 	src/db/plugins/upnp/$(DEPDIR)/$(am__dirstamp)
-src/db/plugins/upnp/Object.$(OBJEXT):  \
+src/db/plugins/upnp/libdb_plugins_a-Object.$(OBJEXT):  \
 	src/db/plugins/upnp/$(am__dirstamp) \
 	src/db/plugins/upnp/$(DEPDIR)/$(am__dirstamp)
 
@@ -6357,6 +6374,9 @@ src/storage/plugins/$(DEPDIR)/$(am__dirstamp):
 src/storage/plugins/libstorage_a-LocalStorage.$(OBJEXT):  \
 	src/storage/plugins/$(am__dirstamp) \
 	src/storage/plugins/$(DEPDIR)/$(am__dirstamp)
+src/storage/libstorage_a-StorageState.$(OBJEXT):  \
+	src/storage/$(am__dirstamp) \
+	src/storage/$(DEPDIR)/$(am__dirstamp)
 src/lib/smbclient/libstorage_a-Domain.$(OBJEXT):  \
 	src/lib/smbclient/$(am__dirstamp) \
 	src/lib/smbclient/$(DEPDIR)/$(am__dirstamp)
@@ -6672,6 +6692,8 @@ test/DumpDatabase.$(OBJEXT): test/$(am__dirstamp) \
 	test/$(DEPDIR)/$(am__dirstamp)
 src/protocol/Ack.$(OBJEXT): src/protocol/$(am__dirstamp) \
 	src/protocol/$(DEPDIR)/$(am__dirstamp)
+src/db/Registry.$(OBJEXT): src/db/$(am__dirstamp) \
+	src/db/$(DEPDIR)/$(am__dirstamp)
 src/db/Selection.$(OBJEXT): src/db/$(am__dirstamp) \
 	src/db/$(DEPDIR)/$(am__dirstamp)
 src/db/PlaylistVector.$(OBJEXT): src/db/$(am__dirstamp) \
@@ -7105,13 +7127,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/Log.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/LogBackend.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/Main.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/PlaylistDatabase.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/ReplayGainInfo.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/ReplayGainMode.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/SongFilter.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/SongSave.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/TagFile.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/TagSave.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/libdb_plugins_a-PlaylistDatabase.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/libinput_a-IcyMetaDataParser.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/libmain_a-Main.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/libmpd_a-CommandLine.Po at am__quote@
@@ -7221,11 +7243,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at src/config/$(DEPDIR)/Data.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/config/$(DEPDIR)/Param.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/DatabaseLock.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/Helpers.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/PlaylistVector.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/Registry.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/Selection.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/UniqueTags.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libdb_plugins_a-Helpers.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libdb_plugins_a-Registry.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libdb_plugins_a-UniqueTags.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libmpd_a-Configured.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libmpd_a-Count.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libmpd_a-DatabaseGlue.Po at am__quote@
@@ -7237,19 +7260,19 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libmpd_a-LightSong.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libmpd_a-PlaylistVector.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/$(DEPDIR)/libmpd_a-Selection.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/$(DEPDIR)/ProxyDatabasePlugin.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/DatabaseSave.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/Directory.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/DirectorySave.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/Mount.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/SimpleDatabasePlugin.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/Song.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/SongSort.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/ContentDirectoryService.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/Directory.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/Object.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/Tags.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/UpnpDatabasePlugin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/$(DEPDIR)/libdb_plugins_a-ProxyDatabasePlugin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DatabaseSave.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Directory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DirectorySave.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Mount.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SimpleDatabasePlugin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Song.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SongSort.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Directory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Object.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Tags.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-UpnpDatabasePlugin.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/update/$(DEPDIR)/InotifyDomain.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/update/$(DEPDIR)/InotifySource.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/db/update/$(DEPDIR)/libmpd_a-Archive.Po at am__quote@
@@ -7447,13 +7470,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at src/lib/smbclient/$(DEPDIR)/libstorage_a-Init.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/lib/smbclient/$(DEPDIR)/libstorage_a-Mutex.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/lib/sqlite/$(DEPDIR)/libmpd_a-Error.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/ClientInit.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/ContentDirectoryService.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/Device.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/Discovery.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/Init.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/Util.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/ixmlwrap.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ClientInit.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Device.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Discovery.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Init.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Util.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ixmlwrap.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libneighbor_a-ClientInit.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libneighbor_a-ContentDirectoryService.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/lib/upnp/$(DEPDIR)/libneighbor_a-Device.Po at am__quote@
@@ -7612,6 +7635,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at src/storage/$(DEPDIR)/libstorage_a-MemoryDirectoryReader.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/storage/$(DEPDIR)/libstorage_a-Registry.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/storage/$(DEPDIR)/libstorage_a-StorageInterface.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/storage/$(DEPDIR)/libstorage_a-StorageState.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/storage/plugins/$(DEPDIR)/libstorage_a-CurlStorage.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/storage/plugins/$(DEPDIR)/libstorage_a-LocalStorage.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/storage/plugins/$(DEPDIR)/libstorage_a-NfsStorage.Po at am__quote@
@@ -7947,6 +7971,342 @@ src/archive/plugins/libarchive_a-Iso9660ArchivePlugin.obj: src/archive/plugins/I
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/archive/plugins/libarchive_a-Iso9660ArchivePlugin.obj `if test -f 'src/archive/plugins/Iso9660ArchivePlugin.cxx'; then $(CYGPATH_W) 'src/archive/plugins/Iso9660ArchivePlugin.cxx'; else $(CYGPATH_W) '$(srcdir)/src/archive/plugins/Iso9660ArchivePlugin.cxx'; fi`
 
+src/libdb_plugins_a-PlaylistDatabase.o: src/PlaylistDatabase.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libdb_plugins_a-PlaylistDatabase.o -MD -MP -MF src/$(DEPDIR)/libdb_plugins_a-PlaylistDatabase.Tpo -c -o src/libdb_plugins_a-PlaylistDatabase.o `test -f 'src/PlaylistDatabase.cxx' || echo '$(srcdir)/'`src/PlaylistDatabase.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/libdb_plugins_a-PlaylistDatabase.Tpo src/$(DEPDIR)/libdb_plugins_a-PlaylistDatabase.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/PlaylistDatabase.cxx' object='src/libdb_plugins_a-PlaylistDatabase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libdb_plugins_a-PlaylistDatabase.o `test -f 'src/PlaylistDatabase.cxx' || echo '$(srcdir)/'`src/PlaylistDatabase.cxx
+
+src/libdb_plugins_a-PlaylistDatabase.obj: src/PlaylistDatabase.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libdb_plugins_a-PlaylistDatabase.obj -MD -MP -MF src/$(DEPDIR)/libdb_plugins_a-PlaylistDatabase.Tpo -c -o src/libdb_plugins_a-PlaylistDatabase.obj `if test -f 'src/PlaylistDatabase.cxx'; then $(CYGPATH_W) 'src/PlaylistDatabase.cxx'; else $(CYGPATH_W) '$(srcdir)/src/PlaylistDatabase.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/libdb_plugins_a-PlaylistDatabase.Tpo src/$(DEPDIR)/libdb_plugins_a-PlaylistDatabase.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/PlaylistDatabase.cxx' object='src/libdb_plugins_a-PlaylistDatabase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libdb_plugins_a-PlaylistDatabase.obj `if test -f 'src/PlaylistDatabase.cxx'; then $(CYGPATH_W) 'src/PlaylistDatabase.cxx'; else $(CYGPATH_W) '$(srcdir)/src/PlaylistDatabase.cxx'; fi`
+
+src/db/libdb_plugins_a-Registry.o: src/db/Registry.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/libdb_plugins_a-Registry.o -MD -MP -MF src/db/$(DEPDIR)/libdb_plugins_a-Registry.Tpo -c -o src/db/libdb_plugins_a-Registry.o `test -f 'src/db/Registry.cxx' || echo '$(srcdir)/'`src/db/Registry.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/$(DEPDIR)/libdb_plugins_a-Registry.Tpo src/db/$(DEPDIR)/libdb_plugins_a-Registry.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/Registry.cxx' object='src/db/libdb_plugins_a-Registry.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/libdb_plugins_a-Registry.o `test -f 'src/db/Registry.cxx' || echo '$(srcdir)/'`src/db/Registry.cxx
+
+src/db/libdb_plugins_a-Registry.obj: src/db/Registry.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/libdb_plugins_a-Registry.obj -MD -MP -MF src/db/$(DEPDIR)/libdb_plugins_a-Registry.Tpo -c -o src/db/libdb_plugins_a-Registry.obj `if test -f 'src/db/Registry.cxx'; then $(CYGPATH_W) 'src/db/Registry.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/Registry.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/$(DEPDIR)/libdb_plugins_a-Registry.Tpo src/db/$(DEPDIR)/libdb_plugins_a-Registry.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/Registry.cxx' object='src/db/libdb_plugins_a-Registry.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/libdb_plugins_a-Registry.obj `if test -f 'src/db/Registry.cxx'; then $(CYGPATH_W) 'src/db/Registry.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/Registry.cxx'; fi`
+
+src/db/libdb_plugins_a-Helpers.o: src/db/Helpers.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/libdb_plugins_a-Helpers.o -MD -MP -MF src/db/$(DEPDIR)/libdb_plugins_a-Helpers.Tpo -c -o src/db/libdb_plugins_a-Helpers.o `test -f 'src/db/Helpers.cxx' || echo '$(srcdir)/'`src/db/Helpers.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/$(DEPDIR)/libdb_plugins_a-Helpers.Tpo src/db/$(DEPDIR)/libdb_plugins_a-Helpers.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/Helpers.cxx' object='src/db/libdb_plugins_a-Helpers.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/libdb_plugins_a-Helpers.o `test -f 'src/db/Helpers.cxx' || echo '$(srcdir)/'`src/db/Helpers.cxx
+
+src/db/libdb_plugins_a-Helpers.obj: src/db/Helpers.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/libdb_plugins_a-Helpers.obj -MD -MP -MF src/db/$(DEPDIR)/libdb_plugins_a-Helpers.Tpo -c -o src/db/libdb_plugins_a-Helpers.obj `if test -f 'src/db/Helpers.cxx'; then $(CYGPATH_W) 'src/db/Helpers.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/Helpers.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/$(DEPDIR)/libdb_plugins_a-Helpers.Tpo src/db/$(DEPDIR)/libdb_plugins_a-Helpers.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/Helpers.cxx' object='src/db/libdb_plugins_a-Helpers.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/libdb_plugins_a-Helpers.obj `if test -f 'src/db/Helpers.cxx'; then $(CYGPATH_W) 'src/db/Helpers.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/Helpers.cxx'; fi`
+
+src/db/libdb_plugins_a-UniqueTags.o: src/db/UniqueTags.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/libdb_plugins_a-UniqueTags.o -MD -MP -MF src/db/$(DEPDIR)/libdb_plugins_a-UniqueTags.Tpo -c -o src/db/libdb_plugins_a-UniqueTags.o `test -f 'src/db/UniqueTags.cxx' || echo '$(srcdir)/'`src/db/UniqueTags.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/$(DEPDIR)/libdb_plugins_a-UniqueTags.Tpo src/db/$(DEPDIR)/libdb_plugins_a-UniqueTags.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/UniqueTags.cxx' object='src/db/libdb_plugins_a-UniqueTags.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/libdb_plugins_a-UniqueTags.o `test -f 'src/db/UniqueTags.cxx' || echo '$(srcdir)/'`src/db/UniqueTags.cxx
+
+src/db/libdb_plugins_a-UniqueTags.obj: src/db/UniqueTags.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/libdb_plugins_a-UniqueTags.obj -MD -MP -MF src/db/$(DEPDIR)/libdb_plugins_a-UniqueTags.Tpo -c -o src/db/libdb_plugins_a-UniqueTags.obj `if test -f 'src/db/UniqueTags.cxx'; then $(CYGPATH_W) 'src/db/UniqueTags.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/UniqueTags.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/$(DEPDIR)/libdb_plugins_a-UniqueTags.Tpo src/db/$(DEPDIR)/libdb_plugins_a-UniqueTags.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/UniqueTags.cxx' object='src/db/libdb_plugins_a-UniqueTags.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/libdb_plugins_a-UniqueTags.obj `if test -f 'src/db/UniqueTags.cxx'; then $(CYGPATH_W) 'src/db/UniqueTags.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/UniqueTags.cxx'; fi`
+
+src/db/plugins/simple/libdb_plugins_a-DatabaseSave.o: src/db/plugins/simple/DatabaseSave.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-DatabaseSave.o -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DatabaseSave.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-DatabaseSave.o `test -f 'src/db/plugins/simple/DatabaseSave.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/DatabaseSave.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DatabaseSave.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DatabaseSave.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/DatabaseSave.cxx' object='src/db/plugins/simple/libdb_plugins_a-DatabaseSave.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-DatabaseSave.o `test -f 'src/db/plugins/simple/DatabaseSave.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/DatabaseSave.cxx
+
+src/db/plugins/simple/libdb_plugins_a-DatabaseSave.obj: src/db/plugins/simple/DatabaseSave.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-DatabaseSave.obj -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DatabaseSave.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-DatabaseSave.obj `if test -f 'src/db/plugins/simple/DatabaseSave.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/DatabaseSave.cxx'; else $(CYGPATH_W) '$(srcdir)/src/d [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DatabaseSave.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DatabaseSave.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/DatabaseSave.cxx' object='src/db/plugins/simple/libdb_plugins_a-DatabaseSave.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-DatabaseSave.obj `if test -f 'src/db/plugins/simple/DatabaseSave.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/DatabaseSave.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/DatabaseSave.cxx'; fi`
+
+src/db/plugins/simple/libdb_plugins_a-DirectorySave.o: src/db/plugins/simple/DirectorySave.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-DirectorySave.o -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DirectorySave.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-DirectorySave.o `test -f 'src/db/plugins/simple/DirectorySave.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/DirectorySave.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DirectorySave.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DirectorySave.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/DirectorySave.cxx' object='src/db/plugins/simple/libdb_plugins_a-DirectorySave.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-DirectorySave.o `test -f 'src/db/plugins/simple/DirectorySave.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/DirectorySave.cxx
+
+src/db/plugins/simple/libdb_plugins_a-DirectorySave.obj: src/db/plugins/simple/DirectorySave.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-DirectorySave.obj -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DirectorySave.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-DirectorySave.obj `if test -f 'src/db/plugins/simple/DirectorySave.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/DirectorySave.cxx'; else $(CYGPATH_W) '$(srcdir)/ [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DirectorySave.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-DirectorySave.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/DirectorySave.cxx' object='src/db/plugins/simple/libdb_plugins_a-DirectorySave.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-DirectorySave.obj `if test -f 'src/db/plugins/simple/DirectorySave.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/DirectorySave.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/DirectorySave.cxx'; fi`
+
+src/db/plugins/simple/libdb_plugins_a-Directory.o: src/db/plugins/simple/Directory.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-Directory.o -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Directory.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-Directory.o `test -f 'src/db/plugins/simple/Directory.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/Directory.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Directory.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Directory.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/Directory.cxx' object='src/db/plugins/simple/libdb_plugins_a-Directory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-Directory.o `test -f 'src/db/plugins/simple/Directory.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/Directory.cxx
+
+src/db/plugins/simple/libdb_plugins_a-Directory.obj: src/db/plugins/simple/Directory.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-Directory.obj -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Directory.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-Directory.obj `if test -f 'src/db/plugins/simple/Directory.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/Directory.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simpl [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Directory.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Directory.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/Directory.cxx' object='src/db/plugins/simple/libdb_plugins_a-Directory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-Directory.obj `if test -f 'src/db/plugins/simple/Directory.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/Directory.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/Directory.cxx'; fi`
+
+src/db/plugins/simple/libdb_plugins_a-Song.o: src/db/plugins/simple/Song.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-Song.o -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Song.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-Song.o `test -f 'src/db/plugins/simple/Song.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/Song.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Song.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Song.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/Song.cxx' object='src/db/plugins/simple/libdb_plugins_a-Song.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-Song.o `test -f 'src/db/plugins/simple/Song.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/Song.cxx
+
+src/db/plugins/simple/libdb_plugins_a-Song.obj: src/db/plugins/simple/Song.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-Song.obj -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Song.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-Song.obj `if test -f 'src/db/plugins/simple/Song.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/Song.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/Song.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Song.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Song.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/Song.cxx' object='src/db/plugins/simple/libdb_plugins_a-Song.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-Song.obj `if test -f 'src/db/plugins/simple/Song.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/Song.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/Song.cxx'; fi`
+
+src/db/plugins/simple/libdb_plugins_a-SongSort.o: src/db/plugins/simple/SongSort.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-SongSort.o -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SongSort.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-SongSort.o `test -f 'src/db/plugins/simple/SongSort.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/SongSort.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SongSort.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SongSort.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/SongSort.cxx' object='src/db/plugins/simple/libdb_plugins_a-SongSort.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-SongSort.o `test -f 'src/db/plugins/simple/SongSort.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/SongSort.cxx
+
+src/db/plugins/simple/libdb_plugins_a-SongSort.obj: src/db/plugins/simple/SongSort.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-SongSort.obj -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SongSort.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-SongSort.obj `if test -f 'src/db/plugins/simple/SongSort.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/SongSort.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/Son [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SongSort.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SongSort.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/SongSort.cxx' object='src/db/plugins/simple/libdb_plugins_a-SongSort.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-SongSort.obj `if test -f 'src/db/plugins/simple/SongSort.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/SongSort.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/SongSort.cxx'; fi`
+
+src/db/plugins/simple/libdb_plugins_a-Mount.o: src/db/plugins/simple/Mount.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-Mount.o -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Mount.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-Mount.o `test -f 'src/db/plugins/simple/Mount.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/Mount.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Mount.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Mount.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/Mount.cxx' object='src/db/plugins/simple/libdb_plugins_a-Mount.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-Mount.o `test -f 'src/db/plugins/simple/Mount.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/Mount.cxx
+
+src/db/plugins/simple/libdb_plugins_a-Mount.obj: src/db/plugins/simple/Mount.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-Mount.obj -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Mount.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-Mount.obj `if test -f 'src/db/plugins/simple/Mount.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/Mount.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/Mount.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Mount.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-Mount.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/Mount.cxx' object='src/db/plugins/simple/libdb_plugins_a-Mount.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-Mount.obj `if test -f 'src/db/plugins/simple/Mount.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/Mount.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/Mount.cxx'; fi`
+
+src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.o: src/db/plugins/simple/SimpleDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.o -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SimpleDatabasePlugin.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.o `test -f 'src/db/plugins/simple/SimpleDatabasePlugin.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/SimpleDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SimpleDatabasePlugin.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SimpleDatabasePlugin.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/SimpleDatabasePlugin.cxx' object='src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.o `test -f 'src/db/plugins/simple/SimpleDatabasePlugin.cxx' || echo '$(srcdir)/'`src/db/plugins/simple/SimpleDatabasePlugin.cxx
+
+src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.obj: src/db/plugins/simple/SimpleDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.obj -MD -MP -MF src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SimpleDatabasePlugin.Tpo -c -o src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.obj `if test -f 'src/db/plugins/simple/SimpleDatabasePlugin.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/SimpleDatabasePlugin. [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SimpleDatabasePlugin.Tpo src/db/plugins/simple/$(DEPDIR)/libdb_plugins_a-SimpleDatabasePlugin.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/simple/SimpleDatabasePlugin.cxx' object='src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/simple/libdb_plugins_a-SimpleDatabasePlugin.obj `if test -f 'src/db/plugins/simple/SimpleDatabasePlugin.cxx'; then $(CYGPATH_W) 'src/db/plugins/simple/SimpleDatabasePlugin.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/simple/SimpleDatabasePlugin.cxx'; fi`
+
+src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.o: src/db/plugins/ProxyDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.o -MD -MP -MF src/db/plugins/$(DEPDIR)/libdb_plugins_a-ProxyDatabasePlugin.Tpo -c -o src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.o `test -f 'src/db/plugins/ProxyDatabasePlugin.cxx' || echo '$(srcdir)/'`src/db/plugins/ProxyDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/$(DEPDIR)/libdb_plugins_a-ProxyDatabasePlugin.Tpo src/db/plugins/$(DEPDIR)/libdb_plugins_a-ProxyDatabasePlugin.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/ProxyDatabasePlugin.cxx' object='src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.o `test -f 'src/db/plugins/ProxyDatabasePlugin.cxx' || echo '$(srcdir)/'`src/db/plugins/ProxyDatabasePlugin.cxx
+
+src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.obj: src/db/plugins/ProxyDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.obj -MD -MP -MF src/db/plugins/$(DEPDIR)/libdb_plugins_a-ProxyDatabasePlugin.Tpo -c -o src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.obj `if test -f 'src/db/plugins/ProxyDatabasePlugin.cxx'; then $(CYGPATH_W) 'src/db/plugins/ProxyDatabasePlugin.cxx'; else $(CYGPATH_W) '$(srcdir)/src/d [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/$(DEPDIR)/libdb_plugins_a-ProxyDatabasePlugin.Tpo src/db/plugins/$(DEPDIR)/libdb_plugins_a-ProxyDatabasePlugin.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/ProxyDatabasePlugin.cxx' object='src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/libdb_plugins_a-ProxyDatabasePlugin.obj `if test -f 'src/db/plugins/ProxyDatabasePlugin.cxx'; then $(CYGPATH_W) 'src/db/plugins/ProxyDatabasePlugin.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/ProxyDatabasePlugin.cxx'; fi`
+
+src/lib/upnp/libdb_plugins_a-Init.o: src/lib/upnp/Init.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-Init.o -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Init.Tpo -c -o src/lib/upnp/libdb_plugins_a-Init.o `test -f 'src/lib/upnp/Init.cxx' || echo '$(srcdir)/'`src/lib/upnp/Init.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Init.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Init.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/Init.cxx' object='src/lib/upnp/libdb_plugins_a-Init.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-Init.o `test -f 'src/lib/upnp/Init.cxx' || echo '$(srcdir)/'`src/lib/upnp/Init.cxx
+
+src/lib/upnp/libdb_plugins_a-Init.obj: src/lib/upnp/Init.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-Init.obj -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Init.Tpo -c -o src/lib/upnp/libdb_plugins_a-Init.obj `if test -f 'src/lib/upnp/Init.cxx'; then $(CYGPATH_W) 'src/lib/upnp/Init.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/Init.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Init.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Init.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/Init.cxx' object='src/lib/upnp/libdb_plugins_a-Init.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-Init.obj `if test -f 'src/lib/upnp/Init.cxx'; then $(CYGPATH_W) 'src/lib/upnp/Init.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/Init.cxx'; fi`
+
+src/lib/upnp/libdb_plugins_a-ClientInit.o: src/lib/upnp/ClientInit.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-ClientInit.o -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ClientInit.Tpo -c -o src/lib/upnp/libdb_plugins_a-ClientInit.o `test -f 'src/lib/upnp/ClientInit.cxx' || echo '$(srcdir)/'`src/lib/upnp/ClientInit.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ClientInit.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ClientInit.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/ClientInit.cxx' object='src/lib/upnp/libdb_plugins_a-ClientInit.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-ClientInit.o `test -f 'src/lib/upnp/ClientInit.cxx' || echo '$(srcdir)/'`src/lib/upnp/ClientInit.cxx
+
+src/lib/upnp/libdb_plugins_a-ClientInit.obj: src/lib/upnp/ClientInit.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-ClientInit.obj -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ClientInit.Tpo -c -o src/lib/upnp/libdb_plugins_a-ClientInit.obj `if test -f 'src/lib/upnp/ClientInit.cxx'; then $(CYGPATH_W) 'src/lib/upnp/ClientInit.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/ClientInit.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ClientInit.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ClientInit.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/ClientInit.cxx' object='src/lib/upnp/libdb_plugins_a-ClientInit.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-ClientInit.obj `if test -f 'src/lib/upnp/ClientInit.cxx'; then $(CYGPATH_W) 'src/lib/upnp/ClientInit.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/ClientInit.cxx'; fi`
+
+src/lib/upnp/libdb_plugins_a-Device.o: src/lib/upnp/Device.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-Device.o -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Device.Tpo -c -o src/lib/upnp/libdb_plugins_a-Device.o `test -f 'src/lib/upnp/Device.cxx' || echo '$(srcdir)/'`src/lib/upnp/Device.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Device.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Device.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/Device.cxx' object='src/lib/upnp/libdb_plugins_a-Device.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-Device.o `test -f 'src/lib/upnp/Device.cxx' || echo '$(srcdir)/'`src/lib/upnp/Device.cxx
+
+src/lib/upnp/libdb_plugins_a-Device.obj: src/lib/upnp/Device.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-Device.obj -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Device.Tpo -c -o src/lib/upnp/libdb_plugins_a-Device.obj `if test -f 'src/lib/upnp/Device.cxx'; then $(CYGPATH_W) 'src/lib/upnp/Device.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/Device.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Device.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Device.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/Device.cxx' object='src/lib/upnp/libdb_plugins_a-Device.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-Device.obj `if test -f 'src/lib/upnp/Device.cxx'; then $(CYGPATH_W) 'src/lib/upnp/Device.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/Device.cxx'; fi`
+
+src/lib/upnp/libdb_plugins_a-ContentDirectoryService.o: src/lib/upnp/ContentDirectoryService.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-ContentDirectoryService.o -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Tpo -c -o src/lib/upnp/libdb_plugins_a-ContentDirectoryService.o `test -f 'src/lib/upnp/ContentDirectoryService.cxx' || echo '$(srcdir)/'`src/lib/upnp/ContentDirectoryService.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/ContentDirectoryService.cxx' object='src/lib/upnp/libdb_plugins_a-ContentDirectoryService.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-ContentDirectoryService.o `test -f 'src/lib/upnp/ContentDirectoryService.cxx' || echo '$(srcdir)/'`src/lib/upnp/ContentDirectoryService.cxx
+
+src/lib/upnp/libdb_plugins_a-ContentDirectoryService.obj: src/lib/upnp/ContentDirectoryService.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-ContentDirectoryService.obj -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Tpo -c -o src/lib/upnp/libdb_plugins_a-ContentDirectoryService.obj `if test -f 'src/lib/upnp/ContentDirectoryService.cxx'; then $(CYGPATH_W) 'src/lib/upnp/ContentDirectoryService.cxx'; else $(CYGPATH_W) '$(src [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/ContentDirectoryService.cxx' object='src/lib/upnp/libdb_plugins_a-ContentDirectoryService.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-ContentDirectoryService.obj `if test -f 'src/lib/upnp/ContentDirectoryService.cxx'; then $(CYGPATH_W) 'src/lib/upnp/ContentDirectoryService.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/ContentDirectoryService.cxx'; fi`
+
+src/lib/upnp/libdb_plugins_a-Discovery.o: src/lib/upnp/Discovery.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-Discovery.o -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Discovery.Tpo -c -o src/lib/upnp/libdb_plugins_a-Discovery.o `test -f 'src/lib/upnp/Discovery.cxx' || echo '$(srcdir)/'`src/lib/upnp/Discovery.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Discovery.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Discovery.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/Discovery.cxx' object='src/lib/upnp/libdb_plugins_a-Discovery.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-Discovery.o `test -f 'src/lib/upnp/Discovery.cxx' || echo '$(srcdir)/'`src/lib/upnp/Discovery.cxx
+
+src/lib/upnp/libdb_plugins_a-Discovery.obj: src/lib/upnp/Discovery.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-Discovery.obj -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Discovery.Tpo -c -o src/lib/upnp/libdb_plugins_a-Discovery.obj `if test -f 'src/lib/upnp/Discovery.cxx'; then $(CYGPATH_W) 'src/lib/upnp/Discovery.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/Discovery.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Discovery.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Discovery.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/Discovery.cxx' object='src/lib/upnp/libdb_plugins_a-Discovery.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-Discovery.obj `if test -f 'src/lib/upnp/Discovery.cxx'; then $(CYGPATH_W) 'src/lib/upnp/Discovery.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/Discovery.cxx'; fi`
+
+src/lib/upnp/libdb_plugins_a-ixmlwrap.o: src/lib/upnp/ixmlwrap.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-ixmlwrap.o -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ixmlwrap.Tpo -c -o src/lib/upnp/libdb_plugins_a-ixmlwrap.o `test -f 'src/lib/upnp/ixmlwrap.cxx' || echo '$(srcdir)/'`src/lib/upnp/ixmlwrap.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ixmlwrap.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ixmlwrap.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/ixmlwrap.cxx' object='src/lib/upnp/libdb_plugins_a-ixmlwrap.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-ixmlwrap.o `test -f 'src/lib/upnp/ixmlwrap.cxx' || echo '$(srcdir)/'`src/lib/upnp/ixmlwrap.cxx
+
+src/lib/upnp/libdb_plugins_a-ixmlwrap.obj: src/lib/upnp/ixmlwrap.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-ixmlwrap.obj -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ixmlwrap.Tpo -c -o src/lib/upnp/libdb_plugins_a-ixmlwrap.obj `if test -f 'src/lib/upnp/ixmlwrap.cxx'; then $(CYGPATH_W) 'src/lib/upnp/ixmlwrap.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/ixmlwrap.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ixmlwrap.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-ixmlwrap.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/ixmlwrap.cxx' object='src/lib/upnp/libdb_plugins_a-ixmlwrap.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-ixmlwrap.obj `if test -f 'src/lib/upnp/ixmlwrap.cxx'; then $(CYGPATH_W) 'src/lib/upnp/ixmlwrap.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/ixmlwrap.cxx'; fi`
+
+src/lib/upnp/libdb_plugins_a-Util.o: src/lib/upnp/Util.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-Util.o -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Util.Tpo -c -o src/lib/upnp/libdb_plugins_a-Util.o `test -f 'src/lib/upnp/Util.cxx' || echo '$(srcdir)/'`src/lib/upnp/Util.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Util.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Util.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/Util.cxx' object='src/lib/upnp/libdb_plugins_a-Util.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-Util.o `test -f 'src/lib/upnp/Util.cxx' || echo '$(srcdir)/'`src/lib/upnp/Util.cxx
+
+src/lib/upnp/libdb_plugins_a-Util.obj: src/lib/upnp/Util.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/upnp/libdb_plugins_a-Util.obj -MD -MP -MF src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Util.Tpo -c -o src/lib/upnp/libdb_plugins_a-Util.obj `if test -f 'src/lib/upnp/Util.cxx'; then $(CYGPATH_W) 'src/lib/upnp/Util.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/Util.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Util.Tpo src/lib/upnp/$(DEPDIR)/libdb_plugins_a-Util.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/lib/upnp/Util.cxx' object='src/lib/upnp/libdb_plugins_a-Util.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/lib/upnp/libdb_plugins_a-Util.obj `if test -f 'src/lib/upnp/Util.cxx'; then $(CYGPATH_W) 'src/lib/upnp/Util.cxx'; else $(CYGPATH_W) '$(srcdir)/src/lib/upnp/Util.cxx'; fi`
+
+src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.o: src/db/plugins/upnp/UpnpDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.o -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-UpnpDatabasePlugin.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.o `test -f 'src/db/plugins/upnp/UpnpDatabasePlugin.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/UpnpDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-UpnpDatabasePlugin.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-UpnpDatabasePlugin.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/UpnpDatabasePlugin.cxx' object='src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.o `test -f 'src/db/plugins/upnp/UpnpDatabasePlugin.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/UpnpDatabasePlugin.cxx
+
+src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.obj: src/db/plugins/upnp/UpnpDatabasePlugin.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.obj -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-UpnpDatabasePlugin.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.obj `if test -f 'src/db/plugins/upnp/UpnpDatabasePlugin.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/UpnpDatabasePlugin.cxx'; else $(CYGPATH [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-UpnpDatabasePlugin.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-UpnpDatabasePlugin.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/UpnpDatabasePlugin.cxx' object='src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-UpnpDatabasePlugin.obj `if test -f 'src/db/plugins/upnp/UpnpDatabasePlugin.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/UpnpDatabasePlugin.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/upnp/UpnpDatabasePlugin.cxx'; fi`
+
+src/db/plugins/upnp/libdb_plugins_a-Tags.o: src/db/plugins/upnp/Tags.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-Tags.o -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Tags.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-Tags.o `test -f 'src/db/plugins/upnp/Tags.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/Tags.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Tags.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Tags.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/Tags.cxx' object='src/db/plugins/upnp/libdb_plugins_a-Tags.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-Tags.o `test -f 'src/db/plugins/upnp/Tags.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/Tags.cxx
+
+src/db/plugins/upnp/libdb_plugins_a-Tags.obj: src/db/plugins/upnp/Tags.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-Tags.obj -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Tags.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-Tags.obj `if test -f 'src/db/plugins/upnp/Tags.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/Tags.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/upnp/Tags.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Tags.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Tags.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/Tags.cxx' object='src/db/plugins/upnp/libdb_plugins_a-Tags.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-Tags.obj `if test -f 'src/db/plugins/upnp/Tags.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/Tags.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/upnp/Tags.cxx'; fi`
+
+src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.o: src/db/plugins/upnp/ContentDirectoryService.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.o -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.o `test -f 'src/db/plugins/upnp/ContentDirectoryService.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/ContentDirectoryService.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/ContentDirectoryService.cxx' object='src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.o `test -f 'src/db/plugins/upnp/ContentDirectoryService.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/ContentDirectoryService.cxx
+
+src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.obj: src/db/plugins/upnp/ContentDirectoryService.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.obj -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.obj `if test -f 'src/db/plugins/upnp/ContentDirectoryService.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/ContentDirectorySer [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-ContentDirectoryService.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/ContentDirectoryService.cxx' object='src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-ContentDirectoryService.obj `if test -f 'src/db/plugins/upnp/ContentDirectoryService.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/ContentDirectoryService.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/upnp/ContentDirectoryService.cxx'; fi`
+
+src/db/plugins/upnp/libdb_plugins_a-Directory.o: src/db/plugins/upnp/Directory.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-Directory.o -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Directory.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-Directory.o `test -f 'src/db/plugins/upnp/Directory.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/Directory.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Directory.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Directory.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/Directory.cxx' object='src/db/plugins/upnp/libdb_plugins_a-Directory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-Directory.o `test -f 'src/db/plugins/upnp/Directory.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/Directory.cxx
+
+src/db/plugins/upnp/libdb_plugins_a-Directory.obj: src/db/plugins/upnp/Directory.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-Directory.obj -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Directory.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-Directory.obj `if test -f 'src/db/plugins/upnp/Directory.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/Directory.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/upnp/Directory. [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Directory.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Directory.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/Directory.cxx' object='src/db/plugins/upnp/libdb_plugins_a-Directory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-Directory.obj `if test -f 'src/db/plugins/upnp/Directory.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/Directory.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/upnp/Directory.cxx'; fi`
+
+src/db/plugins/upnp/libdb_plugins_a-Object.o: src/db/plugins/upnp/Object.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-Object.o -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Object.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-Object.o `test -f 'src/db/plugins/upnp/Object.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/Object.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Object.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Object.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/Object.cxx' object='src/db/plugins/upnp/libdb_plugins_a-Object.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-Object.o `test -f 'src/db/plugins/upnp/Object.cxx' || echo '$(srcdir)/'`src/db/plugins/upnp/Object.cxx
+
+src/db/plugins/upnp/libdb_plugins_a-Object.obj: src/db/plugins/upnp/Object.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/db/plugins/upnp/libdb_plugins_a-Object.obj -MD -MP -MF src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Object.Tpo -c -o src/db/plugins/upnp/libdb_plugins_a-Object.obj `if test -f 'src/db/plugins/upnp/Object.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/Object.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/upnp/Object.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Object.Tpo src/db/plugins/upnp/$(DEPDIR)/libdb_plugins_a-Object.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/db/plugins/upnp/Object.cxx' object='src/db/plugins/upnp/libdb_plugins_a-Object.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdb_plugins_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/db/plugins/upnp/libdb_plugins_a-Object.obj `if test -f 'src/db/plugins/upnp/Object.cxx'; then $(CYGPATH_W) 'src/db/plugins/upnp/Object.cxx'; else $(CYGPATH_W) '$(srcdir)/src/db/plugins/upnp/Object.cxx'; fi`
+
 src/decoder/plugins/libdecoder_a-PcmDecoderPlugin.o: src/decoder/plugins/PcmDecoderPlugin.cxx
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdecoder_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/decoder/plugins/libdecoder_a-PcmDecoderPlugin.o -MD -MP -MF src/decoder/plugins/$(DEPDIR)/libdecoder_a-PcmDecoderPlugin.Tpo -c -o src/decoder/plugins/libdecoder_a-PcmDecoderPlugin.o `test -f 'src/decoder/plugins/PcmDecoderPlugin.cxx' || echo '$(srcdir)/'`src/decoder/plugins/PcmDecoderPlugin.cxx
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/decoder/plugins/$(DEPDIR)/libdecoder_a-PcmDecoderPlugin.Tpo src/decoder/plugins/$(DEPDIR)/libdecoder_a-PcmDecoderPlugin.Po
@@ -13085,6 +13445,20 @@ src/storage/plugins/libstorage_a-LocalStorage.obj: src/storage/plugins/LocalStor
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstorage_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/storage/plugins/libstorage_a-LocalStorage.obj `if test -f 'src/storage/plugins/LocalStorage.cxx'; then $(CYGPATH_W) 'src/storage/plugins/LocalStorage.cxx'; else $(CYGPATH_W) '$(srcdir)/src/storage/plugins/LocalStorage.cxx'; fi`
 
+src/storage/libstorage_a-StorageState.o: src/storage/StorageState.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstorage_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/storage/libstorage_a-StorageState.o -MD -MP -MF src/storage/$(DEPDIR)/libstorage_a-StorageState.Tpo -c -o src/storage/libstorage_a-StorageState.o `test -f 'src/storage/StorageState.cxx' || echo '$(srcdir)/'`src/storage/StorageState.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/storage/$(DEPDIR)/libstorage_a-StorageState.Tpo src/storage/$(DEPDIR)/libstorage_a-StorageState.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/storage/StorageState.cxx' object='src/storage/libstorage_a-StorageState.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstorage_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/storage/libstorage_a-StorageState.o `test -f 'src/storage/StorageState.cxx' || echo '$(srcdir)/'`src/storage/StorageState.cxx
+
+src/storage/libstorage_a-StorageState.obj: src/storage/StorageState.cxx
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstorage_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/storage/libstorage_a-StorageState.obj -MD -MP -MF src/storage/$(DEPDIR)/libstorage_a-StorageState.Tpo -c -o src/storage/libstorage_a-StorageState.obj `if test -f 'src/storage/StorageState.cxx'; then $(CYGPATH_W) 'src/storage/StorageState.cxx'; else $(CYGPATH_W) '$(srcdir)/src/storage/StorageState.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/storage/$(DEPDIR)/libstorage_a-StorageState.Tpo src/storage/$(DEPDIR)/libstorage_a-StorageState.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/storage/StorageState.cxx' object='src/storage/libstorage_a-StorageState.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstorage_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/storage/libstorage_a-StorageState.obj `if test -f 'src/storage/StorageState.cxx'; then $(CYGPATH_W) 'src/storage/StorageState.cxx'; else $(CYGPATH_W) '$(srcdir)/src/storage/StorageState.cxx'; fi`
+
 src/lib/smbclient/libstorage_a-Domain.o: src/lib/smbclient/Domain.cxx
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstorage_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/lib/smbclient/libstorage_a-Domain.o -MD -MP -MF src/lib/smbclient/$(DEPDIR)/libstorage_a-Domain.Tpo -c -o src/lib/smbclient/libstorage_a-Domain.o `test -f 'src/lib/smbclient/Domain.cxx' || echo '$(srcdir)/'`src/lib/smbclient/Domain.cxx
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/lib/smbclient/$(DEPDIR)/libstorage_a-Domain.Tpo src/lib/smbclient/$(DEPDIR)/libstorage_a-Domain.Po
@@ -15229,8 +15603,8 @@ maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
- at ENABLE_DOCUMENTATION_FALSE@install-data-local:
 @ANDROID_FALSE@@ENABLE_DOCUMENTATION_FALSE@@ENABLE_HAIKU_FALSE at clean-local:
+ at ENABLE_DOCUMENTATION_FALSE@install-data-local:
 @ENABLE_DOCUMENTATION_FALSE at uninstall-local:
 clean: clean-am
 
diff --git a/NEWS b/NEWS
index bac4597..4f73e39 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,18 @@
+ver 0.20.13 (2017/12/18)
+* output
+  - osx: set up ring buffer to hold at least 100ms
+* mixer
+  - alsa: fix rounding errors
+* database
+  - simple: don't purge mount points on update/rescan
+  - simple: fix "mount" bug caused by bad compiler optimization
+  - simple: fix "lsinfo" into mount points
+  - upnp: work around libupnp 1.6.24 API breakage
+* queue: fix spuriously misplaced prioritized songs
+* save and restore mountpoints within the state file
+* include Windows cross-build script in source tarball
+* fix Windows build failures
+
 ver 0.20.12 (2017/11/25)
 * database
   - upnp: adapt to libupnp 1.8 API changes
diff --git a/android/build.py b/android/build.py
index 3ec3d9b..fab6ecb 100755
--- a/android/build.py
+++ b/android/build.py
@@ -46,13 +46,14 @@ class AndroidNdkToolchain:
 
         self.ndk_arch = 'arm'
         android_abi = 'armeabi-v7a'
-        ndk_platform = 'android-14'
+        ndk_platform = 'android-21'
 
         # select the NDK compiler
         gcc_version = '4.9'
 
         ndk_platform_path = os.path.join(ndk_path, 'platforms', ndk_platform)
-        sysroot = os.path.join(ndk_platform_path, 'arch-' + self.ndk_arch)
+        sysroot = os.path.join(ndk_path, 'sysroot')
+        target_root = os.path.join(ndk_platform_path, 'arch-' + self.ndk_arch)
 
         install_prefix = os.path.join(arch_path, 'root')
 
@@ -79,8 +80,15 @@ class AndroidNdkToolchain:
 
         self.cflags = '-Os -g ' + common_flags
         self.cxxflags = '-Os -g ' + common_flags
-        self.cppflags = '--sysroot=' + self.sysroot + ' -isystem ' + os.path.join(install_prefix, 'include')
-        self.ldflags = '--sysroot=' + self.sysroot + ' ' + common_flags + ' -L' + os.path.join(install_prefix, 'lib')
+        self.cppflags = '--sysroot=' + sysroot + \
+            ' -isystem ' + os.path.join(install_prefix, 'include') + \
+            ' -isystem ' + os.path.join(sysroot, 'usr', 'include', arch) + \
+            ' -D__ANDROID_API__=21'
+        self.ldflags = '--sysroot=' + sysroot + \
+            ' -L' + os.path.join(install_prefix, 'lib') + \
+            ' -L' + os.path.join(target_root, 'usr', 'lib') + \
+            ' -B' + os.path.join(target_root, 'usr', 'lib') + \
+            ' ' + common_flags
         self.libs = ''
 
         self.is_arm = self.ndk_arch == 'arm'
diff --git a/configure b/configure
index 9e282f9..4429caa 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for mpd 0.20.12.
+# Generated by GNU Autoconf 2.69 for mpd 0.20.13.
 #
 # Report bugs to <musicpd-dev-team at lists.sourceforge.net>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='mpd'
 PACKAGE_TARNAME='mpd'
-PACKAGE_VERSION='0.20.12'
-PACKAGE_STRING='mpd 0.20.12'
+PACKAGE_VERSION='0.20.13'
+PACKAGE_STRING='mpd 0.20.13'
 PACKAGE_BUGREPORT='musicpd-dev-team at lists.sourceforge.net'
 PACKAGE_URL=''
 
@@ -1785,7 +1785,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures mpd 0.20.12 to adapt to many kinds of systems.
+\`configure' configures mpd 0.20.13 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1856,7 +1856,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of mpd 0.20.12:";;
+     short | recursive ) echo "Configuration of mpd 0.20.13:";;
    esac
   cat <<\_ACEOF
 
@@ -2209,7 +2209,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-mpd configure 0.20.12
+mpd configure 0.20.13
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2616,7 +2616,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by mpd $as_me 0.20.12, which was
+It was created by mpd $as_me 0.20.13, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2967,7 +2967,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 VERSION_MAJOR=0
 VERSION_MINOR=20
-VERSION_REVISION=12
+VERSION_REVISION=13
 VERSION_EXTRA=0
 
 
@@ -3486,7 +3486,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='mpd'
- VERSION='0.20.12'
+ VERSION='0.20.13'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -9629,7 +9629,7 @@ $as_echo_n "checking for ipv6... " >&6; }
 /* end confdefs.h.  */
 
 #include <sys/types.h>
-#ifdef WIN32
+#ifdef _WIN32
 #include <winsock2.h>
 #else
 #include <sys/socket.h>
@@ -21779,7 +21779,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by mpd $as_me 0.20.12, which was
+This file was extended by mpd $as_me 0.20.13, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21845,7 +21845,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-mpd config.status 0.20.12
+mpd config.status 0.20.13
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 5249044..26a5381 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,10 +1,10 @@
 AC_PREREQ(2.60)
 
-AC_INIT(mpd, 0.20.12, musicpd-dev-team at lists.sourceforge.net)
+AC_INIT(mpd, 0.20.13, musicpd-dev-team at lists.sourceforge.net)
 
 VERSION_MAJOR=0
 VERSION_MINOR=20
-VERSION_REVISION=12
+VERSION_REVISION=13
 VERSION_EXTRA=0
 
 AC_CONFIG_SRCDIR([src/Main.cxx])
@@ -492,7 +492,7 @@ if test x$enable_ipv6 = xyes; then
 	AC_EGREP_CPP([AP_maGiC_VALUE],
 	[
 #include <sys/types.h>
-#ifdef WIN32
+#ifdef _WIN32
 #include <winsock2.h>
 #else
 #include <sys/socket.h>
diff --git a/doc/doxygen.conf b/doc/doxygen.conf
index 777050c..c3b1655 100644
--- a/doc/doxygen.conf
+++ b/doc/doxygen.conf
@@ -38,7 +38,7 @@ PROJECT_NAME           = MPD
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 0.20.12
+PROJECT_NUMBER         = 0.20.13
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
diff --git a/python/build/autotools.py b/python/build/autotools.py
new file mode 100644
index 0000000..d9a1f15
--- /dev/null
+++ b/python/build/autotools.py
@@ -0,0 +1,46 @@
+import os.path, subprocess
+
+from build.project import Project
+
+class AutotoolsProject(Project):
+    def __init__(self, url, md5, installed, configure_args=[],
+                 autogen=False,
+                 cppflags='',
+                 **kwargs):
+        Project.__init__(self, url, md5, installed, **kwargs)
+        self.configure_args = configure_args
+        self.autogen = autogen
+        self.cppflags = cppflags
+
+    def build(self, toolchain):
+        src = self.unpack(toolchain)
+        if self.autogen:
+            subprocess.check_call(['libtoolize', '--force'], cwd=src)
+            subprocess.check_call(['aclocal'], cwd=src)
+            subprocess.check_call(['automake', '--add-missing', '--force-missing', '--foreign'], cwd=src)
+            subprocess.check_call(['autoconf'], cwd=src)
+
+        build = self.make_build_path(toolchain)
+
+        configure = [
+            os.path.join(src, 'configure'),
+            'CC=' + toolchain.cc,
+            'CXX=' + toolchain.cxx,
+            'CFLAGS=' + toolchain.cflags,
+            'CXXFLAGS=' + toolchain.cxxflags,
+            'CPPFLAGS=' + toolchain.cppflags + ' ' + self.cppflags,
+            'LDFLAGS=' + toolchain.ldflags,
+            'LIBS=' + toolchain.libs,
+            'AR=' + toolchain.ar,
+            'RANLIB=' + toolchain.ranlib,
+            'STRIP=' + toolchain.strip,
+            '--host=' + toolchain.arch,
+            '--prefix=' + toolchain.install_prefix,
+            '--enable-silent-rules',
+        ] + self.configure_args
+
+        subprocess.check_call(configure, cwd=build, env=toolchain.env)
+        subprocess.check_call(['/usr/bin/make', '--quiet', '-j12'],
+                              cwd=build, env=toolchain.env)
+        subprocess.check_call(['/usr/bin/make', '--quiet', 'install'],
+                              cwd=build, env=toolchain.env)
diff --git a/python/build/boost.py b/python/build/boost.py
new file mode 100644
index 0000000..26cdfae
--- /dev/null
+++ b/python/build/boost.py
@@ -0,0 +1,23 @@
+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)
diff --git a/python/build/cmdline.py b/python/build/cmdline.py
new file mode 100644
index 0000000..50245f5
--- /dev/null
+++ b/python/build/cmdline.py
@@ -0,0 +1,29 @@
+def concatenate_cmdline_variables(src, names):
+    """Find duplicate variable declarations on the given source list, and
+    concatenate the values of those in the 'names' list."""
+
+    # the result list being constructed
+    dest = []
+
+    # a map of variable name to destination list index
+    positions = {}
+
+    for item in src:
+        i = item.find('=')
+        if i > 0:
+            # it's a variable
+            name = item[:i]
+            if name in names:
+                # it's a known variable
+                if name in positions:
+                    # already specified: concatenate instead of
+                    # appending it
+                    dest[positions[name]] += ' ' + item[i + 1:]
+                    continue
+                else:
+                    # not yet seen: append it and remember the list
+                    # index
+                    positions[name] = len(dest)
+        dest.append(item)
+
+    return dest
diff --git a/python/build/dirs.py b/python/build/dirs.py
new file mode 100644
index 0000000..bdbf2b1
--- /dev/null
+++ b/python/build/dirs.py
@@ -0,0 +1,9 @@
+import os.path
+
+lib_path = os.path.abspath('lib')
+
+shared_path = lib_path
+if 'MPD_SHARED_LIB' in os.environ:
+    shared_path = os.environ['MPD_SHARED_LIB']
+tarball_path = os.path.join(shared_path, 'download')
+src_path = os.path.join(shared_path, 'src')
diff --git a/python/build/download.py b/python/build/download.py
new file mode 100644
index 0000000..9cc710c
--- /dev/null
+++ b/python/build/download.py
@@ -0,0 +1,26 @@
+from build.verify import verify_file_digest
+import os
+import urllib.request
+
+def download_and_verify(url, md5, parent_path):
+    """Download a file, verify its MD5 checksum and return the local path."""
+
+    os.makedirs(parent_path, exist_ok=True)
+    path = os.path.join(parent_path, os.path.basename(url))
+
+    try:
+        if verify_file_digest(path, md5): return path
+        os.unlink(path)
+    except FileNotFoundError:
+        pass
+
+    tmp_path = path + '.tmp'
+
+    print("download", url)
+    urllib.request.urlretrieve(url, tmp_path)
+    if not verify_file_digest(tmp_path, md5):
+        os.unlink(tmp_path)
+        raise RuntimeError("Digest mismatch")
+
+    os.rename(tmp_path, path)
+    return path
diff --git a/python/build/ffmpeg.py b/python/build/ffmpeg.py
new file mode 100644
index 0000000..d75e980
--- /dev/null
+++ b/python/build/ffmpeg.py
@@ -0,0 +1,54 @@
+import os.path, subprocess
+
+from build.project import Project
+
+class FfmpegProject(Project):
+    def __init__(self, url, md5, installed, configure_args=[],
+                 cppflags='',
+                 **kwargs):
+        Project.__init__(self, url, md5, installed, **kwargs)
+        self.configure_args = configure_args
+        self.cppflags = cppflags
+
+    def _filter_cflags(self, flags):
+        # FFmpeg expects the GNU as syntax
+        flags = flags.replace(' -integrated-as ', ' -no-integrated-as ')
+        return flags
+
+    def build(self, toolchain):
+        src = self.unpack(toolchain)
+        build = self.make_build_path(toolchain)
+
+        if toolchain.is_arm:
+            arch = 'arm'
+        else:
+            arch = 'x86'
+
+        if toolchain.is_windows:
+            target_os = 'mingw32'
+        else:
+            target_os = 'linux'
+
+        configure = [
+            os.path.join(src, 'configure'),
+            '--cc=' + toolchain.cc,
+            '--cxx=' + toolchain.cxx,
+            '--nm=' + toolchain.nm,
+            '--extra-cflags=' + self._filter_cflags(toolchain.cflags) + ' ' + toolchain.cppflags + ' ' + self.cppflags,
+            '--extra-cxxflags=' + self._filter_cflags(toolchain.cxxflags) + ' ' + toolchain.cppflags + ' ' + self.cppflags,
+            '--extra-ldflags=' + toolchain.ldflags,
+            '--extra-libs=' + toolchain.libs,
+            '--ar=' + toolchain.ar,
+            '--ranlib=' + toolchain.ranlib,
+            '--enable-cross-compile',
+            '--arch=' + arch,
+            '--target-os=' + target_os,
+            '--prefix=' + toolchain.install_prefix,
+        ] + self.configure_args
+
+        if toolchain.is_armv7:
+            configure.append('--cpu=cortex-a8')
+
+        subprocess.check_call(configure, cwd=build, env=toolchain.env)
+        subprocess.check_call(['/usr/bin/make', '--quiet', '-j12'], cwd=build, env=toolchain.env)
+        subprocess.check_call(['/usr/bin/make', '--quiet', 'install'], cwd=build, env=toolchain.env)
diff --git a/python/build/libs.py b/python/build/libs.py
new file mode 100644
index 0000000..5acabf6
--- /dev/null
+++ b/python/build/libs.py
@@ -0,0 +1,129 @@
+from build.project import Project
+from build.zlib import ZlibProject
+from build.autotools import AutotoolsProject
+from build.ffmpeg import FfmpegProject
+from build.boost import BoostProject
+
+libogg = AutotoolsProject(
+    'http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.xz',
+    '5c3a34309d8b98640827e5d0991a4015',
+    'lib/libogg.a',
+    ['--disable-shared', '--enable-static'],
+)
+
+libvorbis = AutotoolsProject(
+    'http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.xz',
+    '28cb28097c07a735d6af56e598e1c90f',
+    'lib/libvorbis.a',
+    ['--disable-shared', '--enable-static'],
+)
+
+opus = AutotoolsProject(
+    'https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz',
+    'cfafd339ccd9c5ef8d6ab15d7e1a412c054bf4cb4ecbbbcc78c12ef2def70732',
+    'lib/libopus.a',
+    ['--disable-shared', '--enable-static'],
+)
+
+flac = AutotoolsProject(
+    'http://downloads.xiph.org/releases/flac/flac-1.3.2.tar.xz',
+    '91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f',
+    'lib/libFLAC.a',
+    [
+        '--disable-shared', '--enable-static',
+        '--disable-xmms-plugin', '--disable-cpplibs',
+    ],
+)
+
+zlib = ZlibProject(
+    'http://zlib.net/zlib-1.2.11.tar.xz',
+    '4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066',
+    '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'],
+    autogen=True,
+)
+
+libmad = AutotoolsProject(
+    'ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz',
+    '1be543bc30c56fb6bea1d7bf6a64e66c',
+    'lib/libmad.a',
+    ['--disable-shared', '--enable-static'],
+    autogen=True,
+)
+
+liblame = AutotoolsProject(
+    'http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz',
+    '24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff',
+    'lib/libmp3lame.a',
+    [
+        '--disable-shared', '--enable-static',
+        '--disable-gtktest', '--disable-analyzer-hooks',
+        '--disable-decoder', '--disable-frontend',
+    ],
+)
+
+ffmpeg = FfmpegProject(
+    'http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.xz',
+    '5a77278a63741efa74e26bf197b9bb09ac6381b9757391b922407210f0f991c0',
+    'lib/libavcodec.a',
+    [
+        '--disable-shared', '--enable-static',
+        '--enable-gpl',
+        '--enable-small',
+        '--disable-pthreads',
+        '--disable-programs',
+        '--disable-doc',
+        '--disable-avdevice',
+        '--disable-swresample',
+        '--disable-swscale',
+        '--disable-postproc',
+        '--disable-avfilter',
+        '--disable-lzo',
+        '--disable-faan',
+        '--disable-pixelutils',
+        '--disable-network',
+        '--disable-encoders',
+        '--disable-protocols',
+        '--disable-devices',
+        '--disable-filters',
+        '--disable-v4l2_m2m',
+
+        # clang misinterprets the "B0" in hevc_mvs.c as binary
+        # literal, which breaks the build; but we don't need that
+        # video codec anyway
+        '--disable-decoder=hevc',
+    ],
+)
+
+curl = AutotoolsProject(
+    'http://curl.haxx.se/download/curl-7.57.0.tar.xz',
+    'f5f6fd3c72b7b8389969f4fb671ed8532fa9b5bb7a5cae7ca89bc1cea45c7878',
+    'lib/libcurl.a',
+    [
+        '--disable-shared', '--enable-static',
+        '--disable-debug',
+        '--enable-http',
+        '--enable-ipv6',
+        '--disable-ftp', '--disable-file',
+        '--disable-ldap', '--disable-ldaps',
+        '--disable-rtsp', '--disable-proxy', '--disable-dict', '--disable-telnet',
+        '--disable-tftp', '--disable-pop3', '--disable-imap', '--disable-smtp',
+        '--disable-gopher',
+        '--disable-manual',
+        '--disable-threaded-resolver', '--disable-verbose', '--disable-sspi',
+        '--disable-crypto-auth', '--disable-ntlm-wb', '--disable-tls-srp', '--disable-cookies',
+        '--without-ssl', '--without-gnutls', '--without-nss', '--without-libssh2',
+    ],
+)
+
+boost = BoostProject(
+    'http://downloads.sourceforge.net/project/boost/boost/1.65.1/boost_1_65_1.tar.bz2',
+    '9807a5d16566c57fd74fb522764e0b134a8bbe6b6e8967b83afefd30dcd3be81',
+    'include/boost/version.hpp',
+)
diff --git a/python/build/project.py b/python/build/project.py
new file mode 100644
index 0000000..c79c4f5
--- /dev/null
+++ b/python/build/project.py
@@ -0,0 +1,59 @@
+import os, shutil
+import re
+
+from build.download import download_and_verify
+from build.tar import untar
+
+class Project:
+    def __init__(self, url, md5, installed, name=None, version=None,
+                 base=None,
+                 use_cxx=False):
+        if base is None:
+            basename = os.path.basename(url)
+            m = re.match(r'^(.+)\.(tar(\.(gz|bz2|xz|lzma))?|zip)$', basename)
+            if not m: raise
+            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]?)$', self.base)
+            if name is None: name = m.group(1)
+            if version is None: version = m.group(2)
+
+        self.name = name
+        self.version = version
+
+        self.url = url
+        self.md5 = md5
+        self.installed = installed
+
+        self.use_cxx = use_cxx
+
+    def download(self, toolchain):
+        return download_and_verify(self.url, self.md5, toolchain.tarball_path)
+
+    def is_installed(self, toolchain):
+        tarball = self.download(toolchain)
+        installed = os.path.join(toolchain.install_prefix, self.installed)
+        tarball_mtime = os.path.getmtime(tarball)
+        try:
+            return os.path.getmtime(installed) >= tarball_mtime
+        except FileNotFoundError:
+            return False
+
+    def unpack(self, toolchain, out_of_tree=True):
+        if out_of_tree:
+            parent_path = toolchain.src_path
+        else:
+            parent_path = toolchain.build_path
+        return untar(self.download(toolchain), parent_path, self.base)
+
+    def make_build_path(self, toolchain):
+        path = os.path.join(toolchain.build_path, self.base)
+        try:
+            shutil.rmtree(path)
+        except FileNotFoundError:
+            pass
+        os.makedirs(path, exist_ok=True)
+        return path
diff --git a/python/build/tar.py b/python/build/tar.py
new file mode 100644
index 0000000..15bbfca
--- /dev/null
+++ b/python/build/tar.py
@@ -0,0 +1,11 @@
+import os, shutil, subprocess
+
+def untar(tarball_path, parent_path, base):
+    path = os.path.join(parent_path, base)
+    try:
+        shutil.rmtree(path)
+    except FileNotFoundError:
+        pass
+    os.makedirs(parent_path, exist_ok=True)
+    subprocess.check_call(['/bin/tar', 'xfC', tarball_path, parent_path])
+    return path
diff --git a/python/build/verify.py b/python/build/verify.py
new file mode 100644
index 0000000..b730c4e
--- /dev/null
+++ b/python/build/verify.py
@@ -0,0 +1,42 @@
+import hashlib
+
+def feed_file(h, f):
+    """Feed data read from an open file into the hashlib instance."""
+
+    while True:
+        data = f.read(65536)
+        if len(data) == 0:
+            # end of file
+            break
+        h.update(data)
+
+def feed_file_path(h, path):
+    """Feed data read from a file (to be opened by this function) into the hashlib instance."""
+
+    with open(path, 'rb') as f:
+        feed_file(h, f)
+
+def file_digest(algorithm, path):
+    """Calculate the digest of a file and return it in hexadecimal notation."""
+
+    h = algorithm()
+    feed_file_path(h, path)
+    return h.hexdigest()
+
+def guess_digest_algorithm(digest):
+    l = len(digest)
+    if l == 32:
+        return hashlib.md5
+    elif l == 40:
+        return hashlib.sha1
+    elif l == 64:
+        return hashlib.sha256
+    else:
+        return None
+
+def verify_file_digest(path, expected_digest):
+    """Verify the digest of a file, and return True if the digest matches with the given expected digest."""
+
+    algorithm = guess_digest_algorithm(expected_digest)
+    assert(algorithm is not None)
+    return file_digest(algorithm, path) == expected_digest
diff --git a/python/build/zlib.py b/python/build/zlib.py
new file mode 100644
index 0000000..0518e77
--- /dev/null
+++ b/python/build/zlib.py
@@ -0,0 +1,22 @@
+import os.path, subprocess
+
+from build.project import Project
+
+class ZlibProject(Project):
+    def __init__(self, url, md5, installed,
+                 **kwargs):
+        Project.__init__(self, url, md5, installed, **kwargs)
+
+    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'),
+            'SHARED_MODE=1'],
+            cwd=src, env=toolchain.env)
diff --git a/src/CommandLine.cxx b/src/CommandLine.cxx
index 9429af5..0d04846 100644
--- a/src/CommandLine.cxx
+++ b/src/CommandLine.cxx
@@ -67,7 +67,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #define CONFIG_FILE_LOCATION PATH_LITERAL("mpd\\mpd.conf")
 #define APP_CONFIG_FILE_LOCATION PATH_LITERAL("conf\\mpd.conf")
 #else
@@ -389,7 +389,7 @@ ParseCommandLine(int argc, char **argv, struct options *options)
 	ConfigLoader loader;
 
 	bool found =
-#ifdef WIN32
+#ifdef _WIN32
 		loader.TryFile(GetUserConfigDir(), CONFIG_FILE_LOCATION) ||
 		loader.TryFile(GetSystemConfigDir(), CONFIG_FILE_LOCATION) ||
 		loader.TryFile(GetAppBaseDir(), APP_CONFIG_FILE_LOCATION);
diff --git a/src/LocateUri.hxx b/src/LocateUri.hxx
index 8d1a6d8..aa216f3 100644
--- a/src/LocateUri.hxx
+++ b/src/LocateUri.hxx
@@ -24,7 +24,7 @@
 #include "Compiler.h"
 #include "fs/AllocatedPath.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 /* damn you, windows.h! */
 #ifdef ABSOLUTE
diff --git a/src/LogBackend.cxx b/src/LogBackend.cxx
index b2e2dab..ea3d2e2 100644
--- a/src/LogBackend.cxx
+++ b/src/LogBackend.cxx
@@ -162,7 +162,7 @@ FileLog(const Domain &domain, const char *message)
 		domain.GetName(),
 		chomp_length(message), message);
 
-#ifdef WIN32
+#ifdef _WIN32
 	/* force-flush the log file, because setvbuf() does not seem
 	   to have an effect on WIN32 */
 	fflush(stderr);
diff --git a/src/LogInit.cxx b/src/LogInit.cxx
index 1678660..1fde300 100644
--- a/src/LogInit.cxx
+++ b/src/LogInit.cxx
@@ -72,7 +72,7 @@ log_init_file(int line)
 
 	out_fd = open_log_file();
 	if (out_fd < 0) {
-#ifdef WIN32
+#ifdef _WIN32
 		const std::string out_path_utf8 = out_path.ToUTF8();
 		throw FormatRuntimeError("failed to open log file \"%s\" (config line %d)",
 					 out_path_utf8.c_str(), line);
@@ -182,7 +182,7 @@ void setup_log_output()
 	fflush(nullptr);
 
 	if (out_fd < 0) {
-#ifdef WIN32
+#ifdef _WIN32
 		return;
 #else
 		out_fd = open("/dev/null", O_WRONLY);
diff --git a/src/LogLevel.hxx b/src/LogLevel.hxx
index 36aad47..e91ed84 100644
--- a/src/LogLevel.hxx
+++ b/src/LogLevel.hxx
@@ -20,7 +20,7 @@
 #ifndef MPD_LOG_LEVEL_HXX
 #define MPD_LOG_LEVEL_HXX
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 /* damn you, windows.h! */
 #ifdef ERROR
diff --git a/src/Main.cxx b/src/Main.cxx
index e05afe6..121ae9c 100644
--- a/src/Main.cxx
+++ b/src/Main.cxx
@@ -106,7 +106,7 @@
 #include <locale.h>
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <winsock2.h>
 #include <ws2tcpip.h>
 #endif
@@ -289,7 +289,7 @@ glue_state_file_init()
  */
 static void winsock_init(void)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	WSADATA sockinfo;
 
 	int retval = WSAStartup(MAKEWORD(2, 2), &sockinfo);
@@ -418,7 +418,7 @@ Instance::OnIdle(unsigned flags)
 
 int main(int argc, char *argv[])
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return win32_main(argc, argv);
 #else
 	return mpd_main(argc, argv);
@@ -615,7 +615,7 @@ try {
 	   playlist_state_restore() */
 	instance->partition->pc.LockUpdateAudio();
 
-#ifdef WIN32
+#ifdef _WIN32
 	win32_app_started();
 #endif
 
@@ -630,7 +630,7 @@ try {
 	/* run the main loop */
 	instance->event_loop.Run();
 
-#ifdef WIN32
+#ifdef _WIN32
 	win32_app_stopping();
 #endif
 
@@ -702,7 +702,7 @@ try {
 	daemonize_finish();
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 	WSACleanup();
 #endif
 
diff --git a/src/Main.hxx b/src/Main.hxx
index 6b89eb0..9b41abf 100644
--- a/src/Main.hxx
+++ b/src/Main.hxx
@@ -42,7 +42,7 @@ int mpd_main(int argc, char *argv[]);
 
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 
 /**
  * If program is run as windows service performs nessesary initialization
diff --git a/src/MusicChunk.hxx b/src/MusicChunk.hxx
index c5be179..a730a0b 100644
--- a/src/MusicChunk.hxx
+++ b/src/MusicChunk.hxx
@@ -80,11 +80,19 @@ struct MusicChunk {
 	ReplayGainInfo replay_gain_info;
 
 	/**
+	 * A magic value for #replay_gain_serial which omits updating
+	 * the #ReplayGainFilter.  This is used by "silence" chunks
+	 * (see PlayerThread::SendSilence()) so they don't affect the
+	 * replay gain.
+	 */
+	static constexpr unsigned IGNORE_REPLAY_GAIN = ~0u;
+
+	/**
 	 * A serial number for checking if replay gain info has
 	 * changed since the last chunk.  The magic value 0 indicates
 	 * that there is no replay gain info available.
 	 */
-	unsigned replay_gain_serial = 0;
+	unsigned replay_gain_serial;
 
 	/** the data (probably PCM) */
 	uint8_t data[CHUNK_SIZE];
diff --git a/src/StateFile.cxx b/src/StateFile.cxx
index cc02d0f..e8cf7d1 100644
--- a/src/StateFile.cxx
+++ b/src/StateFile.cxx
@@ -24,6 +24,7 @@
 #include "fs/io/TextFile.hxx"
 #include "fs/io/FileOutputStream.hxx"
 #include "fs/io/BufferedOutputStream.hxx"
+#include "storage/StorageState.hxx"
 #include "Partition.hxx"
 #include "Instance.hxx"
 #include "mixer/Volume.hxx"
@@ -56,6 +57,9 @@ StateFile::RememberVersions() noexcept
 	prev_output_version = audio_output_state_get_version();
 	prev_playlist_version = playlist_state_get_hash(partition.playlist,
 							partition.pc);
+#ifdef ENABLE_DATABASE
+	prev_storage_version = storage_state_get_hash(partition.instance);
+#endif
 }
 
 bool
@@ -64,7 +68,11 @@ StateFile::IsModified() const noexcept
 	return prev_volume_version != sw_volume_state_get_hash() ||
 		prev_output_version != audio_output_state_get_version() ||
 		prev_playlist_version != playlist_state_get_hash(partition.playlist,
-								 partition.pc);
+								 partition.pc)
+#ifdef ENABLE_DATABASE
+		|| prev_storage_version != storage_state_get_hash(partition.instance)
+#endif
+		;
 }
 
 inline void
@@ -72,6 +80,11 @@ StateFile::Write(BufferedOutputStream &os)
 {
 	save_sw_volume_state(os);
 	audio_output_state_save(os, partition.outputs);
+
+#ifdef ENABLE_DATABASE
+	storage_state_save(os, partition.instance);
+#endif
+
 	playlist_state_save(os, partition.playlist, partition.pc);
 }
 
@@ -123,6 +136,10 @@ try {
 			playlist_state_restore(line, file, song_loader,
 					       partition.playlist,
 					       partition.pc);
+#ifdef ENABLE_DATABASE
+		success = success || storage_state_restore(line, file, partition.instance);
+#endif
+
 		if (!success)
 			FormatError(state_file_domain,
 				    "Unrecognized line in state file: %s",
diff --git a/src/StateFile.hxx b/src/StateFile.hxx
index 342a20c..b10a7e0 100644
--- a/src/StateFile.hxx
+++ b/src/StateFile.hxx
@@ -46,6 +46,10 @@ class StateFile final : private TimeoutMonitor {
 	unsigned prev_volume_version = 0, prev_output_version = 0,
 		prev_playlist_version = 0;
 
+#ifdef ENABLE_DATABASE
+	unsigned prev_storage_version = 0;
+#endif
+
 public:
 	static constexpr std::chrono::steady_clock::duration DEFAULT_INTERVAL = std::chrono::minutes(2);
 
diff --git a/src/Stats.cxx b/src/Stats.cxx
index f558646..4f5275d 100644
--- a/src/Stats.cxx
+++ b/src/Stats.cxx
@@ -31,7 +31,7 @@
 
 #include <chrono>
 
-#ifndef WIN32
+#ifndef _WIN32
 /**
  * The monotonic time stamp when MPD was started.  It is used to
  * calculate the uptime.
@@ -114,7 +114,7 @@ stats_print(Response &r, const Partition &partition)
 {
 	r.Format("uptime: %u\n"
 		 "playtime: %lu\n",
-#ifdef WIN32
+#ifdef _WIN32
 		 GetProcessUptimeS(),
 #else
 		 (unsigned)std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now() - start_time).count(),
diff --git a/src/TimePrint.cxx b/src/TimePrint.cxx
index f93d965..a9e932a 100644
--- a/src/TimePrint.cxx
+++ b/src/TimePrint.cxx
@@ -24,7 +24,7 @@
 void
 time_print(Response &r, const char *name, time_t t)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	const struct tm *tm2 = gmtime(&t);
 #else
 	struct tm tm;
@@ -35,7 +35,7 @@ time_print(Response &r, const char *name, time_t t)
 
 	char buffer[32];
 	strftime(buffer, sizeof(buffer),
-#ifdef WIN32
+#ifdef _WIN32
 		 "%Y-%m-%dT%H:%M:%SZ",
 #else
 		 "%FT%TZ",
diff --git a/src/client/ClientFile.cxx b/src/client/ClientFile.cxx
index 0382789..e38974d 100644
--- a/src/client/ClientFile.cxx
+++ b/src/client/ClientFile.cxx
@@ -28,7 +28,7 @@
 void
 Client::AllowFile(Path path_fs) const
 {
-#ifdef WIN32
+#ifdef _WIN32
 	(void)path_fs;
 
 	throw ProtocolError(ACK_ERROR_PERMISSION, "Access denied");
diff --git a/src/client/ClientMessage.hxx b/src/client/ClientMessage.hxx
index b665cd6..1da871a 100644
--- a/src/client/ClientMessage.hxx
+++ b/src/client/ClientMessage.hxx
@@ -24,7 +24,7 @@
 
 #include <string>
 
-#ifdef WIN32
+#ifdef _WIN32
 /* fuck WIN32! */
 #include <windows.h>
 #undef GetMessage
diff --git a/src/client/ClientNew.cxx b/src/client/ClientNew.cxx
index 42ccadb..1bb5b0e 100644
--- a/src/client/ClientNew.cxx
+++ b/src/client/ClientNew.cxx
@@ -29,7 +29,7 @@
 #include "Log.hxx"
 
 #include <assert.h>
-#ifdef WIN32
+#ifdef _WIN32
 #include <winsock2.h>
 #else
 #include <sys/socket.h>
diff --git a/src/command/CommandResult.hxx b/src/command/CommandResult.hxx
index cf6d590..30a7e8b 100644
--- a/src/command/CommandResult.hxx
+++ b/src/command/CommandResult.hxx
@@ -20,7 +20,7 @@
 #ifndef MPD_COMMAND_RESULT_HXX
 #define MPD_COMMAND_RESULT_HXX
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 /* damn you, windows.h! */
 #ifdef ERROR
diff --git a/src/command/FileCommands.cxx b/src/command/FileCommands.cxx
index 19c9bad..4d66746 100644
--- a/src/command/FileCommands.cxx
+++ b/src/command/FileCommands.cxx
@@ -58,7 +58,7 @@ skip_path(Path name_fs) noexcept
 	return name_fs.HasNewline();
 }
 
-#if defined(WIN32) && GCC_CHECK_VERSION(4,6)
+#if defined(_WIN32) && GCC_CHECK_VERSION(4,6)
 /* PRIu64 causes bogus compiler warning */
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wformat"
@@ -101,7 +101,7 @@ handle_listfiles_local(Response &r, Path path_fs)
 	return CommandResult::OK;
 }
 
-#if defined(WIN32) && GCC_CHECK_VERSION(4,6)
+#if defined(_WIN32) && GCC_CHECK_VERSION(4,6)
 #pragma GCC diagnostic pop
 #endif
 
diff --git a/src/command/StorageCommands.cxx b/src/command/StorageCommands.cxx
index 1ecd96c..2cf042e 100644
--- a/src/command/StorageCommands.cxx
+++ b/src/command/StorageCommands.cxx
@@ -50,7 +50,7 @@ skip_path(const char *name_utf8) noexcept
 	return strchr(name_utf8, '\n') != nullptr;
 }
 
-#if defined(WIN32) && GCC_CHECK_VERSION(4,6)
+#if defined(_WIN32) && GCC_CHECK_VERSION(4,6)
 /* PRIu64 causes bogus compiler warning */
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wformat"
@@ -94,7 +94,7 @@ handle_listfiles_storage(Response &r, StorageDirectoryReader &reader)
 	}
 }
 
-#if defined(WIN32) && GCC_CHECK_VERSION(4,6)
+#if defined(_WIN32) && GCC_CHECK_VERSION(4,6)
 #pragma GCC diagnostic pop
 #endif
 
diff --git a/src/config/ConfigOption.hxx b/src/config/ConfigOption.hxx
index b29bf52..6979095 100644
--- a/src/config/ConfigOption.hxx
+++ b/src/config/ConfigOption.hxx
@@ -22,7 +22,7 @@
 
 #include "Compiler.h"
 
-#if defined(WIN32) && CLANG_OR_GCC_VERSION(4,7)
+#if defined(_WIN32) && CLANG_OR_GCC_VERSION(4,7)
 /* "INPUT" is declared by winuser.h */
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wshadow"
@@ -93,7 +93,7 @@ enum class ConfigBlockOption {
 	MAX
 };
 
-#if defined(WIN32) && CLANG_OR_GCC_VERSION(4,7)
+#if defined(_WIN32) && CLANG_OR_GCC_VERSION(4,7)
 #pragma GCC diagnostic pop
 #endif
 
diff --git a/src/config/ConfigPath.cxx b/src/config/ConfigPath.cxx
index 0f6c37a..204b626 100644
--- a/src/config/ConfigPath.cxx
+++ b/src/config/ConfigPath.cxx
@@ -29,7 +29,7 @@
 #include <assert.h>
 #include <string.h>
 
-#ifndef WIN32
+#ifndef _WIN32
 #include <pwd.h>
 
 /**
@@ -79,7 +79,7 @@ ParsePath(const char *path)
 {
 	assert(path != nullptr);
 
-#ifndef WIN32
+#ifndef _WIN32
 	if (path[0] == '~') {
 		++path;
 
@@ -119,7 +119,7 @@ ParsePath(const char *path)
 	} else {
 #endif
 		return AllocatedPath::FromUTF8Throw(path);
-#ifndef WIN32
+#ifndef _WIN32
 	}
 #endif
 }
diff --git a/src/db/plugins/simple/Directory.cxx b/src/db/plugins/simple/Directory.cxx
index 655778b..a1beb34 100644
--- a/src/db/plugins/simple/Directory.cxx
+++ b/src/db/plugins/simple/Directory.cxx
@@ -109,7 +109,7 @@ Directory::PruneEmpty() noexcept
 	     child != end;) {
 		child->PruneEmpty();
 
-		if (child->IsEmpty())
+		if (child->IsEmpty() && !child->IsMount())
 			child = children.erase_and_dispose(child,
 							   DeleteDisposer());
 		else
@@ -230,7 +230,7 @@ Directory::Walk(bool recursive, const SongFilter *filter,
 		   call will lock it again */
 		const ScopeDatabaseUnlock unlock;
 		WalkMount(GetPath(), *mounted_database,
-			  recursive, filter,
+			  "", recursive, filter,
 			  visit_directory, visit_song,
 			  visit_playlist);
 		return;
diff --git a/src/db/plugins/simple/Directory.hxx b/src/db/plugins/simple/Directory.hxx
index 99572a4..8545ba0 100644
--- a/src/db/plugins/simple/Directory.hxx
+++ b/src/db/plugins/simple/Directory.hxx
@@ -127,7 +127,6 @@ public:
 	 *
 	 * @param name_utf8 the UTF-8 encoded name of the new sub directory
 	 */
-	gcc_malloc
 	Directory *CreateChild(const char *name_utf8);
 
 	/**
diff --git a/src/db/plugins/simple/Mount.cxx b/src/db/plugins/simple/Mount.cxx
index bf3a4b8..c07b67a 100644
--- a/src/db/plugins/simple/Mount.cxx
+++ b/src/db/plugins/simple/Mount.cxx
@@ -72,7 +72,7 @@ PrefixVisitPlaylist(const char *base, const VisitPlaylist &visit_playlist,
 
 void
 WalkMount(const char *base, const Database &db,
-	  bool recursive, const SongFilter *filter,
+	  const char* uri, bool recursive, const SongFilter *filter,
 	  const VisitDirectory &visit_directory, const VisitSong &visit_song,
 	  const VisitPlaylist &visit_playlist)
 {
@@ -93,5 +93,5 @@ WalkMount(const char *base, const Database &db,
 		vp = std::bind(PrefixVisitPlaylist,
 			       base, std::ref(visit_playlist), _1, _2);
 
-	db.Visit(DatabaseSelection("", recursive, filter), vd, vs, vp);
+	db.Visit(DatabaseSelection(uri, recursive, filter), vd, vs, vp);
 }
diff --git a/src/db/plugins/simple/Mount.hxx b/src/db/plugins/simple/Mount.hxx
index 0c6abd1..c79e523 100644
--- a/src/db/plugins/simple/Mount.hxx
+++ b/src/db/plugins/simple/Mount.hxx
@@ -27,7 +27,7 @@ class SongFilter;
 
 void
 WalkMount(const char *base, const Database &db,
-	  bool recursive, const SongFilter *filter,
+	  const char* uri, bool recursive, const SongFilter *filter,
 	  const VisitDirectory &visit_directory, const VisitSong &visit_song,
 	  const VisitPlaylist &visit_playlist);
 
diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.cxx b/src/db/plugins/simple/SimpleDatabasePlugin.cxx
index a0b4c3a..a27c070 100644
--- a/src/db/plugins/simple/SimpleDatabasePlugin.cxx
+++ b/src/db/plugins/simple/SimpleDatabasePlugin.cxx
@@ -20,6 +20,7 @@
 #include "config.h"
 #include "SimpleDatabasePlugin.hxx"
 #include "PrefixedLightSong.hxx"
+#include "Mount.hxx"
 #include "db/DatabasePlugin.hxx"
 #include "db/Selection.hxx"
 #include "db/Helpers.hxx"
@@ -115,7 +116,7 @@ SimpleDatabase::Check() const
 						 path_utf8 + "\" because the "
 						 "parent path is not a directory");
 
-#ifndef WIN32
+#ifndef _WIN32
 		/* Check if we can write to the directory */
 		if (!CheckAccess(dirPath, X_OK | W_OK)) {
 			const int e = errno;
@@ -134,7 +135,7 @@ SimpleDatabase::Check() const
 	if (!fi.IsRegular())
 		throw std::runtime_error("db file \"" + path_utf8 + "\" is not a regular file");
 
-#ifndef WIN32
+#ifndef _WIN32
 	/* And check that we can write to it */
 	if (!CheckAccess(path, R_OK | W_OK))
 		throw FormatErrno("Can't open db file \"%s\" for reading/writing",
@@ -270,6 +271,18 @@ SimpleDatabase::Visit(const DatabaseSelection &selection,
 	ScopeDatabaseLock protect;
 
 	auto r = root->LookupDirectory(selection.uri.c_str());
+
+	if (r.directory->IsMount()) {
+		/* pass the request and the remaining uri to the mounted database */
+		protect.unlock();
+
+		WalkMount(r.directory->GetPath(), *(r.directory->mounted_database),
+			(r.uri == nullptr)?"":r.uri, selection.recursive, selection.filter,
+			visit_directory, visit_song, visit_playlist);
+
+		return;
+	}
+
 	if (r.uri == nullptr) {
 		/* it's a directory */
 
diff --git a/src/db/update/UpdateIO.cxx b/src/db/update/UpdateIO.cxx
index 9680c06..2623b0d 100644
--- a/src/db/update/UpdateIO.cxx
+++ b/src/db/update/UpdateIO.cxx
@@ -91,7 +91,7 @@ bool
 directory_child_access(Storage &storage, const Directory &directory,
 		       const char *name, int mode) noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	/* CheckAccess() is useless on WIN32 */
 	(void)storage;
 	(void)directory;
diff --git a/src/db/update/Walk.cxx b/src/db/update/Walk.cxx
index c3af3f7..8e58f12 100644
--- a/src/db/update/Walk.cxx
+++ b/src/db/update/Walk.cxx
@@ -55,7 +55,7 @@ UpdateWalk::UpdateWalk(EventLoop &_loop, DatabaseListener &_listener,
 	 storage(_storage),
 	 editor(_loop, _listener)
 {
-#ifndef WIN32
+#ifndef _WIN32
 	follow_inside_symlinks =
 		config_get_bool(ConfigOption::FOLLOW_INSIDE_SYMLINKS,
 				DEFAULT_FOLLOW_INSIDE_SYMLINKS);
@@ -104,7 +104,7 @@ inline void
 UpdateWalk::PurgeDeletedFromDirectory(Directory &directory)
 {
 	directory.ForEachChildSafe([&](Directory &child){
-			if (DirectoryExists(storage, child))
+			if (child.IsMount() || DirectoryExists(storage, child))
 				return;
 
 			editor.LockDeleteDirectory(&child);
@@ -133,7 +133,7 @@ UpdateWalk::PurgeDeletedFromDirectory(Directory &directory)
 	}
 }
 
-#ifndef WIN32
+#ifndef _WIN32
 static bool
 update_directory_stat(Storage &storage, Directory &directory)
 {
@@ -156,7 +156,7 @@ static int
 FindAncestorLoop(Storage &storage, Directory *parent,
 		 unsigned inode, unsigned device)
 {
-#ifndef WIN32
+#ifndef _WIN32
 	if (device == 0 && inode == 0)
 		/* can't detect loops if the Storage does not support
 		   these numbers */
@@ -258,7 +258,7 @@ bool
 UpdateWalk::SkipSymlink(const Directory *directory,
 			const char *utf8_name) const noexcept
 {
-#ifndef WIN32
+#ifndef _WIN32
 	const auto path_fs = storage.MapChildFS(directory->GetPath(),
 						utf8_name);
 	if (path_fs.IsNull())
diff --git a/src/db/update/Walk.hxx b/src/db/update/Walk.hxx
index 7d7a03d..cdc42f4 100644
--- a/src/db/update/Walk.hxx
+++ b/src/db/update/Walk.hxx
@@ -36,7 +36,7 @@ class UpdateWalk final {
 	friend class UpdateArchiveVisitor;
 #endif
 
-#ifndef WIN32
+#ifndef _WIN32
 	static constexpr bool DEFAULT_FOLLOW_INSIDE_SYMLINKS = true;
 	static constexpr bool DEFAULT_FOLLOW_OUTSIDE_SYMLINKS = true;
 
diff --git a/src/decoder/plugins/FlacIOHandle.cxx b/src/decoder/plugins/FlacIOHandle.cxx
index 997a427..bdd4334 100644
--- a/src/decoder/plugins/FlacIOHandle.cxx
+++ b/src/decoder/plugins/FlacIOHandle.cxx
@@ -46,7 +46,7 @@ FlacIORead(void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle)
 
 			p += nbytes;
 
-#ifndef WIN32
+#ifndef _WIN32
 		} catch (const std::system_error &e) {
 			errno = e.code().category() == ErrnoCategory()
 				? e.code().value()
diff --git a/src/event/MultiSocketMonitor.cxx b/src/event/MultiSocketMonitor.cxx
index 02a51e9..907251f 100644
--- a/src/event/MultiSocketMonitor.cxx
+++ b/src/event/MultiSocketMonitor.cxx
@@ -23,7 +23,7 @@
 
 #include <algorithm>
 
-#ifndef WIN32
+#ifndef _WIN32
 #include <poll.h>
 #endif
 
@@ -50,7 +50,7 @@ MultiSocketMonitor::ClearSocketList()
 	fds.clear();
 }
 
-#ifndef WIN32
+#ifndef _WIN32
 
 void
 MultiSocketMonitor::ReplaceSocketList(pollfd *pfds, unsigned n)
diff --git a/src/event/MultiSocketMonitor.hxx b/src/event/MultiSocketMonitor.hxx
index db6bec3..3b4877e 100644
--- a/src/event/MultiSocketMonitor.hxx
+++ b/src/event/MultiSocketMonitor.hxx
@@ -31,7 +31,7 @@
 
 #include <assert.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 /* ERROR is a WIN32 macro that poisons our namespace; this is a kludge
    to allow us to use it anyway */
 #ifdef ERROR
@@ -39,7 +39,7 @@
 #endif
 #endif
 
-#ifndef WIN32
+#ifndef _WIN32
 struct pollfd;
 #endif
 
@@ -189,7 +189,7 @@ public:
 		}
 	}
 
-#ifndef WIN32
+#ifndef _WIN32
 	/**
 	 * Replace the socket list with the given file descriptors.
 	 * The given pollfd array will be modified by this method.
diff --git a/src/event/ServerSocket.cxx b/src/event/ServerSocket.cxx
index 556648c..0e2a61d 100644
--- a/src/event/ServerSocket.cxx
+++ b/src/event/ServerSocket.cxx
@@ -43,7 +43,7 @@
 #include <unistd.h>
 #include <assert.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <ws2tcpip.h>
 #include <winsock.h>
 #else
diff --git a/src/event/SignalMonitor.cxx b/src/event/SignalMonitor.cxx
index 2fd101c..992acf2 100644
--- a/src/event/SignalMonitor.cxx
+++ b/src/event/SignalMonitor.cxx
@@ -20,7 +20,7 @@
 #include "config.h"
 #include "SignalMonitor.hxx"
 
-#ifndef WIN32
+#ifndef _WIN32
 
 #include "SocketMonitor.hxx"
 #include "util/Manual.hxx"
diff --git a/src/event/SignalMonitor.hxx b/src/event/SignalMonitor.hxx
index 854a565..cdec989 100644
--- a/src/event/SignalMonitor.hxx
+++ b/src/event/SignalMonitor.hxx
@@ -24,7 +24,7 @@
 
 class EventLoop;
 
-#ifndef WIN32
+#ifndef _WIN32
 
 #include "util/BindMethod.hxx"
 
diff --git a/src/event/SocketMonitor.cxx b/src/event/SocketMonitor.cxx
index a1daa07..8005d9c 100644
--- a/src/event/SocketMonitor.cxx
+++ b/src/event/SocketMonitor.cxx
@@ -24,7 +24,7 @@
 
 #include <assert.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <winsock2.h>
 #else
 #include <sys/socket.h>
diff --git a/src/event/SocketMonitor.hxx b/src/event/SocketMonitor.hxx
index 989da2c..bac3092 100644
--- a/src/event/SocketMonitor.hxx
+++ b/src/event/SocketMonitor.hxx
@@ -28,7 +28,7 @@
 #include <assert.h>
 #include <stddef.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 /* ERROR is a WIN32 macro that poisons our namespace; this is a kludge
    to allow us to use it anyway */
 #ifdef ERROR
diff --git a/src/fs/AllocatedPath.cxx b/src/fs/AllocatedPath.cxx
index fd5e54b..0bf2ba4 100644
--- a/src/fs/AllocatedPath.cxx
+++ b/src/fs/AllocatedPath.cxx
@@ -31,7 +31,7 @@ AllocatedPath::~AllocatedPath() {}
 AllocatedPath
 AllocatedPath::FromUTF8(const char *path_utf8) noexcept
 {
-#if defined(HAVE_FS_CHARSET) || defined(WIN32)
+#if defined(HAVE_FS_CHARSET) || defined(_WIN32)
 	try {
 		return AllocatedPath(::PathFromUTF8(path_utf8));
 	} catch (const std::runtime_error &) {
@@ -45,7 +45,7 @@ AllocatedPath::FromUTF8(const char *path_utf8) noexcept
 AllocatedPath
 AllocatedPath::FromUTF8Throw(const char *path_utf8)
 {
-#if defined(HAVE_FS_CHARSET) || defined(WIN32)
+#if defined(HAVE_FS_CHARSET) || defined(_WIN32)
 	return AllocatedPath(::PathFromUTF8(path_utf8));
 #else
 	return FromFS(path_utf8);
diff --git a/src/fs/Charset.cxx b/src/fs/Charset.cxx
index 1b84063..a2db265 100644
--- a/src/fs/Charset.cxx
+++ b/src/fs/Charset.cxx
@@ -24,7 +24,7 @@
 #include "lib/icu/Converter.hxx"
 #include "util/AllocatedString.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include "lib/icu/Win32.hxx"
 #include <windows.h>
 #endif
@@ -70,7 +70,7 @@ GetFSCharset() noexcept
 {
 #ifdef HAVE_FS_CHARSET
 	return fs_charset.empty() ? "UTF-8" : fs_charset.c_str();
-#elif defined(WIN32)
+#elif defined(_WIN32)
 	return "ACP";
 #else
 	return "UTF-8";
@@ -100,7 +100,7 @@ PathToUTF8(PathTraitsFS::const_pointer_type path_fs)
 	assert(path_fs != nullptr);
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 	const auto buffer = WideCharToMultiByte(CP_UTF8, path_fs);
 	return FixSeparators(PathTraitsUTF8::string(buffer.c_str()));
 #else
@@ -116,7 +116,7 @@ PathToUTF8(PathTraitsFS::const_pointer_type path_fs)
 #endif
 }
 
-#if defined(HAVE_FS_CHARSET) || defined(WIN32)
+#if defined(HAVE_FS_CHARSET) || defined(_WIN32)
 
 PathTraitsFS::string
 PathFromUTF8(PathTraitsUTF8::const_pointer_type path_utf8)
@@ -126,7 +126,7 @@ PathFromUTF8(PathTraitsUTF8::const_pointer_type path_utf8)
 	assert(path_utf8 != nullptr);
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 	const auto buffer = MultiByteToWideChar(CP_UTF8, path_utf8);
 	return PathTraitsFS::string(buffer.c_str());
 #else
diff --git a/src/fs/Charset.hxx b/src/fs/Charset.hxx
index 7f7097b..de6cc22 100644
--- a/src/fs/Charset.hxx
+++ b/src/fs/Charset.hxx
@@ -24,7 +24,7 @@
 #include "Compiler.h"
 #include "Traits.hxx"
 
-#if (defined(HAVE_ICU) || defined(HAVE_ICONV)) && !defined(WIN32)
+#if (defined(HAVE_ICU) || defined(HAVE_ICONV)) && !defined(_WIN32)
 #define HAVE_FS_CHARSET
 #endif
 
diff --git a/src/fs/CheckFile.cxx b/src/fs/CheckFile.cxx
index da875f1..fa4ac0e 100644
--- a/src/fs/CheckFile.cxx
+++ b/src/fs/CheckFile.cxx
@@ -41,7 +41,7 @@ try {
 		return;
 	}
 
-#ifndef WIN32
+#ifndef _WIN32
 	try {
 		const auto x = AllocatedPath::Build(path_fs,
 						    PathTraitsFS::CURRENT_DIRECTORY);
diff --git a/src/fs/DirectoryReader.cxx b/src/fs/DirectoryReader.cxx
index 15e50da..acec650 100644
--- a/src/fs/DirectoryReader.cxx
+++ b/src/fs/DirectoryReader.cxx
@@ -21,7 +21,7 @@
 #include "DirectoryReader.hxx"
 #include "system/Error.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 
 DirectoryReader::DirectoryReader(Path dir)
 	:handle(FindFirstFile(MakeWildcardPath(dir.c_str()), &data))
diff --git a/src/fs/DirectoryReader.hxx b/src/fs/DirectoryReader.hxx
index 8795f6d..9c57fc4 100644
--- a/src/fs/DirectoryReader.hxx
+++ b/src/fs/DirectoryReader.hxx
@@ -23,7 +23,7 @@
 #include "check.h"
 #include "Path.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 
 #include <windows.h>
 #include <tchar.h>
diff --git a/src/fs/FileInfo.hxx b/src/fs/FileInfo.hxx
index f82da87..e21c873 100644
--- a/src/fs/FileInfo.hxx
+++ b/src/fs/FileInfo.hxx
@@ -26,13 +26,13 @@
 
 #include <stdint.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <fileapi.h>
 #else
 #include <sys/stat.h>
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 
 static inline constexpr uint64_t
 ConstructUint64(DWORD lo, DWORD hi)
@@ -54,7 +54,7 @@ class FileInfo {
 				bool follow_symlinks);
 	friend class FileReader;
 
-#ifdef WIN32
+#ifdef _WIN32
 	WIN32_FILE_ATTRIBUTE_DATA data;
 #else
 	struct stat st;
@@ -65,7 +65,7 @@ public:
 
 	FileInfo(Path path, bool follow_symlinks=true) {
 		if (!GetFileInfo(path, *this, follow_symlinks)) {
-#ifdef WIN32
+#ifdef _WIN32
 			throw FormatLastError("Failed to access %s",
 					      path.ToUTF8().c_str());
 #else
@@ -76,7 +76,7 @@ public:
 	}
 
 	bool IsRegular() const {
-#ifdef WIN32
+#ifdef _WIN32
 		return (data.dwFileAttributes &
 			(FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_DEVICE)) == 0;
 #else
@@ -85,7 +85,7 @@ public:
 	}
 
 	bool IsDirectory() const {
-#ifdef WIN32
+#ifdef _WIN32
 		return data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
 #else
 		return S_ISDIR(st.st_mode);
@@ -93,7 +93,7 @@ public:
 	}
 
 	uint64_t GetSize() const {
-#ifdef WIN32
+#ifdef _WIN32
 		return ConstructUint64(data.nFileSizeLow, data.nFileSizeHigh);
 #else
 		return st.st_size;
@@ -101,14 +101,14 @@ public:
 	}
 
 	time_t GetModificationTime() const {
-#ifdef WIN32
+#ifdef _WIN32
 		return FileTimeToTimeT(data.ftLastWriteTime);
 #else
 		return st.st_mtime;
 #endif
 	}
 
-#ifndef WIN32
+#ifndef _WIN32
 	uid_t GetUid() const {
 		return st.st_uid;
 	}
@@ -130,7 +130,7 @@ public:
 inline bool
 GetFileInfo(Path path, FileInfo &info, bool follow_symlinks=true)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	(void)follow_symlinks;
 	return GetFileAttributesEx(path.c_str(), GetFileExInfoStandard,
 				   &info.data);
diff --git a/src/fs/FileSystem.cxx b/src/fs/FileSystem.cxx
index 874ac9a..cadfde1 100644
--- a/src/fs/FileSystem.cxx
+++ b/src/fs/FileSystem.cxx
@@ -29,7 +29,7 @@
 void
 RenameFile(Path oldpath, Path newpath)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	if (!MoveFileEx(oldpath.c_str(), newpath.c_str(),
 			MOVEFILE_REPLACE_EXISTING))
 		throw MakeLastError("Failed to rename file");
@@ -42,7 +42,7 @@ RenameFile(Path oldpath, Path newpath)
 AllocatedPath
 ReadLink(Path path)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	(void)path;
 	errno = EINVAL;
 	return AllocatedPath::Null();
@@ -63,7 +63,7 @@ ReadLink(Path path)
 void
 TruncateFile(Path path)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	HANDLE h = CreateFile(path.c_str(), GENERIC_WRITE, 0, nullptr,
 			      TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL,
 			      nullptr);
@@ -83,7 +83,7 @@ TruncateFile(Path path)
 void
 RemoveFile(Path path)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	if (!DeleteFile(path.c_str()))
 		throw FormatLastError("Failed to delete %s", path.c_str());
 #else
diff --git a/src/fs/FileSystem.hxx b/src/fs/FileSystem.hxx
index 2c5a2cd..1e5fe12 100644
--- a/src/fs/FileSystem.hxx
+++ b/src/fs/FileSystem.hxx
@@ -26,7 +26,7 @@
 
 #include "Path.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <fileapi.h>
 #endif
 
@@ -43,7 +43,7 @@ class AllocatedPath;
 static inline FILE *
 FOpen(Path file, PathTraitsFS::const_pointer_type mode)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return _tfopen(file.c_str(), mode);
 #else
 	return fopen(file.c_str(), mode);
@@ -56,7 +56,7 @@ FOpen(Path file, PathTraitsFS::const_pointer_type mode)
 static inline int
 OpenFile(Path file, int flags, int mode)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return _topen(file.c_str(), flags, mode);
 #else
 	return open_cloexec(file.c_str(), flags, mode);
@@ -71,7 +71,7 @@ OpenFile(Path file, int flags, int mode)
 void
 RenameFile(Path oldpath, Path newpath);
 
-#ifndef WIN32
+#ifndef _WIN32
 
 /**
  * Wrapper for stat() that uses #Path names.
@@ -107,7 +107,7 @@ RemoveFile(Path path);
 AllocatedPath
 ReadLink(Path path);
 
-#ifndef WIN32
+#ifndef _WIN32
 
 static inline bool
 MakeFifo(Path path, mode_t mode)
@@ -132,7 +132,7 @@ CheckAccess(Path path, int mode)
 static inline bool
 FileExists(Path path, bool follow_symlinks = true)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	(void)follow_symlinks;
 
 	const auto a = GetFileAttributes(path.c_str());
@@ -150,7 +150,7 @@ FileExists(Path path, bool follow_symlinks = true)
 static inline bool
 DirectoryExists(Path path, bool follow_symlinks = true)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	(void)follow_symlinks;
 
 	const auto a = GetFileAttributes(path.c_str());
@@ -167,7 +167,7 @@ DirectoryExists(Path path, bool follow_symlinks = true)
 static inline bool
 PathExists(Path path)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return GetFileAttributes(path.c_str()) != INVALID_FILE_ATTRIBUTES;
 #else
 	return CheckAccess(path, F_OK);
diff --git a/src/fs/Glob.hxx b/src/fs/Glob.hxx
index 1f84020..b15972f 100644
--- a/src/fs/Glob.hxx
+++ b/src/fs/Glob.hxx
@@ -26,7 +26,7 @@
 #define HAVE_CLASS_GLOB
 #include <string>
 #include <fnmatch.h>
-#elif defined(WIN32)
+#elif defined(_WIN32)
 #define HAVE_CLASS_GLOB
 #include <string>
 #include <shlwapi.h>
@@ -40,12 +40,12 @@
  * (asterisk and question mark).
  */
 class Glob {
-#if defined(HAVE_FNMATCH) || defined(WIN32)
+#if defined(HAVE_FNMATCH) || defined(_WIN32)
 	std::string pattern;
 #endif
 
 public:
-#if defined(HAVE_FNMATCH) || defined(WIN32)
+#if defined(HAVE_FNMATCH) || defined(_WIN32)
 	explicit Glob(const char *_pattern)
 		:pattern(_pattern) {}
 
@@ -57,7 +57,7 @@ public:
 	bool Check(const char *name_fs) const noexcept {
 #ifdef HAVE_FNMATCH
 		return fnmatch(pattern.c_str(), name_fs, 0) == 0;
-#elif defined(WIN32)
+#elif defined(_WIN32)
 		return PathMatchSpecA(name_fs, pattern.c_str());
 #endif
 	}
diff --git a/src/fs/Limits.hxx b/src/fs/Limits.hxx
index c9ce51e..5a646c6 100644
--- a/src/fs/Limits.hxx
+++ b/src/fs/Limits.hxx
@@ -25,7 +25,7 @@
 #include <stddef.h>
 #include <limits.h>
 
-#if defined(WIN32)
+#if defined(_WIN32)
 static constexpr size_t MPD_PATH_MAX = 260;
 #elif defined(MAXPATHLEN)
 static constexpr size_t MPD_PATH_MAX = MAXPATHLEN;
diff --git a/src/fs/StandardDirectory.cxx b/src/fs/StandardDirectory.cxx
index 1ea92cf..3d9a1b1 100644
--- a/src/fs/StandardDirectory.cxx
+++ b/src/fs/StandardDirectory.cxx
@@ -20,7 +20,7 @@
 #include "config.h"
 
 // Use X Desktop guidelines where applicable
-#if !defined(__APPLE__) && !defined(WIN32) && !defined(ANDROID)
+#if !defined(__APPLE__) && !defined(_WIN32) && !defined(ANDROID)
 #define USE_XDG
 #endif
 
@@ -29,7 +29,7 @@
 
 #include <array>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 #include <shlobj.h>
 #else
@@ -53,7 +53,7 @@
 #include "Main.hxx"
 #endif
 
-#if !defined(WIN32) && !defined(ANDROID)
+#if !defined(_WIN32) && !defined(ANDROID)
 class PasswdEntry
 {
 #if defined(HAVE_GETPWNAM_R) || defined(HAVE_GETPWUID_R)
@@ -113,7 +113,7 @@ SafePathFromFS(PathTraitsFS::const_pointer_type dir)
 }
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 static AllocatedPath GetStandardDir(int folder_id)
 {
 	std::array<PathTraitsFS::value_type, MAX_PATH> dir;
@@ -226,7 +226,7 @@ try {
 AllocatedPath
 GetUserConfigDir() noexcept
 {
-#if defined(WIN32)
+#if defined(_WIN32)
 	return GetStandardDir(CSIDL_LOCAL_APPDATA);
 #elif defined(USE_XDG)
 	// Check for $XDG_CONFIG_HOME
@@ -251,7 +251,7 @@ GetUserConfigDir() noexcept
 AllocatedPath
 GetUserMusicDir() noexcept
 {
-#if defined(WIN32)
+#if defined(_WIN32)
 	return GetStandardDir(CSIDL_MYMUSIC);	
 #elif defined(USE_XDG)
 	return GetUserDir("XDG_MUSIC_DIR");
@@ -287,7 +287,7 @@ GetUserCacheDir() noexcept
 #endif
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 
 AllocatedPath
 GetSystemConfigDir() noexcept
diff --git a/src/fs/StandardDirectory.hxx b/src/fs/StandardDirectory.hxx
index 13d324c..2742c6f 100644
--- a/src/fs/StandardDirectory.hxx
+++ b/src/fs/StandardDirectory.hxx
@@ -42,7 +42,7 @@ gcc_pure
 AllocatedPath
 GetUserCacheDir() noexcept;
 
-#ifdef WIN32
+#ifdef _WIN32
 
 /**
  * Obtains system configuration directory.
diff --git a/src/fs/Traits.cxx b/src/fs/Traits.cxx
index ac0700b..42219c3 100644
--- a/src/fs/Traits.cxx
+++ b/src/fs/Traits.cxx
@@ -78,7 +78,7 @@ GetParentPathImpl(typename Traits::const_pointer_type p)
 		return typename Traits::string(Traits::CURRENT_DIRECTORY);
 	if (sep == p)
 		return typename Traits::string(p, p + 1);
-#ifdef WIN32
+#ifdef _WIN32
 	if (Traits::IsDrive(p) && sep == p + 2)
 		return typename Traits::string(p, p + 3);
 #endif
diff --git a/src/fs/Traits.hxx b/src/fs/Traits.hxx
index 67f74dc..e41ae10 100644
--- a/src/fs/Traits.hxx
+++ b/src/fs/Traits.hxx
@@ -25,7 +25,7 @@
 #include "util/StringPointer.hxx"
 #include "util/StringAPI.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include "util/CharUtil.hxx"
 #include <tchar.h>
 #endif
@@ -34,7 +34,7 @@
 
 #include <assert.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #define PATH_LITERAL(s) _T(s)
 #else
 #define PATH_LITERAL(s) (s)
@@ -44,7 +44,7 @@
  * This class describes the nature of a native filesystem path.
  */
 struct PathTraitsFS {
-#ifdef WIN32
+#ifdef _WIN32
 	typedef std::wstring string;
 #else
 	typedef std::string string;
@@ -55,7 +55,7 @@ struct PathTraitsFS {
 	typedef Pointer::pointer_type pointer_type;
 	typedef Pointer::const_pointer_type const_pointer_type;
 
-#ifdef WIN32
+#ifdef _WIN32
 	static constexpr value_type SEPARATOR = '\\';
 #else
 	static constexpr value_type SEPARATOR = '/';
@@ -65,7 +65,7 @@ struct PathTraitsFS {
 
 	static constexpr bool IsSeparator(value_type ch) noexcept {
 		return
-#ifdef WIN32
+#ifdef _WIN32
 			ch == '/' ||
 #endif
 			ch == SEPARATOR;
@@ -78,7 +78,7 @@ struct PathTraitsFS {
 		assert(p != nullptr);
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 		const_pointer_type pos = p + GetLength(p);
 		while (p != pos && !IsSeparator(*pos))
 			--pos;
@@ -88,7 +88,7 @@ struct PathTraitsFS {
 #endif
 	}
 
-#ifdef WIN32
+#ifdef _WIN32
 	gcc_pure gcc_nonnull_all
 	static constexpr bool IsDrive(const_pointer_type p) noexcept {
 		return IsAlphaASCII(p[0]) && p[1] == ':';
@@ -102,7 +102,7 @@ struct PathTraitsFS {
 		assert(p != nullptr);
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 		if (IsDrive(p) && IsSeparator(p[2]))
 			return true;
 #endif
@@ -188,7 +188,7 @@ struct PathTraitsUTF8 {
 		return strrchr(p, SEPARATOR);
 	}
 
-#ifdef WIN32
+#ifdef _WIN32
 	gcc_pure gcc_nonnull_all
 	static constexpr bool IsDrive(const_pointer_type p) noexcept {
 		return IsAlphaASCII(p[0]) && p[1] == ':';
@@ -202,7 +202,7 @@ struct PathTraitsUTF8 {
 		assert(p != nullptr);
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 		if (IsDrive(p) && IsSeparator(p[2]))
 			return true;
 #endif
diff --git a/src/fs/io/FileOutputStream.cxx b/src/fs/io/FileOutputStream.cxx
index b72bee6..ddf7208 100644
--- a/src/fs/io/FileOutputStream.cxx
+++ b/src/fs/io/FileOutputStream.cxx
@@ -43,7 +43,7 @@ FileOutputStream::FileOutputStream(Path _path, Mode _mode)
 	}
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 
 inline void
 FileOutputStream::OpenCreate(gcc_unused bool visible)
@@ -223,7 +223,7 @@ FileOutputStream::Commit()
 #endif
 
 	if (!Close()) {
-#ifdef WIN32
+#ifdef _WIN32
 		throw FormatLastError("Failed to commit %s",
 				      path.ToUTF8().c_str());
 #else
diff --git a/src/fs/io/FileOutputStream.hxx b/src/fs/io/FileOutputStream.hxx
index 0d19590..a87036a 100644
--- a/src/fs/io/FileOutputStream.hxx
+++ b/src/fs/io/FileOutputStream.hxx
@@ -25,14 +25,14 @@
 #include "fs/AllocatedPath.hxx"
 #include "Compiler.h"
 
-#ifndef WIN32
+#ifndef _WIN32
 #include "system/FileDescriptor.hxx"
 #endif
 
 #include <assert.h>
 #include <stdint.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 #endif
 
@@ -41,7 +41,7 @@ class Path;
 class FileOutputStream final : public OutputStream {
 	const AllocatedPath path;
 
-#ifdef WIN32
+#ifdef _WIN32
 	HANDLE handle = INVALID_HANDLE_VALUE;
 #else
 	FileDescriptor fd = FileDescriptor::Undefined();
@@ -116,7 +116,7 @@ private:
 	bool Close() {
 		assert(IsDefined());
 
-#ifdef WIN32
+#ifdef _WIN32
 		CloseHandle(handle);
 		handle = INVALID_HANDLE_VALUE;
 		return true;
@@ -125,7 +125,7 @@ private:
 #endif
 	}
 
-#ifdef WIN32
+#ifdef _WIN32
 	bool SeekEOF() {
 		return SetFilePointer(handle, 0, nullptr,
 				      FILE_END) != 0xffffffff;
@@ -133,7 +133,7 @@ private:
 #endif
 
 	bool IsDefined() const {
-#ifdef WIN32
+#ifdef _WIN32
 		return handle != INVALID_HANDLE_VALUE;
 #else
 		return fd.IsDefined();
diff --git a/src/fs/io/FileReader.cxx b/src/fs/io/FileReader.cxx
index 72ee8f4..42adab5 100644
--- a/src/fs/io/FileReader.cxx
+++ b/src/fs/io/FileReader.cxx
@@ -24,7 +24,7 @@
 
 #include <assert.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 
 FileReader::FileReader(Path _path)
 	:path(_path),
diff --git a/src/fs/io/FileReader.hxx b/src/fs/io/FileReader.hxx
index 7dc1222..d4d5456 100644
--- a/src/fs/io/FileReader.hxx
+++ b/src/fs/io/FileReader.hxx
@@ -25,11 +25,11 @@
 #include "fs/AllocatedPath.hxx"
 #include "Compiler.h"
 
-#ifndef WIN32
+#ifndef _WIN32
 #include "system/FileDescriptor.hxx"
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 #endif
 
@@ -39,7 +39,7 @@ class FileInfo;
 class FileReader final : public Reader {
 	AllocatedPath path;
 
-#ifdef WIN32
+#ifdef _WIN32
 	HANDLE handle;
 #else
 	FileDescriptor fd;
@@ -48,7 +48,7 @@ class FileReader final : public Reader {
 public:
 	explicit FileReader(Path _path);
 
-#ifdef WIN32
+#ifdef _WIN32
 	FileReader(FileReader &&other)
 		:path(std::move(other.path)),
 		 handle(other.handle) {
@@ -70,7 +70,7 @@ public:
 
 protected:
 	bool IsDefined() const {
-#ifdef WIN32
+#ifdef _WIN32
 		return handle != INVALID_HANDLE_VALUE;
 #else
 		return fd.IsDefined();
@@ -78,7 +78,7 @@ protected:
 	}
 
 public:
-#ifndef WIN32
+#ifndef _WIN32
 	FileDescriptor GetFD() const {
 		return fd;
 	}
@@ -90,7 +90,7 @@ public:
 
 	gcc_pure
 	uint64_t GetSize() const noexcept {
-#ifdef WIN32
+#ifdef _WIN32
 		LARGE_INTEGER size;
 		return GetFileSizeEx(handle, &size)
 			? size.QuadPart
@@ -102,7 +102,7 @@ public:
 
 	gcc_pure
 	uint64_t GetPosition() const noexcept {
-#ifdef WIN32
+#ifdef _WIN32
 		LARGE_INTEGER zero;
 		zero.QuadPart = 0;
 		LARGE_INTEGER position;
diff --git a/src/input/InputPlugin.hxx b/src/input/InputPlugin.hxx
index 75255b1..e13bdad 100644
--- a/src/input/InputPlugin.hxx
+++ b/src/input/InputPlugin.hxx
@@ -26,7 +26,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 /* damn you, windows.h! */
 #ifdef ERROR
diff --git a/src/input/plugins/CurlInputPlugin.cxx b/src/input/plugins/CurlInputPlugin.cxx
index ffffb34..5cc29a5 100644
--- a/src/input/plugins/CurlInputPlugin.cxx
+++ b/src/input/plugins/CurlInputPlugin.cxx
@@ -227,7 +227,7 @@ CurlInputStream::OnHeaders(unsigned status,
 
 		if (i != headers.end()) {
 			size_t icy_metaint = ParseUint64(i->second.c_str());
-#ifndef WIN32
+#ifndef _WIN32
 			/* Windows doesn't know "%z" */
 			FormatDebug(curl_domain, "icy-metaint=%zu", icy_metaint);
 #endif
@@ -414,7 +414,7 @@ CurlInputStream::SeekInternal(offset_type new_offset)
 
 	if (offset > 0) {
 		char range[32];
-#ifdef WIN32
+#ifdef _WIN32
 		// TODO: what can we use on Windows to format 64 bit?
 		sprintf(range, "%lu-", (long)offset);
 #else
diff --git a/src/lib/icu/CaseFold.cxx b/src/lib/icu/CaseFold.cxx
index ccdf998..d0f0868 100644
--- a/src/lib/icu/CaseFold.cxx
+++ b/src/lib/icu/CaseFold.cxx
@@ -36,7 +36,7 @@
 #include <ctype.h>
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 #include "Win32.hxx"
 #include <windows.h>
 #endif
@@ -73,7 +73,7 @@ try {
 	folded.SetSize(folded_length);
 	return UCharToUTF8({folded.begin(), folded.size()});
 
-#elif defined(WIN32)
+#elif defined(_WIN32)
 	const auto u = MultiByteToWideChar(CP_UTF8, src);
 
 	const int size = LCMapStringEx(LOCALE_NAME_INVARIANT,
diff --git a/src/lib/icu/Collate.cxx b/src/lib/icu/Collate.cxx
index f16cba5..7772785 100644
--- a/src/lib/icu/Collate.cxx
+++ b/src/lib/icu/Collate.cxx
@@ -32,7 +32,7 @@
 #include <ctype.h>
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 #include "Win32.hxx"
 #include "util/AllocatedString.hxx"
 #include <windows.h>
@@ -103,7 +103,7 @@ IcuCollate(const char *a, const char *b) noexcept
 	}
 #endif
 
-#elif defined(WIN32)
+#elif defined(_WIN32)
 	AllocatedString<wchar_t> wa = nullptr, wb = nullptr;
 
 	try {
diff --git a/src/lib/upnp/Action.hxx b/src/lib/upnp/Action.hxx
index a3aa069..70e45bd 100644
--- a/src/lib/upnp/Action.hxx
+++ b/src/lib/upnp/Action.hxx
@@ -22,7 +22,7 @@
 
 #include "Compiler.h"
 
-#include <upnp/upnptools.h>
+#include <upnptools.h>
 
 static inline constexpr unsigned
 CountNameValuePairs()
diff --git a/src/lib/upnp/Callback.hxx b/src/lib/upnp/Callback.hxx
index 2f559ab..f5cabdd 100644
--- a/src/lib/upnp/Callback.hxx
+++ b/src/lib/upnp/Callback.hxx
@@ -20,7 +20,7 @@
 #ifndef MPD_UPNP_CALLBACK_HXX
 #define MPD_UPNP_CALLBACK_HXX
 
-#include <upnp/upnp.h>
+#include <upnp.h>
 
 /**
  * A class that is supposed to be used for libupnp asynchronous
diff --git a/src/lib/upnp/ClientInit.cxx b/src/lib/upnp/ClientInit.cxx
index fed42a7..58f7b67 100644
--- a/src/lib/upnp/ClientInit.cxx
+++ b/src/lib/upnp/ClientInit.cxx
@@ -24,7 +24,7 @@
 #include "thread/Mutex.hxx"
 #include "util/RuntimeError.hxx"
 
-#include <upnp/upnptools.h>
+#include <upnptools.h>
 
 #include <assert.h>
 
diff --git a/src/lib/upnp/ClientInit.hxx b/src/lib/upnp/ClientInit.hxx
index 75f3a80..de463ec 100644
--- a/src/lib/upnp/ClientInit.hxx
+++ b/src/lib/upnp/ClientInit.hxx
@@ -22,7 +22,7 @@
 
 #include "check.h"
 
-#include <upnp/upnp.h>
+#include <upnp.h>
 
 void
 UpnpClientGlobalInit(UpnpClient_Handle &handle);
diff --git a/src/lib/upnp/Compat.hxx b/src/lib/upnp/Compat.hxx
index 2e2d2f1..b4b5bd0 100644
--- a/src/lib/upnp/Compat.hxx
+++ b/src/lib/upnp/Compat.hxx
@@ -20,15 +20,18 @@
 #ifndef MPD_UPNP_COMPAT_HXX
 #define MPD_UPNP_COMPAT_HXX
 
-#include <upnp/upnp.h>
+#include <upnp.h>
 
 #if UPNP_VERSION < 10800
-#include "Compiler.h"
-
 /* emulate the libupnp 1.8 API with older versions */
 
 using UpnpDiscovery = Upnp_Discovery;
 
+#endif
+
+#if UPNP_VERSION < 10624
+#include "Compiler.h"
+
 gcc_pure
 static inline int
 UpnpDiscovery_get_Expires(const UpnpDiscovery *disco) noexcept
diff --git a/src/lib/upnp/ContentDirectoryService.hxx b/src/lib/upnp/ContentDirectoryService.hxx
index 78d7dff..ccd0c6d 100644
--- a/src/lib/upnp/ContentDirectoryService.hxx
+++ b/src/lib/upnp/ContentDirectoryService.hxx
@@ -22,7 +22,7 @@
 
 #include "Compiler.h"
 
-#include <upnp/upnp.h>
+#include <upnp.h>
 
 #include <string>
 #include <list>
diff --git a/src/lib/upnp/Discovery.cxx b/src/lib/upnp/Discovery.cxx
index 163f03b..ed273a0 100644
--- a/src/lib/upnp/Discovery.cxx
+++ b/src/lib/upnp/Discovery.cxx
@@ -24,7 +24,7 @@
 #include "util/ScopeExit.hxx"
 #include "util/RuntimeError.hxx"
 
-#include <upnp/upnptools.h>
+#include <upnptools.h>
 
 #include <stdlib.h>
 #include <string.h>
diff --git a/src/lib/upnp/Discovery.hxx b/src/lib/upnp/Discovery.hxx
index a768d14..14f5c79 100644
--- a/src/lib/upnp/Discovery.hxx
+++ b/src/lib/upnp/Discovery.hxx
@@ -27,7 +27,7 @@
 #include "thread/Mutex.hxx"
 #include "Compiler.h"
 
-#include <upnp/upnp.h>
+#include <upnp.h>
 
 #include <list>
 #include <vector>
diff --git a/src/lib/upnp/Init.cxx b/src/lib/upnp/Init.cxx
index 807a984..ac2167f 100644
--- a/src/lib/upnp/Init.cxx
+++ b/src/lib/upnp/Init.cxx
@@ -22,9 +22,9 @@
 #include "thread/Mutex.hxx"
 #include "util/RuntimeError.hxx"
 
-#include <upnp/upnp.h>
-#include <upnp/upnptools.h>
-#include <upnp/ixml.h>
+#include <upnp.h>
+#include <upnptools.h>
+#include <ixml.h>
 
 #include <assert.h>
 
diff --git a/src/lib/upnp/UniqueIxml.hxx b/src/lib/upnp/UniqueIxml.hxx
index 9817ca3..0e1e902 100644
--- a/src/lib/upnp/UniqueIxml.hxx
+++ b/src/lib/upnp/UniqueIxml.hxx
@@ -20,7 +20,7 @@
 #ifndef MPD_UPNP_UNIQUE_XML_HXX
 #define MPD_UPNP_UNIQUE_XML_HXX
 
-#include <upnp/ixml.h>
+#include <ixml.h>
 
 #include <memory>
 
diff --git a/src/lib/upnp/ixmlwrap.hxx b/src/lib/upnp/ixmlwrap.hxx
index 0d519a3..34ad399 100644
--- a/src/lib/upnp/ixmlwrap.hxx
+++ b/src/lib/upnp/ixmlwrap.hxx
@@ -17,7 +17,7 @@
 #ifndef _IXMLWRAP_H_INCLUDED_
 #define _IXMLWRAP_H_INCLUDED_
 
-#include <upnp/ixml.h>
+#include <ixml.h>
 
 #include <string>
 
diff --git a/src/mixer/plugins/AlsaMixerPlugin.cxx b/src/mixer/plugins/AlsaMixerPlugin.cxx
index 8012ca2..c5ef0dc 100644
--- a/src/mixer/plugins/AlsaMixerPlugin.cxx
+++ b/src/mixer/plugins/AlsaMixerPlugin.cxx
@@ -292,7 +292,9 @@ AlsaMixer::SetVolume(unsigned volume)
 {
 	assert(handle != nullptr);
 
-	int err = set_normalized_playback_volume(elem, 0.01*volume, 1);
+	double cur = get_normalized_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT);
+	int delta = volume - lrint(100.*cur);
+	int err = set_normalized_playback_volume(elem, cur + 0.01*delta, delta);
 	if (err < 0)
 		throw FormatRuntimeError("failed to set ALSA volume: %s",
 					 snd_strerror(err));
diff --git a/src/net/Resolver.cxx b/src/net/Resolver.cxx
index 036f95f..160447e 100644
--- a/src/net/Resolver.cxx
+++ b/src/net/Resolver.cxx
@@ -23,7 +23,7 @@
 
 #include <string>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <ws2tcpip.h>
 #else
 #include <sys/types.h>
diff --git a/src/net/SocketAddress.hxx b/src/net/SocketAddress.hxx
index 5db6d55..6b82602 100644
--- a/src/net/SocketAddress.hxx
+++ b/src/net/SocketAddress.hxx
@@ -34,7 +34,7 @@
 
 #include <cstddef>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <winsock2.h>
 #else
 #include <sys/socket.h>
@@ -45,7 +45,7 @@
  */
 class SocketAddress {
 public:
-#ifdef WIN32
+#ifdef _WIN32
 	typedef int size_type;
 #else
 	typedef socklen_t size_type;
diff --git a/src/net/SocketError.cxx b/src/net/SocketError.cxx
index 082dec1..9beef4f 100644
--- a/src/net/SocketError.cxx
+++ b/src/net/SocketError.cxx
@@ -23,7 +23,7 @@
 
 #include <string.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 
 SocketErrorMessage::SocketErrorMessage(socket_error_t code) noexcept
 {
diff --git a/src/net/SocketError.hxx b/src/net/SocketError.hxx
index 6e3a779..c4caac6 100644
--- a/src/net/SocketError.hxx
+++ b/src/net/SocketError.hxx
@@ -23,7 +23,7 @@
 #include "Compiler.h"
 #include "system/Error.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <winsock2.h>
 typedef DWORD socket_error_t;
 #else
@@ -35,7 +35,7 @@ gcc_pure
 static inline socket_error_t
 GetSocketError() noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return WSAGetLastError();
 #else
 	return errno;
@@ -46,7 +46,7 @@ gcc_const
 static inline bool
 IsSocketErrorAgain(socket_error_t code) noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return code == WSAEINPROGRESS;
 #else
 	return code == EAGAIN;
@@ -57,7 +57,7 @@ gcc_const
 static inline bool
 IsSocketErrorInterruped(socket_error_t code) noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return code == WSAEINTR;
 #else
 	return code == EINTR;
@@ -68,7 +68,7 @@ gcc_const
 static inline bool
 IsSocketErrorClosed(socket_error_t code) noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return code == WSAECONNRESET;
 #else
 	return code == EPIPE || code == ECONNRESET;
@@ -81,7 +81,7 @@ IsSocketErrorClosed(socket_error_t code) noexcept
  * and this class hosts the buffer.
  */
 class SocketErrorMessage {
-#ifdef WIN32
+#ifdef _WIN32
 	char msg[256];
 #else
 	const char *const msg;
@@ -99,7 +99,7 @@ gcc_const
 static inline std::system_error
 MakeSocketError(socket_error_t code, const char *msg) noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return MakeLastError(code, msg);
 #else
 	return MakeErrno(code, msg);
diff --git a/src/net/ToString.cxx b/src/net/ToString.cxx
index f185a5e..3492a26 100644
--- a/src/net/ToString.cxx
+++ b/src/net/ToString.cxx
@@ -34,7 +34,7 @@
 
 #include <algorithm>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <ws2tcpip.h>
 #else
 #include <netdb.h>
diff --git a/src/output/Source.cxx b/src/output/Source.cxx
index de11595..7326668 100644
--- a/src/output/Source.cxx
+++ b/src/output/Source.cxx
@@ -142,7 +142,8 @@ AudioOutputSource::GetChunkData(const MusicChunk &chunk,
 		replay_gain_filter_set_mode(*replay_gain_filter,
 					    replay_gain_mode);
 
-		if (chunk.replay_gain_serial != *replay_gain_serial_p) {
+		if (chunk.replay_gain_serial != *replay_gain_serial_p &&
+		    chunk.replay_gain_serial != MusicChunk::IGNORE_REPLAY_GAIN) {
 			replay_gain_filter_set_info(*replay_gain_filter,
 						    chunk.replay_gain_serial != 0
 						    ? &chunk.replay_gain_info
diff --git a/src/output/plugins/OSXOutputPlugin.cxx b/src/output/plugins/OSXOutputPlugin.cxx
index 3a0e6fb..f72e85b 100644
--- a/src/output/plugins/OSXOutputPlugin.cxx
+++ b/src/output/plugins/OSXOutputPlugin.cxx
@@ -36,9 +36,10 @@
 
 #include <memory>
 
+static constexpr unsigned MPD_OSX_BUFFER_TIME_MS = 100;
+
 struct OSXOutput {
 	AudioOutput base;
-
 	/* configuration settings */
 	OSType component_subtype;
 	/* only applicable with kAudioUnitSubType_HALOutput */
@@ -693,7 +694,9 @@ osx_output_open(AudioOutput *ao, AudioFormat &audio_format)
 					 errormsg);
 	}
 
-	od->ring_buffer = new boost::lockfree::spsc_queue<uint8_t>(buffer_frame_size);
+	size_t ring_buffer_size = std::max<size_t>(buffer_frame_size,
+						   MPD_OSX_BUFFER_TIME_MS * audio_format.GetFrameSize() * audio_format.sample_rate / 1000);
+	od->ring_buffer = new boost::lockfree::spsc_queue<uint8_t>(ring_buffer_size);
 
 	status = AudioOutputUnitStart(od->au);
 	if (status != 0) {
@@ -717,7 +720,7 @@ osx_output_delay(AudioOutput *ao) noexcept
 	OSXOutput *od = (OSXOutput *)ao;
 	return od->ring_buffer->write_available()
 		? std::chrono::steady_clock::duration::zero()
-		: std::chrono::milliseconds(25);
+		: std::chrono::milliseconds(MPD_OSX_BUFFER_TIME_MS / 4);
 }
 
 int
diff --git a/src/pcm/SampleFormat.hxx b/src/pcm/SampleFormat.hxx
index febb89f..9d956b7 100644
--- a/src/pcm/SampleFormat.hxx
+++ b/src/pcm/SampleFormat.hxx
@@ -24,7 +24,7 @@
 
 #include <stdint.h>
 
-#if defined(WIN32) && GCC_CHECK_VERSION(4,6)
+#if defined(_WIN32) && GCC_CHECK_VERSION(4,6)
 /* on WIN32, "FLOAT" is already defined, and this triggers -Wshadow */
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wshadow"
@@ -57,7 +57,7 @@ enum class SampleFormat : uint8_t {
 	DSD,
 };
 
-#if defined(WIN32) && GCC_CHECK_VERSION(4,6)
+#if defined(_WIN32) && GCC_CHECK_VERSION(4,6)
 #pragma GCC diagnostic pop
 #endif
 
diff --git a/src/player/Thread.cxx b/src/player/Thread.cxx
index c06bd41..913e541 100644
--- a/src/player/Thread.cxx
+++ b/src/player/Thread.cxx
@@ -558,8 +558,10 @@ Player::SendSilence()
 	   partial frames */
 	unsigned num_frames = sizeof(chunk->data) / frame_size;
 
+	chunk->bit_rate = 0;
 	chunk->time = SignedSongTime::Negative(); /* undefined time stamp */
 	chunk->length = num_frames * frame_size;
+	chunk->replay_gain_serial = MusicChunk::IGNORE_REPLAY_GAIN;
 	PcmSilence({chunk->data, chunk->length}, play_audio_format.format);
 
 	try {
diff --git a/src/queue/PlaylistControl.cxx b/src/queue/PlaylistControl.cxx
index 4b17386..018ddcb 100644
--- a/src/queue/PlaylistControl.cxx
+++ b/src/queue/PlaylistControl.cxx
@@ -75,8 +75,7 @@ playlist::MoveOrderToCurrent(unsigned old_order)
 	} else {
 		/* not playing anything: move the specified song to
 		   the front */
-		queue.SwapOrders(old_order, 0);
-		return 0;
+		return queue.MoveOrderBefore(old_order, 0);
 	}
 }
 
diff --git a/src/queue/PlaylistEdit.cxx b/src/queue/PlaylistEdit.cxx
index 6767568..8d7429e 100644
--- a/src/queue/PlaylistEdit.cxx
+++ b/src/queue/PlaylistEdit.cxx
@@ -112,7 +112,7 @@ playlist::AppendSong(PlayerControl &pc, DetachedSong &&song)
 		else
 			start = current + 1;
 		if (start < queue.GetLength())
-			queue.ShuffleOrderLast(start, queue.GetLength());
+			queue.ShuffleOrderLastWithPriority(start, queue.GetLength());
 	}
 
 	UpdateQueuedSong(pc, queued_song);
diff --git a/src/queue/Queue.cxx b/src/queue/Queue.cxx
index 7207780..0997e91 100644
--- a/src/queue/Queue.cxx
+++ b/src/queue/Queue.cxx
@@ -364,8 +364,20 @@ Queue::ShuffleOrderFirst(unsigned start, unsigned end)
 }
 
 void
-Queue::ShuffleOrderLast(unsigned start, unsigned end)
+Queue::ShuffleOrderLastWithPriority(unsigned start, unsigned end)
 {
+	assert(end <= length);
+	assert(start < end);
+
+	/* skip all items at the start which have a higher priority,
+	   because the last item shall only be shuffled within its
+	   priority group */
+	const auto last_priority = items[OrderToPosition(end - 1)].priority;
+	while (items[OrderToPosition(start)].priority != last_priority) {
+		++start;
+		assert(start < end);
+	}
+
 	rand.AutoCreate();
 
 	std::uniform_int_distribution<unsigned> distribution(start, end - 1);
diff --git a/src/queue/Queue.hxx b/src/queue/Queue.hxx
index 06e8004..fb1d9c8 100644
--- a/src/queue/Queue.hxx
+++ b/src/queue/Queue.hxx
@@ -356,11 +356,12 @@ struct Queue {
 	void ShuffleOrderFirst(unsigned start, unsigned end);
 
 	/**
-	 * Shuffles the virtual order of the last song in the specified
-	 * (order) range.  This is used in random mode after a song has been
-	 * appended by queue_append().
+	 * Shuffles the virtual order of the last song in the
+	 * specified (order) range; only songs which match this song's
+	 * priority are considered.  This is used in random mode after
+	 * a song has been appended by Append().
 	 */
-	void ShuffleOrderLast(unsigned start, unsigned end);
+	void ShuffleOrderLastWithPriority(unsigned start, unsigned end);
 
 	/**
 	 * Shuffles a (position) range in the queue.  The songs are physically
diff --git a/src/storage/StorageState.cxx b/src/storage/StorageState.cxx
new file mode 100644
index 0000000..beeb4ee
--- /dev/null
+++ b/src/storage/StorageState.cxx
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2003-2017 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.
+ */
+
+/*
+ * Save and load mounts of the compound storage to/from the state file.
+ *
+ */
+
+#include "config.h"
+#include "StorageState.hxx"
+#include "fs/io/TextFile.hxx"
+#include "fs/io/BufferedOutputStream.hxx"
+#include "storage/Registry.hxx"
+#include "storage/CompositeStorage.hxx"
+#include "db/plugins/simple/SimpleDatabasePlugin.hxx"
+#include "util/StringCompare.hxx"
+#include "util/Domain.hxx"
+#include "Instance.hxx"
+#include "IOThread.hxx"
+#include "Log.hxx"
+
+#include <list>
+#include <boost/crc.hpp>
+
+#define MOUNT_STATE_BEGIN        "mount_begin"
+#define MOUNT_STATE_END          "mount_end"
+#define MOUNT_STATE_STORAGE_URI  "uri: "
+#define MOUNT_STATE_MOUNTED_URL  "mounted_url: "
+
+static constexpr Domain storage_domain("storage");
+
+void
+storage_state_save(BufferedOutputStream &os, const Instance &instance)
+{
+	const auto visitor = [&os](const char *mount_uri, const Storage &storage) {
+		std::string uri = storage.MapUTF8("");
+		if (uri.empty() || StringIsEmpty(mount_uri))
+			return;
+
+		os.Format(
+			MOUNT_STATE_BEGIN "\n"
+			MOUNT_STATE_STORAGE_URI "%s\n"
+			MOUNT_STATE_MOUNTED_URL "%s\n"
+			MOUNT_STATE_END "\n", mount_uri, uri.c_str());
+	};
+
+	((CompositeStorage*)instance.storage)->VisitMounts(visitor);
+}
+
+bool
+storage_state_restore(const char *line, TextFile &file, Instance &instance)
+{
+	if (!StringStartsWith(line, MOUNT_STATE_BEGIN))
+		return false;
+
+	std::string url;
+	std::string uri;
+	const char* value;
+
+	while ((line = file.ReadLine()) != nullptr) {
+		if (StringStartsWith(line, MOUNT_STATE_END))
+			break;
+
+		if ((value = StringAfterPrefix(line, MOUNT_STATE_MOUNTED_URL)))
+			url = value;
+		else if ((value = StringAfterPrefix(line, MOUNT_STATE_STORAGE_URI)))
+			uri = value;
+		else
+			FormatError(storage_domain, "Unrecognized line in mountpoint state: %s", line);
+	}
+
+	if (url.empty() || uri.empty()) {
+		LogError(storage_domain, "Missing value in mountpoint state.");	
+		return true;
+	}
+
+	FormatDebug(storage_domain, "Restoring mount %s => %s", uri.c_str(), url.c_str());
+
+	auto &event_loop = io_thread_get();
+	Storage *storage = CreateStorageURI(event_loop, url.c_str());
+	if (storage == nullptr) {
+		FormatError(storage_domain, "Unrecognized storage URI: %s", url.c_str());
+		return true;
+	}
+
+#ifdef ENABLE_DATABASE
+	Database *db = instance.database;
+	if (db != nullptr && db->IsPlugin(simple_db_plugin)) {
+		try {
+			((SimpleDatabase *)db)->Mount(uri.c_str(), url.c_str());
+		} catch (...) {
+			throw;
+		}
+	}
+#endif
+
+	((CompositeStorage*)instance.storage)->Mount(uri.c_str(), storage);
+
+	return true;
+}
+
+unsigned
+storage_state_get_hash(const Instance &instance)
+{
+	std::list<std::string> mounts;
+
+	const auto visitor = [&mounts](const char *mount_uri, const Storage &storage) {
+		mounts.push_back(std::string(mount_uri) + ":" + storage.MapUTF8(""));
+	};
+
+	((CompositeStorage*)instance.storage)->VisitMounts(visitor);
+
+	mounts.sort();
+
+	boost::crc_32_type result;
+
+	for (auto mount: mounts) {
+		result.process_bytes(mount.c_str(), mount.length());
+	}
+
+	return result.checksum();
+}
diff --git a/src/system/Clock.hxx b/src/storage/StorageState.hxx
similarity index 58%
copy from src/system/Clock.hxx
copy to src/storage/StorageState.hxx
index 92fbb6a..659cc98 100644
--- a/src/system/Clock.hxx
+++ b/src/storage/StorageState.hxx
@@ -17,20 +17,30 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef MPD_CLOCK_H
-#define MPD_CLOCK_H
+/*
+ * Saving and loading the playlist to/from the state file.
+ *
+ */
+
+#ifndef MPD_STORAGE_STATE_HXX
+#define MPD_STORAGE_STATE_HXX
 
-#include "Compiler.h"
+struct Instance;
+class BufferedOutputStream;
+class TextFile;
 
-#ifdef WIN32
+void
+storage_state_save(BufferedOutputStream &os, const Instance &instance);
+
+bool
+storage_state_restore(const char *line, TextFile &file, Instance &instance);
 
 /**
- * Returns the uptime of the current process in seconds.
+ * Generates a hash number for the current state of the composite storage.
+ * This is used by timer_save_state_file() to determine whether the state
+ * has changed and the state file should be saved.
  */
-gcc_pure
 unsigned
-GetProcessUptimeS();
-
-#endif
+storage_state_get_hash(const Instance &instance);
 
 #endif
diff --git a/src/storage/plugins/LocalStorage.cxx b/src/storage/plugins/LocalStorage.cxx
index 816286b..3f4816f 100644
--- a/src/storage/plugins/LocalStorage.cxx
+++ b/src/storage/plugins/LocalStorage.cxx
@@ -86,7 +86,7 @@ Stat(Path path, bool follow)
 
 	info.size = src.GetSize();
 	info.mtime = src.GetModificationTime();
-#ifdef WIN32
+#ifdef _WIN32
 	info.device = info.inode = 0;
 #else
 	info.device = src.GetDevice();
diff --git a/src/system/Clock.cxx b/src/system/Clock.cxx
index 7e15412..dc29bdc 100644
--- a/src/system/Clock.cxx
+++ b/src/system/Clock.cxx
@@ -19,7 +19,7 @@
 
 #include "Clock.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 
 gcc_const
diff --git a/src/system/Clock.hxx b/src/system/Clock.hxx
index 92fbb6a..222ac48 100644
--- a/src/system/Clock.hxx
+++ b/src/system/Clock.hxx
@@ -22,7 +22,7 @@
 
 #include "Compiler.h"
 
-#ifdef WIN32
+#ifdef _WIN32
 
 /**
  * Returns the uptime of the current process in seconds.
diff --git a/src/system/EPollFD.cxx b/src/system/EPollFD.cxx
index 0a9e2eb..39ddbca 100644
--- a/src/system/EPollFD.cxx
+++ b/src/system/EPollFD.cxx
@@ -22,7 +22,7 @@
 #include "EPollFD.hxx"
 #include "FatalError.hxx"
 
-#ifdef __BIONIC__
+#if defined(__BIONIC__) && __ANDROID_API__ < 21
 
 #include <sys/syscall.h>
 #include <fcntl.h>
diff --git a/src/system/Error.hxx b/src/system/Error.hxx
index 4d89e12..8420100 100644
--- a/src/system/Error.hxx
+++ b/src/system/Error.hxx
@@ -47,7 +47,7 @@ FormatSystemError(std::error_code code, const char *fmt, Args&&... args)
 	return std::system_error(code, buffer);
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 
 #include <windows.h>
 
@@ -90,7 +90,7 @@ FormatLastError(const char *fmt, Args&&... args)
 			       std::forward<Args>(args)...);
 }
 
-#endif /* WIN32 */
+#endif /* _WIN32 */
 
 #include <errno.h>
 #include <string.h>
@@ -106,7 +106,7 @@ FormatLastError(const char *fmt, Args&&... args)
 static inline const std::error_category &
 ErrnoCategory()
 {
-#ifdef WIN32
+#ifdef _WIN32
 	/* on Windows, the generic_category() is used for errno
 	   values */
 	return std::generic_category();
@@ -151,7 +151,7 @@ gcc_pure
 static inline bool
 IsFileNotFound(const std::system_error &e) noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return e.code().category() == std::system_category() &&
 		e.code().value() == ERROR_FILE_NOT_FOUND;
 #else
@@ -164,7 +164,7 @@ gcc_pure
 static inline bool
 IsPathNotFound(const std::system_error &e) noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return e.code().category() == std::system_category() &&
 		e.code().value() == ERROR_PATH_NOT_FOUND;
 #else
@@ -177,7 +177,7 @@ gcc_pure
 static inline bool
 IsAccessDenied(const std::system_error &e) noexcept
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return e.code().category() == std::system_category() &&
 		e.code().value() == ERROR_ACCESS_DENIED;
 #else
diff --git a/src/system/EventPipe.cxx b/src/system/EventPipe.cxx
index 600f762..d977095 100644
--- a/src/system/EventPipe.cxx
+++ b/src/system/EventPipe.cxx
@@ -26,19 +26,19 @@
 #include <assert.h>
 #include <unistd.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <ws2tcpip.h>
 #include <winsock2.h>
 #include <cstring> /* for memset() */
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 static bool PoorSocketPair(int fd[2]);
 #endif
 
 EventPipe::EventPipe()
 {
-#ifdef WIN32
+#ifdef _WIN32
 	bool success = PoorSocketPair(fds);
 #else
 	bool success = pipe_cloexec_nonblock(fds) >= 0;
@@ -49,7 +49,7 @@ EventPipe::EventPipe()
 
 EventPipe::~EventPipe()
 {
-#ifdef WIN32
+#ifdef _WIN32
 	closesocket(fds[0]);
 	closesocket(fds[1]);
 #else
@@ -65,7 +65,7 @@ EventPipe::Read()
 	assert(fds[1] >= 0);
 
 	char buffer[256];
-#ifdef WIN32
+#ifdef _WIN32
 	return recv(fds[0], buffer, sizeof(buffer), 0) > 0;
 #else
 	return read(fds[0], buffer, sizeof(buffer)) > 0;
@@ -78,14 +78,14 @@ EventPipe::Write()
 	assert(fds[0] >= 0);
 	assert(fds[1] >= 0);
 
-#ifdef WIN32
+#ifdef _WIN32
 	send(fds[1], "", 1, 0);
 #else
 	gcc_unused ssize_t nbytes = write(fds[1], "", 1);
 #endif
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 
 static void SafeCloseSocket(SOCKET s)
 {
diff --git a/src/system/FatalError.cxx b/src/system/FatalError.cxx
index 02ff209..9648bbb 100644
--- a/src/system/FatalError.cxx
+++ b/src/system/FatalError.cxx
@@ -28,7 +28,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 #else
 #include <errno.h>
@@ -61,7 +61,7 @@ FormatFatalError(const char *fmt, ...)
 	Abort();
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 
 void
 FatalSystemError(const char *msg, DWORD code)
@@ -79,7 +79,7 @@ FatalSystemError(const char *msg, DWORD code)
 void
 FatalSystemError(const char *msg)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	FatalSystemError(msg, GetLastError());
 #else
 	const char *system_error = strerror(errno);
diff --git a/src/system/FatalError.hxx b/src/system/FatalError.hxx
index dfef2c1..c692a2c 100644
--- a/src/system/FatalError.hxx
+++ b/src/system/FatalError.hxx
@@ -23,7 +23,7 @@
 #include "check.h"
 #include "Compiler.h"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windef.h>
 #endif
 
@@ -47,7 +47,7 @@ gcc_noreturn
 void
 FatalSystemError(const char *msg);
 
-#ifdef WIN32
+#ifdef _WIN32
 
 gcc_noreturn
 void
diff --git a/src/system/FileDescriptor.cxx b/src/system/FileDescriptor.cxx
index e570090..87b6761 100644
--- a/src/system/FileDescriptor.cxx
+++ b/src/system/FileDescriptor.cxx
@@ -33,7 +33,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 
-#ifndef WIN32
+#ifndef _WIN32
 #include <poll.h>
 #endif
 
@@ -70,7 +70,7 @@ FileDescriptor::OpenReadOnly(const char *pathname) noexcept
 	return Open(pathname, O_RDONLY);
 }
 
-#ifndef WIN32
+#ifndef _WIN32
 
 bool
 FileDescriptor::OpenNonBlocking(const char *pathname) noexcept
@@ -184,7 +184,7 @@ FileDescriptor::GetSize() const noexcept
 		: -1;
 }
 
-#ifndef WIN32
+#ifndef _WIN32
 
 int
 FileDescriptor::Poll(short events, int timeout) const noexcept
diff --git a/src/system/FileDescriptor.hxx b/src/system/FileDescriptor.hxx
index 163418c..10e2177 100644
--- a/src/system/FileDescriptor.hxx
+++ b/src/system/FileDescriptor.hxx
@@ -93,7 +93,7 @@ public:
 	bool Open(const char *pathname, int flags, mode_t mode=0666) noexcept;
 	bool OpenReadOnly(const char *pathname) noexcept;
 
-#ifndef WIN32
+#ifndef _WIN32
 	bool OpenNonBlocking(const char *pathname) noexcept;
 
 	static bool CreatePipe(FileDescriptor &r, FileDescriptor &w) noexcept;
@@ -169,7 +169,7 @@ public:
 		return ::write(fd, buffer, length);
 	}
 
-#ifndef WIN32
+#ifndef _WIN32
 	int Poll(short events, int timeout) const noexcept;
 
 	int WaitReadable(int timeout) const noexcept;
diff --git a/src/system/fd_util.c b/src/system/fd_util.c
index ed18991..8f07e72 100644
--- a/src/system/fd_util.c
+++ b/src/system/fd_util.c
@@ -34,7 +34,7 @@
 #include <fcntl.h>
 #include <errno.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <ws2tcpip.h>
 #include <winsock2.h>
 #else
@@ -45,7 +45,7 @@
 #include <sys/eventfd.h>
 #endif
 
-#ifndef WIN32
+#ifndef _WIN32
 
 static int
 fd_mask_flags(int fd, int and_mask, int xor_mask)
@@ -63,12 +63,12 @@ fd_mask_flags(int fd, int and_mask, int xor_mask)
 	return fcntl(fd, F_SETFD, new_flags);
 }
 
-#endif /* !WIN32 */
+#endif /* !_WIN32 */
 
 int
 fd_set_cloexec(int fd, bool enable)
 {
-#ifndef WIN32
+#ifndef _WIN32
 	return fd_mask_flags(fd, ~FD_CLOEXEC, enable ? FD_CLOEXEC : 0);
 #else
 	(void)fd;
@@ -85,7 +85,7 @@ fd_set_cloexec(int fd, bool enable)
 static int
 fd_set_nonblock(int fd)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	u_long val = 1;
 	return ioctlsocket(fd, FIONBIO, &val);
 #else
@@ -124,7 +124,7 @@ open_cloexec(const char *path_fs, int flags, int mode)
 int
 pipe_cloexec_nonblock(int fd[2])
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return _pipe(fd, 512, _O_BINARY);
 #else
 	int ret;
@@ -199,7 +199,7 @@ accept_cloexec_nonblock(int fd, struct sockaddr *address,
 int
 close_socket(int fd)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return closesocket(fd);
 #else
 	return close(fd);
diff --git a/src/system/fd_util.h b/src/system/fd_util.h
index 0b26ba7..c03c0f3 100644
--- a/src/system/fd_util.h
+++ b/src/system/fd_util.h
@@ -41,7 +41,7 @@
 #include <stdbool.h>
 #include <stddef.h>
 
-#ifndef WIN32
+#ifndef _WIN32
 #include <sys/types.h>
 #endif
 
diff --git a/src/tag/Format.cxx b/src/tag/Format.cxx
index d70a9c0..1b59aff 100644
--- a/src/tag/Format.cxx
+++ b/src/tag/Format.cxx
@@ -86,7 +86,7 @@ TagGetter(const void *object, const char *name) noexcept
 
 	if (strcmp(name, "iso8601") == 0) {
 		time_t t = time(nullptr);
-#ifdef WIN32
+#ifdef _WIN32
 		const struct tm *tm2 = gmtime(&t);
 #else
 		struct tm tm;
@@ -96,7 +96,7 @@ TagGetter(const void *object, const char *name) noexcept
 			return "";
 
 		strftime(ctx.buffer, sizeof(ctx.buffer),
-#ifdef WIN32
+#ifdef _WIN32
 			 /* kludge: use underscore instead of colon on
 			    Windows because colons are not allowed in
 			    file names, and this library is mostly
diff --git a/src/thread/Cond.hxx b/src/thread/Cond.hxx
index 3ca640f..7123635 100644
--- a/src/thread/Cond.hxx
+++ b/src/thread/Cond.hxx
@@ -30,7 +30,7 @@
 #ifndef THREAD_COND_HXX
 #define THREAD_COND_HXX
 
-#ifdef WIN32
+#ifdef _WIN32
 
 #include "WindowsCond.hxx"
 class Cond : public WindowsCond {};
diff --git a/src/thread/Id.hxx b/src/thread/Id.hxx
index 4b0b910..b0bdcb4 100644
--- a/src/thread/Id.hxx
+++ b/src/thread/Id.hxx
@@ -22,7 +22,7 @@
 
 #include "Compiler.h"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 #else
 #include <pthread.h>
@@ -34,7 +34,7 @@
  * debugging code.
  */
 class ThreadId {
-#ifdef WIN32
+#ifdef _WIN32
 	DWORD id;
 #else
 	pthread_t id;
@@ -46,7 +46,7 @@ public:
 	 */
 	ThreadId() = default;
 
-#ifdef WIN32
+#ifdef _WIN32
 	constexpr ThreadId(DWORD _id):id(_id) {}
 #else
 	constexpr ThreadId(pthread_t _id):id(_id) {}
@@ -54,7 +54,7 @@ public:
 
 	gcc_const
 	static ThreadId Null() noexcept {
-#ifdef WIN32
+#ifdef _WIN32
 		return 0;
 #else
 		static ThreadId null;
@@ -72,7 +72,7 @@ public:
 	 */
 	gcc_pure
 	static const ThreadId GetCurrent() noexcept {
-#ifdef WIN32
+#ifdef _WIN32
 		return ::GetCurrentThreadId();
 #else
 		return pthread_self();
@@ -81,7 +81,7 @@ public:
 
 	gcc_pure
 	bool operator==(const ThreadId &other) const noexcept {
-#ifdef WIN32
+#ifdef _WIN32
 		return id == other.id;
 #else
 		return pthread_equal(id, other.id);
diff --git a/src/thread/Mutex.hxx b/src/thread/Mutex.hxx
index f306438..8218cdf 100644
--- a/src/thread/Mutex.hxx
+++ b/src/thread/Mutex.hxx
@@ -32,7 +32,7 @@
 
 #include <mutex>
 
-#ifdef WIN32
+#ifdef _WIN32
 
 #include "CriticalSection.hxx"
 class Mutex : public CriticalSection {};
diff --git a/src/thread/Thread.cxx b/src/thread/Thread.cxx
index 5bec659..06c2f45 100644
--- a/src/thread/Thread.cxx
+++ b/src/thread/Thread.cxx
@@ -33,7 +33,7 @@ Thread::Start(void (*_f)(void *ctx), void *_ctx)
 	f = _f;
 	ctx = _ctx;
 
-#ifdef WIN32
+#ifdef _WIN32
 	handle = ::CreateThread(nullptr, 0, ThreadProc, this, 0, &id);
 	if (handle == nullptr)
 		throw MakeLastError("Failed to create thread");
@@ -66,7 +66,7 @@ Thread::Join()
 	assert(IsDefined());
 	assert(!IsInside());
 
-#ifdef WIN32
+#ifdef _WIN32
 	::WaitForSingleObject(handle, INFINITE);
 	::CloseHandle(handle);
 	handle = nullptr;
@@ -76,7 +76,7 @@ Thread::Join()
 #endif
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 
 DWORD WINAPI
 Thread::ThreadProc(LPVOID ctx)
diff --git a/src/thread/Thread.hxx b/src/thread/Thread.hxx
index 99ad4da..5d1bb6a 100644
--- a/src/thread/Thread.hxx
+++ b/src/thread/Thread.hxx
@@ -23,7 +23,7 @@
 #include "check.h"
 #include "Compiler.h"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 #else
 #include <pthread.h>
@@ -32,7 +32,7 @@
 #include <assert.h>
 
 class Thread {
-#ifdef WIN32
+#ifdef _WIN32
 	HANDLE handle = nullptr;
 	DWORD id;
 #else
@@ -66,7 +66,7 @@ public:
 #endif
 
 	bool IsDefined() const {
-#ifdef WIN32
+#ifdef _WIN32
 		return handle != nullptr;
 #else
 		return defined;
@@ -78,7 +78,7 @@ public:
 	 */
 	gcc_pure
 	bool IsInside() const noexcept {
-#ifdef WIN32
+#ifdef _WIN32
 		return GetCurrentThreadId() == id;
 #else
 #ifdef NDEBUG
@@ -93,7 +93,7 @@ public:
 	void Join();
 
 private:
-#ifdef WIN32
+#ifdef _WIN32
 	static DWORD WINAPI ThreadProc(LPVOID ctx);
 #else
 	static void *ThreadProc(void *ctx);
diff --git a/src/thread/Util.cxx b/src/thread/Util.cxx
index 16fb1be..6213d97 100644
--- a/src/thread/Util.cxx
+++ b/src/thread/Util.cxx
@@ -34,7 +34,7 @@
 #include <sched.h>
 #include <sys/syscall.h>
 #include <unistd.h>
-#elif defined(WIN32)
+#elif defined(_WIN32)
 #include <windows.h>
 #endif
 
@@ -71,7 +71,7 @@ SetThreadIdlePriority()
 
 	ioprio_set_idle();
 
-#elif defined(WIN32)
+#elif defined(_WIN32)
 	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_IDLE);
 #endif
 };
diff --git a/src/unix/Daemon.cxx b/src/unix/Daemon.cxx
index 14f3891..fd45393 100644
--- a/src/unix/Daemon.cxx
+++ b/src/unix/Daemon.cxx
@@ -23,7 +23,7 @@
 #include "fs/AllocatedPath.hxx"
 #include "fs/FileSystem.hxx"
 
-#ifndef WIN32
+#ifndef _WIN32
 #include "PidFile.hxx"
 #endif
 
@@ -31,7 +31,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 
-#ifndef WIN32
+#ifndef _WIN32
 #include <sys/wait.h>
 #include <signal.h>
 #include <pwd.h>
@@ -42,7 +42,7 @@
 #define WCOREDUMP(v) 0
 #endif
 
-#ifndef WIN32
+#ifndef _WIN32
 
 /** the Unix user name which MPD runs as */
 static char *user_name;
diff --git a/src/unix/Daemon.hxx b/src/unix/Daemon.hxx
index f6ea9f6..2b12b17 100644
--- a/src/unix/Daemon.hxx
+++ b/src/unix/Daemon.hxx
@@ -22,7 +22,7 @@
 
 class AllocatedPath;
 
-#ifndef WIN32
+#ifndef _WIN32
 void
 daemonize_init(const char *user, const char *group, AllocatedPath &&pidfile);
 #else
@@ -31,7 +31,7 @@ daemonize_init(const char *user, const char *group, AllocatedPath &&pidfile)
 { (void)user; (void)group; (void)pidfile; }
 #endif
 
-#ifndef WIN32
+#ifndef _WIN32
 void
 daemonize_finish();
 #else
@@ -44,7 +44,7 @@ daemonize_finish()
  * Kill the MPD which is currently running, pid determined from the
  * pid file.
  */
-#ifndef WIN32
+#ifndef _WIN32
 void
 daemonize_kill();
 #else
@@ -59,7 +59,7 @@ daemonize_kill()
 /**
  * Close stdin (fd 0) and re-open it as /dev/null.
  */
-#ifndef WIN32
+#ifndef _WIN32
 void
 daemonize_close_stdin();
 #else
@@ -70,7 +70,7 @@ daemonize_close_stdin() {}
 /**
  * Change to the configured Unix user.
  */
-#ifndef WIN32
+#ifndef _WIN32
 void
 daemonize_set_user();
 #else
@@ -79,7 +79,7 @@ daemonize_set_user()
 { /* nop */ }
 #endif
 
-#ifndef WIN32
+#ifndef _WIN32
 void
 daemonize_begin(bool detach);
 #else
@@ -88,7 +88,7 @@ daemonize_begin(bool detach)
 { (void)detach; }
 #endif
 
-#ifndef WIN32
+#ifndef _WIN32
 void
 daemonize_commit();
 #else
diff --git a/src/unix/SignalHandlers.cxx b/src/unix/SignalHandlers.cxx
index c6dc7ca..d41f065 100644
--- a/src/unix/SignalHandlers.cxx
+++ b/src/unix/SignalHandlers.cxx
@@ -21,7 +21,7 @@
 #include "SignalHandlers.hxx"
 #include "event/SignalMonitor.hxx"
 
-#ifndef WIN32
+#ifndef _WIN32
 
 #include "Log.hxx"
 #include "LogInit.hxx"
@@ -61,7 +61,7 @@ SignalHandlersInit(EventLoop &loop)
 {
 	SignalMonitorInit(loop);
 
-#ifndef WIN32
+#ifndef _WIN32
 	struct sigaction sa;
 
 	sa.sa_flags = 0;
diff --git a/src/util/FormatString.cxx b/src/util/FormatString.cxx
index b5ea4d0..b758997 100644
--- a/src/util/FormatString.cxx
+++ b/src/util/FormatString.cxx
@@ -23,14 +23,14 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <string.h>
 #endif
 
 AllocatedString<>
 FormatStringV(const char *fmt, va_list args)
 {
-#ifndef WIN32
+#ifndef _WIN32
 	va_list tmp;
 	va_copy(tmp, args);
 	const int length = vsnprintf(NULL, 0, fmt, tmp);
diff --git a/src/util/HugeAllocator.cxx b/src/util/HugeAllocator.cxx
index 5116a59..806a783 100644
--- a/src/util/HugeAllocator.cxx
+++ b/src/util/HugeAllocator.cxx
@@ -96,7 +96,7 @@ HugeDiscard(void *p, size_t size) noexcept
 #endif
 }
 
-#elif defined(WIN32)
+#elif defined(_WIN32)
 
 void *
 HugeAllocate(size_t size)
diff --git a/src/util/HugeAllocator.hxx b/src/util/HugeAllocator.hxx
index 8bae3e4..2b62a8c 100644
--- a/src/util/HugeAllocator.hxx
+++ b/src/util/HugeAllocator.hxx
@@ -65,7 +65,7 @@ HugeFree(void *p, size_t size) noexcept;
 void
 HugeDiscard(void *p, size_t size) noexcept;
 
-#elif defined(WIN32)
+#elif defined(_WIN32)
 #include <windows.h>
 
 gcc_malloc
diff --git a/src/util/StringAPI.hxx b/src/util/StringAPI.hxx
index 85456fb..7dad8c5 100644
--- a/src/util/StringAPI.hxx
+++ b/src/util/StringAPI.hxx
@@ -105,7 +105,7 @@ gcc_nonnull_all
 static inline char *
 UnsafeCopyStringP(char *dest, const char *src) noexcept
 {
-#if defined(WIN32) || defined(__BIONIC__)
+#if defined(_WIN32) || defined(__BIONIC__)
   /* emulate stpcpy() */
   UnsafeCopyString(dest, src);
   return dest + StringLength(dest);
diff --git a/src/util/TimeParser.cxx b/src/util/TimeParser.cxx
index 9ce915c..5576b5a 100644
--- a/src/util/TimeParser.cxx
+++ b/src/util/TimeParser.cxx
@@ -35,7 +35,7 @@
 #include <assert.h>
 #include <time.h>
 
-#if !defined(__GLIBC__) && !defined(WIN32)
+#if !defined(__GLIBC__) && !defined(_WIN32)
 
 /**
  * Determine the time zone offset in a portable way.
@@ -59,7 +59,7 @@ ParseTimePoint(const char *s, const char *format)
 	assert(s != nullptr);
 	assert(format != nullptr);
 
-#ifdef WIN32
+#ifdef _WIN32
 	/* TODO: emulate strptime()? */
 	(void)s;
 	(void)format;
@@ -80,5 +80,5 @@ ParseTimePoint(const char *s, const char *format)
 
 	return std::chrono::system_clock::from_time_t(t);
 
-#endif /* !WIN32 */
+#endif /* !_WIN32 */
 }
diff --git a/src/util/WStringAPI.hxx b/src/util/WStringAPI.hxx
index f69aaf6..a71802d 100644
--- a/src/util/WStringAPI.hxx
+++ b/src/util/WStringAPI.hxx
@@ -101,7 +101,7 @@ gcc_nonnull_all
 static inline wchar_t *
 UnsafeCopyStringP(wchar_t *dest, const wchar_t *src) noexcept
 {
-#if defined(WIN32) || defined(__BIONIC__) || defined(__OpenBSD__) || \
+#if defined(_WIN32) || defined(__BIONIC__) || defined(__OpenBSD__) || \
 	defined(__NetBSD__)
   /* emulate wcpcpy() */
   UnsafeCopyString(dest, src);
diff --git a/src/win32/Win32Main.cxx b/src/win32/Win32Main.cxx
index 700a321..e268463 100644
--- a/src/win32/Win32Main.cxx
+++ b/src/win32/Win32Main.cxx
@@ -20,7 +20,7 @@
 #include "config.h"
 #include "Main.hxx"
 
-#ifdef WIN32
+#ifdef _WIN32
 
 #include "Compiler.h"
 #include "Instance.hxx"
diff --git a/test/ShutdownHandler.cxx b/test/ShutdownHandler.cxx
index 6d69408..c0153cf 100644
--- a/test/ShutdownHandler.cxx
+++ b/test/ShutdownHandler.cxx
@@ -20,7 +20,7 @@
 #include "config.h"
 #include "ShutdownHandler.hxx"
 
-#ifndef WIN32
+#ifndef _WIN32
 #include "event/SignalMonitor.hxx"
 #include "event/Loop.hxx"
 
diff --git a/test/ShutdownHandler.hxx b/test/ShutdownHandler.hxx
index 0e1a18a..eb25563 100644
--- a/test/ShutdownHandler.hxx
+++ b/test/ShutdownHandler.hxx
@@ -28,7 +28,7 @@ public:
 	~ShutdownHandler();
 };
 
-#ifdef WIN32
+#ifdef _WIN32
 ShutdownHandler::ShutdownHandler(EventLoop &loop) {}
 ShutdownHandler::~ShutdownHandler() {}
 #endif
diff --git a/test/run_resolver.cxx b/test/run_resolver.cxx
index b35ed84..da8ac72 100644
--- a/test/run_resolver.cxx
+++ b/test/run_resolver.cxx
@@ -25,7 +25,7 @@
 
 #include <stdexcept>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <ws2tcpip.h>
 #include <winsock.h>
 #else
diff --git a/win32/build.py b/win32/build.py
new file mode 100755
index 0000000..d2b1aef
--- /dev/null
+++ b/win32/build.py
@@ -0,0 +1,126 @@
+#!/usr/bin/env python3
+
+import os, os.path
+import sys, subprocess
+
+configure_args = sys.argv[1:]
+
+x64 = True
+
+while len(configure_args) > 0:
+    arg = configure_args[0]
+    if arg == '--64':
+        x64 = True
+    elif arg == '--32':
+        x64 = False
+    else:
+        break
+    configure_args.pop(0)
+
+if x64:
+    host_arch = 'x86_64-w64-mingw32'
+else:
+    host_arch = 'i686-w64-mingw32'
+
+# the path to the MPD sources
+mpd_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]) or '.', '..'))
+sys.path[0] = os.path.join(mpd_path, 'python')
+
+# output directories
+from build.dirs import lib_path, tarball_path, src_path
+
+arch_path = os.path.join(lib_path, host_arch)
+build_path = os.path.join(arch_path, 'build')
+root_path = os.path.join(arch_path, 'root')
+
+class CrossGccToolchain:
+    def __init__(self, toolchain_path, arch,
+                 tarball_path, src_path, build_path, install_prefix):
+        self.arch = arch
+        self.tarball_path = tarball_path
+        self.src_path = src_path
+        self.build_path = build_path
+        self.install_prefix = install_prefix
+
+        toolchain_bin = os.path.join(toolchain_path, 'bin')
+        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.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')
+
+        common_flags = ''
+
+        if not x64:
+            # enable SSE support which is required for LAME
+            common_flags += ' -march=pentium3'
+
+        self.cflags = '-O2 -g ' + common_flags
+        self.cxxflags = '-O2 -g ' + common_flags
+        self.cppflags = '-isystem ' + os.path.join(install_prefix, 'include')
+        self.ldflags = '-L' + os.path.join(install_prefix, 'lib')
+        self.libs = ''
+
+        self.is_arm = arch.startswith('arm')
+        self.is_armv7 = self.is_arm and 'armv7' in self.cflags
+        self.is_windows = 'mingw32' in arch
+
+        self.env = dict(os.environ)
+
+        # redirect pkg-config to use our root directory instead of the
+        # default one on the build host
+        self.env['PKG_CONFIG_LIBDIR'] = os.path.join(install_prefix, 'lib/pkgconfig')
+
+# a list of third-party libraries to be used by MPD on Android
+from build.libs import *
+thirdparty_libs = [
+    libogg,
+    libvorbis,
+    opus,
+    flac,
+    zlib,
+    libid3tag,
+    liblame,
+    ffmpeg,
+    curl,
+    boost,
+]
+
+# build the third-party libraries
+toolchain = CrossGccToolchain('/usr', host_arch,
+                              tarball_path, src_path, build_path, root_path)
+
+for x in thirdparty_libs:
+    if not x.is_installed(toolchain):
+        x.build(toolchain)
+
+# configure and build MPD
+
+configure = [
+    os.path.join(mpd_path, 'configure'),
+    'CC=' + toolchain.cc,
+    'CXX=' + toolchain.cxx,
+    'CFLAGS=' + toolchain.cflags,
+    'CXXFLAGS=' + toolchain.cxxflags,
+    'CPPFLAGS=' + toolchain.cppflags,
+    'LDFLAGS=' + toolchain.ldflags + ' -static',
+    'LIBS=' + toolchain.libs,
+    'AR=' + toolchain.ar,
+    'RANLIB=' + toolchain.ranlib,
+    'STRIP=' + toolchain.strip,
+    '--host=' + toolchain.arch,
+    '--prefix=' + toolchain.install_prefix,
+
+    '--enable-silent-rules',
+
+    '--disable-icu',
+
+] + configure_args
+
+from build.cmdline import concatenate_cmdline_variables
+configure = concatenate_cmdline_variables(configure,
+    set(('CFLAGS', 'CXXFLAGS', 'CPPFLAGS', 'LDFLAGS', 'LIBS')))
+
+subprocess.check_call(configure, env=toolchain.env)
+subprocess.check_call(['/usr/bin/make', '--quiet', '-j12'], env=toolchain.env)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mpd/pkg-mpd.git



More information about the Pkg-mpd-commits mailing list