NetBSDでlibuvがコンパイルできない件。

自分用メモです。

NetBSD-8 で Neovim の master ブランチをビルドしようとしたら、libuv で
~/build/neovim/.deps/build/src/libuv/src/unix/thread.c:222:22: error: ‘PTHREAD_STACK_MIN’ undeclared (first use in this function)
     if (stack_size < PTHREAD_STACK_MIN)
                      ^
というエラーが出て、コンパイルできませんでした。 ちょっと調べてみると、/usr/include/limits.h
/*
 * These are the correct names, defined in terms of the above
 * except for PTHREAD_KEYS_MAX which is bigger than standard
 * mandated minimum value _POSIX_THREAD_KEYS_MAX.
 */
#define PTHREAD_DESTRUCTOR_ITERATIONS   _POSIX_THREAD_DESTRUCTOR_ITERATIONS
#define PTHREAD_KEYS_MAX                256
/* Not yet: PTHREAD_STACK_MIN */
#define PTHREAD_THREADS_MAX             _POSIX_THREAD_THREADS_MAX
という部分があり、確かに定義されていません。 さらに調べてみると、NetBSD の tech-userlevel メーリングリストで2014年にPTHREAD_STACK_MINというメールが投げられていました。そこでの結論は、 PTHREAD_STACK_MINの代わりにsysconf(_SC_THREAD_STACK_MIN)を使ったほうが安全、ということのようです。 一方 libuv のほうでは、今年の4月に Do not use PTHREAD_STACK_MIN unconditionally for the unix target #2252というのが出ており、結果として「定義されていれば使用する」という形に落ち着いたようです。途中、GNU じゃない FreeBSD とか NetBSD は libuv はサポートせんよ、みたいな投稿もありましたが。

ともあれ、現状では Neovim の CMake では libuv-1.26.0(2019年2月11日リリース)を使用しているようで、1.29.0 では上記の変更が反映されているようなので、そのうち修正なしでコンパイルできるようになるでしょう。

Neovim でのコンパイルにおいては、最初にある thread.c に #2252 のパッチを当てればいいかと思います。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...