aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorriggs <riggs@FreeBSD.org>2014-07-06 01:46:36 +0800
committerriggs <riggs@FreeBSD.org>2014-07-06 01:46:36 +0800
commit523ceafe7152ba6b0b6a0e3c34387b2d7bf30fd9 (patch)
treeaa3a7832e40ed9580156fcb58fe0c690474e1d72
parent8a45ec6c87968e6d1dd963346b57e9e9c5e1a0fd (diff)
downloadfreebsd-ports-gnome-523ceafe7152ba6b0b6a0e3c34387b2d7bf30fd9.tar.gz
freebsd-ports-gnome-523ceafe7152ba6b0b6a0e3c34387b2d7bf30fd9.tar.zst
freebsd-ports-gnome-523ceafe7152ba6b0b6a0e3c34387b2d7bf30fd9.zip
- Update to upstream release 3.1.3
- Makefile cleanup / pet portlint - Reduce available set of OPTIONS - DEBUG, GCOV, EFENCE not supported anymore - ASS and LUA now required by port PR: 191375 Submitted by: tkato432@yahoo.com Approved by: mentors (implicit)
-rw-r--r--multimedia/aegisub/Makefile183
-rw-r--r--multimedia/aegisub/distinfo8
-rw-r--r--multimedia/aegisub/files/patch-libaegisub__ass__uuencode.cpp11
-rw-r--r--multimedia/aegisub/files/patch-libaegisub__cajun__reader.cpp27
-rw-r--r--multimedia/aegisub/files/patch-src__ass_file.cpp27
-rw-r--r--multimedia/aegisub/files/patch-src__ass_override.cpp30
-rw-r--r--multimedia/aegisub/files/patch-src__audio_player_alsa.cpp56
-rw-r--r--multimedia/aegisub/files/patch-src__audio_player_pulse.cpp20
-rw-r--r--multimedia/aegisub/files/patch-src__audio_provider_ffmpegsource.cpp12
-rw-r--r--multimedia/aegisub/files/patch-src__auto4_lua_dialog.cpp34
-rw-r--r--multimedia/aegisub/files/patch-src__base_grid.cpp83
-rw-r--r--multimedia/aegisub/files/patch-src__base_grid.h11
-rw-r--r--multimedia/aegisub/files/patch-src__command__edit.cpp43
-rw-r--r--multimedia/aegisub/files/patch-src__command__recent.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__command__video.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__dialog_jumpto.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__dialog_kara_timing_copy.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__dialog_properties.cpp36
-rw-r--r--multimedia/aegisub/files/patch-src__dialog_shift_times.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__dialog_style_editor.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__ffmpegsource_common.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__ffmpegsource_common.h10
-rw-r--r--multimedia/aegisub/files/patch-src__frame_main.cpp10
-rw-r--r--multimedia/aegisub/files/patch-src__main.cpp10
-rw-r--r--multimedia/aegisub/files/patch-src__preferences_base.cpp34
-rw-r--r--multimedia/aegisub/files/patch-src__resolution_resampler.cpp30
-rw-r--r--multimedia/aegisub/files/patch-src__subs_edit_box.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__subs_preview.cpp27
-rw-r--r--multimedia/aegisub/files/patch-src__subtitle_format_srt.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__timeedit_ctrl.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__validators.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__video_context.cpp58
-rw-r--r--multimedia/aegisub/files/patch-src__video_display.cpp23
-rw-r--r--multimedia/aegisub/files/patch-src__video_frame.h10
-rw-r--r--multimedia/aegisub/files/patch-src__video_out_gl.h34
-rw-r--r--multimedia/aegisub/files/patch-src__video_provider_ffmpegsource.cpp25
-rw-r--r--multimedia/aegisub/files/patch-src__video_provider_yuv4mpeg.cpp34
-rw-r--r--multimedia/aegisub/files/patch-src__visual_tool_rotatexy.cpp11
-rw-r--r--multimedia/aegisub/files/patch-src__visual_tool_scale.cpp27
-rw-r--r--multimedia/aegisub/files/patch-src__visual_tool_vector_clip.cpp25
-rw-r--r--multimedia/aegisub/pkg-plist139
41 files changed, 1076 insertions, 287 deletions
diff --git a/multimedia/aegisub/Makefile b/multimedia/aegisub/Makefile
index 9d35fd016a5f..a7ecb0686d8d 100644
--- a/multimedia/aegisub/Makefile
+++ b/multimedia/aegisub/Makefile
@@ -2,8 +2,7 @@
# $FreeBSD$
PORTNAME= aegisub
-PORTVERSION= 2.1.9
-PORTREVISION= 2
+PORTVERSION= 3.1.3
CATEGORIES= multimedia
MASTER_SITES= http://ftp.aegisub.org/pub/archives/releases/source/:aegisub \
ftp://ftp.aegisub.org/pub/archives/releases/source/:aegisub \
@@ -16,44 +15,70 @@ COMMENT= Cross-platform subtitle editor
LICENSE= BSD3CLAUSE
-LIB_DEPENDS= libfontconfig.so:${PORTSDIR}/x11-fonts/fontconfig
-
-OPTIONS_DEFINE= DEBUG PROFILE GCOV EFENCE ASS ALSA OPENAL PORTAUDIO PULSEAUDIO \
- FFMPEG HUNSPELL LUA DOCS
-OPTIONS_DEFAULT= ASS PULSEAUDIO FFMPEG HUNSPELL LUA
-GCOV_DESC= GCOV (require profiling)
-EFENCE_DESC= Electric Fence (require profiling)
-ASS_DESC= libASS subtitle provider
-HUNSPELL_DESC= Spell checking via Hunspell
+LIB_DEPENDS= libboost_thread.so:${PORTSDIR}/devel/boost-libs \
+ libicui18n.so:${PORTSDIR}/devel/icu \
+ libfontconfig.so:${PORTSDIR}/x11-fonts/fontconfig \
+ libass.so:${PORTSDIR}/multimedia/libass
USE_GITHUB= yes
GH_ACCOUNT= FFMS
GH_PROJECT= ffms2
GH_TAGNAME= ${FFMS_VERSION}
-GH_COMMIT= ec0ef9c
+GH_COMMIT= 6b0e4a2
WRKSRC= ${WRKDIR}/${DISTNAME}
-USES= desktop-file-utils gettext gmake pkgconfig
+USES= compiler:c++11-lib desktop-file-utils gmake gettext iconv \
+ pkgconfig tar:xz
USE_GNOME= intltool
-USE_WX= 2.8
-WX_COMPS= wx contrib
+USE_WX= 3.0
WX_UNICODE= yes
WX_CONF_ARGS= absolute
USE_GL= glu
-USE_GCC= any
+USE_CSTD= c99
+USE_LUA= 5.1+
GNU_CONFIGURE= yes
-CONFIGURE_ARGS= --disable-gcc-prec --without-lua50
+CONFIGURE_ARGS= --disable-compiler-flags \
+ --disable-update-checker \
+ --without-libc++ \
+ --disable-gcc-prec
INSTALLS_ICONS= yes
PLIST_SUB= VERSION="${PORTVERSION:R}"
-CFLAGS+= -I${LOCALBASE}/include
CPPFLAGS+= -I${LOCALBASE}/include
-LDFLAGS+= -L${LOCALBASE}/lib -lz
+LDFLAGS+= -L${LOCALBASE}/lib ${ICONV_LIB}
+
+OPTIONS_DEFINE= ALSA DOCS FFMPEG FFTW HUNSPELL OPENAL \
+ PORTAUDIO PULSEAUDIO
+OPTIONS_DEFAULT= FFMPEG FFTW HUNSPELL PULSEAUDIO
+
+ALSA_LIB_DEPENDS= libasound.so:${PORTSDIR}/audio/alsa-lib
+ALSA_CONFIGURE_OFF= --without-alsa
+FFMPEG_LIB_DEPENDS= libavcodec.so:${PORTSDIR}/multimedia/ffmpeg
+FFMPEG_CONFIGURE_ENV= FFMS2_CFLAGS="${FFMS_CFLAGS}" \
+ FFMS2_LIBS="${FFMS_LIBS}"
+FFMPEG_CONFIGURE_OFF= --without-ffms2
+FFMPEG_CPPFLAGS= ${FFMS_CFLAGS}
+FFTW_LIB_DEPENDS= libfftw3.so:${PORTSDIR}/math/fftw3
+FFTW_CONFIGURE_OFF= --without-fftw3
+HUNSPELL_LIB_DEPENDS= libhunspell-1.3.so:${PORTSDIR}/textproc/hunspell
+HUNSPELL_CONFIGURE_OFF= --without-hunspell
+OPENAL_USES= openal
+OPENAL_CONFIGURE_OFF= --without-openal
+PORTAUDIO_BUILD_DEPENDS=\
+ portaudio2>0:${PORTSDIR}/audio/portaudio2
+PORTAUDIO_RUN_DEPENDS= portaudio2>0:${PORTSDIR}/audio/portaudio2
+PORTAUDIO_CFLAGS= -isystem ${LOCALBASE}/include/portaudio2
+PORTAUDIO_LDFLAGS= -L${LOCALBASE}/lib/portaudio2
+PORTAUDIO_CONFIGURE_OFF=\
+ --without-portaudio
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:${PORTSDIR}/audio/pulseaudio
+PULSEAUDIO_CONFIGURE_OFF=\
+ --without-libpulse
FFMS_NAME= ffms2
-FFMS_VERSION= 2.19
+FFMS_VERSION= 2.19.1
FFMS_DISTNAME= ${FFMS_NAME}-${FFMS_VERSION}
FFMS_DISTFILE= ${FFMS_DISTNAME}.tar.gz
FFMS_WRKSRC= ${WRKDIR}/${GH_ACCOUNT}-${GH_PROJECT}-${GH_COMMIT}
@@ -61,116 +86,29 @@ FFMS_CFLAGS= -I${FFMS_WRKSRC}/include
FFMS_LIBS= ${FFMS_WRKSRC}/src/core/.libs/libffms2.a \
$$(pkg-config --libs libavcodec libavformat libswscale libavutil libavresample)
-.include <bsd.port.options.mk>
-
-.if ${PORT_OPTIONS:MDEBUG}
-CONFIGURE_ARGS+= --enable-debug --enable-debug-exceptions
-.endif
-
-.if ${PORT_OPTIONS:MGCOV}
-CONFIGURE_ARGS+= --enable-gcov
-LDFLAGS+= -fprofile-arcs
-WITH_PROFILE= yes
-.endif
-
-.if ${PORT_OPTIONS:MEFENCE}
-LIB_DEPENDS+= libefence.so:${PORTSDIR}/devel/ElectricFence
-CONFIGURE_ARGS+= --enable-efence
-WITH_PROFILE= yes
-.endif
-
-.if ${PORT_OPTIONS:MPROFILE}
-CONFIGURE_ARGS+= --enable-profile
-.endif
-
-.if ${PORT_OPTIONS:MASS}
-LIB_DEPENDS+= libass.so:${PORTSDIR}/multimedia/libass
-.else
-CONFIGURE_ARGS+= --without-libass
-.endif
-
-.if ${PORT_OPTIONS:MALSA}
-LIB_DEPENDS+= libasound.so:${PORTSDIR}/audio/alsa-lib
-.else
-CONFIGURE_ARGS+= --without-alsa
-.endif
-
-.if ${PORT_OPTIONS:MOPENAL}
-USES+= openal
-.else
-CONFIGURE_ARGS+= --without-openal
-.endif
-
-.if ${PORT_OPTIONS:MPORTAUDIO}
-BUILD_DEPENDS+= portaudio>=19:${PORTSDIR}/audio/portaudio2
-RUN_DEPENDS+= portaudio>=19:${PORTSDIR}/audio/portaudio2
-CONFIGURE_ENV+= PORTAUDIO_LIBS="${LOCALBASE}/lib/portaudio2/libportaudio.so"
-.else
-CONFIGURE_ARGS+= --without-portaudio
-.endif
-
-.if ${PORT_OPTIONS:MPULSEAUDIO}
-LIB_DEPENDS+= libpulse.so:${PORTSDIR}/audio/pulseaudio
-.else
-CONFIGURE_ARGS+= --without-pulseaudio
-.endif
+.include <bsd.port.pre.mk>
-.if ${PORT_OPTIONS:MFFMPEG}
-LIB_DEPENDS+= libavcodec.so:${PORTSDIR}/multimedia/ffmpeg
-CONFIGURE_ENV+= FFMS_CFLAGS="${FFMS_CFLAGS}" FFMS_LIBS="${FFMS_LIBS}"
-CONFIGURE_ARGS+= --with-provider-video=ffmpegsource \
- --with-provider-audio=ffmpegsource
-CPPFLAGS+= ${FFMS_CFLAGS}
-.else
-CONFIGURE_ARGS+= --without-ffms
-.endif
-
-.if ${PORT_OPTIONS:MHUNSPELL}
-LIB_DEPENDS+= libhunspell-1.3.so:${PORTSDIR}/textproc/hunspell
+.if ${COMPILER_TYPE} == "gcc"
+USE_CXXSTD= gnu++11
.else
-CONFIGURE_ARGS+= --without-hunspell
-.endif
-
-.if ${PORT_OPTIONS:MLUA}
-USES+= lua:51
-CONFIGURE_ENV+= LUA_CFLAGS="-I${LUA_INCDIR}" \
- LUA_LDFLAGS="-L${LUA_LIBDIR} -llua-${LUA_VER}"
-CPPFLAGS+= -I${LUA_INCDIR}
-.else
-CONFIGURE_ARGS+= --without-lua
+USE_CXXSTD= c++11
+CXXFLAGS+= -Wno-c++11-narrowing
.endif
post-patch:
-.for i in configure
- @${REINPLACE_CMD} -e \
- '/opt_flag/s|-O2|| ; \
- /ICONV_LIBS/s|-liconv||' ${WRKSRC}/${i}
-.endfor
-.for i in automation/Makefile.in
@${REINPLACE_CMD} -e \
- 's|@HAVE_AUTOMATION_TRUE@|| ; \
- s|@HAVE_AUTOMATION_FALSE@|#| ; \
- s|@HAVE_AUTO4_LUA_TRUE@|| ; \
- s|@HAVE_AUTO4_LUA_FALSE@|#| ; \
- s|@HAVE_AUTO3_LUA_TRUE@|#| ; \
- s|@HAVE_AUTO3_LUA_FALSE|| ; \
- /^install-data-am/s|: install|: # install|' ${WRKSRC}/${i}
-.endfor
-.for i in src/Makefile.in src/libauto3/Makefile.in
+ 's| -O3||' ${WRKSRC}/configure
@${REINPLACE_CMD} -e \
- 's|@HAVE_AUTO3_LUA_TRUE@|#| ; \
- s|@HAVE_AUTO3_LUA_FALSE@||' ${WRKSRC}/${i}
-.endfor
-.for i in src/audio_player_portaudio.h
+ 's|".*build/|"./build/|' ${WRKSRC}/build/version.sh
@${REINPLACE_CMD} -e \
- 's|<portaudio\.h>|<portaudio2/portaudio.h>|' ${WRKSRC}/${i}
-.endfor
+ '/iconv_t/s|^|//|' \
+ ${WRKSRC}/libaegisub/include/libaegisub/charset_conv.h
pre-configure:
.if ${PORT_OPTIONS:MFFMPEG}
@(cd ${FFMS_WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ./configure \
- --disable-shared --disable-silent-rules CC="${CC}" \
- CXX="${CXX}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}")
+ --disable-shared CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}" \
+ CXXFLAGS="${CXXFLAGS}")
.endif
pre-build:
@@ -181,8 +119,9 @@ pre-build:
.endif
post-install:
- @(cd ${WRKSRC}/automation && ${SETENV} ${MAKE_ENV} ${MAKE_CMD} \
- ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} \
- install-nobase_automationDATA install-nobase_share_docDATA)
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}/automation/v4-docs
+ (cd ${WRKSRC}/automation/v4-docs && ${INSTALL_DATA} * \
+ ${STAGEDIR}${DOCSDIR}/automation/v4-docs)
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/aegisub-*
-.include <bsd.port.mk>
+.include <bsd.port.post.mk>
diff --git a/multimedia/aegisub/distinfo b/multimedia/aegisub/distinfo
index 93802ba489d3..4c192776d8d6 100644
--- a/multimedia/aegisub/distinfo
+++ b/multimedia/aegisub/distinfo
@@ -1,4 +1,4 @@
-SHA256 (aegisub-2.1.9.tar.gz) = ac1f20751f3d2732d7e11627ea4cc30b53cb905d11422925b7f881785d373706
-SIZE (aegisub-2.1.9.tar.gz) = 2538256
-SHA256 (ffms2-2.19.tar.gz) = 12611778f9f0083af5627067db0b163c48a0c32a43a0b4145da612f43afa69f2
-SIZE (ffms2-2.19.tar.gz) = 512114
+SHA256 (aegisub-3.1.3.tar.xz) = efea5bc2bc5e0651ada4f65cfdd8af1b422a15f87933710d11287bf51e2b5e58
+SIZE (aegisub-3.1.3.tar.xz) = 4215196
+SHA256 (ffms2-2.19.1.tar.gz) = 8516af3f71531746e7e3e4b16eb30dade5df5edfc0782e7b69f965310ea66640
+SIZE (ffms2-2.19.1.tar.gz) = 512444
diff --git a/multimedia/aegisub/files/patch-libaegisub__ass__uuencode.cpp b/multimedia/aegisub/files/patch-libaegisub__ass__uuencode.cpp
new file mode 100644
index 000000000000..553e661e49b9
--- /dev/null
+++ b/multimedia/aegisub/files/patch-libaegisub__ass__uuencode.cpp
@@ -0,0 +1,11 @@
+--- libaegisub/ass/uuencode.cpp.orig
++++ libaegisub/ass/uuencode.cpp
+@@ -16,6 +16,8 @@
+
+ #include "../config.h"
+
++#include <cstring>
++
+ #include "libaegisub/ass/uuencode.h"
+
+ // Despite being called uuencoding by ass_specs.doc, the format is actually
diff --git a/multimedia/aegisub/files/patch-libaegisub__cajun__reader.cpp b/multimedia/aegisub/files/patch-libaegisub__cajun__reader.cpp
new file mode 100644
index 000000000000..fd987f17def5
--- /dev/null
+++ b/multimedia/aegisub/files/patch-libaegisub__cajun__reader.cpp
@@ -0,0 +1,27 @@
+--- libaegisub/common/cajun/reader.cpp.orig
++++ libaegisub/common/cajun/reader.cpp
+@@ -9,6 +9,7 @@
+ #include "libaegisub/cajun/reader.h"
+
+ #include <cassert>
++#include <cstdio>
+ #include <set>
+ #include <sstream>
+
+@@ -243,8 +244,16 @@
+ }
+
+ void Reader::MatchNumber(std::string& sNumber, InputStream& inputStream) {
++#if defined(_LIBCPP_VERSION)
+ const char numericChars[] = "0123456789.eE-+";
+ while (!inputStream.EOS() && std::find(numericChars, std::end(numericChars), inputStream.Peek()) != std::end(numericChars))
++#else
++ const char sNumericChars[] = "0123456789.eE-+";
++ std::set<char> numericChars;
++ numericChars.insert(sNumericChars, sNumericChars + sizeof(sNumericChars));
++
++ while (!inputStream.EOS()&& numericChars.count(inputStream.Peek()))
++#endif
+ sNumber.push_back(inputStream.Get());
+ }
+
diff --git a/multimedia/aegisub/files/patch-src__ass_file.cpp b/multimedia/aegisub/files/patch-src__ass_file.cpp
new file mode 100644
index 000000000000..b3e028ca4181
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__ass_file.cpp
@@ -0,0 +1,27 @@
+--- src/ass_file.cpp.orig
++++ src/ass_file.cpp
+@@ -49,6 +49,13 @@
+ #include <boost/algorithm/string/case_conv.hpp>
+ #include <boost/filesystem/path.hpp>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ namespace std {
+ template<>
+ void swap(AssFile &lft, AssFile &rgt) {
+@@ -71,8 +78,8 @@
+ Line.push_back(*new AssInfo("WrapStyle", "0"));
+ Line.push_back(*new AssInfo("ScaledBorderAndShadow", "yes"));
+ if (!OPT_GET("Subtitle/Default Resolution/Auto")->GetBool()) {
+- Line.push_back(*new AssInfo("PlayResX", std::to_string(OPT_GET("Subtitle/Default Resolution/Width")->GetInt())));
+- Line.push_back(*new AssInfo("PlayResY", std::to_string(OPT_GET("Subtitle/Default Resolution/Height")->GetInt())));
++ Line.push_back(*new AssInfo("PlayResX", TO_STRING(OPT_GET("Subtitle/Default Resolution/Width")->GetInt())));
++ Line.push_back(*new AssInfo("PlayResY", TO_STRING(OPT_GET("Subtitle/Default Resolution/Height")->GetInt())));
+ }
+ Line.push_back(*new AssInfo("YCbCr Matrix", "None"));
+
diff --git a/multimedia/aegisub/files/patch-src__ass_override.cpp b/multimedia/aegisub/files/patch-src__ass_override.cpp
new file mode 100644
index 000000000000..5d9c372abfae
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__ass_override.cpp
@@ -0,0 +1,30 @@
+--- src/ass_override.cpp.orig
++++ src/ass_override.cpp
+@@ -49,6 +49,13 @@
+ #include <boost/range/adaptor/transformed.hpp>
+ #include <functional>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ using namespace boost::adaptors;
+
+ AssOverrideParameter::AssOverrideParameter(VariableDataType type, AssParameterClass classification)
+@@ -129,11 +136,11 @@
+ if (classification == AssParameterClass::ALPHA)
+ Set(str(boost::format("&H%02X&") % mid(0, new_value, 255)));
+ else
+- Set(std::to_string(new_value));
++ Set(TO_STRING(new_value));
+ }
+
+ template<> void AssOverrideParameter::Set<double>(double new_value) {
+- Set(std::to_string(new_value));
++ Set(TO_STRING(new_value));
+ }
+
+ template<> void AssOverrideParameter::Set<bool>(bool new_value) {
diff --git a/multimedia/aegisub/files/patch-src__audio_player_alsa.cpp b/multimedia/aegisub/files/patch-src__audio_player_alsa.cpp
deleted file mode 100644
index afbcd874d56c..000000000000
--- a/multimedia/aegisub/files/patch-src__audio_player_alsa.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
---- src/audio_player_alsa.cpp.orig
-+++ src/audio_player_alsa.cpp
-@@ -192,7 +192,7 @@
-
- snd_pcm_t *pcm = 0;
- if (snd_pcm_open(&pcm, ps.device_name.c_str(), SND_PCM_STREAM_PLAYBACK, 0) != 0)
-- return "snd_pcm_open";
-+ return (void*)"snd_pcm_open";
- //printf("alsa_player: opened pcm\n");
-
- do_setup:
-@@ -209,7 +209,7 @@
- break;
- default:
- snd_pcm_close(pcm);
-- return "snd_pcm_format_t";
-+ return (void*)"snd_pcm_format_t";
- }
- if (snd_pcm_set_params(pcm,
- pcm_format,
-@@ -219,7 +219,7 @@
- 1, // allow resample
- 100*1000 // 100 milliseconds latency
- ) != 0)
-- return "snd_pcm_set_params";
-+ return (void*)"snd_pcm_set_params";
- //printf("alsa_player: set pcm params\n");
-
- size_t framesize = ps.provider->GetChannels() * ps.provider->GetBytesPerSample();
-@@ -261,7 +261,7 @@
- delete[] buf;
- snd_pcm_close(pcm);
- //printf("alsa_player: error filling buffer\n");
-- return "snd_pcm_writei";
-+ return (void*)"snd_pcm_writei";
- }
- }
- delete[] buf;
-@@ -319,7 +319,7 @@
- delete[] buf;
- snd_pcm_close(pcm);
- //printf("alsa_player: error filling buffer, written=%d\n", written);
-- return "snd_pcm_writei";
-+ return (void*)"snd_pcm_writei";
- }
- }
- delete[] buf;
-@@ -353,7 +353,7 @@
- case SND_PCM_STATE_DISCONNECTED:
- // lost device, close the handle and return error
- snd_pcm_close(pcm);
-- return "SND_PCM_STATE_DISCONNECTED";
-+ return (void*)"SND_PCM_STATE_DISCONNECTED";
-
- default:
- // everything else should either be fine or impossible (here)
diff --git a/multimedia/aegisub/files/patch-src__audio_player_pulse.cpp b/multimedia/aegisub/files/patch-src__audio_player_pulse.cpp
deleted file mode 100644
index e61621823012..000000000000
--- a/multimedia/aegisub/files/patch-src__audio_player_pulse.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
---- src/audio_player_pulse.cpp.orig
-+++ src/audio_player_pulse.cpp
-@@ -144,7 +144,7 @@
- pa_stream_set_write_callback(stream, (pa_stream_request_cb_t)pa_stream_write, this);
-
- // Connect stream
-- paerror = pa_stream_connect_playback(stream, NULL, NULL, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_NOT_MONOTONOUS|PA_STREAM_AUTO_TIMING_UPDATE, NULL, NULL);
-+ paerror = pa_stream_connect_playback(stream, NULL, NULL, (pa_stream_flags_t) (PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_NOT_MONOTONOUS|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL);
- if (paerror) {
- printf("PulseAudio reported error: %s (%d)\n", pa_strerror(paerror), paerror);
- wxString s(pa_strerror(paerror), wxConvUTF8);
-@@ -217,7 +217,7 @@
-
- play_start_time = 0;
- pa_threaded_mainloop_lock(mainloop);
-- paerror = pa_stream_get_time(stream, &play_start_time);
-+ paerror = pa_stream_get_time(stream, (pa_usec_t*) &play_start_time);
- pa_threaded_mainloop_unlock(mainloop);
- if (paerror) {
- printf("PulseAudio player: Error getting stream time: %s (%d)\n", pa_strerror(paerror), paerror);
diff --git a/multimedia/aegisub/files/patch-src__audio_provider_ffmpegsource.cpp b/multimedia/aegisub/files/patch-src__audio_provider_ffmpegsource.cpp
deleted file mode 100644
index 5e3dd00e31dd..000000000000
--- a/multimedia/aegisub/files/patch-src__audio_provider_ffmpegsource.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
---- src/video_provider_ffmpegsource.cpp.orig
-+++ src/video_provider_ffmpegsource.cpp
-@@ -230,7 +230,8 @@
- Width = TempFrame->EncodedWidth;
- Height = TempFrame->EncodedHeight;
-
-- if (FFMS_SetOutputFormatV(VideoSource, 1 << FFMS_GetPixFmt("bgra"), Width, Height, FFMS_RESIZER_BICUBIC, &ErrInfo)) {
-+ const int TargetFormat[] = { FFMS_GetPixFmt("bgra"), -1 };
-+ if (FFMS_SetOutputFormatV2(VideoSource, TargetFormat, Width, Height, FFMS_RESIZER_BICUBIC, &ErrInfo)) {
- ErrorMsg.Append(wxString::Format(_T("Failed to set output format: %s"), ErrInfo.Buffer));
- throw ErrorMsg;
- }
diff --git a/multimedia/aegisub/files/patch-src__auto4_lua_dialog.cpp b/multimedia/aegisub/files/patch-src__auto4_lua_dialog.cpp
new file mode 100644
index 000000000000..bd4772d66dd8
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__auto4_lua_dialog.cpp
@@ -0,0 +1,34 @@
+--- src/auto4_lua_dialog.cpp.orig
++++ src/auto4_lua_dialog.cpp
+@@ -66,6 +66,13 @@
+ #include <wx/valnum.h>
+ #include <wx/window.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ namespace {
+ inline void get_if_right_type(lua_State *L, std::string &def) {
+ if (lua_isstring(L, -1))
+@@ -256,7 +263,7 @@
+ }
+
+ bool CanSerialiseValue() const override { return true; }
+- std::string SerialiseValue() const override { return std::to_string(value); }
++ std::string SerialiseValue() const override { return TO_STRING(value); }
+ void UnserialiseValue(const std::string &serialised) override { value = atoi(serialised.c_str()); }
+
+ wxControl *Create(wxWindow *parent) override {
+@@ -317,7 +324,7 @@
+ }
+
+ bool CanSerialiseValue() const override { return true; }
+- std::string SerialiseValue() const override { return std::to_string(value); }
++ std::string SerialiseValue() const override { return TO_STRING(value); }
+ void UnserialiseValue(const std::string &serialised) override { value = atof(serialised.c_str()); }
+
+ wxControl *Create(wxWindow *parent) override {
diff --git a/multimedia/aegisub/files/patch-src__base_grid.cpp b/multimedia/aegisub/files/patch-src__base_grid.cpp
new file mode 100644
index 000000000000..d5e8d4e2e201
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__base_grid.cpp
@@ -0,0 +1,83 @@
+--- src/base_grid.cpp.orig
++++ src/base_grid.cpp
+@@ -67,6 +67,15 @@
+ #include <wx/scrolbar.h>
+ #include <wx/sizer.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ enum {
+ GRID_SCROLLBAR = 1730,
+ MENU_SHOW_COL = 1250 // Needs 15 IDs after this
+@@ -194,8 +203,8 @@
+ }
+
+ void BaseGrid::OnSubtitlesSave() {
+- context->ass->SaveUIState("Scroll Position", std::to_string(yPos));
+- context->ass->SaveUIState("Active Line", std::to_string(GetDialogueIndex(active_line)));
++ context->ass->SaveUIState("Scroll Position", TO_STRING(yPos));
++ context->ass->SaveUIState("Active Line", TO_STRING(GetDialogueIndex(active_line)));
+ }
+
+ void BaseGrid::OnShowColMenu(wxCommandEvent &event) {
+@@ -557,11 +566,11 @@
+ }
+
+ void BaseGrid::GetRowStrings(int row, AssDialogue *line, bool *paint_columns, wxString *strings, bool replace, wxString const& rep_char) const {
+- if (paint_columns[0]) strings[0] = std::to_wstring(row + 1);
+- if (paint_columns[1]) strings[1] = std::to_wstring(line->Layer);
++ if (paint_columns[0]) strings[0] = TO_WSTRING(row + 1);
++ if (paint_columns[1]) strings[1] = TO_WSTRING(line->Layer);
+ if (byFrame) {
+- if (paint_columns[2]) strings[2] = std::to_wstring(context->videoController->FrameAtTime(line->Start, agi::vfr::START));
+- if (paint_columns[3]) strings[3] = std::to_wstring(context->videoController->FrameAtTime(line->End, agi::vfr::END));
++ if (paint_columns[2]) strings[2] = TO_WSTRING(context->videoController->FrameAtTime(line->Start, agi::vfr::START));
++ if (paint_columns[3]) strings[3] = TO_WSTRING(context->videoController->FrameAtTime(line->End, agi::vfr::END));
+ }
+ else {
+ if (paint_columns[2]) strings[2] = to_wx(line->Start.GetAssFormated());
+@@ -570,9 +579,9 @@
+ if (paint_columns[4]) strings[4] = to_wx(line->Style);
+ if (paint_columns[5]) strings[5] = to_wx(line->Actor);
+ if (paint_columns[6]) strings[6] = to_wx(line->Effect);
+- if (paint_columns[7]) strings[7] = line->Margin[0] ? wxString(std::to_wstring(line->Margin[0])) : wxString();
+- if (paint_columns[8]) strings[8] = line->Margin[1] ? wxString(std::to_wstring(line->Margin[1])) : wxString();
+- if (paint_columns[9]) strings[9] = line->Margin[2] ? wxString(std::to_wstring(line->Margin[2])) : wxString();
++ if (paint_columns[7]) strings[7] = line->Margin[0] ? wxString(TO_WSTRING(line->Margin[0])) : wxString();
++ if (paint_columns[8]) strings[8] = line->Margin[1] ? wxString(TO_WSTRING(line->Margin[1])) : wxString();
++ if (paint_columns[9]) strings[9] = line->Margin[2] ? wxString(TO_WSTRING(line->Margin[2])) : wxString();
+
+ if (paint_columns[10]) {
+ strings[10].clear();
+@@ -799,7 +808,7 @@
+ // O(1) widths
+ int marginLen = dc.GetTextExtent("0000").GetWidth();
+
+- int labelLen = dc.GetTextExtent(std::to_wstring(GetRows())).GetWidth();
++ int labelLen = dc.GetTextExtent(TO_WSTRING(GetRows())).GetWidth();
+ int startLen = 0;
+ int endLen = 0;
+ if (!byFrame)
+@@ -844,12 +853,12 @@
+ }
+
+ // Finish layer
+- int layerLen = maxLayer ? dc.GetTextExtent(std::to_wstring(maxLayer)).GetWidth() : 0;
++ int layerLen = maxLayer ? dc.GetTextExtent(TO_WSTRING(maxLayer)).GetWidth() : 0;
+
+ // Finish times
+ if (byFrame) {
+- startLen = dc.GetTextExtent(std::to_wstring(maxStart)).GetWidth();
+- endLen = dc.GetTextExtent(std::to_wstring(maxEnd)).GetWidth();
++ startLen = dc.GetTextExtent(TO_WSTRING(maxStart)).GetWidth();
++ endLen = dc.GetTextExtent(TO_WSTRING(maxEnd)).GetWidth();
+ }
+
+ // Set column widths
diff --git a/multimedia/aegisub/files/patch-src__base_grid.h b/multimedia/aegisub/files/patch-src__base_grid.h
new file mode 100644
index 000000000000..fb218f1e36fb
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__base_grid.h
@@ -0,0 +1,11 @@
+--- src/base_grid.h.orig
++++ src/base_grid.h
+@@ -39,6 +39,8 @@
+ #include <map>
+ #include <memory>
+ #include <vector>
++#include <wx/brush.h>
++#include <wx/scrolbar.h>
+ #include <wx/window.h>
+
+ #include "selection_controller.h"
diff --git a/multimedia/aegisub/files/patch-src__command__edit.cpp b/multimedia/aegisub/files/patch-src__command__edit.cpp
new file mode 100644
index 000000000000..f58f4c867f2c
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__command__edit.cpp
@@ -0,0 +1,43 @@
+--- src/command/edit.cpp.orig
++++ src/command/edit.cpp
+@@ -68,6 +68,13 @@
+ #include <wx/clipbrd.h>
+ #include <wx/fontdlg.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ namespace {
+ using namespace boost::adaptors;
+ using cmd::Command;
+@@ -450,13 +457,13 @@
+ if (font.GetFaceName() != startfont.GetFaceName())
+ set_tag(line, blocks, "\\fn", from_wx(font.GetFaceName()), sel_start, sel_end);
+ if (font.GetPointSize() != startfont.GetPointSize())
+- set_tag(line, blocks, "\\fs", std::to_string(font.GetPointSize()), sel_start, sel_end);
++ set_tag(line, blocks, "\\fs", TO_STRING(font.GetPointSize()), sel_start, sel_end);
+ if (font.GetWeight() != startfont.GetWeight())
+- set_tag(line, blocks, "\\b", std::to_string(font.GetWeight() == wxFONTWEIGHT_BOLD), sel_start, sel_end);
++ set_tag(line, blocks, "\\b", TO_STRING(font.GetWeight() == wxFONTWEIGHT_BOLD), sel_start, sel_end);
+ if (font.GetStyle() != startfont.GetStyle())
+- set_tag(line, blocks, "\\i", std::to_string(font.GetStyle() == wxFONTSTYLE_ITALIC), sel_start, sel_end);
++ set_tag(line, blocks, "\\i", TO_STRING(font.GetStyle() == wxFONTSTYLE_ITALIC), sel_start, sel_end);
+ if (font.GetUnderlined() != startfont.GetUnderlined())
+- set_tag(line, blocks, "\\i", std::to_string(font.GetUnderlined()), sel_start, sel_end);
++ set_tag(line, blocks, "\\i", TO_STRING(font.GetUnderlined()), sel_start, sel_end);
+
+ commit_text(c, _("set font"), sel_start, sel_end);
+ }
+@@ -711,7 +718,7 @@
+ }
+
+ static void combine_karaoke(AssDialogue *first, AssDialogue *second) {
+- first->Text = first->Text.get() + "{\\k" + std::to_string((second->Start - first->End) / 10) + "}" + second->Text.get();
++ first->Text = first->Text.get() + "{\\k" + TO_STRING((second->Start - first->End) / 10) + "}" + second->Text.get();
+ }
+
+ static void combine_concat(AssDialogue *first, AssDialogue *second) {
diff --git a/multimedia/aegisub/files/patch-src__command__recent.cpp b/multimedia/aegisub/files/patch-src__command__recent.cpp
new file mode 100644
index 000000000000..c43356c031af
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__command__recent.cpp
@@ -0,0 +1,25 @@
+--- src/command/recent.cpp.orig
++++ src/command/recent.cpp
+@@ -44,6 +44,13 @@
+ #include <wx/event.h>
+ #include <wx/msgdlg.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ namespace {
+ using cmd::Command;
+
+@@ -124,7 +131,7 @@
+ void operator()(agi::Context *c) {
+ T::operator()(c, id);
+ }
+- mru_wrapper(int id) : id(id) , full_name(T::name() + std::to_string(id)) { }
++ mru_wrapper(int id) : id(id) , full_name(T::name() + TO_STRING(id)) { }
+ };
+ }
+
diff --git a/multimedia/aegisub/files/patch-src__command__video.cpp b/multimedia/aegisub/files/patch-src__command__video.cpp
new file mode 100644
index 000000000000..06a479226325
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__command__video.cpp
@@ -0,0 +1,25 @@
+--- src/command/video.cpp.orig
++++ src/command/video.cpp
+@@ -67,6 +67,13 @@
+ #include <wx/msgdlg.h>
+ #include <wx/textdlg.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ namespace {
+ using cmd::Command;
+
+@@ -119,7 +126,7 @@
+ std::string value = from_wx(wxGetTextFromUser(
+ _("Enter aspect ratio in either:\n decimal (e.g. 2.35)\n fractional (e.g. 16:9)\n specific resolution (e.g. 853x480)"),
+ _("Enter aspect ratio"),
+- std::to_wstring(c->videoController->GetAspectRatioValue())));
++ TO_WSTRING(c->videoController->GetAspectRatioValue())));
+ if (value.empty()) return;
+
+ double numval = 0;
diff --git a/multimedia/aegisub/files/patch-src__dialog_jumpto.cpp b/multimedia/aegisub/files/patch-src__dialog_jumpto.cpp
new file mode 100644
index 000000000000..8f397b3c3fa0
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__dialog_jumpto.cpp
@@ -0,0 +1,25 @@
+--- src/dialog_jumpto.cpp.orig
++++ src/dialog_jumpto.cpp
+@@ -48,6 +48,13 @@
+ #include <wx/stattext.h>
+ #include <wx/textctrl.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ DialogJumpTo::DialogJumpTo(agi::Context *c)
+ : wxDialog(c->parent, -1, _("Jump to"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxWANTS_CHARS)
+ , c(c)
+@@ -59,7 +66,7 @@
+ auto LabelTime = new wxStaticText(this, -1, _("Time: "));
+
+ JumpFrame = new wxTextCtrl(this,-1,"",wxDefaultPosition,wxSize(-1,-1),wxTE_PROCESS_ENTER, IntValidator((int)jumpframe));
+- JumpFrame->SetMaxLength(std::to_string(c->videoController->GetLength() - 1).size());
++ JumpFrame->SetMaxLength(TO_STRING(c->videoController->GetLength() - 1).size());
+ JumpTime = new TimeEdit(this, -1, c, AssTime(c->videoController->TimeAtFrame(jumpframe)).GetAssFormated(), wxSize(-1,-1));
+
+ auto TimesSizer = new wxGridSizer(2, 5, 5);
diff --git a/multimedia/aegisub/files/patch-src__dialog_kara_timing_copy.cpp b/multimedia/aegisub/files/patch-src__dialog_kara_timing_copy.cpp
new file mode 100644
index 000000000000..27df8148c829
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__dialog_kara_timing_copy.cpp
@@ -0,0 +1,25 @@
+--- src/dialog_kara_timing_copy.cpp.orig
++++ src/dialog_kara_timing_copy.cpp
+@@ -69,6 +69,13 @@
+ #define TEXT_LABEL_SOURCE _("Source: ")
+ #define TEXT_LABEL_DEST _("Dest: ")
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ class KaraokeLineMatchDisplay : public wxControl {
+ typedef AssKaraoke::Syllable MatchSyllable;
+
+@@ -358,7 +365,7 @@
+ int duration = 0;
+ for (auto const& syl : match.src)
+ duration += syl.duration;
+- res += "{\\k" + std::to_string(duration / 10) + "}" + match.dst;
++ res += "{\\k" + TO_STRING(duration / 10) + "}" + match.dst;
+ }
+
+ return res;
diff --git a/multimedia/aegisub/files/patch-src__dialog_properties.cpp b/multimedia/aegisub/files/patch-src__dialog_properties.cpp
new file mode 100644
index 000000000000..9ef5fee0afa1
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__dialog_properties.cpp
@@ -0,0 +1,36 @@
+--- src/dialog_properties.cpp.orig
++++ src/dialog_properties.cpp
+@@ -54,6 +54,15 @@
+ #include <wx/stattext.h>
+ #include <wx/textctrl.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ DialogProperties::DialogProperties(agi::Context *c)
+ : wxDialog(c->parent, -1, _("Script Properties"))
+ , c(c)
+@@ -145,7 +154,7 @@
+
+ count += SetInfoIfDifferent("PlayResX", from_wx(ResX->GetValue()));
+ count += SetInfoIfDifferent("PlayResY", from_wx(ResY->GetValue()));
+- count += SetInfoIfDifferent("WrapStyle", std::to_string(WrapStyle->GetSelection()));
++ count += SetInfoIfDifferent("WrapStyle", TO_STRING(WrapStyle->GetSelection()));
+ count += SetInfoIfDifferent("ScaledBorderAndShadow", ScaleBorder->GetValue() ? "yes" : "no");
+
+ if (count) c->ass->Commit(_("property changes"), AssFile::COMMIT_SCRIPTINFO);
+@@ -162,6 +171,6 @@
+ }
+
+ void DialogProperties::OnSetFromVideo(wxCommandEvent &) {
+- ResX->SetValue(std::to_wstring(c->videoController->GetWidth()));
+- ResY->SetValue(std::to_wstring(c->videoController->GetHeight()));
++ ResX->SetValue(TO_WSTRING(c->videoController->GetWidth()));
++ ResY->SetValue(TO_WSTRING(c->videoController->GetHeight()));
+ }
diff --git a/multimedia/aegisub/files/patch-src__dialog_shift_times.cpp b/multimedia/aegisub/files/patch-src__dialog_shift_times.cpp
new file mode 100644
index 000000000000..7d8f76024966
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__dialog_shift_times.cpp
@@ -0,0 +1,25 @@
+--- src/dialog_shift_times.cpp.orig
++++ src/dialog_shift_times.cpp
+@@ -56,6 +56,13 @@
+ #include <wx/sizer.h>
+ #include <wx/textctrl.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ static wxString get_history_string(json::Object &obj) {
+ wxString filename = to_wx(obj["filename"]);
+ if (filename.empty())
+@@ -87,7 +94,7 @@
+ int beg = (int64_t)(*it)["start"];
+ int end = (int64_t)(*it)["end"];
+ if (beg == end)
+- lines += std::to_wstring(beg);
++ lines += TO_WSTRING(beg);
+ else
+ lines += wxString::Format("%d-%d", beg, end);
+ if (it + 1 != sel.end())
diff --git a/multimedia/aegisub/files/patch-src__dialog_style_editor.cpp b/multimedia/aegisub/files/patch-src__dialog_style_editor.cpp
new file mode 100644
index 000000000000..3e0bfe0dcaf3
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__dialog_style_editor.cpp
@@ -0,0 +1,25 @@
+--- src/dialog_style_editor.cpp.orig
++++ src/dialog_style_editor.cpp
+@@ -62,6 +62,13 @@
+ #include <wx/sizer.h>
+ #include <wx/stattext.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ /// Style rename helper that walks a file searching for a style and optionally
+ /// updating references to it
+ class StyleRenamer {
+@@ -160,7 +167,7 @@
+ SetIcon(GETICON(style_toolbutton_16));
+
+ // Prepare control values
+- wxString EncodingValue = std::to_wstring(style->encoding);
++ wxString EncodingValue = TO_WSTRING(style->encoding);
+ wxString alignValues[9] = { "7", "8", "9", "4", "5", "6", "1", "2", "3" };
+
+ // Encoding options
diff --git a/multimedia/aegisub/files/patch-src__ffmpegsource_common.cpp b/multimedia/aegisub/files/patch-src__ffmpegsource_common.cpp
new file mode 100644
index 000000000000..4a2f275ab45b
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__ffmpegsource_common.cpp
@@ -0,0 +1,25 @@
+--- src/ffmpegsource_common.cpp.orig
++++ src/ffmpegsource_common.cpp
+@@ -56,6 +56,13 @@
+ #include <wx/config.h>
+ #include <wx/choicdlg.h> // Keep this last so wxUSE_CHOICEDLG is set.
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ #ifdef _WIN32
+ #include <objbase.h>
+
+@@ -221,7 +228,7 @@
+ hash.process_bytes(filename.string().c_str(), filename.string().size());
+
+ // Generate the filename
+- auto result = config::path->Decode("?local/ffms2cache/" + std::to_string(hash.checksum()) + "_" + std::to_string(len) + "_" + std::to_string(agi::fs::ModifiedTime(filename)) + ".ffindex");
++ auto result = config::path->Decode("?local/ffms2cache/" + TO_STRING(hash.checksum()) + "_" + TO_STRING(len) + "_" + TO_STRING(agi::fs::ModifiedTime(filename)) + ".ffindex");
+
+ // Ensure that folder exists
+ agi::fs::CreateDirectory(result.parent_path());
diff --git a/multimedia/aegisub/files/patch-src__ffmpegsource_common.h b/multimedia/aegisub/files/patch-src__ffmpegsource_common.h
new file mode 100644
index 000000000000..98389c813f34
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__ffmpegsource_common.h
@@ -0,0 +1,10 @@
+--- src/ffmpegsource_common.h.orig
++++ src/ffmpegsource_common.h
+@@ -34,6 +34,7 @@
+
+ #ifdef WITH_FFMS2
+ #include <map>
++#include <string>
+
+ #include <ffms.h>
+
diff --git a/multimedia/aegisub/files/patch-src__frame_main.cpp b/multimedia/aegisub/files/patch-src__frame_main.cpp
new file mode 100644
index 000000000000..9dcff17723bc
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__frame_main.cpp
@@ -0,0 +1,10 @@
+--- src/frame_main.cpp.orig
++++ src/frame_main.cpp
+@@ -80,6 +80,7 @@
+ #include <wx/msgdlg.h>
+ #include <wx/statline.h>
+ #include <wx/sysopt.h>
++#include <wx/toolbar.h>
+
+ enum {
+ ID_APP_TIMER_STATUSCLEAR = 12002
diff --git a/multimedia/aegisub/files/patch-src__main.cpp b/multimedia/aegisub/files/patch-src__main.cpp
new file mode 100644
index 000000000000..0d9fe7930e32
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__main.cpp
@@ -0,0 +1,10 @@
+--- src/main.cpp.orig
++++ src/main.cpp
+@@ -69,6 +69,7 @@
+ #include <boost/locale.hpp>
+ #include <sstream>
+
++#include <wx/clipbrd.h>
+ #include <wx/config.h>
+ #include <wx/msgdlg.h>
+ #include <wx/stackwalk.h>
diff --git a/multimedia/aegisub/files/patch-src__preferences_base.cpp b/multimedia/aegisub/files/patch-src__preferences_base.cpp
new file mode 100644
index 000000000000..8ee28c9ed4b2
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__preferences_base.cpp
@@ -0,0 +1,34 @@
+--- src/preferences_base.cpp.orig
++++ src/preferences_base.cpp
+@@ -42,6 +42,13 @@
+ #include <wx/stattext.h>
+ #include <wx/treebook.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ #define OPTION_UPDATER(type, evttype, opt, body) \
+ class type { \
+ std::string name; \
+@@ -126,7 +133,7 @@
+ }
+
+ case agi::OptionValue::Type_Int: {
+- wxSpinCtrl *sc = new wxSpinCtrl(this, -1, std::to_wstring((int)opt->GetInt()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, opt->GetInt());
++ wxSpinCtrl *sc = new wxSpinCtrl(this, -1, TO_WSTRING((int)opt->GetInt()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, opt->GetInt());
+ sc->Bind(wxEVT_SPINCTRL, IntUpdater(opt_name, parent));
+ Add(flex, name, sc);
+ return sc;
+@@ -240,7 +247,7 @@
+ font_name->SetMinSize(wxSize(160, -1));
+ font_name->Bind(wxEVT_TEXT, StringUpdater(face_opt->GetName().c_str(), parent));
+
+- wxSpinCtrl *font_size = new wxSpinCtrl(this, -1, std::to_wstring((int)size_opt->GetInt()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 42, size_opt->GetInt());
++ wxSpinCtrl *font_size = new wxSpinCtrl(this, -1, TO_WSTRING((int)size_opt->GetInt()), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 42, size_opt->GetInt());
+ font_size->Bind(wxEVT_SPINCTRL, IntUpdater(size_opt->GetName().c_str(), parent));
+
+ wxButton *pick_btn = new wxButton(this, -1, _("Choose..."));
diff --git a/multimedia/aegisub/files/patch-src__resolution_resampler.cpp b/multimedia/aegisub/files/patch-src__resolution_resampler.cpp
new file mode 100644
index 000000000000..4e9a2759094a
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__resolution_resampler.cpp
@@ -0,0 +1,30 @@
+--- src/resolution_resampler.cpp.orig
++++ src/resolution_resampler.cpp
+@@ -29,9 +29,15 @@
+
+ #include <algorithm>
+ #include <boost/algorithm/string/predicate.hpp>
+-#include <boost/lexical_cast.hpp>
+ #include <functional>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ enum {
+ LEFT = 0,
+ RIGHT = 1,
+@@ -175,8 +181,8 @@
+ for (auto& line : ass->Line)
+ resample_line(&state, line);
+
+- ass->SetScriptInfo("PlayResX", std::to_string(settings.script_x));
+- ass->SetScriptInfo("PlayResY", std::to_string(settings.script_y));
++ ass->SetScriptInfo("PlayResX", TO_STRING(settings.script_x));
++ ass->SetScriptInfo("PlayResY", TO_STRING(settings.script_y));
+
+ ass->Commit(_("resolution resampling"), AssFile::COMMIT_SCRIPTINFO | AssFile::COMMIT_DIAG_FULL);
+ }
diff --git a/multimedia/aegisub/files/patch-src__subs_edit_box.cpp b/multimedia/aegisub/files/patch-src__subs_edit_box.cpp
new file mode 100644
index 000000000000..54941fc51056
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__subs_edit_box.cpp
@@ -0,0 +1,25 @@
+--- src/subs_edit_box.cpp.orig
++++ src/subs_edit_box.cpp
+@@ -71,6 +71,13 @@
+ #include <wx/sizer.h>
+ #include <wx/spinctrl.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ namespace {
+
+ /// Work around wxGTK's fondness for generating events from ChangeValue
+@@ -324,7 +331,7 @@
+ if (type & AssFile::COMMIT_DIAG_META) {
+ layer->SetValue(line->Layer);
+ for (size_t i = 0; i < margin.size(); ++i)
+- change_value(margin[i], std::to_wstring(line->Margin[i]));
++ change_value(margin[i], TO_WSTRING(line->Margin[i]));
+ comment_box->SetValue(line->Comment);
+ style_box->Select(style_box->FindString(to_wx(line->Style)));
+
diff --git a/multimedia/aegisub/files/patch-src__subs_preview.cpp b/multimedia/aegisub/files/patch-src__subs_preview.cpp
new file mode 100644
index 000000000000..26e3f5f4c49a
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__subs_preview.cpp
@@ -0,0 +1,27 @@
+--- src/subs_preview.cpp.orig
++++ src/subs_preview.cpp
+@@ -48,6 +48,13 @@
+ #include <wx/dcclient.h>
+ #include <wx/msgdlg.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ SubtitlesPreview::SubtitlesPreview(wxWindow *parent, wxSize size, int winStyle, agi::Color col)
+ : wxWindow(parent, -1, wxDefaultPosition, size, winStyle)
+ , style(new AssStyle)
+@@ -141,8 +148,8 @@
+ "No subtitles provider", wxOK | wxICON_ERROR | wxCENTER);
+ }
+
+- sub_file->SetScriptInfo("PlayResX", std::to_string(w));
+- sub_file->SetScriptInfo("PlayResY", std::to_string(h));
++ sub_file->SetScriptInfo("PlayResX", TO_STRING(w));
++ sub_file->SetScriptInfo("PlayResY", TO_STRING(h));
+
+ UpdateBitmap();
+ }
diff --git a/multimedia/aegisub/files/patch-src__subtitle_format_srt.cpp b/multimedia/aegisub/files/patch-src__subtitle_format_srt.cpp
new file mode 100644
index 000000000000..280d84cdc423
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__subtitle_format_srt.cpp
@@ -0,0 +1,25 @@
+--- src/subtitle_format_srt.cpp.orig
++++ src/subtitle_format_srt.cpp
+@@ -54,6 +54,13 @@
+ #include <boost/regex.hpp>
+ #include <map>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ DEFINE_SIMPLE_EXCEPTION(SRTParseError, SubtitleFormatParseError, "subtitle_io/parse/srt")
+
+ namespace {
+@@ -481,7 +488,7 @@
+ // Write lines
+ int i=0;
+ for (auto current : copy.Line | agi::of_type<AssDialogue>()) {
+- file.WriteLineToFile(std::to_string(++i));
++ file.WriteLineToFile(TO_STRING(++i));
+ file.WriteLineToFile(WriteSRTTime(current->Start) + " --> " + WriteSRTTime(current->End));
+ file.WriteLineToFile(ConvertTags(current));
+ file.WriteLineToFile("");
diff --git a/multimedia/aegisub/files/patch-src__timeedit_ctrl.cpp b/multimedia/aegisub/files/patch-src__timeedit_ctrl.cpp
new file mode 100644
index 000000000000..8857474d5beb
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__timeedit_ctrl.cpp
@@ -0,0 +1,25 @@
+--- src/timeedit_ctrl.cpp.orig
++++ src/timeedit_ctrl.cpp
+@@ -52,6 +52,13 @@
+
+ #define TimeEditWindowStyle
+
++#ifdef _LIBCPP_VERSION
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ enum {
+ Time_Edit_Copy = 1320,
+ Time_Edit_Paste
+@@ -117,7 +124,7 @@
+
+ void TimeEdit::UpdateText() {
+ if (byFrame)
+- ChangeValue(std::to_wstring(c->videoController->FrameAtTime(time, isEnd ? agi::vfr::END : agi::vfr::START)));
++ ChangeValue(TO_WSTRING(c->videoController->FrameAtTime(time, isEnd ? agi::vfr::END : agi::vfr::START)));
+ else
+ ChangeValue(to_wx(time.GetAssFormated()));
+ }
diff --git a/multimedia/aegisub/files/patch-src__validators.cpp b/multimedia/aegisub/files/patch-src__validators.cpp
new file mode 100644
index 000000000000..8af39f89c4ff
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__validators.cpp
@@ -0,0 +1,25 @@
+--- src/validators.cpp.orig
++++ src/validators.cpp
+@@ -27,6 +27,13 @@
+ #include <wx/combobox.h>
+ #include <wx/textctrl.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_WSTRING(x) std::to_wstring(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_WSTRING(x) boost::lexical_cast<std::wstring>(x)
++#endif
++
+ namespace {
+ std::string new_value(wxTextCtrl *ctrl, int chr) {
+ long from, to;
+@@ -57,7 +64,7 @@
+ }
+
+ bool IntValidator::TransferToWindow() {
+- static_cast<wxTextCtrl *>(GetWindow())->SetValue(std::to_wstring(value));
++ static_cast<wxTextCtrl *>(GetWindow())->SetValue(TO_WSTRING(value));
+ return true;
+ }
+
diff --git a/multimedia/aegisub/files/patch-src__video_context.cpp b/multimedia/aegisub/files/patch-src__video_context.cpp
new file mode 100644
index 000000000000..ed0d765546b9
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__video_context.cpp
@@ -0,0 +1,58 @@
+--- src/video_context.cpp.orig
++++ src/video_context.cpp
+@@ -58,6 +58,13 @@
+
+ #include <wx/msgdlg.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ VideoContext::VideoContext()
+ : playback(this)
+ , playAudioOnStep(OPT_GET("Audio/Plays When Stepping Video"))
+@@ -135,8 +142,8 @@
+ // If the script resolution hasn't been set at all just force it to the
+ // video resolution
+ if (sx == 0 && sy == 0) {
+- context->ass->SetScriptInfo("PlayResX", std::to_string(vx));
+- context->ass->SetScriptInfo("PlayResY", std::to_string(vy));
++ context->ass->SetScriptInfo("PlayResX", TO_STRING(vx));
++ context->ass->SetScriptInfo("PlayResY", TO_STRING(vy));
+ commit_subs = true;
+ }
+ // If it has been set to something other than a multiple of the video
+@@ -153,8 +160,8 @@
+ break;
+ // Fallthrough to case 2
+ case 2: // Always change script res
+- context->ass->SetScriptInfo("PlayResX", std::to_string(vx));
+- context->ass->SetScriptInfo("PlayResY", std::to_string(vy));
++ context->ass->SetScriptInfo("PlayResX", TO_STRING(vx));
++ context->ass->SetScriptInfo("PlayResY", TO_STRING(vy));
+ commit_subs = true;
+ break;
+ default: // Never change
+@@ -248,16 +255,16 @@
+
+ std::string ar;
+ if (ar_type == AspectRatio::Custom)
+- ar = "c" + std::to_string(ar_value);
++ ar = "c" + TO_STRING(ar_value);
+ else
+- ar = std::to_string((int)ar_type);
++ ar = TO_STRING((int)ar_type);
+
+ context->ass->SetScriptInfo("Video File", config::path->MakeRelative(video_filename, "?script").generic_string());
+ auto matrix = video_provider->GetColorSpace();
+ if (!matrix.empty())
+ context->ass->SetScriptInfo("YCbCr Matrix", matrix);
+ context->ass->SaveUIState("Video Aspect Ratio", ar);
+- context->ass->SaveUIState("Video Position", std::to_string(frame_n));
++ context->ass->SaveUIState("Video Position", TO_STRING(frame_n));
+ }
+
+ void VideoContext::JumpToFrame(int n) {
diff --git a/multimedia/aegisub/files/patch-src__video_display.cpp b/multimedia/aegisub/files/patch-src__video_display.cpp
new file mode 100644
index 000000000000..4a464def1020
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__video_display.cpp
@@ -0,0 +1,23 @@
+--- src/video_display.cpp.orig
++++ src/video_display.cpp
+@@ -69,6 +69,13 @@
+ #include <GL/gl.h>
+ #endif
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ /// Attribute list for gl canvases; set the canvases to doublebuffered rgba with an 8 bit stencil buffer
+ int attribList[] = { WX_GL_RGBA , WX_GL_DOUBLEBUFFER, WX_GL_STENCIL_SIZE, 8, 0 };
+
+@@ -439,5 +446,5 @@
+ }
+
+ void VideoDisplay::OnSubtitlesSave() {
+- con->ass->SaveUIState("Video Zoom Percent", std::to_string(zoomValue));
++ con->ass->SaveUIState("Video Zoom Percent", TO_STRING(zoomValue));
+ }
diff --git a/multimedia/aegisub/files/patch-src__video_frame.h b/multimedia/aegisub/files/patch-src__video_frame.h
new file mode 100644
index 000000000000..84aa43c8e465
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__video_frame.h
@@ -0,0 +1,10 @@
+--- src/video_frame.h.orig
++++ src/video_frame.h
+@@ -15,6 +15,7 @@
+ // Aegisub Project http://www.aegisub.org/
+
+ #include <vector>
++#include <cstddef>
+
+ class wxImage;
+
diff --git a/multimedia/aegisub/files/patch-src__video_out_gl.h b/multimedia/aegisub/files/patch-src__video_out_gl.h
new file mode 100644
index 000000000000..74d179b47c7e
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__video_out_gl.h
@@ -0,0 +1,34 @@
+--- src/video_out_gl.h.orig
++++ src/video_out_gl.h
+@@ -23,6 +23,13 @@
+
+ #include <vector>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ struct VideoFrame;
+
+ /// @class VideoOutGL
+@@ -92,7 +99,7 @@
+ class VideoOutRenderException : public VideoOutException {
+ public:
+ VideoOutRenderException(const char *func, int err)
+- : VideoOutException(std::string(func) + " failed with error code " + std::to_string(err))
++ : VideoOutException(std::string(func) + " failed with error code " + TO_STRING(err))
+ { }
+ const char * GetName() const override { return "videoout/opengl/render"; }
+ Exception * Copy() const override { return new VideoOutRenderException(*this); }
+@@ -103,7 +110,7 @@
+ class VideoOutInitException : public VideoOutException {
+ public:
+ VideoOutInitException(const char *func, int err)
+- : VideoOutException(std::string(func) + " failed with error code " + std::to_string(err))
++ : VideoOutException(std::string(func) + " failed with error code " + TO_STRING(err))
+ { }
+ VideoOutInitException(const char *err) : VideoOutException(err) { }
+ const char * GetName() const override { return "videoout/opengl/init"; }
diff --git a/multimedia/aegisub/files/patch-src__video_provider_ffmpegsource.cpp b/multimedia/aegisub/files/patch-src__video_provider_ffmpegsource.cpp
new file mode 100644
index 000000000000..396b5ac85585
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__video_provider_ffmpegsource.cpp
@@ -0,0 +1,25 @@
+--- src/video_provider_ffmpegsource.cpp.orig
++++ src/video_provider_ffmpegsource.cpp
+@@ -48,6 +48,13 @@
+ #include <wx/choicdlg.h>
+ #include <wx/msgdlg.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ namespace {
+ std::string colormatrix_description(int cs, int cr) {
+ // Assuming TV for unspecified
+@@ -222,7 +229,7 @@
+ for (int CurFrameNum = 0; CurFrameNum < VideoInfo->NumFrames; CurFrameNum++) {
+ const FFMS_FrameInfo *CurFrameData = FFMS_GetFrameInfo(FrameData, CurFrameNum);
+ if (!CurFrameData)
+- throw VideoOpenError("Couldn't get info about frame " + std::to_string(CurFrameNum));
++ throw VideoOpenError("Couldn't get info about frame " + TO_STRING(CurFrameNum));
+
+ // keyframe?
+ if (CurFrameData->KeyFrame)
diff --git a/multimedia/aegisub/files/patch-src__video_provider_yuv4mpeg.cpp b/multimedia/aegisub/files/patch-src__video_provider_yuv4mpeg.cpp
new file mode 100644
index 000000000000..548a8833bde7
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__video_provider_yuv4mpeg.cpp
@@ -0,0 +1,34 @@
+--- src/video_provider_yuv4mpeg.cpp.orig
++++ src/video_provider_yuv4mpeg.cpp
+@@ -47,6 +47,13 @@
+ #include <boost/algorithm/string/case_conv.hpp>
+ #include <boost/filesystem/path.hpp>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ // All of this cstdio bogus is because of one reason and one reason only:
+ // MICROSOFT'S IMPLEMENTATION OF STD::FSTREAM DOES NOT SUPPORT FILES LARGER THAN 2 GB.
+ // (yes, really)
+@@ -141,7 +148,7 @@
+ int buf;
+
+ if (fseeko(sf, startpos, SEEK_SET))
+- throw VideoOpenError("YUV4MPEG video provider: ReadHeader: failed seeking to position " + std::to_string(startpos));
++ throw VideoOpenError("YUV4MPEG video provider: ReadHeader: failed seeking to position " + TO_STRING(startpos));
+
+ // read header until terminating newline (0x0A) is found
+ while ((buf = fgetc(sf)) != 0x0A) {
+@@ -317,7 +324,7 @@
+ seek_table.push_back(curpos);
+ // seek to next frame header start position
+ if (fseeko(sf, frame_sz, SEEK_CUR))
+- throw VideoOpenError("IndexFile: failed seeking to position " + std::to_string(curpos + frame_sz));
++ throw VideoOpenError("IndexFile: failed seeking to position " + TO_STRING(curpos + frame_sz));
+ }
+ else {
+ /// @todo implement rff flags etc
diff --git a/multimedia/aegisub/files/patch-src__visual_tool_rotatexy.cpp b/multimedia/aegisub/files/patch-src__visual_tool_rotatexy.cpp
new file mode 100644
index 000000000000..34b3374e30ba
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__visual_tool_rotatexy.cpp
@@ -0,0 +1,11 @@
+--- src/visual_tool_rotatexy.cpp.orig
++++ src/visual_tool_rotatexy.cpp
+@@ -25,6 +25,8 @@
+ #include <boost/format.hpp>
+ #include <cmath>
+
++#include <wx/colour.h>
++
+ VisualToolRotateXY::VisualToolRotateXY(VideoDisplay *parent, agi::Context *context)
+ : VisualTool<VisualDraggableFeature>(parent, context)
+ {
diff --git a/multimedia/aegisub/files/patch-src__visual_tool_scale.cpp b/multimedia/aegisub/files/patch-src__visual_tool_scale.cpp
new file mode 100644
index 000000000000..7d53e42f8733
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__visual_tool_scale.cpp
@@ -0,0 +1,27 @@
+--- src/visual_tool_scale.cpp.orig
++++ src/visual_tool_scale.cpp
+@@ -26,6 +26,13 @@
+
+ #include "utils.h"
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ VisualToolScale::VisualToolScale(VideoDisplay *parent, agi::Context *context)
+ : VisualTool<VisualDraggableFeature>(parent, context)
+ {
+@@ -106,8 +113,8 @@
+ if (ctrl_down)
+ scale = scale.Round(25.f);
+
+- SetSelectedOverride("\\fscx", std::to_string((int)scale.X()));
+- SetSelectedOverride("\\fscy", std::to_string((int)scale.Y()));
++ SetSelectedOverride("\\fscx", TO_STRING((int)scale.X()));
++ SetSelectedOverride("\\fscy", TO_STRING((int)scale.Y()));
+ }
+
+ void VisualToolScale::DoRefresh() {
diff --git a/multimedia/aegisub/files/patch-src__visual_tool_vector_clip.cpp b/multimedia/aegisub/files/patch-src__visual_tool_vector_clip.cpp
new file mode 100644
index 000000000000..b862f370dece
--- /dev/null
+++ b/multimedia/aegisub/files/patch-src__visual_tool_vector_clip.cpp
@@ -0,0 +1,25 @@
+--- src/visual_tool_vector_clip.cpp.orig
++++ src/visual_tool_vector_clip.cpp
+@@ -36,6 +36,13 @@
+ #include <boost/range/algorithm/set_algorithm.hpp>
+ #include <wx/toolbar.h>
+
++#ifdef _LIBCPP_VERSION
++#define TO_STRING(x) std::to_string(x)
++#else
++#include <boost/lexical_cast.hpp>
++#define TO_STRING(x) boost::lexical_cast<std::string>(x)
++#endif
++
+ /// Button IDs
+ enum {
+ BUTTON_DRAG = 1300,
+@@ -208,7 +215,7 @@
+ void VisualToolVectorClip::Save() {
+ std::string value = "(";
+ if (spline.GetScale() != 1)
+- value += std::to_string(spline.GetScale()) + ",";
++ value += TO_STRING(spline.GetScale()) + ",";
+ value += spline.EncodeToAss() + ")";
+
+ for (auto line : c->selectionController->GetSelectedSet()) {
diff --git a/multimedia/aegisub/pkg-plist b/multimedia/aegisub/pkg-plist
index e8b1c6f31a61..d52001deda65 100644
--- a/multimedia/aegisub/pkg-plist
+++ b/multimedia/aegisub/pkg-plist
@@ -1,34 +1,36 @@
bin/aegisub-%%VERSION%%
-%%DATADIR%%/%%VERSION%%/automation/autoload/cleantags-autoload.lua
-%%DATADIR%%/%%VERSION%%/automation/autoload/kara-templater.lua
-%%DATADIR%%/%%VERSION%%/automation/autoload/karaoke-auto-leadin.lua
-%%DATADIR%%/%%VERSION%%/automation/autoload/macro-1-edgeblur.lua
-%%DATADIR%%/%%VERSION%%/automation/autoload/macro-2-mkfullwitdh.lua
-%%DATADIR%%/%%VERSION%%/automation/include/Aegisub/Progress.pm
-%%DATADIR%%/%%VERSION%%/automation/include/Aegisub/Script.pm
-%%DATADIR%%/%%VERSION%%/automation/include/Aegisub.pm
-%%DATADIR%%/%%VERSION%%/automation/include/Auto4Utils.pm
-%%DATADIR%%/%%VERSION%%/automation/include/cleantags.lua
-%%DATADIR%%/%%VERSION%%/automation/include/karaskel-adv.lua
-%%DATADIR%%/%%VERSION%%/automation/include/karaskel-auto4.lua
-%%DATADIR%%/%%VERSION%%/automation/include/karaskel-base.lua
-%%DATADIR%%/%%VERSION%%/automation/include/karaskel.lua
-%%DATADIR%%/%%VERSION%%/automation/include/unicode.lua
-%%DATADIR%%/%%VERSION%%/automation/include/utils-auto4.lua
-%%DATADIR%%/%%VERSION%%/automation/include/utils.lua
+%%DATADIR%%/automation/autoload/clean-info.lua
+%%DATADIR%%/automation/autoload/cleantags-autoload.lua
+%%DATADIR%%/automation/autoload/kara-templater.lua
+%%DATADIR%%/automation/autoload/karaoke-auto-leadin.lua
+%%DATADIR%%/automation/autoload/macro-1-edgeblur.lua
+%%DATADIR%%/automation/autoload/macro-2-mkfullwitdh.lua
+%%DATADIR%%/automation/autoload/select-overlaps.moon
+%%DATADIR%%/automation/autoload/strip-tags.lua
+%%DATADIR%%/automation/demos/future-windy-blur.lua
+%%DATADIR%%/automation/demos/raytracer.lua
+%%DATADIR%%/automation/include/aegisub/clipboard.lua
+%%DATADIR%%/automation/include/aegisub/re.moon
+%%DATADIR%%/automation/include/aegisub/unicode.moon
+%%DATADIR%%/automation/include/aegisub/util.moon
+%%DATADIR%%/automation/include/cleantags.lua
+%%DATADIR%%/automation/include/clipboard.lua
+%%DATADIR%%/automation/include/karaskel-auto4.lua
+%%DATADIR%%/automation/include/karaskel.lua
+%%DATADIR%%/automation/include/moonscript.lua
+%%DATADIR%%/automation/include/re.lua
+%%DATADIR%%/automation/include/unicode.lua
+%%DATADIR%%/automation/include/utils-auto4.lua
+%%DATADIR%%/automation/include/utils.lua
share/applications/aegisub.desktop
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/automation3.txt
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/demos/future-windy-blur.lua
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/demos/raytracer-test1.ass
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/demos/raytracer.lua
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/v4-docs/basic-function-interface.txt
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/v4-docs/configuration-dialogs.txt
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/v4-docs/file-streams.txt
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/v4-docs/misc.txt
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/v4-docs/overview.txt
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/v4-docs/progress-reporting.txt
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/v4-docs/subtitle-data.txt
-%%PORTDOCS%%%%DOCSDIR%%/aegisub/v4-docs/template-scripting-ideas.ass
+%%PORTDOCS%%%%DOCSDIR%%/automation/v4-docs/basic-function-interface.txt
+%%PORTDOCS%%%%DOCSDIR%%/automation/v4-docs/configuration-dialogs.txt
+%%PORTDOCS%%%%DOCSDIR%%/automation/v4-docs/file-streams.txt
+%%PORTDOCS%%%%DOCSDIR%%/automation/v4-docs/misc.txt
+%%PORTDOCS%%%%DOCSDIR%%/automation/v4-docs/overview.txt
+%%PORTDOCS%%%%DOCSDIR%%/automation/v4-docs/progress-reporting.txt
+%%PORTDOCS%%%%DOCSDIR%%/automation/v4-docs/subtitle-data.txt
+%%PORTDOCS%%%%DOCSDIR%%/automation/v4-docs/template-scripting-ideas.ass
share/icons/hicolor/16x16/apps/aegisub.png
share/icons/hicolor/22x22/apps/aegisub.png
share/icons/hicolor/24x24/apps/aegisub.png
@@ -36,53 +38,44 @@ share/icons/hicolor/32x32/apps/aegisub.png
share/icons/hicolor/48x48/apps/aegisub.png
share/icons/hicolor/64x64/apps/aegisub.png
share/icons/hicolor/scalable/apps/aegisub.svg
-share/locale/ca/LC_MESSAGES/aegisub21.mo
-share/locale/cs/LC_MESSAGES/aegisub21.mo
-share/locale/da/LC_MESSAGES/aegisub21.mo
-share/locale/de/LC_MESSAGES/aegisub21.mo
-share/locale/el/LC_MESSAGES/aegisub21.mo
-share/locale/es/LC_MESSAGES/aegisub21.mo
-share/locale/fa/LC_MESSAGES/aegisub21.mo
-share/locale/fi/LC_MESSAGES/aegisub21.mo
-share/locale/fr_FR/LC_MESSAGES/aegisub21.mo
-share/locale/hu/LC_MESSAGES/aegisub21.mo
-share/locale/id/LC_MESSAGES/aegisub21.mo
-share/locale/it/LC_MESSAGES/aegisub21.mo
-share/locale/ja/LC_MESSAGES/aegisub21.mo
-share/locale/ko/LC_MESSAGES/aegisub21.mo
-share/locale/pl/LC_MESSAGES/aegisub21.mo
-share/locale/pt_BR/LC_MESSAGES/aegisub21.mo
-share/locale/pt_PT/LC_MESSAGES/aegisub21.mo
-share/locale/ru/LC_MESSAGES/aegisub21.mo
-share/locale/sr_RS/LC_MESSAGES/aegisub21.mo
-share/locale/sr_RS@latin/LC_MESSAGES/aegisub21.mo
-share/locale/vi/LC_MESSAGES/aegisub21.mo
-share/locale/zh_CN/LC_MESSAGES/aegisub21.mo
-share/locale/zh_TW/LC_MESSAGES/aegisub21.mo
+share/locale/ar/LC_MESSAGES/aegisub-31.mo
+share/locale/bg/LC_MESSAGES/aegisub-31.mo
+share/locale/ca/LC_MESSAGES/aegisub-31.mo
+share/locale/cs/LC_MESSAGES/aegisub-31.mo
+share/locale/da/LC_MESSAGES/aegisub-31.mo
+share/locale/de/LC_MESSAGES/aegisub-31.mo
+share/locale/el/LC_MESSAGES/aegisub-31.mo
+share/locale/es/LC_MESSAGES/aegisub-31.mo
+share/locale/eu/LC_MESSAGES/aegisub-31.mo
+share/locale/fa/LC_MESSAGES/aegisub-31.mo
+share/locale/fi/LC_MESSAGES/aegisub-31.mo
+share/locale/fr_FR/LC_MESSAGES/aegisub-31.mo
+share/locale/gl/LC_MESSAGES/aegisub-31.mo
+share/locale/hu/LC_MESSAGES/aegisub-31.mo
+share/locale/id/LC_MESSAGES/aegisub-31.mo
+share/locale/it/LC_MESSAGES/aegisub-31.mo
+share/locale/ja/LC_MESSAGES/aegisub-31.mo
+share/locale/ko/LC_MESSAGES/aegisub-31.mo
+share/locale/nl/LC_MESSAGES/aegisub-31.mo
+share/locale/pl/LC_MESSAGES/aegisub-31.mo
+share/locale/pt_BR/LC_MESSAGES/aegisub-31.mo
+share/locale/pt_PT/LC_MESSAGES/aegisub-31.mo
+share/locale/ru/LC_MESSAGES/aegisub-31.mo
+share/locale/sr_RS/LC_MESSAGES/aegisub-31.mo
+share/locale/sr_RS@latin/LC_MESSAGES/aegisub-31.mo
+share/locale/vi/LC_MESSAGES/aegisub-31.mo
+share/locale/zh_CN/LC_MESSAGES/aegisub-31.mo
+share/locale/zh_TW/LC_MESSAGES/aegisub-31.mo
@dirrmtry share/locale/sr_RS@latin/LC_MESSAGES
@dirrmtry share/locale/sr_RS@latin
@dirrmtry share/locale/sr_RS/LC_MESSAGES
@dirrmtry share/locale/sr_RS
-@dirrmtry share/icons/hicolor/64x64/apps
-@dirrmtry share/icons/hicolor/64x64
-@dirrmtry share/icons/hicolor/48x48/apps
-@dirrmtry share/icons/hicolor/48x48
-@dirrmtry share/icons/hicolor/32x32/apps
-@dirrmtry share/icons/hicolor/32x32
-@dirrmtry share/icons/hicolor/24x24/apps
-@dirrmtry share/icons/hicolor/24x24
-@dirrmtry share/icons/hicolor/22x22/apps
-@dirrmtry share/icons/hicolor/22x22
-@dirrmtry share/icons/hicolor/16x16/apps
-@dirrmtry share/icons/hicolor
-@dirrmtry share/icons
-%%PORTDOCS%%@dirrm %%DOCSDIR%%/aegisub/v4-docs
-%%PORTDOCS%%@dirrm %%DOCSDIR%%/aegisub/demos
-%%PORTDOCS%%@dirrm %%DOCSDIR%%/aegisub
+%%PORTDOCS%%@dirrm %%DOCSDIR%%/automation/v4-docs
+%%PORTDOCS%%@dirrm %%DOCSDIR%%/automation
%%PORTDOCS%%@dirrm %%DOCSDIR%%
-@dirrm %%DATADIR%%/%%VERSION%%/automation/include/Aegisub
-@dirrm %%DATADIR%%/%%VERSION%%/automation/include
-@dirrm %%DATADIR%%/%%VERSION%%/automation/autoload
-@dirrm %%DATADIR%%/%%VERSION%%/automation
-@dirrm %%DATADIR%%/%%VERSION%%
+@dirrm %%DATADIR%%/automation/include/aegisub
+@dirrm %%DATADIR%%/automation/include
+@dirrm %%DATADIR%%/automation/demos
+@dirrm %%DATADIR%%/automation/autoload
+@dirrm %%DATADIR%%/automation
@dirrm %%DATADIR%%