From 22395ab7d817dec53e2c2fff07de6d88db70492e Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 31 Jul 2007 23:17:02 +0000 Subject: 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 --- src/progs/ingen/main.cpp | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'src/progs/ingen/main.cpp') 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 #include #include +#include #include #include +#include #include #include #include @@ -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; +SharedPtr 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 engine_module; SharedPtr client_module; SharedPtr gui_module; + SharedPtr bindings_module; SharedPtr 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 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) { -- cgit v1.2.1