diff options
Diffstat (limited to 'cmake/FindSword.cmake')
-rw-r--r-- | cmake/FindSword.cmake | 259 |
1 files changed, 124 insertions, 135 deletions
diff --git a/cmake/FindSword.cmake b/cmake/FindSword.cmake index 17fbae2..1458765 100644 --- a/cmake/FindSword.cmake +++ b/cmake/FindSword.cmake @@ -1,145 +1,134 @@ -SET (REQUIRED_SWORD_VERSION 1.6.0) - -# This module looks for installed sword # -# It will define the following values -# SWORD_INCLUDE_DIR -# SWORD_LIBRARY -# SWORD_LIBRARY_DIR - -IF(MSVC) - SET(SWORD_WIN32_LIBRARY_PATH ../sword/lib/vcppmake/vc8/ICUDebug) - SET(SWORD_WIN32_INCLUDE_PATH ../sword/include) -ENDIF(MSVC) - -SET(TRIAL_LIBRARY_PATHS - $ENV{SWORD_HOME}/lib${LIB_SUFFIX} - ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} - /usr/local/lib${LIB_SUFFIX} - /opt/local/lib${LIB_SUFFIX} - /usr/lib${LIB_SUFFIX} - /usr/lib64 - /usr/pkg/lib${LIB_SUFFIX} - ${SWORD_WIN32_LIBRARY_PATH} -) -SET(TRIAL_INCLUDE_PATHS - $ENV{SWORD_HOME}/include/sword - $ENV{SWORD_HOME}/include - ${CMAKE_INSTALL_PREFIX}/include/sword - ${CMAKE_INSTALL_PREFIX}/include - /usr/local/include/sword - /usr/local/include - /opt/local/include/sword - /opt/local/include - /usr/include/sword - /usr/include - /sw/include/sword - /sw/include - /usr/pkg/include/sword - /usr/pkg/include - ${SWORD_WIN32_INCLUDE_PATH} -) - -IF(MSVC) - FIND_LIBRARY(SWORD_LIBRARY NAMES libsword PATHS ${TRIAL_LIBRARY_PATHS}) -ELSE(MSVC) - FIND_LIBRARY(SWORD_LIBRARY sword NAMES libsword PATHS ${TRIAL_LIBRARY_PATHS}) -ENDIF(MSVC) - -IF (SWORD_LIBRARY) - MESSAGE(STATUS "Found Sword library: ${SWORD_LIBRARY}") -# SET(SWORD_LIBRARY "sword") -ELSE (SWORD_LIBRARY) - MESSAGE(FATAL_ERROR "Could not find the Sword library.") -ENDIF (SWORD_LIBRARY) - -FIND_PATH(SWORD_LIBRARY_DIR NAMES libsword.a libsword.la libsword.so libsword.lib PATHS ${TRIAL_LIBRARY_PATHS} ENV CMAKE_LIBRARY_PATH) -IF (SWORD_LIBRARY_DIR) - MESSAGE(STATUS "Found Sword library dir: ${SWORD_LIBRARY_DIR}") -ELSE (SWORD_LIBRARY_DIR) - MESSAGE(FATAL_ERROR "Could not find the Sword library dir.") -ENDIF (SWORD_LIBRARY_DIR) - -FIND_PATH(SWORD_INCLUDE_DIR NAMES swmgr.h PATHS ${TRIAL_INCLUDE_PATHS}) -IF (SWORD_INCLUDE_DIR) - MESSAGE(STATUS "Found Sword include dir: ${SWORD_INCLUDE_DIR}") -ELSE (SWORD_INCLUDE_DIR) - MESSAGE(FATAL_ERROR "Sword include dir could not be found.") -ENDIF (SWORD_INCLUDE_DIR) - +# In the name of the Father, and of the Son, and of the Holy Spirit. +# +# This file is part of BibleTime's source code, http://www.bibletime.info/. # -# Check for minimum Sword version +# Copyright 1999-2014 by the BibleTime developers. +# The BibleTime source code is licensed under the GNU General Public License version 2.0. # -MACRO(CHECK_SWORD_VERSION VERSION) - IF(MSVC) - SET(CHECK_SWORD_VERSION_DEFINES "/DSWUSINGDLL") - ENDIF(MSVC) - TRY_RUN(SWVERSIONTEST_RUN_RESULT SWVERSIONTEST_COMPILE_RESULT - ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/sword_version_compare.cpp - CMAKE_FLAGS - "-DINCLUDE_DIRECTORIES:STRING=${SWORD_INCLUDE_DIR}" - "-DLINK_DIRECTORIES:STRING=${SWORD_LIBRARY_DIR}" - "-DLINK_LIBRARIES:STRING=${SWORD_LIBRARY}" - ${SWORD_LIBRARY} - COMPILE_DEFINITIONS - ${CHECK_SWORD_VERSION_DEFINES} - COMPILE_OUTPUT_VARIABLE SWVERSIONTEST_COMPILE_OUTPUT - RUN_OUTPUT_VARIABLE SWVERSIONTEST_RUN_OUTPUT - ARGS ${VERSION} - ) - IF(NOT SWVERSIONTEST_COMPILE_RESULT) - MESSAGE(FATAL_ERROR "Sword version check program could NOT be compiled: ${SWVERSIONTEST_COMPILE_OUTPUT}") - ENDIF(NOT SWVERSIONTEST_COMPILE_RESULT) -ENDMACRO(CHECK_SWORD_VERSION VERSION) -MESSAGE(STATUS "Checking for required Sword version ${REQUIRED_SWORD_VERSION}...") -CHECK_SWORD_VERSION(${REQUIRED_SWORD_VERSION}) +# This module looks for the Sword library by the Crosswire Bible Society +# +# It might define the following values similarly to pkg_search_module() +# Sword_FOUND +# Sword_LIBRARIES +# Sword_LIBRARY_DIRS +# Sword_LDFLAGS +# Sword_LDFLAGS_OTHER +# Sword_INCLUDE_DIRS +# Sword_CFLAGS +# Sword_CFLAGS_OTHER +# Sword_VERSION -IF(SWVERSIONTEST_RUN_RESULT EQUAL 0) - MESSAGE(STATUS "Installed Sword version is ok. Check program said: ${SWVERSIONTEST_RUN_OUTPUT}") -ELSE(SWVERSIONTEST_RUN_RESULT EQUAL 0) - MESSAGE(FATAL_ERROR "Installed Sword version is NOT ok! Check program said: ${SWVERSIONTEST_RUN_OUTPUT}") -ENDIF(SWVERSIONTEST_RUN_RESULT EQUAL 0) +MACRO(FindSword_unset_all) + UNSET(Sword_FOUND) + UNSET(Sword_LIBRARIES) + UNSET(Sword_LIBRARY_DIRS) + UNSET(Sword_LDFLAGS) + UNSET(Sword_LDFLAGS_OTHER) + UNSET(Sword_INCLUDE_DIRS) + UNSET(Sword_CFLAGS) + UNSET(Sword_CFLAGS_OTHER) + UNSET(Sword_VERSION) +ENDMACRO() +FindSword_unset_all() -# -# Sword linker flag detection -# -MACRO(CHECK_SWORD_LINK_LIBRARIES FLAGS) - IF(MSVC) - SET(CHECK_SWORD_CXX_FLAGS "/Zc:wchar_t- /MDd") - SET(CHECK_SWORD_LINK_DEFINES "/DSWUSINGDLL") - ELSE(MSVC) - SET(CHECK_SWORD_CXX_FLAGS "") - SET(CHECK_SWORD_LINK_DEFINES "") - ENDIF(MSVC) - TRY_COMPILE(SWLINKER_CHECK_COMPILE_RESULT - ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/sword_linker_check.cpp - CMAKE_FLAGS - "-DINCLUDE_DIRECTORIES:STRING=${SWORD_INCLUDE_DIR}" - "-DLINK_DIRECTORIES:STRING=${SWORD_LIBRARY_DIR};${CLUCENE_LIBRARY_DIR}" - "-DLINK_LIBRARIES:STRING=${FLAGS}" - "-DCMAKE_CXX_FLAGS_DEBUG:STRING=${CHECK_SWORD_CXX_FLAGS}" - COMPILE_DEFINITIONS - ${CHECK_SWORD_LINK_DEFINES} - OUTPUT_VARIABLE SWLINKER_CHECK_COMPILE_OUTPUT -) -ENDMACRO(CHECK_SWORD_LINK_LIBRARIES FLAGS) +INCLUDE(FindPkgConfig) + +IF(PKG_CONFIG_FOUND) + # Workaround PKG_CONFIG_PATH set to include CMAKE_PREFIX_PATH paths: + IF(WIN32) + SET(FindSword_s ";") + ELSE() + SET(FindSword_s ":") + ENDIF() + FOREACH(d IN LISTS CMAKE_PREFIX_PATH) + SET(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}${FindSword_s}${d}/lib/pkgconfig${FindSword_s}${d}/share/pkgconfig${FindSword_s}${d}/lib32/pkgconfig${FindSword_s}${d}/lib64/pkgconfig") + ENDFOREACH() + UNSET(FindSword_s) + + IF(Sword_FIND_VERSION_EXACT) + SET(FindSword_Version_Comp "=") + ELSE() + SET(FindSword_Version_Comp ">=") + ENDIF() + pkg_search_module(Sword QUIET + "sword${FindSword_Version_Comp}${Sword_FIND_VERSION}" + "sword-${Sword_FIND_VERSION_MAJOR}${FindSword_Version_Comp}${Sword_FIND_VERSION}" + "sword-${Sword_FIND_VERSION_MAJOR}.${Sword_FIND_VERSION_MINOR}${FindSword_Version_Comp}${Sword_FIND_VERSION}" + "sword${Sword_FIND_VERSION_MAJOR}${FindSword_Version_Comp}${Sword_FIND_VERSION}" + "sword${Sword_FIND_VERSION_MAJOR}.${Sword_FIND_VERSION_MINOR}${FindSword_Version_Comp}${Sword_FIND_VERSION}") + UNSET(FindSword_Version_Comp) +ENDIF() -#CURL_LIBRARIES and ICU_LIBRARIES are optional, empty if not found -CHECK_SWORD_LINK_LIBRARIES("${CLUCENE_LIBRARY};${SWORD_LIBRARY};${CURL_LIBRARIES};${ICU_LIBRARIES};${ICU_I18N_LIBRARIES};${ZLIB_LIBRARIES}") +# If pkg-config fails we try this: +IF(NOT Sword_FOUND) + IF(NOT Sword_FIND_QUIETLY) + MESSAGE(WARNING "Falling back to manual Sword detection...") + ENDIF() + FIND_LIBRARY(FindSword_LIBS NAMES sword libsword) + IF(FindSword_LIBS) + FIND_PATH(FindSword_INCS NAMES "sword/swmgr.h") + IF(FindSword_INCS) + SET(FindSword_INCS "${FindSword_INCS}/sword") + TRY_RUN(RUN_RESULT COMPILE_RESULT + "${CMAKE_CURRENT_BINARY_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/sword_version_print.cpp" + CMAKE_FLAGS + "-DINCLUDE_DIRECTORIES:STRING=${FindSword_INCS}" + COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT + RUN_OUTPUT_VARIABLE RUN_OUTPUT) + IF(NOT COMPILE_RESULT) + IF(NOT Sword_FIND_QUIETLY) + MESSAGE(WARNING "Failed to compile Sword version check: ${COMPILE_OUTPUT}") + ENDIF() + ELSEIF(RUN_RESULT) + IF(NOT Sword_FIND_QUIETLY) + MESSAGE(WARNING "Failed to run Sword version check: ${COMPILE_OUTPUT}") + ENDIF() + ELSE() + SET(Sword_FOUND TRUE) + SET(Sword_VERSION "${RUN_OUTPUT}") + GET_FILENAME_COMPONENT(Sword_LIBRARY_DIRS "${FindSword_LIBS}" PATH) + SET(Sword_LIBRARIES "sword") + SET(Sword_LDFLAGS "-L${Sword_LIBRARY_DIRS};-l${Sword_LIBRARIES}") + SET(Sword_INCLUDE_DIRS "${FindSword_INCS}") + SET(Sword_CFLAGS "-I${Sword_INCLUDE_DIRS}") + ENDIF() + ENDIF() + UNSET(FindSword_INCS) + ENDIF() + UNSET(FindSword_LIBS) +ENDIF() -IF(SWLINKER_CHECK_COMPILE_RESULT) - MESSAGE(STATUS "Sword linker check compiled ok.") - # SWORD_LIBRARY can stay unchanged -ELSE(SWLINKER_CHECK_COMPILE_RESULT) - MESSAGE(STATUS "Sword linker check could NOT be compiled. It seems that you need additional libraries for the linker.") - MESSAGE(STATUS "Here is the detailed output of the compilation and linking process:") - MESSAGE(FATAL_ERROR "${SWLINKER_CHECK_COMPILE_OUTPUT}") -ENDIF(SWLINKER_CHECK_COMPILE_RESULT) +IF(Sword_FOUND) + SET(FindSword_Sword_FOUND "YES") +ENDIF() +INCLUDE(FindPackageHandleStandardArgs) +IF(CMAKE_VERSION VERSION_LESS 2.8.11) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Sword + REQUIRED_VARS FindSword_Sword_FOUND + VERSION_VAR Sword_VERSION) + IF(SWORD_FOUND) + SET(Sword_FOUND TRUE) + ENDIF() + UNSET(SWORD_FOUND) +ELSE() + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Sword + FOUND_VAR Sword_FOUND + REQUIRED_VARS FindSword_Sword_FOUND + VERSION_VAR Sword_VERSION) +ENDIF() +UNSET(FindSword_Sword_FOUND) -MARK_AS_ADVANCED( - SWORD_INCLUDE_DIR - SWORD_LIBRARY - SWORD_LIBRARY_DIR -) +IF(Sword_FOUND AND NOT Sword_FIND_QUIETLY) + MESSAGE(STATUS "Sword ${Sword_VERSION} details:") + MESSAGE(STATUS " CFLAGS: ${Sword_CFLAGS}") + MESSAGE(STATUS " INCLUDE_DIRS: ${Sword_INCLUDE_DIRS}") + MESSAGE(STATUS " CFLAGS_OTHER: ${Sword_CFLAGS_OTHER}") + MESSAGE(STATUS " LDFLAGS: ${Sword_LDFLAGS}") + MESSAGE(STATUS " LIBRARIES: ${Sword_LIBRARIES}") + MESSAGE(STATUS " LIBRARY_DIRS: ${Sword_LIBRARY_DIRS}") + MESSAGE(STATUS " LDFLAGS_OTHER: ${Sword_LDFLAGS_OTHER}") +ENDIF() |