taler-mdb

GNU Taler Extensions and Integrations
Log | Files | Refs | Submodules | README | LICENSE

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