相変わらずAArch64環境でDocker containerイメージを作成しているのですが、そのうちの一つであるstubbyが次期バージョンからcmake
でbuildするように変わるそうです。
そのため移行のための準備をしていたのですが、とあるオプションを有効にするとライブラリが正しく検索されない問題に遭遇しました。
stubbyのレポジトリ
確認環境
- Alpine linux 3.11.3 AArch64
発生している問題
-- Found Threads: TRUE
-- Found Libidn2: /usr/lib/libidn2.so (found suitable version "2.3.0", minimum required is "2.0.0")
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find GnuTLS (missing: GNUTLS_LIBRARIES) (Required is at least
version "3.5.0")
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake/modules/FindGnuTLS.cmake:80 (find_package_handle_standard_args)
CMakeLists.txt:367 (find_package)
エラーメッセージ部分を抜粋しています。上記のようにGnuTLSライブラリが見つからない、というエラーメッセージだと認識しています。
しかし以下のようにインストールしています。
/usr/src/build # apk info | grep gnutls
WARNING: Ignoring APKINDEX.70f61090.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.ca2fea5b.tar.gz: No such file or directory
gnutls
gnutls-c++
gnutls-dev
該当のcmakeモジュール
といってもモジュールドキュメントを確認しても、公式サイトを確認してみてもよくわかっていないのですが・・・。なんにせよ今回のfind_package
が正しくGnuTLSライブラリを検索していないというのはわかります。
調べてみるとfind_package
は pkg_check_modules
を大体に使えることがわかりました。
自分なりの対策をしてみた
その1
ということで、上記のWebサイトの情報を参考にパッチを作りそれで問題が回避できないか試してみました。
--- CMakeLists.txt.bak 2020-02-23 09:33:05.735484712 +0900
+++ CMakeLists.txt 2020-02-23 09:37:04.087814273 +0900
@@ -364,7 +364,8 @@
# GnuTLS and Nettle. If using GnuTLS, we need the Nettle dev stuff to
# handle digital signature algorithms. GnuTLS uses Nettle internally.
if (USE_GNUTLS)
- find_package(GnuTLS "3.5.0" REQUIRED)
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(GnuTLS REQUIRED gnutls>=3.5)
find_package(Nettle REQUIRED)
set(tlsdir "gnutls")
set(HAVE_NETTLE 1)
結果は?
-- Looking for os/log.h - not found
-- Looking for getopt
-- Looking for getopt - found
-- Configuring done
CMake Error at CMakeLists.txt:914 (add_executable):
Target "check_getdns_event" links to target "GnuTLS::GnuTLS" but the target
was not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
CMake Error at CMakeLists.txt:914 (add_executable):
Target "check_getdns_event" links to target "GnuTLS::Dane" but the target
was not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
さらに関連するライブラリ(getdns_event
?)がtargetとしての”GnuTLS::GnuTLS
“や”GnuTLS::Dane
“を見つけることが出来なかった?という理解でいいんでしょうか? 付け焼き刃的な対応ではうまく行かないようです。
その2
そもそもGnuTLSライブラリのPATHが見つからない感じなので、いくつかの変数を指定してみることにしました。
cmake \
-DENABLE_STATIC=OFF \
-DBUILD_STUBBY=ON \
-DSTUB_NATIVE_DNSSEC=ON \
-DEDNS_COOKIES=ON \
-DBUILD_LIBEV=ON \
-DBUILD_LIBEVENT2=ON \
-DBUILD_LIBUV=ON \
-DUSE_LIBIDN2=ON \
-DUSE_GNUTLS=ON \
-DGNUTLS_DIR=/usr \
-DGNUTLS_LIBRARIES=/usr/lib \
-DGNUTLS_INCLUDE_DIR=/usr/inclue \
-DCMAKE_INSTALL_PREFIX=/usr/local \
..
結果は?
-- Found Libidn2: /usr/lib/libidn2.so (found suitable version "2.3.0", minimum required is "2.0.0")
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find GnuTLS (missing: GNUTLS_LIBRARIES) (Required is at least
version "3.5.0")
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
cmake/modules/FindGnuTLS.cmake:80 (find_package_handle_standard_args)
CMakeLists.txt:367 (find_package)
-- Configuring incomplete, errors occurred!
See also "/usr/src/build/CMakeFiles/CMakeOutput.log".
See also "/usr/src/build/CMakeFiles/CMakeError.log".
こちらについても結果は変わりませんでした。
cmake
についての学習が必要なようです。
仕方がないのでgetdnsへissueを立てることにしました。
このあたりの問題についてご存じの方、アドバイスなどあれば教えていただけないでしょうか?