summaryrefslogtreecommitdiffstats
path: root/ConfigureChecks.cmake
blob: 1496b0d59880e0cd502086ef41cc81f5d85317dd (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#################################################
#
#  (C) 2010-2011 Serghei Amelian
#  serghei (DOT) amelian (AT) gmail.com
#
#  Improvements and feedback are welcome
#
#  This file is released under GPL >= 2
#
#################################################

tde_setup_architecture_flags( )

include(TestBigEndian)
test_big_endian(WORDS_BIGENDIAN)

tde_setup_largefiles( )

check_symbol_exists( strlcpy "string.h" HAVE_STRLCPY_PROTO )
check_symbol_exists( strlcat "string.h" HAVE_STRLCAT_PROTO )

##### check for gcc visibility support #########

if( WITH_GCC_VISIBILITY )
  tde_setup_gcc_visibility( )
endif( )


if( BUILD_KMAIL )
  check_include_file( "byteswap.h" HAVE_BYTESWAP_H )
endif( )


if( BUILD_INDEXLIB OR BUILD_KMAIL )

  # check for stl coping with namespace std
  tde_save( CMAKE_CXX_FLAGS )
  string( REGEX REPLACE "-include tqt.h" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
  check_cxx_source_compiles("
      #include <iterator>
      struct s : public std::iterator<std::forward_iterator_tag, int> {};
      int main(int, char**) { return 0; } "
      HAVE_STLNAMESPACE )
  tde_restore( CMAKE_CXX_FLAGS )
  if( HAVE_STLNAMESPACE )
    set( STD_NAMESPACE_PREFIX "std::" )
  endif( )

endif( )


if( BUILD_KMOBILE )
  # FIXME not checked because Gentoo don't provide baudboy.h
  check_include_file( "baudboy.h" HAVE_BAUDBOY_H )
endif( )


if( WITH_GNOKII AND (BUILD_KADDRESSBOOK OR BUILD_KMOBILE) )
  pkg_search_module( GNOKII gnokii )
  if( NOT GNOKII_FOUND )
    tde_message_fatal( "gnokii are requested, but was not found on your system" )
  endif( )
endif( )


if( BUILD_LIBTDENETWORK OR BUILD_CERTMANAGER OR BUILD_KMAIL OR BUILD_KADDRESSBOOK OR BUILD_KONTACT )

  if( NOT HAVE_GPGME_0_4_BRANCH )
    message( STATUS "checking for 'gpgme'" )
  endif( )

  # find gpgme-config
  find_program( GPGME_EXECUTABLE NAMES gpgme-config )
  if( NOT GPGME_EXECUTABLE )
    tde_message_fatal( "gpgme-config was NOT found.\n gpgme library is installed?" )
  endif( )

  # find gpg-error-config
  find_program( GPG_ERR_EXECUTABLE NAMES gpg-error-config )
  if( NOT GPG_ERR_EXECUTABLE )
    tde_message_fatal( "gpg-error-config was NOT found.\n gpg-error library is installed?" )
  endif( )

  macro( __run_gpgme_config  __type __var )
    execute_process(
      COMMAND ${GPGME_EXECUTABLE} --${__type}
      OUTPUT_VARIABLE ${__var}
      RESULT_VARIABLE __result
      OUTPUT_STRIP_TRAILING_WHITESPACE )
    if( _result )
      tde_message_fatal( "Unable to run ${GPGME_EXECUTABLE}!\n gpgme library incorrectly installed?\n Path to gpgme-config incorrect?" )
    endif( )
  endmacro( )

  macro( __run_gpgerr_config  __type __var )
    execute_process(
      COMMAND ${GPG_ERR_EXECUTABLE} --${__type}
      OUTPUT_VARIABLE ${__var}
      RESULT_VARIABLE __result
      OUTPUT_STRIP_TRAILING_WHITESPACE )
    if( _result )
      tde_message_fatal( "Unable to run ${GPG_ERR_EXECUTABLE}!\n gpg-error library incorrectly installed?\n Path to gpgme-config are incorrect?" )
    endif( )
  endmacro( )

  __run_gpgme_config( version GPGME_VERSION )
  __run_gpgme_config( cflags GPGME_INCLUDE_DIRS )
  __run_gpgme_config( libs GPGME_LIBRARIES )

  __run_gpgerr_config( version GPGERR_VERSION )
  __run_gpgerr_config( cflags GPGERR_INCLUDE_DIRS )
  __run_gpgerr_config( libs GPGERR_LIBRARIES )

  # cleanup
  if( GPGME_INCLUDE_DIRS )
    string( REGEX REPLACE "(^| )-I" ";" GPGME_INCLUDE_DIRS "${GPGME_INCLUDE_DIRS}" )
  endif( )
  if( GPGME_LIBRARIES )
    string( REGEX REPLACE "(^| )-l" ";" GPGME_LIBRARIES "${GPGME_LIBRARIES}" )
  endif( )
  if( GPGERR_INCLUDE_DIRS )
    string( REGEX REPLACE "(^| )-I" ";" GPGERR_INCLUDE_DIRS "${GPGERR_INCLUDE_DIRS}" )
  endif( )
  if( GPGERR_LIBRARIES )
    string( REGEX REPLACE "(^| )-l" ";" GPGERR_LIBRARIES "${GPGERR_LIBRARIES}" )
  endif( )
  set( GPGME_INCLUDE_DIRS "${GPGME_INCLUDE_DIRS} ${GPGERR_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE )
  set( GPGME_LIBRARIES "${GPGME_LIBRARIES} ${GPGERR_LIBRARIES}" CACHE INTERNAL "" FORCE )
  string( REGEX REPLACE " ;" ";" GPGME_INCLUDE_DIRS "${GPGME_INCLUDE_DIRS}" )
  string( REGEX REPLACE " ;" ";" GPGME_LIBRARIES "${GPGME_LIBRARIES}" )
  set( GPGME_INCLUDE_DIRS "${GPGME_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE )
  set( GPGME_LIBRARIES "${GPGME_LIBRARIES}" CACHE INTERNAL "" FORCE )

  # assuming that all newer system have gpgme >= 0.4
  set( HAVE_GPGME_0_4_BRANCH 1 CACHE INTERNAL "" )

  # NOTE: assume we have largefile support (need for gpgme)
  # FIXME: to be sure, we must check it
  add_definitions( -D_FILE_OFFSET_BITS=64 )

  if( NOT HAVE_GPGME_0_4_BRANCH )
    message( STATUS "  found 'gpgme', version ${GPGME_VERSION}" )
  endif( )

  # check for various GPGME features
  tde_save( CMAKE_CXX_FLAGS )
  tde_save( CMAKE_REQUIRED_LIBRARIES )
  string( REGEX REPLACE "-include tqt.h" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
  # See FIXME above regarding -D_FILE_OFFSET_BITS=64
  set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GPGME_INCLUDE_DIRS} -D_FILE_OFFSET_BITS=64")
  set( CMAKE_REQUIRED_LIBRARIES "${GPGME_LIBRARIES}")

  # check for GPGME_KEYLIST_MODE_VALIDATE
  check_cxx_source_compiles("
      #include <gpgme.h>
      int main() {
        gpgme_keylist_mode_t mode = GPGME_KEYLIST_MODE_VALIDATE;
      };"
      HAVE_GPGME_KEYLIST_MODE_VALIDATE )

  # check for gpgme_cancel
  check_cxx_source_compiles("
      #include <gpgme.h>
      int main() {
        gpgme_ctx_t ctx = 0;
        gpgme_error_t e = gpgme_cancel( ctx );
      };"
      HAVE_GPGME_CANCEL )

  # check for gpgme_key_t->keylist_mode
  check_cxx_source_compiles("
      #include <gpgme.h>
      int main() {
        gpgme_key_t key = 0;
        key->keylist_mode = 0;
      };"
      HAVE_GPGME_KEY_T_KEYLIST_MODE )

  # check for gpgme_decrypt_result_t->wrong_key_usage
  check_cxx_source_compiles("
      #include <gpgme.h>
      int main() {
        gpgme_decrypt_result_t res;
        unsigned int wku = res->wrong_key_usage;
      };"
      HAVE_GPGME_WRONG_KEY_USAGE )

  # check for GPGME_INCLUDE_CERTS_DEFAULT
  check_cxx_source_compiles("
      #include <gpgme.h>
      int main() {
        int i = GPGME_INCLUDE_CERTS_DEFAULT;
      };"
      HAVE_GPGME_INCLUDE_CERTS_DEFAULT )

  # check for gpgme_op_getauditlog
  check_cxx_source_compiles("
      #include <gpgme.h>
      int main() {
        gpgme_ctx_t ctx = 0;
        gpgme_data_t data = 0;
        unsigned int flags = 0;
        gpgme_error_t e = gpgme_op_getauditlog( ctx, data, flags );
      };"
      HAVE_GPGME_OP_GETAUDITLOG )

  # done checking for GPGME features
  tde_restore( CMAKE_CXX_FLAGS )
  tde_restore( CMAKE_REQUIRED_LIBRARIES )

endif( )


if( BUILD_KARM AND WITH_XSCREENSAVER )
  check_library_exists( Xss XScreenSaverQueryInfo "" HAVE_XSSLIB )
  if( HAVE_XSSLIB )
    pkg_search_module( XSS xscrnsaver )
  else( )
    check_library_exists( Xext XScreenSaverQueryInfo "" HAVE_XSSLIB )
    if( HAVE_XSSLIB )
      pkg_search_module( XSS xext )
    endif( )
  endif( )
  check_include_file( X11/extensions/scrnsaver.h HAVE_XSCREENSAVER_H )
  if( HAVE_XSSLIB AND HAVE_XSCREENSAVER_H )
    set( HAVE_LIBXSS 1 )
  else( )
    tde_message_fatal( "xscreensaver is requested, but was not found on your system" )
  endif( )
endif( )


# required stuff
find_package( TQt )
find_package( TDE )