#
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

main.usage.summary=\
Usage: {0} <options> --module-path <modulepath> --add-modules <mods> --output\n\
\<path> use --help for a list of possible options

main.usage=\
Usage: {0} <options> --module-path <modulepath> --add-modules <mods> --output\n\
\<path> Possible options include:

error.prefix=Error:
warn.prefix=Warning:

main.opt.help=\
\  -h, --help                            Print this help message

main.opt.version=\
\      --version                         Version information

main.opt.module-path=\
\  -p, --module-path <path>              Module path

main.opt.add-modules=\
\      --add-modules <mod>[,<mod>...]    Root modules to resolve

main.opt.limit-modules=\
\      --limit-modules <mod>[,<mod>...]  Limit the universe of observable\n\
\                                        modules

main.opt.output=\
\      --output <path>                   Location of output path

main.opt.launcher=\
\      --launcher <command>=<module>     Launcher command name for the module\n\
\      --launcher <command>=<module>/<main>\n\
\                                        Launcher command name for the module and the main class

main.command.files=\
\      @<filename>                       Read options from file

main.opt.endian=\
\      --endian <little|big>             Byte order of generated jimage\n\
\                                        (default:native)

main.opt.save-opts=\
\      --save-opts <filename>            Save jlink options in the given file

main.opt.ignore-signing-information=\
\      --ignore-signing-information      Suppress a fatal error when signed\n\
\                                        modular JARs are linked in the image.\n\
\                                        The signature related files of the\n\
\                                        signed modular JARs are not copied to\n\
\                                        the runtime image.

main.msg.bug=\
An exception has occurred in jlink. \
Please file a bug at the Java Bug Database (http://bugreport.java.com/bugreport/) \
after checking the database for duplicates. \
Include your program and the following diagnostic in your report.  Thank you.

main.extended.help=\
\List of available plugins:

main.extended.help.footer=\
\For options requiring a <pattern-list>, the value will be a comma separated\n\
\list of elements each using one the following forms:\n\
\  <glob-pattern>\n\
\  glob:<glob-pattern>\n\
\  regex:<regex-pattern>\n\
\  @<filename> where filename is the name of a file containing patterns to be\n\
\              used, one pattern per line\n\
\n\


err.unknown.byte.order:unknown byte order {0}
err.launcher.main.class.empty:launcher main class name cannot be empty: {0}
err.launcher.module.name.empty:launcher module name cannot be empty: {0}
err.launcher.value.format:launcher value should be of form <command>=<module>[/<main-class>]: {0}
err.output.must.be.specified:--output must be specified
err.modulepath.must.be.specified:--module-path must be specified
err.mods.must.be.specified:no modules specified to {0}
err.path.not.found=path not found: {0}
err.path.not.valid=invalid path: {0}
err.image.must.exist=image {0} does not exist or is not a directory
err.existing.image.invalid=existing image is not valid
err.file.not.found=cannot find file: {0}
err.file.error=cannot access file: {0}
err.dir.exists={0} already exists
err.badpattern=bad pattern {0}
err.unknown.option=unknown option: {0}
err.orphan.argument=orphan argument: {0}
err.missing.arg=no value given for {0}
err.internal.error=internal error: {0} {1} {2}
err.invalid.arg.for.option=invalid argument for option: {0}
err.option.after.class=option must be specified before classes: {0}
err.option.unsupported={0} not supported: {1}
err.config.defaults=property {0} is missing from configuration
err.config.defaults.value=wrong value in defaults property: {0}
err.bom.generation=bom file generation failed: {0}
err.not.modular.format=selected module {0} ({1}) not in jmod or modular JAR format
err.signing=signed modular JAR {0} is currently not supported,\
\ use --ignore-signing-information to suppress error
warn.signing=WARNING: signed modular JAR {0} is currently not supported
warn.invalid.arg=invalid classname or pathname not exist: {0}
warn.split.package=package {0} defined in {1} {2}
