Bug #2603

CMake 3.0 で大量に警告が出る

Added by Susumu Yata about 3 years ago. Updated almost 3 years ago.

Status:完了Start date:06/16/2014
Priority:NormalDue date:
Assignee:Susumu Yata% Done:

100%

Category:-
Target version:-

Description

Windows 8.1 64-bit 版 + Visual Studio 2010 にて Mroonga 4.03 の nightly 2014.6.14 をビルドできたものの,以下のような警告が大量に出ます.

CMake Warning (dev) at cmake/install_macros.cmake:36 (GET_TARGET_PROPERTY):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.

The LOCATION property should not be read from target "mysqlclient". Use
the target name directly with add_custom_command, or use the generator
expression $<TARGET_FILE>, as appropriate.

畑ケさん,報告ありがとうございます.

cmake-3.0.error.gz (2.72 KB) Susumu Yata, 06/16/2014 12:24 pm

History

#1 Updated by Susumu Yata about 3 years ago

  • Status changed from 新規 to 担当者作業中

警告に "Use the cmake_policy command to set the policy and suppress this warning" と書いてあるので, cmake_policy というコマンドを使えば抑制できるようです.

CMP0026 については,以下のページに説明がありますけど, LOCATION の使いどころがよくわからないので詳細不明な感じです.

とりあえず, cmake_policy を使って CMP0026 を OLD に設定すれば,今までどおりの挙動で,警告を抑制することができそうです.

ただし, CMP0026 は CMake 3.0 で追加されたものであり, CMake 2.8 で CMP0026 を設定しようとするとエラーになってしまいます.

CMake Error at CMakeLists.txt:26 (cmake_policy):
  Policy "CMP0026" is not known to this version of CMake.

そのため,「CMP0026 があれば」という条件を付ける必要があります.

if(POLICY CMP0026)
  # The following is to suppress warnings with CMake 3.0.
  # http://www.cmake.org/cmake/help/v3.0/policy/CMP0026.html
  cmake_policy(SET CMP0026 OLD)
endif()

#2 Updated by Susumu Yata about 3 years ago

Ubuntu 14.04 で CMake 3.0 を使っても Groonga 単体のビルドでは警告が出ませんでした. Linux だからか,あるいは LOCATION が使われていないからか….

cmake_policy を追加しても問題ないことは確認できました.

MariaDB + Mroonga のビルドで試してみます.

#3 Updated by Susumu Yata about 3 years ago

Ubuntu 14.04 にて mariadb-10.0.11-with-mroonga-4.03 のビルドに cmake-3.0 を使ってみたところ,大量に警告が出ました.

かなり冗長なので,圧縮したものを貼り付けておきます.

CMP0026 のほかに, CMP0045, CMP0046 も出ています.

CMake Warning (dev) at storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake:10 (GET_TARGET_PROPERTY):
  Policy CMP0045 is not set: Error on non-existent target in
  get_target_property.  Run "cmake --help-policy CMP0045" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  get_target_property() called with non-existent target "-lpthread".
Call Stack (most recent call first):
  storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake:43 (TOKU_GET_DEPENDEND_OS_LIBS)
  storage/tokudb/ft-index/portability/CMakeLists.txt:24 (toku_merge_static_libs)
This warning is for project developers.  Use -Wno-dev to suppress it.
CMake Warning (dev) at storage/tokudb/ft-index/portability/CMakeLists.txt:22 (add_dependencies):
  Policy CMP0046 is not set: Error on non-existent dependency in
  add_dependencies.  Run "cmake --help-policy CMP0046" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  The dependency target "build_jemalloc" of target
  "tokuportability_static_conv" does not exist.
This warning is for project developers.  Use -Wno-dev to suppress it.

Mroonga に関連しそうなのは,以下に示します.

CMake Warning (dev) at cmake/install_macros.cmake:282 (GET_TARGET_PROPERTY):
  Policy CMP0026 is not set: Disallow use of the LOCATION target property.
  Run "cmake --help-policy CMP0026" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.

  The LOCATION property should not be read from target "ha_mroonga".  Use the
  target name directly with add_custom_command, or use the generator
  expression $<TARGET_FILE>, as appropriate.

Call Stack (most recent call first):
  cmake/plugin.cmake:214 (MYSQL_INSTALL_TARGETS)
  storage/mroonga/CMakeLists.txt:228 (mysql_add_plugin)
This warning is for project developers.  Use -Wno-dev to suppress it.

そういうわけで,基本的には MariaDB とほかのプラグインが CMake 3.0 に対応していないことに起因しているように思います. 警告の最後に表示されているように, -Wno-dev を付けてやれば,これらの警告は出なくなりました.

Mroonga の CMakeLists.txt に前述の内容を加えることで Mroonga 関連の警告をなくすことができるか確認してみます.

#4 Updated by Susumu Yata about 3 years ago

Mroonga 側の CMakeLists.txt を編集しても無駄でした.

一方で, MariaDB の CMakeLists.txt に前述の cmake_policy を追加すれば CMP0026 に関する警告は出なくなることを確認しました.

MariaDB の方に連絡して対処してもらうしかなさそうです.

といっても, MariaDB の CMakeLists.txt の先頭付近に以下のような記述があったので,同じように追加して終わりじゃないかと思います.

# explicitly set the policy to OLD
# (cannot use NEW, not everyone is on cmake-2.8.12 yet)
IF(POLICY CMP0022)
  CMAKE_POLICY(SET CMP0022 OLD)
ENDIF()

#5 Updated by Susumu Yata about 3 years ago

特に急ぐべきことでもなさそうなので,後ほど CMP0045, CMP0046 についても調べてから MariaDB の開発チームにお知らせする方針で進めます.

#6 Updated by Susumu Yata about 3 years ago

If the bug only affects MariaDB, you can file the bug to the MariaDB bugs database.
If it also affects MySQL, then you should also file the bug to the MySQL bugs database.

MariaDB じゃなくて MySQL の方に報告すべきなようです.

#7 Updated by Susumu Yata about 3 years ago

MySQL のソースコードでも同様の警告が出るか確認してみたところ, CMP0026 と CMP0045 については MySQL でも出ることがわかりました. ただし, CMP0046 については MariaDB のみ出ます. CMP0046 に関する警告が出るのは TokuDB であり, Bazaar のリポジトリからダウンロードした MySQL のソースコードには TokuDB が含まれていないからだと思われます.

仕方がないので, CMP0046 は TokuDB 側の編集で解決できないかをまず確認してみます.

#8 Updated by Susumu Yata about 3 years ago

TokuDB 側の CMakeLists.txt に cmake_policy を追加することで CMP0046 に関する警告は消えました.

CMP0026, CMP0045 については MySQL に報告, CMP0046 については MariaDB か TokuDB に報告する方針で進めます.

もはや Mroonga はほとんど関係ありませんが….

#9 Updated by Susumu Yata about 3 years ago

CMP0026, CMP0045 については, MySQL にバグレポートを出しておきました.

バグレポートの出し方に問題なければ,そのうち対処していただけることでしょう.

#10 Updated by Susumu Yata about 3 years ago

  • Status changed from 担当者作業中 to 保留中
  • % Done changed from 0 to 50

様子見ということで保留中に変更しました.

#11 Updated by Hiroshi Hatake almost 3 years ago

MySQL 5.6.20が出たので少し中身を覗いてみました。

Docs/ChangeLogへ

message:
  Bug#19001781: ADD SUPPORT FOR CMAKE 3
  Set CMP0026 and CMP0045 policies when using CMake 
  version 3 or higher to restore old CMake behavior.
とあり、CMakesLists.txtに
28:# We use the LOCATION target property (CMP0026)
32: CMAKE_POLICY(SET CMP0026 OLD)
29:# and get_target_property() for non-existent targets (CMP0045)
33: CMAKE_POLICY(SET CMP0045 OLD)
と書かれているので古い挙動を一先ずMySQL開発チームは採用したものと思われます。

この対応により、cmake 3.0+でのpolicyの警告はMySQLでは発生しなくなりました。

MariaDB 10.0.13でも同様の変更が入っています。CMP0046については未確認です。

#12 Updated by Kouhei Sutou almost 3 years ago

  • Status changed from 保留中 to 完了
  • % Done changed from 50 to 100

確認ありがとうございます!とても助かります! CMP0046はTokuDBの話なのでこのチケットで扱う範囲外ですね。

ということで、このチケットの範囲内のものは解決したのでこれは閉じます!

Also available in: Atom PDF