btrbk: add mainProgram (#356350)
[NixPkgs.git] / pkgs / by-name / li / libfprint-2-tod1-broadcom / package.nix
blob842f803c0af0f73ce5a157a0c740a403b349e33b
2   autoPatchelfHook,
3   fetchzip,
4   lib,
5   libfprint-tod,
6   openssl,
7   patchelfUnstable, # have to use patchelfUnstable to support --rename-dynamic-symbols
8   stdenv,
9 }:
11 # Based on ideas from (using a wrapper library to redirect fopen() calls to firmware files):
12 #   * https://tapesoftware.net/replace-symbol/
13 #   * https://github.com/NixOS/nixpkgs/pull/260715
14 let
15   pname = "libfprint-2-tod1-broadcom";
16   version = "5.12.018";
18   src = fetchzip {
19     url = "http://dell.archive.canonical.com/updates/pool/public/libf/${pname}/${pname}_${version}.orig.tar.gz";
20     hash = "sha256-0C2PpYpEJNrU+8NT95w4QV0J5nHQisMY94Czw3jQOzw=";
21     pname = "${pname}-unpacked";
22     inherit version;
23   };
25   wrapperLibName = "wrapper-lib.so";
26   wrapperLibSource = "wrapper-lib.c";
28   # wraps `fopen()` for finding firmware files
29   wrapperLib = stdenv.mkDerivation {
30     pname = "${pname}-wrapper-lib";
31     inherit version;
33     src = builtins.path {
34       name = "${pname}-wrapper-lib-source";
35       path = ./.;
36       filter = path: type: baseNameOf path == wrapperLibSource;
37     };
39     postPatch = ''
40       substitute ${wrapperLibSource} lib.c \
41         --subst-var-by to "${src}/var/lib/fprint/fw"
42       cc -fPIC -shared lib.c -o ${wrapperLibName}
43     '';
45     installPhase = ''
46       runHook preInstall
47       install -D -t $out/lib ${wrapperLibName}
48       runHook postInstall
49     '';
50   };
52 stdenv.mkDerivation {
53   inherit src pname version;
55   buildInputs = [
56     libfprint-tod
57     openssl
58     wrapperLib
59   ];
61   nativeBuildInputs = [
62     autoPatchelfHook
63     patchelfUnstable
64   ];
66   installPhase = ''
67     runHook preInstall
68     install -D -t "$out/lib/libfprint-2/tod-1/" -m 644 -v usr/lib/x86_64-linux-gnu/libfprint-2/tod-1/libfprint-2-tod-1-broadcom.so
69     install -D -t "$out/lib/udev/rules.d/"      -m 644 -v lib/udev/rules.d/60-libfprint-2-device-broadcom.rules
70     runHook postInstall
71   '';
73   postFixup = ''
74     echo fopen64 fopen_wrapper > fopen_name_map
75     patchelf \
76       --rename-dynamic-symbols fopen_name_map \
77       --add-needed ${wrapperLibName} \
78       "$out/lib/libfprint-2/tod-1/libfprint-2-tod-1-broadcom.so"
79   '';
81   passthru.driverPath = "/lib/libfprint-2/tod-1";
83   meta = with lib; {
84     description = "Broadcom driver module for libfprint-2-tod Touch OEM Driver (from Dell)";
85     homepage = "http://dell.archive.canonical.com/updates/pool/public/libf/libfprint-2-tod1-broadcom/";
86     license = licenses.unfree;
87     maintainers = with maintainers; [ pitkling ];
88     platforms = [ "x86_64-linux" ];
89     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
90   };