diff options
author | David Faure <faure@kde.org> | 2008-10-13 12:27:35 +0000 |
---|---|---|
committer | David Faure <faure@kde.org> | 2008-10-13 12:27:35 +0000 |
commit | a172c1b36c3671f3ad1bae965fbbd3722c671167 (patch) | |
tree | 72ad4605af29d8b7dd9aea4a4bb13d46d0128ac0 | |
parent | 5bfa5c2a22d70dd14d905a1e16a58eec34418819 (diff) | |
download | extra-cmake-modules-a172c1b36c3671f3ad1bae965fbbd3722c671167.tar.gz extra-cmake-modules-a172c1b36c3671f3ad1bae965fbbd3722c671167.tar.bz2 |
Rewrite the check for the strigi api screwup once more, because pkgconfig isn't the only way to find strigi, so using it for the version check doesn't work for everyone.
Now the check is a real CHECK_CXX_SOURCE_COMPILES check.
CCMAIL: jos@vandenoever.info, porten@kde.org, jasonbstubbs@gmail.com
svn path=/trunk/KDE/kdelibs/; revision=870913
-rw-r--r-- | modules/FindStrigi.cmake | 61 |
1 files changed, 48 insertions, 13 deletions
diff --git a/modules/FindStrigi.cmake b/modules/FindStrigi.cmake index df1cf8bd..b76d1c4e 100644 --- a/modules/FindStrigi.cmake +++ b/modules/FindStrigi.cmake @@ -32,13 +32,6 @@ if (NOT WIN32) message(STATUS "pkg-config query failed. did you set $PKG_CONFIG_PATH to the directory where strigi libstreamanalyzer.pc is installed?") message(FATAL_ERROR "Didn't find strigi >= ${STRIGI_MIN_VERSION}") else(NOT _return_VALUE STREQUAL "0") - set (STRIGI_NEEDS_SIGNED_CHAR FALSE) - exec_program(${PKGCONFIG_EXECUTABLE} ARGS --modversion libstreamanalyzer RETURN_VALUE _version_return_VALUE OUTPUT_VARIABLE _strigiVersion ) - MACRO_ENSURE_VERSION("0.6.0" ${_strigiVersion} STRIGI_NEEDS_SIGNED_CHAR) - # message(STATUS "Strigi version is ${_strigiVersion}. Needs signed char: ${STRIGI_NEEDS_SIGNED_CHAR}") - - set( STRIGI_NEEDS_SIGNED_CHAR ${STRIGI_NEEDS_SIGNED_CHAR} CACHE BOOL "TRUE if strigi is 0.6.0 or later" ) - if(NOT Strigi_FIND_QUIETLY) message(STATUS "Found Strigi ${_strigiVersion}") endif(NOT Strigi_FIND_QUIETLY) @@ -46,10 +39,6 @@ if (NOT WIN32) else(_dummyLinkFlags) message(STATUS "pkgconfig didn't find strigi, couldn't check strigi version") endif(_dummyLinkFlags) -else (NOT WIN32) - # STRIGI_NEEDS_SIGNED_CHAR is only set correct when pkgconfig is available... - # we don't use strigi < 0.6.0 so assume STRIGI_NEEDS_SIGNED_CHAR is needed - set(STRIGI_NEEDS_SIGNED_CHAR TRUE) endif(NOT WIN32) if (WIN32) @@ -114,8 +103,53 @@ find_library_with_debug(STRIGI_STRIGIQTDBUSCLIENT_LIBRARY include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Strigi - "Couldn't find Strigi streams and streamanalyzer libraries. Set the environment variable STRIGI_HOME (or CMAKE_PREFIX_PATH if using CMake >=2.6) to the strigi install dir." - STRIGI_STREAMS_LIBRARY STRIGI_STREAMANALYZER_LIBRARY STRIGI_INCLUDE_DIR) + "Couldn't find Strigi streams and streamanalyzer libraries. Set the environment variable STRIGI_HOME (or CMAKE_PREFIX_PATH if using CMake >=2.6) to the strigi install dir." + STRIGI_STREAMS_LIBRARY STRIGI_STREAMANALYZER_LIBRARY STRIGI_INCLUDE_DIR) + +if (STRIGI_FOUND) + + # Check for the SIC change between 0.5.9 and 0.6.0... + + MACRO(MACRO_CHECK_STRIGI_API_SCREWUP _RETTYPE _RESULT) + SET (_STRIGI_API_SCREWUP_SOURCE_CODE " +#include <strigi/streamendanalyzer.h> +using namespace Strigi; + class ScrewupEndAnalyzer : public StreamEndAnalyzer { +public: + ScrewupEndAnalyzer() {} + bool checkHeader(const char*, int32_t) const { return false; } + ${_RETTYPE} analyze(Strigi::AnalysisResult&, InputStream*) { + return -1; + } + const char* name() const { return \"Write 1000 times: I promise to keep source compat next time\"; } +}; +int main() +{ + ScrewupEndAnalyzer a; + return 0; +} +") + CHECK_CXX_SOURCE_COMPILES("${_STRIGI_API_SCREWUP_SOURCE_CODE}" ${_RESULT}) + ENDMACRO(MACRO_CHECK_STRIGI_API_SCREWUP) + + INCLUDE(CheckCXXSourceCompiles) + macro_push_required_vars() + set( CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${STRIGI_INCLUDE_DIR} ) + MACRO_CHECK_STRIGI_API_SCREWUP( "signed char" STRIGI_NEEDS_SIGNED_CHAR ) + MACRO_CHECK_STRIGI_API_SCREWUP( "char" STRIGI_NEEDS_CHAR ) + set( STRIGI_NEEDS_SIGNED_CHAR ${STRIGI_NEEDS_SIGNED_CHAR} CACHE BOOL "TRUE if strigi is 0.6.0 or later" ) + if (${STRIGI_NEEDS_SIGNED_CHAR}) + message(STATUS "Strigi API is post-screwup, needs 'signed char'") + else (${STRIGI_NEEDS_SIGNED_CHAR}) + if (${STRIGI_NEEDS_CHAR}) + message(STATUS "Strigi API is pre-screwup check, need 'char'") + else (${STRIGI_NEEDS_CHAR}) + message(FATAL "Strigi was found, but a simple test program does not compile, check CMakeFiles/CMakeError.log") + endif (${STRIGI_NEEDS_CHAR}) + endif (${STRIGI_NEEDS_SIGNED_CHAR}) + macro_pop_required_vars() +endif (STRIGI_FOUND) + if(WIN32) # this is needed to have mingw, cygwin and msvc libs installed in one directory @@ -146,4 +180,5 @@ endif(WIN32) mark_as_advanced(STRIGI_INCLUDE_DIR STRIGI_STREAMANALYZER_LIBRARY STRIGI_STREAMS_LIBRARY STRIGI_STRIGIQTDBUSCLIENT_LIBRARY STRIGI_LINE_ANALYZER_PREFIX STRIGI_THROUGH_ANALYZER_PREFIX + STRIGI_NEEDS_SIGNED_CHAR ) |