from __future__ import absolute_import # System modules import argparse import sys import os import textwrap # LLDB modules from . import configuration def create_parser(): parser = argparse.ArgumentParser( description='description', prefix_chars='+-', add_help=False) group = None # Helper function for boolean options (group will point to the current # group when executing X) X = lambda optstr, helpstr, **kwargs: group.add_argument( optstr, help=helpstr, action='store_true', **kwargs) group = parser.add_argument_group('Help') group.add_argument( '-h', '--help', dest='h', action='store_true', help="Print this help message and exit. Add '-v' for more detailed help.") # C and Python toolchain options group = parser.add_argument_group('Toolchain options') group.add_argument( '-A', '--arch', metavar='arch', dest='arch', help=textwrap.dedent('''Specify the architecture(s) to test. This option can be specified more than once''')) group.add_argument('-C', '--compiler', metavar='compiler', dest='compiler', help=textwrap.dedent( '''Specify the compiler(s) used to build the inferior executables. The compiler path can be an executable basename or a full path to a compiler executable. This option can be specified multiple times.''')) if sys.platform == 'darwin': group.add_argument('--apple-sdk', metavar='apple_sdk', dest='apple_sdk', default="", help=textwrap.dedent( '''Specify the name of the Apple SDK (macosx, macosx.internal, iphoneos, iphoneos.internal, or path to SDK) and use the appropriate tools from that SDK's toolchain.''')) # FIXME? This won't work for different extra flags according to each arch. group.add_argument( '-E', metavar='extra-flags', help=textwrap.dedent('''Specify the extra flags to be passed to the toolchain when building the inferior programs to be debugged suggestions: do not lump the "-A arch1 -A arch2" together such that the -E option applies to only one of the architectures''')) group.add_argument('--dsymutil', metavar='dsymutil', dest='dsymutil', help=textwrap.dedent('Specify which dsymutil to use.')) group.add_argument('--yaml2obj', metavar='yaml2obj', dest='yaml2obj', help=textwrap.dedent('Specify which yaml2obj binary to use.')) group.add_argument('--filecheck', metavar='filecheck', dest='filecheck', help=textwrap.dedent('Specify which FileCheck binary to use.')) # Test filtering options group = parser.add_argument_group('Test filtering options') group.add_argument( '-f', metavar='filterspec', action='append', help=('Specify a filter, which looks like "TestModule.TestClass.test_name". '+ 'You may also use shortened filters, such as '+ '"TestModule.TestClass", "TestClass.test_name", or just "test_name".')) group.add_argument( '-p', metavar='pattern', help='Specify a regexp filename pattern for inclusion in the test suite') group.add_argument('--excluded', metavar='exclusion-file', action='append', help=textwrap.dedent( '''Specify a file for tests to exclude. File should contain lists of regular expressions for test files or methods, with each list under a matching header (xfail files, xfail methods, skip files, skip methods)''')) group.add_argument( '-G', '--category', metavar='category', action='append', dest='categories_list', help=textwrap.dedent('''Specify categories of test cases of interest. Can be specified more than once.''')) group.add_argument( '--skip-category', metavar='category', action='append', dest='skip_categories', help=textwrap.dedent('''Specify categories of test cases to skip. Takes precedence over -G. Can be specified more than once.''')) group.add_argument( '--xfail-category', metavar='category', action='append', dest='xfail_categories', help=textwrap.dedent('''Specify categories of test cases that are expected to fail. Can be specified more than once.''')) # Configuration options group = parser.add_argument_group('Configuration options') group.add_argument( '--framework', metavar='framework-path', help='The path to LLDB.framework') group.add_argument( '--executable', metavar='executable-path', help='The path to the lldb executable') group.add_argument( '--server', metavar='server-path', help='The path to the debug server executable to use') group.add_argument( '--out-of-tree-debugserver', dest='out_of_tree_debugserver', action='store_true', help='A flag to indicate an out-of-tree debug server is being used') group.add_argument( '--dwarf-version', metavar='dwarf_version', dest='dwarf_version', type=int, help='Override the DWARF version.') group.add_argument( '--setting', metavar='SETTING=VALUE', dest='settings', type=str, nargs=1, action='append', help='Run "setting set SETTING VALUE" before executing any test.') group.add_argument( '-y', type=int, metavar='count', help="Specify the iteration count used to collect our benchmarks. An example is the number of times to do 'thread step-over' to measure stepping speed.") group.add_argument( '-#', type=int, metavar='sharp', dest='sharp', help='Repeat the test suite for a specified number of times') group.add_argument('--channel', metavar='channel', dest='channels', action='append', help=textwrap.dedent( "Specify the log channels (and optional categories) e.g. 'lldb all' or 'gdb-remote packets' if no categories are specified, 'default' is used")) group.add_argument( '--log-success', dest='log_success', action='store_true', help="Leave logs/traces even for successful test runs (useful for creating reference log files during debugging.)") group.add_argument( '--codesign-identity', metavar='Codesigning identity', default='lldb_codesign', help='The codesigning identity to use') group.add_argument( '--build-dir', dest='test_build_dir', metavar='Test build directory', default='lldb-test-build.noindex', help='The root build directory for the tests. It will be removed before running.') group.add_argument( '--lldb-module-cache-dir', dest='lldb_module_cache_dir', metavar='The clang module cache directory used by LLDB', help='The clang module cache directory used by LLDB. Defaults to /module-cache-lldb.') group.add_argument( '--clang-module-cache-dir', dest='clang_module_cache_dir', metavar='The clang module cache directory used by Clang', help='The clang module cache directory used in the Make files by Clang while building tests. Defaults to /module-cache-clang.') group.add_argument( '--lldb-libs-dir', dest='lldb_libs_dir', metavar='path', help='The path to LLDB library directory (containing liblldb)') group.add_argument( '--enable-plugin', dest='enabled_plugins', action='append', type=str, metavar='A plugin whose tests will be enabled', help='A plugin whose tests will be enabled. The only currently supported plugin is intel-pt.') # Configuration options group = parser.add_argument_group('Remote platform options') group.add_argument( '--platform-name', dest='lldb_platform_name', metavar='platform-name', help='The name of a remote platform to use') group.add_argument( '--platform-url', dest='lldb_platform_url', metavar='platform-url', help='A LLDB platform URL to use when connecting to a remote platform to run the test suite') group.add_argument( '--platform-working-dir', dest='lldb_platform_working_dir', metavar='platform-working-dir', help='The directory to use on the remote platform.') # Reproducer options group = parser.add_argument_group('Reproducer options') group.add_argument( '--capture-path', metavar='reproducer path', help='The reproducer capture path') group.add_argument( '--replay-path', metavar='reproducer path', help='The reproducer replay path') # Test-suite behaviour group = parser.add_argument_group('Runtime behaviour options') X('-d', 'Suspend the process after launch to wait indefinitely for a debugger to attach') X('-t', 'Turn on tracing of lldb command and other detailed test executions') group.add_argument( '-u', dest='unset_env_varnames', metavar='variable', action='append', help='Specify an environment variable to unset before running the test cases. e.g., -u DYLD_INSERT_LIBRARIES -u MallocScribble') group.add_argument( '--env', dest='set_env_vars', metavar='variable', action='append', help='Specify an environment variable to set to the given value before running the test cases e.g.: --env CXXFLAGS=-O3 --env DYLD_INSERT_LIBRARIES') group.add_argument( '--inferior-env', dest='set_inferior_env_vars', metavar='variable', action='append', help='Specify an environment variable to set to the given value for the inferior.') X('-v', 'Do verbose mode of unittest framework (print out each test case invocation)') group.add_argument( '--enable-crash-dialog', dest='disable_crash_dialog', action='store_false', help='(Windows only) When LLDB crashes, display the Windows crash dialog.') group.set_defaults(disable_crash_dialog=True) # Remove the reference to our helper function del X group = parser.add_argument_group('Test directories') group.add_argument( 'args', metavar='test-dir', nargs='*', help='Specify a list of directory names to search for test modules named after Test*.py (test discovery). If empty, search from the current working directory instead.') return parser