X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Ffst%2Fscanner.cc;h=c7cbd897dbfe22dcbf4d621e325bf3e91720c142;hb=fcecace421a21d0a165c0e1b9a358aaf315d54b8;hp=99177b51db510945956e04c61c7ed4ecaeb82c41;hpb=912f07b919c1ec44f0cdd5278d74a9bc29b91846;p=ardour.git diff --git a/libs/fst/scanner.cc b/libs/fst/scanner.cc index 99177b51db..c7cbd897db 100644 --- a/libs/fst/scanner.cc +++ b/libs/fst/scanner.cc @@ -3,6 +3,14 @@ #include #include +#include "pbd/pbd.h" +#include "pbd/transmitter.h" +#include "pbd/receiver.h" + +#ifdef __MINGW64__ +#define NO_OLDNAMES // no backwards compat _pid_t, conflict with w64 pthread/sched +#endif + #include "ardour/filesystem_paths.h" #ifdef LXVST_SUPPORT #include "ardour/linux_vst_support.h" @@ -23,41 +31,93 @@ #endif #include "../ardour/filesystem_paths.cc" #include "../ardour/directory_names.cc" -#include "../pbd/error.cc" -#include "../pbd/basename.cc" -#include "../pbd/search_path.cc" -#include "../pbd/transmitter.cc" -#include "../pbd/whitespace.cc" + #ifdef LXVST_SUPPORT void vstfx_destroy_editor (VSTState* /*vstfx*/) { } #endif +using namespace PBD; + +class DummyReceiver : public Receiver { + protected: + void receive (Transmitter::Channel chn, const char * str) { + const char *prefix = ""; + switch (chn) { + case Transmitter::Error: + prefix = "[ERROR]: "; + break; + case Transmitter::Info: + /* ignore */ + return; + case Transmitter::Warning: + prefix = "[WARNING]: "; + break; + case Transmitter::Fatal: + prefix = "[FATAL]: "; + break; + case Transmitter::Throw: + abort (); + } + + std::cerr << prefix << str << std::endl; + + if (chn == Transmitter::Fatal) { + ::exit (1); + } + } +}; + +DummyReceiver dummy_receiver; + int main (int argc, char **argv) { - if (argc != 2) { - fprintf(stderr, "usage: %s \n", argv[0]); + char *dllpath = NULL; + if (argc == 3 && !strcmp("-f", argv[1])) { + dllpath = argv[2]; + if (strstr (dllpath, ".so" ) || strstr(dllpath, ".dll")) { + vstfx_remove_infofile(dllpath); + vstfx_un_blacklist(dllpath); + } + + } + else if (argc != 2) { + fprintf(stderr, "usage: %s [-f] \n", argv[0]); return EXIT_FAILURE; + } else { + dllpath = argv[1]; } - char *dllpath = argv[1]; - std::vector *infos; + PBD::init(); + + dummy_receiver.listen_to (error); + dummy_receiver.listen_to (info); + dummy_receiver.listen_to (fatal); + dummy_receiver.listen_to (warning); + + std::vector *infos = 0; + + if (0) { } #ifdef LXVST_SUPPORT - if (strstr (dllpath, ".so")) { + else if (strstr (dllpath, ".so")) { infos = vstfx_get_info_lx(dllpath); } #endif #ifdef WINDOWS_VST_SUPPORT - if (strstr (dllpath, ".dll")) { + else if (strstr (dllpath, ".dll")) { infos = vstfx_get_info_fst(dllpath); } #endif + else { + fprintf(stderr, "'%s' is not a supported VST plugin.\n", dllpath); + } - if (infos->empty()) { + PBD::cleanup(); + + if (!infos || infos->empty()) { return EXIT_FAILURE; } else { return EXIT_SUCCESS; } } -