1install_headers('deprecated.h', 2 'iter.h', 3 'p11-kit.h', 4 'pin.h', 5 'remote.h', 6 'uri.h', 7 subdir: 'p11-kit-1/p11-kit') 8 9libp11_kit_internal_sources = [ 10 'conf.c', 11 'log.c', 12 'filter.c', 13 'rpc-transport.c', 14 'rpc-message.c', 15 'rpc-client.c' 16] 17 18libp11_kit_internal_sources += custom_target('generate virtual-fixed-generated.h', 19 output: 'virtual-fixed-generated.h', 20 command: [ 21 meson.current_source_dir() / 'gen-virtual-fixed.sh', 22 '@OUTPUT@', '64' 23 ]) 24libp11_kit_internal_sources += 'virtual.c' 25 26libp11_kit_internal_c_args = [ 27 '-DP11_SYSTEM_CONFIG_FILE="@0@"'.format(prefix / p11_system_config_file), 28 '-DP11_SYSTEM_CONFIG_MODULES="@0@"'.format(prefix / p11_system_config_modules), 29 '-DP11_PACKAGE_CONFIG_MODULES="@0@"'.format(prefix / p11_package_config_modules), 30 '-DP11_USER_CONFIG_FILE="@0@"'.format(p11_user_config_file), 31 '-DP11_USER_CONFIG_MODULES="@0@"'.format(p11_user_config_modules), 32 '-DP11_MODULE_PATH="@0@"'.format(prefix / p11_module_path) 33] 34 35libp11_kit_internal = static_library('p11-kit-internal', 36 libp11_kit_internal_sources, 37 dependencies: [libp11_library_dep] + libffi_deps, 38 c_args: libp11_kit_internal_c_args, 39 implicit_include_directories: false, 40 gnu_symbol_visibility: 'hidden') 41 42libp11_kit_sources = [ 43 'iter.c', 44 'messages.c', 45 'modules.c', 46 'pin.c', 47 'proxy.c', 48 'proxy-init.c', 49 'rpc-server.c', 50 'uri.c', 51 'util.c' 52] 53 54libp11_kit_symbol_map = meson.current_source_dir() / 'libp11-kit.map' 55libp11_kit_ldflags = cc.get_supported_link_arguments([ 56 '-Wl,--version-script,' + libp11_kit_symbol_map 57]) 58libp11_kit_symbol_def = meson.current_source_dir() / 'libp11-kit-@0@.dll.def'.format(soversion) 59 60libp11_kit = shared_library('p11-kit', 61 libp11_kit_sources, 62 install: true, 63 version: library_version, 64 soversion: soversion, 65 dependencies: libffi_deps + dlopen_deps, 66 include_directories: [configinc, commoninc], 67 implicit_include_directories: false, 68 c_args: libp11_kit_internal_c_args, 69 link_args: libp11_kit_ldflags, 70 link_depends: [libp11_kit_symbol_map, 71 libp11_kit_symbol_def], 72 link_with: libp11_kit_internal, 73 vs_module_defs: libp11_kit_symbol_def) 74 75libp11_kit_dep = declare_dependency(link_with: libp11_kit, 76 include_directories: [configinc, commoninc]) 77 78meson.add_install_script( 79 'meson_post_install.sh', 80 libdir, 81 datadir / 'p11-kit' / 'modules' 82) 83 84p11_module_symbol_map = meson.current_source_dir() / 'p11-module.map' 85p11_module_ldflags = cc.get_supported_link_arguments([ 86 '-Wl,--version-script,' + p11_module_symbol_map 87]) 88p11_module_symbol_def = meson.current_source_dir() / 'p11-module.def' 89 90if host_system != 'windows' 91 shared_module('p11-kit-client', 92 'client.c', 'client-init.c', 93 name_prefix: '', 94 include_directories: [configinc, commoninc], 95 dependencies: dlopen_deps, 96 link_args: p11_module_ldflags, 97 link_depends: [p11_module_symbol_map, 98 p11_module_symbol_def], 99 link_with: [libp11_kit_internal], 100 vs_module_defs: p11_module_symbol_def, 101 install: true, 102 install_dir: p11_module_path) 103endif 104 105if get_option('test') 106 fixtures_dir = meson.current_source_dir() / 'fixtures' 107 108 if host_system == 'windows' 109 libp11_kit_testable_c_args = [ 110 '-DP11_SYSTEM_CONFIG_FILE="@0@"'.format(fixtures_dir / 'system-pkcs11.conf'), 111 '-DP11_SYSTEM_CONFIG_MODULES="@0@"'.format(fixtures_dir / 'system-modules' / 'win32'), 112 '-DP11_PACKAGE_CONFIG_MODULES="@0@"'.format(fixtures_dir / 'package-modules' / 'win32'), 113 '-DP11_USER_CONFIG_FILE="@0@"'.format(fixtures_dir / 'user-pkcs11.conf'), 114 '-DP11_USER_CONFIG_MODULES="@0@"'.format(fixtures_dir / 'user-modules' / 'win32') 115 ] 116 else 117 libp11_kit_testable_c_args = [ 118 '-DP11_SYSTEM_CONFIG_FILE="@0@"'.format(fixtures_dir / 'system-pkcs11.conf'), 119 '-DP11_SYSTEM_CONFIG_MODULES="@0@"'.format(fixtures_dir / 'system-modules'), 120 '-DP11_PACKAGE_CONFIG_MODULES="@0@"'.format(fixtures_dir / 'package-modules'), 121 '-DP11_USER_CONFIG_FILE="@0@"'.format(fixtures_dir / 'user-pkcs11.conf'), 122 '-DP11_USER_CONFIG_MODULES="@0@"'.format(fixtures_dir / 'user-modules') 123 ] 124 endif 125 126 libp11_kit_testable_c_args += '-DP11_MODULE_PATH="@0@"'.format(meson.current_build_dir()) 127 128 libp11_kit_testable = static_library('p11-kit-testable', 129 libp11_kit_internal_sources, 130 libp11_kit_sources, 131 c_args: libp11_kit_testable_c_args, 132 implicit_include_directories: false, 133 dependencies: [libp11_library_dep] + libffi_deps + dlopen_deps) 134endif 135 136p11_kit_sources = [ 137 'lists.c', 138 'p11-kit.c' 139] 140 141executable('p11-kit', 142 p11_kit_sources, 143 c_args: common_c_args, 144 dependencies: [libp11_tool_dep] + libffi_deps + dlopen_deps, 145 link_with: libp11_kit, 146 install: true) 147 148executable('p11-kit-remote', 149 'remote.c', 150 c_args: common_c_args, 151 dependencies: [libp11_tool_dep] + libffi_deps + dlopen_deps, 152 link_with: libp11_kit, 153 install: true, 154 install_dir: prefix / privatedir) 155 156if get_option('test') 157 executable('p11-kit-remote-testable', 158 'remote.c', 159 c_args: common_c_args, 160 dependencies: [libp11_tool_dep] + libffi_deps + dlopen_deps, 161 link_with: libp11_kit_testable) 162endif 163 164executable('p11-kit-server', 165 'server.c', 166 c_args: common_c_args + [ 167 '-DP11_KIT_REMOTE="p11-kit-remote"' 168 ], 169 dependencies: [libp11_tool_dep] + libsystemd_deps + libffi_deps + dlopen_deps, 170 implicit_include_directories: false, 171 link_with: libp11_kit, 172 install: true, 173 install_dir: prefix / privatedir) 174 175if get_option('test') 176 executable('p11-kit-server-testable', 177 'server.c', 178 c_args: common_c_args + [ 179 '-DP11_KIT_REMOTE="p11-kit-remote-testable"' 180 ], 181 implicit_include_directories: false, 182 dependencies: [libp11_tool_dep] + libsystemd_deps + libffi_deps + dlopen_deps, 183 link_with: libp11_kit_testable) 184endif 185 186if with_systemd 187 p11_kit_server_service_conf = configuration_data({ 188 'bindir': prefix / bindir 189 }) 190 p11_kit_server_service = configure_file(input: 'p11-kit-server.service.in', 191 output: '@BASENAME@', 192 configuration: p11_kit_server_service_conf) 193 install_data([p11_kit_server_service, 'p11-kit-server.socket'], 194 install_dir: systemduserunitdir) 195endif 196 197# Check if compilation succeeds with CRYPTOKI_GNU=1 198 199pkcs11_gnu_headers = [ 200 'iter.h', 201 'pin.h', 202 'uri.h' 203] 204 205gnu_h_gen = generator(find_program('gen-pkcs11-gnu.sh'), 206 output: 'pkcs11-gnu-@BASENAME@.h', 207 arguments: ['@INPUT@', '@OUTPUT@']) 208 209gnu_h = gnu_h_gen.process(pkcs11_gnu_headers) 210 211static_library('p11-kit-pkcs11-gnu', 212 gnu_h, 213 'pkcs11-gnu.c', 214 include_directories: [configinc, commoninc]) 215 216# Tests ---------------------------------------------------------------- 217 218if get_option('test') 219 p11_kit_tests = [ 220 'test-progname', 221 'test-util', 222 'test-conf', 223 'test-uri', 224 'test-pin', 225 'test-init', 226 'test-modules', 227 'test-deprecated', 228 'test-proxy', 229 'test-iter', 230 'test-rpc', 231 'test-virtual', 232 'test-managed', 233 'test-log', 234 'test-filter', 235 'test-transport' 236 ] 237 238 if host_system != 'windows' 239 p11_kit_tests += 'test-server' 240 endif 241 242 foreach name : p11_kit_tests 243 t = executable(name, '@0@.c'.format(name), 244 c_args: tests_c_args + libp11_kit_testable_c_args, 245 include_directories: [configinc, commoninc], 246 dependencies: [libp11_test_dep] + libffi_deps + dlopen_deps, 247 link_with: libp11_kit_testable) 248 test(name, t) 249 endforeach 250 251 p11_kit_progs = [ 252 'print-messages', 253 'frob-setuid' 254 ] 255 256 foreach name : p11_kit_progs 257 t = executable(name, '@0@.c'.format(name), 258 c_args: tests_c_args, 259 include_directories: [configinc, commoninc], 260 dependencies: [libp11_test_dep] + libffi_deps + dlopen_deps, 261 link_with: libp11_kit_testable) 262 endforeach 263 264 p11_kit_tests_env = environment() 265 p11_kit_tests_env.set('abs_top_builddir', top_build_dir) 266 p11_kit_tests_env.set('P11_MODULE_PATH', meson.current_build_dir()) 267 268 if host_system != 'windows' 269 test('test-messages.sh', 270 find_program('test-messages.sh'), 271 env: p11_kit_tests_env) 272 273 test('test-server.sh', 274 find_program('test-server.sh'), 275 env: p11_kit_tests_env) 276 endif 277 278 mock_sources = { 279 'mock-one': ['mock-module-ep.c'], 280 'mock-two': ['mock-module-ep2.c'], 281 'mock-three': ['mock-module-ep.c'], 282 'mock-four': ['mock-module-ep.c'], 283 'mock-five': ['mock-module-ep3.c'], 284 'mock-seven': ['mock-module-ep5.c'], 285 'mock-eight': ['mock-module-ep6.c'], 286 'mock-nine': ['mock-module-ep7.c'], 287 'mock-ten': ['mock-module-ep8.c'] 288 } 289 290 if host_system != 'windows' 291 mock_sources += {'mock-six': ['mock-module-ep4.c']} 292 endif 293 294 foreach name, sources : mock_sources 295 shared_module(name, 296 sources, 297 name_prefix: '', 298 link_args: p11_module_ldflags, 299 link_depends: [p11_module_symbol_map, 300 p11_module_symbol_def], 301 vs_module_defs: p11_module_symbol_def, 302 dependencies: [libp11_test_dep]) 303 endforeach 304endif 305 306p11_kit_pc_variables = [ 307 'p11_module_configs=@0@'.format(prefix / p11_package_config_modules), 308 'p11_module_path=@0@'.format(prefix / p11_module_path), 309 'proxy_module=@0@/p11-kit-proxy.so'.format(prefix / libdir), 310 'p11_system_config_modules=@0@'.format(prefix / p11_package_config_modules) 311] 312 313if trust_paths != '' 314 p11_kit_pc_variables += [ 315 'p11_trust_paths=@0@'.format(trust_paths) 316 ] 317endif 318 319pkg.generate(libraries: libp11_kit, 320 filebase: 'p11-kit-1', 321 name: 'p11-kit', 322 description: 'Library and proxy module for properly loading and sharing PKCS#11 modules.', 323 subdirs: 'p11-kit-1', 324 variables: p11_kit_pc_variables) 325 326pkcs11_conf_example_conf = configuration_data({ 327 'p11_system_config_file': prefix / p11_system_config_file, 328 'p11_user_config': p11_user_config 329}) 330pkcs11_conf_example = configure_file(input: 'pkcs11.conf.example.in', 331 output: '@BASENAME@', 332 configuration: pkcs11_conf_example_conf) 333install_data(pkcs11_conf_example, 334 install_dir: prefix / p11_system_config) 335