LoginSignup
3
0

More than 5 years have passed since last update.

古めのcmakeでOpenSSL 1.1.0系をfind_packageしたい場合の対処

Posted at

環境

  • cmake version 2.8.12.2
  • OpenSSL 1.1.1b 26 Feb 2019(ソースコンパイル)

OpenSSLをインストールしてあるのに、なぜかfind_packageで見つからない

毎回cmakeのパッケージ検索をするのが面倒だったのでfind_packageを仕込んだはいいんですが、以下のようなエラーが出てしまい見つかりませんでした。
ちゃんと対象のファイルは環境下にインストールされているのに。。。

-- Configuring incomplete, errors occurred!
See also "/home/developer/work/EncryptedEditor/build/CMakeFiles/CMakeOutput.log".
CMake Error at /usr/share/cmake/Modules/FindOpenSSL.cmake:278 (list):
  list GET given empty list
Call Stack (most recent call first):
  lib/src/CMakeLists.txt:5 (find_package)


CMake Error at /usr/share/cmake/Modules/FindOpenSSL.cmake:279 (list):
  list GET given empty list
Call Stack (most recent call first):
  lib/src/CMakeLists.txt:5 (find_package)


CMake Error at /usr/share/cmake/Modules/FindOpenSSL.cmake:281 (list):
  list GET given empty list
Call Stack (most recent call first):
  lib/src/CMakeLists.txt:5 (find_package)


CMake Error at /usr/share/cmake/Modules/FindOpenSSL.cmake:283 (list):
  list GET given empty list
Call Stack (most recent call first):
  lib/src/CMakeLists.txt:5 (find_package)

原因

エラー箇所の/usr/share/cmake/Modules/FindOpenSSL.cmakeを覗いてみたところ、ヘッダーパス/openssl/opensslv.h内のOPENSSL_VERSION_NUMBERをパースしてバージョン情報を取得していました。
しかし定義を見比べるとdefineの前にスペースのあるなしという違いが。何それ(-_-;)

header/openssl/opensslv.h
# define OPENSSL_VERSION_NUMBER  0x1010102fL
//#とdefineの間にスペースがある
/usr/share/cmake/Modules/FindOpenSSL.cmake
    file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
         REGEX "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")
##とdefineの間が詰まっていることを想定している

対処

その1. cmakeのversionを上げる

cmake 3.10の場合は、ちゃんとスペースのありなしが判別できるようになっています。なのでcmakeのversionが上げるのがベターですね。

/usr/share/cmake-3.10/Modules/FindOpenSSL.cmake
  file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
       REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")

その2. FindOpenSSL.cmakeを修正する。

cmakeのversionを変えなくても、その1の処理と同じように#とdefineの間にタブ、スペースがある場合を想定した正規表現に変えてあげればOKです。
環境によるツールバージョンの違いはこういったことが起こるのが嫌ですね(-_-;)

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0