summaryrefslogtreecommitdiff
path: root/cmake/FindSword.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/FindSword.cmake')
-rw-r--r--cmake/FindSword.cmake259
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()