diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-06-03 23:44:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-03 23:44:06 +0200 |
commit | 32935c86122557dea934d669959eef4ef2b2f910 (patch) | |
tree | aebb7ea980c25346a9a959c4db885df6f3da3ed4 | |
parent | a93690bcebaf4e2c6af0ad613c000c6b3a478855 (diff) | |
parent | a80f73f04317a161306d503a605bca2c1a7f73a0 (diff) | |
download | rneovim-32935c86122557dea934d669959eef4ef2b2f910.tar.gz rneovim-32935c86122557dea934d669959eef4ef2b2f910.tar.bz2 rneovim-32935c86122557dea934d669959eef4ef2b2f910.zip |
Merge #8414 'Windows fixes'
-rw-r--r-- | src/nvim/tui/tui.c | 2 | ||||
-rw-r--r-- | third-party/CMakeLists.txt | 4 | ||||
-rw-r--r-- | third-party/cmake/BuildLibtermkey.cmake | 1 | ||||
-rw-r--r-- | third-party/cmake/BuildLibuv.cmake | 2 | ||||
-rw-r--r-- | third-party/cmake/BuildLibvterm.cmake | 3 | ||||
-rw-r--r-- | third-party/cmake/BuildLuarocks.cmake | 17 | ||||
-rw-r--r-- | third-party/patches/libtermkey-Fix-escape-sequences-for-MSVC.patch | 189 | ||||
-rw-r--r-- | third-party/patches/libvterm-Fix-escape-sequences-for-MSVC.patch | 53 | ||||
-rw-r--r-- | third-party/patches/luarocks-Change-default-downloader-to-curl.patch | 24 |
9 files changed, 251 insertions, 44 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 42ed9ecc7f..25c39587f4 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -849,7 +849,7 @@ CursorShape tui_cursor_decode_shape(const char *shape_str) static cursorentry_T decode_cursor_entry(Dictionary args) { - cursorentry_T r; + cursorentry_T r = shape_table[0]; for (size_t i = 0; i < args.size; i++) { char *key = args.items[i].key.data; diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt index eaeffa2449..d3843e302d 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -127,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) 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 0f2375e29b..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) 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/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/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 - |