[gnumeric] gnmgdb: new wrapper
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] gnmgdb: new wrapper
- Date: Wed, 8 Jul 2015 15:51:44 +0000 (UTC)
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 { "earg ($_) } @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]