[Geany-devel] ANN: Configurable Build Menu Alpha in SVN

Thomas Martitz thomas.martitz at xxxxx
Sun Aug 16 10:40:28 UTC 2009

Lex Trotman schrieb:
> Hi Thomas,
> Good to hear that there are no major problems.
> I can see that you may want to kill a long build that you started by
> accident or when you realise you forgot to do something first.  I've
> done that more than once ;-)
> In Geany execute changes to stop while running, but build doesn't.
> The difference is because they are run in different ways, execute runs
> in a terminal (either external or VTE) but build commands are run
> directly so that no terminal window pops up and so that the output can
> be captured for parsing for errors.
> Due to problems on windows, builds have to be run synchronously on
> windows, ie the whole of Geany freezes while the build runs (why? I
> don't understand exactly, maybe Enrico can explain it).
> That means that cancelling a windows build can't be done from Geany anyway.
> Whilst Linux builds are still asynchronous only one is allowed at a
> time so that output isn't mixed up in the error parser.  So all build
> commands are set insensitive until completion.  To have one menu item
> still enabled and to have it change to stop is going to be quite a bit
> of fiddling unless it is always a fixed menu item or a toolbar button.

Seeing that the Run commands don't gray out too, I think adding a cancel 
button which doesn't gray out is going to be doable without a lot of 
> But as a general action I would be worried about killing a build anyway.
> Geany only knows about the parent process, the top level make, not any
> children that make forked to process subdirectories, or because -j was
> used, and they won't get killed (they migrate to be children of init).
>  The overall impact is not well defined, but killing a top level make
> may leave most of the build still running.   Now setting the build
> menu items sensitive and so enabling another build is risky.
> And the results of builders other than make is even less well defined.

The Rockbox build system (see [1]) has a way to kill builds (even those 
which are started with -jX) using this snippet of perl code. Note that 
kill here is a perl function, which does IIUC killing the childs for us 
(it kills the process groups if the signal parameter is negative). I 
don't know if it helps us though.
Could one try call the perl function from within geany with a crude 

sub killchild
    my ($id) = @_;

    return if (not defined $builds{$id});

    my $pipe = $builds{$id}{pipe};

    $busy -= $builds{$id}{cores};

    my $pid = $builds{$id}{pid};
    kill -9, $pid;
    tprint "Killed build $id\n";
    waitpid $pid, 0;

    my $dir = "$cwd/build-$pid";
    if (-d $dir) {
        tprint "Removing $dir\n";
        rmtree $dir;

    delete $builds{$id};
> I think we need to consider this a bit more first to find a safe
> general solution.
> In the interim why don't you configure an extra execute command to run
> the "killall -9 make".  It can then run asynchronously whilst the
> build is running.

Because my run (and build) command list is full ;)

Best regards.


More information about the Devel mailing list