paivana

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

meson.build (8070B)


      1 project(
      2     'paivana',
      3     'c',
      4     license: 'AGPLv3',
      5     meson_version: '>=1.1.0',
      6     version: '0.0.0',
      7 )
      8 
      9 cc = meson.get_compiler('c')
     10 incdir = include_directories('src/include')
     11 
     12 # Used to populate gnunet_private_config.h
     13 private_config = configuration_data()
     14 
     15 
     16 plugindir = get_option('libdir') / 'paivana'
     17 pkgdatadir = get_option('datadir') / 'paivana'
     18 pkgcfgdir = pkgdatadir / 'config.d'
     19 docdir = get_option('datadir') / 'doc' / 'paivana'
     20 
     21 if get_option('install-rpath')
     22     rpath_option = get_option('prefix') / get_option('libdir')
     23 else
     24     rpath_option = ''
     25 endif
     26 
     27 install_emptydir(docdir)
     28 install_data('README', 'COPYING', install_dir: docdir)
     29 
     30 gnunet_user = false
     31 dpkg_architecture_bin = find_program(
     32     'dpkg-architecture',
     33     '/usr/bin/dpkg-architecture',
     34     required: false,
     35 )
     36 if dpkg_architecture_bin.found()
     37     private_config.set(
     38         'MULTIARCH',
     39         dpkg_architecture_bin.full_path() + ' -qDEB_HOST_MULTIARCH',
     40     )
     41 endif
     42 
     43 TALER_PLUGIN_LDFLAGS = [
     44     '-export-dynamic',
     45     '-avoid-version',
     46     '-module',
     47     '--no-undefined',
     48 ]
     49 
     50 cdata = configuration_data()
     51 if not get_option('only-doc')
     52     add_project_arguments(
     53         '-Wall',
     54         '-Wno-address-of-packed-member',
     55         language: 'c',
     56     )
     57     taler_lib_ldflags = '-export-dynamic -no-undefined'
     58 
     59     check_headers = ['stdint.h', 'stdlib.h', 'string.h', 'unistd.h']
     60 
     61     foreach h : check_headers
     62         if cc.check_header(h)
     63             define = 'HAVE_' + h.underscorify().to_upper()
     64             message(define)
     65             private_config.set(define, 1)
     66         endif
     67     endforeach
     68 
     69     zlib_dep = dependency('zlib', required: false)
     70     if not zlib_dep.found()
     71         zlib_dep = cc.find_library('zlib', required: true)
     72     endif
     73     m_dep = cc.find_library('m', required: false)
     74     if m_dep.found()
     75         private_config.set('HAVE_LIBM', 1)
     76     endif
     77 
     78 
     79     mhd_dep = dependency('libmicrohttpd', required: false)
     80     if not mhd_dep.found()
     81         mhd_dep = cc.find_library('microhttpd', required: true)
     82     endif
     83 
     84     json_dep = dependency('jansson', required: false)
     85     if not json_dep.found()
     86         json_dep = cc.find_library('jansson', required: true)
     87     endif
     88 
     89     gcrypt_dep = dependency('libgcrypt', required: false)
     90     if not gcrypt_dep.found()
     91         gcrypt_dep = cc.find_library('gcrypt', required: true)
     92     endif
     93 
     94     private_config.set_quoted('NEED_LIBGCRYPT_VERSION', '1.6.1')
     95 
     96     gnunetutil_dep = dependency('gnunetutil', required: false)
     97     if not gnunetutil_dep.found()
     98         gnunetutil_dep = cc.find_library('gnunetutil', required: true)
     99     endif
    100 
    101     cc.has_header_symbol(
    102         'gnunet/gnunet_util_lib.h',
    103         'GNUNET_TIME_round_up',
    104         dependencies: [gnunetutil_dep],
    105         required: true,
    106     )
    107 
    108     gnunetjson_dep = dependency('gnunetjson', required: false)
    109     if not gnunetjson_dep.found()
    110         gnunetjson_dep = cc.find_library('gnunetjson', required: true)
    111     endif
    112 
    113     curl_dep = dependency('libcurl', version: '>=7.34.0', required: false)
    114     if not curl_dep.found()
    115         curl_dep = cc.find_library('curl', required: true)
    116         curl_version_check = '''#include <curl/curl.h>
    117   int main(int argc, char **argv) {
    118     #if LIBCURL_VERSION_NUM < 0x073400
    119       #error "cURL version >= 7.34.0 required"
    120     #endif
    121     return 0;
    122     }
    123   '''
    124         if not cc.compiles(
    125             curl_version_check,
    126             name: 'cURL version check',
    127             dependencies: curl_dep,
    128         )
    129             error('cURL version >=7.34.0 required')
    130         endif
    131     endif
    132 
    133     gnunetcurl_dep = dependency('gnunetcurl', required: false)
    134     if not gnunetcurl_dep.found()
    135         gnunetcurl_dep = cc.find_library('gnunetcurl', required: true)
    136     endif
    137     cc.has_header_symbol(
    138         'gnunet/gnunet_curl_lib.h',
    139         'GNUNET_CURL_get_select_info',
    140         dependencies: [gnunetcurl_dep],
    141         required: true,
    142     )
    143 
    144     talerutil_dep = dependency('talerutil', required: false)
    145     if not talerutil_dep.found()
    146         talerutil_dep = cc.find_library('talerutil', required: true)
    147     endif
    148     cc.has_header_symbol(
    149         'taler/taler_util.h',
    150         'TALER_merchant_instance_auth_hash_with_salt',
    151         required: true,
    152         dependencies: [talerutil_dep],
    153     )
    154     private_config.set10('HAVE_TALERUTIL', talerutil_dep.found())
    155     talertemplating_dep = dependency('talertemplating', required: false)
    156     if not talertemplating_dep.found()
    157         talertemplating_dep = cc.find_library('talertemplating', required: true)
    158     endif
    159     talermhd_dep = dependency('talermhd', required: false)
    160     if not talermhd_dep.found()
    161         talermhd_dep = cc.find_library('talermhd', required: true)
    162     endif
    163     cc.has_header_symbol(
    164         'taler/taler_mhd_lib.h',
    165         'TALER_MHD_parse_request_arg_rel_time',
    166         required: true,
    167         dependencies: [talermhd_dep],
    168     )
    169     private_config.set10('HAVE_TALERMHD', talermhd_dep.found())
    170 
    171 
    172     talerexchange_dep = dependency('talerexchange', required: false)
    173     if not talerexchange_dep.found()
    174         talerexchange_dep = cc.find_library('talerexchange', required: true)
    175     endif
    176     private_config.set10('HAVE_TALEREXCHANGE', talerexchange_dep.found())
    177 
    178     talermerchant_dep = dependency('talermerchant', required: false)
    179     if not talermerchant_dep.found()
    180         talermerchant_dep = cc.find_library('talermerchant', required: true)
    181     endif
    182     cc.has_header_symbol(
    183         'taler/taler_merchant_service.h',
    184         'TALER_MERCHANT_parse_pay_uri',
    185         required: true,
    186         dependencies: [talermerchant_dep],
    187     )
    188     private_config.set10('HAVE_TALERMERCHANT', talermerchant_dep.found())
    189     talermerchanttesting_dep = dependency(
    190         'talermerchanttesting',
    191         required: false,
    192     )
    193 
    194     logging_opt = get_option('logging')
    195     logging_verbosity = 0
    196 
    197     if logging_opt == 'yes'
    198         logging_verbosity = 1
    199     endif
    200     if logging_opt == 'no'
    201         add_project_arguments('-DGNUNET_CULL_LOGGING=1', language: 'c')
    202     endif
    203     if logging_opt == 'verbose'
    204         logging_verbosity = 2
    205     endif
    206     if logging_opt == 'veryverbose'
    207         logging_verbosity = 3
    208     endif
    209 
    210     #add_project_arguments('-DGNUNET_EXTRA_LOGGING=@0@'.format(logging_verbosity), language: 'c')
    211 
    212 
    213     # todo gcov has meson builtin
    214 
    215     # Used to populate configuration file and script templates
    216 
    217 
    218     libltversions = [
    219         ['libpaivana', '0:0:0'],
    220     ]
    221 
    222     solibversions = {}
    223 
    224     foreach libversion : libltversions
    225         ltversion = libversion[1].split(':')
    226         current = ltversion[0].to_int()
    227         revision = ltversion[1].to_int()
    228         age = ltversion[2].to_int()
    229         soversion_str = '@0@'.format(current - age)
    230         ltversion_str = '@0@.@1@.@2@'.format(current - age, age, revision)
    231         solibversions = solibversions + {
    232             libversion[0]: {
    233                 'soversion': soversion_str,
    234                 'version': ltversion_str,
    235             },
    236         }
    237     endforeach
    238 
    239     private_config.set_quoted('PACKAGE', meson.project_name())
    240     private_config.set_quoted('PACKAGE_VERSION', meson.project_version())
    241     # Compatibility. Used in source.
    242     private_config.set_quoted('VERSION', meson.project_version())
    243     private_config.set_quoted('VCS_VERSION', 'mesonbuild')
    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')
    274