diff --git a/Frameworks/OpenMPT/Info.plist b/Frameworks/OpenMPT/Info.plist
new file mode 100644
index 000000000..17f7984b3
--- /dev/null
+++ b/Frameworks/OpenMPT/Info.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ NSHumanReadableCopyright
+ Copyright © 2021-2022 Christopher Snowhill. All rights reserved.
+ NSPrincipalClass
+
+
+
diff --git a/Frameworks/OpenMPT/OpenMPT/.clang-format b/Frameworks/OpenMPT/OpenMPT/.clang-format
new file mode 100644
index 000000000..054b59870
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/.clang-format
@@ -0,0 +1,152 @@
+# clang-format 13
+
+Language: Cpp
+Standard: c++20
+
+AccessModifierOffset: -4 #?
+AlignAfterOpenBracket: AlwaysBreak
+AlignArrayOfStructures: Left
+AlignConsecutiveAssignments: false
+AlignConsecutiveBitFields: false
+AlignConsecutiveDeclarations: false
+AlignConsecutiveMacros: true
+AlignEscapedNewlines: DontAlign
+AlignOperands: AlignAfterOperator
+AlignTrailingComments: true
+AllowAllArgumentsOnNextLine: true
+AllowAllConstructorInitializersOnNextLine: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: Always
+AllowShortCaseLabelsOnASingleLine: true
+AllowShortEnumsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: Inline
+AllowShortIfStatementsOnASingleLine: WithoutElse
+AllowShortLambdasOnASingleLine: Inline
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: true
+AlwaysBreakTemplateDeclarations: Yes
+BinPackArguments: true
+BinPackParameters: false
+BitFieldColonSpacing: Both
+BraceWrapping:
+ AfterCaseLabel: true
+ AfterClass: true
+ AfterControlStatement: Always
+ AfterEnum: true
+ AfterFunction: true
+ AfterNamespace: true
+ #AfterObjCDeclaration
+ AfterStruct: true
+ AfterUnion: true
+ AfterExternBlock: true
+ BeforeCatch: false
+ BeforeElse: false
+ BeforeLambdaBody: true
+ BeforeWhile: false
+ IndentBraces: false
+ SplitEmptyFunction: true
+ SplitEmptyRecord: true
+ SplitEmptyNamespace: true
+#BreakAfterJavaFieldAnnotations
+BreakBeforeBinaryOperators: NonAssignment
+BreakBeforeBraces: Custom
+BreakBeforeConceptDeclarations: true
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializers: BeforeComma
+BreakInheritanceList: BeforeComma
+BreakStringLiterals: false
+ColumnLimit: 0
+CommentPragmas: '' #?
+CompactNamespaces: false
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 4 #?
+ContinuationIndentWidth: 4 #?
+Cpp11BracedListStyle: true
+DeriveLineEnding: true
+DerivePointerAlignment: false
+EmptyLineAfterAccessModifier: Leave
+EmptyLineBeforeAccessModifier: Leave
+FixNamespaceComments: true
+ForEachMacros: []
+IfMacros: ['MPT_MAYBE_CONSTANT_IF']
+IncludeBlocks: Preserve
+IncludeCategories: [] #?
+IncludeIsMainRegex: '' #?
+IncludeIsMainSourceRegex: '' #?
+IndentAccessModifiers: false
+IndentCaseBlocks: true
+IndentCaseLabels: true
+IndentExternBlock: NoIndent
+IndentGotoLabels: false
+IndentPPDirectives: None
+#IndentRequiresClause: true
+#BeforeHash
+IndentWidth: 4
+IndentWrappedFunctionNames: true
+InsertTrailingCommas: None
+#JavaImportGroups
+#JavaScriptQuotes
+#JavaScriptWrapImports
+KeepEmptyLinesAtTheStartOfBlocks: true
+LambdaBodyIndentation: OuterScope
+MacroBlockBegin: '^MPT_TEST_GROUP_BEGIN|BEGIN_MESSAGE_MAP$' #?
+MacroBlockEnd: '^MPT_TEST_GROUP_END|END_MESSAGE_MAP$' #?
+MaxEmptyLinesToKeep: 5
+NamespaceIndentation: None
+NamespaceMacros: [] #?
+#ObjCBinPackProtocolList
+#ObjCBlockIndentWidth
+#ObjCBreakBeforeNestedBlockParam
+#ObjCSpaceAfterProperty
+#ObjCSpaceBeforeProtocolList
+#PenaltyBreakAssignment
+#PenaltyBreakBeforeFirstCallParameter
+#PenaltyBreakComment
+#PenaltyBreakFirstLessLess
+#PenaltyBreakString
+#PenaltyBreakTemplateDeclaration
+#PenaltyExcessCharacter
+#PenaltyIndentedWhitespace
+#PenaltyReturnTypeOnItsOwnLine
+PointerAlignment: Right
+PPIndentWidth: -1
+#RawStringFormats
+ReferenceAlignment: Pointer
+ReflowComments: false
+ShortNamespaceLines: 1
+SortIncludes: false
+#SortJavaStaticImport
+SortUsingDeclarations: true
+SpaceAfterCStyleCast: false
+SpaceAfterLogicalNot: false
+SpaceAfterTemplateKeyword: true
+SpaceAroundPointerQualifiers: Default
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeCaseColon: false
+SpaceBeforeCpp11BracedList: false
+SpaceBeforeCtorInitializerColon: true
+SpaceBeforeInheritanceColon: true
+SpaceBeforeParens: Never
+SpaceBeforeRangeBasedForLoopColon: true
+SpaceBeforeSquareBrackets: false
+SpaceInEmptyBlock: false
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 2
+SpacesInAngles: false
+SpacesInCStyleCastParentheses: false
+SpacesInConditionalStatement: false
+SpacesInContainerLiterals: false
+SpacesInLineCommentPrefix:
+ Minimum: 1
+ Maximum: -1
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+StatementAttributeLikeMacros: []
+StatementMacros: [ 'OPENMPT_NAMESPACE_BEGIN', 'OPENMPT_NAMESPACE_END', 'MPT_MSVC_WORKAROUND_LNK4221', 'MPT_WARNING', 'MPT_TEST_GROUP_INLINE_IDENTIFIER', 'MPT_TEST_GROUP_INLINE', 'MPT_TEST_GROUP_STATIC' ] #?
+TabWidth: 4
+TypenameMacros: [] #?
+UseCRLF: false
+UseTab: ForContinuationAndIndentation
+WhitespaceSensitiveMacros:
+ - MPT_PP_STRINGIFY
diff --git a/Frameworks/OpenMPT/OpenMPT/LICENSE b/Frameworks/OpenMPT/OpenMPT/LICENSE
new file mode 100644
index 000000000..7c06acaeb
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2004-2022, OpenMPT Project Developers and Contributors
+Copyright (c) 1997-2003, Olivier Lapicque
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the OpenMPT project nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Frameworks/OpenMPT/OpenMPT/Makefile b/Frameworks/OpenMPT/OpenMPT/Makefile
new file mode 100644
index 000000000..ade92a694
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/Makefile
@@ -0,0 +1,1901 @@
+#
+# libopenmpt and openmpt123 GNU Makefile
+#
+# Authors: Joern Heusipp
+# OpenMPT Devs
+#
+# The OpenMPT source code is released under the BSD license.
+# Read LICENSE for more details.
+#
+
+#
+# Supported parameters:
+#
+#
+# Build configuration (provide on each `make` invocation):
+#
+# CONFIG=[gcc|clang|mingw64-win32|mingw64-win64|emscripten|emscripten-old] (default: CONFIG=)
+#
+# Build configurations can override or change defaults of other build options.
+# See below and in `build/make/` for details.
+#
+#
+# Compiler options (environment variables):
+#
+# CC
+# CXX
+# LD
+# AR
+# CPPFLAGS
+# CXXFLAGS
+# CFLAGS
+# LDFLAGS
+# LDLIBS
+# ARFLAGS
+# PKG_CONFIG
+#
+# CXXSTDLIB_PCLIBSPRIVATE C++ standard library (or libraries) required for
+# static linking. This will be put in the pkg-config file
+# libopenmpt.pc Libs.private field and used for nothing else.
+#
+#
+#
+# Build flags (provide on each `make` invocation) (defaults are shown):
+#
+# DYNLINK=1 Dynamically link examples and openmpt123 against libopenmpt
+# SHARED_LIB=1 Build shared library
+# STATIC_LIB=1 Build static library
+# EXAMPLES=1 Build examples
+# OPENMPT123=1 Build openmpt123
+# IN_OPENMPT=0 Build in_openmpt (WinAMP 2.x plugin)
+# XMP_OPENMPT=0 Build xmp-openmpt (XMPlay plugin)
+# SHARED_SONAME=1 Set SONAME of shared library
+# DEBUG=0 Build debug binaries without optimization and with symbols
+# OPTIMIZE=1 Build optimized binaries
+# OPTIMIZE_SIZE=0 Build size-optimized binaries
+# OPTIMIZE_LTO=0 Build with link-time-optimizations
+# TEST=1 Include test suite in default target.
+# ONLY_TEST=0 Only build the test suite.
+# STRICT=0 Treat warnings as errors.
+# MODERN=0 Pass more modern compiler options.
+# STDCXX=c++17 C++ standard version (only for GCC and clang)
+# CHECKED=0 Enable run-time assertions.
+# CHECKED_ADDRESS=0 Enable address sanitizer
+# CHECKED_UNDEFINED=0 Enable undefined behaviour sanitizer
+#
+#
+# Build flags for libopenmpt (provide on each `make` invocation)
+# (defaults are 0):
+#
+# NO_ZLIB=1 Avoid using zlib, even if found
+# NO_MPG123=1 Avoid using libmpg123, even if found
+# NO_OGG=1 Avoid using libogg, even if found
+# NO_VORBIS=1 Avoid using libvorbis, even if found
+# NO_VORBISFILE=1 Avoid using libvorbisfile, even if found
+#
+# LOCAL_ZLIB=1 Build local copy of zlib, even if found
+# LOCAL_MPG123=1 Build local copy of libmpg123, even if found
+# LOCAL_OGG=1 Build local copy of libogg, even if found
+# LOCAL_VORBIS=1 Build local copy of libvorbis, even if found
+#
+# NO_MINIZ=1 Do not fallback to miniz
+# NO_MINIMP3=1 Do not fallback to minimp3
+# NO_STBVORBIS=1 Do not fallback to stb_vorbis
+#
+# USE_ALLEGRO42=1 Use liballegro 4.2 (DJGPP only)
+# BUNDLED_ALLEGRO42=1 Use liballegro 4.2 in libopenmpt source tree (DJGPP only)
+#
+# Build flags for libopenmpt examples and openmpt123
+# (provide on each `make` invocation)
+# (defaults are 0):
+#
+# NO_PORTAUDIO=1 Avoid using PortAudio, even if found
+# NO_PORTAUDIOCPP=1 Avoid using PortAudio C++, even if found
+#
+# Build flags for openmpt123 (provide on each `make` invocation)
+# (defaults are 0):
+#
+# NO_PULSEAUDIO=1 Avoid using PulseAudio, even if found
+# NO_SDL2=1 Avoid using SDL2, even if found
+# NO_FLAC=1 Avoid using FLAC, even if found
+# NO_SNDFILE=1 Avoid using libsndfile, even if found
+#
+#
+# Install options (provide on each `make install` invocation)
+#
+# PREFIX (e.g.: PREFIX=$HOME/opt, default: PREFIX=/usr/local)
+# DESTDIR (e.g.: DESTDIR=bin/dest, default: DESTDIR=)
+#
+#
+# Verbosity:
+#
+# QUIET=[0,1] (default: QUIET=0)
+# VERBOSE=[0,1,2] (default: VERBOSE=0)
+#
+#
+# Supported targets:
+#
+# make clean
+# make [all]
+# make doc
+# make check
+# make dist
+# make dist-doc
+# make install
+# make install-doc
+#
+
+
+.PHONY: all
+all:
+
+
+INFO = @echo
+SILENT = @
+VERYSILENT = @
+
+
+ifeq ($(VERBOSE),2)
+INFO = @true
+SILENT =
+VERYSILENT =
+endif
+
+ifeq ($(VERBOSE),1)
+INFO = @true
+SILENT =
+VERYSILENT = @
+endif
+
+
+ifeq ($(QUIET),1)
+INFO = @true
+SILENT = @
+VERYSILENT = @
+endif
+
+
+# general settings
+
+DYNLINK=1
+SHARED_LIB=1
+STATIC_LIB=1
+EXAMPLES=1
+FUZZ=0
+SHARED_SONAME=1
+DEBUG=0
+OPTIMIZE=1
+OPTIMIZE_SIZE=0
+OPTIMIZE_LTO=0
+TEST=1
+ONLY_TEST=0
+SOSUFFIX=.so
+SOSUFFIXWINDOWS=0
+NO_SHARED_LINKER_FLAG=0
+OPENMPT123=1
+IN_OPENMPT=0
+XMP_OPENMPT=0
+MODERN=0
+STRICT=0
+
+FORCE_UNIX_STYLE_COMMANDS=0
+
+CHECKED=0
+CHECKED_ADDRESS=0
+CHECKED_UNDEFINED=0
+
+REQUIRES_RUNPREFIX=0
+
+
+# get commandline or defaults
+
+CPPFLAGS := $(CPPFLAGS)
+CXXFLAGS := $(CXXFLAGS)
+CFLAGS := $(CFLAGS)
+LDFLAGS := $(LDFLAGS)
+LDLIBS := $(LDLIBS)
+ARFLAGS := $(ARFLAGS)
+
+PC_LIBS_PRIVATE := $(PC_LIBS_PRIVATE)
+
+PREFIX := $(PREFIX)
+ifeq ($(PREFIX),)
+PREFIX := /usr/local
+endif
+
+MANDIR ?= $(PREFIX)/share/man
+#DESTDIR := $(DESTDIR)
+#ifeq ($(DESTDIR),)
+#DESTDIR := bin/dest
+#endif
+
+
+# version
+
+include libopenmpt/libopenmpt_version.mk
+
+LIBOPENMPT_SO_VERSION=$(LIBOPENMPT_LTVER_CURRENT)
+
+
+# host setup
+
+ifneq ($(MSYSTEM)x,x)
+
+HOST=unix
+HOST_FLAVOUR=
+
+TOOLCHAIN_SUFFIX=
+
+CPPCHECK = cppcheck
+
+MKDIR_P = mkdir -p
+RM = rm -f
+RMTREE = rm -rf
+INSTALL = install
+INSTALL_MAKE_DIR = install -d
+INSTALL_DIR = cp -r -v
+FIXPATH = $1
+
+HOST_FLAVOUR=MSYS2
+
+NUMTHREADS:=$(shell nproc)
+
+else ifeq ($(OS),Windows_NT)
+
+HOST=windows
+HOST_FLAVOUR=
+
+TOOLCHAIN_SUFFIX=
+
+CPPCHECK = cppcheck
+
+MKDIR_P = mkdir
+RM = del /q /f
+RMTREE = del /q /f /s
+INSTALL = echo install
+INSTALL_MAKE_DIR = echo install
+INSTALL_DIR = echo install
+FIXPATH = $(subst /,\,$1)
+
+NUMTHREADS:=$(NUMBER_OF_PROCESSORS)
+
+else
+
+HOST=unix
+HOST_FLAVOUR=
+
+TOOLCHAIN_SUFFIX=
+
+CPPCHECK = cppcheck
+
+MKDIR_P = mkdir -p
+RM = rm -f
+RMTREE = rm -rf
+INSTALL = install
+INSTALL_MAKE_DIR = install -d
+INSTALL_DIR = cp -r -v
+FIXPATH = $1
+
+UNAME_S:=$(shell uname -s)
+ifeq ($(UNAME_S),Darwin)
+HOST_FLAVOUR=MACOSX
+endif
+ifeq ($(UNAME_S),Linux)
+HOST_FLAVOUR=LINUX
+endif
+ifeq ($(UNAME_S),FreeBSD)
+HOST_FLAVOUR=FREEBSD
+endif
+ifeq ($(UNAME_S),OpenBSD)
+HOST_FLAVOUR=OPENBSD
+endif
+ifeq ($(UNAME_S),Haiku)
+HOST_FLAVOUR=HAIKU
+endif
+
+ifeq ($(HOST_FLAVOUR),LINUX)
+NUMTHREADS:=$(shell nproc)
+else
+NUMTHREADS:=1
+endif
+
+endif
+
+
+# early build setup
+
+BINDIR_MADE:=$(shell $(MKDIR_P) bin)
+
+
+# compiler setup
+
+PKG_CONFIG ?= pkg-config
+
+ifeq ($(CONFIG)x,x)
+
+include build/make/config-defaults.mk
+
+else
+
+include build/make/config-$(CONFIG).mk
+
+endif
+
+
+ifeq ($(FORCE_UNIX_STYLE_COMMANDS),1)
+MKDIR_P = mkdir -p
+RM = rm -f
+RMTREE = rm -rf
+endif
+
+
+# build setup
+
+ifeq ($(SOSUFFIXWINDOWS),1)
+LIBOPENMPT_SONAME=libopenmpt-$(LIBOPENMPT_SO_VERSION)$(SOSUFFIX)
+else
+LIBOPENMPT_SONAME=libopenmpt$(SOSUFFIX).$(LIBOPENMPT_SO_VERSION)
+endif
+
+INSTALL_PROGRAM = $(INSTALL) -m 0755
+INSTALL_DATA = $(INSTALL) -m 0644
+INSTALL_LIB = $(INSTALL) -m 0644
+INSTALL_DATA_DIR = $(INSTALL_DIR)
+INSTALL_MAKE_DIR += -m 0755
+
+CPPFLAGS += -Isrc -Icommon -I.
+
+ifeq ($(XMP_OPENMPT),1)
+CPPFLAGS += -Iinclude/pugixml/src
+endif
+
+ifeq ($(MPT_COMPILER_GENERIC),1)
+
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS +=
+LDLIBS +=
+ARFLAGS +=
+
+ifeq ($(DEBUG),1)
+CPPFLAGS += -DMPT_BUILD_DEBUG
+CXXFLAGS += -g
+CFLAGS += -g
+else
+ifeq ($(OPTIMIZE),1)
+CXXFLAGS += -O
+CFLAGS += -O
+endif
+endif
+
+ifeq ($(CHECKED),1)
+CPPFLAGS += -DMPT_BUILD_CHECKED
+CXXFLAGS += -g
+CFLAGS += -g
+endif
+
+CXXFLAGS += -Wall
+CFLAGS += -Wall
+
+else
+
+ifeq ($(MPT_COMPILER_NOVISIBILITY),1)
+CXXFLAGS +=
+CFLAGS +=
+else
+CXXFLAGS += -fvisibility=hidden
+CFLAGS += -fvisibility=hidden
+endif
+LDFLAGS +=
+LDLIBS +=
+ARFLAGS +=
+
+ifeq ($(DEBUG),1)
+CPPFLAGS += -DMPT_BUILD_DEBUG
+CXXFLAGS += -O0 -g -fno-omit-frame-pointer
+CFLAGS += -O0 -g -fno-omit-frame-pointer
+else
+ifeq ($(OPTIMIZE_SIZE),1)
+CXXFLAGS += -Os
+CFLAGS += -Os -fno-strict-aliasing
+LDFLAGS +=
+ifeq ($(MPT_COMPILER_NOGCSECTIONS),1)
+else
+CXXFLAGS += -ffunction-sections -fdata-sections
+CFLAGS += -ffunction-sections -fdata-sections
+LDFLAGS += -Wl,--gc-sections
+endif
+else
+ifeq ($(OPTIMIZE),1)
+CXXFLAGS += -O3
+CFLAGS += -O3 -fno-strict-aliasing
+endif
+endif
+endif
+
+ifeq ($(CHECKED),1)
+CPPFLAGS += -DMPT_BUILD_CHECKED
+CXXFLAGS += -g -fno-omit-frame-pointer
+CFLAGS += -g -fno-omit-frame-pointer
+endif
+
+ifeq ($(FUZZ),1)
+CPPFLAGS +=
+CXXFLAGS += -fno-omit-frame-pointer
+CFLAGS += -fno-omit-frame-pointer
+endif
+
+CXXFLAGS += -Wall -Wextra -Wpedantic $(CXXFLAGS_WARNINGS)
+CFLAGS += -Wall -Wextra -Wpedantic $(CFLAGS_WARNINGS)
+LDFLAGS += $(LDFLAGS_WARNINGS)
+
+endif
+
+ifeq ($(STRICT),1)
+CXXFLAGS += -Werror
+CFLAGS += -Werror
+endif
+
+ifeq ($(DYNLINK),1)
+LDFLAGS_RPATH += -Wl,-rpath,./bin
+LDFLAGS_LIBOPENMPT += -Lbin
+LDLIBS_LIBOPENMPT += -lopenmpt
+endif
+
+ifeq ($(HOST),unix)
+
+ifeq ($(IS_CROSS),1)
+else
+ifeq ($(shell help2man --version > /dev/null 2>&1 && echo yes ),yes)
+MPT_WITH_HELP2MAN := 1
+endif
+endif
+
+ifeq ($(shell doxygen --version > /dev/null 2>&1 && echo yes ),yes)
+MPT_WITH_DOXYGEN := 1
+endif
+
+endif
+
+PC_LIBS_PRIVATE += $(CXXSTDLIB_PCLIBSPRIVATE)
+
+ifeq ($(HACK_ARCHIVE_SUPPORT),1)
+NO_ZLIB:=1
+endif
+
+ifeq ($(LOCAL_ZLIB),1)
+CPPFLAGS_ZLIB := -DMPT_WITH_ZLIB
+LDFLAGS_ZLIB :=
+LDLIBS_ZLIB :=
+CPPFLAGS_ZLIB += -Iinclude/zlib/
+LOCAL_ZLIB_SOURCES :=
+LOCAL_ZLIB_SOURCES += include/zlib/adler32.c
+LOCAL_ZLIB_SOURCES += include/zlib/compress.c
+LOCAL_ZLIB_SOURCES += include/zlib/crc32.c
+LOCAL_ZLIB_SOURCES += include/zlib/deflate.c
+LOCAL_ZLIB_SOURCES += include/zlib/gzclose.c
+LOCAL_ZLIB_SOURCES += include/zlib/gzlib.c
+LOCAL_ZLIB_SOURCES += include/zlib/gzread.c
+LOCAL_ZLIB_SOURCES += include/zlib/gzwrite.c
+LOCAL_ZLIB_SOURCES += include/zlib/infback.c
+LOCAL_ZLIB_SOURCES += include/zlib/inffast.c
+LOCAL_ZLIB_SOURCES += include/zlib/inflate.c
+LOCAL_ZLIB_SOURCES += include/zlib/inftrees.c
+LOCAL_ZLIB_SOURCES += include/zlib/trees.c
+LOCAL_ZLIB_SOURCES += include/zlib/uncompr.c
+LOCAL_ZLIB_SOURCES += include/zlib/zutil.c
+include/zlib/%.o : CFLAGS+=$(CFLAGS_SILENT) -DSTDC -DZ_HAVE_UNISTD_H
+include/zlib/%.test.o : CFLAGS+=$(CFLAGS_SILENT) -DSTDC -DZ_HAVE_UNISTD_H
+else
+ifeq ($(NO_ZLIB),1)
+else
+#LDLIBS += -lz
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists zlib && echo yes),yes)
+CPPFLAGS_ZLIB := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I zlib ) -DMPT_WITH_ZLIB
+LDFLAGS_ZLIB := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L zlib ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other zlib )
+LDLIBS_ZLIB := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l zlib )
+PC_REQUIRES_ZLIB := zlib
+else
+ifeq ($(FORCE_DEPS),1)
+$(error zlib not found)
+else
+$(warning warning: zlib not found)
+endif
+NO_ZLIB:=1
+endif
+endif
+endif
+
+ifeq ($(LOCAL_MPG123),1)
+CPPFLAGS_MPG123 := -DMPT_WITH_MPG123
+LDFLAGS_MPG123 :=
+LDLIBS_MPG123 :=
+CPPFLAGS_MPG123 += -Iinclude/mpg123/src/libmpg123/ -Iinclude/mpg123/src/compat/ -Iinclude/mpg123/src/ -Iinclude/mpg123/ports/makefile/
+LOCAL_MPG123_SOURCES :=
+LOCAL_MPG123_SOURCES += include/mpg123/src/compat/compat.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/compat/compat_str.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/dct64.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/equalizer.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/feature.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/format.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/frame.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/icy.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/icy2utf8.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/id3.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/index.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/layer1.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/layer2.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/layer3.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/libmpg123.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/ntom.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/optimize.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/parse.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/readers.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/stringbuf.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/synth.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/synth_8bit.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/synth_real.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/synth_s32.c
+LOCAL_MPG123_SOURCES += include/mpg123/src/libmpg123/tabinit.c
+include/mpg123/src/compat/%.o : CFLAGS+=$(CFLAGS_SILENT) -DOPT_GENERIC
+include/mpg123/src/compat/%.test.o : CFLAGS+=$(CFLAGS_SILENT) -DOPT_GENERIC
+include/mpg123/src/libmpg123/%.o : CFLAGS+=$(CFLAGS_SILENT) -DOPT_GENERIC
+include/mpg123/src/libmpg123/%.test.o : CFLAGS+=$(CFLAGS_SILENT) -DOPT_GENERIC
+else
+ifeq ($(NO_MPG123),1)
+else
+#LDLIBS += -lmpg123
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists 'libmpg123 >= 1.14.0' && echo yes),yes)
+CPPFLAGS_MPG123 := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I 'libmpg123 >= 1.14.0' ) -DMPT_WITH_MPG123
+LDFLAGS_MPG123 := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L 'libmpg123 >= 1.14.0' ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other 'libmpg123 >= 1.14.0' )
+LDLIBS_MPG123 := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l 'libmpg123 >= 1.14.0' )
+PC_REQUIRES_MPG123 := libmpg123
+else
+ifeq ($(FORCE_DEPS),1)
+$(error mpg123 not found)
+else
+$(warning warning: mpg123 not found)
+endif
+NO_MPG123:=1
+endif
+endif
+endif
+
+ifeq ($(LOCAL_OGG),1)
+CPPFLAGS_OGG := -DMPT_WITH_OGG
+LDFLAGS_OGG :=
+LDLIBS_OGG :=
+CPPFLAGS_OGG += -Iinclude/ogg/include/ -Iinclude/ogg/ports/makefile/
+LOCAL_OGG_SOURCES :=
+LOCAL_OGG_SOURCES += include/ogg/src/bitwise.c
+LOCAL_OGG_SOURCES += include/ogg/src/framing.c
+include/ogg/src/%.o : CFLAGS+=$(CFLAGS_SILENT)
+include/ogg/src/%.test.o : CFLAGS+=$(CFLAGS_SILENT)
+else
+ifeq ($(NO_OGG),1)
+else
+#LDLIBS += -logg
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists ogg && echo yes),yes)
+CPPFLAGS_OGG := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I ogg ) -DMPT_WITH_OGG
+LDFLAGS_OGG := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L ogg ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other ogg )
+LDLIBS_OGG := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l ogg )
+PC_REQUIRES_OGG := ogg
+else
+ifeq ($(FORCE_DEPS),1)
+$(error ogg not found)
+else
+$(warning warning: ogg not found)
+endif
+NO_OGG:=1
+endif
+endif
+endif
+
+ifeq ($(LOCAL_VORBIS),1)
+CPPFLAGS_VORBIS := -DMPT_WITH_VORBIS
+LDFLAGS_VORBIS :=
+LDLIBS_VORBIS :=
+CPPFLAGS_VORBIS += -Iinclude/vorbis/include/ -Iinclude/vorbis/lib/ -DHAVE_ALLOCA_H
+LOCAL_VORBIS_SOURCES :=
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/analysis.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/bitrate.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/block.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/codebook.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/envelope.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/floor0.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/floor1.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/info.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/lookup.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/lpc.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/lsp.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/mapping0.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/mdct.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/psy.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/registry.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/res0.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/sharedbook.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/smallft.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/synthesis.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/vorbisenc.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/vorbisfile.c
+LOCAL_VORBIS_SOURCES += include/vorbis/lib/window.c
+include/vorbis/lib/%.o : CFLAGS+=$(CFLAGS_SILENT)
+include/vorbis/lib/%.test.o : CFLAGS+=$(CFLAGS_SILENT)
+else
+ifeq ($(NO_VORBIS),1)
+else
+#LDLIBS += -lvorbis
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists vorbis && echo yes),yes)
+CPPFLAGS_VORBIS := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I vorbis ) -DMPT_WITH_VORBIS
+LDFLAGS_VORBIS := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L vorbis ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other vorbis )
+LDLIBS_VORBIS := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l vorbis )
+PC_REQUIRES_VORBIS := vorbis
+else
+ifeq ($(FORCE_DEPS),1)
+$(error vorbis not found)
+else
+$(warning warning: vorbis not found)
+endif
+NO_VORBIS:=1
+endif
+endif
+endif
+
+ifeq ($(LOCAL_VORBIS),1)
+CPPFLAGS_VORBISFILE := -DMPT_WITH_VORBISFILE
+LDFLAGS_VORBISFILE :=
+LDLIBS_VORBISFILE :=
+else
+ifeq ($(NO_VORBISFILE),1)
+else
+#LDLIBS += -lvorbisfile
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists vorbisfile && echo yes),yes)
+CPPFLAGS_VORBISFILE := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I vorbisfile ) -DMPT_WITH_VORBISFILE
+LDFLAGS_VORBISFILE := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L vorbisfile ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other vorbisfile )
+LDLIBS_VORBISFILE := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l vorbisfile )
+PC_REQUIRES_VORBISFILE := vorbisfile
+else
+ifeq ($(FORCE_DEPS),1)
+$(error vorbisfile not found)
+else
+$(warning warning: vorbisfile not found)
+endif
+NO_VORBISFILE:=1
+endif
+endif
+endif
+
+ifeq ($(NO_SDL2),1)
+else
+#LDLIBS += -lsdl2
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists 'sdl2 >= 2.0.4' && echo yes),yes)
+CPPFLAGS_SDL2 := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I 'sdl2 >= 2.0.4' ) -DMPT_WITH_SDL2
+LDFLAGS_SDL2 := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L 'sdl2 >= 2.0.4' ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other 'sdl2 >= 2.0.4' )
+LDLIBS_SDL2 := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l 'sdl2 >= 2.0.4' )
+else
+ifeq ($(FORCE_DEPS),1)
+$(error sdl2 not found)
+else
+$(warning warning: sdl2 not found)
+endif
+NO_SDL2:=1
+endif
+endif
+
+ifeq ($(NO_PORTAUDIO),1)
+else
+#LDLIBS += -lportaudio
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists portaudio-2.0 && echo yes),yes)
+CPPFLAGS_PORTAUDIO := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I portaudio-2.0 ) -DMPT_WITH_PORTAUDIO
+LDFLAGS_PORTAUDIO := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L portaudio-2.0 ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other portaudio-2.0 )
+LDLIBS_PORTAUDIO := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l portaudio-2.0 )
+else
+ifeq ($(FORCE_DEPS),1)
+$(error portaudio not found)
+else
+$(warning warning: portaudio not found)
+endif
+NO_PORTAUDIO:=1
+endif
+endif
+
+ifeq ($(NO_PORTAUDIOCPP),1)
+else
+#LDLIBS += -lportaudiocpp
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists portaudiocpp && echo yes),yes)
+CPPFLAGS_PORTAUDIOCPP := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I portaudiocpp ) -DMPT_WITH_PORTAUDIOCPP
+LDFLAGS_PORTAUDIOCPP := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L portaudiocpp ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other portaudiocpp )
+LDLIBS_PORTAUDIOCPP := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l portaudiocpp )
+else
+ifeq ($(FORCE_DEPS),1)
+$(error portaudiocpp not found)
+else
+$(warning warning: portaudiocpp not found)
+endif
+NO_PORTAUDIOCPP:=1
+endif
+endif
+
+ifeq ($(NO_PULSEAUDIO),1)
+else
+#LDLIBS += -lpulse-simple
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists libpulse libpulse-simple && echo yes),yes)
+CPPFLAGS_PULSEAUDIO := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I libpulse libpulse-simple ) -DMPT_WITH_PULSEAUDIO
+LDFLAGS_PULSEAUDIO := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L libpulse libpulse-simple ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other libpulse libpulse-simple )
+LDLIBS_PULSEAUDIO := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l libpulse libpulse-simple )
+else
+ifeq ($(FORCE_DEPS),1)
+$(error pulseaudio not found)
+else
+$(warning warning: pulseaudio not found)
+endif
+NO_PULSEAUDIO:=1
+endif
+endif
+
+ifeq ($(NO_FLAC),1)
+else
+#LDLIBS += -lFLAC
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists 'flac >= 1.3.0' && echo yes),yes)
+CPPFLAGS_FLAC := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I 'flac >= 1.3.0' ) -DMPT_WITH_FLAC
+LDFLAGS_FLAC := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L 'flac >= 1.3.0' ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other 'flac >= 1.3.0' )
+LDLIBS_FLAC := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l 'flac >= 1.3.0' )
+else
+ifeq ($(FORCE_DEPS),1)
+$(error flac not found)
+else
+$(warning warning: flac not found)
+endif
+NO_FLAC:=1
+endif
+endif
+
+ifeq ($(NO_SNDFILE),1)
+else
+#LDLIBS += -lsndfile
+ifeq ($(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --exists sndfile && echo yes),yes)
+CPPFLAGS_SNDFILE := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --cflags-only-I sndfile ) -DMPT_WITH_SNDFILE
+LDFLAGS_SNDFILE := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-L sndfile ) $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-other sndfile )
+LDLIBS_SNDFILE := $(shell $(PKG_CONFIG)$(TOOLCHAIN_SUFFIX) --libs-only-l sndfile )
+else
+ifeq ($(FORCE_DEPS),1)
+$(error sndfile not found)
+else
+$(warning warning: sndfile not found)
+endif
+NO_SNDFILE:=1
+endif
+endif
+
+ifeq ($(USE_ALLEGRO42),1)
+CPPFLAGS_ALLEGRO42 ?=
+LDFLAGS_ALLEGRO42 ?=
+LDLIBS_ALLEGRO42 ?= liballeg.a
+CPPFLAGS_ALLEGRO42 += -DMPT_WITH_ALLEGRO42
+endif
+
+ifeq ($(HACK_ARCHIVE_SUPPORT),1)
+CPPFLAGS += -DMPT_BUILD_HACK_ARCHIVE_SUPPORT
+endif
+
+CPPCHECK_FLAGS += -j $(NUMTHREADS)
+CPPCHECK_FLAGS += --std=c99 --std=c++17
+CPPCHECK_FLAGS += --quiet
+CPPCHECK_FLAGS += --enable=warning --inline-suppr --template='{file}:{line}: warning: {severity}: {message} [{id}]'
+CPPCHECK_FLAGS += --suppress=missingIncludeSystem
+CPPCHECK_FLAGS += --suppress=uninitMemberVar
+
+CPPCHECK_FLAGS += $(CPPFLAGS)
+CPPFLAGS += $(CPPFLAGS_ZLIB) $(CPPFLAGS_MPG123) $(CPPFLAGS_OGG) $(CPPFLAGS_VORBIS) $(CPPFLAGS_VORBISFILE)
+LDFLAGS += $(LDFLAGS_ZLIB) $(LDFLAGS_MPG123) $(LDFLAGS_OGG) $(LDFLAGS_VORBIS) $(LDFLAGS_VORBISFILE)
+LDLIBS += $(LDLIBS_ZLIB) $(LDLIBS_MPG123) $(LDLIBS_OGG) $(LDLIBS_VORBIS) $(LDLIBS_VORBISFILE)
+
+CPPFLAGS_OPENMPT123 += $(CPPFLAGS_SDL2) $(CPPFLAGS_PORTAUDIO) $(CPPFLAGS_PULSEAUDIO) $(CPPFLAGS_FLAC) $(CPPFLAGS_SNDFILE) $(CPPFLAGS_ALLEGRO42)
+LDFLAGS_OPENMPT123 += $(LDFLAGS_SDL2) $(LDFLAGS_PORTAUDIO) $(LDFLAGS_PULSEAUDIO) $(LDFLAGS_FLAC) $(LDFLAGS_SNDFILE) $(LDFLAGS_ALLEGRO42)
+LDLIBS_OPENMPT123 += $(LDLIBS_SDL2) $(LDLIBS_PORTAUDIO) $(LDLIBS_PULSEAUDIO) $(LDLIBS_FLAC) $(LDLIBS_SNDFILE) $(LDLIBS_ALLEGRO42)
+
+
+%: %.o
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@
+
+%.o: %.cpp
+ $(INFO) [CXX] $<
+ $(VERYSILENT)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.cc) $(OUTPUT_OPTION) $<
+
+%.o: %.c
+ $(INFO) [CC] $<
+ $(VERYSILENT)$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.c) $(OUTPUT_OPTION) $<
+
+%.test.o: %.cpp
+ $(INFO) [CXX-TEST] $<
+ $(VERYSILENT)$(CXX) -DLIBOPENMPT_BUILD_TEST $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M -MT$@ $< > $*.test.d
+ $(SILENT)$(COMPILE.cc) -DLIBOPENMPT_BUILD_TEST $(OUTPUT_OPTION) $<
+
+%.test.o: %.c
+ $(INFO) [CC-TEST] $<
+ $(VERYSILENT)$(CC) -DLIBOPENMPT_BUILD_TEST $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M -MT$@ $< > $*.test.d
+ $(SILENT)$(COMPILE.c) -DLIBOPENMPT_BUILD_TEST $(OUTPUT_OPTION) $<
+
+%.tar.gz: %.tar
+ $(INFO) [GZIP] $<
+ $(SILENT)gzip --rsyncable --no-name --best > $@ < $<
+
+
+-include build/dist.mk
+DIST_LIBOPENMPT_VERSION_PURE:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)
+CPPFLAGS += -Ibuild/svn_version
+ifeq ($(MPT_SVNVERSION),)
+SVN_INFO:=$(shell svn info . > /dev/null 2>&1 ; echo $$? )
+ifeq ($(SVN_INFO),0)
+# in svn checkout
+MPT_SVNVERSION := $(shell svnversion -n . | tr ':' '-' )
+MPT_SVNURL := $(shell svn info --xml | grep '^' | sed 's///g' | sed 's/<\/url>//g' )
+MPT_SVNDATE := $(shell svn info --xml | grep '^' | sed 's///g' | sed 's/<\/date>//g' )
+CPPFLAGS += -D MPT_SVNURL=\"$(MPT_SVNURL)\" -D MPT_SVNVERSION=\"$(MPT_SVNVERSION)\" -D MPT_SVNDATE=\"$(MPT_SVNDATE)\"
+DIST_OPENMPT_VERSION:=r$(MPT_SVNVERSION)
+ifeq ($(LIBOPENMPT_VERSION_PREREL),)
+DIST_LIBOPENMPT_VERSION:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)+release
+else
+DIST_LIBOPENMPT_VERSION:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)+r$(MPT_SVNVERSION)
+endif
+else
+GIT_STATUS:=$(shell git status > /dev/null 2>&1 ; echo $$? )
+ifeq ($(GIT_STATUS),0)
+# in git chechout
+MPT_SVNVERSION := $(shell git log --grep=git-svn-id -n 1 | grep git-svn-id | tail -n 1 | tr ' ' '\n' | tail -n 2 | head -n 1 | sed 's/@/ /g' | awk '{print $$2;}' )$(shell if [ $$(git rev-list $$(git log --grep=git-svn-id -n 1 --format=format:'%H') ^$$(git log -n 1 --format=format:'%H') --count ) -ne 0 ] ; then echo M ; fi )
+MPT_SVNURL := $(shell git log --grep=git-svn-id -n 1 | grep git-svn-id | tail -n 1 | tr ' ' '\n' | tail -n 2 | head -n 1 | sed 's/@/ /g' | awk '{print $$1;}' )
+MPT_SVNDATE := $(shell git log -n 1 --date=iso --format=format:'%cd' | sed 's/ +0000/Z/g' | tr ' ' 'T' )
+CPPFLAGS += -D MPT_SVNURL=\"$(MPT_SVNURL)\" -D MPT_SVNVERSION=\"$(MPT_SVNVERSION)\" -D MPT_SVNDATE=\"$(MPT_SVNDATE)\"
+DIST_OPENMPT_VERSION:=r$(MPT_SVNVERSION)
+ifeq ($(LIBOPENMPT_VERSION_PREREL),)
+DIST_LIBOPENMPT_VERSION:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)+release
+else
+DIST_LIBOPENMPT_VERSION:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)+r$(MPT_SVNVERSION)
+endif
+else
+# not in svn checkout
+DIST_OPENMPT_VERSION:=rUNKNOWN
+ifeq ($(LIBOPENMPT_VERSION_PREREL),)
+DIST_LIBOPENMPT_VERSION:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)+release
+else
+DIST_LIBOPENMPT_VERSION:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)+rUNKNOWN
+endif
+endif
+endif
+else
+# in dist package
+DIST_OPENMPT_VERSION:=r$(MPT_SVNVERSION)
+ifeq ($(LIBOPENMPT_VERSION_PREREL),)
+DIST_LIBOPENMPT_VERSION:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)+release
+else
+DIST_LIBOPENMPT_VERSION:=$(LIBOPENMPT_VERSION_MAJOR).$(LIBOPENMPT_VERSION_MINOR).$(LIBOPENMPT_VERSION_PATCH)$(LIBOPENMPT_VERSION_PREREL)+r$(MPT_SVNVERSION)
+endif
+endif
+DIST_LIBOPENMPT_TARBALL_VERSION:=$(DIST_LIBOPENMPT_VERSION_PURE)
+
+ifeq ($(MPT_SVNVERSION),)
+else
+MPT_SVNREVISION := $(shell echo $(MPT_SVNVERSION) | sed 's/M//g' | sed 's/S//g' | sed 's/P//g' | sed -E 's/([0-9]+)-//g' )
+MPT_SVNDIRTY := $(shell echo $(MPT_SVNVERSION) | grep -v 'M\|S\|P' >/dev/null 2>&1 ; echo $$? )
+MPT_SVNMIXED := $(shell echo $(MPT_SVNVERSION) | grep -v '-' >/dev/null 2>&1; echo $$? )
+endif
+
+
+CPPFLAGS += -DLIBOPENMPT_BUILD
+
+
+COMMON_CXX_SOURCES += \
+ $(sort $(wildcard common/*.cpp)) \
+ $(sort $(wildcard src/mpt/src/*.cpp)) \
+
+SOUNDLIB_CXX_SOURCES += \
+ $(COMMON_CXX_SOURCES) \
+ $(sort $(wildcard soundlib/*.cpp)) \
+ $(sort $(wildcard soundlib/plugins/*.cpp)) \
+ $(sort $(wildcard soundlib/plugins/dmo/*.cpp)) \
+ $(sort $(wildcard sounddsp/*.cpp)) \
+
+
+ifeq ($(HACK_ARCHIVE_SUPPORT),1)
+SOUNDLIB_CXX_SOURCES += $(sort $(wildcard unarchiver/*.cpp))
+endif
+
+LIBOPENMPT_CXX_SOURCES += \
+ $(SOUNDLIB_CXX_SOURCES) \
+ libopenmpt/libopenmpt_c.cpp \
+ libopenmpt/libopenmpt_cxx.cpp \
+ libopenmpt/libopenmpt_impl.cpp \
+ libopenmpt/libopenmpt_ext_impl.cpp \
+
+include/miniz/miniz.o : CFLAGS+=$(CFLAGS_SILENT)
+include/miniz/miniz.test.o : CFLAGS+=$(CFLAGS_SILENT)
+ifeq ($(LOCAL_ZLIB),1)
+LIBOPENMPT_C_SOURCES += $(LOCAL_ZLIB_SOURCES)
+LIBOPENMPTTEST_C_SOURCES += $(LOCAL_ZLIB_SOURCES)
+else
+ifeq ($(NO_ZLIB),1)
+ifeq ($(NO_MINIZ),1)
+else
+LIBOPENMPT_C_SOURCES += include/miniz/miniz.c
+LIBOPENMPTTEST_C_SOURCES += include/miniz/miniz.c
+CPPFLAGS += -DMPT_WITH_MINIZ
+CPPFLAGS += -Iinclude
+endif
+endif
+endif
+
+include/minimp3/minimp3.o : CFLAGS+=$(CFLAGS_SILENT)
+include/minimp3/minimp3.test.o : CFLAGS+=$(CFLAGS_SILENT)
+ifeq ($(LOCAL_MPG123),1)
+LIBOPENMPT_C_SOURCES += $(LOCAL_MPG123_SOURCES)
+LIBOPENMPTTEST_C_SOURCES += $(LOCAL_MPG123_SOURCES)
+else
+ifeq ($(NO_MPG123),1)
+ifeq ($(NO_MINIMP3),1)
+else
+LIBOPENMPT_C_SOURCES += include/minimp3/minimp3.c
+LIBOPENMPTTEST_C_SOURCES += include/minimp3/minimp3.c
+CPPFLAGS += -DMPT_WITH_MINIMP3
+CPPFLAGS += -Iinclude
+endif
+endif
+endif
+
+include/stb_vorbis/stb_vorbis.o : CFLAGS+=$(CFLAGS_SILENT)
+include/stb_vorbis/stb_vorbis.test.o : CFLAGS+=$(CFLAGS_SILENT)
+ifeq ($(LOCAL_VORBIS),1)
+ifeq ($(LOCAL_OGG),1)
+LIBOPENMPT_C_SOURCES += $(LOCAL_OGG_SOURCES)
+LIBOPENMPTTEST_C_SOURCES += $(LOCAL_OGG_SOURCES)
+endif
+LIBOPENMPT_C_SOURCES += $(LOCAL_VORBIS_SOURCES)
+LIBOPENMPTTEST_C_SOURCES += $(LOCAL_VORBIS_SOURCES)
+else
+ifeq ($(NO_OGG),1)
+ifeq ($(NO_STBVORBIS),1)
+else
+LIBOPENMPT_C_SOURCES += include/stb_vorbis/stb_vorbis.c
+LIBOPENMPTTEST_C_SOURCES += include/stb_vorbis/stb_vorbis.c
+CPPFLAGS += -DMPT_WITH_STBVORBIS -DSTB_VORBIS_NO_PULLDATA_API -DSTB_VORBIS_NO_STDIO
+CPPFLAGS += -Iinclude
+endif
+else
+ifeq ($(NO_VORBIS),1)
+ifeq ($(NO_STBVORBIS),1)
+else
+LIBOPENMPT_C_SOURCES += include/stb_vorbis/stb_vorbis.c
+LIBOPENMPTTEST_C_SOURCES += include/stb_vorbis/stb_vorbis.c
+CPPFLAGS += -DMPT_WITH_STBVORBIS -DSTB_VORBIS_NO_PULLDATA_API -DSTB_VORBIS_NO_STDIO
+CPPFLAGS += -Iinclude
+endif
+else
+ifeq ($(NO_VORBISFILE),1)
+ifeq ($(NO_STBVORBIS),1)
+else
+LIBOPENMPT_C_SOURCES += include/stb_vorbis/stb_vorbis.c
+LIBOPENMPTTEST_C_SOURCES += include/stb_vorbis/stb_vorbis.c
+CPPFLAGS += -DMPT_WITH_STBVORBIS -DSTB_VORBIS_NO_PULLDATA_API -DSTB_VORBIS_NO_STDIO
+CPPFLAGS += -Iinclude
+endif
+else
+endif
+endif
+endif
+endif
+
+LIBOPENMPT_OBJECTS += $(LIBOPENMPT_CXX_SOURCES:.cpp=.o) $(LIBOPENMPT_C_SOURCES:.c=.o)
+LIBOPENMPT_DEPENDS = $(LIBOPENMPT_OBJECTS:.o=.d)
+ALL_OBJECTS += $(LIBOPENMPT_OBJECTS)
+ALL_DEPENDS += $(LIBOPENMPT_DEPENDS)
+
+ifeq ($(DYNLINK),1)
+OUTPUT_LIBOPENMPT += bin/libopenmpt$(SOSUFFIX)
+else
+OBJECTS_LIBOPENMPT += $(LIBOPENMPT_OBJECTS)
+endif
+
+
+INOPENMPT_CXX_SOURCES += \
+ libopenmpt/libopenmpt_plugin_gui.cpp \
+ libopenmpt/in_openmpt.cpp \
+
+
+INOPENMPT_OBJECTS += $(INOPENMPT_CXX_SOURCES:.cpp=.o) $(INOPENMPT_C_SOURCES:.c=.o)
+INOPENMPT_DEPENDS = $(INOPENMPT_OBJECTS:.o=.d)
+ALL_OBJECTS += $(INOPENMPT_OBJECTS)
+ALL_DEPENDS += $(INOPENMPT_DEPENDS)
+
+
+XMPOPENMPT_CXX_SOURCES += \
+ include/pugixml/src/pugixml.cpp \
+ libopenmpt/libopenmpt_plugin_gui.cpp \
+ libopenmpt/xmp-openmpt.cpp \
+
+
+XMPOPENMPT_OBJECTS += $(XMPOPENMPT_CXX_SOURCES:.cpp=.o) $(XMPOPENMPT_C_SOURCES:.c=.o)
+XMPOPENMPT_DEPENDS = $(XMPOPENMPT_OBJECTS:.o=.d)
+ALL_OBJECTS += $(XMPOPENMPT_OBJECTS)
+ALL_DEPENDS += $(XMPOPENMPT_DEPENDS)
+
+
+OPENMPT123_CXX_SOURCES += \
+ $(sort $(wildcard openmpt123/*.cpp)) \
+
+OPENMPT123_OBJECTS += $(OPENMPT123_CXX_SOURCES:.cpp=.o)
+OPENMPT123_DEPENDS = $(OPENMPT123_OBJECTS:.o=.d)
+ALL_OBJECTS += $(OPENMPT123_OBJECTS)
+ALL_DEPENDS += $(OPENMPT123_DEPENDS)
+
+
+LIBOPENMPTTEST_CXX_SOURCES += \
+ libopenmpt/libopenmpt_test.cpp \
+ $(SOUNDLIB_CXX_SOURCES) \
+ test/mpt_tests_base.cpp \
+ test/mpt_tests_binary.cpp \
+ test/mpt_tests_crc.cpp \
+ test/mpt_tests_endian.cpp \
+ test/mpt_tests_format.cpp \
+ test/mpt_tests_io.cpp \
+ test/mpt_tests_parse.cpp \
+ test/mpt_tests_random.cpp \
+ test/mpt_tests_string.cpp \
+ test/mpt_tests_string_transcode.cpp \
+ test/mpt_tests_uuid.cpp \
+ test/test.cpp \
+ test/TestToolsLib.cpp \
+
+# test/mpt_tests_crypto.cpp \
+# test/mpt_tests_uuid_namespace.cpp \
+
+LIBOPENMPTTEST_OBJECTS = $(LIBOPENMPTTEST_CXX_SOURCES:.cpp=.test.o) $(LIBOPENMPTTEST_C_SOURCES:.c=.test.o)
+LIBOPENMPTTEST_DEPENDS = $(LIBOPENMPTTEST_CXX_SOURCES:.cpp=.test.d) $(LIBOPENMPTTEST_C_SOURCES:.c=.test.d)
+ALL_OBJECTS += $(LIBOPENMPTTEST_OBJECTS)
+ALL_DEPENDS += $(LIBOPENMPTTEST_DEPENDS)
+
+
+EXAMPLES_CXX_SOURCES += $(sort $(wildcard examples/*.cpp))
+EXAMPLES_C_SOURCES += $(sort $(wildcard examples/*.c))
+
+EXAMPLES_OBJECTS += $(EXAMPLES_CXX_SOURCES:.cpp=.o)
+EXAMPLES_OBJECTS += $(EXAMPLES_C_SOURCES:.c=.o)
+EXAMPLES_DEPENDS = $(EXAMPLES_OBJECTS:.o=.d)
+ALL_OBJECTS += $(EXAMPLES_OBJECTS)
+ALL_DEPENDS += $(EXAMPLES_DEPENDS)
+
+
+FUZZ_CXX_SOURCES += $(sort $(wildcard contrib/fuzzing/*.cpp))
+FUZZ_C_SOURCES += $(sort $(wildcard contrib/fuzzing/*.c))
+
+FUZZ_OBJECTS += $(FUZZ_CXX_SOURCES:.cpp=.o)
+FUZZ_OBJECTS += $(FUZZ_C_SOURCES:.c=.o)
+FUZZ_DEPENDS = $(FUZZ_OBJECTS:.o=.d)
+ALL_OBJECTS += $(FUZZ_OBJECTS)
+ALL_DEPENDS += $(FUZZ_DEPENDS)
+
+
+.PHONY: all
+all:
+
+-include $(ALL_DEPENDS)
+
+ifeq ($(DYNLINK),1)
+OUTPUTS += bin/libopenmpt$(SOSUFFIX)
+endif
+ifeq ($(SHARED_LIB),1)
+OUTPUTS += bin/libopenmpt$(SOSUFFIX)
+endif
+ifeq ($(STATIC_LIB),1)
+OUTPUTS += bin/libopenmpt.a
+endif
+ifeq ($(IN_OPENMPT),1)
+OUTPUTS += bin/in_openmpt$(SOSUFFIX)
+endif
+ifeq ($(XMP_OPENMPT),1)
+OUTPUTS += bin/xmp-openmpt$(SOSUFFIX)
+endif
+ifeq ($(OPENMPT123),1)
+OUTPUTS += bin/openmpt123$(EXESUFFIX)
+endif
+ifeq ($(EXAMPLES),1)
+ifeq ($(NO_PORTAUDIO),1)
+else
+OUTPUTS += bin/libopenmpt_example_c$(EXESUFFIX)
+OUTPUTS += bin/libopenmpt_example_c_mem$(EXESUFFIX)
+OUTPUTS += bin/libopenmpt_example_c_unsafe$(EXESUFFIX)
+endif
+ifeq ($(NO_PORTAUDIOCPP),1)
+else
+OUTPUTS += bin/libopenmpt_example_cxx$(EXESUFFIX)
+endif
+OUTPUTS += bin/libopenmpt_example_c_pipe$(EXESUFFIX)
+OUTPUTS += bin/libopenmpt_example_c_stdout$(EXESUFFIX)
+OUTPUTS += bin/libopenmpt_example_c_probe$(EXESUFFIX)
+endif
+ifeq ($(FUZZ),1)
+OUTPUTS += bin/fuzz$(EXESUFFIX)
+endif
+ifeq ($(TEST),1)
+OUTPUTS += bin/libopenmpt_test$(EXESUFFIX)
+endif
+ifeq ($(HOST),unix)
+OUTPUTS += bin/libopenmpt.pc
+endif
+ifeq ($(OPENMPT123),1)
+ifeq ($(MPT_WITH_HELP2MAN),1)
+OUTPUTS += bin/openmpt123.1
+endif
+endif
+ifeq ($(SHARED_SONAME),1)
+LIBOPENMPT_LDFLAGS += -Wl,-soname,$(LIBOPENMPT_SONAME)
+endif
+
+MISC_OUTPUTS += bin/empty.cpp
+MISC_OUTPUTS += bin/empty.out
+MISC_OUTPUTS += bin/openmpt123$(EXESUFFIX).norpath
+MISC_OUTPUTS += bin/libopenmpt_example_c$(EXESUFFIX).norpath
+MISC_OUTPUTS += bin/libopenmpt_example_c_mem$(EXESUFFIX).norpath
+MISC_OUTPUTS += bin/libopenmpt_example_c_probe$(EXESUFFIX).norpath
+MISC_OUTPUTS += bin/libopenmpt_example_c_unsafe$(EXESUFFIX).norpath
+MISC_OUTPUTS += bin/libopenmpt_example_cxx$(EXESUFFIX).norpath
+MISC_OUTPUTS += bin/libopenmpt_example_c_pipe$(EXESUFFIX).norpath
+MISC_OUTPUTS += bin/libopenmpt_example_c_stdout$(EXESUFFIX).norpath
+MISC_OUTPUTS += libopenmpt$(SOSUFFIX)
+MISC_OUTPUTS += bin/.docs
+MISC_OUTPUTS += bin/libopenmpt_test$(EXESUFFIX)
+MISC_OUTPUTS += bin/libopenmpt_test.wasm
+MISC_OUTPUTS += bin/libopenmpt_test.wasm.js
+MISC_OUTPUTS += bin/libopenmpt_test.js.mem
+MISC_OUTPUTS += bin/made.docs
+MISC_OUTPUTS += bin/$(LIBOPENMPT_SONAME)
+MISC_OUTPUTS += bin/libopenmpt.wasm
+MISC_OUTPUTS += bin/libopenmpt.wasm.js
+MISC_OUTPUTS += bin/libopenmpt.js.mem
+MISC_OUTPUTS += bin/libopenmpt_example_c.wasm
+MISC_OUTPUTS += bin/libopenmpt_example_c.wasm.js
+MISC_OUTPUTS += bin/libopenmpt_example_c.js.mem
+MISC_OUTPUTS += bin/libopenmpt_example_c_mem.wasm
+MISC_OUTPUTS += bin/libopenmpt_example_c_mem.wasm.js
+MISC_OUTPUTS += bin/libopenmpt_example_c_mem.js.mem
+MISC_OUTPUTS += bin/libopenmpt_example_c_pipe.wasm
+MISC_OUTPUTS += bin/libopenmpt_example_c_pipe.wasm.js
+MISC_OUTPUTS += bin/libopenmpt_example_c_pipe.js.mem
+MISC_OUTPUTS += bin/libopenmpt_example_c_probe.wasm
+MISC_OUTPUTS += bin/libopenmpt_example_c_probe.wasm.js
+MISC_OUTPUTS += bin/libopenmpt_example_c_probe.js.mem
+MISC_OUTPUTS += bin/libopenmpt_example_c_stdout.wasm
+MISC_OUTPUTS += bin/libopenmpt_example_c_stdout.wasm.js
+MISC_OUTPUTS += bin/libopenmpt_example_c_stdout.js.mem
+MISC_OUTPUTS += bin/libopenmpt_example_c_unsafe.wasm
+MISC_OUTPUTS += bin/libopenmpt_example_c_unsafe.wasm.js
+MISC_OUTPUTS += bin/libopenmpt_example_c_unsafe.js.mem
+MISC_OUTPUTS += bin/openmpt.a
+#old
+MISC_OUTPUTS += bin/libopenmpt_example_c_safe$(EXESUFFIX)
+MISC_OUTPUTS += bin/libopenmpt_example_c_safe$(EXESUFFIX).norpath
+
+MISC_OUTPUTDIRS += bin/dest
+MISC_OUTPUTDIRS += bin/docs
+
+DIST_OUTPUTS += bin/dist.mk
+DIST_OUTPUTS += bin/svn_version_dist.h
+DIST_OUTPUTS += bin/dist.tar
+DIST_OUTPUTS += bin/dist-tar.tar
+DIST_OUTPUTS += bin/dist-zip.tar
+DIST_OUTPUTS += bin/dist-doc.tar
+DIST_OUTPUTS += bin/dist-autotools.tar
+DIST_OUTPUTS += bin/dist-js.tar
+DIST_OUTPUTS += bin/dist-dos.tar
+DIST_OUTPUTS += bin/made.docs
+
+DIST_OUTPUTDIRS += bin/dist
+DIST_OUTPUTDIRS += bin/dist-doc
+DIST_OUTPUTDIRS += bin/dist-tar
+DIST_OUTPUTDIRS += bin/dist-zip
+DIST_OUTPUTDIRS += bin/dist-autotools
+DIST_OUTPUTDIRS += bin/dist-js
+DIST_OUTPUTDIRS += bin/dist-dos
+DIST_OUTPUTDIRS += bin/docs
+
+
+
+ifeq ($(ONLY_TEST),1)
+all: bin/libopenmpt_test$(EXESUFFIX)
+else
+all: $(OUTPUTS)
+endif
+
+.PHONY: docs
+docs: bin/made.docs
+
+.PHONY: doc
+doc: bin/made.docs
+
+bin/made.docs:
+ $(VERYSILENT)mkdir -p bin/docs
+ $(INFO) [DOXYGEN] libopenmpt
+ifeq ($(SILENT_DOCS),1)
+ $(SILENT) ( cat libopenmpt/Doxyfile ; echo 'PROJECT_NUMBER = "$(DIST_LIBOPENMPT_VERSION)"' ; echo 'WARN_IF_DOC_ERROR = NO' ) | doxygen -
+else
+ $(SILENT) ( cat libopenmpt/Doxyfile ; echo 'PROJECT_NUMBER = "$(DIST_LIBOPENMPT_VERSION)"' ) | doxygen -
+endif
+ $(VERYSILENT)touch $@
+
+.PHONY: check
+check: test
+
+.PHONY: test
+test: bin/libopenmpt_test$(EXESUFFIX)
+ifeq ($(REQUIRES_RUNPREFIX),1)
+ cd bin && $(RUNPREFIX) libopenmpt_test$(EXESUFFIX)
+else
+ bin/libopenmpt_test$(EXESUFFIX)
+endif
+
+bin/libopenmpt_test$(EXESUFFIX): $(LIBOPENMPTTEST_OBJECTS)
+ $(INFO) [LD-TEST] $@
+ $(SILENT)$(LINK.cc) $(LDFLAGS_RPATH) $(TEST_LDFLAGS) $(LIBOPENMPTTEST_OBJECTS) $(LOADLIBES) $(LDLIBS) -o $@
+
+bin/libopenmpt.pc:
+ $(INFO) [GEN] $@
+ $(VERYSILENT)rm -rf $@
+ $(VERYSILENT)echo > $@.tmp
+ $(VERYSILENT)echo 'prefix=$(PREFIX)' >> $@.tmp
+ $(VERYSILENT)echo 'exec_prefix=$${prefix}' >> $@.tmp
+ $(VERYSILENT)echo 'libdir=$${exec_prefix}/lib' >> $@.tmp
+ $(VERYSILENT)echo 'includedir=$${prefix}/include' >> $@.tmp
+ $(VERYSILENT)echo '' >> $@.tmp
+ $(VERYSILENT)echo 'Name: libopenmpt' >> $@.tmp
+ $(VERYSILENT)echo 'Description: Tracker module player based on OpenMPT' >> $@.tmp
+ $(VERYSILENT)echo 'Version: $(DIST_LIBOPENMPT_VERSION)' >> $@.tmp
+ $(VERYSILENT)echo 'Requires.private: $(PC_REQUIRES_ZLIB) $(PC_REQUIRES_MPG123) $(PC_REQUIRES_OGG) $(PC_REQUIRES_VORBIS) $(PC_REQUIRES_VORBISFILE)' >> $@.tmp
+ $(VERYSILENT)echo 'Libs: -L$${libdir} -lopenmpt' >> $@.tmp
+ $(VERYSILENT)echo 'Libs.private: $(PC_LIBS_PRIVATE)' >> $@.tmp
+ $(VERYSILENT)echo 'Cflags: -I$${includedir}' >> $@.tmp
+ $(VERYSILENT)mv $@.tmp $@
+
+.PHONY: install
+install: $(OUTPUTS)
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/include/libopenmpt
+ $(INSTALL_DATA) libopenmpt/libopenmpt_config.h $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt_config.h
+ $(INSTALL_DATA) libopenmpt/libopenmpt_version.h $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt_version.h
+ $(INSTALL_DATA) libopenmpt/libopenmpt.h $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt.h
+ $(INSTALL_DATA) libopenmpt/libopenmpt_stream_callbacks_buffer.h $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt_stream_callbacks_buffer.h
+ $(INSTALL_DATA) libopenmpt/libopenmpt_stream_callbacks_fd.h $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt_stream_callbacks_fd.h
+ $(INSTALL_DATA) libopenmpt/libopenmpt_stream_callbacks_file.h $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt_stream_callbacks_file.h
+ $(INSTALL_DATA) libopenmpt/libopenmpt.hpp $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt.hpp
+ $(INSTALL_DATA) libopenmpt/libopenmpt_ext.h $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt_ext.h
+ $(INSTALL_DATA) libopenmpt/libopenmpt_ext.hpp $(DESTDIR)$(PREFIX)/include/libopenmpt/libopenmpt_ext.hpp
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/lib/pkgconfig
+ $(INSTALL_DATA) bin/libopenmpt.pc $(DESTDIR)$(PREFIX)/lib/pkgconfig/libopenmpt.pc
+ifeq ($(SHARED_LIB),1)
+ifeq ($(SHARED_SONAME),1)
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/lib
+ $(INSTALL_LIB) bin/$(LIBOPENMPT_SONAME) $(DESTDIR)$(PREFIX)/lib/$(LIBOPENMPT_SONAME)
+ ln -sf $(LIBOPENMPT_SONAME) $(DESTDIR)$(PREFIX)/lib/libopenmpt$(SOSUFFIX)
+else
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/lib
+ $(INSTALL_LIB) bin/libopenmpt$(SOSUFFIX) $(DESTDIR)$(PREFIX)/lib/libopenmpt$(SOSUFFIX)
+endif
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/lib
+endif
+ifeq ($(STATIC_LIB),1)
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/lib
+ $(INSTALL_DATA) bin/libopenmpt.a $(DESTDIR)$(PREFIX)/lib/libopenmpt.a
+endif
+ifeq ($(OPENMPT123),1)
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/bin
+ifeq ($(SHARED_LIB),1)
+ $(INSTALL_PROGRAM) bin/openmpt123$(EXESUFFIX).norpath $(DESTDIR)$(PREFIX)/bin/openmpt123$(EXESUFFIX)
+else
+ $(INSTALL_PROGRAM) bin/openmpt123$(EXESUFFIX) $(DESTDIR)$(PREFIX)/bin/openmpt123$(EXESUFFIX)
+endif
+ifeq ($(MPT_WITH_HELP2MAN),1)
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(MANDIR)/man1
+ $(INSTALL_DATA) bin/openmpt123.1 $(DESTDIR)$(MANDIR)/man1/openmpt123.1
+endif
+endif
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/share/doc/libopenmpt
+ $(INSTALL_DATA) LICENSE $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/LICENSE
+ $(INSTALL_DATA) README.md $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/README.md
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/examples
+ $(INSTALL_DATA) examples/libopenmpt_example_c.c $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/examples/libopenmpt_example_c.c
+ $(INSTALL_DATA) examples/libopenmpt_example_c_mem.c $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/examples/libopenmpt_example_c_mem.c
+ $(INSTALL_DATA) examples/libopenmpt_example_c_probe.c $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/examples/libopenmpt_example_c_probe.c
+ $(INSTALL_DATA) examples/libopenmpt_example_c_unsafe.c $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/examples/libopenmpt_example_c_unsafe.c
+ $(INSTALL_DATA) examples/libopenmpt_example_c_pipe.c $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/examples/libopenmpt_example_c_pipe.c
+ $(INSTALL_DATA) examples/libopenmpt_example_c_stdout.c $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/examples/libopenmpt_example_c_stdout.c
+ $(INSTALL_DATA) examples/libopenmpt_example_cxx.cpp $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/examples/libopenmpt_example_cxx.cpp
+
+.PHONY: install-doc
+install-doc: bin/made.docs
+ifeq ($(MPT_WITH_DOXYGEN),1)
+ $(INSTALL_MAKE_DIR) $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/html/
+ $(INSTALL_DATA_DIR) bin/docs/html $(DESTDIR)$(PREFIX)/share/doc/libopenmpt/html
+endif
+
+.PHONY: dist
+dist: bin/dist-tar.tar bin/dist-zip.tar bin/dist-doc.tar
+
+.PHONY: dist-tar
+dist-tar: bin/dist-tar.tar
+
+bin/dist-tar.tar: bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION).makefile.tar.gz
+ rm -rf bin/dist-tar.tar
+ cd bin/dist-tar/ && rm -rf libopenmpt
+ cd bin/dist-tar/ && mkdir -p libopenmpt/src.makefile/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-tar/ && cp libopenmpt-$(DIST_LIBOPENMPT_VERSION).makefile.tar.gz libopenmpt/src.makefile/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-tar/ && tar cv --numeric-owner --owner=0 --group=0 -f ../dist-tar.tar libopenmpt
+
+.PHONY: dist-zip
+dist-zip: bin/dist-zip.tar
+
+bin/dist-zip.tar: bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION).msvc.zip
+ rm -rf bin/dist-zip.tar
+ cd bin/dist-zip/ && rm -rf libopenmpt
+ cd bin/dist-zip/ && mkdir -p libopenmpt/src.msvc/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-zip/ && cp libopenmpt-$(DIST_LIBOPENMPT_VERSION).msvc.zip libopenmpt/src.msvc/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-zip/ && tar cv --numeric-owner --owner=0 --group=0 -f ../dist-zip.tar libopenmpt
+
+.PHONY: dist-doc
+dist-doc: bin/dist-doc.tar
+
+bin/dist-doc.tar: bin/dist-doc/libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc.tar.gz
+ rm -rf bin/dist-doc.tar
+ cd bin/dist-doc/ && rm -rf libopenmpt
+ cd bin/dist-doc/ && mkdir -p libopenmpt/doc/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-doc/ && cp libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc.tar.gz libopenmpt/doc/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-doc/ && tar cv --numeric-owner --owner=0 --group=0 -f ../dist-doc.tar libopenmpt
+
+.PHONY: dist-js
+dist-js: bin/dist-js.tar
+
+bin/dist-js.tar: bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION).dev.js.tar.gz
+ rm -rf bin/dist-js.tar
+ cd bin/dist-js/ && rm -rf libopenmpt
+ cd bin/dist-js/ && mkdir -p libopenmpt/dev.js/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-js/ && cp libopenmpt-$(DIST_LIBOPENMPT_VERSION).dev.js.tar.gz libopenmpt/dev.js/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-js/ && tar cv --numeric-owner --owner=0 --group=0 -f ../dist-js.tar libopenmpt
+
+.PHONY: dist-dos
+dist-dos: bin/dist-dos.tar
+
+bin/dist-dos.tar: bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.dos.zip
+ rm -rf bin/dist-dos.tar
+ cd bin/dist-dos/ && rm -rf libopenmpt
+ cd bin/dist-dos/ && mkdir -p libopenmpt/bin.dos/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-dos/ && cp libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.dos.zip libopenmpt/bin.dos/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-dos/ && tar cv --numeric-owner --owner=0 --group=0 -f ../dist-dos.tar libopenmpt
+
+.PHONY: dist-retro-win9x
+dist-retro-win9x: bin/dist-retro-win9x.tar
+
+bin/dist-retro-win9x.tar: bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.retro.win9x.zip
+ rm -rf bin/dist-retro-win9x.tar
+ cd bin/dist-retro-win9x/ && rm -rf libopenmpt
+ cd bin/dist-retro-win9x/ && mkdir -p libopenmpt/bin.retro.win9x/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-retro-win9x/ && cp libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.retro.win9x.zip libopenmpt/bin.retro.win9x/$(DIST_LIBOPENMPT_TARBALL_VERSION)/
+ cd bin/dist-retro-win9x/ && tar cv --numeric-owner --owner=0 --group=0 -f ../dist-retro-win9x.tar libopenmpt
+
+.PHONY: bin/dist.mk
+bin/dist.mk:
+ rm -rf $@
+ echo > $@.tmp
+ echo 'MPT_SVNVERSION=$(MPT_SVNVERSION)' >> $@.tmp
+ echo 'MPT_SVNURL=$(MPT_SVNURL)' >> $@.tmp
+ echo 'MPT_SVNDATE=$(MPT_SVNDATE)' >> $@.tmp
+ mv $@.tmp $@
+
+.PHONY: bin/svn_version_dist.h
+bin/svn_version_dist.h:
+ rm -rf $@
+ echo > $@.tmp
+ echo '#pragma once' >> $@.tmp
+ echo '#define OPENMPT_VERSION_SVNVERSION "$(MPT_SVNVERSION)"' >> $@.tmp
+ echo '#define OPENMPT_VERSION_REVISION $(MPT_SVNREVISION)' >> $@.tmp
+ echo '#define OPENMPT_VERSION_DIRTY $(MPT_SVNDIRTY)' >> $@.tmp
+ echo '#define OPENMPT_VERSION_MIXEDREVISIONS $(MPT_SVNMIXED)' >> $@.tmp
+ echo '#define OPENMPT_VERSION_URL "$(MPT_SVNURL)"' >> $@.tmp
+ echo '#define OPENMPT_VERSION_DATE "$(MPT_SVNDATE)"' >> $@.tmp
+ echo '#define OPENMPT_VERSION_IS_PACKAGE 1' >> $@.tmp
+ echo >> $@.tmp
+ mv $@.tmp $@
+
+.PHONY: bin/dist-doc/libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc.tar
+bin/dist-doc/libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc.tar: docs
+ mkdir -p bin/dist-doc
+ rm -rf bin/dist-doc/libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc
+ mkdir -p bin/dist-doc/libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc
+ cp -Rv bin/docs/html bin/dist-doc/libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc/docs
+ cd bin/dist-doc/ && tar cv --numeric-owner --owner=0 --group=0 libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc > libopenmpt-$(DIST_LIBOPENMPT_VERSION).doc.tar
+
+.PHONY: bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION).makefile.tar
+bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION).makefile.tar: bin/dist.mk bin/svn_version_dist.h
+ mkdir -p bin/dist-tar
+ rm -rf bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build
+ mkdir -p bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/doc
+ mkdir -p bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include
+ mkdir -p bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src
+ mkdir -p bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt
+ mkdir -p bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt
+ svn export ./LICENSE bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSE
+ svn export ./README.md bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/README.md
+ svn export ./Makefile bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Makefile
+ svn export ./.clang-format bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/.clang-format
+ svn export ./bin bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin
+ svn export ./build/android_ndk bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/android_ndk
+ svn export ./build/make bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/make
+ svn export ./build/svn_version bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/svn_version
+ svn export ./common bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/common
+ svn export ./doc/contributing.md bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/doc/contributing.md
+ svn export ./doc/libopenmpt_styleguide.md bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/doc/libopenmpt_styleguide.md
+ svn export ./doc/module_formats.md bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/doc/module_formats.md
+ svn export ./soundlib bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/soundlib
+ svn export ./sounddsp bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/sounddsp
+ svn export ./src/mpt/.clang-format bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/.clang-format
+ svn export ./src/mpt/LICENSE.BSD-3-Clause.txt bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/LICENSE.BSD-3-Clause.txt
+ svn export ./src/mpt/LICENSE.BSL-1.0.txt bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/LICENSE.BSL-1.0.txt
+ svn export ./src/mpt/audio bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/audio
+ svn export ./src/mpt/base bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/base
+ svn export ./src/mpt/binary bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/binary
+ svn export ./src/mpt/check bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/check
+ svn export ./src/mpt/crc bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/crc
+ #svn export ./src/mpt/crypto bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/crypto
+ svn export ./src/mpt/detect bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/detect
+ svn export ./src/mpt/endian bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/endian
+ svn export ./src/mpt/environment bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/environment
+ svn export ./src/mpt/exception_text bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/exception_text
+ svn export ./src/mpt/format bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/format
+ svn export ./src/mpt/io bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/io
+ svn export ./src/mpt/io_read bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/io_read
+ svn export ./src/mpt/io_write bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/io_write
+ #svn export ./src/mpt/json bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/json
+ #svn export ./src/mpt/library bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/library
+ svn export ./src/mpt/mutex bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/mutex
+ svn export ./src/mpt/out_of_memory bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/out_of_memory
+ svn export ./src/mpt/osinfo bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/osinfo
+ svn export ./src/mpt/parse bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/parse
+ #svn export ./src/mpt/path bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/path
+ svn export ./src/mpt/random bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/random
+ svn export ./src/mpt/string bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/string
+ svn export ./src/mpt/string_transcode bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/string_transcode
+ svn export ./src/mpt/system_error bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/system_error
+ svn export ./src/mpt/test bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/test
+ svn export ./src/mpt/uuid bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/uuid
+ #svn export ./src/mpt/uuid_namespace bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/uuid_namespace
+ svn export ./src/openmpt/all bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/all
+ svn export ./src/openmpt/base bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/base
+ svn export ./src/openmpt/logging bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/logging
+ svn export ./src/openmpt/random bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/random
+ svn export ./src/openmpt/soundbase bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/soundbase
+ svn export ./test bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/test
+ rm bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/test/mpt_tests_crypto.cpp
+ rm bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/test/mpt_tests_uuid_namespace.cpp
+ svn export ./libopenmpt bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/libopenmpt
+ svn export ./examples bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/examples
+ svn export ./openmpt123 bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/openmpt123
+ svn export ./contrib bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/contrib
+ svn export ./include/allegro42 bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/allegro42
+ svn export ./include/cwsdpmi bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/cwsdpmi
+ svn export ./include/minimp3 bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/minimp3
+ svn export ./include/miniz bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/miniz
+ svn export ./include/stb_vorbis bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/stb_vorbis
+ cp bin/dist.mk bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/dist.mk
+ cp bin/svn_version_dist.h bin/dist-tar/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/svn_version/svn_version.h
+ cd bin/dist-tar/ && tar cv --numeric-owner --owner=0 --group=0 libopenmpt-$(DIST_LIBOPENMPT_VERSION) > libopenmpt-$(DIST_LIBOPENMPT_VERSION).makefile.tar
+
+.PHONY: bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION).msvc.zip
+bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION).msvc.zip: bin/dist.mk bin/svn_version_dist.h
+ mkdir -p bin/dist-zip
+ rm -rf bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/genie
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/premake
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/doc
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt
+ mkdir -p bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt
+ svn export ./LICENSE bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSE --native-eol CRLF
+ svn export ./README.md bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/README.md --native-eol CRLF
+ svn export ./Makefile bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Makefile --native-eol CRLF
+ svn export ./.clang-format bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/.clang-format --native-eol CRLF
+ svn export ./bin bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin --native-eol CRLF
+ svn export ./build/genie/def bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/genie/def --native-eol CRLF
+ svn export ./build/premake/def bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/premake/def --native-eol CRLF
+ svn export ./build/premake/inc bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/premake/inc --native-eol CRLF
+ svn export ./build/premake/lnk bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/premake/lnk --native-eol CRLF
+ svn export ./build/scriptlib bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/scriptlib --native-eol CRLF
+ svn export ./build/svn_version bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/svn_version --native-eol CRLF
+ svn export ./build/vs bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs --native-eol CRLF
+ svn export ./build/vs2017winxp bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2017winxp --native-eol CRLF
+ svn export ./build/vs2017win7 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2017win7 --native-eol CRLF
+ svn export ./build/vs2017win10 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2017win10 --native-eol CRLF
+ svn export ./build/vs2017uwp bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2017uwp --native-eol CRLF
+ svn export ./build/vs2019win7 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2019win7 --native-eol CRLF
+ svn export ./build/vs2019win81 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2019win81 --native-eol CRLF
+ svn export ./build/vs2019win10 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2019win10 --native-eol CRLF
+ svn export ./build/vs2019uwp bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2019uwp --native-eol CRLF
+ svn export ./build/vs2022win7 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2022win7 --native-eol CRLF
+ svn export ./build/vs2022win81 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2022win81 --native-eol CRLF
+ svn export ./build/vs2022win10 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2022win10 --native-eol CRLF
+ svn export ./build/vs2022uwp bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2022uwp --native-eol CRLF
+ svn export ./build/vs2022win10clang bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/vs2022win10clang --native-eol CRLF
+ svn export ./build/download_externals.cmd bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/download_externals.cmd --native-eol CRLF
+ svn export ./common bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/common --native-eol CRLF
+ svn export ./doc/contributing.md bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/doc/contributing.md --native-eol CRLF
+ svn export ./doc/libopenmpt_styleguide.md bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/doc/libopenmpt_styleguide.md --native-eol CRLF
+ svn export ./doc/module_formats.md bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/doc/module_formats.md --native-eol CRLF
+ svn export ./soundlib bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/soundlib --native-eol CRLF
+ svn export ./sounddsp bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/sounddsp --native-eol CRLF
+ svn export ./src/mpt/.clang-format bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/.clang-format --native-eol CRLF
+ svn export ./src/mpt/LICENSE.BSD-3-Clause.txt bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/LICENSE.BSD-3-Clause.txt --native-eol CRLF
+ svn export ./src/mpt/LICENSE.BSL-1.0.txt bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/LICENSE.BSL-1.0.txt --native-eol CRLF
+ svn export ./src/mpt/audio bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/audio --native-eol CRLF
+ svn export ./src/mpt/base bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/base --native-eol CRLF
+ svn export ./src/mpt/binary bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/binary --native-eol CRLF
+ svn export ./src/mpt/check bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/check --native-eol CRLF
+ svn export ./src/mpt/crc bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/crc --native-eol CRLF
+ #svn export ./src/mpt/crypto bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/crypto --native-eol CRLF
+ svn export ./src/mpt/detect bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/detect --native-eol CRLF
+ svn export ./src/mpt/endian bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/endian --native-eol CRLF
+ svn export ./src/mpt/environment bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/environment --native-eol CRLF
+ svn export ./src/mpt/exception_text bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/exception_text --native-eol CRLF
+ svn export ./src/mpt/format bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/format --native-eol CRLF
+ svn export ./src/mpt/io bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/io --native-eol CRLF
+ svn export ./src/mpt/io_read bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/io_read --native-eol CRLF
+ svn export ./src/mpt/io_write bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/io_write --native-eol CRLF
+ #svn export ./src/mpt/json bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/json --native-eol CRLF
+ #svn export ./src/mpt/library bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/library --native-eol CRLF
+ svn export ./src/mpt/mutex bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/mutex --native-eol CRLF
+ svn export ./src/mpt/out_of_memory bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/out_of_memory --native-eol CRLF
+ svn export ./src/mpt/osinfo bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/osinfo --native-eol CRLF
+ svn export ./src/mpt/parse bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/parse --native-eol CRLF
+ #svn export ./src/mpt/path bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/path --native-eol CRLF
+ svn export ./src/mpt/random bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/random --native-eol CRLF
+ svn export ./src/mpt/string bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/string --native-eol CRLF
+ svn export ./src/mpt/string_transcode bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/string_transcode --native-eol CRLF
+ svn export ./src/mpt/system_error bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/system_error --native-eol CRLF
+ svn export ./src/mpt/test bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/test --native-eol CRLF
+ svn export ./src/mpt/uuid bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/uuid --native-eol CRLF
+ #svn export ./src/mpt/uuid_namespace bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/mpt/uuid_namespace --native-eol CRLF
+ svn export ./src/openmpt/all bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/all --native-eol CRLF
+ svn export ./src/openmpt/base bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/base --native-eol CRLF
+ svn export ./src/openmpt/logging bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/logging --native-eol CRLF
+ svn export ./src/openmpt/random bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/random --native-eol CRLF
+ svn export ./src/openmpt/soundbase bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/src/openmpt/soundbase --native-eol CRLF
+ svn export ./test bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/test --native-eol CRLF
+ rm bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/test/mpt_tests_crypto.cpp
+ rm bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/test/mpt_tests_uuid_namespace.cpp
+ svn export ./libopenmpt bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/libopenmpt --native-eol CRLF
+ svn export ./examples bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/examples --native-eol CRLF
+ svn export ./openmpt123 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/openmpt123 --native-eol CRLF
+ svn export ./contrib bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/contrib --native-eol CRLF
+ svn export ./include/minimp3 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/minimp3 --native-eol CRLF
+ svn export ./include/miniz bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/miniz --native-eol CRLF
+ svn export ./include/mpg123 bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/mpg123 --native-eol CRLF
+ svn export ./include/flac bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/flac --native-eol CRLF
+ svn export ./include/portaudio bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/portaudio --native-eol CRLF
+ svn export ./include/ogg bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/ogg --native-eol CRLF
+ svn export ./include/pugixml bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/pugixml --native-eol CRLF
+ svn export ./include/stb_vorbis bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/stb_vorbis --native-eol CRLF
+ svn export ./include/vorbis bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/vorbis --native-eol CRLF
+ svn export ./include/winamp bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/winamp --native-eol CRLF
+ svn export ./include/xmplay bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/xmplay --native-eol CRLF
+ svn export ./include/zlib bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/include/zlib --native-eol CRLF
+ cp bin/dist.mk bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/dist.mk
+ cp bin/svn_version_dist.h bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/build/svn_version/svn_version.h
+ cd bin/dist-zip/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/ && zip -r ../libopenmpt-$(DIST_LIBOPENMPT_VERSION).msvc.zip --compression-method deflate -9 *
+
+.PHONY: bin/dist-zip/OpenMPT-src-$(DIST_OPENMPT_VERSION).zip
+bin/dist-zip/OpenMPT-src-$(DIST_OPENMPT_VERSION).zip: bin/svn_version_dist.h
+ mkdir -p bin/dist-zip
+ rm -rf bin/dist-zip/OpenMPT-src-$(DIST_OPENMPT_VERSION)
+ svn export ./ bin/dist-zip/OpenMPT-src-$(DIST_OPENMPT_VERSION)/ --native-eol CRLF
+ cp bin/svn_version_dist.h bin/dist-zip/OpenMPT-src-$(DIST_OPENMPT_VERSION)/common/svn_version_default/svn_version.h
+ cd bin/dist-zip/OpenMPT-src-$(DIST_OPENMPT_VERSION)/ && zip -r ../OpenMPT-src-$(DIST_OPENMPT_VERSION).zip --compression-method deflate -9 *
+
+.PHONY: bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION).dev.js.tar
+bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION).dev.js.tar:
+ mkdir -p bin/dist-js
+ rm -rf bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/licenses
+ svn export ./LICENSE bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/license.txt
+ svn export ./src/mpt/LICENSE.BSD-3-Clause.txt bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/licenses/license.mpt.BSD-3-Clause.txt
+ svn export ./src/mpt/LICENSE.BSL-1.0.txt bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/licenses/license.mpt.BSL-1.0.txt
+ svn export ./include/minimp3/LICENSE bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/licenses/license.minimp3.txt
+ svn export ./include/miniz/miniz.c bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/licenses/license.miniz.txt
+ svn export ./include/stb_vorbis/stb_vorbis.c bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/licenses/license.stb_vorbis.txt
+ mkdir -p bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin
+ mkdir -p bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/all
+ cp bin/stage/all/libopenmpt.js bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/all/libopenmpt.js
+ cp bin/stage/all/libopenmpt.js.mem bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/all/libopenmpt.js.mem
+ cp bin/stage/all/libopenmpt.wasm bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/all/libopenmpt.wasm
+ cp bin/stage/all/libopenmpt.wasm.js bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/all/libopenmpt.wasm.js
+ mkdir -p bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/wasm
+ cp bin/stage/wasm/libopenmpt.js bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/wasm/libopenmpt.js
+ cp bin/stage/wasm/libopenmpt.wasm bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/wasm/libopenmpt.wasm
+ mkdir -p bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/js
+ cp bin/stage/js/libopenmpt.js bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/js/libopenmpt.js
+ cp bin/stage/js/libopenmpt.js.mem bin/dist-js/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/bin/js/libopenmpt.js.mem
+ cd bin/dist-js/ && tar cv --numeric-owner --owner=0 --group=0 libopenmpt-$(DIST_LIBOPENMPT_VERSION) > libopenmpt-$(DIST_LIBOPENMPT_VERSION).dev.js.tar
+
+.PHONY: bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.dos.zip
+bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.dos.zip:
+ mkdir -p bin/dist-dos
+ rm -rf bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES
+ svn export ./LICENSE bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSE.TXT --native-eol CRLF
+ svn export ./src/mpt/LICENSE.BSD-3-Clause.txt bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/MPT_BSD3.TXT --native-eol CRLF
+ svn export ./src/mpt/LICENSE.BSL-1.0.txt bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/MPT_BSL1.TXT --native-eol CRLF
+ cp include/allegro42/readme.txt bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/ALLEGRO.TXT
+ cp include/cwsdpmi/bin/cwsdpmi.doc bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/CWSDPMI.TXT
+ifeq ($(ALLOW_LGPL),1)
+ svn export ./include/mpg123/COPYING bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/MPG123.TXT --native-eol CRLF
+ svn export ./include/mpg123/AUTHORS bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/MPG123_A.TXT --native-eol CRLF
+ svn export ./include/vorbis/COPYING bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/VORBIS.TXT --native-eol CRLF
+ svn export ./include/zlib/README bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/ZLIB.TXT --native-eol CRLF
+else
+ svn export ./include/minimp3/LICENSE bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/MINIMP3.TXT --native-eol CRLF
+ svn export ./include/miniz/miniz.c bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/MINIZ.TXT --native-eol CRLF
+ svn export ./include/stb_vorbis/stb_vorbis.c bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSES/STBVORB.TXT --native-eol CRLF
+endif
+ mkdir -p bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/SRC
+ cp build/externals/csdpmi7s.zip bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/SRC/CSDPMI7S.ZIP
+ mkdir -p bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN
+ cp bin/openmpt123.exe bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN/OMPT123.EXE
+ cp include/cwsdpmi/bin/cwsdpmi.doc bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN/CWSDPMI.DOC
+ cp include/cwsdpmi/bin/CWSDPMI.EXE bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN/CWSDPMI.EXE
+ cp include/cwsdpmi/bin/CWSDPR0.EXE bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN/CWSDPR0.EXE
+ cp include/cwsdpmi/bin/cwsparam.doc bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN/CWSPARAM.DOC
+ cp include/cwsdpmi/bin/CWSPARAM.EXE bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN/CWSPARAM.EXE
+ cp include/cwsdpmi/bin/CWSDSTUB.EXE bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN/CWSDSTUB.EXE
+ cp include/cwsdpmi/bin/CWSDSTR0.EXE bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/BIN/CWSDSTR0.EXE
+ cd bin/dist-dos/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/ && zip -r ../libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.dos.zip --compression-method deflate -9 *
+
+.PHONY: bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.retro.win9x.zip
+bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.retro.win9x.zip:
+ mkdir -p bin/dist-retro-win9x
+ rm -rf bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)
+ mkdir -p bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses
+ svn export ./LICENSE bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/LICENSE.TXT --native-eol CRLF
+ svn export ./libopenmpt/dox/changelog.md bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Changelog.txt --native-eol CRLF
+ svn export ./src/mpt/LICENSE.BSD-3-Clause.txt bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/license.mpt.BSD-3-Clause.txt --native-eol CRLF
+ svn export ./src/mpt/LICENSE.BSL-1.0.txt bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/license.mpt.BSL-1.0.txt --native-eol CRLF
+ifeq ($(ALLOW_LGPL),1)
+ svn export ./include/mpg123/COPYING bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/License.mpg123.txt --native-eol CRLF
+ svn export ./include/mpg123/AUTHORS bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/License.Authors.txt --native-eol CRLF
+ svn export ./include/vorbis/COPYING bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/License.Vorbis.txt --native-eol CRLF
+ svn export ./include/zlib/README bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/License.zlib.txt --native-eol CRLF
+else
+ svn export ./include/minimp3/LICENSE bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/License.minimp3.txt --native-eol CRLF
+ svn export ./include/miniz/miniz.c bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/License.miniz.txt --native-eol CRLF
+ svn export ./include/stb_vorbis/stb_vorbis.c bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Licenses/License.stb_vorbis.txt --native-eol CRLF
+endif
+ mkdir -p bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/openmpt123
+ cp bin/openmpt123.exe bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/openmpt123/openmpt123.exe
+ mkdir -p bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/XMPlay
+ svn export ./libopenmpt/doc/xmp-openmpt.txt bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/XMPlay/xmp-openmpt.txt --native-eol CRLF
+ cp bin/xmp-openmpt.dll bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/XMPlay/xmp-openmpt.dll
+ mkdir -p bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Winamp
+ svn export ./libopenmpt/doc/in_openmpt.txt bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Winamp/in_openmpt.txt --native-eol CRLF
+ cp bin/in_openmpt.dll bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/Winamp/in_openmpt.dll
+ cd bin/dist-retro-win9x/libopenmpt-$(DIST_LIBOPENMPT_VERSION)/ && ../../../build/tools/7zip/7z a -tzip -mx=9 ../libopenmpt-$(DIST_LIBOPENMPT_VERSION).bin.retro.win9x.zip *
+
+bin/libopenmpt.a: $(LIBOPENMPT_OBJECTS)
+ $(INFO) [AR] $@
+ $(SILENT)$(AR) $(ARFLAGS) $@ $^
+
+bin/libopenmpt$(SOSUFFIX): $(LIBOPENMPT_OBJECTS)
+ $(INFO) [LD] $@
+ifeq ($(NO_SHARED_LINKER_FLAG),1)
+ $(SILENT)$(LINK.cc) $(LIBOPENMPT_LDFLAGS) $(SO_LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@
+else
+ $(SILENT)$(LINK.cc) -shared $(LIBOPENMPT_LDFLAGS) $(SO_LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@
+endif
+ifeq ($(SHARED_SONAME),1)
+ $(SILENT)mv bin/libopenmpt$(SOSUFFIX) bin/$(LIBOPENMPT_SONAME)
+ $(SILENT)ln -sf $(LIBOPENMPT_SONAME) bin/libopenmpt$(SOSUFFIX)
+endif
+
+bin/openmpt123.1: bin/openmpt123$(EXESUFFIX) openmpt123/openmpt123.h2m
+ $(INFO) [HELP2MAN] $@
+ $(SILENT)help2man --no-discard-stderr --no-info --version-option=--man-version --help-option=--man-help --include=openmpt123/openmpt123.h2m $< > $@
+
+bin/in_openmpt$(SOSUFFIX): $(INOPENMPT_OBJECTS) $(LIBOPENMPT_OBJECTS)
+ $(INFO) [LD] $@
+ifeq ($(NO_SHARED_LINKER_FLAG),1)
+ $(SILENT)$(LINK.cc) $(LIBOPENMPT_LDFLAGS) $(SO_LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@
+else
+ $(SILENT)$(LINK.cc) -shared $(LIBOPENMPT_LDFLAGS) $(SO_LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@
+endif
+
+bin/xmp-openmpt$(SOSUFFIX): $(XMPOPENMPT_OBJECTS) $(LIBOPENMPT_OBJECTS)
+ $(INFO) [LD] $@
+ifeq ($(NO_SHARED_LINKER_FLAG),1)
+ $(SILENT)$(LINK.cc) $(LIBOPENMPT_LDFLAGS) $(SO_LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -lgdi32 -o $@
+else
+ $(SILENT)$(LINK.cc) -shared $(LIBOPENMPT_LDFLAGS) $(SO_LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -lgdi32 -o $@
+endif
+
+openmpt123/openmpt123.o: openmpt123/openmpt123.cpp
+ $(INFO) [CXX] $<
+ $(VERYSILENT)$(CXX) $(CXXFLAGS) $(CXXFLAGS_OPENMPT123) $(CPPFLAGS) $(CPPFLAGS_OPENMPT123) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.cc) $(CXXFLAGS_OPENMPT123) $(CPPFLAGS_OPENMPT123) $(OUTPUT_OPTION) $<
+bin/openmpt123$(EXESUFFIX): $(OPENMPT123_OBJECTS) $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_OPENMPT123) $(OPENMPT123_OBJECTS) $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_OPENMPT123) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_OPENMPT123) $(OPENMPT123_OBJECTS) $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_OPENMPT123) -o $@
+endif
+endif
+
+contrib/fuzzing/fuzz.o: contrib/fuzzing/fuzz.c
+ $(INFO) [CC] $<
+ $(VERYSILENT)$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.c) $(OUTPUT_OPTION) $<
+bin/fuzz$(EXESUFFIX): contrib/fuzzing/fuzz.o $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(LDFLAGS_LIBOPENMPT) contrib/fuzzing/fuzz.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) contrib/fuzzing/fuzz.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) -o $@
+endif
+endif
+
+examples/libopenmpt_example_c.o: examples/libopenmpt_example_c.c
+ $(INFO) [CC] $<
+ $(VERYSILENT)$(CC) $(CFLAGS) $(CFLAGS_PORTAUDIO) $(CPPFLAGS) $(CPPFLAGS_PORTAUDIO) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.c) $(CFLAGS_PORTAUDIO) $(CPPFLAGS_PORTAUDIO) $(OUTPUT_OPTION) $<
+examples/libopenmpt_example_c_mem.o: examples/libopenmpt_example_c_mem.c
+ $(INFO) [CC] $<
+ $(VERYSILENT)$(CC) $(CFLAGS) $(CFLAGS_PORTAUDIO) $(CPPFLAGS) $(CPPFLAGS_PORTAUDIO) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.c) $(CFLAGS_PORTAUDIO) $(CPPFLAGS_PORTAUDIO) $(OUTPUT_OPTION) $<
+examples/libopenmpt_example_c_unsafe.o: examples/libopenmpt_example_c_unsafe.c
+ $(INFO) [CC] $<
+ $(VERYSILENT)$(CC) $(CFLAGS) $(CFLAGS_PORTAUDIO) $(CPPFLAGS) $(CPPFLAGS_PORTAUDIO) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.c) $(CFLAGS_PORTAUDIO) $(CPPFLAGS_PORTAUDIO) $(OUTPUT_OPTION) $<
+examples/libopenmpt_example_c_pipe.o: examples/libopenmpt_example_c_pipe.c
+ $(INFO) [CC] $<
+ $(VERYSILENT)$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.c) $(OUTPUT_OPTION) $<
+examples/libopenmpt_example_c_stdout.o: examples/libopenmpt_example_c_stdout.c
+ $(INFO) [CC] $<
+ $(VERYSILENT)$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.c) $(OUTPUT_OPTION) $<
+examples/libopenmpt_example_c_probe.o: examples/libopenmpt_example_c_probe.c
+ $(INFO) [CC] $<
+ $(VERYSILENT)$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.c) $(OUTPUT_OPTION) $<
+examples/libopenmpt_example_cxx.o: examples/libopenmpt_example_cxx.cpp
+ $(INFO) [CXX] $<
+ $(VERYSILENT)$(CXX) $(CXXFLAGS) $(CXXFLAGS_PORTAUDIOCPP) $(CPPFLAGS) $(CPPFLAGS_PORTAUDIOCPP) $(TARGET_ARCH) -M -MT$@ $< > $*.d
+ $(SILENT)$(COMPILE.cc) $(CXXFLAGS_PORTAUDIOCPP) $(CPPFLAGS_PORTAUDIOCPP) $(OUTPUT_OPTION) $<
+bin/libopenmpt_example_c$(EXESUFFIX): examples/libopenmpt_example_c.o $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_PORTAUDIO) examples/libopenmpt_example_c.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_PORTAUDIO) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(BIN_LDFLAGS)$(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_PORTAUDIO) examples/libopenmpt_example_c.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_PORTAUDIO) -o $@
+endif
+endif
+bin/libopenmpt_example_c_mem$(EXESUFFIX): examples/libopenmpt_example_c_mem.o $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_PORTAUDIO) examples/libopenmpt_example_c_mem.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_PORTAUDIO) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_PORTAUDIO) examples/libopenmpt_example_c_mem.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_PORTAUDIO) -o $@
+endif
+endif
+bin/libopenmpt_example_c_unsafe$(EXESUFFIX): examples/libopenmpt_example_c_unsafe.o $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_PORTAUDIO) examples/libopenmpt_example_c_unsafe.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_PORTAUDIO) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_PORTAUDIO) examples/libopenmpt_example_c_unsafe.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_PORTAUDIO) -o $@
+endif
+endif
+bin/libopenmpt_example_c_pipe$(EXESUFFIX): examples/libopenmpt_example_c_pipe.o $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_LIBOPENMPT) examples/libopenmpt_example_c_pipe.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) examples/libopenmpt_example_c_pipe.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) -o $@
+endif
+endif
+bin/libopenmpt_example_c_stdout$(EXESUFFIX): examples/libopenmpt_example_c_stdout.o $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_LIBOPENMPT) examples/libopenmpt_example_c_stdout.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) examples/libopenmpt_example_c_stdout.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) -o $@
+endif
+endif
+bin/libopenmpt_example_c_probe$(EXESUFFIX): examples/libopenmpt_example_c_probe.o $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_LIBOPENMPT) examples/libopenmpt_example_c_probe.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) examples/libopenmpt_example_c_probe.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) -o $@
+endif
+endif
+bin/libopenmpt_example_cxx$(EXESUFFIX): examples/libopenmpt_example_cxx.o $(OBJECTS_LIBOPENMPT) $(OUTPUT_LIBOPENMPT)
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_PORTAUDIOCPP) examples/libopenmpt_example_cxx.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_PORTAUDIOCPP) -o $@
+ifeq ($(HOST),unix)
+ifeq ($(SHARED_LIB),1)
+ $(SILENT)mv $@ $@.norpath
+ $(INFO) [LD] $@
+ $(SILENT)$(LINK.cc) $(BIN_LDFLAGS) $(LDFLAGS_RPATH) $(LDFLAGS_LIBOPENMPT) $(LDFLAGS_PORTAUDIOCPP) examples/libopenmpt_example_cxx.o $(OBJECTS_LIBOPENMPT) $(LOADLIBES) $(LDLIBS) $(LDLIBS_LIBOPENMPT) $(LDLIBS_PORTAUDIOCPP) -o $@
+endif
+endif
+
+.PHONY: cppcheck-libopenmpt
+cppcheck-libopenmpt:
+ $(INFO) [CPPCHECK] libopenmpt
+ $(SILENT)$(CPPCHECK) -DCPPCHECK -DMPT_CPPCHECK_CUSTOM $(CPPCHECK_FLAGS) $(CPPCHECK_PLATFORM) --check-config --suppress=unmatchedSuppression $(LIBOPENMPT_CXX_SOURCES) $(LIBOPENMPT_C_SOURCES)
+ $(SILENT)$(CPPCHECK) -DCPPCHECK -DMPT_CPPCHECK_CUSTOM $(CPPCHECK_FLAGS) $(CPPCHECK_PLATFORM) $(LIBOPENMPT_CXX_SOURCES) $(LIBOPENMPT_C_SOURCES)
+
+.PHONY: cppcheck-libopenmpt-test
+cppcheck-libopenmpt-test:
+ $(INFO) [CPPCHECK] libopenmpt-test
+ $(SILENT)$(CPPCHECK) -DCPPCHECK -DMPT_CPPCHECK_CUSTOM $(CPPCHECK_FLAGS) $(CPPCHECK_PLATFORM) -DLIBOPENMPT_BUILD_TEST --check-config --suppress=unmatchedSuppression $(LIBOPENMPTTEST_CXX_SOURCES) $(LIBOPENMPTTEST_C_SOURCES)
+ $(SILENT)$(CPPCHECK) -DCPPCHECK -DMPT_CPPCHECK_CUSTOM $(CPPCHECK_FLAGS) $(CPPCHECK_PLATFORM) -DLIBOPENMPT_BUILD_TEST $(LIBOPENMPTTEST_CXX_SOURCES) $(LIBOPENMPTTEST_C_SOURCES)
+
+.PHONY: cppcheck-openmpt123
+cppcheck-openmpt123:
+ $(INFO) [CPPCHECK] openmpt123
+ $(SILENT)$(CPPCHECK) -DCPPCHECK -DMPT_CPPCHECK_CUSTOM $(CPPCHECK_FLAGS) $(CPPCHECK_PLATFORM) --check-config --suppress=unmatchedSuppression $(OPENMPT123_CXX_SOURCES)
+ $(SILENT)$(CPPCHECK) -DCPPCHECK -DMPT_CPPCHECK_CUSTOM $(CPPCHECK_FLAGS) $(CPPCHECK_PLATFORM) $(OPENMPT123_CXX_SOURCES)
+
+.PHONY: cppcheck
+cppcheck: cppcheck-libopenmpt cppcheck-libopenmpt-test cppcheck-openmpt123
+
+.PHONY: clean
+clean:
+ $(INFO) clean ...
+ $(SILENT)$(RM) $(call FIXPATH,$(OUTPUTS) $(ALL_OBJECTS) $(ALL_DEPENDS) $(MISC_OUTPUTS))
+ $(SILENT)$(RMTREE) $(call FIXPATH,$(MISC_OUTPUTDIRS))
+
+.PHONY: clean-dist
+clean-dist:
+ $(INFO) clean-dist ...
+ $(SILENT)$(RM) $(call FIXPATH,$(DIST_OUTPUTS))
+ $(SILENT)$(RMTREE) $(call FIXPATH,$(DIST_OUTPUTDIRS))
+
+.PHONY: distversion
+distversion:
+ $(SILENT)echo "$(DIST_LIBOPENMPT_VERSION)"
+
+.PHONY: distversion-pure
+distversion-pure:
+ $(SILENT)echo "$(DIST_LIBOPENMPT_VERSION_PURE)"
+
+.PHONY: distversion-tarball
+distversion-tarball:
+ $(SILENT)echo "$(DIST_LIBOPENMPT_TARBALL_VERSION)"
diff --git a/Frameworks/OpenMPT/OpenMPT/README.md b/Frameworks/OpenMPT/OpenMPT/README.md
new file mode 100644
index 000000000..c360b99a4
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/README.md
@@ -0,0 +1,86 @@
+
+README
+======
+
+
+OpenMPT and libopenmpt
+======================
+
+This repository contains OpenMPT, a free Windows/Wine-based
+[tracker](https://en.wikipedia.org/wiki/Music_tracker) and libopenmpt,
+a library to render tracker music (MOD, XM, S3M, IT MPTM and dozens of other
+legacy formats) to a PCM audio stream. libopenmpt is directly based on OpenMPT,
+offering the same playback quality and format support, and development of the
+two happens in parallel.
+
+
+License
+-------
+
+The OpenMPT/libopenmpt project is distributed under the *BSD-3-Clause* License.
+See [LICENSE](LICENSE) for the full license text.
+
+Files below the `include/` (external projects) and `contrib/` (related assets
+not directly considered integral part of the project) folders may be subject to
+other licenses. See the respective subfolders for license information. These
+folders are not distributed in all source packages, and in particular they are
+not distributed in the Autotools packages.
+
+
+How to compile
+--------------
+
+
+### OpenMPT
+
+ - Supported Visual Studio versions:
+
+ - Visual Studio 2017, 2019, and 2022 Community/Professional/Enterprise
+
+ To compile the project, open `build/vsVERSIONwin7/OpenMPT.sln` (VERSION
+ being 2017, 2019, or 2022) and hit the compile button. Other target
+ systems can be found in the `vs2017*`, `vs2019*`, and `vs2022*` sibling
+ folders.
+
+ Note that you have to build the `PluginBridge` and `PluginBridgeLegacy`
+ projects manually for architectures other than the one you are building
+ OpenMPT for, as Visual Studio only builds one architecture configuration
+ at a time.
+
+ Please note that we do not support building with a later Visual Studio
+ installation with an earlier compiler version. This is because, while
+ later Visual Studio versions allow installing earlier compilers to be
+ available via the later version's environment, in this configuration,
+ the earlier compiler will still use the later C and C++ runtime's
+ headers and implementation, which significantly increases the matrix of
+ possible configurations to test.
+
+ - OpenMPT requires the compile host system to be Windows 8.1 (or later) amd64,
+ or Windows 11 (or later) ARM64.
+
+ - In order to build OpenMPT for Windows XP, the Visual Studio 2017 XP
+ targetting toolset as well as the Windows 8.1 SDK need to be installed. The
+ SDK is optionally included with Visual Studio 2017, but must be separately
+ installed with later Visual Studio versions.
+
+ The Windows 8.1 SDK is available from
+ or
+ directly from
+
+ .
+
+ - Microsoft Foundation Classes (MFC) are required to build OpenMPT.
+
+
+### libopenmpt and openmpt123
+
+See [Dependencies](libopenmpt/dox/dependencies.md) and
+[Getting Started](libopenmpt/dox/gettingstarted.md).
+
+
+Contributing to OpenMPT/libopenmpt
+----------------------------------
+
+
+See [contributing](doc/contributing.md).
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/android_ndk/Android.mk b/Frameworks/OpenMPT/OpenMPT/build/android_ndk/Android.mk
new file mode 100644
index 000000000..48291c875
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/android_ndk/Android.mk
@@ -0,0 +1,222 @@
+
+LOCAL_PATH := $(call my-dir)
+
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := openmpt
+
+LOCAL_CFLAGS +=#-std=c99
+LOCAL_CPPFLAGS += -std=c++17 -fexceptions -frtti
+
+LOCAL_CPP_FEATURES += exceptions rtti
+
+LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/src $(LOCAL_PATH)/common $(LOCAL_PATH)/build/svn_version
+
+LOCAL_CFLAGS += -fvisibility=hidden -Wall -DLIBOPENMPT_BUILD -DMPT_WITH_ZLIB
+LOCAL_CPPFLAGS +=#-fvisibility=hidden -Wall -DLIBOPENMPT_BUILD -DMPT_WITH_ZLIB
+LOCAL_LDLIBS += -lz
+
+MPT_SVNURL?=
+MPT_SVNVERSION?=
+MPT_SVNDATE?=
+ifneq ($(MPT_SVNURL),)
+LOCAL_CFLAGS += -D MPT_SVNURL=\"$(MPT_SVNURL)\"
+LOCAL_CPPFLAGS +=#-D MPT_SVNURL=\"$(MPT_SVNURL)\"
+endif
+ifneq ($(MPT_SVNVERSION),)
+LOCAL_CFLAGS += -D MPT_SVNVERSION=\"$(MPT_SVNVERSION)\"
+LOCAL_CPPFLAGS +=#-D MPT_SVNVERSION=\"$(MPT_SVNVERSION)\"
+endif
+ifneq ($(MPT_SVNDATE),)
+LOCAL_CFLAGS += -D MPT_SVNDATE=\"$(MPT_SVNDATE)\"
+LOCAL_CPPFLAGS +=#-D MPT_SVNDATE=\"$(MPT_SVNDATE)\"
+endif
+
+
+LOCAL_SRC_FILES :=
+
+ifeq ($(MPT_WITH_MINIMP3),1)
+LOCAL_CFLAGS += -DMPT_WITH_MINIMP3
+LOCAL_CPPFLAGS +=#-DMPT_WITH_MINIMP3
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
+LOCAL_SRC_FILES += include/minimp3/minimp3.c
+LOCAL_LDLIBS +=
+endif
+
+ifeq ($(MPT_WITH_MPG123),1)
+LOCAL_CFLAGS += -DMPT_WITH_MPG123
+LOCAL_CPPFLAGS +=#-DMPT_WITH_MPG123
+LOCAL_C_INCLUDES +=
+LOCAL_SRC_FILES +=
+LOCAL_LDLIBS += -lmpg123
+endif
+
+ifeq ($(MPT_WITH_OGG),1)
+LOCAL_CFLAGS += -DMPT_WITH_OGG
+LOCAL_CPPFLAGS +=#-DMPT_WITH_OGG
+LOCAL_C_INCLUDES +=
+LOCAL_SRC_FILES +=
+LOCAL_LDLIBS += -logg
+endif
+
+ifeq ($(MPT_WITH_STBVORBIS),1)
+LOCAL_CFLAGS += -DMPT_WITH_STBVORBIS
+LOCAL_CPPFLAGS +=#-DMPT_WITH_STBVORBIS
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
+LOCAL_SRC_FILES += include/stb_vorbis/stb_vorbis.c
+LOCAL_LDLIBS +=
+endif
+
+ifeq ($(MPT_WITH_VORBIS),1)
+LOCAL_CFLAGS += -DMPT_WITH_VORBIS
+LOCAL_CPPFLAGS +=#-DMPT_WITH_VORBIS
+LOCAL_C_INCLUDES +=
+LOCAL_SRC_FILES +=
+LOCAL_LDLIBS += -lvorbis
+endif
+
+ifeq ($(MPT_WITH_VORBISFILE),1)
+LOCAL_CFLAGS += -DMPT_WITH_VORBISFILE
+LOCAL_CPPFLAGS +=#-DMPT_WITH_VORBISFILE
+LOCAL_C_INCLUDES +=
+LOCAL_SRC_FILES +=
+LOCAL_LDLIBS += -lvorbisfile
+endif
+
+LOCAL_SRC_FILES += \
+ common/ComponentManager.cpp \
+ common/Logging.cpp \
+ common/mptFileIO.cpp \
+ common/mptPathString.cpp \
+ common/mptRandom.cpp \
+ common/mptString.cpp \
+ common/mptStringBuffer.cpp \
+ common/mptStringFormat.cpp \
+ common/mptStringParse.cpp \
+ common/mptTime.cpp \
+ common/Profiler.cpp \
+ common/serialization_utils.cpp \
+ common/version.cpp \
+ libopenmpt/libopenmpt_c.cpp \
+ libopenmpt/libopenmpt_cxx.cpp \
+ libopenmpt/libopenmpt_impl.cpp \
+ libopenmpt/libopenmpt_ext_impl.cpp \
+ soundlib/AudioCriticalSection.cpp \
+ soundlib/ContainerMMCMP.cpp \
+ soundlib/ContainerPP20.cpp \
+ soundlib/ContainerUMX.cpp \
+ soundlib/ContainerXPK.cpp \
+ soundlib/Dlsbank.cpp \
+ soundlib/Fastmix.cpp \
+ soundlib/InstrumentExtensions.cpp \
+ soundlib/ITCompression.cpp \
+ soundlib/ITTools.cpp \
+ soundlib/Load_669.cpp \
+ soundlib/Load_amf.cpp \
+ soundlib/Load_ams.cpp \
+ soundlib/Load_c67.cpp \
+ soundlib/Load_dbm.cpp \
+ soundlib/Load_digi.cpp \
+ soundlib/Load_dmf.cpp \
+ soundlib/Load_dsm.cpp \
+ soundlib/Load_dsym.cpp \
+ soundlib/Load_dtm.cpp \
+ soundlib/Load_far.cpp \
+ soundlib/Load_fmt.cpp \
+ soundlib/Load_gdm.cpp \
+ soundlib/Load_imf.cpp \
+ soundlib/Load_it.cpp \
+ soundlib/Load_itp.cpp \
+ soundlib/load_j2b.cpp \
+ soundlib/Load_mdl.cpp \
+ soundlib/Load_med.cpp \
+ soundlib/Load_mid.cpp \
+ soundlib/Load_mo3.cpp \
+ soundlib/Load_mod.cpp \
+ soundlib/Load_mt2.cpp \
+ soundlib/Load_mtm.cpp \
+ soundlib/Load_mus_km.cpp \
+ soundlib/Load_okt.cpp \
+ soundlib/Load_plm.cpp \
+ soundlib/Load_psm.cpp \
+ soundlib/Load_ptm.cpp \
+ soundlib/Load_s3m.cpp \
+ soundlib/Load_sfx.cpp \
+ soundlib/Load_stm.cpp \
+ soundlib/Load_stp.cpp \
+ soundlib/Load_symmod.cpp \
+ soundlib/Load_ult.cpp \
+ soundlib/Load_uax.cpp \
+ soundlib/Load_wav.cpp \
+ soundlib/Load_xm.cpp \
+ soundlib/Message.cpp \
+ soundlib/MIDIEvents.cpp \
+ soundlib/MIDIMacros.cpp \
+ soundlib/MixerLoops.cpp \
+ soundlib/MixerSettings.cpp \
+ soundlib/MixFuncTable.cpp \
+ soundlib/ModChannel.cpp \
+ soundlib/modcommand.cpp \
+ soundlib/ModInstrument.cpp \
+ soundlib/ModSample.cpp \
+ soundlib/ModSequence.cpp \
+ soundlib/modsmp_ctrl.cpp \
+ soundlib/mod_specifications.cpp \
+ soundlib/MPEGFrame.cpp \
+ soundlib/OggStream.cpp \
+ soundlib/OPL.cpp \
+ soundlib/Paula.cpp \
+ soundlib/patternContainer.cpp \
+ soundlib/pattern.cpp \
+ soundlib/RowVisitor.cpp \
+ soundlib/S3MTools.cpp \
+ soundlib/SampleFormats.cpp \
+ soundlib/SampleFormatBRR.cpp \
+ soundlib/SampleFormatFLAC.cpp \
+ soundlib/SampleFormatMediaFoundation.cpp \
+ soundlib/SampleFormatMP3.cpp \
+ soundlib/SampleFormatOpus.cpp \
+ soundlib/SampleFormatSFZ.cpp \
+ soundlib/SampleFormatVorbis.cpp \
+ soundlib/SampleIO.cpp \
+ soundlib/Sndfile.cpp \
+ soundlib/Snd_flt.cpp \
+ soundlib/Snd_fx.cpp \
+ soundlib/Sndmix.cpp \
+ soundlib/SoundFilePlayConfig.cpp \
+ soundlib/UMXTools.cpp \
+ soundlib/UpgradeModule.cpp \
+ soundlib/Tables.cpp \
+ soundlib/Tagging.cpp \
+ soundlib/TinyFFT.cpp \
+ soundlib/tuningCollection.cpp \
+ soundlib/tuning.cpp \
+ soundlib/WAVTools.cpp \
+ soundlib/WindowedFIR.cpp \
+ soundlib/XMTools.cpp \
+ soundlib/plugins/DigiBoosterEcho.cpp \
+ soundlib/plugins/dmo/DMOPlugin.cpp \
+ soundlib/plugins/dmo/DMOUtils.cpp \
+ soundlib/plugins/dmo/Chorus.cpp \
+ soundlib/plugins/dmo/Compressor.cpp \
+ soundlib/plugins/dmo/Distortion.cpp \
+ soundlib/plugins/dmo/Echo.cpp \
+ soundlib/plugins/dmo/Flanger.cpp \
+ soundlib/plugins/dmo/Gargle.cpp \
+ soundlib/plugins/dmo/I3DL2Reverb.cpp \
+ soundlib/plugins/dmo/ParamEq.cpp \
+ soundlib/plugins/dmo/WavesReverb.cpp \
+ soundlib/plugins/LFOPlugin.cpp \
+ soundlib/plugins/PluginManager.cpp \
+ soundlib/plugins/PlugInterface.cpp \
+ soundlib/plugins/SymMODEcho.cpp \
+ sounddsp/AGC.cpp \
+ sounddsp/DSP.cpp \
+ sounddsp/EQ.cpp \
+ sounddsp/Reverb.cpp \
+ test/TestToolsLib.cpp \
+ test/test.cpp
+
+include $(BUILD_SHARED_LIBRARY)
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/android_ndk/Application.mk b/Frameworks/OpenMPT/OpenMPT/build/android_ndk/Application.mk
new file mode 100644
index 000000000..6b0c65285
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/android_ndk/Application.mk
@@ -0,0 +1,5 @@
+
+APP_CFLAGS :=#-std=c99
+APP_CPPFLAGS := -std=c++17 -fexceptions -frtti
+APP_LDFLAGS :=
+APP_STL := c++_shared
diff --git a/Frameworks/OpenMPT/OpenMPT/build/android_ndk/README.AndroidNDK.txt b/Frameworks/OpenMPT/OpenMPT/build/android_ndk/README.AndroidNDK.txt
new file mode 100644
index 000000000..248c36c78
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/android_ndk/README.AndroidNDK.txt
@@ -0,0 +1,21 @@
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+This is preliminary documentation.
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ 0. The minimum required Android NDK version is r18b.
+ 1. Copy the whole libopenmpt source tree below your jni directory.
+ 2. Copy build/android_ndk/* into the root of libopenmpt, i.e. also into the
+ jni directory and adjust as needed.
+ 3. If you want to support MO3 decoding, you have to either make libmpg123,
+ libogg, libvorbis and libvorbisfile available (recommended) OR build
+ libopenmpt with minimp3 and stb_vorbis support (not recommended).
+ Pass the appropriate options to ndk-build:
+ MPT_WITH_MINIMP3=1 : Build minimp3 into libopenmpt
+ MPT_WITH_MPG123=1 : Link against libmpg123 compiled externally
+ MPT_WITH_OGG=1 : Link against libogg compiled externally
+ MPT_WITH_STBVORBIS=1 : Build stb_vorbis into libopenmpt
+ MPT_WITH_VORBIS=1 : Link against libvorbis compiled externally
+ MPT_WITH_VORBISFILE=1 : Link against libvorbisfile compiled externally
+ 4. Use ndk-build as usual.
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/dist.mk b/Frameworks/OpenMPT/OpenMPT/build/dist.mk
new file mode 100644
index 000000000..2ad7aeae8
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/dist.mk
@@ -0,0 +1,4 @@
+
+MPT_SVNVERSION=17609
+MPT_SVNURL=https://source.openmpt.org/svn/openmpt/branches/OpenMPT-1.30
+MPT_SVNDATE=2022-06-30T15:43:27.573631Z
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-afl.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-afl.mk
new file mode 100644
index 000000000..575215a8b
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-afl.mk
@@ -0,0 +1,56 @@
+
+ifeq ($(origin CC),default)
+CC = contrib/fuzzing/afl/afl-clang-lto
+endif
+ifeq ($(origin CXX),default)
+CXX = contrib/fuzzing/afl/afl-clang-lto++
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = ar
+endif
+
+ifneq ($(STDCXX),)
+CXXFLAGS_STDCXX = -std=$(STDCXX)
+else
+ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++17 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++17' ; fi ), c++17)
+CXXFLAGS_STDCXX = -std=c++17
+endif
+endif
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+DYNLINK=0
+SHARED_LIB=0
+STATIC_LIB=1
+
+CPPFLAGS +=
+CXXFLAGS += -fPIC -fno-strict-aliasing
+CFLAGS += -fPIC -fno-strict-aliasing
+LDFLAGS +=
+LDLIBS += -lm
+ARFLAGS := rcs
+
+CXXFLAGS_WARNINGS += -Wmissing-declarations
+CFLAGS_WARNINGS += -Wmissing-prototypes
+
+ifeq ($(CHECKED_ADDRESS),1)
+CXXFLAGS += -fsanitize=address
+CFLAGS += -fsanitize=address
+endif
+
+ifeq ($(CHECKED_UNDEFINED),1)
+CXXFLAGS += -fsanitize=undefined
+CFLAGS += -fsanitize=undefined
+endif
+
+include build/make/warnings-clang.mk
+
+EXESUFFIX=
+
+FUZZ=1
+CPPFLAGS += -DMPT_BUILD_FUZZER -DMPT_BUILD_FATAL_ASSERTS
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-clang.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-clang.mk
new file mode 100644
index 000000000..e0455e501
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-clang.mk
@@ -0,0 +1,50 @@
+
+ifeq ($(origin CC),default)
+CC = $(TOOLCHAIN_PREFIX)clang$(TOOLCHAIN_SUFFIX)
+endif
+ifeq ($(origin CXX),default)
+CXX = $(TOOLCHAIN_PREFIX)clang++$(TOOLCHAIN_SUFFIX)
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = $(TOOLCHAIN_PREFIX)ar$(TOOLCHAIN_SUFFIX)
+endif
+
+ifneq ($(STDCXX),)
+CXXFLAGS_STDCXX = -std=$(STDCXX)
+else
+ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++17 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++17' ; fi ), c++17)
+CXXFLAGS_STDCXX = -std=c++17
+endif
+endif
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS +=
+CXXFLAGS += -fPIC
+CFLAGS += -fPIC
+LDFLAGS +=
+LDLIBS += -lm
+ARFLAGS := rcs
+
+ifeq ($(OPTIMIZE_LTO),1)
+CXXFLAGS += -flto=thin
+CFLAGS += -flto=thin
+endif
+
+ifeq ($(CHECKED_ADDRESS),1)
+CXXFLAGS += -fsanitize=address
+CFLAGS += -fsanitize=address
+endif
+
+ifeq ($(CHECKED_UNDEFINED),1)
+CXXFLAGS += -fsanitize=undefined
+CFLAGS += -fsanitize=undefined
+endif
+
+include build/make/warnings-clang.mk
+
+EXESUFFIX=
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-defaults.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-defaults.mk
new file mode 100644
index 000000000..bc765dfe4
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-defaults.mk
@@ -0,0 +1,69 @@
+
+ifeq ($(HOST),unix)
+
+ifeq ($(HOST_FLAVOUR),MACOSX)
+
+NO_PULSEAUDIO?=1
+include build/make/config-clang.mk
+# Mac OS X overrides
+DYNLINK=0
+SHARED_SONAME=0
+
+else ifeq ($(HOST_FLAVOUR),MSYS2)
+
+ifeq ($(MSYSTEM),MINGW64)
+WINDOWS_ARCH=amd64
+include build/make/config-mingw-w64.mk
+else ifeq ($(MSYSTEM),MINGW32)
+WINDOWS_ARCH=x86
+include build/make/config-mingw-w64.mk
+else ifeq ($(MSYSTEM),UCRT64)
+WINDOWS_ARCH=amd64
+include build/make/config-mingw-w64.mk
+else ifeq ($(MSYSTEM),CLANG64)
+WINDOWS_ARCH=amd64
+MINGW_COMPILER=clang
+include build/make/config-mingw-w64.mk
+else
+WINDOWS_ARCH=x86
+include build/make/config-mingw-w64.mk
+endif
+
+else ifeq ($(HOST_FLAVOUR),LINUX)
+
+include build/make/config-gcc.mk
+
+else ifeq ($(HOST_FLAVOUR),FREEBSD)
+
+include build/make/config-clang.mk
+NO_LTDL?=1
+NO_PORTAUDIOCPP?=1
+
+else ifeq ($(HOST_FLAVOUR),OPENBSD)
+
+NO_PORTAUDIOCPP?=1
+NO_PULSEAUDIO?=1
+include build/make/config-clang.mk
+
+else ifeq ($(HOST_FLAVOUR),HAIKU)
+
+# In Haiku x86 32bit (but not 64bit),
+# modern compilers need a -x86 suffix.
+UNAME_P:=$(shell uname -p)
+ifeq ($(UNAME_P),x86)
+TOOLCHAIN_SUFFIX=-x86
+endif
+include build/make/config-gcc.mk
+
+else
+
+include build/make/config-generic.mk
+
+endif
+
+else
+
+include build/make/config-generic.mk
+
+endif
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-djgpp.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-djgpp.mk
new file mode 100644
index 000000000..32338f838
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-djgpp.mk
@@ -0,0 +1,88 @@
+
+ifeq ($(origin CC),default)
+CC = i386-pc-msdosdjgpp-gcc
+endif
+ifeq ($(origin CXX),default)
+CXX = i386-pc-msdosdjgpp-g++
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = i386-pc-msdosdjgpp-ar
+endif
+
+# Note that we are using GNU extensions instead of 100% standards-compliant
+# mode, because otherwise DJGPP-specific headers/functions are unavailable.
+CXXFLAGS_STDCXX = -std=gnu++17
+CFLAGS_STDC = -std=gnu99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS +=
+CXXFLAGS += -march=i386 -m80387 -mtune=pentium -ffast-math
+CFLAGS += -march=i386 -m80387 -mtune=pentium -ffast-math
+LDFLAGS +=
+LDLIBS += -lm
+ARFLAGS := rcs
+
+include build/make/warnings-gcc.mk
+
+EXESUFFIX=.exe
+
+DYNLINK=0
+SHARED_LIB=0
+STATIC_LIB=1
+SHARED_SONAME=0
+
+DEBUG=0
+OPTIMIZE=0
+OPTIMIZE_SIZE=1
+
+IS_CROSS=1
+
+# generates warnings
+MPT_COMPILER_NOVISIBILITY=1
+
+# causes crashes on process shutdown,
+# makes memory locking difficult
+MPT_COMPILER_NOGCSECTIONS=1
+
+ifeq ($(ALLOW_LGPL),1)
+LOCAL_ZLIB=1
+LOCAL_MPG123=1
+LOCAL_OGG=1
+LOCAL_VORBIS=1
+else
+NO_ZLIB=1
+NO_MPG123=1
+NO_OGG=1
+NO_VORBIS=1
+NO_VORBISFILE=1
+endif
+
+NO_LTDL=1
+NO_DL=1
+NO_PORTAUDIO=1
+NO_PORTAUDIOCPP=1
+NO_PULSEAUDIO=1
+NO_SDL=1
+NO_SDL2=1
+NO_SNDFILE=1
+NO_FLAC=1
+
+ifeq ($(BUNDLED_ALLEGRO42),1)
+
+CPPFLAGS_ALLEGRO42 := -Iinclude/allegro42/include -DALLEGRO_HAVE_STDINT_H -DLONG_LONG="long long"
+LDFLAGS_ALLEGRO42 :=
+LDLIBS_ALLEGRO42 := include/allegro42/lib/djgpp/liballeg.a
+
+include/allegro42/lib/djgpp/liballeg.a:
+ +cd include/allegro42 && ./xmake.sh clean
+ +cd include/allegro42 && ./xmake.sh lib
+
+bin/openmpt123$(EXESUFFIX): include/allegro42/lib/djgpp/liballeg.a
+
+MISC_OUTPUTS += include/allegro42/lib/djgpp/liballeg.a
+
+endif
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-emscripten.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-emscripten.mk
new file mode 100644
index 000000000..c16f807f8
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-emscripten.mk
@@ -0,0 +1,168 @@
+
+ifeq ($(origin CC),default)
+CC = emcc -c
+endif
+ifeq ($(origin CXX),default)
+CXX = em++ -c
+endif
+ifeq ($(origin LD),default)
+LD = em++
+endif
+ifeq ($(origin AR),default)
+AR = emar
+endif
+LINK.cc = em++ $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
+
+EMSCRIPTEN_TARGET?=default
+EMSCRIPTEN_THREADS?=0
+EMSCRIPTEN_PORTS?=0
+
+ifneq ($(STDCXX),)
+CXXFLAGS_STDCXX = -std=$(STDCXX)
+else
+ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++17 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++17' ; fi ), c++17)
+CXXFLAGS_STDCXX = -std=c++17
+endif
+endif
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS +=
+CXXFLAGS += -fPIC
+CFLAGS += -fPIC
+LDFLAGS +=
+LDLIBS +=
+ARFLAGS := rcs
+
+ifeq ($(EMSCRIPTEN_THREADS),1)
+CXXFLAGS += -pthread
+CFLAGS += -pthread
+LDFLAGS += -pthread
+endif
+
+ifeq ($(EMSCRIPTEN_PORTS),1)
+CXXFLAGS += -s USE_ZLIB=1 -sUSE_MPG123=1 -sUSE_OGG=1 -sUSE_VORBIS=1 -DMPT_WITH_ZLIB -DMPT_WITH_MPG123 -DMPT_WITH_VORBIS -DMPT_WITH_VORBISFI
+CFLAGS += -s USE_ZLIB=1 -sUSE_MPG123=1 -sUSE_OGG=1 -sUSE_VORBIS=1 -DMPT_WITH_ZLIB -DMPT_WITH_MPG123 -DMPT_WITH_VORBIS -DMPT_WITH_VORBISFI
+LDFLAGS += -s USE_ZLIB=1 -sUSE_MPG123=1 -sUSE_OGG=1 -sUSE_VORBIS=1
+NO_MINIZ=1
+NO_MINIMP3=1
+NO_STBVORBIS=1
+endif
+
+CXXFLAGS += -Oz
+CFLAGS += -Oz
+LDFLAGS += -Oz
+
+# Enable LTO as recommended by Emscripten
+#CXXFLAGS += -flto=thin
+#CFLAGS += -flto=thin
+#LDFLAGS += -flto=thin -Wl,--thinlto-jobs=all
+# As per recommendation in ,
+# thinLTO is not as well tested as full LTO. Stick to full LTO for now.
+CXXFLAGS += -flto
+CFLAGS += -flto
+LDFLAGS += -flto
+
+ifeq ($(EMSCRIPTEN_TARGET),default)
+# emits whatever is emscripten's default, currently (1.38.8) this is the same as "wasm" below.
+CPPFLAGS += -DMPT_BUILD_WASM
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS +=
+
+LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
+
+else ifeq ($(EMSCRIPTEN_TARGET),all)
+# emits native wasm AND javascript with full wasm optimizations.
+CPPFLAGS += -DMPT_BUILD_WASM
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS += -s WASM=2 -s LEGACY_VM_SUPPORT=1 -Wno-transpile
+
+LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
+
+else ifeq ($(EMSCRIPTEN_TARGET),audioworkletprocessor)
+# emits an es6 module in a single file suitable for use in an AudioWorkletProcessor
+CPPFLAGS += -DMPT_BUILD_WASM -DMPT_BUILD_AUDIOWORKLETPROCESSOR
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS += -s WASM=1 -s WASM_ASYNC_COMPILATION=0 -s MODULARIZE=1 -s EXPORT_ES6=1 -s SINGLE_FILE=1
+
+LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
+
+else ifeq ($(EMSCRIPTEN_TARGET),wasm)
+# emits native wasm.
+CPPFLAGS += -DMPT_BUILD_WASM
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS += -s WASM=1
+
+LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
+
+else ifeq ($(EMSCRIPTEN_TARGET),js)
+# emits only plain javascript with plain javascript focused optimizations.
+CPPFLAGS += -DMPT_BUILD_ASMJS
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS += -s WASM=0 -s LEGACY_VM_SUPPORT=1 -Wno-transpile
+
+LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
+
+endif
+
+CXXFLAGS += -s DISABLE_EXCEPTION_CATCHING=0
+CFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -fno-strict-aliasing
+LDFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s ERROR_ON_MISSING_LIBRARIES=1 -s EXPORT_NAME="'libopenmpt'"
+
+include build/make/warnings-clang.mk
+
+REQUIRES_RUNPREFIX=1
+
+EXESUFFIX=.js
+SOSUFFIX=.js
+RUNPREFIX=node
+TEST_LDFLAGS= --pre-js build/make/test-pre.js -lnodefs.js
+
+ifeq ($(EMSCRIPTEN_THREADS),1)
+RUNPREFIX+=--experimental-wasm-threads --experimental-wasm-bulk-memory
+endif
+
+DYNLINK=0
+SHARED_LIB=1
+STATIC_LIB=0
+EXAMPLES=1
+OPENMPT123=0
+SHARED_SONAME=0
+NO_SHARED_LINKER_FLAG=1
+
+# Disable the generic compiler optimization flags as emscripten is sufficiently different.
+# Optimization flags are hard-coded for emscripten in this file.
+DEBUG=0
+OPTIMIZE=0
+OPTIMIZE_SIZE=0
+
+IS_CROSS=1
+
+ifeq ($(ALLOW_LGPL),1)
+LOCAL_ZLIB=1
+LOCAL_MPG123=1
+LOCAL_OGG=1
+LOCAL_VORBIS=1
+else
+NO_ZLIB=1
+NO_MPG123=1
+NO_OGG=1
+NO_VORBIS=1
+NO_VORBISFILE=1
+endif
+NO_LTDL=1
+NO_DL=1
+NO_PORTAUDIO=1
+NO_PORTAUDIOCPP=1
+NO_PULSEAUDIO=1
+NO_SDL=1
+NO_SDL2=1
+NO_FLAC=1
+NO_SNDFILE=1
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-gcc.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-gcc.mk
new file mode 100644
index 000000000..4ed19fb22
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-gcc.mk
@@ -0,0 +1,51 @@
+
+ifeq ($(origin CC),default)
+CC = $(TOOLCHAIN_PREFIX)gcc$(TOOLCHAIN_SUFFIX)
+endif
+ifeq ($(origin CXX),default)
+CXX = $(TOOLCHAIN_PREFIX)g++$(TOOLCHAIN_SUFFIX)
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = $(TOOLCHAIN_PREFIX)ar$(TOOLCHAIN_SUFFIX)
+endif
+
+ifneq ($(STDCXX),)
+CXXFLAGS_STDCXX = -std=$(STDCXX)
+else
+ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++17 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++17' ; fi ), c++17)
+CXXFLAGS_STDCXX = -std=c++17
+endif
+endif
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS +=
+CXXFLAGS += -fPIC
+CFLAGS += -fPIC
+LDFLAGS +=
+LDLIBS += -lm
+ARFLAGS := rcs
+
+ifeq ($(OPTIMIZE_LTO),1)
+CXXFLAGS += -flto
+CFLAGS += -flto
+endif
+
+ifeq ($(CHECKED_ADDRESS),1)
+CXXFLAGS += -fsanitize=address
+CFLAGS += -fsanitize=address
+endif
+
+ifeq ($(CHECKED_UNDEFINED),1)
+CXXFLAGS += -fsanitize=undefined
+CFLAGS += -fsanitize=undefined
+endif
+
+include build/make/warnings-gcc.mk
+
+EXESUFFIX=
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-generic.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-generic.mk
new file mode 100644
index 000000000..d299664ef
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-generic.mk
@@ -0,0 +1,34 @@
+
+$(warning warning: CONFIG=generic is deprecated. Use CONFIG=standard instead.)
+
+ifeq ($(origin CC),default)
+CC = cc
+endif
+ifeq ($(origin CXX),default)
+CXX = c++
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = ar
+endif
+
+CXXFLAGS_STDCXX = -std=c++17
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS +=
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS +=
+LDLIBS +=
+ARFLAGS := rcs
+
+MPT_COMPILER_GENERIC=1
+SHARED_LIB=0
+DYNLINK=0
+
+EXESUFFIX=
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-haiku.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-haiku.mk
new file mode 100644
index 000000000..191dbb39e
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-haiku.mk
@@ -0,0 +1,4 @@
+
+$(warning warning: CONFIG=haiku is deprecated. The OS is auto-detected.)
+
+include config-defaults.mk
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-macosx.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-macosx.mk
new file mode 100644
index 000000000..278b395eb
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-macosx.mk
@@ -0,0 +1,4 @@
+
+$(warning warning: CONFIG=macosx is deprecated. The OS is auto-detected.)
+
+include config-defaults.mk
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw-w64.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw-w64.mk
new file mode 100644
index 000000000..4ea030819
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw-w64.mk
@@ -0,0 +1,132 @@
+
+ifeq ($(WINDOWS_ARCH),)
+MINGW_ARCH = i686
+else ifeq ($(WINDOWS_ARCH),x86)
+MINGW_ARCH = i686
+else ifeq ($(WINDOWS_ARCH),amd64)
+MINGW_ARCH = x86_64
+#else ifeq ($(WINDOWS_ARCH),arm)
+#MINGW_ARCH =
+#else ifeq ($(WINDOWS_ARCH),arm64)
+#MINGW_ARCH =
+else
+$(error unknown WINDOWS_ARCH)
+endif
+
+ifeq ($(origin CC),default)
+CC = $(MINGW_ARCH)-w64-mingw32-gcc$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin CXX),default)
+CXX = $(MINGW_ARCH)-w64-mingw32-g++$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = $(MINGW_ARCH)-w64-mingw32-ar$(MINGW_FLAVOUR)
+endif
+
+CXXFLAGS_STDCXX = -std=c++17 -fexceptions -frtti
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS +=
+ifeq ($(MINGW_COMPILER),clang)
+CXXFLAGS += -municode
+CFLAGS += -municode
+LDFLAGS += -mconsole -mthreads
+else
+CXXFLAGS += -municode -mthreads
+CFLAGS += -municode -mthreads
+LDFLAGS += -mconsole
+endif
+LDLIBS += -lm -lole32 -lrpcrt4 -lwinmm
+ARFLAGS := rcs
+
+PC_LIBS_PRIVATE += -lole32 -lrpcrt4
+
+ifeq ($(WINDOWS_FAMILY),)
+# nothing
+else ifeq ($(WINDOWS_FAMILY),desktop-app)
+# nothing
+else ifeq ($(WINDOWS_FAMILY),app)
+CPPFLAGS += -DWINAPI_FAMILY=2
+OPENMPT123=0
+else ifeq ($(WINDOWS_FAMILY),phone-app)
+CPPFLAGS += -DWINAPI_FAMILY=3
+OPENMPT123=0
+else ifeq ($(WINDOWS_FAMILY),pc-app)
+CPPFLAGS += -DWINAPI_FAMILY=2
+OPENMPT123=0
+else
+$(error unknown WINDOWS_FAMILY)
+endif
+
+ifeq ($(WINDOWS_VERSION),)
+# nothing
+else ifeq ($(WINDOWS_VERSION),win95)
+CPPFLAGS += -D_WIN32_WINDOWS=0x0400
+else ifeq ($(WINDOWS_VERSION),win98)
+CPPFLAGS += -D_WIN32_WINDOWS=0x0410
+else ifeq ($(WINDOWS_VERSION),winme)
+CPPFLAGS += -D_WIN32_WINDOWS=0x0490
+else ifeq ($(WINDOWS_VERSION),winnt4)
+CPPFLAGS += -D_WIN32_WINNT=0x0400
+else ifeq ($(WINDOWS_VERSION),win2000)
+CPPFLAGS += -D_WIN32_WINNT=0x0500
+else ifeq ($(WINDOWS_VERSION),winxp)
+CPPFLAGS += -D_WIN32_WINNT=0x0501
+else ifeq ($(WINDOWS_VERSION),winxp64)
+CPPFLAGS += -D_WIN32_WINNT=0x0502
+else ifeq ($(WINDOWS_VERSION),winvista)
+CPPFLAGS += -DNTDDI_VERSION=0x06000000
+else ifeq ($(WINDOWS_VERSION),win7)
+CPPFLAGS += -DNTDDI_VERSION=0x06010000
+else ifeq ($(WINDOWS_VERSION),win8)
+CPPFLAGS += -DNTDDI_VERSION=0x06020000
+else ifeq ($(WINDOWS_VERSION),win8.1)
+CPPFLAGS += -DNTDDI_VERSION=0x06030000
+else ifeq ($(WINDOWS_VERSION),win10)
+CPPFLAGS += -DNTDDI_VERSION=0x0A000000
+else
+$(error unknown WINDOWS_VERSION)
+endif
+
+ifeq ($(MINGW_COMPILER),clang)
+include build/make/warnings-clang.mk
+else
+include build/make/warnings-gcc.mk
+endif
+
+EXESUFFIX=.exe
+SOSUFFIX=.dll
+SOSUFFIXWINDOWS=1
+
+DYNLINK=0
+SHARED_LIB=1
+STATIC_LIB=0
+SHARED_SONAME=0
+
+ifeq ($(HOST_FLAVOUR),MSYS2)
+
+else
+
+IS_CROSS=1
+
+NO_ZLIB=1
+NO_LTDL=1
+NO_DL=1
+NO_MPG123=1
+NO_OGG=1
+NO_VORBIS=1
+NO_VORBISFILE=1
+NO_PORTAUDIO=1
+NO_PORTAUDIOCPP=1
+NO_PULSEAUDIO=1
+NO_SDL=1
+NO_SDL2=1
+NO_SNDFILE=1
+NO_FLAC=1
+
+endif
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw-win9x.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw-win9x.mk
new file mode 100644
index 000000000..64236f6a8
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw-win9x.mk
@@ -0,0 +1,69 @@
+
+ifeq ($(origin CC),default)
+CC = mingw32-gcc$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin CXX),default)
+CXX = mingw32-g++$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = mingw32-gcc-ar$(MINGW_FLAVOUR)
+endif
+
+CXXFLAGS_STDCXX = -std=gnu++17
+CFLAGS_STDC = -std=gnu99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS += -DWIN32 -D_WIN32 -DWINVER=0x0410 -D_WIN32_WINDOWS=0x0410 -DMPT_BUILD_RETRO
+CXXFLAGS += -mconsole -mthreads
+CFLAGS += -mconsole -mthreads
+LDFLAGS +=
+LDLIBS += -lm -lole32 -lrpcrt4 -lwinmm
+ARFLAGS := rcs
+
+LDFLAGS += -static -static-libgcc -static-libstdc++
+
+#CXXFLAGS += -ffunction-sections -fdata-sections
+#CFLAGS += -ffunction-sections -fdata-sections
+#LDFLAGS += -Wl,--gc-sections
+
+CXXFLAGS += -march=i486 -m80387 -mtune=pentium
+CFLAGS += -march=i486 -m80387 -mtune=pentium
+
+PC_LIBS_PRIVATE += -lole32 -lrpcrt4
+
+include build/make/warnings-gcc.mk
+
+EXESUFFIX=.exe
+SOSUFFIX=.dll
+SOSUFFIXWINDOWS=1
+
+DYNLINK=0
+SHARED_LIB=1
+STATIC_LIB=0
+SHARED_SONAME=0
+
+FORCE_UNIX_STYLE_COMMANDS=1
+
+IN_OPENMPT=1
+XMP_OPENMPT=1
+
+IS_CROSS=1
+
+NO_ZLIB=1
+NO_LTDL=1
+NO_DL=1
+NO_MPG123=1
+NO_OGG=1
+NO_VORBIS=1
+NO_VORBISFILE=1
+NO_PORTAUDIO=1
+NO_PORTAUDIOCPP=1
+NO_PULSEAUDIO=1
+NO_SDL=1
+NO_SDL2=1
+NO_SNDFILE=1
+NO_FLAC=1
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-win32.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-win32.mk
new file mode 100644
index 000000000..007559c36
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-win32.mk
@@ -0,0 +1,65 @@
+
+ifeq ($(origin CC),default)
+CC = i686-w64-mingw32-gcc$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin CXX),default)
+CXX = i686-w64-mingw32-g++$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = i686-w64-mingw32-ar$(MINGW_FLAVOUR)
+endif
+
+CXXFLAGS_STDCXX = -std=c++17
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS += -DWIN32 -D_WIN32
+ifeq ($(MINGW_COMPILER),clang)
+CXXFLAGS += -municode
+CFLAGS += -municode
+LDFLAGS += -mconsole -mthreads
+else
+CXXFLAGS += -municode -mthreads
+CFLAGS += -municode -mthreads
+LDFLAGS += -mconsole
+endif
+LDLIBS += -lm -lole32 -lrpcrt4 -lwinmm
+ARFLAGS := rcs
+
+PC_LIBS_PRIVATE += -lole32 -lrpcrt4
+
+ifeq ($(MINGW_COMPILER),clang)
+include build/make/warnings-clang.mk
+else
+include build/make/warnings-gcc.mk
+endif
+
+EXESUFFIX=.exe
+SOSUFFIX=.dll
+SOSUFFIXWINDOWS=1
+
+DYNLINK=0
+SHARED_LIB=1
+STATIC_LIB=0
+SHARED_SONAME=0
+
+IS_CROSS=1
+
+NO_ZLIB=1
+NO_LTDL=1
+NO_DL=1
+NO_MPG123=1
+NO_OGG=1
+NO_VORBIS=1
+NO_VORBISFILE=1
+NO_PORTAUDIO=1
+NO_PORTAUDIOCPP=1
+NO_PULSEAUDIO=1
+NO_SDL=1
+NO_SDL2=1
+NO_SNDFILE=1
+NO_FLAC=1
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-win64.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-win64.mk
new file mode 100644
index 000000000..44d31a143
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-win64.mk
@@ -0,0 +1,65 @@
+
+ifeq ($(origin CC),default)
+CC = x86_64-w64-mingw32-gcc$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin CXX),default)
+CXX = x86_64-w64-mingw32-g++$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = x86_64-w64-mingw32-ar$(MINGW_FLAVOUR)
+endif
+
+CXXFLAGS_STDCXX = -std=c++17
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS += -DWIN32 -D_WIN32 -DWIN64 -D_WIN64
+ifeq ($(MINGW_COMPILER),clang)
+CXXFLAGS += -municode
+CFLAGS += -municode
+LDFLAGS += -mconsole -mthreads
+else
+CXXFLAGS += -municode -mthreads
+CFLAGS += -municode -mthreads
+LDFLAGS += -mconsole
+endif
+LDLIBS += -lm -lole32 -lrpcrt4 -lwinmm
+ARFLAGS := rcs
+
+PC_LIBS_PRIVATE += -lole32 -lrpcrt4
+
+ifeq ($(MINGW_COMPILER),clang)
+include build/make/warnings-clang.mk
+else
+include build/make/warnings-gcc.mk
+endif
+
+EXESUFFIX=.exe
+SOSUFFIX=.dll
+SOSUFFIXWINDOWS=1
+
+DYNLINK=0
+SHARED_LIB=1
+STATIC_LIB=0
+SHARED_SONAME=0
+
+IS_CROSS=1
+
+NO_ZLIB=1
+NO_LTDL=1
+NO_DL=1
+NO_MPG123=1
+NO_OGG=1
+NO_VORBIS=1
+NO_VORBISFILE=1
+NO_PORTAUDIO=1
+NO_PORTAUDIOCPP=1
+NO_PULSEAUDIO=1
+NO_SDL=1
+NO_SDL2=1
+NO_SNDFILE=1
+NO_FLAC=1
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-winrt-amd64.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-winrt-amd64.mk
new file mode 100644
index 000000000..a48472302
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-winrt-amd64.mk
@@ -0,0 +1,67 @@
+
+ifeq ($(origin CC),default)
+CC = x86_64-w64-mingw32-gcc$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin CXX),default)
+CXX = x86_64-w64-mingw32-g++$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = x86_64-w64-mingw32-ar$(MINGW_FLAVOUR)
+endif
+
+CXXFLAGS_STDCXX = -std=c++17
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS += -DWIN32 -D_WIN32 -DWIN64 -D_WIN64 -DWINAPI_FAMILY=0x2 -D_WIN32_WINNT=0x0602
+ifeq ($(MINGW_COMPILER),clang)
+CXXFLAGS += -municode
+CFLAGS += -municode
+LDFLAGS += -mconsole -mthreads
+else
+CXXFLAGS += -municode -mthreads
+CFLAGS += -municode -mthreads
+LDFLAGS += -mconsole
+endif
+LDLIBS += -lm -lole32 -lwinmm
+ARFLAGS := rcs
+
+PC_LIBS_PRIVATE += -lole32 -lrpcrt4
+
+ifeq ($(MINGW_COMPILER),clang)
+include build/make/warnings-clang.mk
+else
+include build/make/warnings-gcc.mk
+endif
+
+EXESUFFIX=.exe
+SOSUFFIX=.dll
+SOSUFFIXWINDOWS=1
+
+DYNLINK=0
+SHARED_LIB=1
+STATIC_LIB=0
+SHARED_SONAME=0
+
+IS_CROSS=1
+
+OPENMPT123=0
+
+NO_ZLIB=1
+NO_LTDL=1
+NO_DL=1
+NO_MPG123=1
+NO_OGG=1
+NO_VORBIS=1
+NO_VORBISFILE=1
+NO_PORTAUDIO=1
+NO_PORTAUDIOCPP=1
+NO_PULSEAUDIO=1
+NO_SDL=1
+NO_SDL2=1
+NO_SNDFILE=1
+NO_FLAC=1
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-winrt-x86.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-winrt-x86.mk
new file mode 100644
index 000000000..782d937e7
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-mingw64-winrt-x86.mk
@@ -0,0 +1,67 @@
+
+ifeq ($(origin CC),default)
+CC = i686-w64-mingw32-gcc$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin CXX),default)
+CXX = i686-w64-mingw32-g++$(MINGW_FLAVOUR)
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = i686-w64-mingw32-ar$(MINGW_FLAVOUR)
+endif
+
+CXXFLAGS_STDCXX = -std=c++17
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS += -DWIN32 -D_WIN32 -DWINAPI_FAMILY=0x2 -D_WIN32_WINNT=0x0602
+ifeq ($(MINGW_COMPILER),clang)
+CXXFLAGS += -municode
+CFLAGS += -municode
+LDFLAGS += -mconsole -mthreads
+else
+CXXFLAGS += -municode -mthreads
+CFLAGS += -municode -mthreads
+LDFLAGS += -mconsole
+endif
+LDLIBS += -lm -lole32 -lrpcrt4 -lwinmm
+ARFLAGS := rcs
+
+PC_LIBS_PRIVATE += -lole32 -lrpcrt4
+
+ifeq ($(MINGW_COMPILER),clang)
+include build/make/warnings-clang.mk
+else
+include build/make/warnings-gcc.mk
+endif
+
+EXESUFFIX=.exe
+SOSUFFIX=.dll
+SOSUFFIXWINDOWS=1
+
+DYNLINK=0
+SHARED_LIB=1
+STATIC_LIB=0
+SHARED_SONAME=0
+
+IS_CROSS=1
+
+OPENMPT123=0
+
+NO_ZLIB=1
+NO_LTDL=1
+NO_DL=1
+NO_MPG123=1
+NO_OGG=1
+NO_VORBIS=1
+NO_VORBISFILE=1
+NO_PORTAUDIO=1
+NO_PORTAUDIOCPP=1
+NO_PULSEAUDIO=1
+NO_SDL=1
+NO_SDL2=1
+NO_SNDFILE=1
+NO_FLAC=1
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/config-standard.mk b/Frameworks/OpenMPT/OpenMPT/build/make/config-standard.mk
new file mode 100644
index 000000000..0a4a04b38
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/config-standard.mk
@@ -0,0 +1,32 @@
+
+ifeq ($(origin CC),default)
+CC = cc
+endif
+ifeq ($(origin CXX),default)
+CXX = c++
+endif
+ifeq ($(origin LD),default)
+LD = $(CXX)
+endif
+ifeq ($(origin AR),default)
+AR = ar
+endif
+
+CXXFLAGS_STDCXX = -std=c++17
+CFLAGS_STDC = -std=c99
+CXXFLAGS += $(CXXFLAGS_STDCXX)
+CFLAGS += $(CFLAGS_STDC)
+
+CPPFLAGS += -DMPT_COMPILER_GENERIC
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS +=
+LDLIBS +=
+ARFLAGS := rcs
+
+MPT_COMPILER_GENERIC=1
+SHARED_LIB=0
+DYNLINK=0
+
+EXESUFFIX=
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/test-pre.js b/Frameworks/OpenMPT/OpenMPT/build/make/test-pre.js
new file mode 100644
index 000000000..3acc7d25b
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/test-pre.js
@@ -0,0 +1,9 @@
+
+var Module = {
+ 'preInit': function(text) {
+ FS.mkdir('/test');
+ FS.mount(NODEFS, {'root': '../test/'}, '/test');
+ FS.mkdir('/libopenmpt');
+ FS.mount(NODEFS, {'root': '../libopenmpt/'}, '/libopenmpt');
+ }
+};
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/warnings-clang.mk b/Frameworks/OpenMPT/OpenMPT/build/make/warnings-clang.mk
new file mode 100644
index 000000000..80cfbd080
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/warnings-clang.mk
@@ -0,0 +1,32 @@
+
+CXXFLAGS_WARNINGS += -Wcast-align -Wcast-qual -Wmissing-prototypes -Wshift-count-negative -Wshift-count-overflow -Wshift-op-parentheses -Wshift-overflow -Wshift-sign-overflow -Wundef
+CFLAGS_WARNINGS += -Wcast-align -Wcast-qual -Wmissing-prototypes -Wshift-count-negative -Wshift-count-overflow -Wshift-op-parentheses -Wshift-overflow -Wshift-sign-overflow -Wundef
+
+CXXFLAGS_WARNINGS += -Wdeprecated -Wextra-semi -Wframe-larger-than=16000 -Wglobal-constructors -Wimplicit-fallthrough -Wmissing-declarations -Wnon-virtual-dtor -Wreserved-id-macro
+
+#CXXFLAGS_WARNINGS += -Wfloat-equal
+#CXXFLAGS_WARNINGS += -Wdocumentation
+#CXXFLAGS_WARNINGS += -Wconversion
+#CXXFLAGS_WARNINGS += -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-c++11-c++14-compat -Wno-padded -Wno-weak-vtables -Wno-sign-conversion -Wno-shadow-field-in-constructor -Wno-conversion -Wno-switch-enum -Wno-old-style-cast
+
+ifeq ($(MODERN),1)
+LDFLAGS += -fuse-ld=lld
+ifeq ($(OPTIMIZE_LTO),1)
+LDFLAGS += -Wl,--thinlto-jobs=all
+endif
+CXXFLAGS_WARNINGS +=
+CFLAGS_WARNINGS += -Wframe-larger-than=4000
+LDFLAGS_WARNINGS += -Wl,-no-undefined -Wl,--detect-odr-violations
+# re-renable after 1.29 branch
+#CXXFLAGS_WARNINGS += -Wdouble-promotion
+#CFLAGS_WARNINGS += -Wdouble-promotion
+endif
+
+CFLAGS_SILENT += -Wno-\#warnings
+CFLAGS_SILENT += -Wno-cast-align
+CFLAGS_SILENT += -Wno-cast-qual
+CFLAGS_SILENT += -Wno-missing-prototypes
+CFLAGS_SILENT += -Wno-sign-compare
+CFLAGS_SILENT += -Wno-unused-function
+CFLAGS_SILENT += -Wno-unused-parameter
+CFLAGS_SILENT += -Wno-unused-variable
diff --git a/Frameworks/OpenMPT/OpenMPT/build/make/warnings-gcc.mk b/Frameworks/OpenMPT/OpenMPT/build/make/warnings-gcc.mk
new file mode 100644
index 000000000..2f686e6ec
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/make/warnings-gcc.mk
@@ -0,0 +1,27 @@
+
+CXXFLAGS_WARNINGS += -Wcast-align -Wcast-qual -Wfloat-conversion -Wframe-larger-than=16000 -Winit-self -Wlogical-op -Wmissing-declarations -Wpointer-arith -Wstrict-aliasing -Wsuggest-override -Wundef
+CFLAGS_WARNINGS += -Wcast-align -Wcast-qual -Wfloat-conversion -Wlogical-op -Wundef
+
+CXXFLAGS_WARNINGS += -Wno-psabi
+
+ifeq ($(MODERN),1)
+LDFLAGS += -fuse-ld=gold
+CXXFLAGS_WARNINGS +=
+CFLAGS_WARNINGS += -Wframe-larger-than=4000
+#CXXFLAGS_WARNINGS += -Wstrict-aliasing -Wpointer-arith -Winit-self -Wshadow -Wswitch-enum -Wstrict-prototypes
+LDFLAGS_WARNINGS += -Wl,-no-undefined -Wl,--detect-odr-violations
+# re-renable after 1.29 branch
+#CXXFLAGS_WARNINGS += -Wdouble-promotion
+#CFLAGS_WARNINGS += -Wdouble-promotion
+endif
+
+CFLAGS_SILENT += -Wno-cast-qual
+CFLAGS_SILENT += -Wno-empty-body
+CFLAGS_SILENT += -Wno-float-conversion
+CFLAGS_SILENT += -Wno-implicit-fallthrough
+CFLAGS_SILENT += -Wno-old-style-declaration
+CFLAGS_SILENT += -Wno-sign-compare
+CFLAGS_SILENT += -Wno-type-limits
+CFLAGS_SILENT += -Wno-unused-but-set-variable
+CFLAGS_SILENT += -Wno-unused-function
+CFLAGS_SILENT += -Wno-unused-parameter
diff --git a/Frameworks/OpenMPT/OpenMPT/build/svn_version/svn_version.h b/Frameworks/OpenMPT/OpenMPT/build/svn_version/svn_version.h
new file mode 100644
index 000000000..022b8dda2
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/svn_version/svn_version.h
@@ -0,0 +1,10 @@
+
+#pragma once
+#define OPENMPT_VERSION_SVNVERSION "17609"
+#define OPENMPT_VERSION_REVISION 17609
+#define OPENMPT_VERSION_DIRTY 0
+#define OPENMPT_VERSION_MIXEDREVISIONS 0
+#define OPENMPT_VERSION_URL "https://source.openmpt.org/svn/openmpt/branches/OpenMPT-1.30"
+#define OPENMPT_VERSION_DATE "2022-06-30T15:43:27.573631Z"
+#define OPENMPT_VERSION_IS_PACKAGE 1
+
diff --git a/Frameworks/OpenMPT/OpenMPT/build/svn_version/svn_version.template.subwcrev.h b/Frameworks/OpenMPT/OpenMPT/build/svn_version/svn_version.template.subwcrev.h
new file mode 100644
index 000000000..d18e77746
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/svn_version/svn_version.template.subwcrev.h
@@ -0,0 +1,14 @@
+
+#pragma once
+
+#define OPENMPT_VERSION_URL "$WCURL$"
+#define OPENMPT_VERSION_SVNVERSION "$WCRANGE$$WCMODS?M:$"
+#define OPENMPT_VERSION_DATE "$WCDATEUTC=%Y-%m-%dT%H:%M:%S$Z"
+
+#define OPENMPT_VERSION_REVISION $WCREV$
+#define OPENMPT_VERSION_DIRTY $WCMODS?1:0$
+#define OPENMPT_VERSION_MIXEDREVISIONS $WCMIXED?1:0$
+
+#define OPENMPT_VERSION_IS_PACKAGE 0
+
+#define OPENMPT_BUILD_DATE "$WCNOW=%Y-%m-%d %H:%M:%S$"
diff --git a/Frameworks/OpenMPT/OpenMPT/build/svn_version/update_svn_version_vs_premake.cmd b/Frameworks/OpenMPT/OpenMPT/build/svn_version/update_svn_version_vs_premake.cmd
new file mode 100755
index 000000000..0d3ce8431
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/build/svn_version/update_svn_version_vs_premake.cmd
@@ -0,0 +1,6 @@
+@echo off
+set INTDIR=%1%
+if not exist %INTDIR% mkdir %INTDIR%
+if not exist %INTDIR%\svn_version mkdir %INTDIR%\svn_version
+subwcrev ..\.. ..\..\build\svn_version\svn_version.template.subwcrev.h %INTDIR%\svn_version\svn_version.h || del %INTDIR%\svn_version\svn_version.h || exit 0
+exit 0
diff --git a/Frameworks/OpenMPT/OpenMPT/common/BuildSettings.h b/Frameworks/OpenMPT/OpenMPT/common/BuildSettings.h
new file mode 100644
index 000000000..e587b1570
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/common/BuildSettings.h
@@ -0,0 +1,687 @@
+/*
+ * BuildSettings.h
+ * ---------------
+ * Purpose: Global, user settable compile time flags (and some global system header configuration)
+ * Notes : (currently none)
+ * Authors: OpenMPT Devs
+ * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
+ */
+
+
+#pragma once
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+
+#include "mpt/base/detect_compiler.hpp"
+#include "mpt/base/detect_os.hpp"
+#include "mpt/base/detect_quirks.hpp"
+
+
+
+// set windows version early so that we can deduce dependencies from SDK version
+
+#if MPT_OS_WINDOWS
+
+#if !defined(WINVER) && !defined(_WIN32_WINDOWS) && !defined(_WIN32_WINNT)
+#if MPT_COMPILER_CLANG
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-id-macro"
+#endif // MPT_COMPILER_CLANG
+#define _WIN32_WINNT 0x0601 // _WIN32_WINNT_WIN7
+#if MPT_COMPILER_CLANG
+#pragma clang diagnostic pop
+#endif // MPT_COMPILER_CLANG
+#endif
+
+#ifndef WINVER
+#if defined(_WIN32_WINNT)
+#define WINVER _WIN32_WINNT
+#elif defined(_WIN32_WINDOWS)
+#define WINVER _WIN32_WINDOWS
+#endif
+#endif
+
+#endif // MPT_OS_WINDOWS
+
+
+
+#if defined(MODPLUG_TRACKER) && defined(LIBOPENMPT_BUILD)
+#error "either MODPLUG_TRACKER or LIBOPENMPT_BUILD has to be defined"
+#elif defined(MODPLUG_TRACKER)
+// nothing
+#define MPT_INLINE_NS mptx
+#elif defined(LIBOPENMPT_BUILD)
+// nothing
+#define MPT_INLINE_NS mpt_libopenmpt
+#else
+#error "either MODPLUG_TRACKER or LIBOPENMPT_BUILD has to be defined"
+#endif // MODPLUG_TRACKER || LIBOPENMPT_BUILD
+
+
+
+#if defined(LIBOPENMPT_BUILD)
+
+// Fixup dependencies which are currently not used in libopenmpt itself,
+// however might be set by some build systems like autotools anyway for simplicity.
+#ifdef MPT_WITH_FLAC
+#undef MPT_WITH_FLAC
+#endif
+
+#endif // LIBOPENMPT_BUILD
+
+
+
+// Dependencies from the MSVC build system
+#if defined(MPT_BUILD_MSVC)
+
+// This section defines which dependencies are available when building with
+// MSVC. Other build systems provide MPT_WITH_* macros via command-line or other
+// means.
+// OpenMPT and libopenmpt should compile and run successfully (albeit with
+// reduced functionality) with any or all dependencies missing/disabled.
+// The defaults match the bundled third-party libraries with the addition of
+// ASIO and VST SDKs.
+
+#if defined(MODPLUG_TRACKER)
+
+#if MPT_OS_WINDOWS
+#if !defined(MPT_BUILD_WINESUPPORT) && !defined(MPT_BUILD_UPDATESIGNTOOL)
+#define MPT_WITH_MFC
+#endif // !MPT_BUILD_WINESUPPORT && !MPT_BUILD_UPDATESIGNTOOL
+#endif // MPT_OS_WINDOWS
+
+// OpenMPT-only dependencies
+#define MPT_WITH_ANCIENT
+#if !defined(MPT_BUILD_RETRO) && !MPT_COMPILER_CLANG && !MPT_MSVC_BEFORE(2019,0)
+// disabled for VS2017 because of multiple initialization of inline variables
+// https://developercommunity.visualstudio.com/t/static-inline-variable-gets-destroyed-multiple-tim/297876
+#define MPT_WITH_ASIO
+#endif
+#if defined(MPT_BUILD_RETRO)
+#define MPT_WITH_DIRECTSOUND
+#endif
+#define MPT_WITH_DMO
+#define MPT_WITH_LAME
+#define MPT_WITH_LHASA
+#define MPT_WITH_MINIZIP
+#define MPT_WITH_NLOHMANNJSON
+#define MPT_WITH_OPUS
+#define MPT_WITH_OPUSENC
+#define MPT_WITH_OPUSFILE
+#define MPT_WITH_PORTAUDIO
+//#define MPT_WITH_PULSEAUDIO
+//#define MPT_WITH_PULSEAUDIOSIMPLE
+#define MPT_WITH_RTAUDIO
+#define MPT_WITH_SMBPITCHSHIFT
+#define MPT_WITH_UNRAR
+#define MPT_WITH_VORBISENC
+#define MPT_WITH_VST
+
+// OpenMPT and libopenmpt dependencies (not for openmp123, player plugins or examples)
+//#define MPT_WITH_DL
+#define MPT_WITH_FLAC
+//#define MPT_WITH_LTDL
+#if MPT_OS_WINDOWS
+#if (_WIN32_WINNT >= 0x0601)
+#define MPT_WITH_MEDIAFOUNDATION
+#endif
+#endif
+//#define MPT_WITH_MINIMP3
+//#define MPT_WITH_MINIZ
+#define MPT_WITH_MPG123
+#define MPT_WITH_OGG
+//#define MPT_WITH_STBVORBIS
+#define MPT_WITH_VORBIS
+#define MPT_WITH_VORBISFILE
+#if MPT_OS_WINDOWS
+#if (_WIN32_WINNT >= 0x0A00)
+#define MPT_WITH_WINDOWS10
+#endif
+#endif
+#define MPT_WITH_ZLIB
+
+#endif // MODPLUG_TRACKER
+
+#if defined(LIBOPENMPT_BUILD)
+
+// OpenMPT and libopenmpt dependencies (not for openmp123, player plugins or examples)
+#if defined(LIBOPENMPT_BUILD_FULL) && defined(LIBOPENMPT_BUILD_SMALL)
+#error "only one of LIBOPENMPT_BUILD_FULL or LIBOPENMPT_BUILD_SMALL can be defined"
+#endif // LIBOPENMPT_BUILD_FULL && LIBOPENMPT_BUILD_SMALL
+
+#if defined(LIBOPENMPT_BUILD_SMALL)
+
+//#define MPT_WITH_DL
+//#define MPT_WITH_FLAC
+//#define MPT_WITH_LTDL
+//#define MPT_WITH_MEDIAFOUNDATION
+#define MPT_WITH_MINIMP3
+#define MPT_WITH_MINIZ
+//#define MPT_WITH_MPG123
+//#define MPT_WITH_OGG
+#define MPT_WITH_STBVORBIS
+//#define MPT_WITH_VORBIS
+//#define MPT_WITH_VORBISFILE
+//#define MPT_WITH_ZLIB
+
+#else // !LIBOPENMPT_BUILD_SMALL
+
+//#define MPT_WITH_DL
+//#define MPT_WITH_FLAC
+//#define MPT_WITH_LTDL
+//#define MPT_WITH_MEDIAFOUNDATION
+//#define MPT_WITH_MINIMP3
+//#define MPT_WITH_MINIZ
+#define MPT_WITH_MPG123
+#define MPT_WITH_OGG
+//#define MPT_WITH_STBVORBIS
+#define MPT_WITH_VORBIS
+#define MPT_WITH_VORBISFILE
+#define MPT_WITH_ZLIB
+
+#endif // LIBOPENMPT_BUILD_SMALL
+
+#endif // LIBOPENMPT_BUILD
+
+#endif // MPT_BUILD_MSVC
+
+
+#if defined(MPT_BUILD_XCODE)
+
+#if defined(MODPLUG_TRACKER)
+
+// n/a
+
+#endif // MODPLUG_TRACKER
+
+#if defined(LIBOPENMPT_BUILD)
+
+//#define MPT_WITH_DL
+//#define MPT_WITH_FLAC
+//#define MPT_WITH_LTDL
+//#define MPT_WITH_MEDIAFOUNDATION
+//#define MPT_WITH_MINIMP3
+//#define MPT_WITH_MINIZ
+#define MPT_WITH_MPG123
+#define MPT_WITH_OGG
+//#define MPT_WITH_STBVORBIS
+#define MPT_WITH_VORBIS
+#define MPT_WITH_VORBISFILE
+#define MPT_WITH_ZLIB
+
+#endif // LIBOPENMPT_BUILD
+
+#endif // MPT_BUILD_XCODE
+
+
+
+#if defined(MODPLUG_TRACKER)
+
+// Enable built-in test suite.
+#if defined(MPT_BUILD_DEBUG) || defined(MPT_BUILD_CHECKED)
+#define ENABLE_TESTS
+#endif
+
+// Disable any file saving functionality (not really useful except for the player library)
+//#define MODPLUG_NO_FILESAVE
+
+// Disable any debug logging
+#if !defined(MPT_BUILD_DEBUG) && !defined(MPT_BUILD_CHECKED) && !defined(MPT_BUILD_WINESUPPORT)
+#define MPT_LOG_GLOBAL_LEVEL_STATIC
+#define MPT_LOG_GLOBAL_LEVEL 0
+#endif
+
+// Enable all individual logging macros and MPT_LOG calls
+//#define MPT_ALL_LOGGING
+
+// Disable all runtime asserts
+#if !defined(MPT_BUILD_DEBUG) && !defined(MPT_BUILD_CHECKED) && !defined(MPT_BUILD_WINESUPPORT)
+#define NO_ASSERTS
+#endif
+
+// Enable global ComponentManager
+#define MPT_COMPONENT_MANAGER 1
+
+// Support for externally linked samples e.g. in MPTM files
+#define MPT_EXTERNAL_SAMPLES
+
+// Support mpt::ChartsetLocale
+#define MPT_ENABLE_CHARSET_LOCALE
+
+// Use architecture-specific intrinsics
+#define MPT_ENABLE_ARCH_INTRINSICS
+
+#if !defined(MPT_BUILD_RETRO)
+#define MPT_ENABLE_UPDATE
+#endif // !MPT_BUILD_RETRO
+
+// Disable unarchiving support
+//#define NO_ARCHIVE_SUPPORT
+
+// Disable the built-in reverb effect
+//#define NO_REVERB
+
+// Disable built-in miscellaneous DSP effects (surround, mega bass, noise reduction)
+//#define NO_DSP
+
+// Disable the built-in equalizer.
+//#define NO_EQ
+
+// Disable the built-in automatic gain control
+//#define NO_AGC
+
+// (HACK) Define to build without any plugin support
+//#define NO_PLUGINS
+
+#endif // MODPLUG_TRACKER
+
+
+
+#if defined(LIBOPENMPT_BUILD)
+
+#if (defined(_DEBUG) || defined(DEBUG)) && !defined(MPT_BUILD_DEBUG)
+#define MPT_BUILD_DEBUG
+#endif
+
+#if defined(LIBOPENMPT_BUILD_TEST)
+#define ENABLE_TESTS
+#else
+#define MODPLUG_NO_FILESAVE
+#endif
+#if defined(MPT_BUILD_ANALZYED) || defined(MPT_BUILD_DEBUG) || defined(MPT_BUILD_CHECKED) || defined(ENABLE_TESTS)
+// enable asserts
+#else
+#define NO_ASSERTS
+#endif
+//#define MPT_ALL_LOGGING
+#define MPT_COMPONENT_MANAGER 0
+//#define MPT_EXTERNAL_SAMPLES
+#if defined(ENABLE_TESTS) || defined(MPT_BUILD_HACK_ARCHIVE_SUPPORT)
+#define MPT_ENABLE_CHARSET_LOCALE
+#else
+//#define MPT_ENABLE_CHARSET_LOCALE
+#endif
+// Do not use architecture-specifid intrinsics in library builds. There is just about no codepath which would use it anyway.
+//#define MPT_ENABLE_ARCH_INTRINSICS
+#if defined(MPT_BUILD_HACK_ARCHIVE_SUPPORT)
+//#define NO_ARCHIVE_SUPPORT
+#else
+#define NO_ARCHIVE_SUPPORT
+#endif
+//#define NO_REVERB
+#define NO_DSP
+#define NO_EQ
+#define NO_AGC
+//#define NO_PLUGINS
+
+#endif // LIBOPENMPT_BUILD
+
+
+
+#if MPT_OS_WINDOWS
+
+ #ifndef MPT_ENABLE_CHARSET_LOCALE
+ #define MPT_ENABLE_CHARSET_LOCALE
+ #endif
+
+#elif MPT_OS_LINUX
+
+#elif MPT_OS_ANDROID
+
+#elif MPT_OS_EMSCRIPTEN
+
+#elif MPT_OS_MACOSX_OR_IOS
+
+#elif MPT_OS_DJGPP
+
+#endif
+
+
+
+#if (MPT_COMPILER_MSVC && !defined(MPT_USTRING_MODE_UTF8_FORCE)) || defined(MODPLUG_TRACKER)
+
+ // Use wide strings for MSVC because this is the native encoding on
+ // microsoft platforms.
+
+ // mpt::ToWString, mpt::wfmt, ConvertStrTo
+ // Required by the tracker to ease interfacing with WinAPI.
+ // Required by MPT_USTRING_MODE_WIDE to ease type tunneling in mpt::format.
+ #define MPT_WSTRING_FORMAT 1
+
+#else
+
+ #define MPT_WSTRING_FORMAT 0
+
+#endif
+
+#if (MPT_COMPILER_MSVC && !defined(MPT_USTRING_MODE_UTF8_FORCE)) || MPT_OS_WINDOWS || MPT_WSTRING_FORMAT
+
+ // mpt::ToWide
+ // Required on Windows by mpt::PathString.
+ // Required by MPT_USTRING_MODE_WIDE as they share the conversion functions.
+ // Required by MPT_WSTRING_FORMAT because of std::string<->std::wstring conversion in mpt::ToAString and mpt::ToWString.
+ #define MPT_WSTRING_CONVERT 1
+
+#else
+
+ #define MPT_WSTRING_CONVERT 0
+
+#endif
+
+
+
+// fixing stuff up
+
+#if defined(MPT_BUILD_ANALYZED) || defined(MPT_BUILD_CHECKED)
+#ifdef NO_ASSERTS
+#undef NO_ASSERTS // static or dynamic analyzers want assertions on
+#endif
+#endif
+
+#if defined(MPT_BUILD_FUZZER)
+#ifndef MPT_FUZZ_TRACKER
+#define MPT_FUZZ_TRACKER
+#endif
+#endif
+
+#if defined(MPT_ENABLE_ARCH_INTRINSICS)
+#if MPT_COMPILER_MSVC && defined(_M_IX86)
+
+#define MPT_ENABLE_ARCH_X86
+
+#define MPT_ENABLE_ARCH_INTRINSICS_SSE
+#define MPT_ENABLE_ARCH_INTRINSICS_SSE2
+
+#elif MPT_COMPILER_MSVC && defined(_M_X64)
+
+#define MPT_ENABLE_ARCH_AMD64
+
+#define MPT_ENABLE_ARCH_INTRINSICS_SSE
+#define MPT_ENABLE_ARCH_INTRINSICS_SSE2
+
+#endif // arch
+#endif // MPT_ENABLE_ARCH_INTRINSICS
+
+#if defined(ENABLE_TESTS) && defined(MODPLUG_NO_FILESAVE)
+#undef MODPLUG_NO_FILESAVE // tests recommend file saving
+#endif
+
+#if defined(MPT_WITH_ZLIB) && defined(MPT_WITH_MINIZ)
+// Only one deflate implementation should be used. Prefer zlib.
+#undef MPT_WITH_MINIZ
+#endif
+
+#if !MPT_OS_WINDOWS && defined(MPT_WITH_MEDIAFOUNDATION)
+#undef MPT_WITH_MEDIAFOUNDATION // MediaFoundation requires Windows
+#endif
+
+#if !MPT_COMPILER_MSVC && !MPT_COMPILER_CLANG && defined(MPT_WITH_MEDIAFOUNDATION)
+#undef MPT_WITH_MEDIAFOUNDATION // MediaFoundation requires MSVC or Clang due to ATL (no MinGW support)
+#endif
+
+#if (defined(MPT_WITH_MPG123) || defined(MPT_WITH_MINIMP3)) && !defined(MPT_ENABLE_MP3_SAMPLES)
+#define MPT_ENABLE_MP3_SAMPLES
+#endif
+
+#if defined(ENABLE_TESTS)
+#define MPT_ENABLE_FILEIO // Test suite requires PathString for file loading.
+#endif
+
+#if defined(MODPLUG_TRACKER) && !defined(MPT_ENABLE_FILEIO)
+#define MPT_ENABLE_FILEIO // Tracker requires disk file io
+#endif
+
+#if defined(MPT_EXTERNAL_SAMPLES) && !defined(MPT_ENABLE_FILEIO)
+#define MPT_ENABLE_FILEIO // External samples require disk file io
+#endif
+
+#if defined(NO_PLUGINS)
+// Any plugin type requires NO_PLUGINS to not be defined.
+#if defined(MPT_WITH_VST)
+#undef MPT_WITH_VST
+#endif
+#endif
+
+
+
+#if defined(MODPLUG_TRACKER) && !defined(MPT_BUILD_WINESUPPORT) && !defined(MPT_BUILD_WINESUPPORT_WRAPPER)
+#ifndef MPT_NO_NAMESPACE
+#define MPT_NO_NAMESPACE
+#endif
+#endif
+
+#if defined(MPT_NO_NAMESPACE)
+
+#ifdef OPENMPT_NAMESPACE
+#undef OPENMPT_NAMESPACE
+#endif
+#define OPENMPT_NAMESPACE
+
+#ifdef OPENMPT_NAMESPACE_BEGIN
+#undef OPENMPT_NAMESPACE_BEGIN
+#endif
+#define OPENMPT_NAMESPACE_BEGIN
+
+#ifdef OPENMPT_NAMESPACE_END
+#undef OPENMPT_NAMESPACE_END
+#endif
+#define OPENMPT_NAMESPACE_END
+
+#else
+
+#ifndef OPENMPT_NAMESPACE
+#define OPENMPT_NAMESPACE OpenMPT
+#endif
+
+#ifndef OPENMPT_NAMESPACE_BEGIN
+#define OPENMPT_NAMESPACE_BEGIN namespace OPENMPT_NAMESPACE {
+#endif
+#ifndef OPENMPT_NAMESPACE_END
+#define OPENMPT_NAMESPACE_END }
+#endif
+
+#endif
+
+
+
+// platform configuration
+
+#ifdef MPT_WITH_MFC
+//#define MPT_MFC_FULL // use full MFC, including MFC controls
+#define _CSTRING_DISABLE_NARROW_WIDE_CONVERSION
+#endif // MPT_WITH_MFC
+
+#if defined(MODPLUG_TRACKER)
+#if MPT_OS_WINDOWS
+#if !defined(MPT_BUILD_WINESUPPORT)
+#ifndef MPT_MFC_FULL
+#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS // Do not include support for MFC controls in dialogs (reduces binary bloat; remove this #define if you want to use MFC controls)
+#endif // !MPT_MFC_FULL
+#endif // !MPT_BUILD_WINESUPPORT
+#endif // MPT_OS_WINDOWS
+#endif // MODPLUG_TRACKER
+
+#if MPT_OS_WINDOWS
+
+#define WIN32_LEAN_AND_MEAN
+
+// windows.h excludes
+#define NOMEMMGR // GMEM_*, LMEM_*, GHND, LHND, associated routines
+#ifndef NOMINMAX
+#define NOMINMAX // Macros min(a,b) and max(a,b)
+#endif
+#define NOSERVICE // All Service Controller routines, SERVICE_ equates, etc.
+#define NOCOMM // COMM driver routines
+#define NOKANJI // Kanji support stuff.
+#define NOPROFILER // Profiler interface.
+#define NOMCX // Modem Configuration Extensions
+
+// mmsystem.h excludes
+#define MMNODRV
+//#define MMNOSOUND
+//#define MMNOWAVE
+//#define MMNOMIDI
+#define MMNOAUX
+#define MMNOMIXER
+//#define MMNOTIMER
+#define MMNOJOY
+#define MMNOMCI
+//#define MMNOMMIO
+//#define MMNOMMSYSTEM
+
+// mmreg.h excludes
+#define NOMMIDS
+//#define NONEWWAVE
+#define NONEWRIFF
+#define NOJPEGDIB
+#define NONEWIC
+#define NOBITMAP
+
+#endif // MPT_OS_WINDOWS
+
+
+
+// stdlib configuration
+
+#if MPT_COMPILER_CLANG
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-id-macro"
+#endif
+
+#define __STDC_CONSTANT_MACROS
+#define __STDC_FORMAT_MACROS
+#define __STDC_LIMIT_MACROS
+
+#define _USE_MATH_DEFINES
+
+#ifndef _FILE_OFFSET_BITS
+#define _FILE_OFFSET_BITS 64
+#endif
+
+#if MPT_COMPILER_CLANG
+#pragma clang diagnostic pop
+#endif
+
+
+
+// compiler configuration
+
+#if MPT_COMPILER_MSVC
+
+#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
+
+#pragma warning(default:4800) // Implicit conversion from 'int' to bool. Possible information loss
+
+#pragma warning(disable:4355) // 'this' : used in base member initializer list
+
+// happens for immutable classes (i.e. classes containing const members)
+#pragma warning(disable:4512) // assignment operator could not be generated
+
+#pragma warning(error:4309) // Treat "truncation of constant value"-warning as error.
+#pragma warning(error:4463) // Treat overflow; assigning value to bit-field that can only hold values from low_value to high_value"-warning as error.
+
+#ifdef MPT_BUILD_ANALYZED
+// Disable Visual Studio static analyzer warnings that generate too many false positives in VS2010.
+//#pragma warning(disable:6246)
+//#pragma warning(disable:6262)
+#pragma warning(disable:6297) // 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value.
+#pragma warning(disable:6326) // Potential comparison of a constant with another constant
+//#pragma warning(disable:6385)
+//#pragma warning(disable:6386)
+#endif // MPT_BUILD_ANALYZED
+
+#endif // MPT_COMPILER_MSVC
+
+#if MPT_COMPILER_CLANG
+
+#if defined(MPT_BUILD_MSVC)
+#pragma clang diagnostic warning "-Wimplicit-fallthrough"
+#endif // MPT_BUILD_MSVC
+
+#if defined(MODPLUG_TRACKER)
+#pragma clang diagnostic ignored "-Wunused-local-typedef"
+#endif // MODPLUG_TRACKER
+
+#endif // MPT_COMPILER_CLANG
+
+
+
+
+
+// standard library quirks
+
+
+
+
+
+// third-party library configuration
+
+#if MPT_OS_WINDOWS
+#ifndef UNICODE
+#define MPT_CHECK_WINDOWS_IGNORE_WARNING_NO_UNICODE
+#endif // !UNICODE
+#endif // MPT_OS_WINDOWS
+
+#ifdef MPT_WITH_ANCIENT
+#ifdef MPT_BUILD_MSVC_SHARED
+#define ANCIENT_API_DECLSPEC_DLLIMPORT
+#endif
+#endif
+
+#ifdef MPT_WITH_FLAC
+#ifdef MPT_BUILD_MSVC_STATIC
+#define FLAC__NO_DLL
+#endif
+#endif
+
+#ifdef MPT_WITH_SMBPITCHSHIFT
+#ifdef MPT_BUILD_MSVC_SHARED
+#define SMBPITCHSHIFT_USE_DLL
+#endif
+#endif
+
+#ifdef MPT_WITH_STBVORBIS
+#define STB_VORBIS_HEADER_ONLY
+#ifndef STB_VORBIS_NO_PULLDATA_API
+#define STB_VORBIS_NO_PULLDATA_API
+#endif
+#ifndef STB_VORBIS_NO_STDIO
+#define STB_VORBIS_NO_STDIO
+#endif
+#endif
+
+#ifdef MPT_WITH_VORBISFILE
+#ifndef OV_EXCLUDE_STATIC_CALLBACKS
+#define OV_EXCLUDE_STATIC_CALLBACKS
+#endif
+#endif
+
+#ifdef MPT_WITH_ZLIB
+#ifdef MPT_BUILD_MSVC_SHARED
+#define ZLIB_DLL
+#endif
+#endif
+
+
+
+#ifdef __cplusplus
+
+#include "mpt/base/namespace.hpp"
+
+OPENMPT_NAMESPACE_BEGIN
+
+namespace mpt {
+
+#ifndef MPT_NO_NAMESPACE
+using namespace ::mpt;
+#endif
+
+} // namespace mpt
+
+OPENMPT_NAMESPACE_END
+
+#endif
diff --git a/Frameworks/OpenMPT/OpenMPT/common/ComponentManager.cpp b/Frameworks/OpenMPT/OpenMPT/common/ComponentManager.cpp
new file mode 100644
index 000000000..4c558ddcf
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/common/ComponentManager.cpp
@@ -0,0 +1,475 @@
+/*
+ * ComponentManager.cpp
+ * --------------------
+ * Purpose: Manages loading of optional components.
+ * Notes : (currently none)
+ * Authors: Joern Heusipp
+ * OpenMPT Devs
+ * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
+ */
+
+#include "stdafx.h"
+#include "ComponentManager.h"
+
+#include "mpt/mutex/mutex.hpp"
+
+#include "Logging.h"
+
+OPENMPT_NAMESPACE_BEGIN
+
+
+ComponentBase::ComponentBase(ComponentType type)
+ : m_Type(type)
+ , m_Initialized(false)
+ , m_Available(false)
+{
+ return;
+}
+
+
+ComponentBase::~ComponentBase()
+{
+ return;
+}
+
+
+void ComponentBase::SetInitialized()
+{
+ m_Initialized = true;
+}
+
+
+void ComponentBase::SetAvailable()
+{
+ m_Available = true;
+}
+
+
+ComponentType ComponentBase::GetType() const
+{
+ return m_Type;
+}
+
+
+bool ComponentBase::IsInitialized() const
+{
+ return m_Initialized;
+}
+
+
+bool ComponentBase::IsAvailable() const
+{
+ return m_Initialized && m_Available;
+}
+
+
+mpt::ustring ComponentBase::GetVersion() const
+{
+ return mpt::ustring();
+}
+
+
+void ComponentBase::Initialize()
+{
+ if(IsInitialized())
+ {
+ return;
+ }
+ if(DoInitialize())
+ {
+ SetAvailable();
+ }
+ SetInitialized();
+}
+
+
+#if defined(MODPLUG_TRACKER)
+
+
+ComponentLibrary::ComponentLibrary(ComponentType type)
+ : ComponentBase(type)
+ , m_BindFailed(false)
+{
+ return;
+}
+
+
+ComponentLibrary::~ComponentLibrary()
+{
+ return;
+}
+
+
+bool ComponentLibrary::AddLibrary(const std::string &libName, const mpt::LibraryPath &libPath)
+{
+ if(m_Libraries[libName].IsValid())
+ {
+ // prefer previous
+ return true;
+ }
+ mpt::Library lib(libPath);
+ if(!lib.IsValid())
+ {
+ return false;
+ }
+ m_Libraries[libName] = lib;
+ return true;
+}
+
+
+void ComponentLibrary::ClearLibraries()
+{
+ m_Libraries.clear();
+}
+
+
+void ComponentLibrary::SetBindFailed()
+{
+ m_BindFailed = true;
+}
+
+
+void ComponentLibrary::ClearBindFailed()
+{
+ m_BindFailed = false;
+}
+
+
+bool ComponentLibrary::HasBindFailed() const
+{
+ return m_BindFailed;
+}
+
+
+mpt::Library ComponentLibrary::GetLibrary(const std::string &libName) const
+{
+ const auto it = m_Libraries.find(libName);
+ if(it == m_Libraries.end())
+ {
+ return mpt::Library();
+ }
+ return it->second;
+}
+
+
+#endif // MODPLUG_TRACKER
+
+
+#if MPT_COMPONENT_MANAGER
+
+
+ComponentFactoryBase::ComponentFactoryBase(const std::string &id, const std::string &settingsKey)
+ : m_ID(id)
+ , m_SettingsKey(settingsKey)
+{
+ return;
+}
+
+
+ComponentFactoryBase::~ComponentFactoryBase()
+{
+ return;
+}
+
+
+std::string ComponentFactoryBase::GetID() const
+{
+ return m_ID;
+}
+
+
+std::string ComponentFactoryBase::GetSettingsKey() const
+{
+ return m_SettingsKey;
+}
+
+
+void ComponentFactoryBase::PreConstruct() const
+{
+ MPT_LOG_GLOBAL(LogInformation, "Components",
+ MPT_UFORMAT("Constructing Component {}")
+ ( mpt::ToUnicode(mpt::Charset::ASCII, m_ID)
+ )
+ );
+}
+
+
+void ComponentFactoryBase::Initialize(ComponentManager &componentManager, std::shared_ptr component) const
+{
+ if(componentManager.IsComponentBlocked(GetSettingsKey()))
+ {
+ return;
+ }
+ componentManager.InitializeComponent(component);
+}
+
+
+// Global list of component register functions.
+// We do not use a global scope static list head because the corresponding
+// mutex would be no POD type and would thus not be safe to be usable in
+// zero-initialized state.
+// Function scope static initialization is guaranteed to be thread safe
+// in C++11.
+// We use this implementation to be future-proof.
+// MSVC currently does not exploit the possibility of using multiple threads
+// for global lifetime object's initialization.
+// An implementation with a simple global list head and no mutex at all would
+// thus work fine for MSVC (currently).
+
+static mpt::mutex & ComponentListMutex()
+{
+ static mpt::mutex g_ComponentListMutex;
+ return g_ComponentListMutex;
+}
+
+static ComponentListEntry * & ComponentListHead()
+{
+ static ComponentListEntry g_ComponentListHeadEmpty = {nullptr, nullptr};
+ static ComponentListEntry *g_ComponentListHead = &g_ComponentListHeadEmpty;
+ return g_ComponentListHead;
+}
+
+bool ComponentListPush(ComponentListEntry *entry)
+{
+ mpt::lock_guard guard(ComponentListMutex());
+#if MPT_MSVC_BEFORE(2019,0)
+ // Guard against VS2017 compiler bug causing repeated initialization of inline variables.
+ // See .
+ if(entry->next)
+ {
+ return false;
+ }
+#endif
+ entry->next = ComponentListHead();
+ ComponentListHead() = entry;
+ return true;
+}
+
+
+static std::shared_ptr g_ComponentManager;
+
+
+void ComponentManager::Init(const IComponentManagerSettings &settings)
+{
+ MPT_LOG_GLOBAL(LogInformation, "Components", U_("Init"));
+ // cannot use make_shared because the constructor is private
+ g_ComponentManager = std::shared_ptr(new ComponentManager(settings));
+}
+
+
+void ComponentManager::Release()
+{
+ MPT_LOG_GLOBAL(LogInformation, "Components", U_("Release"));
+ g_ComponentManager = nullptr;
+}
+
+
+std::shared_ptr ComponentManager::Instance()
+{
+ return g_ComponentManager;
+}
+
+
+ComponentManager::ComponentManager(const IComponentManagerSettings &settings)
+ : m_Settings(settings)
+{
+ mpt::lock_guard guard(ComponentListMutex());
+ for(ComponentListEntry *entry = ComponentListHead(); entry; entry = entry->next)
+ {
+ if(entry->reg)
+ {
+ entry->reg(*this);
+ }
+ }
+}
+
+
+void ComponentManager::Register(const IComponentFactory &componentFactory)
+{
+ if(m_Components.find(componentFactory.GetID()) != m_Components.end())
+ {
+ return;
+ }
+ RegisteredComponent registeredComponent;
+ registeredComponent.settingsKey = componentFactory.GetSettingsKey();
+ registeredComponent.factoryMethod = componentFactory.GetStaticConstructor();
+ registeredComponent.instance = nullptr;
+ registeredComponent.weakInstance = std::weak_ptr();
+ m_Components.insert(std::make_pair(componentFactory.GetID(), registeredComponent));
+}
+
+
+void ComponentManager::Startup()
+{
+ MPT_LOG_GLOBAL(LogDebug, "Components", U_("Startup"));
+ if(m_Settings.LoadOnStartup())
+ {
+ for(auto &it : m_Components)
+ {
+ it.second.instance = it.second.factoryMethod(*this);
+ it.second.weakInstance = it.second.instance;
+ }
+ }
+ if(!m_Settings.KeepLoaded())
+ {
+ for(auto &it : m_Components)
+ {
+ it.second.instance = nullptr;
+ }
+ }
+}
+
+
+bool ComponentManager::IsComponentBlocked(const std::string &settingsKey) const
+{
+ if(settingsKey.empty())
+ {
+ return false;
+ }
+ return m_Settings.IsBlocked(settingsKey);
+}
+
+
+void ComponentManager::InitializeComponent(std::shared_ptr component) const
+{
+ if(!component)
+ {
+ return;
+ }
+ if(component->IsInitialized())
+ {
+ return;
+ }
+ component->Initialize();
+}
+
+
+std::shared_ptr ComponentManager::GetComponent(const IComponentFactory &componentFactory)
+{
+ std::shared_ptr component = nullptr;
+ auto it = m_Components.find(componentFactory.GetID());
+ if(it != m_Components.end())
+ { // registered component
+ if((*it).second.instance)
+ { // loaded
+ component = (*it).second.instance;
+ } else
+ { // not loaded
+ component = (*it).second.weakInstance.lock();
+ if(!component)
+ {
+ component = (*it).second.factoryMethod(*this);
+ }
+ if(m_Settings.KeepLoaded())
+ { // keep the component loaded
+ (*it).second.instance = component;
+ }
+ (*it).second.weakInstance = component;
+ }
+ } else
+ { // unregistered component
+ component = componentFactory.Construct(*this);
+ }
+ MPT_ASSERT(component);
+ return component;
+}
+
+
+std::shared_ptr ComponentManager::ReloadComponent(const IComponentFactory &componentFactory)
+{
+ std::shared_ptr component = nullptr;
+ auto it = m_Components.find(componentFactory.GetID());
+ if(it != m_Components.end())
+ { // registered component
+ if((*it).second.instance)
+ { // loaded
+ (*it).second.instance = nullptr;
+ if(!(*it).second.weakInstance.expired())
+ {
+ throw std::runtime_error("Component not completely unloaded. Cannot reload.");
+ }
+ (*it).second.weakInstance = std::weak_ptr();
+ }
+ // not loaded
+ component = (*it).second.factoryMethod(*this);
+ if(m_Settings.KeepLoaded())
+ { // keep the component loaded
+ (*it).second.instance = component;
+ }
+ (*it).second.weakInstance = component;
+ } else
+ { // unregistered component
+ component = componentFactory.Construct(*this);
+ }
+ MPT_ASSERT(component);
+ return component;
+}
+
+
+std::vector ComponentManager::GetRegisteredComponents() const
+{
+ std::vector result;
+ result.reserve(m_Components.size());
+ for(const auto &it : m_Components)
+ {
+ result.push_back(it.first);
+ }
+ return result;
+}
+
+
+ComponentInfo ComponentManager::GetComponentInfo(std::string name) const
+{
+ ComponentInfo result;
+ result.name = name;
+ result.state = ComponentStateUnregistered;
+ result.settingsKey = "";
+ result.type = ComponentTypeUnknown;
+ const auto it = m_Components.find(name);
+ if(it == m_Components.end())
+ {
+ result.state = ComponentStateUnregistered;
+ return result;
+ }
+ result.settingsKey = it->second.settingsKey;
+ if(IsComponentBlocked(it->second.settingsKey))
+ {
+ result.state = ComponentStateBlocked;
+ return result;
+ }
+ std::shared_ptr component = it->second.instance;
+ if(!component)
+ {
+ component = it->second.weakInstance.lock();
+ }
+ if(!component)
+ {
+ result.state = ComponentStateUnintialized;
+ return result;
+ }
+ result.type = component->GetType();
+ if(!component->IsInitialized())
+ {
+ result.state = ComponentStateUnintialized;
+ return result;
+ }
+ if(!component->IsAvailable())
+ {
+ result.state = ComponentStateUnavailable;
+ return result;
+ }
+ result.state = ComponentStateAvailable;
+ return result;
+}
+
+
+mpt::PathString ComponentManager::GetComponentPath() const
+{
+ return m_Settings.Path();
+}
+
+
+#endif // MPT_COMPONENT_MANAGER
+
+
+OPENMPT_NAMESPACE_END
diff --git a/Frameworks/OpenMPT/OpenMPT/common/ComponentManager.h b/Frameworks/OpenMPT/OpenMPT/common/ComponentManager.h
new file mode 100644
index 000000000..6733ad07b
--- /dev/null
+++ b/Frameworks/OpenMPT/OpenMPT/common/ComponentManager.h
@@ -0,0 +1,508 @@
+/*
+ * ComponentManager.h
+ * ------------------
+ * Purpose: Manages loading of optional components.
+ * Notes : (currently none)
+ * Authors: Joern Heusipp
+ * OpenMPT Devs
+ * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
+ */
+
+#pragma once
+
+#include "openmpt/all/BuildSettings.hpp"
+
+#include "mpt/mutex/mutex.hpp"
+
+#include