aboutsummaryrefslogtreecommitdiff
path: root/third-party
diff options
context:
space:
mode:
Diffstat (limited to 'third-party')
-rw-r--r--third-party/CMakeLists.txt24
-rw-r--r--third-party/cmake/BuildLibtermkey.cmake1
-rw-r--r--third-party/cmake/BuildLibuv.cmake33
-rw-r--r--third-party/cmake/BuildLibvterm.cmake3
-rw-r--r--third-party/cmake/BuildLuajit.cmake10
-rw-r--r--third-party/cmake/BuildLuarocks.cmake17
-rw-r--r--third-party/cmake/BuildLuv.cmake6
-rw-r--r--third-party/cmake/LibuvCMakeLists.txt15
-rw-r--r--third-party/patches/libtermkey-Fix-escape-sequences-for-MSVC.patch189
-rw-r--r--third-party/patches/libvterm-Fix-escape-sequences-for-MSVC.patch53
-rw-r--r--third-party/patches/luarocks-Change-default-downloader-to-curl.patch24
11 files changed, 301 insertions, 74 deletions
diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt
index 654cc5846f..adb3d73293 100644
--- a/third-party/CMakeLists.txt
+++ b/third-party/CMakeLists.txt
@@ -81,6 +81,15 @@ if(CMAKE_GENERATOR MATCHES "Makefiles")
set(MAKE_PRG "$(MAKE)")
endif()
+if(MINGW AND CMAKE_GENERATOR MATCHES "Ninja")
+ find_program(MAKE_PRG NAMES mingw32-make)
+ if(NOT MAKE_PRG)
+ message(FATAL_ERROR "GNU Make for mingw32 is required to build the dependecies.")
+ else()
+ message(STATUS "Found GNU Make for mingw32 at ${MAKE_PRG}")
+ endif()
+endif()
+
if(CMAKE_C_COMPILER_ARG1)
set(DEPS_C_COMPILER "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}")
else()
@@ -118,8 +127,8 @@ set(LUA_URL https://www.lua.org/ftp/lua-5.1.5.tar.gz)
set(LUA_SHA256 2640fc56a795f29d28ef15e13c34a47e223960b0240e8cb0a82d9b0738695333)
# NOTE: Version must match LUAROCKS_VERSION in third-party/cmake/BuildLuarocks.cmake
-set(LUAROCKS_URL https://github.com/luarocks/luarocks/archive/v2.4.3.tar.gz)
-set(LUAROCKS_SHA256 ea1881d6954f2a98c34f93674571c8f0cbdbc28dedb3fa3cb56b6a91886d1a99)
+set(LUAROCKS_URL https://github.com/luarocks/luarocks/archive/v2.4.4.tar.gz)
+set(LUAROCKS_SHA256 9eb3d0738fd02ad8bf39bcedccac4e83e9b5fff2bcca247c3584b925b2075d9c)
set(UNIBILIUM_URL https://github.com/mauke/unibilium/archive/v2.0.0.tar.gz)
set(UNIBILIUM_SHA256 78997d38d4c8177c60d3d0c1aa8c53fd0806eb21825b7b335b1768d7116bc1c1)
@@ -148,16 +157,22 @@ set(WINGUI_SHA256 260efc686423e2529360b6a45c8e241fbbf276c8de6b04d44f45ab5b6fe8df
set(WIN32YANK_X86_URL https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x86.zip)
set(WIN32YANK_X86_SHA256 62f34e5a46c5d4a7b3f3b512e1ff7b77fedd432f42581cbe825233a996eed62c)
-
set(WIN32YANK_X86_64_URL https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x64.zip)
set(WIN32YANK_X86_64_SHA256 33a747a92da60fb65e668edbf7661d3d902411a2d545fe9dc08623cecd142a20)
set(WINPTY_URL https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip)
set(WINPTY_SHA256 35a48ece2ff4acdcbc8299d4920de53eb86b1fb41e64d2fe5ae7898931bcee89)
+# gettext source (for building/linking, does NOT provide tools like msgmerge.exe)
set(GETTEXT_URL https://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.1.tar.gz)
set(GETTEXT_SHA256 ff942af0e438ced4a8b0ea4b0b6e0d6d657157c5e2364de57baa279c1c125c43)
+# gettext binary (for tools like msgmerge.exe)
+set(GETTEXT_X86_URL https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.19.8.1-v1.15/gettext0.19.8.1-iconv1.15-shared-32.zip)
+set(GETTEXT_X86_SHA256 b7d8fe2d038950bc0447d664db614ebfc3100a1ba962a959d78e41bc708a2140)
+set(GETTEXT_X86_64_URL https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.19.8.1-v1.15/gettext0.19.8.1-iconv1.15-shared-64.zip)
+set(GETTEXT_X86_64_SHA256 c8ed2897438efc0a511892c2b38b623ef0c9092aced2acbd3f3daf2f12ba70b4)
+
if(USE_BUNDLED_UNIBILIUM)
include(BuildUnibilium)
endif()
@@ -220,6 +235,9 @@ if(WIN32)
GetBinaryDep(TARGET "win32yank_${TARGET_ARCH}"
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy win32yank.exe ${DEPS_INSTALL_DIR}/bin)
+ GetBinaryDep(TARGET "gettext_${TARGET_ARCH}"
+ INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory bin ${DEPS_INSTALL_DIR}/bin)
+
if("${TARGET_ARCH}" STREQUAL "X86_64")
set(TARGET_ARCH x64)
elseif(TARGET_ARCH STREQUAL "X86")
diff --git a/third-party/cmake/BuildLibtermkey.cmake b/third-party/cmake/BuildLibtermkey.cmake
index 8147c47e1e..0b56674ad2 100644
--- a/third-party/cmake/BuildLibtermkey.cmake
+++ b/third-party/cmake/BuildLibtermkey.cmake
@@ -14,6 +14,7 @@ ExternalProject_Add(libtermkey
PATCH_COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libtermkey init
COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libtermkey apply --ignore-whitespace
${CMAKE_CURRENT_SOURCE_DIR}/patches/libtermkey-Add-support-for-Windows.patch
+ ${CMAKE_CURRENT_SOURCE_DIR}/patches/libtermkey-Fix-escape-sequences-for-MSVC.patch
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/cmake/libtermkeyCMakeLists.txt
${DEPS_BUILD_DIR}/src/libtermkey/CMakeLists.txt
diff --git a/third-party/cmake/BuildLibuv.cmake b/third-party/cmake/BuildLibuv.cmake
index 084e707f92..e1aecdc43c 100644
--- a/third-party/cmake/BuildLibuv.cmake
+++ b/third-party/cmake/BuildLibuv.cmake
@@ -44,7 +44,7 @@ set(UNIX_CFGCMD sh ${DEPS_BUILD_DIR}/src/libuv/autogen.sh &&
set(LIBUV_PATCH_COMMAND
${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libuv init
- COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libuv apply
+ COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libuv apply --ignore-whitespace
${CMAKE_CURRENT_SOURCE_DIR}/patches/libuv-overlapped.patch)
if(UNIX)
@@ -64,21 +64,16 @@ elseif(MINGW AND CMAKE_CROSSCOMPILING)
CONFIGURE_COMMAND ${UNIX_CFGCMD} --host=${CROSS_TARGET}
INSTALL_COMMAND ${MAKE_PRG} V=1 install)
-elseif(MINGW)
-
- # Native MinGW
- BuildLibUv(BUILD_IN_SOURCE
- PATCH_COMMAND ${LIBUV_PATCH_COMMAND}
- BUILD_COMMAND ${CMAKE_MAKE_PROGRAM} -f Makefile.mingw
- INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/lib
- COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/libuv/libuv.a ${DEPS_INSTALL_DIR}/lib
- COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/libuv/include ${DEPS_INSTALL_DIR}/include
- )
-
-elseif(WIN32 AND MSVC)
+elseif(WIN32)
set(UV_OUTPUT_DIR ${DEPS_BUILD_DIR}/src/libuv/${CMAKE_BUILD_TYPE})
+ if(MSVC)
+ set(BUILD_SHARED ON)
+ elseif(MINGW)
+ set(BUILD_SHARED OFF)
+ else()
+ message(FATAL_ERROR "Trying to build libuv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}")
+ endif()
BuildLibUv(BUILD_IN_SOURCE
PATCH_COMMAND ${LIBUV_PATCH_COMMAND}
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
@@ -88,16 +83,10 @@ elseif(WIN32 AND MSVC)
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
- -DBUILD_SHARED_LIBS=ON
+ -DBUILD_SHARED_LIBS=${BUILD_SHARED}
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}
- INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE}
- # Some applications (lua-client/luarocks) look for uv.lib instead of libuv.lib
- COMMAND ${CMAKE_COMMAND} -E copy ${UV_OUTPUT_DIR}/libuv.lib ${DEPS_INSTALL_DIR}/lib/uv.lib
- COMMAND ${CMAKE_COMMAND} -E copy ${UV_OUTPUT_DIR}/libuv.dll ${DEPS_INSTALL_DIR}/bin/
- COMMAND ${CMAKE_COMMAND} -E copy ${UV_OUTPUT_DIR}/libuv.dll ${DEPS_INSTALL_DIR}/bin/uv.dll
- COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/libuv/include ${DEPS_INSTALL_DIR}/include)
+ INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE})
else()
message(FATAL_ERROR "Trying to build libuv in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}")
diff --git a/third-party/cmake/BuildLibvterm.cmake b/third-party/cmake/BuildLibvterm.cmake
index e4649986af..4720581e52 100644
--- a/third-party/cmake/BuildLibvterm.cmake
+++ b/third-party/cmake/BuildLibvterm.cmake
@@ -39,7 +39,8 @@ if(WIN32)
set(LIBVTERM_PATCH_COMMAND
${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libvterm init
COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libvterm apply --ignore-whitespace
- ${CMAKE_CURRENT_SOURCE_DIR}/patches/libvterm-Remove-VLAs-for-MSVC.patch)
+ ${CMAKE_CURRENT_SOURCE_DIR}/patches/libvterm-Remove-VLAs-for-MSVC.patch
+ ${CMAKE_CURRENT_SOURCE_DIR}/patches/libvterm-Fix-escape-sequences-for-MSVC.patch)
endif()
set(LIBVTERM_CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibvtermCMakeLists.txt
diff --git a/third-party/cmake/BuildLuajit.cmake b/third-party/cmake/BuildLuajit.cmake
index 2fda221b12..721bca9f63 100644
--- a/third-party/cmake/BuildLuajit.cmake
+++ b/third-party/cmake/BuildLuajit.cmake
@@ -78,8 +78,12 @@ elseif(MINGW AND CMAKE_CROSSCOMPILING)
elseif(MINGW)
-
- BuildLuaJit(BUILD_COMMAND ${CMAKE_MAKE_PROGRAM} CC=${DEPS_C_COMPILER}
+ if(CMAKE_GENERATOR MATCHES "Ninja")
+ set(LUAJIT_MAKE_PRG ${MAKE_PRG})
+ else()
+ set(LUAJIT_MAKE_PRG ${CMAKE_MAKE_PROGRAM})
+ endif()
+ BuildLuaJit(BUILD_COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER}
PREFIX=${DEPS_INSTALL_DIR}
CFLAGS+=-DLUAJIT_DISABLE_JIT
CFLAGS+=-DLUA_USE_APICHECK
@@ -87,7 +91,7 @@ elseif(MINGW)
CCDEBUG+=-g
BUILDMODE=static
# Build a DLL too
- COMMAND ${CMAKE_MAKE_PROGRAM} CC=${DEPS_C_COMPILER} BUILDMODE=dynamic
+ COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} BUILDMODE=dynamic
INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_INSTALL_DIR}/bin
diff --git a/third-party/cmake/BuildLuarocks.cmake b/third-party/cmake/BuildLuarocks.cmake
index b5fcf7f3e5..e0ea670be1 100644
--- a/third-party/cmake/BuildLuarocks.cmake
+++ b/third-party/cmake/BuildLuarocks.cmake
@@ -12,7 +12,7 @@ function(BuildLuarocks)
cmake_parse_arguments(_luarocks
""
""
- "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND"
+ "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND"
${ARGN})
if(NOT _luarocks_CONFIGURE_COMMAND AND NOT _luarocks_BUILD_COMMAND
@@ -32,7 +32,6 @@ function(BuildLuarocks)
-DTARGET=luarocks
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
- PATCH_COMMAND "${_luarocks_PATCH_COMMAND}"
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND "${_luarocks_CONFIGURE_COMMAND}"
BUILD_COMMAND "${_luarocks_BUILD_COMMAND}"
@@ -51,11 +50,6 @@ if(NOT MSVC)
# version already knows, and passing them here breaks the build
set(LUAROCKS_BUILDARGS CC=${HOSTDEPS_C_COMPILER} LD=${HOSTDEPS_C_COMPILER})
endif()
-if(WIN32)
- # Use our bundled curl.exe for downloading packages
- set(LUAROCKS_BUILDARGS ${LUAROCKS_BUILDARGS} CURL=${DEPS_BIN_DIR}/curl.exe)
-endif()
-
if(UNIX OR (MINGW AND CMAKE_CROSSCOMPILING))
@@ -82,12 +76,7 @@ elseif(MSVC OR MINGW)
endif()
# Ignore USE_BUNDLED_LUAJIT - always ON for native Win32
- BuildLuarocks(
- PATCH_COMMAND
- ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/luarocks init
- COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/luarocks apply --ignore-whitespace
- ${CMAKE_CURRENT_SOURCE_DIR}/patches/luarocks-Change-default-downloader-to-curl.patch
- INSTALL_COMMAND install.bat /FORCECONFIG /NOREG /NOADMIN /Q /F
+ BuildLuarocks(INSTALL_COMMAND install.bat /FORCECONFIG /NOREG /NOADMIN /Q /F
/LUA ${DEPS_INSTALL_DIR}
/LIB ${DEPS_LIB_DIR}
/BIN ${DEPS_BIN_DIR}
@@ -99,8 +88,6 @@ elseif(MSVC OR MINGW)
/LUAMOD ${DEPS_BIN_DIR}/lua)
set(LUAROCKS_BINARY ${DEPS_INSTALL_DIR}/${LUAROCKS_VERSION}/luarocks.bat)
- add_dependencies(luarocks wintools)
-
else()
message(FATAL_ERROR "Trying to build luarocks in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}")
endif()
diff --git a/third-party/cmake/BuildLuv.cmake b/third-party/cmake/BuildLuv.cmake
index 339264746c..a62ee72f91 100644
--- a/third-party/cmake/BuildLuv.cmake
+++ b/third-party/cmake/BuildLuv.cmake
@@ -58,6 +58,12 @@ set(LUV_CONFIGURE_COMMAND_COMMON
-DBUILD_SHARED_LIBS=OFF
-DBUILD_MODULE=OFF)
+if(USE_BUNDLED_LIBUV)
+ set(LUV_CONFIGURE_COMMAND_COMMON
+ ${LUV_CONFIGURE_COMMAND_COMMON}
+ -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_DIR})
+endif()
+
if(MINGW AND CMAKE_CROSSCOMPILING)
get_filename_component(TOOLCHAIN ${CMAKE_TOOLCHAIN_FILE} REALPATH)
set(LUV_CONFIGURE_COMMAND
diff --git a/third-party/cmake/LibuvCMakeLists.txt b/third-party/cmake/LibuvCMakeLists.txt
index 063e4291f2..8b51a101c6 100644
--- a/third-party/cmake/LibuvCMakeLists.txt
+++ b/third-party/cmake/LibuvCMakeLists.txt
@@ -4,11 +4,13 @@ project(libuv LANGUAGES C)
file(GLOB UV_SOURCES_COMMON src/*.c)
file(GLOB UV_SOURCES_WIN src/win/*.c)
-add_library(libuv ${UV_SOURCES_COMMON} ${UV_SOURCES_WIN})
-target_compile_definitions(libuv PRIVATE WIN32_LEAN_AND_MEAN "_WIN32_WINNT=0x0600")
-target_link_libraries(libuv iphlpapi psapi shell32 userenv ws2_32)
-target_include_directories(libuv PUBLIC ./include PRIVATE ./src)
-set_target_properties(libuv PROPERTIES DEFINE_SYMBOL BUILDING_UV_SHARED)
+add_library(uv ${UV_SOURCES_COMMON} ${UV_SOURCES_WIN})
+target_compile_definitions(uv PRIVATE WIN32_LEAN_AND_MEAN "_WIN32_WINNT=0x0600")
+target_link_libraries(uv iphlpapi psapi shell32 userenv ws2_32)
+target_include_directories(uv PUBLIC ./include PRIVATE ./src)
+if(BUILD_SHARED_LIBS)
+ set_target_properties(uv PROPERTIES DEFINE_SYMBOL BUILDING_UV_SHARED)
+endif()
install(FILES
include/tree.h
@@ -20,8 +22,9 @@ install(FILES
DESTINATION include)
include(GNUInstallDirs)
-install(TARGETS libuv
+install(TARGETS uv
PUBLIC_HEADER
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
diff --git a/third-party/patches/libtermkey-Fix-escape-sequences-for-MSVC.patch b/third-party/patches/libtermkey-Fix-escape-sequences-for-MSVC.patch
new file mode 100644
index 0000000000..c1099bd3c4
--- /dev/null
+++ b/third-party/patches/libtermkey-Fix-escape-sequences-for-MSVC.patch
@@ -0,0 +1,189 @@
+diff --git a/t/30mouse.c b/t/30mouse.c
+--- a/t/30mouse.c
++++ b/t/30mouse.c
+@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
+
+ tk = termkey_new_abstract("vt100", 0);
+
+- termkey_push_bytes(tk, "\e[M !!", 6);
++ termkey_push_bytes(tk, "\x1b[M !!", 6);
+
+ key.type = -1;
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse press");
+@@ -38,7 +38,7 @@ int main(int argc, char *argv[])
+ is_int(len, 21, "string length for press");
+ is_str(buffer, "MousePress(1) @ (1,1)", "string buffer for press");
+
+- termkey_push_bytes(tk, "\e[M@\"!", 6);
++ termkey_push_bytes(tk, "\x1b[M@\"!", 6);
+
+ key.type = -1;
+ ev = -1; button = -1; line = -1; col = -1;
+@@ -51,7 +51,7 @@ int main(int argc, char *argv[])
+ is_int(col, 2, "mouse column for drag");
+ is_int(key.modifiers, 0, "modifiers for press");
+
+- termkey_push_bytes(tk, "\e[M##!", 6);
++ termkey_push_bytes(tk, "\x1b[M##!", 6);
+
+ key.type = -1;
+ ev = -1; button = -1; line = -1; col = -1;
+@@ -63,7 +63,7 @@ int main(int argc, char *argv[])
+ is_int(col, 3, "mouse column for release");
+ is_int(key.modifiers, 0, "modifiers for press");
+
+- termkey_push_bytes(tk, "\e[M0++", 6);
++ termkey_push_bytes(tk, "\x1b[M0++", 6);
+
+ key.type = -1;
+ ev = -1; button = -1; line = -1; col = -1;
+@@ -81,7 +81,7 @@ int main(int argc, char *argv[])
+ is_str(buffer, "C-MousePress(1)", "string buffer for Ctrl-press");
+
+ // rxvt protocol
+- termkey_push_bytes(tk, "\e[0;20;20M", 10);
++ termkey_push_bytes(tk, "\x1b[0;20;20M", 10);
+
+ key.type = -1;
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse press rxvt protocol");
+@@ -96,7 +96,7 @@ int main(int argc, char *argv[])
+ is_int(col, 20, "mouse column for press rxvt protocol");
+ is_int(key.modifiers, 0, "modifiers for press rxvt protocol");
+
+- termkey_push_bytes(tk, "\e[3;20;20M", 10);
++ termkey_push_bytes(tk, "\x1b[3;20;20M", 10);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse release rxvt protocol");
+
+@@ -111,7 +111,7 @@ int main(int argc, char *argv[])
+ is_int(key.modifiers, 0, "modifiers for release rxvt protocol");
+
+ // SGR protocol
+- termkey_push_bytes(tk, "\e[<0;30;30M", 11);
++ termkey_push_bytes(tk, "\x1b[<0;30;30M", 11);
+
+ key.type = -1;
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse press SGR encoding");
+@@ -127,7 +127,7 @@ int main(int argc, char *argv[])
+ is_int(col, 30, "mouse column for press SGR");
+ is_int(key.modifiers, 0, "modifiers for press SGR");
+
+- termkey_push_bytes(tk, "\e[<0;30;30m", 11);
++ termkey_push_bytes(tk, "\x1b[<0;30;30m", 11);
+
+ key.type = -1;
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse release SGR encoding");
+@@ -139,7 +139,7 @@ int main(int argc, char *argv[])
+
+ is_int(ev, TERMKEY_MOUSE_RELEASE, "mouse event for release SGR");
+
+- termkey_push_bytes(tk, "\e[<0;500;300M", 13);
++ termkey_push_bytes(tk, "\x1b[<0;500;300M", 13);
+
+ key.type = -1;
+ ev = -1; button = -1; line = -1; col = -1;
+diff --git a/t/31position.c b/t/31position.c
+index 1748211..86ad1bc 100644
+--- a/t/31position.c
++++ b/t/31position.c
+@@ -11,7 +11,7 @@ int main(int argc, char *argv[])
+
+ tk = termkey_new_abstract("vt100", 0);
+
+- termkey_push_bytes(tk, "\e[?15;7R", 8);
++ termkey_push_bytes(tk, "\x1b[?15;7R", 8);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for position report");
+
+@@ -25,7 +25,7 @@ int main(int argc, char *argv[])
+ /* A plain CSI R is likely to be <F3> though.
+ * This is tricky :/
+ */
+- termkey_push_bytes(tk, "\e[R", 3);
++ termkey_push_bytes(tk, "\x1b[R", 3);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for <F3>");
+
+diff --git a/t/32modereport.c b/t/32modereport.c
+index 31de400..5e49705 100644
+--- a/t/32modereport.c
++++ b/t/32modereport.c
+@@ -11,7 +11,7 @@ int main(int argc, char *argv[])
+
+ tk = termkey_new_abstract("vt100", 0);
+
+- termkey_push_bytes(tk, "\e[?1;2$y", 8);
++ termkey_push_bytes(tk, "\x1b[?1;2$y", 8);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mode report");
+
+@@ -23,7 +23,7 @@ int main(int argc, char *argv[])
+ is_int(mode, 1, "mode number from mode report");
+ is_int(value, 2, "mode value from mode report");
+
+- termkey_push_bytes(tk, "\e[4;1$y", 7);
++ termkey_push_bytes(tk, "\x1b[4;1$y", 7);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mode report");
+
+diff --git a/t/38csi.c b/t/38csi.c
+index 9d186f6..fd592d5 100644
+--- a/t/38csi.c
++++ b/t/38csi.c
+@@ -13,7 +13,7 @@ int main(int argc, char *argv[])
+
+ tk = termkey_new_abstract("vt100", 0);
+
+- termkey_push_bytes(tk, "\e[5;25v", 7);
++ termkey_push_bytes(tk, "\x1b[5;25v", 7);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for CSI v");
+
+@@ -26,14 +26,14 @@ int main(int argc, char *argv[])
+ is_int(args[1], 25, "args[1] for unknown CSI");
+ is_int(command, 'v', "command for unknown CSI");
+
+- termkey_push_bytes(tk, "\e[?w", 4);
++ termkey_push_bytes(tk, "\x1b[?w", 4);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for CSI ? w");
+ is_int(key.type, TERMKEY_TYPE_UNKNOWN_CSI, "key.type for unknown CSI");
+ is_int(termkey_interpret_csi(tk, &key, args, &nargs, &command), TERMKEY_RES_KEY, "interpret_csi yields RES_KEY");
+ is_int(command, '?'<<8 | 'w', "command for unknown CSI");
+
+- termkey_push_bytes(tk, "\e[?$x", 5);
++ termkey_push_bytes(tk, "\x1b[?$x", 5);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for CSI ? $x");
+ is_int(key.type, TERMKEY_TYPE_UNKNOWN_CSI, "key.type for unknown CSI");
+diff --git a/t/39dcs.c b/t/39dcs.c
+index c517411..f065477 100644
+--- a/t/39dcs.c
++++ b/t/39dcs.c
+@@ -12,7 +12,7 @@ int main(int argc, char *argv[])
+ tk = termkey_new_abstract("xterm", 0);
+
+ // 7bit DCS
+- termkey_push_bytes(tk, "\eP1$r1 q\e\\", 10);
++ termkey_push_bytes(tk, "\x1bP1$r1 q\x1b\\", 10);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for DCS");
+
+@@ -38,7 +38,7 @@ int main(int argc, char *argv[])
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_NONE, "getkey again yields RES_NONE");
+
+ // 7bit OSC
+- termkey_push_bytes(tk, "\e]15;abc\e\\", 10);
++ termkey_push_bytes(tk, "\x1b]15;abc\x1b\\", 10);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for OSC");
+
+@@ -51,7 +51,7 @@ int main(int argc, char *argv[])
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_NONE, "getkey again yields RES_NONE");
+
+ // False alarm
+- termkey_push_bytes(tk, "\eP", 2);
++ termkey_push_bytes(tk, "\x1bP", 2);
+
+ is_int(termkey_getkey(tk, &key), TERMKEY_RES_AGAIN, "getkey yields RES_AGAIN for false alarm");
+
diff --git a/third-party/patches/libvterm-Fix-escape-sequences-for-MSVC.patch b/third-party/patches/libvterm-Fix-escape-sequences-for-MSVC.patch
new file mode 100644
index 0000000000..b2f0809544
--- /dev/null
+++ b/third-party/patches/libvterm-Fix-escape-sequences-for-MSVC.patch
@@ -0,0 +1,53 @@
+diff --git a/src/keyboard.c b/src/keyboard.c
+index bc1299b..5f368f4 100644
+--- a/src/keyboard.c
++++ b/src/keyboard.c
+@@ -48,7 +48,7 @@ void vterm_keyboard_unichar(VTerm *vt, uint32_t c, VTermModifier mod)
+ if(mod & VTERM_MOD_CTRL)
+ c &= 0x1f;
+
+- vterm_push_output_sprintf(vt, "%s%c", mod & VTERM_MOD_ALT ? "\e" : "", c);
++ vterm_push_output_sprintf(vt, "%s%c", mod & VTERM_MOD_ALT ? "\x1b" : "", c);
+ }
+
+ typedef struct {
+@@ -73,7 +73,7 @@ static keycodes_s keycodes[] = {
+ { KEYCODE_ENTER, '\r' }, // ENTER
+ { KEYCODE_TAB, '\t' }, // TAB
+ { KEYCODE_LITERAL, '\x7f' }, // BACKSPACE == ASCII DEL
+- { KEYCODE_LITERAL, '\e' }, // ESCAPE
++ { KEYCODE_LITERAL, '\x1b' }, // ESCAPE
+
+ { KEYCODE_CSI_CURSOR, 'A' }, // UP
+ { KEYCODE_CSI_CURSOR, 'B' }, // DOWN
+@@ -173,7 +173,7 @@ void vterm_keyboard_key(VTerm *vt, VTermKey key, VTermModifier mod)
+ if(mod & (VTERM_MOD_SHIFT|VTERM_MOD_CTRL))
+ vterm_push_output_sprintf_ctrl(vt, C1_CSI, "%d;%du", k.literal, mod+1);
+ else
+- vterm_push_output_sprintf(vt, mod & VTERM_MOD_ALT ? "\e%c" : "%c", k.literal);
++ vterm_push_output_sprintf(vt, mod & VTERM_MOD_ALT ? "\x1b%c" : "%c", k.literal);
+ break;
+
+ case KEYCODE_SS3: case_SS3:
+diff --git a/src/vterm.c b/src/vterm.c
+index 826df93..262b3fc 100644
+--- a/src/vterm.c
++++ b/src/vterm.c
+@@ -158,7 +158,7 @@ INTERNAL void vterm_push_output_sprintf_ctrl(VTerm *vt, unsigned char ctrl, cons
+ size_t orig_cur = vt->outbuffer_cur;
+
+ if(ctrl >= 0x80 && !vt->mode.ctrl8bit)
+- vterm_push_output_sprintf(vt, "\e%c", ctrl - 0x40);
++ vterm_push_output_sprintf(vt, "\x1b%c", ctrl - 0x40);
+ else
+ vterm_push_output_sprintf(vt, "%c", ctrl);
+
+@@ -176,7 +176,7 @@ INTERNAL void vterm_push_output_sprintf_dcs(VTerm *vt, const char *fmt, ...)
+ size_t orig_cur = vt->outbuffer_cur;
+
+ if(!vt->mode.ctrl8bit)
+- vterm_push_output_sprintf(vt, "\e%c", C1_DCS - 0x40);
++ vterm_push_output_sprintf(vt, "\x1b%c", C1_DCS - 0x40);
+ else
+ vterm_push_output_sprintf(vt, "%c", C1_DCS);
+
diff --git a/third-party/patches/luarocks-Change-default-downloader-to-curl.patch b/third-party/patches/luarocks-Change-default-downloader-to-curl.patch
deleted file mode 100644
index b7109a3b53..0000000000
--- a/third-party/patches/luarocks-Change-default-downloader-to-curl.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 69313032fad04743c96bc8f2a029b691857488f9 Mon Sep 17 00:00:00 2001
-Date: Thu, 1 Mar 2018 21:41:29 -0600
-Subject: [PATCH] Change default downloader to curl
-
----
- install.bat | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/install.bat b/install.bat
-index 09cf9aa..76e4059 100644
---- a/install.bat
-+++ b/install.bat
-@@ -1037,7 +1037,7 @@ f:write(S[=[
- site_config.LUAROCKS_UNAME_M=[[$UNAME_M]]
- site_config.LUAROCKS_ROCKS_TREE=[[$TREE_ROOT]]
- site_config.LUAROCKS_PREFIX=[[$PREFIX]]
--site_config.LUAROCKS_DOWNLOADER=[[wget]]
-+site_config.LUAROCKS_DOWNLOADER=[[curl]]
- site_config.LUAROCKS_MD5CHECKER=[[md5sum]]
- ]=])
- if FORCE_CONFIG then
---
-2.16.1.windows.4
-