src/jdk.incubator.jpackage/linux/classes/jdk/incubator/jpackage/internal/LinuxDebBundler.java
author herrick
Fri, 08 Nov 2019 14:53:03 -0500
branchJDK-8200758-branch
changeset 58994 b09ba68c6a19
parent 58791 src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxDebBundler.java@fca9cb5f4953
permissions -rw-r--r--
8233636 : Make jpackage an incubator and remove tool provider implementation Reviewed-by: asemenyuk, almatvee, kcr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
     1
/*
57106
ea870b9ce89a 8216492: Update copyright of all new jpackage fils to 2019
kcr
parents: 57103
diff changeset
     2
 * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
     4
 *
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    10
 *
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    15
 * accompanied this code).
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    16
 *
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    20
 *
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    23
 * questions.
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    24
 */
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    25
58994
b09ba68c6a19 8233636 : Make jpackage an incubator and remove tool provider implementation
herrick
parents: 58791
diff changeset
    26
package jdk.incubator.jpackage.internal;
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    27
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    28
import java.io.*;
57808
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
    29
import java.nio.file.FileVisitResult;
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    30
import java.nio.file.Files;
57807
4a15115716ea 8215381: Investigate if current implementation of --license-file is correct for Debian packages
herrick
parents: 57790
diff changeset
    31
import java.nio.file.Path;
57808
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
    32
import java.nio.file.SimpleFileVisitor;
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
    33
import java.nio.file.attribute.BasicFileAttributes;
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
    34
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    35
import java.nio.file.attribute.PosixFilePermission;
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    36
import java.nio.file.attribute.PosixFilePermissions;
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    37
import java.text.MessageFormat;
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    38
import java.util.*;
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    39
import java.util.regex.Matcher;
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    40
import java.util.regex.Pattern;
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    41
import java.util.stream.Collectors;
57807
4a15115716ea 8215381: Investigate if current implementation of --license-file is correct for Debian packages
herrick
parents: 57790
diff changeset
    42
import java.util.stream.Stream;
58994
b09ba68c6a19 8233636 : Make jpackage an incubator and remove tool provider implementation
herrick
parents: 58791
diff changeset
    43
import static jdk.incubator.jpackage.internal.LinuxAppBundler.LINUX_INSTALL_DIR;
b09ba68c6a19 8233636 : Make jpackage an incubator and remove tool provider implementation
herrick
parents: 58791
diff changeset
    44
import static jdk.incubator.jpackage.internal.OverridableResource.createResource;
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    45
58994
b09ba68c6a19 8233636 : Make jpackage an incubator and remove tool provider implementation
herrick
parents: 58791
diff changeset
    46
import static jdk.incubator.jpackage.internal.StandardBundlerParam.*;
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    47
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    48
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
    49
public class LinuxDebBundler extends LinuxPackageBundler {
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    50
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    51
    // Debian rules for package naming are used here
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    52
    // https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    53
    //
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    54
    // Package names must consist only of lower case letters (a-z),
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    55
    // digits (0-9), plus (+) and minus (-) signs, and periods (.).
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    56
    // They must be at least two characters long and
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    57
    // must start with an alphanumeric character.
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    58
    //
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
    59
    private static final Pattern DEB_PACKAGE_NAME_PATTERN =
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    60
            Pattern.compile("^[a-z][a-z\\d\\+\\-\\.]+");
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    61
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
    62
    private static final BundlerParamInfo<String> PACKAGE_NAME =
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    63
            new StandardBundlerParam<> (
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    64
            Arguments.CLIOptions.LINUX_BUNDLE_NAME.getId(),
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    65
            String.class,
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    66
            params -> {
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    67
                String nm = APP_NAME.fetchFrom(params);
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    68
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    69
                if (nm == null) return null;
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    70
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    71
                // make sure to lower case and spaces/underscores become dashes
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    72
                nm = nm.toLowerCase().replaceAll("[ _]", "-");
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    73
                return nm;
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    74
            },
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    75
            (s, p) -> {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
    76
                if (!DEB_PACKAGE_NAME_PATTERN.matcher(s).matches()) {
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    77
                    throw new IllegalArgumentException(new ConfigException(
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    78
                            MessageFormat.format(I18N.getString(
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    79
                            "error.invalid-value-for-package-name"), s),
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    80
                            I18N.getString(
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    81
                            "error.invalid-value-for-package-name.advice")));
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    82
                }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    83
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    84
                return s;
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    85
            });
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
    86
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    87
    private final static String TOOL_DPKG_DEB = "dpkg-deb";
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    88
    private final static String TOOL_DPKG = "dpkg";
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    89
    private final static String TOOL_FAKEROOT = "fakeroot";
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    90
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    91
    private final static String DEB_ARCH;
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    92
    static {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    93
        String debArch;
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    94
        try {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    95
            debArch = Executor.of(TOOL_DPKG, "--print-architecture").saveOutput(
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    96
                    true).executeExpectSuccess().getOutput().get(0);
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    97
        } catch (IOException ex) {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    98
            debArch = null;
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
    99
        }
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   100
        DEB_ARCH = debArch;
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   101
    }
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   102
57910
28412b313c6b 8228660: .deb files generated by jpackage don't follow naming convention
herrick
parents: 57908
diff changeset
   103
    private static final BundlerParamInfo<String> FULL_PACKAGE_NAME =
28412b313c6b 8228660: .deb files generated by jpackage don't follow naming convention
herrick
parents: 57908
diff changeset
   104
            new StandardBundlerParam<>(
28412b313c6b 8228660: .deb files generated by jpackage don't follow naming convention
herrick
parents: 57908
diff changeset
   105
                    "linux.deb.fullPackageName", String.class, params -> {
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   106
                        return PACKAGE_NAME.fetchFrom(params)
57910
28412b313c6b 8228660: .deb files generated by jpackage don't follow naming convention
herrick
parents: 57908
diff changeset
   107
                            + "_" + VERSION.fetchFrom(params)
28412b313c6b 8228660: .deb files generated by jpackage don't follow naming convention
herrick
parents: 57908
diff changeset
   108
                            + "-" + RELEASE.fetchFrom(params)
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   109
                            + "_" + DEB_ARCH;
57910
28412b313c6b 8228660: .deb files generated by jpackage don't follow naming convention
herrick
parents: 57908
diff changeset
   110
                    }, (s, p) -> s);
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   111
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   112
    private static final BundlerParamInfo<String> EMAIL =
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   113
            new StandardBundlerParam<> (
57255
f686bda3b831 8215574: Investigate and document usage of --category, --copyright, --vendor and --description
herrick
parents: 57150
diff changeset
   114
            Arguments.CLIOptions.LINUX_DEB_MAINTAINER.getId(),
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   115
            String.class,
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   116
            params -> "Unknown",
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   117
            (s, p) -> s);
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   118
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   119
    private static final BundlerParamInfo<String> MAINTAINER =
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   120
            new StandardBundlerParam<> (
57255
f686bda3b831 8215574: Investigate and document usage of --category, --copyright, --vendor and --description
herrick
parents: 57150
diff changeset
   121
            BundleParams.PARAM_MAINTAINER,
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   122
            String.class,
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   123
            params -> VENDOR.fetchFrom(params) + " <"
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   124
                    + EMAIL.fetchFrom(params) + ">",
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   125
            (s, p) -> s);
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   126
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   127
    private static final BundlerParamInfo<String> SECTION =
57790
1ea531646100 8213941: Debian linux problems in JavaPackager
herrick
parents: 57741
diff changeset
   128
            new StandardBundlerParam<>(
1ea531646100 8213941: Debian linux problems in JavaPackager
herrick
parents: 57741
diff changeset
   129
            Arguments.CLIOptions.LINUX_CATEGORY.getId(),
1ea531646100 8213941: Debian linux problems in JavaPackager
herrick
parents: 57741
diff changeset
   130
            String.class,
1ea531646100 8213941: Debian linux problems in JavaPackager
herrick
parents: 57741
diff changeset
   131
            params -> "misc",
1ea531646100 8213941: Debian linux problems in JavaPackager
herrick
parents: 57741
diff changeset
   132
            (s, p) -> s);
57807
4a15115716ea 8215381: Investigate if current implementation of --license-file is correct for Debian packages
herrick
parents: 57790
diff changeset
   133
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   134
    private static final BundlerParamInfo<String> LICENSE_TEXT =
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   135
            new StandardBundlerParam<> (
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   136
            "linux.deb.licenseText",
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   137
            String.class,
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   138
            params -> {
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   139
                try {
57080
bd4ce7f9ea2c 8214495: Change behavior of --license-file
herrick
parents: 57067
diff changeset
   140
                    String licenseFile = LICENSE_FILE.fetchFrom(params);
bd4ce7f9ea2c 8214495: Change behavior of --license-file
herrick
parents: 57067
diff changeset
   141
                    if (licenseFile != null) {
58696
61c44899b4eb 8223325: Improve wix sources generated by jpackage
herrick
parents: 58647
diff changeset
   142
                        return Files.readString(Path.of(licenseFile));
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   143
                    }
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   144
                } catch (IOException e) {
57140
3dcb33ce7ced 8217751: jpackage messages and failures
herrick
parents: 57119
diff changeset
   145
                    Log.verbose(e);
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   146
                }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   147
                return "Unknown";
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   148
            },
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   149
            (s, p) -> s);
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   150
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   151
    public LinuxDebBundler() {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   152
        super(PACKAGE_NAME);
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   153
    }
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   154
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   155
    @Override
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   156
    public void doValidate(Map<String, ? super Object> params)
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   157
            throws ConfigException {
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   158
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   159
        // Show warning if license file is missing
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   160
        if (LICENSE_FILE.fetchFrom(params) == null) {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   161
            Log.verbose(I18N.getString("message.debs-like-licenses"));
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   162
        }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   163
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   164
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   165
    @Override
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   166
    protected List<ToolValidator> getToolValidators(
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   167
            Map<String, ? super Object> params) {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   168
        return Stream.of(TOOL_DPKG_DEB, TOOL_DPKG, TOOL_FAKEROOT).map(
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   169
                ToolValidator::new).collect(Collectors.toList());
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   170
    }
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   171
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   172
    @Override
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   173
    protected File buildPackageBundle(
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   174
            Map<String, String> replacementData,
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   175
            Map<String, ? super Object> params, File outputParentDir) throws
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   176
            PackagerException, IOException {
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   177
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   178
        prepareProjectConfig(replacementData, params);
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   179
        adjustPermissionsRecursive(createMetaPackage(params).sourceRoot().toFile());
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   180
        return buildDeb(params, outputParentDir);
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   181
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   182
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   183
    private static final Pattern PACKAGE_NAME_REGEX = Pattern.compile("^(^\\S+):");
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   184
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   185
    @Override
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   186
    protected void initLibProvidersLookup(
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   187
            Map<String, ? super Object> params,
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   188
            LibProvidersLookup libProvidersLookup) {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   189
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   190
        //
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   191
        // `dpkg -S` command does glob pattern lookup. If not the absolute path
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   192
        // to the file is specified it might return mltiple package names.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   193
        // Even for full paths multiple package names can be returned as
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   194
        // it is OK for multiple packages to provide the same file. `/opt`
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   195
        // directory is such an example. So we have to deal with multiple
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   196
        // packages per file situation.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   197
        //
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   198
        // E.g.: `dpkg -S libc.so.6` command reports three packages:
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   199
        // libc6-x32: /libx32/libc.so.6
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   200
        // libc6:amd64: /lib/x86_64-linux-gnu/libc.so.6
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   201
        // libc6-i386: /lib32/libc.so.6
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   202
        // `:amd64` is architecture suffix and can (should) be dropped.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   203
        // Still need to decide what package to choose from three.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   204
        // libc6-x32 and libc6-i386 both depend on libc6:
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   205
        // $ dpkg -s libc6-x32
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   206
        // Package: libc6-x32
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   207
        // Status: install ok installed
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   208
        // Priority: optional
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   209
        // Section: libs
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   210
        // Installed-Size: 10840
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   211
        // Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   212
        // Architecture: amd64
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   213
        // Source: glibc
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   214
        // Version: 2.23-0ubuntu10
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   215
        // Depends: libc6 (= 2.23-0ubuntu10)
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   216
        //
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   217
        // We can dive into tracking dependencies, but this would be overly
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   218
        // complicated.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   219
        //
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   220
        // For simplicity lets consider the following rules:
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   221
        // 1. If there is one item in `dpkg -S` output, accept it.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   222
        // 2. If there are multiple items in `dpkg -S` output and there is at
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   223
        //  least one item with the default arch suffix (DEB_ARCH),
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   224
        //  accept only these items.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   225
        // 3. If there are multiple items in `dpkg -S` output and there are
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   226
        //  no with the default arch suffix (DEB_ARCH), accept all items.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   227
        // So lets use this heuristics: don't accept packages for whom
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   228
        //  `dpkg -p` command fails.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   229
        // 4. Arch suffix should be stripped from accepted package names.
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   230
        //
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   231
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   232
        libProvidersLookup.setPackageLookup(file -> {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   233
            Set<String> archPackages = new HashSet<>();
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   234
            Set<String> otherPackages = new HashSet<>();
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   235
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   236
            Executor.of(TOOL_DPKG, "-S", file.toString())
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   237
                    .saveOutput(true).executeExpectSuccess()
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   238
                    .getOutput().forEach(line -> {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   239
                        Matcher matcher = PACKAGE_NAME_REGEX.matcher(line);
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   240
                        if (matcher.find()) {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   241
                            String name = matcher.group(1);
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   242
                            if (name.endsWith(":" + DEB_ARCH)) {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   243
                                // Strip arch suffix
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   244
                                name = name.substring(0,
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   245
                                        name.length() - (DEB_ARCH.length() + 1));
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   246
                                archPackages.add(name);
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   247
                            } else {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   248
                                otherPackages.add(name);
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   249
                            }
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   250
                        }
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   251
                    });
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   252
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   253
            if (!archPackages.isEmpty()) {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   254
                return archPackages.stream();
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   255
            }
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   256
            return otherPackages.stream();
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   257
        });
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   258
    }
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   259
58791
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   260
    @Override
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   261
    protected List<ConfigException> verifyOutputBundle(
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   262
            Map<String, ? super Object> params, Path packageBundle) {
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   263
        List<ConfigException> errors = new ArrayList<>();
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   264
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   265
        String controlFileName = "control";
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   266
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   267
        List<PackageProperty> properties = List.of(
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   268
                new PackageProperty("Package", PACKAGE_NAME.fetchFrom(params),
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   269
                        "APPLICATION_PACKAGE", controlFileName),
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   270
                new PackageProperty("Version", String.format("%s-%s",
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   271
                        VERSION.fetchFrom(params), RELEASE.fetchFrom(params)),
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   272
                        "APPLICATION_VERSION-APPLICATION_RELEASE",
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   273
                        controlFileName),
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   274
                new PackageProperty("Architecture", DEB_ARCH, "APPLICATION_ARCH",
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   275
                        controlFileName));
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   276
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   277
        List<String> cmdline = new ArrayList<>(List.of(TOOL_DPKG_DEB, "-f",
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   278
                packageBundle.toString()));
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   279
        properties.forEach(property -> cmdline.add(property.name));
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   280
        try {
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   281
            Map<String, String> actualValues = Executor.of(cmdline.toArray(String[]::new))
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   282
                    .saveOutput(true)
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   283
                    .executeExpectSuccess()
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   284
                    .getOutput().stream()
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   285
                            .map(line -> line.split(":\\s+", 2))
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   286
                            .collect(Collectors.toMap(
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   287
                                    components -> components[0],
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   288
                                    components -> components[1]));
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   289
            properties.forEach(property -> errors.add(property.verifyValue(
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   290
                    actualValues.get(property.name))));
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   291
        } catch (IOException ex) {
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   292
            // Ignore error as it is not critical. Just report it.
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   293
            Log.verbose(ex);
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   294
        }
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   295
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   296
        return errors;
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   297
    }
fca9cb5f4953 8230612: Debian packaging ignores version and release in custom control file
herrick
parents: 58762
diff changeset
   298
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   299
    /*
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   300
     * set permissions with a string like "rwxr-xr-x"
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   301
     *
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   302
     * This cannot be directly backport to 22u which is built with 1.6
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   303
     */
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   304
    private void setPermissions(File file, String permissions) {
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   305
        Set<PosixFilePermission> filePermissions =
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   306
                PosixFilePermissions.fromString(permissions);
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   307
        try {
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   308
            if (file.exists()) {
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   309
                Files.setPosixFilePermissions(file.toPath(), filePermissions);
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   310
            }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   311
        } catch (IOException ex) {
57392
46d4b0aa4542 8223241: jpackage cleanup from code review
herrick
parents: 57391
diff changeset
   312
            Log.error(ex.getMessage());
46d4b0aa4542 8223241: jpackage cleanup from code review
herrick
parents: 57391
diff changeset
   313
            Log.verbose(ex);
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   314
        }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   315
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   316
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   317
58114
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   318
    public static boolean isDebian() {
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   319
        // we are just going to run "dpkg -s coreutils" and assume Debian
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   320
        // or deritive if no error is returned.
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   321
        try {
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   322
            Executor.of(TOOL_DPKG, "-s", "coreutils").executeExpectSuccess();
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   323
            return true;
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   324
        } catch (IOException e) {
58114
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   325
            // just fall thru
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   326
        }
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   327
        return false;
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   328
    }
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   329
57808
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   330
    private void adjustPermissionsRecursive(File dir) throws IOException {
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   331
        Files.walkFileTree(dir.toPath(), new SimpleFileVisitor<Path>() {
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   332
            @Override
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   333
            public FileVisitResult visitFile(Path file,
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   334
                    BasicFileAttributes attrs)
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   335
                    throws IOException {
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   336
                if (file.endsWith(".so") || !Files.isExecutable(file)) {
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   337
                    setPermissions(file.toFile(), "rw-r--r--");
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   338
                } else if (Files.isExecutable(file)) {
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   339
                    setPermissions(file.toFile(), "rwxr-xr-x");
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   340
                }
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   341
                return FileVisitResult.CONTINUE;
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   342
            }
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   343
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   344
            @Override
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   345
            public FileVisitResult postVisitDirectory(Path dir, IOException e)
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   346
                    throws IOException {
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   347
                if (e == null) {
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   348
                    setPermissions(dir.toFile(), "rwxr-xr-x");
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   349
                    return FileVisitResult.CONTINUE;
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   350
                } else {
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   351
                    // directory iteration failed
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   352
                    throw e;
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   353
                }
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   354
            }
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   355
        });
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   356
    }
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   357
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   358
    private class DebianFile {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   359
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   360
        DebianFile(Path dstFilePath, String comment) {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   361
            this.dstFilePath = dstFilePath;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   362
            this.comment = comment;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   363
        }
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   364
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   365
        DebianFile setExecutable() {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   366
            permissions = "rwxr-xr-x";
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   367
            return this;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   368
        }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   369
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   370
        void create(Map<String, String> data, Map<String, ? super Object> params)
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   371
                throws IOException {
58647
2c43b89b1679 8231862: Decouple DesktopIntegration and LinuxPackageBundler classes
herrick
parents: 58417
diff changeset
   372
            createResource("template." + dstFilePath.getFileName().toString(),
2c43b89b1679 8231862: Decouple DesktopIntegration and LinuxPackageBundler classes
herrick
parents: 58417
diff changeset
   373
                    params)
2c43b89b1679 8231862: Decouple DesktopIntegration and LinuxPackageBundler classes
herrick
parents: 58417
diff changeset
   374
                    .setCategory(I18N.getString(comment))
2c43b89b1679 8231862: Decouple DesktopIntegration and LinuxPackageBundler classes
herrick
parents: 58417
diff changeset
   375
                    .setSubstitutionData(data)
2c43b89b1679 8231862: Decouple DesktopIntegration and LinuxPackageBundler classes
herrick
parents: 58417
diff changeset
   376
                    .saveToFile(dstFilePath);
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   377
            if (permissions != null) {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   378
                setPermissions(dstFilePath.toFile(), permissions);
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   379
            }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   380
        }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   381
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   382
        private final Path dstFilePath;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   383
        private final String comment;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   384
        private String permissions;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   385
    }
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   386
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   387
    private void prepareProjectConfig(Map<String, String> data,
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   388
            Map<String, ? super Object> params) throws IOException {
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   389
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   390
        Path configDir = createMetaPackage(params).sourceRoot().resolve("DEBIAN");
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   391
        List<DebianFile> debianFiles = new ArrayList<>();
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   392
        debianFiles.add(new DebianFile(
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   393
                configDir.resolve("control"),
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   394
                "resource.deb-control-file"));
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   395
        debianFiles.add(new DebianFile(
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   396
                configDir.resolve("preinst"),
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   397
                "resource.deb-preinstall-script").setExecutable());
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   398
        debianFiles.add(new DebianFile(
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   399
                configDir.resolve("prerm"),
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   400
                "resource.deb-prerm-script").setExecutable());
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   401
        debianFiles.add(new DebianFile(
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   402
                configDir.resolve("postinst"),
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   403
                "resource.deb-postinstall-script").setExecutable());
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   404
        debianFiles.add(new DebianFile(
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   405
                configDir.resolve("postrm"),
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   406
                "resource.deb-postrm-script").setExecutable());
58762
0fe62353385b 8232281: jpackage is not always reporting an error when no main class specified
herrick
parents: 58696
diff changeset
   407
0fe62353385b 8232281: jpackage is not always reporting an error when no main class specified
herrick
parents: 58696
diff changeset
   408
        if (!StandardBundlerParam.isRuntimeInstaller(params)) {
0fe62353385b 8232281: jpackage is not always reporting an error when no main class specified
herrick
parents: 58696
diff changeset
   409
            debianFiles.add(new DebianFile(
0fe62353385b 8232281: jpackage is not always reporting an error when no main class specified
herrick
parents: 58696
diff changeset
   410
                    getConfig_CopyrightFile(params).toPath(),
0fe62353385b 8232281: jpackage is not always reporting an error when no main class specified
herrick
parents: 58696
diff changeset
   411
                    "resource.copyright-file"));
0fe62353385b 8232281: jpackage is not always reporting an error when no main class specified
herrick
parents: 58696
diff changeset
   412
        }
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   413
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   414
        for (DebianFile debianFile : debianFiles) {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   415
            debianFile.create(data, params);
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   416
        }
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   417
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   418
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   419
    @Override
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   420
    protected Map<String, String> createReplacementData(
57543
bcd1ab268a7d 8222778: Packaging Tool (JEP 343) on Linux/AArch64
dchuyko
parents: 57438
diff changeset
   421
            Map<String, ? super Object> params) throws IOException {
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   422
        Map<String, String> data = new HashMap<>();
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   423
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   424
        data.put("APPLICATION_MAINTAINER", MAINTAINER.fetchFrom(params));
57790
1ea531646100 8213941: Debian linux problems in JavaPackager
herrick
parents: 57741
diff changeset
   425
        data.put("APPLICATION_SECTION", SECTION.fetchFrom(params));
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   426
        data.put("APPLICATION_COPYRIGHT", COPYRIGHT.fetchFrom(params));
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   427
        data.put("APPLICATION_LICENSE_TEXT", LICENSE_TEXT.fetchFrom(params));
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   428
        data.put("APPLICATION_ARCH", DEB_ARCH);
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   429
        data.put("APPLICATION_INSTALLED_SIZE", Long.toString(
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   430
                createMetaPackage(params).sourceApplicationLayout().sizeInBytes() >> 10));
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   431
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   432
        return data;
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   433
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   434
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   435
    private File getConfig_CopyrightFile(Map<String, ? super Object> params) {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   436
        PlatformPackage thePackage = createMetaPackage(params);
58303
88453b906981 8231279 : Change install location for copyright file for Debian package
herrick
parents: 58301
diff changeset
   437
        return thePackage.sourceRoot().resolve(Path.of(".",
88453b906981 8231279 : Change install location for copyright file for Debian package
herrick
parents: 58301
diff changeset
   438
                LINUX_INSTALL_DIR.fetchFrom(params), PACKAGE_NAME.fetchFrom(
88453b906981 8231279 : Change install location for copyright file for Debian package
herrick
parents: 58301
diff changeset
   439
                params), "share/doc/copyright")).toFile();
57808
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   440
    }
013547ae70ac 8225447: Revise Debian packaging
herrick
parents: 57807
diff changeset
   441
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   442
    private File buildDeb(Map<String, ? super Object> params,
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   443
            File outdir) throws IOException {
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   444
        File outFile = new File(outdir,
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   445
                FULL_PACKAGE_NAME.fetchFrom(params)+".deb");
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   446
        Log.verbose(MessageFormat.format(I18N.getString(
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   447
                "message.outputting-to-location"), outFile.getAbsolutePath()));
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   448
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58116
diff changeset
   449
        PlatformPackage thePackage = createMetaPackage(params);
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   450
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   451
        List<String> cmdline = new ArrayList<>();
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   452
        cmdline.addAll(List.of(TOOL_FAKEROOT, TOOL_DPKG_DEB));
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   453
        if (Log.isVerbose()) {
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   454
            cmdline.add("--verbose");
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   455
        }
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   456
        cmdline.addAll(List.of("-b", thePackage.sourceRoot().toString(),
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   457
                outFile.getAbsolutePath()));
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   458
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   459
        // run dpkg
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   460
        Executor.of(cmdline.toArray(String[]::new)).executeExpectSuccess();
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   461
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   462
        Log.verbose(MessageFormat.format(I18N.getString(
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   463
                "message.output-to-location"), outFile.getAbsolutePath()));
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   464
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   465
        return outFile;
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   466
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   467
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   468
    @Override
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   469
    public String getName() {
57059
9bb2a4dc3af7 8214143: Reduce Resource files
herrick
parents: 57039
diff changeset
   470
        return I18N.getString("deb.bundler.name");
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   471
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   472
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   473
    @Override
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   474
    public String getID() {
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   475
        return "deb";
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   476
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   477
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   478
    @Override
57150
fa68c2ab636d 8217894: jpackage CLI syntax changes
herrick
parents: 57140
diff changeset
   479
    public boolean supported(boolean runtimeInstaller) {
58417
67ffaf3a2b75 8231280: Linux packages produced by jpackage should have correct dependencies
herrick
parents: 58304
diff changeset
   480
        return Platform.isLinux() && (new ToolValidator(TOOL_DPKG_DEB).validate() == null);
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   481
    }
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   482
58114
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   483
    @Override
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   484
    public boolean isDefault() {
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   485
        return isDebian();
42df7de58e39 8230519: jpackage "--package-type" values and default
herrick
parents: 57910
diff changeset
   486
    }
57038
b0f09e7c4680 8213963: Flatten out jpackager packages and resources
herrick
parents:
diff changeset
   487
}