meson.build (10992B)
1 project( 2 'sync', 3 'c', 4 license: 'AGPLv3', 5 meson_version: '>=1.1.0', 6 version: '1.5.12', 7 ) 8 9 cc = meson.get_compiler('c') 10 incdir = include_directories('src/include', 'src/include/sync', 'src/include/sync/sync-database') 11 12 # Used to populate gnunet_private_config.h 13 private_config = configuration_data() 14 15 pkgcfgdir = get_option('datadir') / 'sync' / 'config.d' 16 docdir = get_option('datadir') / 'doc' / 'sync' 17 18 if get_option('install-rpath') 19 rpath_option = get_option('prefix') / get_option('libdir') 20 else 21 rpath_option = '' 22 endif 23 24 install_emptydir(docdir) 25 install_data('README', 'COPYING', install_dir: docdir) 26 27 gnunet_user = false 28 dpkg_architecture_bin = find_program( 29 'dpkg-architecture', 30 '/usr/bin/getent', 31 required: false, 32 ) 33 if dpkg_architecture_bin.found() 34 private_config.set( 35 'MULTIARCH', 36 dpkg_architecture_bin.full_path() + ' -qDEB_HOST_MULTIARCH', 37 ) 38 endif 39 40 TALER_PLUGIN_LDFLAGS = [ 41 '-export-dynamic', 42 '-avoid-version', 43 '-module', 44 '--no-undefined', 45 ] 46 47 cdata = configuration_data() 48 if not get_option('only-doc') 49 add_project_arguments( 50 '-Wall', 51 '-Wno-address-of-packed-member', 52 language: 'c', 53 ) 54 taler_lib_ldflags = '-export-dynamic -no-undefined' 55 56 check_headers = ['stdint.h', 'stdlib.h', 'string.h', 'unistd.h'] 57 58 foreach h : check_headers 59 if cc.check_header(h) 60 define = 'HAVE_' + h.underscorify().to_upper() 61 message(define) 62 private_config.set(define, 1) 63 endif 64 endforeach 65 66 67 mhd_dep = dependency('libmicrohttpd', required: false) 68 if not mhd_dep.found() 69 mhd_dep = cc.find_library('microhttpd', required: true) 70 endif 71 72 mhd2_dep = dependency('libmicrohttpd2', required: false) 73 if not mhd2_dep.found() 74 mhd_dep2 = cc.find_library('microhttpd2', required: false) 75 endif 76 77 json_dep = dependency('jansson', required: false) 78 if not json_dep.found() 79 json_dep = cc.find_library('jansson', required: true) 80 endif 81 82 gcrypt_dep = dependency('libgcrypt', required: false) 83 if not gcrypt_dep.found() 84 gcrypt_dep = cc.find_library('gcrypt', required: true) 85 endif 86 87 private_config.set_quoted('NEED_LIBGCRYPT_VERSION', '1.6.1') 88 89 gnunetutil_dep = dependency('gnunetutil', required: false) 90 if not gnunetutil_dep.found() 91 gnunetutil_dep = cc.find_library('gnunetutil', required: true) 92 endif 93 94 cc.has_header_symbol( 95 'gnunet/gnunet_util_lib.h', 96 'GNUNET_TIME_round_up', 97 dependencies: [gnunetutil_dep], 98 required: true, 99 ) 100 101 gnunetjson_dep = dependency('gnunetjson', required: false) 102 if not gnunetjson_dep.found() 103 gnunetjson_dep = cc.find_library('gnunetjson', required: true) 104 endif 105 106 gnunetmhd_dep = dependency('gnunetmhd', required: false) 107 if not gnunetmhd_dep.found() 108 gnunetmhd_dep = cc.find_library('gnunetmhd', required: true) 109 endif 110 cc.has_header_symbol( 111 'gnunet/gnunet_mhd_lib.h', 112 'GNUNET_MHD_post_parser', 113 dependencies: [gnunetmhd_dep], 114 required: true, 115 ) 116 117 curl_dep = dependency('libcurl', version: '>=7.34.0', required: false) 118 if not curl_dep.found() 119 curl_dep = cc.find_library('curl', required: true) 120 curl_version_check = '''#include <curl/curl.h> 121 int main(int argc, char **argv) { 122 #if LIBCURL_VERSION_NUM < 0x073400 123 #error "cURL version >= 7.34.0 required" 124 #endif 125 return 0; 126 } 127 ''' 128 if not cc.compiles( 129 curl_version_check, 130 name: 'cURL version check', 131 dependencies: curl_dep, 132 ) 133 error('cURL version >=7.34.0 required') 134 endif 135 endif 136 137 gnunetcurl_dep = dependency('gnunetcurl', required: false) 138 if not gnunetcurl_dep.found() 139 gnunetcurl_dep = cc.find_library('gnunetcurl', required: true) 140 endif 141 cc.has_header_symbol( 142 'gnunet/gnunet_curl_lib.h', 143 'GNUNET_CURL_get_select_info', 144 dependencies: [gnunetcurl_dep], 145 required: true, 146 ) 147 148 pq_dep = dependency('libpq', required: false) 149 if not pq_dep.found() 150 pq_dep = cc.find_library('pq', required: true) 151 endif 152 153 gnunetpq_dep = dependency('gnunetpq', required: false) 154 if not gnunetpq_dep.found() 155 gnunetpq_dep = cc.find_library('gnunetpq', required: true) 156 endif 157 cc.has_header_symbol( 158 'gnunet/gnunet_pq_lib.h', 159 'GNUNET_PQ_query_param_blind_sign_priv', 160 required: true, 161 dependencies: [pq_dep, gnunetpq_dep], 162 ) 163 private_config.set10('HAVE_GNUNETPQ', gnunetpq_dep.found()) 164 165 talerutil_dep = dependency('talerutil', required: false) 166 if not talerutil_dep.found() 167 talerutil_dep = cc.find_library('talerutil', required: true) 168 endif 169 cc.has_header_symbol( 170 'taler/taler_util.h', 171 'TALER_merchant_instance_auth_hash_with_salt', 172 required: true, 173 dependencies: [talerutil_dep], 174 ) 175 private_config.set10('HAVE_TALERUTIL', talerutil_dep.found()) 176 177 talercurl_dep = dependency('talercurl', required: false) 178 if not talercurl_dep.found() 179 talercurl_dep = cc.find_library('talercurl', required: true) 180 endif 181 talerkyclogic_dep = dependency('talerkyclogic', required: false) 182 if not talerkyclogic_dep.found() 183 talerkyclogic_dep = cc.find_library('talerkyclogic', required: true) 184 endif 185 talerbank_dep = dependency('talerbank', required: false) 186 if not talerbank_dep.found() 187 talerbank_dep = cc.find_library('talerbank', required: true) 188 endif 189 talerfakebank_dep = dependency('talerfakebank', required: false) 190 if not talerfakebank_dep.found() 191 talerfakebank_dep = cc.find_library('talerfakebank', required: false) 192 endif 193 talertemplating_dep = dependency('talertemplating', required: false) 194 if not talertemplating_dep.found() 195 talertemplating_dep = cc.find_library('talertemplating', required: true) 196 endif 197 talertesting_dep = dependency('talertesting', required: false) 198 if not talertesting_dep.found() 199 talertesting_dep = cc.find_library('talertesting', required: true) 200 endif 201 202 talerexchange_dep = dependency('talerexchange', required: false) 203 if not talerexchange_dep.found() 204 talerexchange_dep = cc.find_library('talerexchange', required: true) 205 endif 206 cc.has_header_symbol( 207 'taler/taler_exchange_service.h', 208 'TALER_EXCHANGE_keys_test_account_allowed', 209 required: true, 210 dependencies: [talerexchange_dep], 211 ) 212 private_config.set10('HAVE_TALEREXCHANGE', talerexchange_dep.found()) 213 214 talermhd_dep = dependency('talermhd', required: false) 215 if not talermhd_dep.found() 216 talermhd_dep = cc.find_library('talermhd', required: true) 217 endif 218 cc.has_header_symbol( 219 'taler/taler_mhd_lib.h', 220 'TALER_MHD_parse_request_arg_rel_time', 221 required: true, 222 dependencies: [talermhd_dep], 223 ) 224 private_config.set10('HAVE_TALERMHD', talermhd_dep.found()) 225 226 227 talerjson_dep = dependency('talerjson', required: false) 228 if not talerjson_dep.found() 229 talerjson_dep = cc.find_library('talerjson', required: true) 230 endif 231 cc.has_header_symbol( 232 'taler/taler_json_lib.h', 233 'TALER_JSON_currency_specs_to_json', 234 required: true, 235 dependencies: [talerjson_dep], 236 ) 237 private_config.set10('HAVE_TALERJSON', talerjson_dep.found()) 238 239 240 talerpq_dep = dependency('talerpq', required: false) 241 if not talerpq_dep.found() 242 talerpq_dep = cc.find_library('talerpq', required: true) 243 endif 244 cc.has_header_symbol( 245 'taler/taler_pq_lib.h', 246 'TALER_PQ_query_param_array_blinded_denom_sig', 247 required: true, 248 dependencies: [ 249 talerpq_dep, 250 pq_dep, 251 ], 252 ) 253 private_config.set10('HAVE_TALERPQ', talerpq_dep.found()) 254 255 talermerchant_dep = dependency('talermerchant', required: false) 256 if not talermerchant_dep.found() 257 talermerchant_dep = cc.find_library('talermerchant', required: true) 258 endif 259 cc.has_header_symbol( 260 'taler/taler_merchant_service.h', 261 'TALER_MERCHANT_get_private_order_create', 262 required: true, 263 dependencies: [talermerchant_dep], 264 ) 265 talermerchanttesting_dep = dependency( 266 'talermerchanttesting', 267 required: false, 268 ) 269 if not talermerchanttesting_dep.found() 270 talermerchanttesting_dep = cc.find_library( 271 'talermerchanttesting', 272 required: true, 273 ) 274 endif 275 m_dep = cc.find_library('m', required: false) 276 if m_dep.found() 277 private_config.set('HAVE_LIBM', 1) 278 endif 279 280 281 logging_opt = get_option('logging') 282 logging_verbosity = 0 283 284 if logging_opt == 'yes' 285 logging_verbosity = 1 286 endif 287 if logging_opt == 'no' 288 add_project_arguments('-DGNUNET_CULL_LOGGING=1', language: 'c') 289 endif 290 if logging_opt == 'verbose' 291 logging_verbosity = 2 292 endif 293 if logging_opt == 'veryverbose' 294 logging_verbosity = 3 295 endif 296 297 libltversions = [ 298 ['libsync', '0:1:0'], 299 ['libsyncutil', '0:1:0'], 300 ['libsynctesting', '0:1:0'], 301 ['libsyncdb', '1:0:0'], 302 ] 303 304 solibversions = {} 305 306 foreach libversion : libltversions 307 ltversion = libversion[1].split(':') 308 current = ltversion[0].to_int() 309 revision = ltversion[1].to_int() 310 age = ltversion[2].to_int() 311 soversion_str = '@0@'.format(current - age) 312 ltversion_str = '@0@.@1@.@2@'.format(current - age, age, revision) 313 solibversions = solibversions + { 314 libversion[0]: { 315 'soversion': soversion_str, 316 'version': ltversion_str, 317 }, 318 } 319 endforeach 320 321 private_config.set_quoted('PACKAGE_VERSION', meson.project_version()) 322 # Compatibility. Used in source. 323 private_config.set_quoted('VERSION', meson.project_version()) 324 private_config.set_quoted('VCS_VERSION', 'mesonbuild') 325 private_config.set_quoted('PACKAGE_BUGREPORT', 'taler@gnu.org') 326 configure_file(output: 'sync_config.h', configuration: private_config) 327 configuration_inc = include_directories('.') 328 329 cdata.merge_from(private_config) 330 add_project_arguments('-DHAVE_CONFIG_H', language: 'c') 331 332 pkg = import('pkgconfig') 333 subdir('contrib') 334 subdir('src') 335 if not get_option('disable-doc') 336 subdir('doc') 337 endif 338 339 taler_prefix = get_option('prefix') / get_option('libdir') 340 341 add_test_setup( 342 'default', 343 env: ['TALER_SYNC_PREFIX=' + taler_prefix], 344 exclude_suites: ['perf', 'installcheck', 'integrationtests'], 345 is_default: true, 346 ) 347 else 348 subdir('contrib') 349 if not get_option('disable-doc') 350 subdir('doc') 351 endif 352 endif 353 354 run_target( 355 'doxygen', 356 command: 'scripts/doxygen.meson.sh', 357 env: {'PACKAGE_VERSION': meson.project_version()}, 358 ) 359 360 #meson.add_dist_script('meson-dist-script') 361