11364750dSJames Henderson# DExTer : Debugging Experience Tester 21364750dSJames Henderson# ~~~~~~ ~ ~~ ~ ~~ 31364750dSJames Henderson# 41364750dSJames Henderson# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 51364750dSJames Henderson# See https://llvm.org/LICENSE.txt for license information. 61364750dSJames Henderson# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 71364750dSJames Henderson"""This is a special subtool that is run when no subtool is specified. 81364750dSJames HendersonIt just provides a welcome message and simple usage instructions. 91364750dSJames Henderson""" 101364750dSJames Henderson 111364750dSJames Hendersonfrom dex.tools import ToolBase, get_tool_names 121364750dSJames Hendersonfrom dex.utils.Exceptions import Error 131364750dSJames Hendersonfrom dex.utils.ReturnCode import ReturnCode 141364750dSJames Henderson 151364750dSJames Henderson 161364750dSJames Henderson# This is a special "tool" that is run when no subtool has been specified on 171364750dSJames Henderson# the command line. Its only job is to provide useful usage info. 181364750dSJames Hendersonclass Tool(ToolBase): 191364750dSJames Henderson """Welcome to DExTer (Debugging Experience Tester). 201364750dSJames Henderson Please choose a subtool from the list below. Use 'dexter.py help' for more 211364750dSJames Henderson information. 221364750dSJames Henderson """ 231364750dSJames Henderson 241364750dSJames Henderson @property 251364750dSJames Henderson def name(self): 26*f98ee40fSTobias Hieta return "DExTer" 271364750dSJames Henderson 281364750dSJames Henderson def add_tool_arguments(self, parser, defaults): 291364750dSJames Henderson parser.description = Tool.__doc__ 301364750dSJames Henderson parser.add_argument( 31*f98ee40fSTobias Hieta "subtool", 32*f98ee40fSTobias Hieta choices=[t for t in get_tool_names() if not t.endswith("-")], 33*f98ee40fSTobias Hieta nargs="?", 34*f98ee40fSTobias Hieta help="name of subtool", 35*f98ee40fSTobias Hieta ) 361364750dSJames Henderson parser.add_argument( 37*f98ee40fSTobias Hieta "subtool_options", 38*f98ee40fSTobias Hieta metavar="subtool-options", 39*f98ee40fSTobias Hieta nargs="*", 40*f98ee40fSTobias Hieta help="subtool specific options", 41*f98ee40fSTobias Hieta ) 421364750dSJames Henderson 431364750dSJames Henderson def handle_options(self, defaults): 441364750dSJames Henderson if not self.context.options.subtool: 45*f98ee40fSTobias Hieta raise Error( 46*f98ee40fSTobias Hieta "<d>no subtool specified</>\n\n{}\n".format(self.parser.format_help()) 47*f98ee40fSTobias Hieta ) 481364750dSJames Henderson 491364750dSJames Henderson def go(self) -> ReturnCode: 501364750dSJames Henderson # This fn is never called because not specifying a subtool raises an 511364750dSJames Henderson # exception. 521364750dSJames Henderson return ReturnCode._ERROR 53