public signal void compiled(Json.Object res);
+ public signal void compile_output(string str);
JsRender.JsRender file;
public int line_offset = 0;
+ public Gee.ArrayList<Spawn> children;
public ValaSource( )
{
base();
this.compiler = null;
+ this.children = new Gee.ArrayList<Spawn>();
+
}
public void dumpCode(string str)
{
// return this.checkString(JsRender.NodeToVala.mungeFile(this.file));
//}
- public void checkFileWithNodePropChange(
+ public bool checkFileWithNodePropChange(
JsRender.JsRender file,
JsRender.Node node,
this.file = file;
if (this.compiler != null) {
- return;
+ return false;
}
- Gee.HashMap<int,string> ret = new Gee.HashMap<int,string> ();
+
var hash = ptype == "listener" ? node.listeners : node.props;
// untill we get a smarter renderer..
// we have some scenarios where changing the value does not work
if (prop == "* xns" || prop == "xtype") {
- this.compiled(new Json.Object());
- return ;
+ return false;
}
//this.dumpCode(tmpstring);
//print("offset %d\n", offset);
- this.checkStringSpawn(tmpstring );
+ return this.checkStringSpawn(tmpstring );
// modify report
}
Spawn compiler;
- public void checkStringSpawn(
+ public bool checkStringSpawn(
string contents
)
{
if (this.compiler != null) {
- return;
+ return false;
}
FileIOStream iostream;
valafn = regex.replace(this.file.path,this.file.path.length , 0 , ".vala");
} catch (GLib.RegexError e) {
- var ret = new Json.Object();
- ret.set_boolean_member("success", false);
- ret.set_string_member("message", e.message);
- this.compiled(ret);
- return;
+
+ return false;
}
string[] args = {};
try {
this.compiler.run();
} catch (GLib.SpawnError e) {
- var ret = new Json.Object();
- ret.set_boolean_member("success", false);
- ret.set_string_member("message", e.message);
- this.compiled(ret);
- this.compiler = null;
+ GLib.debug(e.message);
+ this.compiler = null;
+ return false;
+
}
+ return true;
}
- public void checkFileSpawn(JsRender.JsRender file )
+ public bool checkFileSpawn(JsRender.JsRender file )
{
// race condition..
if (this.compiler != null) {
- return;
+ return false;
}
this.file = file;
- this.compiler = new Spawn("/tmp", args);
- this.compiler.complete.connect(spawnResult);
try {
- this.compiler.run();
- } catch (GLib.SpawnError e) {
- var ret = new Json.Object();
- ret.set_boolean_member("success", false);
- ret.set_string_member("message", e.message);
- this.compiled(ret);
+ this.compiler = new Spawn("/tmp", args);
+ this.compiler.complete.connect(spawnResult);
+
+ this.compiler.run();
+
+
+ } catch (GLib.Error e) {
+ GLib.debug(e.message);
this.compiler = null;
+ return false;
+ }
+ return true;
+
+ }
+
+
+
+
+
+ public void spawnExecute(JsRender.JsRender file)
+ {
+ // race condition..
+ if (this.compiler != null) {
+ return;
}
+ if (!(file.project is Project.Gtk)) {
+ return;
+ }
+ var pr = (Project.Gtk)(file.project);
+
+
+ this.file = file;
+ this.line_offset = 0;
+
+ string[] args = {};
+ args += BuilderApplication._self;
+ args += "--project";
+ args += this.file.project.fn;
+ args += "--target";
+ if (this.file.build_module.length > 0 ) {
+ args += this.file.build_module;
+ } else {
+ args += pr.firstBuildModule();
+ }
+ //args += "--output"; -- set up by the module -- defaults to testrun
+ //args += "/tmp/testrun";
+
+ // assume code is in home...
+ try {
+ this.compiler = new Spawn( GLib.Environment.get_home_dir(), args);
+ this.compiler.output_line.connect(compile_output_line);
+ this.compiler.complete.connect(runResult);
+ this.compiler.run();
+ this.children.add(this.compiler); //keep a reference...
+ } catch (GLib.Error e) {
+ GLib.debug(e.message);
+ this.compiler = null;
+
+ }
+ return;
+
+ }
+ public void compile_output_line( string str )
+ {
+ this.compile_output(str);
}
/**
* Used to compile a non builder file..
*/
- public void checkPlainFileSpawn( JsRender.JsRender file, string contents )
+
+ public bool checkPlainFileSpawn( JsRender.JsRender file, string contents )
+
{
// race condition..
if (this.compiler != null) {
- return;
+ return false;
}
var pr = (Project.Gtk)(file.project);
if (path == file.path) {
foundit = true;
break;
- }
+ }
}
if (!foundit) {
- return; // do not run the compile..
+
+ this.compiler = null;
+
+ return false; // do not run the compile..
}
// is the file in the module?
DataOutputStream dostream = new DataOutputStream (ostream);
dostream.put_string (contents);
+ var target = pr.firstBuildModule();
+ if (target.length < 1) {
+ return false;
+ }
this.file = null;
this.line_offset = 0;
args += "--project";
args += file.project.fn;
args += "--target";
+
args += pr.firstBuildModule();
args += "--add-file";
args += tmpfile.get_path();
args += file.path;
- this.compiler = new Spawn("/tmp", args);
- this.compiler.complete.connect(spawnResult);
+
try {
+ this.compiler = new Spawn("/tmp", args);
+ this.compiler.complete.connect(spawnResult);
this.compiler.run();
- } catch (GLib.SpawnError e) {
- var ret = new Json.Object();
- ret.set_boolean_member("success", false);
- ret.set_string_member("message", e.message);
- this.compiled(ret);
+ } catch (GLib.Error e) {
+
this.compiler = null;
+ return false;
}
+ return true;
}
-
+
public void spawnResult(int res, string output, string stderr)
{
try {
- GLib.debug("GOT output %s", output);
+ //GLib.debug("GOT output %s", output);
var pa = new Json.Parser();
pa.load_from_data(output);
this.compiled(ret);
- } catch (Error e) {
+ } catch (GLib.Error e) {
var ret = new Json.Object();
ret.set_boolean_member("success", false);
ret.set_string_member("message", e.message);
+ }
+
+ public void runResult(int res, string output, string stderr)
+ {
+ this.compiler = null;
+ var exe = "/tmp/testrun";
+ var mod = "";
+ var pr = (Project.Gtk)(this.file.project);
+
+
+
+ if (this.file.build_module.length > 0 ) {
+ mod = this.file.build_module;
+ } else {
+ mod = pr.firstBuildModule();
+ }
+ if (mod.length < 1) {
+ return;
+ }
+ var cg = pr.compilegroups.get(mod);
+ if (cg.target_bin.length > 0) {
+ exe = cg.target_bin;
+ }
+
+
+ if (!GLib.FileUtils.test(exe, GLib.FileTest.EXISTS)) {
+ print("Missing output file: %s\n",exe);
+ return;
+ }
+ string[] args = "/usr/bin/gnome-terminal -x /usr/bin/gdb -ex=r --args".split(" ");
+
+
+ // runs gnome-terminal, with gdb .. running the application..
+ // fixme -- need a system/which
+
+ args += exe;
+ if (cg.execute_args.length > 0) {
+ var aa = cg.execute_args.split(" ");
+ for (var i =0; i < aa.length; i++) {
+ args += aa[i];
+ }
+ }
+
+ print("OUT: %s\n\n----\nERR:%s\n", output, stderr);
+
+ // should be home directory...
+
+
+
+ var exec = new Spawn(GLib.Environment.get_home_dir() , args);
+ exec.detach = true;
+ exec.run();
+
}
}