From 50d187fe830295428f4e9a05d2c41b681a568263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 11 Feb 2021 14:19:29 +0100 Subject: [PATCH] {scene,shader,image}converter: make output argument treating consistent. If it's ignored, a warning is printed to catch accidents, but not an error since it should be possible to just append --info to existing command line to see what the input is about. --- src/Magnum/MeshTools/sceneconverter.cpp | 13 +++++++++++-- src/Magnum/ShaderTools/shaderconverter.cpp | 10 +++++----- src/Magnum/Trade/imageconverter.cpp | 19 +++++++++++++++++-- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/Magnum/MeshTools/sceneconverter.cpp b/src/Magnum/MeshTools/sceneconverter.cpp index 72278f7fa..8e1676c3b 100644 --- a/src/Magnum/MeshTools/sceneconverter.cpp +++ b/src/Magnum/MeshTools/sceneconverter.cpp @@ -86,7 +86,7 @@ magnum-sceneconverter [-h|--help] [-I|--importer IMPORTER] Arguments: - `input` --- input file -- `output` --- output file, ignored if `--info` is present +- `output` --- output file; ignored if `--info` is present - `-h`, `--help` --- display this help message and exit - `-I`, `--importer IMPORTER` --- scene importer plugin (default: @ref Trade::AnySceneImporter "AnySceneImporter") @@ -199,7 +199,7 @@ UnsignedInt namedAttributeId(const Trade::MeshData& mesh, UnsignedInt id) { int main(int argc, char** argv) { Utility::Arguments args; args.addArgument("input").setHelp("input", "input file") - .addArgument("output").setHelp("output", "output file, ignored if --info is present") + .addArgument("output").setHelp("output", "output file; ignored if --info is present") .addOption('I', "importer", "AnySceneImporter").setHelp("importer", "scene importer plugin") .addArrayOption('C', "converter").setHelp("converter", "scene converter plugin(s)") .addOption("plugin-dir").setHelp("plugin-dir", "override base plugin dir", "DIR") @@ -241,6 +241,15 @@ save its output; if no -C / --converter is specified, AnySceneConverter is used.)") .parse(argc, argv); + /* Generic checks */ + if(!args.value("output").isEmpty()) { + /* Not an error in this case, it should be possible to just append + --info to existing command line without having to remove anything. + But print a warning at least, it could also be a mistyped option. */ + if(args.isSet("info")) + Warning{} << "Ignoring output file for --info:" << args.value("output"); + } + PluginManager::Manager importerManager{ args.value("plugin-dir").empty() ? std::string{} : Utility::Directory::join(args.value("plugin-dir"), Trade::AbstractImporter::pluginSearchPaths()[0])}; diff --git a/src/Magnum/ShaderTools/shaderconverter.cpp b/src/Magnum/ShaderTools/shaderconverter.cpp index b2f722b34..543c08925 100644 --- a/src/Magnum/ShaderTools/shaderconverter.cpp +++ b/src/Magnum/ShaderTools/shaderconverter.cpp @@ -75,7 +75,7 @@ magnum-shaderconverter [-h|--help] [--validate] [--link] Arguments: - `input` --- input file(s) -- `output` --- output file, ignored if `--validate` is present. If neither +- `output` --- output file, disallowed for `--validate`. If neither `--validate` nor `--link` is present, corresponds to the @ref ShaderTools::AbstractConverter::convertFileToFile() function. - `-h`, `--help` --- display this help message and exit @@ -173,7 +173,7 @@ using namespace Magnum; int main(int argc, char** argv) { Utility::Arguments args; args.addArrayArgument("input").setHelp("input", "input file(s)") - .addArgument("output").setHelp("output", "output file, ignored if --validate is present") + .addArgument("output").setHelp("output", "output file, disallowed for --validate") .addBooleanOption("validate").setHelp("validate", "validate input") .addBooleanOption("link").setHelp("link", "link multiple input files together") .addArrayOption('C', "converter").setHelp("converter", "shader converter plugin(s)") @@ -232,9 +232,9 @@ see documentation of a particular converter for more information.)") .parse(argc, argv); /* Generic checks */ - if(args.isSet("validate")) { - if(!args.value("output").isEmpty()) { - Error{} << "Output file shouldn't be set for --validate"; + if(!args.value("output").isEmpty()) { + if(args.isSet("validate")) { + Error{} << "Output file shouldn't be set for --validate:" << args.value("output"); return 1; } } diff --git a/src/Magnum/Trade/imageconverter.cpp b/src/Magnum/Trade/imageconverter.cpp index 1af8efa24..99cd708b5 100644 --- a/src/Magnum/Trade/imageconverter.cpp +++ b/src/Magnum/Trade/imageconverter.cpp @@ -75,7 +75,8 @@ magnum-imageconverter [-h|--help] [-I|--importer IMPORTER] Arguments: - `input` --- input image -- `output` --- output image, ignored if `--in-place` or `--info` is present +- `output` --- output image; ignored if `--info` is present, disallowed for + `--in-place` - `-h`, `--help` --- display this help message and exit - `-I`, `--importer IMPORTER` --- image importer plugin (default: @ref Trade::AnyImageImporter "AnyImageImporter") @@ -145,7 +146,7 @@ using namespace Magnum; int main(int argc, char** argv) { Utility::Arguments args; args.addArgument("input").setHelp("input", "input image") - .addArgument("output").setHelp("output", "output image, ignored if --in-place or --info is present") + .addArgument("output").setHelp("output", "output image; ignored if --info is present, disallowed for --in-place") .addOption('I', "importer", "AnyImageImporter").setHelp("importer", "image importer plugin") .addOption('C', "converter", "AnyImageConverter").setHelp("converter", "image converter plugin") .addOption("plugin-dir").setHelp("plugin-dir", "override base plugin dir", "DIR") @@ -182,6 +183,20 @@ plugin configuration. If the = character is omitted, it's equivalent to saying key=true; configuration subgroups are delimited with /.)") .parse(argc, argv); + /* Generic checks */ + if(!args.value("output").isEmpty()) { + if(args.isSet("in-place")) { + Error{} << "Output file shouldn't be set for --in-place:" << args.value("output"); + return 1; + } + + /* Not an error in this case, it should be possible to just append + --info to existing command line without having to remove anything. + But print a warning at least, it could also be a mistyped option. */ + if(args.isSet("info")) + Warning{} << "Ignoring output file for --info:" << args.value("output"); + } + PluginManager::Manager importerManager{ args.value("plugin-dir").empty() ? std::string{} : Utility::Directory::join(args.value("plugin-dir"), Trade::AbstractImporter::pluginSearchPaths()[0])};