challenger

OAuth 2.0-based authentication service that validates user can receive messages at a certain address
Log | Files | Refs | Submodules | README | LICENSE

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