From e9aa7094c950c70d4f56f8dcddd3e63269b45be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 9 Apr 2023 10:10:44 +0200 Subject: [PATCH] sceneconverter: don't load the importer plugin for --info-converter. If it crashes or does some other shit, it'll cause the tool to not work at all. If it fails to load due to whatever other issue, it'll spam the output for no reason. --- .../SceneTools/Test/SceneConverterTest.cpp | 2 +- src/Magnum/SceneTools/sceneconverter.cpp | 31 +++++++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/Magnum/SceneTools/Test/SceneConverterTest.cpp b/src/Magnum/SceneTools/Test/SceneConverterTest.cpp index 8f9ae8afc..b1a78a6ca 100644 --- a/src/Magnum/SceneTools/Test/SceneConverterTest.cpp +++ b/src/Magnum/SceneTools/Test/SceneConverterTest.cpp @@ -55,7 +55,7 @@ struct SceneConverterTest: TestSuite::Tester { using namespace Containers::Literals; const struct { - const char* name; + TestSuite::TestCaseDescriptionSourceLocation name; Containers::Array args; const char* requiresImporter; const char* requiresConverter; diff --git a/src/Magnum/SceneTools/sceneconverter.cpp b/src/Magnum/SceneTools/sceneconverter.cpp index caa1acbdd..6d0549660 100644 --- a/src/Magnum/SceneTools/sceneconverter.cpp +++ b/src/Magnum/SceneTools/sceneconverter.cpp @@ -564,18 +564,19 @@ well, the IDs reference attributes of the first mesh.)") Utility::Path::join(args.value("plugin-dir"), Utility::Path::split(Trade::AbstractSceneConverter::pluginSearchPaths().back()).second())}; converterManager.registerExternalManager(imageConverterManager); - Containers::Pointer importer = importerManager.loadAndInstantiate(args.value("importer")); - if(!importer) { - Debug{} << "Available importer plugins:" << ", "_s.join(importerManager.aliasList()); - return 1; - } - - /* Set options, if passed */ - if(args.isSet("verbose")) importer->addFlags(Trade::ImporterFlag::Verbose); - Implementation::setOptions(*importer, "AnySceneImporter", args.value("importer-options")); - /* Print plugin info, if requested */ + /** @todo these all duplicate plugin loading & option setting, move to + some helpers (shared among all command-line tools)? */ if(args.isSet("info-importer")) { + Containers::Pointer importer = importerManager.loadAndInstantiate(args.value("importer")); + if(!importer) { + Debug{} << "Available importer plugins:" << ", "_s.join(importerManager.aliasList()); + return 1; + } + + /* Set options, if passed */ + if(args.isSet("verbose")) importer->addFlags(Trade::ImporterFlag::Verbose); + Implementation::setOptions(*importer, "AnySceneImporter", args.value("importer-options")); Trade::Implementation::printImporterInfo(useColor, *importer); return 0; } @@ -608,6 +609,16 @@ well, the IDs reference attributes of the first mesh.)") return 0; } + Containers::Pointer importer = importerManager.loadAndInstantiate(args.value("importer")); + if(!importer) { + Debug{} << "Available importer plugins:" << ", "_s.join(importerManager.aliasList()); + return 1; + } + + /* Set options, if passed */ + if(args.isSet("verbose")) importer->addFlags(Trade::ImporterFlag::Verbose); + Implementation::setOptions(*importer, "AnySceneImporter", args.value("importer-options")); + /* Wow, C++, you suck. This implicitly initializes to random shit?! Also, because of addSupportedImporterContents() it's not really possible