Merge pull request #277811 from herberteuler/fix/yourkit

Add YourKit-JavaProfiler
This commit is contained in:
Ryan Hendrickson 2024-06-24 16:04:59 -04:00 committed by GitHub
commit 69c3647fe2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 169 additions and 0 deletions

View File

@ -0,0 +1,16 @@
CONFIG_DIR=$YS/config
if [ ! -d $CONFIG_DIR ]; then
mkdir -p $CONFIG_DIR
fi
REGISTRY=$CONFIG_DIR/registry8.xml
if [ ! -e $REGISTRY ]; then
cat >$REGISTRY <<EOF
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<registry8>
<desktop-file.created>
<boolean value="true"/>
</desktop-file.created>
</registry8>
EOF
fi

View File

@ -0,0 +1,95 @@
{ fetchzip
, lib
, stdenvNoCC
, copyDesktopItems
, imagemagick
, makeDesktopItem
, jre
}:
let
vPath = v: lib.elemAt (lib.splitString "-" v) 0;
version = "2024.3-b157";
arches = {
aarch64-linux = "arm64";
x86_64-linux = "x64";
};
arch =
arches.${stdenvNoCC.targetPlatform.system} or (throw "Unsupported system");
hashes = {
arm64 = "sha256-0a9maZhgtXH21Ph0o3Rb+rCPhAmZRxjZCRyDmTvusLk=";
x64 = "sha256-nLaOOkPG2QEHkHd0S2AYLT2IpkMchGw9adyUDLCNQFg=";
};
desktopItem = makeDesktopItem {
name = "YourKit Java Profiler";
desktopName = "YourKit Java Profiler " + version;
type = "Application";
exec = "yourkit-java-profiler %f";
icon = "yourkit-java-profiler";
categories = [ "Development" "Java" "Profiling" ];
terminal = false;
startupWMClass = "YourKit Java Profiler";
};
in
stdenvNoCC.mkDerivation {
inherit version;
pname = "yourkit-java";
src = fetchzip {
url = "https://download.yourkit.com/yjp/${vPath version}/YourKit-JavaProfiler-${version}-${arch}.zip";
hash = hashes.${arch};
};
nativeBuildInputs = [ copyDesktopItems imagemagick ];
buildInputs = [ jre ];
desktopItems = [ desktopItem ];
installPhase = ''
runHook preInstall
mkdir -p $out
cp -pr bin lib license.html license-redist.txt probes samples $out
cp ${./forbid-desktop-item-creation} $out/bin/forbid-desktop-item-creation
mv $out/bin/profiler.sh $out/bin/yourkit-java-profiler
mkdir -p $out/share/icons
convert $out/bin/profiler.ico\[0] \
-size 256x256 \
$out/share/icons/yourkit-java-profiler.png
rm $out/bin/profiler.ico
rm -rf $out/bin/{windows-*,mac,linux-{*-32,musl-*,ppc-*}}
if [[ ${arch} = x64 ]]; then
rm -rf $out/bin/linux-arm-64
else
rm -rf $out/bin/linux-x86-64
fi
substituteInPlace $out/bin/yourkit-java-profiler \
--replace 'JAVA_EXE="$YD/jre64/bin/java"' JAVA_EXE=${jre}/bin/java
# Use our desktop item, which will be purged when this package
# gets removed
sed -i -e "/^YD=/isource $out/bin/forbid-desktop-item-creation\\
" \
$out/bin/yourkit-java-profiler
runHook postInstall
'';
passthru.updateScript = ./update.sh;
meta = with lib; {
description = "Award winning, fully featured low overhead profiler for Java EE and Java SE platforms";
homepage = "https://www.yourkit.com";
changelog = "https://www.yourkit.com/changes/";
license = licenses.unfree;
mainProgram = "yourkit-java-profiler";
platforms = attrNames arches;
sourceProvenance = with sourceTypes; [ binaryBytecode ];
maintainers = with maintainers; [ herberteuler ];
};
}

View File

@ -0,0 +1,54 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p coreutils curl gawk gnused nix-prefetch
set -euo pipefail
ROOT="$(dirname "$(readlink -f "$0")")"
DRV_BASE=package.nix
NIX_DRV="$ROOT/$DRV_BASE"
if [[ ! -f "$NIX_DRV" ]]; then
echo "ERROR: cannot find $DRV_BASE in $ROOT"
exit 1
fi
function retrieve_latest_version () {
curl https://www.yourkit.com/java/profiler/download/ \
| grep -Eo '(Version|Build): ([a-z0-9#.-])+' \
| awk '{ print $2 }' \
| tr -d '\n' \
| sed 's/#/-b/'
}
function calc_hash () {
local version=$1
local url=$2
nix-prefetch --option extra-experimental-features flakes \
"{ stdenv, fetchzip }:
stdenv.mkDerivation {
pname = \"yourkit-java-binary\";
version = \"$version\";
src = fetchzip {
url = \"$url\";
};
}"
}
function update_hash () {
local arch=$1
local version=$2
local date=$(echo $version | sed 's/-.*//')
local url=https://download.yourkit.com/yjp/$date/YourKit-JavaProfiler-$version-$arch.zip
local hash=$(calc_hash $version $url)
sed -i -e "s|^.*$arch.*=.*\"sha256-.*$| $arch = \"$hash\";|" $NIX_DRV
}
version=$(retrieve_latest_version)
sed -i -e "s|^.*version.*=.*\".*$| version = \"$version\";|" $NIX_DRV
for arch in arm64 x64; do
update_hash $arch $version
done
# Local variables:
# mode: shell-script
# eval: (sh-set-shell "bash")
# End:

View File

@ -19785,6 +19785,10 @@ with pkgs;
yodl = callPackage ../development/tools/misc/yodl { };
yourkit-java = callPackage ../by-name/yo/yourkit-java/package.nix {
jre = jdk17;
};
yq = python3.pkgs.toPythonApplication python3.pkgs.yq;
yq-go = callPackage ../development/tools/yq-go { };