aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/build/wine
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/external_dependencies/openmpt-trunk/build/wine
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/build/wine')
-rw-r--r--Src/external_dependencies/openmpt-trunk/build/wine/build_wine_support.cmd106
-rw-r--r--Src/external_dependencies/openmpt-trunk/build/wine/deps/debian.txt9
-rw-r--r--Src/external_dependencies/openmpt-trunk/build/wine/deps/ubuntu.txt9
-rw-r--r--Src/external_dependencies/openmpt-trunk/build/wine/dialog.sh138
-rw-r--r--Src/external_dependencies/openmpt-trunk/build/wine/native_support.mk241
-rw-r--r--Src/external_dependencies/openmpt-trunk/build/wine/wine_wrapper.mk134
-rw-r--r--Src/external_dependencies/openmpt-trunk/build/wine/wine_wrapper.spec38
7 files changed, 675 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/build/wine/build_wine_support.cmd b/Src/external_dependencies/openmpt-trunk/build/wine/build_wine_support.cmd
new file mode 100644
index 00000000..c74858b9
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/build/wine/build_wine_support.cmd
@@ -0,0 +1,106 @@
+rem @echo off
+
+set CUR_DIR=%CD%
+
+set BATCH_DIR=%~dp0
+
+set INTDIR=%1
+
+set OUTDIR=%2
+
+cd %BATCH_DIR%
+cd ..\..
+
+del /f /q "%OUTDIR%\openmpt-wine-support.zip"
+"C:\Program Files\7-Zip\7z.exe" a -tzip -mm=Deflate -mx=9 openmpt-wine-support.zip ^
+ LICENSE ^
+ include\nlohmann-json\LICENSE.MIT ^
+ include\nlohmann-json\include\nlohmann\*.hpp ^
+ include\nlohmann-json\include\nlohmann\detail\*.hpp ^
+ include\nlohmann-json\include\nlohmann\detail\conversions\*.hpp ^
+ include\nlohmann-json\include\nlohmann\detail\input\*.hpp ^
+ include\nlohmann-json\include\nlohmann\detail\iterators\*.hpp ^
+ include\nlohmann-json\include\nlohmann\detail\meta\*.hpp ^
+ include\nlohmann-json\include\nlohmann\detail\meta\call_std\*.hpp ^
+ include\nlohmann-json\include\nlohmann\detail\output\*.hpp ^
+ include\nlohmann-json\include\nlohmann\thirdparty\hedley\*.hpp ^
+ include\rtkit\rtkit.c ^
+ include\rtkit\rtkit.h ^
+ src\mpt\audio\*.hpp ^
+ src\mpt\base\*.hpp ^
+ src\mpt\base\tests\*.hpp ^
+ src\mpt\binary\*.hpp ^
+ src\mpt\binary\tests\*.hpp ^
+ src\mpt\check\*.hpp ^
+ src\mpt\crc\*.hpp ^
+ src\mpt\crc\tests\*.hpp ^
+ src\mpt\crypto\*.hpp ^
+ src\mpt\crypto\tests\*.hpp ^
+ src\mpt\detect\*.hpp ^
+ src\mpt\endian\*.hpp ^
+ src\mpt\endian\tests\*.hpp ^
+ src\mpt\environment\*.hpp ^
+ src\mpt\exception_text\*.hpp ^
+ src\mpt\format\*.hpp ^
+ src\mpt\format\test\*.hpp ^
+ src\mpt\io\*.hpp ^
+ src\mpt\io\tests\*.hpp ^
+ src\mpt\io_read\*.hpp ^
+ src\mpt\io_write\*.hpp ^
+ src\mpt\json\*.hpp ^
+ src\mpt\library\*.hpp ^
+ src\mpt\mutex\*.hpp ^
+ src\mpt\osinfo\*.hpp ^
+ src\mpt\parse\*.hpp ^
+ src\mpt\parse\tests\*.hpp ^
+ src\mpt\path\*.hpp ^
+ src\mpt\out_of_memory\*.hpp ^
+ src\mpt\random\*.hpp ^
+ src\mpt\random\tests\*.hpp ^
+ src\mpt\string\*.hpp ^
+ src\mpt\string\tests\*.hpp ^
+ src\mpt\string_transcode\*.hpp ^
+ src\mpt\string_transcode\tests\*.hpp ^
+ src\mpt\system_error\*.hpp ^
+ src\mpt\test\*.hpp ^
+ src\mpt\uuid\*.hpp ^
+ src\mpt\uuid\test\*.hpp ^
+ src\mpt\uuid_namespace\*.hpp ^
+ src\mpt\uuid_namespace\tests\*.hpp ^
+ src\openmpt\all\*.cpp ^
+ src\openmpt\all\*.hpp ^
+ src\openmpt\base\*.cpp ^
+ src\openmpt\base\*.hpp ^
+ src\openmpt\logging\*.cpp ^
+ src\openmpt\logging\*.hpp ^
+ src\openmpt\random\*.cpp ^
+ src\openmpt\random\*.hpp ^
+ src\openmpt\soundbase\*.cpp ^
+ src\openmpt\soundbase\*.hpp ^
+ src\openmpt\sounddevice\*.cpp ^
+ src\openmpt\sounddevice\*.hpp ^
+ common\*.h ^
+ common\*.cpp ^
+ misc\*.h ^
+ misc\*.cpp ^
+ mptrack\wine\*.h ^
+ mptrack\wine\*.cpp ^
+ mptrack\wine\*.c ^
+ build\wine\dialog.sh ^
+ build\wine\native_support.mk ^
+ build\wine\wine_wrapper.mk ^
+ build\wine\wine_wrapper.spec ^
+ build\wine\deps\*.txt ^
+ || goto error
+
+cd %BATCH_DIR%
+mkdir "%OUTDIR%"
+move ..\..\openmpt-wine-support.zip "%OUTDIR%\" || goto error
+
+goto noerror
+
+:error
+exit 1
+
+:noerror
+exit 0
diff --git a/Src/external_dependencies/openmpt-trunk/build/wine/deps/debian.txt b/Src/external_dependencies/openmpt-trunk/build/wine/deps/debian.txt
new file mode 100644
index 00000000..fe91af20
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/build/wine/deps/debian.txt
@@ -0,0 +1,9 @@
+coreutils
+dialog
+make pkg-config cpp gcc g++ binutils
+wine wine-dev libwine-dev (or wine-development wine-development-dev libwine-development-dev)
+libpulse-dev
+libjack-jackd2-dev
+portaudio19-dev
+libdbus-1-dev
+ccache
diff --git a/Src/external_dependencies/openmpt-trunk/build/wine/deps/ubuntu.txt b/Src/external_dependencies/openmpt-trunk/build/wine/deps/ubuntu.txt
new file mode 100644
index 00000000..fe91af20
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/build/wine/deps/ubuntu.txt
@@ -0,0 +1,9 @@
+coreutils
+dialog
+make pkg-config cpp gcc g++ binutils
+wine wine-dev libwine-dev (or wine-development wine-development-dev libwine-development-dev)
+libpulse-dev
+libjack-jackd2-dev
+portaudio19-dev
+libdbus-1-dev
+ccache
diff --git a/Src/external_dependencies/openmpt-trunk/build/wine/dialog.sh b/Src/external_dependencies/openmpt-trunk/build/wine/dialog.sh
new file mode 100644
index 00000000..671d03e0
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/build/wine/dialog.sh
@@ -0,0 +1,138 @@
+#!/usr/bin/env sh
+
+# Usage:
+# dailog.sh [tui|gui] [--infobox|--messagebox|--yesno|--gauge] title message
+# WARNING: no error checking is done
+
+fake_dialog () {
+ case "$2" in
+ --infobox)
+ echo ""
+ echo "$3"
+ echo "$4"
+ echo ""
+ ;;
+ --msgbox)
+ echo ""
+ echo "$3"
+ echo "$4"
+ read -p "Press [Enter] key to continue ... \$ " DIALOG_RESULT
+ echo ""
+ ;;
+ --yesno)
+ while true ; do
+ echo ""
+ echo "$3"
+ echo "$4"
+ read -p "([yes], no) \$ " DIALOG_RESULT
+ echo ""
+ case "x$DIALOG_RESULT" in
+ xno)
+ DIALOG_RESULT="n"
+ break
+ ;;
+ xNO)
+ DIALOG_RESULT="n"
+ break
+ ;;
+ xyes)
+ DIALOG_RESULT="y"
+ break
+ ;;
+ xYES)
+ DIALOG_RESULT="y"
+ break
+ ;;
+ x)
+ DIALOG_RESULT="y"
+ break
+ ;;
+ *)
+ ;;
+ esac
+ done
+ case "$DIALOG_RESULT" in
+ n)
+ (exit 1)
+ ;;
+ y)
+ (exit 0)
+ ;;
+ *)
+ (exit 0)
+ ;;
+ esac
+ ;;
+ --textbox)
+ echo ""
+ echo "$3"
+ if command -v "less" 2>/dev/null 1>/dev/null ; then
+ less "$4"
+ else
+ if command -v "more" 2>/dev/null 1>/dev/null ; then
+ more "$4"
+ else
+ cat "$4"
+ read -p "Press [Enter] key to continue ... \$ " DIALOG_RESULT
+ fi
+ fi
+ echo ""
+ ;;
+ *)
+ echo "$4"
+ ;;
+ esac
+}
+
+fake_progress () {
+ echo ""
+ echo "$3"
+ echo "$4"
+ echo -n "0%..."
+ while IFS='' read -r line ; do
+ if [ '(' "$line" -gt 1 ')' -a '(' "$line" -lt 100 ')' ]; then
+ echo -n "$line%..."
+ fi
+ done
+ echo -n "100%"
+ echo ""
+ echo ""
+}
+
+if [ "$2" = "--gauge" ]; then
+ if [ "$1" = "tui" ]; then
+ DIALOG_LIST="dialog whiptail gdialog xdialog fake_progress"
+ else
+ DIALOG_LIST="zenity gdialog xdialog dialog whiptail fake_progress"
+ fi
+ for d in $DIALOG_LIST ; do
+ if [ "$d" = "fake_progress" ]; then
+ fake_progress "tui" "$2" "$3" "$4"
+ exit $?
+ else
+ if command -v "$d" 2>/dev/null 1>/dev/null ; then
+ if [ "$d" = "zenity" ]; then
+ exec $d --title "$3" --auto-close --progress "--text=$4" 0 0 0
+ else
+ exec $d --title "$3" "$2" "$4" 0 0 0
+ fi
+ fi
+ fi
+ done
+else
+ if [ "$1" = "tui" ]; then
+ DIALOG_LIST="dialog whiptail gdialog xdialog fake_dialog"
+ else
+ DIALOG_LIST="gdialog xdialog dialog whiptail fake_dialog"
+ fi
+ for d in $DIALOG_LIST ; do
+ if [ "$d" = "fake_dialog" ]; then
+ fake_dialog "tui" "$2" "$3" "$4"
+ exit $?
+ else
+ if command -v "$d" 2>/dev/null 1>/dev/null ; then
+ exec $d --title "$3" "$2" "$4" 0 0
+ fi
+ fi
+ done
+fi
diff --git a/Src/external_dependencies/openmpt-trunk/build/wine/native_support.mk b/Src/external_dependencies/openmpt-trunk/build/wine/native_support.mk
new file mode 100644
index 00000000..9a88ea9d
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/build/wine/native_support.mk
@@ -0,0 +1,241 @@
+
+ifeq ($(MPT_PROGRESS_FILE),)
+MPT_PROGRESS_FILE:=/dev/null
+endif
+
+ifneq ($(words $(MAKECMDGOALS)),1)
+.DEFAULT_GOAL = all
+%:
+ @$(MAKE) $@ --no-print-directory -rRf $(firstword $(MAKEFILE_LIST))
+else
+ifndef PROGRESS
+T := $(shell $(MAKE) $(MAKECMDGOALS) --no-print-directory -nrRf $(firstword $(MAKEFILE_LIST)) PROGRESS="COUNTTHIS" | grep -c "COUNTTHIS")
+N := x
+C = $(words $N)$(eval N := x $N)
+D = $(words $N)$(eval N := $N)
+PROGRESS = @echo "`expr \( $C '-' 1 \) '*' 100 / $T`" >$(MPT_PROGRESS_FILE)
+PROGRESS_ECHO = @echo "[`printf %3s \`expr \( $D '-' 1 \) '*' 100 / $T\``%]"
+endif
+
+PROGRESS_ECHO ?= echo
+
+V?=2
+INFO ?= @echo
+SILENT ?= @
+VERYSILENT ?= @
+
+ifeq ($(V),6)
+INFO = @true
+SILENT =
+VERYSILENT =
+endif
+
+ifeq ($(V),5)
+INFO = @true
+SILENT =
+VERYSILENT =
+endif
+
+ifeq ($(V),4)
+INFO = @true
+SILENT =
+VERYSILENT = @
+endif
+
+ifeq ($(V),3)
+INFO = @$(PROGRESS_ECHO)
+SILENT = @
+VERYSILENT = @
+endif
+
+ifeq ($(V),2)
+INFO = @$(PROGRESS_ECHO)
+SILENT = @
+VERYSILENT = @
+endif
+
+ifeq ($(V),1)
+INFO = @true
+SILENT = @
+VERYSILENT = @
+endif
+
+ifeq ($(V),0)
+INFO = @true
+SILENT = @
+VERYSILENT = @
+endif
+
+ifeq ($(MPT_ARCH_BITS),)
+MPT_ARCH_TARGET:=
+else
+MPT_ARCH_TARGET:=-m$(MPT_ARCH_BITS)
+endif
+
+MPT_TARGET?=
+
+MPT_TRY_DBUS?=1
+MPT_TRY_PORTAUDIO?=1
+MPT_TRY_PULSEAUDIO?=1
+MPT_TRY_RTAUDIO?=1
+
+CPPFLAGS += $(MPT_ARCH_TARGET) -Icommon -Isrc -Iinclude/nlohmann-json/include -Iinclude
+CXXFLAGS += $(MPT_ARCH_TARGET) -std=gnu++17 -fpermissive -fPIC -fvisibility=hidden
+CFLAGS += $(MPT_ARCH_TARGET) -std=c99 -fPIC -fvisibility=hidden
+LDFLAGS += $(MPT_ARCH_TARGET)
+LDLIBS += -lm -lpthread
+ARFLAGS +=
+
+CXXFLAGS += -Os -ffast-math
+CFLAGS += -Os -ffast-math -fno-strict-aliasing
+
+CXXFLAGS += -Wall -Wextra -Wundef -Wcast-qual -Wcast-align
+CFLAGS += -Wall -Wextra -Wundef -Wcast-qual -Wcast-align
+
+ifeq ($(shell command -v ccache 2>/dev/null 1>/dev/null && echo yes),yes)
+CCACHE=ccache
+else
+CCACHE=
+endif
+
+ifeq ($(MPT_TRY_DBUS),2)
+
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists dbus-1 && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I dbus-1 ) -DMPT_WITH_DBUS
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L dbus-1 ) $(shell $(MPT_TARGET)pkg-config --libs-only-other dbus-1 )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l dbus-1 )
+CPPFLAGS += -DMPT_WITH_RTKIT
+RTKIT_C_SOURCES += include/rtkit/rtkit.c
+else
+$(error DBus not found.)
+endif
+
+else
+ifeq ($(MPT_TRY_DBUS),1)
+
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists dbus-1 && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I dbus-1 ) -DMPT_WITH_DBUS
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L dbus-1 ) $(shell $(MPT_TARGET)pkg-config --libs-only-other dbus-1 )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l dbus-1 )
+CPPFLAGS += -DMPT_WITH_RTKIT
+RTKIT_C_SOURCES += include/rtkit/rtkit.c
+endif
+
+endif
+endif
+
+ifeq ($(MPT_TRY_PORTAUDIO),2)
+
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists portaudio-2.0 && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I portaudio-2.0 ) -DMPT_WITH_PORTAUDIO
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L portaudio-2.0 ) $(shell $(MPT_TARGET)pkg-config --libs-only-other portaudio-2.0 )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l portaudio-2.0 )
+else
+$(error PortAudio not found.)
+endif
+
+else
+ifeq ($(MPT_TRY_PORTAUDIO),1)
+
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists portaudio-2.0 && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I portaudio-2.0 ) -DMPT_WITH_PORTAUDIO
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L portaudio-2.0 ) $(shell $(MPT_TARGET)pkg-config --libs-only-other portaudio-2.0 )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l portaudio-2.0 )
+endif
+
+endif
+endif
+
+ifeq ($(MPT_TRY_PULSEAUDIO),2)
+
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists libpulse libpulse-simple && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I libpulse libpulse-simple ) -DMPT_WITH_PULSEAUDIO -DMPT_WITH_PULSEAUDIOSIMPLE
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L libpulse libpulse-simple ) $(shell $(MPT_TARGET)pkg-config --libs-only-other libpulse libpulse-simple )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l libpulse libpulse-simple )
+else
+$(error PulseAudio not found.)
+endif
+
+else
+ifeq ($(MPT_TRY_PULSEAUDIO),1)
+
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists libpulse libpulse-simple && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I libpulse libpulse-simple ) -DMPT_WITH_PULSEAUDIO -DMPT_WITH_PULSEAUDIOSIMPLE
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L libpulse libpulse-simple ) $(shell $(MPT_TARGET)pkg-config --libs-only-other libpulse libpulse-simple )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l libpulse libpulse-simple )
+else
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists libpulse && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I libpulse ) -DMPT_WITH_PULSEAUDIO
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L libpulse ) $(shell $(MPT_TARGET)pkg-config --libs-only-other libpulse )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l libpulse )
+endif
+endif
+
+endif
+endif
+
+ifeq ($(MPT_TRY_RTAUDIO),2)
+
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists rtaudio && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I rtaudio ) -DMPT_WITH_RTAUDIO
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L rtaudio ) $(shell $(MPT_TARGET)pkg-config --libs-only-other rtaudio )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l rtaudio )
+else
+$(error RtAudio not found.)
+endif
+
+else
+ifeq ($(MPT_TRY_RTAUDIO),1)
+
+ifeq ($(shell $(MPT_TARGET)pkg-config --exists rtaudio && echo yes),yes)
+CPPFLAGS += $(shell $(MPT_TARGET)pkg-config --cflags-only-I rtaudio ) -DMPT_WITH_RTAUDIO
+LDFLAGS += $(shell $(MPT_TARGET)pkg-config --libs-only-L rtaudio ) $(shell $(MPT_TARGET)pkg-config --libs-only-other rtaudio )
+LDLIBS += $(shell $(MPT_TARGET)pkg-config --libs-only-l rtaudio )
+endif
+
+endif
+endif
+
+.PHONY: all
+all: libopenmpt_native_support.so
+
+%: %.o
+ $(PROGRESS)
+ $(INFO) Linking $@ ...
+ $(SILENT)$(MPT_TARGET)$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@
+
+%.o: %.cpp
+ $(PROGRESS)
+ $(INFO) Compiling $< ...
+ $(SILENT)$(CCACHE) $(MPT_TARGET)$(COMPILE.cc) -DMODPLUG_TRACKER -DMPT_BUILD_WINESUPPORT -DMPT_WITH_NLOHMANNJSON $(OUTPUT_OPTION) $<
+
+%.o: %.c
+ $(PROGRESS)
+ $(INFO) Compiling $< ...
+ $(SILENT)$(CCACHE) $(MPT_TARGET)$(COMPILE.c) -DMODPLUG_TRACKER -DMPT_BUILD_WINESUPPORT -DMPT_WITH_NLOHMANNJSON $(OUTPUT_OPTION) $<
+
+COMMON_CXX_SOURCES += $(wildcard common/*.cpp)
+MISC_CXX_SOURCES += $(wildcard misc/*.cpp)
+SOUNDDEVICE_CXX_SOURCES += $(wildcard src/openmpt/sounddevice/*.cpp)
+WINESUPPORT_CXX_SOURCES += $(wildcard mptrack/wine/*.cpp)
+
+OPENMPT_WINESUPPORT_CXX_SOURCES += \
+ $(COMMON_CXX_SOURCES) \
+ $(MISC_CXX_SOURCES) \
+ $(SOUNDDEVICE_CXX_SOURCES) \
+ $(WINESUPPORT_CXX_SOURCES) \
+
+OPENMPT_WINESUPPORT_C_SOURCES += \
+ $(RTKIT_C_SOURCES) \
+
+OPENMPT_WINESUPPORT_OBJECTS = $(OPENMPT_WINESUPPORT_CXX_SOURCES:.cpp=.o) $(OPENMPT_WINESUPPORT_C_SOURCES:.c=.o)
+
+OPENMPT_WINESUPPORT_LDFLAGS = -Wl,-z,defs,--no-undefined
+LDLIBS_OPENMPT_WINESUPPORT =
+
+libopenmpt_native_support.so: $(OPENMPT_WINESUPPORT_OBJECTS)
+ $(PROGRESS)
+ $(INFO) Linking $@ ...
+ $(SILENT)$(MPT_TARGET)$(LINK.cc) -shared $(OPENMPT_WINESUPPORT_LDFLAGS) $^ $(LOADLIBS) $(LDLIBS) $(LDLIBS_OPENMPT_WINESUPPORT) -o $@
+
+endif
diff --git a/Src/external_dependencies/openmpt-trunk/build/wine/wine_wrapper.mk b/Src/external_dependencies/openmpt-trunk/build/wine/wine_wrapper.mk
new file mode 100644
index 00000000..4868d09d
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/build/wine/wine_wrapper.mk
@@ -0,0 +1,134 @@
+
+ifeq ($(MPT_PROGRESS_FILE),)
+MPT_PROGRESS_FILE:=/dev/null
+endif
+
+ifeq ($(MPT_WINEGCC_LANG),)
+MPT_WINEGCC_LANG:=CPLUSPLUS
+endif
+
+ifneq ($(words $(MAKECMDGOALS)),1)
+.DEFAULT_GOAL = all
+%:
+ @$(MAKE) $@ --no-print-directory -rRf $(firstword $(MAKEFILE_LIST))
+else
+ifndef PROGRESS
+T := $(shell $(MAKE) $(MAKECMDGOALS) --no-print-directory -nrRf $(firstword $(MAKEFILE_LIST)) PROGRESS="COUNTTHIS" | grep -c "COUNTTHIS")
+N := x
+C = $(words $N)$(eval N := x $N)
+D = $(words $N)$(eval N := $N)
+PROGRESS = @echo "`expr \( $C '-' 1 \) '*' 100 / $T`" >$(MPT_PROGRESS_FILE)
+PROGRESS_ECHO = @echo "[`printf %3s \`expr \( $D '-' 1 \) '*' 100 / $T\``%]"
+endif
+
+PROGRESS_ECHO ?= echo
+
+V?=2
+INFO ?= @echo
+SILENT ?= @
+VERYSILENT ?= @
+
+ifeq ($(V),6)
+INFO = @true
+SILENT =
+VERYSILENT =
+endif
+
+ifeq ($(V),5)
+INFO = @true
+SILENT =
+VERYSILENT =
+endif
+
+ifeq ($(V),4)
+INFO = @true
+SILENT =
+VERYSILENT = @
+endif
+
+ifeq ($(V),3)
+INFO = @$(PROGRESS_ECHO)
+SILENT = @
+VERYSILENT = @
+endif
+
+ifeq ($(V),2)
+INFO = @$(PROGRESS_ECHO)
+SILENT = @
+VERYSILENT = @
+endif
+
+ifeq ($(V),1)
+INFO = @true
+SILENT = @
+VERYSILENT = @
+endif
+
+ifeq ($(V),0)
+INFO = @true
+SILENT = @
+VERYSILENT = @
+endif
+
+ifeq ($(MPT_ARCH_BITS),)
+MPT_ARCH_TARGET:=
+else
+MPT_ARCH_TARGET:=-m$(MPT_ARCH_BITS)
+endif
+
+CPPFLAGS += $(MPT_ARCH_TARGET) -DMPT_WINEGCC -Icommon
+CXXFLAGS += $(MPT_ARCH_TARGET) -std=gnu++17 -fpermissive -fPIC -fvisibility=hidden
+CFLAGS += $(MPT_ARCH_TARGET) -std=gnu99 -fPIC -fvisibility=hidden
+LDFLAGS += $(MPT_ARCH_TARGET)
+LDLIBS += -lm
+ARFLAGS +=
+
+CXXFLAGS += -Os -ffast-math
+CFLAGS += -Os -ffast-math -fno-strict-aliasing
+
+CXXFLAGS += -Wall -Wextra -Wundef -Wcast-qual -Wcast-align
+CFLAGS += -Wall -Wextra -Wundef -Wcast-qual -Wcast-align
+
+#ifeq ($(shell command -v ccache 2>/dev/null 1>/dev/null && echo yes),yes)
+CCACHE=ccache
+#else
+CCACHE=
+#endif
+
+.PHONY: all
+all: openmpt_wine_wrapper.dll
+
+openmpt_wine_wrapper.dll: openmpt_wine_wrapper.dll.so
+ $(PROGRESS)
+ $(INFO) Copying $@ ...
+ $(VERYSILENT)cp openmpt_wine_wrapper.dll.so openmpt_wine_wrapper.dll
+
+ifeq ($(MPT_WINEGCC_LANG),CPLUSPLUS)
+
+openmpt_wine_wrapper.dll.so: openmpt_wine_wrapper.o build/wine/wine_wrapper.spec libopenmpt_native_support.so
+ $(PROGRESS)
+ $(INFO) Linking $@ ...
+ $(SILENT)$(WINEGXX) -shared $(CPPFLAGS) -DMPT_BUILD_WINESUPPORT_WRAPPER $(CXXFLAGS) $(LDFLAGS) "-Wl,-rpath,$(MPT_WINE_SEARCHPATH)" build/wine/wine_wrapper.spec openmpt_wine_wrapper.o -L. -lopenmpt_native_support $(LOADLIBS) $(LDLIBS) -o openmpt_wine_wrapper.dll.so
+
+openmpt_wine_wrapper.o: mptrack/wine/WineWrapper.cpp
+ $(PROGRESS)
+ $(INFO) Compiling $@ ...
+ $(SILENT)$(CCACHE) $(WINEGXX) -c $(CPPFLAGS) -DMPT_BUILD_WINESUPPORT_WRAPPER $(CXXFLAGS) mptrack/wine/WineWrapper.cpp -o openmpt_wine_wrapper.o
+
+endif
+
+ifeq ($(MPT_WINEGCC_LANG),C)
+
+openmpt_wine_wrapper.dll.so: openmpt_wine_wrapper.o build/wine/wine_wrapper.spec libopenmpt_native_support.so
+ $(PROGRESS)
+ $(INFO) Linking $@ ...
+ $(SILENT)$(WINEGXX) -shared $(CPPFLAGS) -DMPT_BUILD_WINESUPPORT_WRAPPER $(CFLAGS) $(LDFLAGS) "-Wl,-rpath,$(MPT_WINE_SEARCHPATH)" build/wine/wine_wrapper.spec openmpt_wine_wrapper.o -L. -lopenmpt_native_support $(LOADLIBS) $(LDLIBS) -o openmpt_wine_wrapper.dll.so
+
+openmpt_wine_wrapper.o: mptrack/wine/WineWrapper.c
+ $(PROGRESS)
+ $(INFO) Compiling $@ ...
+ $(SILENT)$(CCACHE) $(WINEGXX) -c $(CPPFLAGS) -DMPT_BUILD_WINESUPPORT_WRAPPER $(CFLAGS) mptrack/wine/WineWrapper.c -o openmpt_wine_wrapper.o
+
+endif
+
+endif
diff --git a/Src/external_dependencies/openmpt-trunk/build/wine/wine_wrapper.spec b/Src/external_dependencies/openmpt-trunk/build/wine/wine_wrapper.spec
new file mode 100644
index 00000000..7a4da665
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/build/wine/wine_wrapper.spec
@@ -0,0 +1,38 @@
+@ cdecl OpenMPT_Wine_Wrapper_Init ( )
+@ cdecl OpenMPT_Wine_Wrapper_Fini ( )
+@ cdecl OpenMPT_Wine_Wrapper_Alloc ( long )
+@ cdecl OpenMPT_Wine_Wrapper_Free ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_String_Length ( str )
+@ cdecl OpenMPT_Wine_Wrapper_String_Duplicate ( str )
+@ cdecl OpenMPT_Wine_Wrapper_String_Free ( str )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_EnumerateDevices ( )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_Construct ( str )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_Destruct ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_SetMessageReceiver ( ptr ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_SetCallback ( ptr ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetDeviceInfo ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetDeviceCaps ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetDeviceDynamicCaps ( ptr str )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_Init ( ptr str )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_Open ( ptr str )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_Close ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_Start ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_Stop ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetRequestFlags ( ptr ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_IsInited ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_IsOpen ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_IsAvailable ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_IsPlaying ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_IsPlayingSilence ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_StopAndAvoidPlayingSilence ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_EndPlayingSilence ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_OnIdle ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetSettings ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetActualSampleFormat ( ptr ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetEffectiveBufferAttributes ( ptr ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetTimeInfo ( ptr ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetStreamPosition ( ptr ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_DebugIsFragileDevice ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_DebugInRealtimeCallback ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_GetStatistics ( ptr )
+@ cdecl OpenMPT_Wine_Wrapper_SoundDevice_OpenDriverSettings ( ptr )