paivana

HTTP paywall reverse proxy
Log | Files | Refs | Submodules | README | LICENSE

meson.build (8097B)


      1 project(
      2     'paivana',
      3     'c',
      4     license: 'AGPLv3',
      5     meson_version: '>=1.1.0',
      6     version: '1.6.0',
      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/include')
     12 
     13 # Used to populate gnunet_private_config.h
     14 private_config = configuration_data()
     15 
     16 
     17 plugindir = get_option('libdir') / 'paivana'
     18 pkgdatadir = get_option('datadir') / 'paivana'
     19 pkgcfgdir = pkgdatadir / 'config.d'
     20 docdir = get_option('datadir') / 'doc' / 'paivana'
     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     talermhd_dep = dependency('talermhd', required: false)
    161     if not talermhd_dep.found()
    162         talermhd_dep = cc.find_library('talermhd', required: true)
    163     endif
    164     cc.has_header_symbol(
    165         'taler/taler_mhd_lib.h',
    166         'TALER_MHD_parse_request_arg_rel_time',
    167         required: true,
    168         dependencies: [talermhd_dep],
    169     )
    170     private_config.set10('HAVE_TALERMHD', talermhd_dep.found())
    171 
    172 
    173     talerexchange_dep = dependency('talerexchange', required: false)
    174     if not talerexchange_dep.found()
    175         talerexchange_dep = cc.find_library('talerexchange', required: true)
    176     endif
    177     private_config.set10('HAVE_TALEREXCHANGE', talerexchange_dep.found())
    178 
    179     talermerchant_dep = dependency('talermerchant', required: false)
    180     if not talermerchant_dep.found()
    181         talermerchant_dep = cc.find_library('talermerchant', required: true)
    182     endif
    183     cc.has_header_symbol(
    184         'taler/taler_merchant_service.h',
    185         'TALER_MERCHANT_parse_pay_uri',
    186         required: true,
    187         dependencies: [talermerchant_dep],
    188     )
    189     private_config.set10('HAVE_TALERMERCHANT', talermerchant_dep.found())
    190     talermerchanttesting_dep = dependency(
    191         'talermerchanttesting',
    192         required: false,
    193     )
    194 
    195     logging_opt = get_option('logging')
    196     logging_verbosity = 0
    197 
    198     if logging_opt == 'yes'
    199         logging_verbosity = 1
    200     endif
    201     if logging_opt == 'no'
    202         add_project_arguments('-DGNUNET_CULL_LOGGING=1', language: 'c')
    203     endif
    204     if logging_opt == 'verbose'
    205         logging_verbosity = 2
    206     endif
    207     if logging_opt == 'veryverbose'
    208         logging_verbosity = 3
    209     endif
    210 
    211     #add_project_arguments('-DGNUNET_EXTRA_LOGGING=@0@'.format(logging_verbosity), language: 'c')
    212 
    213 
    214     # todo gcov has meson builtin
    215 
    216     # Used to populate configuration file and script templates
    217 
    218 
    219     libltversions = [
    220         ['libpaivana', '0:0:0'],
    221     ]
    222 
    223     solibversions = {}
    224 
    225     foreach libversion : libltversions
    226         ltversion = libversion[1].split(':')
    227         current = ltversion[0].to_int()
    228         revision = ltversion[1].to_int()
    229         age = ltversion[2].to_int()
    230         soversion_str = '@0@'.format(current - age)
    231         ltversion_str = '@0@.@1@.@2@'.format(current - age, age, revision)
    232         solibversions = solibversions + {
    233             libversion[0]: {
    234                 'soversion': soversion_str,
    235                 'version': ltversion_str,
    236             },
    237         }
    238     endforeach
    239 
    240     private_config.set_quoted('PACKAGE', meson.project_name())
    241     private_config.set_quoted('PACKAGE_VERSION', meson.project_version())
    242     # Compatibility. Used in source.
    243     private_config.set_quoted('VERSION', meson.project_version())
    244     private_config.set_quoted('PACKAGE_BUGREPORT', 'taler@gnu.org')
    245     configure_file(output: 'paivana_config.h', configuration: private_config)
    246     configuration_inc = include_directories('.')
    247 
    248     cdata.merge_from(private_config)
    249     add_project_arguments('-DHAVE_CONFIG_H', language: 'c')
    250 
    251     pkg = import('pkgconfig')
    252     subdir('contrib')
    253     subdir('src')
    254     if not get_option('disable-doc')
    255         subdir('doc')
    256     endif
    257 
    258     taler_prefix = get_option('prefix') / get_option('libdir')
    259 
    260     add_test_setup(
    261         'default',
    262         env: ['PAIVANA_PREFIX=' + taler_prefix],
    263         exclude_suites: ['perf', 'installcheck', 'integrationtests'],
    264         is_default: true,
    265     )
    266 else
    267     subdir('contrib')
    268     if not get_option('disable-doc')
    269         subdir('doc')
    270     endif
    271 endif
    272 
    273 meson.add_dist_script('meson-dist-script')