1{
2 lib,
3 jdk21,
4 maven,
5 fetchFromGitHub,
6 makeDesktopItem,
7 copyDesktopItems,
8 glib,
9 makeWrapper,
10 wrapGAppsHook3,
11}:
12
13let
14 jdk = jdk21.override {
15 enableJavaFX = true;
16 };
17in
18maven.buildMavenPackage rec {
19 pname = "scenebuilder";
20 version = "21.0.1";
21
22 src = fetchFromGitHub {
23 owner = "gluonhq";
24 repo = "scenebuilder";
25 rev = version;
26 hash = "sha256-YEcW1yQK6RKDqSstsrpdOqMt972ZagenGDxcJ/gP+SA=";
27 };
28
29 patches = [
30 # makes the mvnHash platform-independent
31 ./pom-remove-javafx.patch
32
33 # makes sure that maven upgrades don't change the mvnHash
34 ./fix-default-maven-plugin-versions.patch
35 ];
36
37 postPatch = ''
38 # set the build timestamp to $SOURCE_DATE_EPOCH
39 substituteInPlace app/pom.xml \
40 --replace-fail "\''${maven.build.timestamp}" "$(date -d "@$SOURCE_DATE_EPOCH" '+%Y-%m-%d %H:%M:%S')"
41 '';
42
43 mvnJdk = jdk;
44 mvnParameters = toString [
45 "-Dmaven.test.skip"
46 "-Dproject.build.outputTimestamp=1980-01-01T00:00:02Z"
47 ];
48
49 mvnHash = "sha256-fS7dS2Q4ORThLBwDOzJJnRboNNRmhp0RG6Dae9fl+pw=";
50
51 nativeBuildInputs = [
52 copyDesktopItems
53 glib
54 makeWrapper
55 wrapGAppsHook3
56 ];
57
58 dontWrapGApps = true; # prevent double wrapping
59
60 installPhase = ''
61 runHook preInstall
62
63 install -Dm644 app/target/lib/scenebuilder-${version}-SNAPSHOT-all.jar $out/share/scenebuilder/scenebuilder.jar
64 install -Dm644 app/src/main/resources/com/oracle/javafx/scenebuilder/app/SB_Logo.png $out/share/icons/hicolor/128x128/apps/scenebuilder.png
65
66 runHook postInstall
67 '';
68
69 postFixup = ''
70 makeWrapper ${jdk}/bin/java $out/bin/scenebuilder \
71 --add-flags "--add-modules javafx.web,javafx.fxml,javafx.swing,javafx.media" \
72 --add-flags "--add-opens=javafx.fxml/javafx.fxml=ALL-UNNAMED" \
73 --add-flags "-jar $out/share/scenebuilder/scenebuilder.jar" \
74 "''${gappsWrapperArgs[@]}"
75 '';
76
77 desktopItems = [
78 (makeDesktopItem {
79 name = "scenebuilder";
80 exec = "scenebuilder";
81 icon = "scenebuilder";
82 comment = "A visual, drag'n'drop, layout tool for designing JavaFX application user interfaces.";
83 desktopName = "Scene Builder";
84 mimeTypes = [
85 "application/java"
86 "application/java-vm"
87 "application/java-archive"
88 ];
89 categories = [ "Development" ];
90 })
91 ];
92
93 meta = with lib; {
94 changelog = "https://github.com/gluonhq/scenebuilder/releases/tag/${src.rev}";
95 description = "Visual, drag'n'drop, layout tool for designing JavaFX application user interfaces";
96 homepage = "https://gluonhq.com/products/scene-builder/";
97 license = licenses.bsd3;
98 mainProgram = "scenebuilder";
99 maintainers = with maintainers; [ wirew0rm ];
100 platforms = jdk.meta.platforms;
101 sourceProvenance = with sourceTypes; [
102 fromSource
103 binaryBytecode # deps
104 ];
105 };
106}