sync

Backup service to store encrypted wallet databases (experimental)
Log | Files | Refs | Submodules | README | LICENSE

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