< prev index next >

src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxRpmBundler.java

Print this page




 115                 Arguments.CLIOptions.LINUX_RPM_LICENSE_TYPE.getId(),
 116                 String.class,
 117                 params -> I18N.getString("param.license-type.default"),
 118                 (s, p) -> s
 119         );
 120 
 121     public static final BundlerParamInfo<String> XDG_FILE_PREFIX =
 122             new StandardBundlerParam<> (
 123             I18N.getString("param.xdg-prefix.name"),
 124             I18N.getString("param.xdg-prefix.description"),
 125             "linux.xdg-prefix",
 126             String.class,
 127             params -> {
 128                 try {
 129                     String vendor;
 130                     if (params.containsKey(VENDOR.getID())) {
 131                         vendor = VENDOR.fetchFrom(params);
 132                     } else {
 133                         vendor = "jpackage";
 134                     }
 135                     String appName = APP_FS_NAME.fetchFrom(params);
 136 
 137                     return (vendor + "-" + appName).replaceAll("\\s", "");
 138                 } catch (Exception e) {
 139                     if (Log.isDebug()) {
 140                         e.printStackTrace();
 141                     }
 142                 }
 143                 return "unknown-MimeInfo.xml";
 144             },
 145             (s, p) -> s);
 146 
 147     private final static String DEFAULT_ICON = "javalogo_white_32.png";
 148     private final static String DEFAULT_SPEC_TEMPLATE = "template.spec";
 149     private final static String DEFAULT_DESKTOP_FILE_TEMPLATE =
 150             "template.desktop";
 151 
 152     public final static String TOOL_RPMBUILD = "rpmbuild";
 153     public final static double TOOL_RPMBUILD_MIN_VERSION = 4.0d;
 154 
 155     public static boolean testTool(String toolName, double minVersion) {


 281         }
 282     }
 283 
 284     private String getLicenseFileString(Map<String, ? super Object> params)
 285             throws IOException {
 286         StringBuilder sb = new StringBuilder();
 287 
 288         String licenseStr = LICENSE_FILE.fetchFrom(params);
 289         if (licenseStr != null) {
 290             File licenseFile = new File(licenseStr);
 291             File rootDir =
 292                     LinuxAppBundler.getRootDir(RPM_IMAGE_DIR.fetchFrom(params),
 293                             params);
 294             File target = new File(rootDir + File.separator + "app"
 295                     + File.separator + licenseFile.getName());
 296             Files.copy(licenseFile.toPath(), target.toPath());
 297 
 298             sb.append("%license ");
 299             sb.append(LINUX_INSTALL_DIR.fetchFrom(params));
 300             sb.append("/");
 301             sb.append(APP_FS_NAME.fetchFrom(params));
 302             sb.append("/app/");
 303             sb.append(licenseFile.getName());
 304         }
 305 
 306         return sb.toString();
 307     }
 308 
 309     private boolean prepareProjectConfig(Map<String, ? super Object> params)
 310             throws IOException {
 311         Map<String, String> data = createReplacementData(params);
 312         File rootDir =
 313             LinuxAppBundler.getRootDir(RPM_IMAGE_DIR.fetchFrom(params), params);
 314 
 315         // prepare installer icon
 316         File iconTarget = getConfig_IconFile(rootDir, params);
 317         File icon = LinuxAppBundler.ICON_PNG.fetchFrom(params);
 318         if (!Arguments.CREATE_JRE_INSTALLER.fetchFrom(params)) {
 319             if (icon == null || !icon.exists()) {
 320                 fetchResource(iconTarget.getName(),
 321                         I18N.getString("resource.menu-icon"),


 473                             .append("\n");
 474 
 475                     deregistrations.append("xdg-mime uninstall ")
 476                             .append(LINUX_INSTALL_DIR.fetchFrom(params))
 477                             .append("/")
 478                             .append(data.get("APPLICATION_FS_NAME"))
 479                             .append("/")
 480                             .append(mimeInfoFile)
 481                             .append("\n");
 482                     addedEntry = true;
 483                 } else {
 484                     desktopMimes.append(";");
 485                 }
 486                 desktopMimes.append(thisMime);
 487 
 488                 if (faIcon != null && faIcon.exists()) {
 489                     int size = getSquareSizeOfImage(faIcon);
 490 
 491                     if (size > 0) {
 492                         File target = new File(rootDir,
 493                                 APP_FS_NAME.fetchFrom(params)
 494                                         + "_fa_" + faIcon.getName());
 495                         IOUtils.copyFile(faIcon, target);
 496 
 497                         // xdg-icon-resource install --context mimetypes
 498                         // --size 64 awesomeapp_fa_1.png
 499                         // application-x.vnd-awesome
 500                         registrations.append(
 501                                 "xdg-icon-resource install "
 502                                 + "--context mimetypes --size ")
 503                                 .append(size)
 504                                 .append(" ")
 505                                 .append(LINUX_INSTALL_DIR.fetchFrom(params))
 506                                 .append("/")
 507                                 .append(data.get("APPLICATION_FS_NAME"))
 508                                 .append("/")
 509                                 .append(target.getName())
 510                                 .append(" ")
 511                                 .append(dashMime)
 512                                 .append("\n");
 513 


 560         // prepare spec file
 561         Writer w = new BufferedWriter(
 562                 new FileWriter(getConfig_SpecFile(params)));
 563         String content = preprocessTextResource(
 564                 getConfig_SpecFile(params).getName(),
 565                 I18N.getString("resource.rpm-spec-file"),
 566                 DEFAULT_SPEC_TEMPLATE, data,
 567                 VERBOSE.fetchFrom(params),
 568                 RESOURCE_DIR.fetchFrom(params));
 569         w.write(content);
 570         w.close();
 571 
 572         return true;
 573     }
 574 
 575     private Map<String, String> createReplacementData(
 576             Map<String, ? super Object> params) throws IOException {
 577         Map<String, String> data = new HashMap<>();
 578 
 579         data.put("APPLICATION_NAME", APP_NAME.fetchFrom(params));
 580         data.put("APPLICATION_FS_NAME", APP_FS_NAME.fetchFrom(params));
 581         data.put("APPLICATION_PACKAGE", BUNDLE_NAME.fetchFrom(params));
 582         data.put("APPLICATION_VENDOR", VENDOR.fetchFrom(params));
 583         data.put("APPLICATION_VERSION", VERSION.fetchFrom(params));
 584         data.put("APPLICATION_LAUNCHER_FILENAME",
 585                 APP_FS_NAME.fetchFrom(params));
 586         data.put("INSTALLATION_DIRECTORY", LINUX_INSTALL_DIR.fetchFrom(params));
 587         data.put("XDG_PREFIX", XDG_FILE_PREFIX.fetchFrom(params));
 588         data.put("DEPLOY_BUNDLE_CATEGORY", CATEGORY.fetchFrom(params));
 589         // TODO rpm categories
 590         data.put("APPLICATION_DESCRIPTION", DESCRIPTION.fetchFrom(params));
 591         data.put("APPLICATION_SUMMARY", TITLE.fetchFrom(params));
 592         data.put("APPLICATION_LICENSE_TYPE", LICENSE_TYPE.fetchFrom(params));
 593         data.put("APPLICATION_LICENSE_FILE", getLicenseFileString(params));
 594         String deps = LINUX_PACKAGE_DEPENDENCIES.fetchFrom(params);
 595         data.put("PACKAGE_DEPENDENCIES",
 596                 deps.isEmpty() ? "" : "Requires: " + deps);
 597         data.put("CREATE_JRE_INSTALLER",
 598                 Arguments.CREATE_JRE_INSTALLER.fetchFrom(params).toString());
 599         return data;
 600     }
 601 
 602     private File getConfig_DesktopShortcutFile(File rootDir,
 603             Map<String, ? super Object> params) {
 604         return new File(rootDir,
 605                 APP_FS_NAME.fetchFrom(params) + ".desktop");
 606     }
 607 
 608     private File getConfig_IconFile(File rootDir,
 609             Map<String, ? super Object> params) {
 610         return new File(rootDir,
 611                 APP_FS_NAME.fetchFrom(params) + ".png");
 612     }
 613 
 614     private File getConfig_SpecFile(Map<String, ? super Object> params) {
 615         return new File(RPM_IMAGE_DIR.fetchFrom(params),
 616                 APP_FS_NAME.fetchFrom(params) + ".spec");
 617     }
 618 
 619     private File buildRPM(Map<String, ? super Object> params,
 620             File outdir) throws IOException {
 621         Log.verbose(MessageFormat.format(I18N.getString(
 622                 "message.outputting-bundle-location"),
 623                 outdir.getAbsolutePath()));
 624 
 625         File broot = new File(BUILD_ROOT.fetchFrom(params), "rmpbuildroot");
 626 
 627         outdir.mkdirs();
 628 
 629         //run rpmbuild
 630         ProcessBuilder pb = new ProcessBuilder(
 631                 TOOL_RPMBUILD,
 632                 "-bb", getConfig_SpecFile(params).getAbsolutePath(),
 633                 "--define", "%_sourcedir "
 634                         + RPM_IMAGE_DIR.fetchFrom(params).getAbsolutePath(),
 635                 // save result to output dir
 636                 "--define", "%_rpmdir " + outdir.getAbsolutePath(),




 115                 Arguments.CLIOptions.LINUX_RPM_LICENSE_TYPE.getId(),
 116                 String.class,
 117                 params -> I18N.getString("param.license-type.default"),
 118                 (s, p) -> s
 119         );
 120 
 121     public static final BundlerParamInfo<String> XDG_FILE_PREFIX =
 122             new StandardBundlerParam<> (
 123             I18N.getString("param.xdg-prefix.name"),
 124             I18N.getString("param.xdg-prefix.description"),
 125             "linux.xdg-prefix",
 126             String.class,
 127             params -> {
 128                 try {
 129                     String vendor;
 130                     if (params.containsKey(VENDOR.getID())) {
 131                         vendor = VENDOR.fetchFrom(params);
 132                     } else {
 133                         vendor = "jpackage";
 134                     }
 135                     String appName = APP_NAME.fetchFrom(params);
 136 
 137                     return (vendor + "-" + appName).replaceAll("\\s", "");
 138                 } catch (Exception e) {
 139                     if (Log.isDebug()) {
 140                         e.printStackTrace();
 141                     }
 142                 }
 143                 return "unknown-MimeInfo.xml";
 144             },
 145             (s, p) -> s);
 146 
 147     private final static String DEFAULT_ICON = "javalogo_white_32.png";
 148     private final static String DEFAULT_SPEC_TEMPLATE = "template.spec";
 149     private final static String DEFAULT_DESKTOP_FILE_TEMPLATE =
 150             "template.desktop";
 151 
 152     public final static String TOOL_RPMBUILD = "rpmbuild";
 153     public final static double TOOL_RPMBUILD_MIN_VERSION = 4.0d;
 154 
 155     public static boolean testTool(String toolName, double minVersion) {


 281         }
 282     }
 283 
 284     private String getLicenseFileString(Map<String, ? super Object> params)
 285             throws IOException {
 286         StringBuilder sb = new StringBuilder();
 287 
 288         String licenseStr = LICENSE_FILE.fetchFrom(params);
 289         if (licenseStr != null) {
 290             File licenseFile = new File(licenseStr);
 291             File rootDir =
 292                     LinuxAppBundler.getRootDir(RPM_IMAGE_DIR.fetchFrom(params),
 293                             params);
 294             File target = new File(rootDir + File.separator + "app"
 295                     + File.separator + licenseFile.getName());
 296             Files.copy(licenseFile.toPath(), target.toPath());
 297 
 298             sb.append("%license ");
 299             sb.append(LINUX_INSTALL_DIR.fetchFrom(params));
 300             sb.append("/");
 301             sb.append(APP_NAME.fetchFrom(params));
 302             sb.append("/app/");
 303             sb.append(licenseFile.getName());
 304         }
 305 
 306         return sb.toString();
 307     }
 308 
 309     private boolean prepareProjectConfig(Map<String, ? super Object> params)
 310             throws IOException {
 311         Map<String, String> data = createReplacementData(params);
 312         File rootDir =
 313             LinuxAppBundler.getRootDir(RPM_IMAGE_DIR.fetchFrom(params), params);
 314 
 315         // prepare installer icon
 316         File iconTarget = getConfig_IconFile(rootDir, params);
 317         File icon = LinuxAppBundler.ICON_PNG.fetchFrom(params);
 318         if (!Arguments.CREATE_JRE_INSTALLER.fetchFrom(params)) {
 319             if (icon == null || !icon.exists()) {
 320                 fetchResource(iconTarget.getName(),
 321                         I18N.getString("resource.menu-icon"),


 473                             .append("\n");
 474 
 475                     deregistrations.append("xdg-mime uninstall ")
 476                             .append(LINUX_INSTALL_DIR.fetchFrom(params))
 477                             .append("/")
 478                             .append(data.get("APPLICATION_FS_NAME"))
 479                             .append("/")
 480                             .append(mimeInfoFile)
 481                             .append("\n");
 482                     addedEntry = true;
 483                 } else {
 484                     desktopMimes.append(";");
 485                 }
 486                 desktopMimes.append(thisMime);
 487 
 488                 if (faIcon != null && faIcon.exists()) {
 489                     int size = getSquareSizeOfImage(faIcon);
 490 
 491                     if (size > 0) {
 492                         File target = new File(rootDir,
 493                                 APP_NAME.fetchFrom(params)
 494                                 + "_fa_" + faIcon.getName());
 495                         IOUtils.copyFile(faIcon, target);
 496 
 497                         // xdg-icon-resource install --context mimetypes
 498                         // --size 64 awesomeapp_fa_1.png
 499                         // application-x.vnd-awesome
 500                         registrations.append(
 501                                 "xdg-icon-resource install "
 502                                 + "--context mimetypes --size ")
 503                                 .append(size)
 504                                 .append(" ")
 505                                 .append(LINUX_INSTALL_DIR.fetchFrom(params))
 506                                 .append("/")
 507                                 .append(data.get("APPLICATION_FS_NAME"))
 508                                 .append("/")
 509                                 .append(target.getName())
 510                                 .append(" ")
 511                                 .append(dashMime)
 512                                 .append("\n");
 513 


 560         // prepare spec file
 561         Writer w = new BufferedWriter(
 562                 new FileWriter(getConfig_SpecFile(params)));
 563         String content = preprocessTextResource(
 564                 getConfig_SpecFile(params).getName(),
 565                 I18N.getString("resource.rpm-spec-file"),
 566                 DEFAULT_SPEC_TEMPLATE, data,
 567                 VERBOSE.fetchFrom(params),
 568                 RESOURCE_DIR.fetchFrom(params));
 569         w.write(content);
 570         w.close();
 571 
 572         return true;
 573     }
 574 
 575     private Map<String, String> createReplacementData(
 576             Map<String, ? super Object> params) throws IOException {
 577         Map<String, String> data = new HashMap<>();
 578 
 579         data.put("APPLICATION_NAME", APP_NAME.fetchFrom(params));
 580         data.put("APPLICATION_FS_NAME", APP_NAME.fetchFrom(params));
 581         data.put("APPLICATION_PACKAGE", BUNDLE_NAME.fetchFrom(params));
 582         data.put("APPLICATION_VENDOR", VENDOR.fetchFrom(params));
 583         data.put("APPLICATION_VERSION", VERSION.fetchFrom(params));
 584         data.put("APPLICATION_LAUNCHER_FILENAME", APP_NAME.fetchFrom(params));

 585         data.put("INSTALLATION_DIRECTORY", LINUX_INSTALL_DIR.fetchFrom(params));
 586         data.put("XDG_PREFIX", XDG_FILE_PREFIX.fetchFrom(params));
 587         data.put("DEPLOY_BUNDLE_CATEGORY", CATEGORY.fetchFrom(params));
 588         // TODO rpm categories
 589         data.put("APPLICATION_DESCRIPTION", DESCRIPTION.fetchFrom(params));
 590         data.put("APPLICATION_SUMMARY", TITLE.fetchFrom(params));
 591         data.put("APPLICATION_LICENSE_TYPE", LICENSE_TYPE.fetchFrom(params));
 592         data.put("APPLICATION_LICENSE_FILE", getLicenseFileString(params));
 593         String deps = LINUX_PACKAGE_DEPENDENCIES.fetchFrom(params);
 594         data.put("PACKAGE_DEPENDENCIES",
 595                 deps.isEmpty() ? "" : "Requires: " + deps);
 596         data.put("CREATE_JRE_INSTALLER",
 597                 Arguments.CREATE_JRE_INSTALLER.fetchFrom(params).toString());
 598         return data;
 599     }
 600 
 601     private File getConfig_DesktopShortcutFile(File rootDir,
 602             Map<String, ? super Object> params) {
 603         return new File(rootDir, APP_NAME.fetchFrom(params) + ".desktop");

 604     }
 605 
 606     private File getConfig_IconFile(File rootDir,
 607             Map<String, ? super Object> params) {
 608         return new File(rootDir, APP_NAME.fetchFrom(params) + ".png");

 609     }
 610 
 611     private File getConfig_SpecFile(Map<String, ? super Object> params) {
 612         return new File(RPM_IMAGE_DIR.fetchFrom(params),
 613                 APP_NAME.fetchFrom(params) + ".spec");
 614     }
 615 
 616     private File buildRPM(Map<String, ? super Object> params,
 617             File outdir) throws IOException {
 618         Log.verbose(MessageFormat.format(I18N.getString(
 619                 "message.outputting-bundle-location"),
 620                 outdir.getAbsolutePath()));
 621 
 622         File broot = new File(BUILD_ROOT.fetchFrom(params), "rmpbuildroot");
 623 
 624         outdir.mkdirs();
 625 
 626         //run rpmbuild
 627         ProcessBuilder pb = new ProcessBuilder(
 628                 TOOL_RPMBUILD,
 629                 "-bb", getConfig_SpecFile(params).getAbsolutePath(),
 630                 "--define", "%_sourcedir "
 631                         + RPM_IMAGE_DIR.fetchFrom(params).getAbsolutePath(),
 632                 // save result to output dir
 633                 "--define", "%_rpmdir " + outdir.getAbsolutePath(),


< prev index next >