meson.build (8753B)
1 project( 2 'taler-mdb', 3 'c', 4 license: 'AGPLv3', 5 meson_version: '>=1.1.0', 6 version: '1.5.1', 7 version: run_command('sh', 'scripts/get_version.sh', check: true).stdout().strip(), 8 ) 9 10 cc = meson.get_compiler('c') 11 incdir = include_directories('src/') 12 13 # Used to populate gnunet_private_config.h 14 private_config = configuration_data() 15 16 17 plugindir = get_option('libdir') / 'taler-mdb' 18 pkgdatadir = get_option('datadir') / 'taler-mdb' 19 pkgcfgdir = pkgdatadir / 'config.d' 20 docdir = get_option('datadir') / 'doc' / 'taler-mdb' 21 22 if get_option('install-rpath') 23 rpath_option = get_option('prefix') / get_option('libdir') 24 else 25 rpath_option = '' 26 endif 27 28 install_emptydir(docdir) 29 install_data('README', 'COPYING', install_dir: docdir) 30 31 gnunet_user = false 32 dpkg_architecture_bin = find_program( 33 'dpkg-architecture', 34 '/usr/bin/dpkg-architecture', 35 required: false, 36 ) 37 if dpkg_architecture_bin.found() 38 private_config.set( 39 'MULTIARCH', 40 dpkg_architecture_bin.full_path() + ' -qDEB_HOST_MULTIARCH', 41 ) 42 endif 43 44 TALER_PLUGIN_LDFLAGS = [ 45 '-export-dynamic', 46 '-avoid-version', 47 '-module', 48 '--no-undefined', 49 ] 50 51 cdata = configuration_data() 52 if not get_option('only-doc') 53 add_project_arguments( 54 '-Wall', 55 '-Wno-address-of-packed-member', 56 language: 'c', 57 ) 58 taler_lib_ldflags = '-export-dynamic -no-undefined' 59 60 check_headers = ['stdint.h', 'stdlib.h', 'string.h', 'unistd.h'] 61 62 foreach h : check_headers 63 if cc.check_header(h) 64 define = 'HAVE_' + h.underscorify().to_upper() 65 message(define) 66 private_config.set(define, 1) 67 endif 68 endforeach 69 70 zlib_dep = dependency('zlib', required: false) 71 if not zlib_dep.found() 72 zlib_dep = cc.find_library('zlib', required: true) 73 endif 74 m_dep = cc.find_library('m', required: false) 75 if m_dep.found() 76 private_config.set('HAVE_LIBM', 1) 77 endif 78 79 80 mhd_dep = dependency('libmicrohttpd', required: false) 81 if not mhd_dep.found() 82 mhd_dep = cc.find_library('microhttpd', required: true) 83 endif 84 85 json_dep = dependency('jansson', required: false) 86 if not json_dep.found() 87 json_dep = cc.find_library('jansson', required: true) 88 endif 89 90 gcrypt_dep = dependency('libgcrypt', required: false) 91 if not gcrypt_dep.found() 92 gcrypt_dep = cc.find_library('gcrypt', required: true) 93 endif 94 95 private_config.set_quoted('NEED_LIBGCRYPT_VERSION', '1.6.1') 96 97 gnunetutil_dep = dependency('gnunetutil', required: false) 98 if not gnunetutil_dep.found() 99 gnunetutil_dep = cc.find_library('gnunetutil', required: true) 100 endif 101 102 cc.has_header_symbol( 103 'gnunet/gnunet_util_lib.h', 104 'GNUNET_TIME_round_up', 105 dependencies: [gnunetutil_dep], 106 required: true, 107 ) 108 109 gnunetjson_dep = dependency('gnunetjson', required: false) 110 if not gnunetjson_dep.found() 111 gnunetjson_dep = cc.find_library('gnunetjson', required: true) 112 endif 113 114 curl_dep = dependency('libcurl', version: '>=7.34.0', required: false) 115 if not curl_dep.found() 116 curl_dep = cc.find_library('curl', required: true) 117 curl_version_check = '''#include <curl/curl.h> 118 int main(int argc, char **argv) { 119 #if LIBCURL_VERSION_NUM < 0x073400 120 #error "cURL version >= 7.34.0 required" 121 #endif 122 return 0; 123 } 124 ''' 125 if not cc.compiles( 126 curl_version_check, 127 name: 'cURL version check', 128 dependencies: curl_dep, 129 ) 130 error('cURL version >=7.34.0 required') 131 endif 132 endif 133 134 gnunetcurl_dep = dependency('gnunetcurl', required: false) 135 if not gnunetcurl_dep.found() 136 gnunetcurl_dep = cc.find_library('gnunetcurl', required: true) 137 endif 138 cc.has_header_symbol( 139 'gnunet/gnunet_curl_lib.h', 140 'GNUNET_CURL_get_select_info', 141 dependencies: [gnunetcurl_dep], 142 required: true, 143 ) 144 145 talerutil_dep = dependency('talerutil', required: false) 146 if not talerutil_dep.found() 147 talerutil_dep = cc.find_library('talerutil', required: true) 148 endif 149 cc.has_header_symbol( 150 'taler/taler_util.h', 151 'TALER_merchant_instance_auth_hash_with_salt', 152 required: true, 153 dependencies: [talerutil_dep], 154 ) 155 private_config.set10('HAVE_TALERUTIL', talerutil_dep.found()) 156 talertemplating_dep = dependency('talertemplating', required: false) 157 if not talertemplating_dep.found() 158 talertemplating_dep = cc.find_library('talertemplating', required: true) 159 endif 160 talerjson_dep = dependency('talerjson', required: false) 161 if not talerjson_dep.found() 162 talerjson_dep = cc.find_library('talerjson', required: true) 163 endif 164 talermhd_dep = dependency('talermhd', required: false) 165 if not talermhd_dep.found() 166 talermhd_dep = cc.find_library('talermhd', required: true) 167 endif 168 cc.has_header_symbol( 169 'taler/taler_mhd_lib.h', 170 'TALER_MHD_parse_request_arg_rel_time', 171 required: true, 172 dependencies: [talermhd_dep], 173 ) 174 private_config.set10('HAVE_TALERMHD', talermhd_dep.found()) 175 qrencode_dep = dependency('qrencode', required: false) 176 if not qrencode_dep.found() 177 qrencode_dep = cc.find_library('qrencode', required: false) 178 endif 179 private_config.set10('HAVE_QR', qrencode_dep.found()) 180 181 182 talerexchange_dep = dependency('talerexchange', required: false) 183 if not talerexchange_dep.found() 184 talerexchange_dep = cc.find_library('talerexchange', required: true) 185 endif 186 private_config.set10('HAVE_TALEREXCHANGE', talerexchange_dep.found()) 187 188 talermerchant_dep = dependency('talermerchant', required: false) 189 if not talermerchant_dep.found() 190 talermerchant_dep = cc.find_library('talermerchant', required: true) 191 endif 192 cc.has_header_symbol( 193 'taler/taler_merchant_service.h', 194 'TALER_MERCHANT_parse_pay_uri', 195 required: true, 196 dependencies: [talermerchant_dep], 197 ) 198 private_config.set10('HAVE_TALERMERCHANT', talermerchant_dep.found()) 199 talermerchanttesting_dep = dependency( 200 'talermerchanttesting', 201 required: false, 202 ) 203 204 nfc_dep = dependency('nfc', required: false) 205 if not nfc_dep.found() 206 nfc_dep = cc.find_library('nfc', required: true) 207 endif 208 cc.has_header_symbol( 209 'nfc/nfc.h', 210 'nfc_open', 211 required: true, 212 dependencies: [nfc_dep], 213 ) 214 215 logging_opt = get_option('logging') 216 logging_verbosity = 0 217 218 if logging_opt == 'yes' 219 logging_verbosity = 1 220 endif 221 if logging_opt == 'no' 222 add_project_arguments('-DGNUNET_CULL_LOGGING=1', language: 'c') 223 endif 224 if logging_opt == 'verbose' 225 logging_verbosity = 2 226 endif 227 if logging_opt == 'veryverbose' 228 logging_verbosity = 3 229 endif 230 231 #add_project_arguments('-DGNUNET_EXTRA_LOGGING=@0@'.format(logging_verbosity), language: 'c') 232 233 234 # todo gcov has meson builtin 235 236 # Used to populate configuration file and script templates 237 238 239 libltversions = [['libtalermdb', '0:0:0']] 240 241 solibversions = {} 242 243 foreach libversion : libltversions 244 ltversion = libversion[1].split(':') 245 current = ltversion[0].to_int() 246 revision = ltversion[1].to_int() 247 age = ltversion[2].to_int() 248 soversion_str = '@0@'.format(current - age) 249 ltversion_str = '@0@.@1@.@2@'.format(current - age, age, revision) 250 solibversions = solibversions + { 251 libversion[0]: { 252 'soversion': soversion_str, 253 'version': ltversion_str, 254 }, 255 } 256 endforeach 257 258 private_config.set_quoted('PACKAGE', meson.project_name()) 259 private_config.set_quoted('PACKAGE_VERSION', meson.project_version()) 260 # Compatibility. Used in source. 261 private_config.set_quoted('VERSION', meson.project_version()) 262 private_config.set_quoted('PACKAGE_BUGREPORT', 'taler@gnu.org') 263 configure_file(output: 'config.h', configuration: private_config) 264 configuration_inc = include_directories('.') 265 266 cdata.merge_from(private_config) 267 add_project_arguments('-DHAVE_CONFIG_H', language: 'c') 268 269 pkg = import('pkgconfig') 270 subdir('contrib') 271 subdir('src') 272 if not get_option('disable-doc') 273 subdir('doc') 274 endif 275 276 taler_prefix = get_option('prefix') / get_option('libdir') 277 278 add_test_setup( 279 'default', 280 env: ['TALER_MDB_PREFIX=' + taler_prefix], 281 exclude_suites: ['perf', 'installcheck', 'integrationtests'], 282 is_default: true, 283 ) 284 else 285 subdir('contrib') 286 if not get_option('disable-doc') 287 subdir('doc') 288 endif 289 endif 290 291 meson.add_dist_script('meson-dist-script') 292