diff --git a/pkgs/development/tools/global-platform-pro/default.nix b/pkgs/development/tools/global-platform-pro/default.nix new file mode 100644 index 000000000000..fdbeb82cf206 --- /dev/null +++ b/pkgs/development/tools/global-platform-pro/default.nix @@ -0,0 +1,89 @@ +{ stdenv, fetchFromGitHub, jdk, maven, writeText, makeWrapper, jre_headless, pcsclite }: + +# TODO: This is quite a bit of duplicated logic with gephy. Factor it out? +stdenv.mkDerivation rec { + pname = "global-platform-pro"; + version = "0.3.10-rc11"; + describeVersion = "v0.3.10-rc11-0-g8923747"; # git describe --tags --always --long --dirty + name = "${pname}-${version}"; + + src = fetchFromGitHub { + owner = "martinpaljak"; + repo = "GlobalPlatformPro"; + rev = "v${version}"; + sha256 = "0rk81x2y7vx1caxm6wa59fjrfxmjn7s8yxaxm764p8m2qxk3m4y2"; + }; + + patches = [ (writeText "${name}-version.patch" '' + diff --git a/pom.xml b/pom.xml + index 1e5a82d..1aa01fe 100644 + --- a/pom.xml + +++ b/pom.xml + @@ -121,14 +121,10 @@ + + + + - git + + echo + target/generated-resources/pro/javacard/gp/pro_version.txt + + - describe + - --tags + - --always + - --long + - --dirty + + ${describeVersion} + + + + '') ]; + + deps = stdenv.mkDerivation { + name = "${name}-deps"; + inherit src patches; + nativeBuildInputs = [ jdk maven ]; + buildPhase = '' + while mvn package -Dmaven.repo.local=$out/.m2 -Dmaven.wagon.rto=5000; [ $? = 1 ]; do + echo "timeout, restart maven to continue downloading" + done + ''; + # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside + installPhase = ''find $out/.m2 -type f -regex '.+\(\.lastUpdated\|resolver-status\.properties\|_remote\.repositories\)' -delete''; + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = "15bbi7z9v601all9vr2azh8nk8rpz2vd91yvvw8id6birnbhn3if"; + }; + + nativeBuildInputs = [ jdk maven makeWrapper ]; + + buildPhase = '' + mvn package --offline -Dmaven.repo.local=$( \ + cp -dpR ${deps}/.m2 ./ && \ + chmod +w -R .m2 && \ + pwd \ + )/.m2 + ''; + + installPhase = '' + mkdir -p $out/lib/java $out/share/java + cp -R target/apidocs $out/doc + cp target/gp.jar $out/share/java + makeWrapper ${jre_headless}/bin/java $out/bin/gp \ + --add-flags "-jar $out/share/java/gp.jar" \ + --prefix LD_LIBRARY_PATH : "${pcsclite.out}/lib" + ''; + + meta = with stdenv.lib; { + description = "Command-line utility for managing applets and keys on Java Cards"; + longDescription = '' + This command-line utility can be used to manage applets and keys + on Java Cards. It is made available as the `gp` executable. + + The executable requires the PC/SC daemon running for correct execution. + If you run NixOS, it can be enabled with `services.pcscd.enable = true;`. + ''; + homepage = https://github.com/martinpaljak/GlobalPlatformPro; + license = with licenses; [ lgpl3 ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c9f6c16e9928..8b1a5e30681c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -180,6 +180,8 @@ with pkgs; fetchMavenArtifact = callPackage ../build-support/fetchmavenartifact { }; + global-platform-pro = callPackage ../development/tools/global-platform-pro/default.nix { }; + graph-easy = callPackage ../tools/graphics/graph-easy { }; packer = callPackage ../development/tools/packer { };