Skip to content

Commit

Permalink
phoebus-client: add a wrapper
Browse files Browse the repository at this point in the history
The wrapper was added for edit JAVA_OPTS in options.
  • Loading branch information
Matthieu Daniel-Thomas committed Jan 22, 2025
1 parent 3b71d39 commit e95f6b3
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 108 deletions.
3 changes: 2 additions & 1 deletion pkgs/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ in

pcas = callPackage ./epnix/tools/pcas {};

phoebus = callPackage ./epnix/tools/phoebus/client {
phoebus = callPackage ./epnix/tools/phoebus/client {};
phoebus-unwrapped = callPackage ./epnix/tools/phoebus/client-unwrapped {
jdk = prev.jdk21;
openjfx = prev.openjfx21;
};
Expand Down
90 changes: 90 additions & 0 deletions pkgs/epnix/tools/phoebus/client-unwrapped/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
lib,
epnixLib,
stdenv,
substituteAll,
maven,
makeWrapper,
epnix,
jdk,
openjfx,
python3,
}: let
buildDate = "2022-02-24T07:56:00Z";
in
stdenv.mkDerivation {
pname = "phoebus-unwrapped";
inherit (epnix.phoebus-deps) version src;

patches = [
(substituteAll {
src = ./fix-python-path.patch;
python = lib.getExe python3;
})
];

# TODO: make a scope, so that we don't pass around the whole `epnix`
nativeBuildInputs = [
maven
makeWrapper
(epnix.phoebus-setup-hook.override {
jdk = jdk.override {
enableJavaFX = true;
openjfx_jdk = openjfx.override {
withWebKit = true;
};
};
})
];

# Put runtime dependencies in propagated
# because references get thrown into a jar
# which is compressed,
# so the Nix scanner won't always be able to see them
propagatedBuildInputs = [
python3
];

buildPhase = ''
runHook preBuild
# Copy deps to a writable directory, due to the usage of "install-jars"
local deps=$PWD/deps
cp -r --no-preserve=mode "${epnix.phoebus-deps}" $deps
# TODO: tests fail
mvn package \
--projects "./phoebus-product" \
--also-make \
--offline \
-Dmaven.javadoc.skip=true -Dmaven.source.skip=true -DskipTests \
-Dproject.build.outputTimestamp=${buildDate} \
-Dmaven.repo.local="$deps"
runHook postBuild
'';

installPhase = ''
runHook preInstall
installPhoebusJar \
"phoebus-product/" \
"product-$version.jar" \
"phoebus" \
"org.phoebus.product.Launcher"
# MIME types for PV Tables
install -D -m 444 phoebus-product/phoebus.xml -t $out/share/mime/packages
runHook postInstall
'';

meta = {
description = "Control System Studio's Phoebus client";
homepage = "https://control-system-studio.readthedocs.io/en/latest/index.html";
mainProgram = "phoebus";
license = lib.licenses.epl10;
maintainers = with epnixLib.maintainers; [minijackson];
inherit (jdk.meta) platforms;
};
}
153 changes: 46 additions & 107 deletions pkgs/epnix/tools/phoebus/client/default.nix
Original file line number Diff line number Diff line change
@@ -1,111 +1,50 @@
{
lib,
epnixLib,
stdenv,
substituteAll,
maven,
makeWrapper,
epnix,
epnixLib,
lib,
makeDesktopItem,
copyDesktopItems,
epnix,
jdk,
openjfx,
python3,
}: let
buildDate = "2022-02-24T07:56:00Z";
in
stdenv.mkDerivation {
pname = "phoebus";
inherit (epnix.phoebus-deps) version src;

patches = [
(substituteAll {
src = ./fix-python-path.patch;
python = lib.getExe python3;
})
];

# TODO: make a scope, so that we don't pass around the whole `epnix`
nativeBuildInputs = [
maven
copyDesktopItems
makeWrapper
(epnix.phoebus-setup-hook.override {
jdk = jdk.override {
enableJavaFX = true;
openjfx_jdk = openjfx.override {
withWebKit = true;
};
};
})
];

# Put runtime dependencies in propagated
# because references get thrown into a jar
# which is compressed,
# so the Nix scanner won't always be able to see them
propagatedBuildInputs = [
python3
];

desktopItems = [
(makeDesktopItem {
name = "phoebus";
exec = "phoebus -server 4918 -resource %f";
desktopName = "Phoebus";
keywords = ["epics" "css"];
# https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry
categories = [
# Main
"Office"

# Additional
"Java"
"Viewer"
];
})
];

buildPhase = ''
runHook preBuild
# Copy deps to a writable directory, due to the usage of "install-jars"
local deps=$PWD/deps
cp -r --no-preserve=mode "${epnix.phoebus-deps}" $deps
# TODO: tests fail
mvn package \
--projects "./phoebus-product" \
--also-make \
--offline \
-Dmaven.javadoc.skip=true -Dmaven.source.skip=true -DskipTests \
-Dproject.build.outputTimestamp=${buildDate} \
-Dmaven.repo.local="$deps"
runHook postBuild
'';

installPhase = ''
runHook preInstall
installPhoebusJar \
"phoebus-product/" \
"product-$version.jar" \
"phoebus" \
"org.phoebus.product.Launcher"
# MIME types for PV Tables
install -D -m 444 phoebus-product/phoebus.xml -t $out/share/mime/packages
runHook postInstall
'';

meta = {
description = "Control System Studio's Phoebus client";
homepage = "https://control-system-studio.readthedocs.io/en/latest/index.html";
mainProgram = "phoebus";
license = lib.licenses.epl10;
maintainers = with epnixLib.maintainers; [minijackson];
inherit (jdk.meta) platforms;
};
}
stdenv,
# Inspired by:
# https://epics.anl.gov/tech-talk/2024/msg00895.php
java_opts ? "-XX:MinHeapSize=128m -XX:MaxHeapSize=4g -XX:InitialHeapSize=1g -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:-ShrinkHeapInSteps -XX:NativeMemoryTracking=detail",
}:
stdenv.mkDerivation {
pname = "phoebus";
inherit (epnix.phoebus-unwrapped) version;
nativeBuildInputs = [makeWrapper copyDesktopItems];

dontUnpack = true;
dontBuild = true;
dontConfigure = true;

installPhase = ''
runHook preInstall
# This wrapper for the `phoebus-unwrapped` executable sets the `JAVA_OPTS`
makeWrapper "${lib.getExe epnix.phoebus-unwrapped}" "$out/bin/$pname" \
--prefix JAVA_OPTS " " "${java_opts}"
runHook postInstall
'';

desktopItems = [
(makeDesktopItem {
name = "phoebus";
exec = "phoebus -server 4918 -resource %f";
desktopName = "Phoebus";
keywords = ["epics" "css"];
# https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry
categories = [
# Main
"Office"
# Additional
"Java"
"Viewer"
];
})
];

inherit (epnix.phoebus-unwrapped) meta;
}

0 comments on commit e95f6b3

Please sign in to comment.