Pidgin plugin unable to load

I’m trying to build my own libpurple plugin in my nixos configuration, but I see it fails to load.

(18:57:22) plugins: probing /nix/store/mnx7hnfpdrjznvm38jidpp7wa9izm3br-pidgin-with-plugins-2.14.14/lib/purple-2/libpresage.so  
(18:57:22) plugins: /nix/store/mnx7hnfpdrjznvm38jidpp7wa9izm3br-pidgin-with-plugins-2.14.14/lib/purple-2/libpresage.so is not loadable: cannot enable executable stack as shared object requires: Invalid argument 
Apparently when I tried to build my own libpurple plugin for pidgin it fails, since it needs an executable stack or something.

My plugin’s definition is attached below.

{
  fetchFromGitHub,
  gcc,
  glib,
  lib,
  pidgin,
  protobuf,
  qrencode,
  rustPlatform,
  sqlx-cli,
  openssl,
}:

rustPlatform.buildRustPackage (finalAttrs: {
  pname = "purple-presage";
  version = "0-unstable-2026-01-25";

  src = fetchFromGitHub {
    owner = "hoehermann";
    repo = finalAttrs.pname;
    rev = "3745f6366d535c082b71a0cf920ce546c0bae8b9";
    hash = "sha256-mOCOGkZBZwxsCr6J3Ax7DrHHvpP6SGs1KmM8OOW5uo8=";
  };

  nativeBuildInputs = [
    sqlx-cli
  ];
  buildInputs = [
    gcc
    qrencode
    pidgin
    protobuf
    openssl
  ];

  PROTOC = "${protobuf}/bin/protoc";
  strictDeps = true;
  cargoBuildOptions = [ "--locked" "--offline" ];
  cargoHash = "sha256-kogZM4IsZXly6OsNGKA0mHOJz2VXDXoTNp1hnlnRcIw=";
  cargoRoot = "src/rust";
  preBuild = ''
  export DATABASE_URL="sqlite:$(mktemp --suffix ".sqlite3")"
  (
    cd "$(find ${finalAttrs.cargoDeps}/ -maxdepth 1 -type d -ipath '*/presage-store-*')"
    sqlx database create
    sqlx migrate run
  )

  cd ${finalAttrs.cargoRoot}
  '';
  #cmakeFlags = [ "-DCMAKE_PREFIX_PATH=${pidgin}" ];

  postBuild = ''
    aaa="$(find target -ipath '*/libpurple_presage_backend.a')"
    gcc -DPLUGIN_VERSION=${finalAttrs.version} -fPIC -shared -Wl,-soname,libpresage.so -o libpresage.so -I../c -I. ../c/bridge.c ../c/connection.c ../c/qrcode.c ../c/receive_text.c ../c/send_text.c ../c/blist.c ../c/status.c ../c/groups.c ../c/receive_attachment.c ../c/send_file.c ../c/profile.c ../c/options.c ../c/attachment_common.c ../c/init.c -I${pidgin}/include/libpurple -lpurple -I${glib.dev}/include/glib-2.0 -I${glib.out}/lib/glib-2.0/include -lglib-2.0 $aaa -I${qrencode.dev}/include -lqrencode -lgcc_s -lutil -lrt -lpthread -ldl -lc -lm $NIX_CFLAGS_LINK -Wl,-z,noexecstack -lssl
  '';

  installPhase = ''
    runHook preInstall
    mkdir -p $out/lib/purple-2
    cp libpresage.so $out/lib/purple-2
    runHook postInstall
  '';

  extraRustcOpts = "-Z -lpurple";
  doCheck = false;
  verbose = true;

  meta = {
    homepage = "https://github.com/hoehermann/purple-presage";
    description = "pidgin plugin for Signal in rust";
    license = lib.licenses.gpl3Plus;
    platforms = lib.platforms.unix;
  };
})