Skip to content

Commit

Permalink
unwrapper and wrapper for phoebus client
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthieu Daniel-Thomas committed Nov 4, 2024
1 parent a78a338 commit 85d41e6
Show file tree
Hide file tree
Showing 7 changed files with 175 additions and 110 deletions.
1 change: 1 addition & 0 deletions nixos/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
./modules/phoebus/alarm-server.nix
./modules/phoebus/olog.nix
./modules/phoebus/save-and-restore.nix
./modules/phoebus/client.nix
]
27 changes: 27 additions & 0 deletions nixos/modules/phoebus/client.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
config,
lib,
epnix,
pkgs,
...
}: let
cfg = config.programs.phoebus-client;
pkg = pkgs.epnix.phoebus.override {java_opts = cfg.java_opts;};
in {
options.programs.phoebus-client = {
enable = lib.mkEnableOption ''Enable the Phoebus client'';
java_opts = lib.mkOption {
type = lib.types.str;
default = "-XX:MinHeapSize=128m -XX:MaxHeapSize=4g -XX:InitialHeapSize=1g -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:-ShrinkHeapInSteps -XX:NativeMemoryTracking=detail";
example = "-XX:MinHeapSize=128m -XX:MaxHeapSize=4g -XX:InitialHeapSize=1g";
description = ''
This wrapper for the `phoebus-unwrapped` executable sets the `JAVA_OPTS`
environment variable with the provided `java_opts` value.
'';
};
};

config = lib.mkIf cfg.enable {
environment.systemPackages = [pkg];
};
}
1 change: 1 addition & 0 deletions pkgs/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ in
pcas = callPackage ./epnix/tools/pcas {};

phoebus = callPackage ./epnix/tools/phoebus/client {};
phoebus-unwrapped = callPackage ./epnix/tools/phoebus/client-unwrapped {};
phoebus-alarm-server = callPackage ./epnix/tools/phoebus/alarm-server {};
phoebus-alarm-logger = callPackage ./epnix/tools/phoebus/alarm-logger {};
phoebus-archive-engine = callPackage ./epnix/tools/phoebus/archive-engine {};
Expand Down
94 changes: 94 additions & 0 deletions pkgs/epnix/tools/phoebus/client-unwrapped/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
{
lib,
epnixLib,
stdenv,
substituteAll,
maven,
makeWrapper,
makeDesktopItem,
copyDesktopItems,
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
copyDesktopItems
makeWrapper
(epnix.phoebus-setup-hook.override {jdk = jdk.override {enableJavaFX = true;};})
(epnix.phoebus-setup-hook.override {
jdk = jdk.override {
enableJavaFX = true;
openjfx = 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;
};
}
159 changes: 51 additions & 108 deletions pkgs/epnix/tools/phoebus/client/default.nix
Original file line number Diff line number Diff line change
@@ -1,112 +1,55 @@
{
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;};})
(epnix.phoebus-setup-hook.override {
jdk = jdk.override {
enableJavaFX = true;
openjfx = 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,
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";
name = "phoebus";
nativeBuildInputs = [makeWrapper copyDesktopItems];
dontBuild = true;
dontConfigure = true;
dontUnpack = true;

installPhase = ''
runHook preInstall
# This wrapper for the `phoebus-unwrapped` executable sets the `JAVA_OPTS`
#environment variable with the provided `java_opts` value.
makeWrapper "${lib.getExe epnix.phoebus-unwrapped}" "$out/bin/$name" \
--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"
];
})
];
meta = {
inherit (epnix.phoebus-unwrapped.meta) description;
inherit (epnix.phoebus-unwrapped.meta) homepage;
inherit (epnix.phoebus-unwrapped.meta) platforms;
inherit (epnix.phoebus-unwrapped.meta) license;
inherit (epnix.phoebus-unwrapped.meta) maintainers;
inherit (epnix.phoebus-unwrapped.meta) mainProgram;
};
}
3 changes: 1 addition & 2 deletions pkgs/epnix/tools/phoebus/setup-hook/setup-hook.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,5 @@ installPhoebusJar() {
makeWrapper "@jdk@/bin/java" "$out/bin/$name" \
--add-flags "-classpath $out/share/java/$jarName:$depsPath/*" \
--add-flags '${JAVA_OPTS}' \
--add-flags '"file.encoding=UTF-8"'\
--add-flags "$java_runtime_opts"
--add-flags "$mainClass"
}

0 comments on commit 85d41e6

Please sign in to comment.