fix: separate cargo target-dirs to avoid parallel lock contention, add pam smoke test

This commit is contained in:
Asger Geel Weirsøe
2026-05-06 12:10:02 +02:00
parent 0f128d1c6f
commit 692cd76ceb
2 changed files with 33 additions and 5 deletions

View File

@@ -20,24 +20,25 @@ resources = gnome.compile_resources(
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" && cp "@OUTDIR@/target/release/libahfail_module.a" "@OUTPUT@"'
'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 resources needed, Cargo self-contained)
# 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" && cp "@OUTDIR@/target/release/libahfail_pam.so" "@OUTPUT@"'
'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,
@@ -45,14 +46,14 @@ pam_cargo = custom_target(
install_mode: 'rwxr-xr-x'
)
# Display binary (embeds GResources via its own build.rs)
# 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" && cp "@OUTDIR@/target/release/ahfail-display" "@OUTPUT@"'
'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,
@@ -81,3 +82,12 @@ smoke = executable(
)
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]])

18
tests/pam_smoke_test.c Normal file
View File

@@ -0,0 +1,18 @@
#include <dlfcn.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Usage: %s <libahfail_pam.so>\n", argv[0]);
return 1;
}
void *lib = dlopen(argv[1], RTLD_NOW);
if (!lib) { fprintf(stderr, "dlopen: %s\n", dlerror()); return 1; }
if (!dlsym(lib, "pam_sm_authenticate")) {
fprintf(stderr, "pam_sm_authenticate not found\n");
dlclose(lib);
return 1;
}
dlclose(lib);
return 0;
}