前提条件ですが、うちでは
c:/Apps/Neovim 以下にインストールしていますので、新規ビルドは c:/Apps/Neovim-new にインストールしてから最後にディレクトリ名を変更する形にします。Neovimをコンパイルする
CMakeのおかげもあって、ものすごく楽になっています。以前にあった C4819 警告(データの損失を防ぐために、ファイルを Unicode 形式で保存してください。)は出ますが、これは 「ベータ: ワールドワイド言語サポートでUnicode UTF-8を使用(U)」をセットしておくか、Windowsのシステムロケールを「英語(米国)」に変更しておくことで回避できます。お勧めは後者のシステムロケールの変更です。
$ git clone https://github.com/neovim/neovim $ cd neovim neovim$ make CMAKE_BUILD_TYPE=Release CMAKE_INSTALL_PREFIX=c:/Apps/Neovim-newで依存ライブラリまで含めてすべてビルドしてくれます。
ビルドが終わったら
neovim$ make installです。
Neovim-Qtをコンパイルする
equalsraf/neovim-qtは活発な開発という段階は終わって、API への対応があるくらいでほぼ安定ということなのでしょう、最後のコミットも3ヶ月以上前です。ただ、Neovim の Windows バイナリに同梱されている Neovim-Qt は 32bit 版なので、好みの問題でしょうが 64bit 版をコンパイルします。
README.mdには
$ mkdir build $ cd build $ cmake -G "Visual Studio 14" -DCMAKE_BUILD_TYPE=Release .. $ cmake --build . --config Release --target installとありますが、自分の環境ではこれだけではコンパイルできないのでまとめです。
Qt5 は
c:\Apps\Qt\ 以下にインストールしています。バージョンは 5.12.2 で、C:\Apps\Qt\5.12.2\msvc2017_64\binをパスに追加しています。これがないと WinDeployQt.exe を見つけられなくてエラーになります。また CMake は 3.14.4 でパスを通しています。
$ git clone https://github.com/equalsraf/neovim-qt $ cd neovim-qt neovim-qt$ mkdir build $ cd build build$ set CMAKE_PREFIX_PATH=C:/Apps/Qt/5.12.2/msvc2017_64/lib/cmake/Qt5Core;C:/Apps/Qt/5.12.2/msvc2017_64/lib/cmake/Qt5Gui;C:/Apps/Qt/5.12.2/msvc2017_64/lib/cmake/Qt5Svg;C:/Apps/Qt/5.12.2/msvc2017_64/lib/cmake/Qt5Network;C:/Apps/Qt/5.12.2/msvc2017_64/lib/cmake/Qt5Widgets;C:/Apps/Qt/5.12.2/msvc2017_64/lib/cmake/Qt5Test build$ cmake -G "Visual Studio 16" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=c:/Apps/Neovim-new .. build$ cmake --build . --config Releaseここで msgpack-cpp-3.0.1 が C2220 エラーを出してビルドがエラー終了します。なので CMakeLists.txt にパッチを当てます。
neovim-qt$ diff -rub third-party/CMakeLists.txt.orig third-party/CMakeLists.txt
--- third-party/CMakeLists.txt.orig Sat May 18 09:56:59 2019
+++ third-party/CMakeLists.txt Sat May 18 09:53:11 2019
@@ -13,17 +13,17 @@
set(MSGPACK_URL https://github.com/msgpack/msgpack-c/archive/cpp-${MSGPACK_VERSION}.tar.gz)
set(MSGPACK_SHA256 1b834ab0b5b41da1dbfb96dd4a673f6de7e79dbd7f212f45a553ff9cc54abf3b)
-message(STATUS "Downloading Msgpack...")
-set(MSGPACK_TARBALL msgpack-${MSGPACK_VERSION}.tar.gz)
-file(DOWNLOAD ${MSGPACK_URL} ${CMAKE_CURRENT_SOURCE_DIR}/${MSGPACK_TARBALL}
- INACTIVITY_TIMEOUT 30
- EXPECTED_HASH SHA256=${MSGPACK_SHA256})
-execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz ${MSGPACK_TARBALL}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- RESULT_VARIABLE rv)
-if(NOT rv EQUAL 0)
- message(FATAL_ERROR "Failed to extract ${MSGPACK_TARBALL}")
-endif()
+#message(STATUS "Downloading Msgpack...")
+#set(MSGPACK_TARBALL msgpack-${MSGPACK_VERSION}.tar.gz)
+#file(DOWNLOAD ${MSGPACK_URL} ${CMAKE_CURRENT_SOURCE_DIR}/${MSGPACK_TARBALL}
+# INACTIVITY_TIMEOUT 30
+# EXPECTED_HASH SHA256=${MSGPACK_SHA256})
+#execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz ${MSGPACK_TARBALL}
+# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+# RESULT_VARIABLE rv)
+#if(NOT rv EQUAL 0)
+# message(FATAL_ERROR "Failed to extract ${MSGPACK_TARBALL}")
+#endif()
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
set(MSGPACK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/msgpack-c-cpp-${MSGPACK_VERSION}/)
上のパッチを当てておかないと、修正しても上書きされてしまいます。neovim-qt$ diff -rub third-party/msgpack-c-cpp-3.0.1/CMakeLists.txt.orig third-party/msgpack-c-cpp-3.0.1/CMakeLists.txt
--- third-party/msgpack-c-cpp-3.0.1/CMakeLists.txt.orig Sat May 18 09:57:13 2019
+++ third-party/msgpack-c-cpp-3.0.1/CMakeLists.txt Sat May 18 09:53:42 2019
@@ -251,9 +251,9 @@
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
- STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ STRING(REGEX REPLACE "/W[0-4]" "/W3" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
ELSE ()
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
ENDIF ()
ENDIF ()
また、ソースの方では test/tst_neovimconnector.cpp が文字コードの関係でエラーになります。neovim-qt$ diff -rub test/tst_neovimconnector.cpp.orig test/tst_neovimconnector.cpp
--- test/tst_neovimconnector.cpp.orig Sat May 18 10:40:47 2019
+++ test/tst_neovimconnector.cpp Sat May 18 12:00:12 2019
@@ -40,7 +40,7 @@
NeovimConnector *c = NeovimConnector::spawn({"-u", "NONE"});
// This will print a warning, but should succeed
- QString s = "ç日本語";
+ QString s = "nihongo";
QByteArray bytes = c->encode(s);
QCOMPARE(c->decode(bytes), s);
そうしたらビルド&インストールします。Neovimよりもあとにインストールすることで、32bit バイナリも上書きしてくれます。build$ cmake --build . --config Release --target install実際には本来不要なものまでインストールされますが、気になる場合には本家のビルドとファイルを比べて削除すればよいでしょう。
0 件のコメント:
コメントを投稿