2

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 に増やして、失敗パスをたどることを確信しましたが、そうではありませんでした! 後でlibxslt1.1.17 のシステムで実行しましたが、成功への道筋もたどりました。

私は論理を反転させようとしました (つまりGREATER 10126)、VERSION_LESSandSTRLESSなどを使用しました。また、素の整数を文字列に切り替えたり、変数名を逆参照して、文字列と文字列を直接比較したりすることも試みました。何も役に立ちません。

私は主に CMake 2.6 と 2.8 を使用しています。

4

1 に答える 1