summaryrefslogtreecommitdiffstats
path: root/src/progs/ingen/main.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-07-31 23:17:02 +0000
committerDavid Robillard <d@drobilla.net>2007-07-31 23:17:02 +0000
commit22395ab7d817dec53e2c2fff07de6d88db70492e (patch)
treee1b4d749e96bfe31f1ba545ad979ca4bbe8807c5 /src/progs/ingen/main.cpp
parent012890277d8c3124bc8dd1df20b8e016c8d6d811 (diff)
downloadingen-22395ab7d817dec53e2c2fff07de6d88db70492e.tar.gz
ingen-22395ab7d817dec53e2c2fff07de6d88db70492e.tar.bz2
ingen-22395ab7d817dec53e2c2fff07de6d88db70492e.zip
Functional engine Python bindings (e.g. ingen -e -r patchomatic.py).
Rename window nitpick fix from Andrew Greenwood. git-svn-id: http://svn.drobilla.net/lad/ingen@663 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/progs/ingen/main.cpp')
-rw-r--r--src/progs/ingen/main.cpp32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/progs/ingen/main.cpp b/src/progs/ingen/main.cpp
index eff265c6..145ec463 100644
--- a/src/progs/ingen/main.cpp
+++ b/src/progs/ingen/main.cpp
@@ -19,8 +19,10 @@
#include <iostream>
#include <string>
#include <signal.h>
+#include <dlfcn.h>
#include <glibmm/convert.h>
#include <glibmm/miscutils.h>
+#include <glibmm/spawn.h>
#include <boost/optional.hpp>
#include <glibmm/thread.h>
#include <raul/Path.hpp>
@@ -30,13 +32,14 @@
#include "engine/Engine.hpp"
#include "engine/QueuedEngineInterface.hpp"
#include "serialisation/Loader.hpp"
+#include "bindings/ingen_bindings.hpp"
#include "cmdline.h"
using namespace std;
using namespace Ingen;
-SharedPtr<Engine> engine;
+SharedPtr<Engine> engine;
void
catch_int(int)
@@ -48,7 +51,6 @@ catch_int(int)
engine->quit();
}
-
int
main(int argc, char** argv)
{
@@ -69,6 +71,7 @@ main(int argc, char** argv)
SharedPtr<Glib::Module> engine_module;
SharedPtr<Glib::Module> client_module;
SharedPtr<Glib::Module> gui_module;
+ SharedPtr<Glib::Module> bindings_module;
SharedPtr<Shared::EngineInterface> engine_interface;
@@ -118,8 +121,9 @@ main(int argc, char** argv)
}
/* Load queued (direct in-process) engine interface */
- if (engine && !engine_interface && (args.load_given || args.gui_given))
+ if (engine && !engine_interface && (args.load_given || args.gui_given || args.run_given)) {
engine_interface = engine->new_queued_interface();
+ }
if (engine && engine_interface) {
@@ -130,6 +134,8 @@ main(int argc, char** argv)
engine->activate();
}
+
+ world->engine = engine_interface.get();
/* Load a patch */
if (args.load_given && engine_interface) {
@@ -193,6 +199,26 @@ main(int argc, char** argv)
}
}
+ /* Run a script */
+ if (args.run_given) {
+ bool (*run_script)(Ingen::Shared::World*, const char*) = NULL;
+ SharedPtr<Glib::Module> bindings_module = Ingen::Shared::load_module("ingen_bindings");
+ if (!bindings_module)
+ cerr << Glib::Module::get_last_error() << endl;
+
+ bindings_module->make_resident();
+
+ bool found = bindings_module->get_symbol("run", (void*&)(run_script));
+ if (found) {
+ cerr << "WORLD: " << world << endl;
+ cerr << "ENGINE: " << world->engine << endl;
+ setenv("PYTHONPATH", "../../bindings", 1);
+ run_script(world, args.run_arg);
+ } else {
+ cerr << "FAILED: " << Glib::Module::get_last_error() << endl;
+ }
+ }
+
/* Didn't run the GUI, listen to OSC and do our own main thing. */
if (engine && !ran_gui) {