[gnumeric] gnmgdb: new wrapper



commit 8f2a8ecf34b02232f4fe071331dcefa0e5955cbd
Author: Morten Welinder <terra gnome org>
Date:   Wed Jul 8 11:50:35 2015 -0400

    gnmgdb: new wrapper
    
    This adds the right amount of libtool and gdb magic to start a gnumeric
    or ssconvert under gdb with arguments.

 tools/Makefile.am |    1 +
 tools/gnmgdb      |   98 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 99 insertions(+), 0 deletions(-)
---
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 52c7ff5..818215e 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -5,6 +5,7 @@ EXTRA_DIST = dumpdef.pl \
        check-gtk-includes \
        check-null-false-returns \
        check-glade-parsing \
+       gnmgdb \
        gnmvalgrind \
        embedder \
        handle-conf-options \
diff --git a/tools/gnmgdb b/tools/gnmgdb
new file mode 100755
index 0000000..7c36bf1
--- /dev/null
+++ b/tools/gnmgdb
@@ -0,0 +1,98 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+my $verbose = 1;
+my $program = undef;
+my @cmd = ();
+
+my $topsrc = &find_topsrc ();
+
+for (my $i = 0; $i < @ARGV;) {
+    my $a = $ARGV[$i++];
+
+    if ($a !~ /^-/) {
+       if (!-x $a) {
+           die "$0: failed to understand command line.\n";
+       }
+       if (-s _ < 50000) {
+           push @cmd, "$topsrc/libtool", "--mode=execute";
+       }
+       $program = $a;
+       last;
+    }
+}
+die "$0: usage $0 [gdb options] gnumeric [gnumeric-options]\n"
+    unless $program;
+
+#&add_debug_flag ('G_SLICE', 'always-malloc');
+
+push @cmd, 'gdb';
+push @cmd, "--args";
+push @cmd, @ARGV;
+
+print STDERR "Executing ", join (' ', map { &quotearg ($_) } @cmd), "\n" if $verbose;
+exec { $cmd[0] } @cmd
+    or die "$0: failed to execute gdb.\n";
+
+
+sub add_debug_flag {
+    my ($var,$flag) = @_;
+
+    if (exists $ENV{$var}) {
+       foreach my $f2 (split (':', $ENV{$var})) {
+           return if $f2 eq $flag;
+       }
+       $ENV{$var} .= ":$flag";
+    } else {
+       $ENV{$var} = $flag;
+    }
+    print STDERR "Setting $var=", $ENV{$var}, "\n" if $verbose;
+}
+
+sub find_topsrc {
+    my $dir = '.';
+
+    for (1 ... 5) {
+       if (-r "$dir/configure" && -r "$dir/gnumeric.xsd") {
+           return $dir;
+       }
+
+       $dir = "$dir/..";
+       $dir =~ s{^\./}{};
+    }
+
+    $dir = $0;
+    $dir =~ s{/[^/]*$}{};
+    for (1 ... 5) {
+       if (-r "$dir/configure" && -r "$dir/gnumeric.xsd") {
+           return $dir;
+       }
+
+       $dir = "$dir/..";
+       $dir =~ s{^\./}{};
+    }
+
+
+
+    die "$0: Cannot find top-level directory.\n";
+}
+
+sub quotearg {
+    my ($arg) = @_;
+
+    return $arg if $arg =~ m{^[-a-zA-Z0-9_/=.,]+$};
+    return "'$arg'" if $arg =~ m{^[-a-zA-Z0-9_/=., *?<>%&^! #]*$};
+
+    my $res = '';
+    while ($arg ne '') {
+       if ($arg =~ m{^([-a-zA-Z0-9_/=.,]+)}) {
+           $res .= $1;
+           $arg = substr ($arg, length $1);
+       } else {
+           $res .= "\\" . substr ($arg, 0, 1);
+           $arg = substr ($arg, 1);
+       }
+    }
+    return $res;
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]