File: meson.build

package info (click to toggle)
libpsl 0.21.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 46,828 kB
  • sloc: ansic: 2,468; python: 515; sh: 309; makefile: 262
file content (142 lines) | stat: -rw-r--r-- 4,520 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
project('libpsl', 'c',
  version : files('version.txt'),
  meson_version : '>=0.60.0')

cc = meson.get_compiler('c')

enable_runtime = get_option('runtime')
enable_builtin = get_option('builtin')

# We need to know the build type to determine what .lib files we need on Visual Studio
# for dependencies that don't normally come with pkg-config files for Visual Studio builds
buildtype = get_option('buildtype')

notfound = dependency('', required : false)
libidn2_dep = notfound
libicu_dep = notfound
libidn_dep = notfound
libunistring = notfound
networking_deps = notfound
libiconv_dep = notfound

link_language = 'c'

# FIXME: Cleanup this when Meson gets 'feature-combo':
# https://github.com/mesonbuild/meson/issues/4566
# Dependency fallbacks would help too:
# https://github.com/mesonbuild/meson/pull/4595
if ['libidn2', 'auto'].contains(enable_runtime)
  libidn2_dep = dependency('libidn2', required : false)
  if not libidn2_dep.found() and cc.has_header('idn2.h')
    libidn2_dep = cc.find_library('idn2', required : false)
  endif
  if libidn2_dep.found()
    if enable_runtime == 'auto'
      enable_runtime = 'libidn2'
    endif
  elif enable_runtime == 'libidn2'
    error('You requested libidn2 but it is not installed.')
  endif
endif

if ['libicu', 'auto'].contains(enable_runtime)
  libicu_dep = dependency('icu-uc', 'ICU',
                          components: 'uc',
                          required : false)
  if libicu_dep.found()
    if enable_runtime == 'auto'
      enable_runtime = 'libicu'
    endif
    if add_languages('cpp', native : false)
        link_language = 'cpp'
    else
        error('C++ compiler is not available')
    endif
  elif enable_runtime == 'libicu'
    error('You requested libicu but it is not installed.')
  endif
endif

if ['libidn', 'auto'].contains(enable_runtime)
  libidn_dep = dependency('libidn', required : false)
  if not libidn_dep.found() and cc.has_header('idna.h')
    libidn_dep = cc.find_library('idn', required : false)
  endif
  if libidn_dep.found()
    if enable_runtime == 'auto'
      enable_runtime = 'libidn'
    endif
  elif enable_runtime == 'libidn'
    error('You requested libidn but it is not installed.')
  endif
endif

if libidn2_dep.found() or libidn_dep.found()
  # Check for libunistring, we need it for psl_str_to_utf8lower()
  libunistring = cc.find_library('unistring')
  libiconv_dep = dependency('iconv')
endif

if host_machine.system() == 'windows'
  networking_deps = cc.find_library('ws2_32')
endif

if enable_runtime == 'auto'
  enable_runtime = 'no'
endif

config = configuration_data()
config.set_quoted('PACKAGE_VERSION', meson.project_version())
config.set('WITH_LIBIDN2', enable_runtime == 'libidn2')
config.set('WITH_LIBICU', enable_runtime == 'libicu')
config.set('WITH_LIBIDN', enable_runtime == 'libidn')
config.set('ENABLE_BUILTIN', enable_builtin)
config.set('HAVE_UNISTD_H', cc.check_header('unistd.h'))
config.set('HAVE_STDINT_H', cc.check_header('stdint.h'))
config.set('HAVE_ALLOCA_H', cc.check_header('alloca.h'))
config.set('HAVE_DIRENT_H', cc.check_header('dirent.h'))
config.set('HAVE_ALLOCA', cc.has_function('alloca'))
config.set('HAVE_STRNDUP', cc.has_function('strndup'))
config.set('HAVE_CLOCK_GETTIME', cc.has_function('clock_gettime'))
config.set('HAVE_FMEMOPEN', cc.has_function('fmemopen'))
config.set('HAVE_NL_LANGINFO', cc.has_function('nl_langinfo'))
if cc.has_function_attribute('visibility')
  config.set('HAVE_VISIBILITY', 1)
endif
configure_file(output : 'config.h', configuration : config)

configinc = include_directories('.')
includedir = include_directories('include')

psl_distfile = get_option('psl_distfile')
psl_file = get_option('psl_file')
if psl_file == ''
  psl_file = join_paths(meson.current_source_dir(), 'list', 'public_suffix_list.dat')
endif
psl_test_file = get_option('psl_testfile')
if psl_test_file == ''
  psl_test_file = join_paths(meson.current_source_dir(), 'list', 'tests', 'tests.txt')
endif

python = import('python').find_installation()
pkgconfig = import('pkgconfig')

if cc.get_id() == 'msvc'
  if not cc.has_header_symbol('stdio.h', 'snprintf')
    if cc.has_header_symbol('stdio.h', '_snprintf')
      add_project_arguments('-Dsnprintf=_snprintf', language: 'c')
    endif
  endif
  if cc.has_header_symbol('malloc.h', '_alloca')
    add_project_arguments('-Dalloca=_alloca', language: 'c')
  endif
endif

subdir('include')
subdir('src')
subdir('tools')
if get_option('tests')
  subdir('tests')
  subdir('fuzz')
endif
subdir(join_paths('docs', 'libpsl'))