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