summaryrefslogtreecommitdiff
path: root/cmake/FindSword.cmake
blob: 2ba3691a81a8c915e4a6ed0bab5a7d7ef5fe43d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#
# 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/.
#
# Copyright 1999-2016 by the BibleTime developers.
# The BibleTime source code is licensed under the GNU General Public License version 2.0.
#

# 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

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()

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()

# 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")
        IF(WIN32)
            SET(Sword_LDFLAGS "${FindSword_LIBS}")
        ELSE()
            SET(Sword_LDFLAGS "-L${Sword_LIBRARY_DIRS};-l${Sword_LIBRARIES}")
        ENDIF()
        SET(Sword_INCLUDE_DIRS "${FindSword_INCS}")
        SET(Sword_CFLAGS "-I${Sword_INCLUDE_DIRS}")
      ENDIF()
    ENDIF()
    UNSET(FindSword_INCS)
  ENDIF()
  UNSET(FindSword_LIBS)
ENDIF()

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)

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()