]> sigrok.org Git - libsigrokflow.git/blobdiff - src/main.cpp
Srf::init(): Throw an exception upon multiple init() calls.
[libsigrokflow.git] / src / main.cpp
index 080ef64376e5fe69d66dcbfc5402f909cb6debc1..45d2308fe3a99387229095d4d1aaf84f7325aee1 100644 (file)
  */
 
 #include <config.h>
-#include <libsigrokflow/libsigrokflow.hpp>
-
-#include <libsigrokdecode/libsigrokdecode.h>
-
 #include <iostream>
+#include <libsigrokflow/libsigrokflow.hpp>
 
 namespace Srf
 {
@@ -33,6 +30,11 @@ using namespace std::placeholders;
 
 void init()
 {
+       static bool srf_initialized = false;
+
+       if (srf_initialized)
+               throw runtime_error("libsigrokflow is already initialized");
+
 #ifdef HAVE_LIBSIGROKCXX
        Gst::Plugin::register_static(GST_VERSION_MAJOR, GST_VERSION_MINOR,
                        "sigrok_legacy_capture_device",
@@ -50,11 +52,15 @@ void init()
                        sigc::ptr_fun(&LegacyOutput::register_element),
                        "0.01", "GPL", "sigrok", "libsigrokflow", "http://sigrok.org");
 #endif
+#ifdef HAVE_LIBSIGROKDECODE
        Gst::Plugin::register_static(GST_VERSION_MAJOR, GST_VERSION_MINOR,
                        "sigrok_legacy_decoder",
                        "Wrapper for protocol decoders using legacy libsigrokdecode APIs",
                        sigc::ptr_fun(&LegacyDecoder::register_element),
                        "0.01", "GPL", "sigrok", "libsigrokflow", "http://sigrok.org");
+#endif
+
+       srf_initialized = true;
 }
 
 Sink::Sink(GstBaseSink *gobj) :
@@ -350,6 +356,7 @@ bool LegacyOutput::stop_vfunc()
 }
 #endif
 
+#ifdef HAVE_LIBSIGROKDECODE
 void LegacyDecoder::class_init(Gst::ElementClass<LegacyDecoder> *klass)
 {
        klass->set_metadata("sigrok legacy decoder",
@@ -418,5 +425,6 @@ bool LegacyDecoder::stop_vfunc()
        srd_session_terminate_reset(_session);
        return true;
 }
+#endif
 
 }