CMakeを使用して、システムがxsltproc
インストールされているかどうか、およびlibxslt
バージョン 1.1.27 以降であることを確認しようとしています。(以前のバージョンには回避したくないバグがあります。)
を実行するxsltproc --version
と、次のような出力が得られます。
Using libxml 20900, libxslt 10128 and libexslt 817
xsltproc was compiled against libxml 20900, libxslt 10128 and libexslt 817
libxslt 10128 was compiled against libxml 20900
libexslt 817 was compiled against livxml 20900
最初の行から 2 番目の整数を解析するためにこの CMake コードを書き、それを 10127 と比較しようとしていますxsltproc
。
execute_process(COMMAND xsltproc --version
OUTPUT_VARIABLE XSLTPROC_VERSION ERROR_QUIET)
if(XSLTPROC_VERSION)
string(REGEX MATCH "libxslt [0-9]+" LIBXSLT_VERSION
${XSLTPROC_VERSION})
if(LIBXSLT_VERSION LESS 10127) # Always succeeds! Why?
message(STATUS "xsltproc found, but it's too old!")
else()
message(STATUS "xstlproc found, and new enough")
set(WORKING_XSLTPROC 1)
endif()
endif(XSLTPROC_VERSION)
問題は、 でどんな値を取得してLIBXSLT_VERSION
も、テストは常に成功することです。上記の最初の引用されたブロックを発行したシステムで実行すると、正常に成功しましたが、テスト値を 10129 に増やして、失敗パスをたどることを確信しましたが、そうではありませんでした! 後でlibxslt
1.1.17 のシステムで実行しましたが、成功への道筋もたどりました。
私は論理を反転させようとしました (つまりGREATER 10126
)、VERSION_LESS
andSTRLESS
などを使用しました。また、素の整数を文字列に切り替えたり、変数名を逆参照して、文字列と文字列を直接比較したりすることも試みました。何も役に立ちません。
私は主に CMake 2.6 と 2.8 を使用しています。