Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-10-18 11:32:12 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-10-18 11:32:12 (GMT)
commit5084ecf4f4c4fdefe7dd3d986e2aec399649e33d (patch)
treef29061b93f591ce8dcfa8d53a918938afc86c6ed
parent02d8dfe79511ea5daba0dd91d5de8dfb6ce67c82 (diff)
Add the posibility to launch activitis in gdb to sugar-lauch.
-rw-r--r--bin/sugar-launch35
1 files changed, 33 insertions, 2 deletions
diff --git a/bin/sugar-launch b/bin/sugar-launch
index 6cb53e1..e40ebab 100644
--- a/bin/sugar-launch
+++ b/bin/sugar-launch
@@ -20,11 +20,14 @@ import os
import sys
from optparse import OptionParser
+from sugar import env
from sugar.activity import activityfactory
from sugar.activity.registry import get_registry
usage = "usage: %prog [options] activity"
parser = OptionParser(usage)
+parser.add_option("-d", "--debug", action="store_true", dest="debug",
+ help="launch activity inside gdb")
(options, args) = parser.parse_args()
if len(args) == 0:
@@ -37,5 +40,33 @@ if len(activities) == 0:
print 'Activity not found.'
activity = activities[0]
-args = activityfactory.get_command(activity).split(' ')
-os.execvpe(args[0], args, activityfactory.get_environment(activity))
+cmd_args = activityfactory.get_command(activity).split(' ')
+print cmd_args
+
+def _get_interpreter(exec_file):
+ if os.path.exists(exec_file):
+ abs_path = exec_file
+ else:
+ abs_path = os.path.join(env.get_bin_path(), exec_file)
+ if not os.path.exists(abs_path):
+ return exec_file
+
+ f = open(abs_path)
+ line = f.readline(100)
+ if line.startswith('#!'):
+ cmds = line[2:].strip().split(' ')
+ cmds.append(abs_path)
+ return cmds
+
+ return exec_file
+
+if options.debug:
+ act_args = cmd_args
+ cmd_args = ['gdb', '--args']
+ cmd_args.extend(_get_interpreter(act_args.pop(0)))
+ cmd_args.extend(act_args)
+
+print cmd_args
+
+os.execvpe(cmd_args[0], cmd_args, activityfactory.get_environment(activity))
+