Files
gtk-ahfail/meson.build

94 lines
2.8 KiB
Meson

project(
'ahfail',
['c', 'rust'],
version: '0.1.0',
meson_version: '>=1.3.0',
default_options: ['warning_level=3', 'c_std=c11']
)
ahfail_inc = include_directories('include')
cc = meson.get_compiler('c')
m_dep = cc.find_library('m', required : false)
gtk_dep = dependency('gtk+-3.0')
gstplayer_dep = dependency('gstreamer-player-1.0')
gnome = import('gnome')
resources = gnome.compile_resources(
'ahfail-resources',
'assets/ahfail.gresource.xml',
source_dir: 'assets',
c_name: 'ahfail'
)
# Each cargo target uses its own --target-dir to avoid parallel lock contention.
cargo_target = custom_target(
'ahfail-cargo-build',
input: ['crates/ahfail-gtklock/src/lib.rs', 'Cargo.toml'],
output: ['libahfail_module.a'],
command: [
'sh', '-c', 'cargo build --release -p ahfail-gtklock --target-dir "@OUTDIR@/target-gtklock" && cp "@OUTDIR@/target-gtklock/release/libahfail_module.a" "@OUTPUT@"'
],
build_by_default: true
)
# PAM module (.so with C ABI — no GResources needed, Cargo self-contained via build.rs)
pam_cargo = custom_target(
'ahfail-pam-cargo-build',
input: ['crates/ahfail-pam/src/lib.rs', 'Cargo.toml'],
output: ['libahfail_pam.so'],
command: [
'sh', '-c',
'cargo build --release -p ahfail-pam --target-dir "@OUTDIR@/target-pam" && cp "@OUTDIR@/target-pam/release/libahfail_pam.so" "@OUTPUT@"'
],
build_by_default: true,
install: true,
install_dir: get_option('libdir') / 'ahfail',
install_mode: 'rwxr-xr-x'
)
# Display binary (embeds GResources via its own build.rs using glib-compile-resources)
display_cargo = custom_target(
'ahfail-display-cargo-build',
input: ['crates/ahfail-display/src/main.rs', 'Cargo.toml'],
output: ['ahfail-display'],
command: [
'sh', '-c',
'cargo build --release -p ahfail-display --target-dir "@OUTDIR@/target-display" && cp "@OUTDIR@/target-display/release/ahfail-display" "@OUTPUT@"'
],
build_by_default: true,
install: true,
install_dir: get_option('libdir') / 'ahfail',
install_mode: 'rwxr-xr-x'
)
libahfail = shared_library(
'ahfail-module',
resources,
link_args: ['-Wl,--whole-archive', meson.current_build_dir() / 'libahfail_module.a', '-Wl,--no-whole-archive'],
link_depends: cargo_target,
include_directories: ahfail_inc,
dependencies: [gtk_dep, gstplayer_dep, m_dep],
install: true,
install_dir: get_option('libdir') / 'gtklock',
name_prefix: ''
)
smoke = executable(
'module_smoke_test',
'tests/module_test.c',
include_directories: ahfail_inc,
link_with: libahfail,
dependencies: [gtk_dep, gstplayer_dep]
)
test('module symbols', smoke)
# PAM module smoke test: dlopen libahfail_pam.so and verify pam_sm_authenticate is exported.
pam_smoke = executable(
'pam_smoke_test',
'tests/pam_smoke_test.c',
dependencies: [cc.find_library('dl', required: true)]
)
test('pam symbols', pam_smoke, args: [pam_cargo[0]])