python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / tools / security / cie-middleware-linux / default.nix
blob45a79029d20a5540b317492b37ae0d8efbf95552
1 { stdenv
2 , lib
3 , fetchFromGitHub
4 , makeWrapper
5 , strip-nondeterminism
6 , meson
7 , ninja
8 , pkg-config
9 , gradle
10 , curl
11 , cryptopp
12 , fontconfig
13 , jre
14 , libxml2
15 , openssl
16 , pcsclite
17 , podofo
18 , ghostscript
21 let
22   pname = "cie-middleware-linux";
23   version = "1.4.4.0";
25   src = fetchFromGitHub {
26     owner = "M0rf30";
27     repo = pname;
28     rev = "${version}-podofo";
29     sha256 = "sha256-Kyr9OTiY6roJ/wVJS/1aWfrrzDNQbuRTJQqo0akbMUU=";
30   };
32   # Shared libraries needed by the Java application
33   libraries = lib.makeLibraryPath [ ghostscript ];
35   # Fixed-output derivation that fetches the Java dependencies
36   javaDeps = stdenv.mkDerivation {
37     pname = "cie-java-deps";
38     inherit src version;
40     nativeBuildInputs = [ gradle ];
42     buildPhase = ''
43       # Run the fetchDeps task
44       export GRADLE_USER_HOME=$(mktemp -d)
45       gradle --no-daemon -b cie-java/build.gradle fetchDeps
46     '';
48     installPhase = ''
49       # Build a tree compatible with the maven repository format
50       pushd "$GRADLE_USER_HOME/caches/modules-2/files-2.1"
51       find -type f | awk -F/ -v OFS=/ -v out="$out" '{
52         infile = $0
53         gsub(/\./, "/", $2)
54         system("install -m644 -D "infile" "out"/"$2"/"$3"/"$4"/"$6)
55       }'
56       popd
57     '';
59     outputHashAlgo = "sha256";
60     outputHashMode = "recursive";
61     outputHash = "sha256-WzT5vYF9yCMU2A7EkLZyjgWrN3gD7pnkPXc3hDFqpD8=";
62   };
66 stdenv.mkDerivation {
67   inherit pname src version;
69   hardeningDisable = [ "format" ];
71   outputs = [ "out" "dev" ];
73   nativeBuildInputs = [
74     makeWrapper
75     meson
76     ninja
77     pkg-config
78     gradle
79     strip-nondeterminism
80   ];
82   buildInputs = [
83     cryptopp
84     fontconfig
85     podofo
86     openssl
87     pcsclite
88     curl
89     libxml2
90   ];
92   postPatch = ''
93     # substitute the cieid command with this $out/bin/cieid
94     substituteInPlace libs/pkcs11/src/CSP/AbilitaCIE.cpp \
95       --replace 'file = "cieid"' 'file = "'$out'/bin/cieid"'
96   '';
98   # Note: we use pushd/popd to juggle between the
99   # libraries and the Java application builds.
100   preConfigure = "pushd libs";
102   postBuild = ''
103     popd
105     # Use the packages in javaDeps for both plugins and dependencies
106     localRepo="maven { url uri('${javaDeps}') }"
107     sed -i cie-java/settings.gradle -e "1i \
108       pluginManagement { repositories { $localRepo } }"
109     substituteInPlace cie-java/build.gradle \
110       --replace 'mavenCentral()' "$localRepo"
112     # Build the Java application
113     export GRADLE_USER_HOME=$(mktemp -d)
114     gradle standalone \
115       --no-daemon \
116       --offline \
117       --parallel \
118       --info -Dorg.gradle.java.home=${jre} \
119       --build-file cie-java/build.gradle
121     pushd libs/build
122   '';
124   postInstall = ''
125     popd
127     # Install the Java application
128     install -Dm755 cie-java/build/libs/CIEID-standalone.jar \
129                    "$out/share/cieid/cieid.jar"
131     # Create a wrapper
132     mkdir -p "$out/bin"
133     makeWrapper "${jre}/bin/java" "$out/bin/cieid" \
134       --add-flags "-Djna.library.path='$out/lib:${libraries}'" \
135       --add-flags '-Dawt.useSystemAAFontSettings=on' \
136       --add-flags "-cp $out/share/cieid/cieid.jar" \
137       --add-flags "it.ipzs.cieid.MainApplication"
139     # Install other files
140     install -Dm644 data/cieid.desktop "$out/share/applications/cieid.desktop"
141     install -Dm755 data/logo.png "$out/share/pixmaps/cieid.png"
142     install -Dm644 LICENSE "$out/share/licenses/cieid/LICENSE"
143   '';
145   postFixup = ''
146     # Move static libraries to the dev output
147     mv -t "$dev/lib" "$out/lib/"*.a
149     # Make the jar deterministic (mainly, sorting its files)
150     strip-nondeterminism "$out/share/cieid/cieid.jar"
151   '';
153   passthru = { inherit javaDeps; };
155   meta = with lib; {
156     homepage = "https://github.com/M0Rf30/cie-middleware-linux";
157     description = "Middleware for the Italian Electronic Identity Card (CIE)";
158     longDescription = ''
159       Software for the usage of the Italian Electronic Identity Card (CIE).
160       Access to PA services, signing and verification of documents
162       Warning: this is an unofficial fork because the original software, as
163       distributed by the Italian government, is essentially lacking a build
164       system and is in violation of the license of the PoDoFo library.
165     '';
166     license = licenses.bsd3;
167     platforms = platforms.unix;
168     # Note: fails due to a lot of broken type conversions
169     badPlatforms = platforms.darwin;
170     maintainers = with maintainers; [ rnhmjoj ];
171   };