aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Faure <faure@kde.org>2008-10-13 12:27:35 +0000
committerDavid Faure <faure@kde.org>2008-10-13 12:27:35 +0000
commita172c1b36c3671f3ad1bae965fbbd3722c671167 (patch)
tree72ad4605af29d8b7dd9aea4a4bb13d46d0128ac0
parent5bfa5c2a22d70dd14d905a1e16a58eec34418819 (diff)
downloadextra-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.cmake61
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
)