sync

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

meson.build (11403B)


      1 project(
      2     'sync',
      3     'c',
      4     license: 'AGPLv3',
      5     meson_version: '>=1.1.0',
      6     version: run_command('sh', 'scripts/get_version.sh', check: true).stdout().strip(),
      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         mhd2_dep = 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     talermhd2_dep = dependency('talermhd2', required: false)
    227     if not talermhd2_dep.found()
    228         talermhd2_dep = cc.find_library('talermhd2', required: true)
    229     endif
    230     cc.has_header_symbol(
    231         'taler/taler_mhd2_lib.h',
    232         'TALER_MHD2_get_date_string',
    233         required: true,
    234         dependencies: [talermhd2_dep],
    235     )
    236     private_config.set10('HAVE_TALERMHD2', talermhd2_dep.found())
    237 
    238     talerjson_dep = dependency('talerjson', required: false)
    239     if not talerjson_dep.found()
    240         talerjson_dep = cc.find_library('talerjson', required: true)
    241     endif
    242     cc.has_header_symbol(
    243         'taler/taler_json_lib.h',
    244         'TALER_JSON_currency_specs_to_json',
    245         required: true,
    246         dependencies: [talerjson_dep],
    247     )
    248     private_config.set10('HAVE_TALERJSON', talerjson_dep.found())
    249 
    250 
    251     talerpq_dep = dependency('talerpq', required: false)
    252     if not talerpq_dep.found()
    253         talerpq_dep = cc.find_library('talerpq', required: true)
    254     endif
    255     cc.has_header_symbol(
    256         'taler/taler_pq_lib.h',
    257         'TALER_PQ_query_param_array_blinded_denom_sig',
    258         required: true,
    259         dependencies: [
    260 	    talerpq_dep,
    261 	    pq_dep,
    262 	],
    263     )
    264     private_config.set10('HAVE_TALERPQ', talerpq_dep.found())
    265 
    266     talermerchant_dep = dependency('talermerchant', required: false)
    267     if not talermerchant_dep.found()
    268         talermerchant_dep = cc.find_library('talermerchant', required: true)
    269     endif
    270     cc.has_header_symbol(
    271         'taler/taler_merchant_service.h',
    272         'TALER_MERCHANT_get_private_order_create',
    273         required: true,
    274         dependencies: [talermerchant_dep],
    275     )
    276     talermerchanttesting_dep = dependency(
    277         'talermerchanttesting',
    278         required: false,
    279     )
    280     if not talermerchanttesting_dep.found()
    281         talermerchanttesting_dep = cc.find_library(
    282             'talermerchanttesting',
    283             required: true,
    284         )
    285     endif
    286     m_dep = cc.find_library('m', required: false)
    287     if m_dep.found()
    288         private_config.set('HAVE_LIBM', 1)
    289     endif
    290 
    291 
    292     logging_opt = get_option('logging')
    293     logging_verbosity = 0
    294 
    295     if logging_opt == 'yes'
    296         logging_verbosity = 1
    297     endif
    298     if logging_opt == 'no'
    299         add_project_arguments('-DGNUNET_CULL_LOGGING=1', language: 'c')
    300     endif
    301     if logging_opt == 'verbose'
    302         logging_verbosity = 2
    303     endif
    304     if logging_opt == 'veryverbose'
    305         logging_verbosity = 3
    306     endif
    307 
    308     libltversions = [
    309         ['libsync', '0:1:0'],
    310         ['libsyncutil', '0:1:0'],
    311         ['libsynctesting', '0:1:0'],
    312         ['libsyncdb', '1:0:0'],
    313     ]
    314 
    315     solibversions = {}
    316 
    317     foreach libversion : libltversions
    318         ltversion = libversion[1].split(':')
    319         current = ltversion[0].to_int()
    320         revision = ltversion[1].to_int()
    321         age = ltversion[2].to_int()
    322         soversion_str = '@0@'.format(current - age)
    323         ltversion_str = '@0@.@1@.@2@'.format(current - age, age, revision)
    324         solibversions = solibversions + {
    325             libversion[0]: {
    326                 'soversion': soversion_str,
    327                 'version': ltversion_str,
    328             },
    329         }
    330     endforeach
    331 
    332     private_config.set_quoted('PACKAGE_VERSION', meson.project_version())
    333     # Compatibility. Used in source.
    334     private_config.set_quoted('VERSION', meson.project_version())
    335     private_config.set_quoted('PACKAGE_BUGREPORT', 'taler@gnu.org')
    336     configure_file(output: 'sync_config.h', configuration: private_config)
    337     configuration_inc = include_directories('.')
    338 
    339     cdata.merge_from(private_config)
    340     add_project_arguments('-DHAVE_CONFIG_H', language: 'c')
    341 
    342     pkg = import('pkgconfig')
    343     subdir('contrib')
    344     subdir('src')
    345     if not get_option('disable-doc')
    346         subdir('doc')
    347     endif
    348 
    349     taler_prefix = get_option('prefix') / get_option('libdir')
    350 
    351     add_test_setup(
    352         'default',
    353         env: ['TALER_SYNC_PREFIX=' + taler_prefix],
    354         exclude_suites: ['perf', 'installcheck', 'integrationtests'],
    355         is_default: true,
    356     )
    357 else
    358     subdir('contrib')
    359     if not get_option('disable-doc')
    360         subdir('doc')
    361     endif
    362 endif
    363 
    364 run_target(
    365     'doxygen',
    366     command: 'scripts/doxygen.meson.sh',
    367     env: {'PACKAGE_VERSION': meson.project_version()},
    368 )
    369 
    370 meson.add_dist_script('meson-dist-script')
    371