#!/usr/bin/env python # Copyright (C) 2007, Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 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: print 'You need to specify the activity name or part of it.' sys.exit(1) registry = get_registry() activities = registry.find_activity(args[0]) if len(activities) == 0: print 'Activity not found.' activity = activities[0] 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))