예제 #1
0
def parse_install_export(tokens, breakstack):
  """
  ::

    install(EXPORT <export-name> DESTINATION <dir>
            [NAMESPACE <namespace>] [[FILE <name>.cmake]|
            [PERMISSIONS permissions...]
            [CONFIGURATIONS [Debug|Release|...]]
            [EXPORT_LINK_INTERFACE_LIBRARIES]
            [COMPONENT <component>]
            [EXCLUDE_FROM_ALL])

  :see: https://cmake.org/cmake/help/v3.14/command/install.html#installing-exports
  """
  return parse_standard(
      tokens,
      npargs='*',
      kwargs={
          "EXPORT": PositionalParser(1),
          "DESTINATION": PositionalParser(1),
          "NAMESPACE": PositionalParser(1),
          "FILE": PositionalParser(1),
          "PERMISSIONS": PositionalParser('+'),
          "CONFIGURATIONS": PositionalParser('+'),
          "COMPONENT": PositionalParser(1),
      },
      flags=[
          "EXCLUDE_FROM_ALL"
      ],
      breakstack=breakstack)
예제 #2
0
def parse_external_project_add_step(tokens, breakstack):
    """
  ::

    ExternalProject_Add_Step(<name> [<option>...])

  :see: https://cmake.org/cmake/help/v3.14/module/ExternalProject.html#command:externalproject_add_step
  """
    return parse_standard(tokens,
                          npargs=2,
                          kwargs={
                              "COMMAND": parse_shell_command,
                              "COMMENT": PositionalParser('+'),
                              "DEPENDEES": PositionalParser('+'),
                              "DEPENDERS": PositionalParser('+'),
                              "DEPENDS": PositionalParser('+'),
                              "BYPRODUCTS": PositionalParser('+'),
                              "ALWAYS": PositionalParser(1),
                              "EXCLUDE_FROM_MAIN": PositionalParser(1),
                              "WORKING_DIRECTORY": PositionalParser(1),
                              "LOG": PositionalParser(1),
                              "USES_TERMINAL": PositionalParser(1),
                          },
                          flags=[],
                          breakstack=breakstack)
예제 #3
0
def parse_install_files(tokens, breakstack):
  """
  ::
    install(<FILES|PROGRAMS> files...
            TYPE <type> | DESTINATION <dir>
            [PERMISSIONS permissions...]
            [CONFIGURATIONS [Debug|Release|...]]
            [COMPONENT <component>]
            [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])

  :see: https://cmake.org/cmake/help/v3.14/command/install.html#files
  """
  return parse_standard(
      tokens,
      npargs='*',
      kwargs={
          "FILES": PositionalParser('+'),
          "PROGRAMS": PositionalParser('+'),
          "TYPE": PositionalParser(1),
          "DESTINATION": PositionalParser(1),
          "PERMISSIONS": PositionalParser('+'),
          "CONFIGURATIONS": PositionalParser('+'),
          "COMPONENT": PositionalParser(1),
          "RENAME": PositionalParser(1),
      },
      flags=[
          "OPTIONAL",
          "EXCLUDE_FROM_ALL",
      ],
      breakstack=breakstack)
예제 #4
0
def parse_install_targets(tokens, breakstack):
  """
  ::

    install(TARGETS targets... [EXPORT <export-name>]
            [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
              PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
             [DESTINATION <dir>]
             [PERMISSIONS permissions...]
             [CONFIGURATIONS [Debug|Release|...]]
             [COMPONENT <component>]
             [NAMELINK_COMPONENT <component>]
             [OPTIONAL] [EXCLUDE_FROM_ALL]
             [NAMELINK_ONLY|NAMELINK_SKIP]
            ] [...]
            [INCLUDES DESTINATION [<dir> ...]]
            )

  :see: https://cmake.org/cmake/help/v3.14/command/install.html#targets
  """
  kwargs = {
      "TARGETS": PositionalParser('+'),
      "EXPORT": PositionalParser(1),
      "INCLUDES": PositionalParser('+', flags=["DESTINATION"])
  }
  for subkey in ("ARCHIVE", "LIBRARY", "RUNTIME", "OBJECTS", "FRAMEWORK",
                 "BUNDLE", "PRIVATE_HEADER", "PUBLIC_HEADER", "RESOURCE"):
    kwargs[subkey] = parse_install_targets_sub

  return parse_standard(
      tokens,
      npargs='*',
      kwargs=kwargs,
      flags=[],
      breakstack=breakstack)
예제 #5
0
def parse_file_lock(tokens, breakstack):
    """
  ::

    file(LOCK <path> [DIRECTORY] [RELEASE]
         [GUARD <FUNCTION|FILE|PROCESS>]
         [RESULT_VARIABLE <variable>]
         [TIMEOUT <seconds>])

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#locking
  """

    return parse_standard(tokens,
                          npargs='+',
                          kwargs={
                              "GUARD":
                              PositionalParser(
                                  1, flags=["FUNCTION", "FILE", "PROCESS"]),
                              "RESULT_VARIABLE":
                              PositionalParser(1),
                              "TIMEOUT":
                              PositionalParser(1)
                          },
                          flags=[
                              "LOCK",
                              "DIRECTORY",
                              "RELEASE",
                          ],
                          breakstack=breakstack)
예제 #6
0
def parse_add_custom_command_events(tokens, breakstack):
  """
  ::
    add_custom_command(TARGET <target>
                    PRE_BUILD | PRE_LINK | POST_BUILD
                    COMMAND command1 [ARGS] [args1...]
                    [COMMAND command2 [ARGS] [args2...] ...]
                    [BYPRODUCTS [files...]]
                    [WORKING_DIRECTORY dir]
                    [COMMENT comment]
                    [VERBATIM] [USES_TERMINAL]
                    [COMMAND_EXPAND_LISTS])
  :see: https://cmake.org/cmake/help/latest/command/add_custom_command.html
  """
  return parse_standard(
      tokens,
      npargs='*',
      kwargs={
          "BYPRODUCTS": PositionalParser('*'),
          "COMMAND": parse_shell_command,
          "COMMENT": PositionalParser('*'),
          "TARGET": PositionalParser(1),
          "WORKING_DIRECTORY": PositionalParser(1)
      },
      flags=[
          "APPEND", "VERBATIM", "USES_TERMINAL", "COMMAND_EXPAND_LISTS",
          "PRE_BUILD", "PRE_LINK", "POST_BUILD"],
      breakstack=breakstack)
예제 #7
0
파일: file.py 프로젝트: xhochy/cmake_format
def parse_file_xfer(tokens, breakstack):
  """
  ::

    file(DOWNLOAD <url> <file> [<options>...])
    file(UPLOAD   <file> <url> [<options>...])

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#transfer
  """

  return parse_standard(
      tokens,
      npargs=3,
      kwargs={
          "INACTIVITY_TIMEOUT": PositionalParser(1),
          "LOG": PositionalParser(1),
          "STATUS": PositionalParser(1),
          "TIMEOUT": PositionalParser(1),
          "USERPWD": PositionalParser(1),
          "HTTPHEADER": PositionalParser(1),
          "NETRC": PositionalParser(
              1, flags=["CMAKE_NETRC", "IGNORED", "OPTIONAL", "REQUIRED"]),
          "NETRC_FILE": PositionalParser(1),
          "EXPECTED_HASH": PositionalParser(1),
          "EXPECTED_MD5": PositionalParser(1),
          "TLS_VERIFY": PositionalParser(1),
          "TLS_CAINFO": PositionalParser(1),
      },
      flags=[
          "DOWNLOAD",
          "UPLOAD",
          "SHOW_PROGRESS",

      ],
      breakstack=breakstack)
예제 #8
0
파일: file.py 프로젝트: xhochy/cmake_format
def parse_file_strings(tokens, breakstack):
  """
  ::

    file(STRINGS <filename> <variable> [<options>...])

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#read
  """

  return parse_standard(
      tokens,
      npargs='*',
      kwargs={
          "LENGTH_MAXIMUM": PositionalParser(1),
          "LENGTH_MINIMUM": PositionalParser(1),
          "LIMIT_COUNT": PositionalParser(1),
          "LIMIT_INPUT": PositionalParser(1),
          "LIMIT_OUTPUT": PositionalParser(1),
          "REGEX": PositionalParser(1),
          "ENCODING": PositionalParser(1, flags=[
              "UTF-8", "UTF-16LE", "UTF-16BE", "UTF-32LE", "UTF-32BE"
          ]),
      },
      flags=[
          "STRINGS",
          "NEWLINE_CONSUME",
          "NO_HEX_CONVERSION",

      ],
      breakstack=breakstack)
예제 #9
0
파일: file.py 프로젝트: xhochy/cmake_format
def parse_file_glob(tokens, breakstack):
  """
  ::

    file(GLOB <variable>
        [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
        [<globbing-expressions>...])
    file(GLOB_RECURSE <variable> [FOLLOW_SYMLINKS]
        [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
        [<globbing-expressions>...])
  :see: https://cmake.org/cmake/help/v3.14/command/file.html#filesystem
  """

  return parse_standard(
      tokens,
      npargs='+',
      kwargs={
          "LIST_DIRECTORIES": PositionalParser(1),
          "RELATIVE": PositionalParser(1)
      },
      flags=[
          "GLOB",
          "GLOB_RECURSE",
          "CONFIGURE_DEPENDS",
          "FOLLOW_SYMLINKS"],
      breakstack=breakstack)
예제 #10
0
def parse_add_custom_command(tokens, breakstack):
    """
  ::

    add_custom_command(OUTPUT output1 [output2 ...]
                       COMMAND command1 [ARGS] [args1...]
                       [COMMAND command2 [ARGS] [args2...] ...]
                       [MAIN_DEPENDENCY depend]
                       [DEPENDS [depends...]]
                       [IMPLICIT_DEPENDS <lang1> depend1
                                        [<lang2> depend2] ...]
                       [WORKING_DIRECTORY dir]
                       [COMMENT comment] [VERBATIM] [APPEND])

  :see: https://cmake.org/cmake/help/v3.0/command/add_custom_command.html
  """
    return parse_standard(
        tokens,
        npargs='*',
        kwargs={
            "COMMAND": parser.parse_shell_command,
            "COMMENT": parser.PositionalParser('*'),
            "DEPENDS": parser.PositionalParser('*'),
            "IMPLICIT_DEPENDS": parser.PositionalTupleParser('+', 2),
            "MAIN_DEPENDENCY": parser.PositionalParser(1),
            "OUTPUT": parser.PositionalParser('+'),
            "WORKING_DIRECTORY": parser.PositionalParser(1)
        },
        flags=["APPEND", "VERBATIM", "PRE_BUILD", "PRE_LINK", "POST_BUILD"],
        breakstack=breakstack)
예제 #11
0
def parse_add_library(tokens, breakstack):
    """
  ``add_library()`` has several forms:

  * normal libraires
  * imported libraries
  * object libraries
  * alias libraries
  * interface libraries

  This function is just the dispatcher

  :see: https://cmake.org/cmake/help/latest/command/add_library.html
  """

    semantic_iter = iter_semantic_tokens(tokens)
    # NOTE(josh): first token is always the name of the library
    _ = next(semantic_iter, None)
    # Second token is usually the descriminator, except for INTERFACE
    second_token = next(semantic_iter, None)

    if second_token is None:
        # All add_library() commands should have at least two arguments
        logger.warning("Invalid add_library() command at %s",
                       tokens[0].get_location())
        return parse_standard(tokens,
                              npargs='*',
                              kwargs={},
                              flags=[],
                              breakstack=breakstack)

    descriminator = second_token.spelling.upper()
    parsemap = {
        "OBJECT": parse_add_library_object,
        "ALIAS": parse_add_library_alias,
        "INTERFACE": parse_add_library_interface,
        "IMPORTED": parse_add_library_imported
    }
    if descriminator in parsemap:
        return parsemap[descriminator](tokens, breakstack)

    third_token = next(semantic_iter, None)
    if third_token is not None:
        descriminator = third_token.spelling.upper()
        if descriminator == "IMPORTED":
            return parse_add_library_imported(tokens, breakstack)

    # If the descriminator token might be a variable dereference, then it
    # might be hiding the descriminator... so we shouldn't infer
    # sortability unless it is a word that doesn't match any of the descriminator
    # flags
    sortable = True
    if "${" in second_token.spelling or "${" in third_token.spelling:
        sortable = False
    return parse_add_library_standard(tokens, breakstack, sortable)
예제 #12
0
def parse_add_executable_alias(tokens, breakstack):
  """
  ::
    add_executable(<name> ALIAS <target>)

    :see: https://cmake.org/cmake/help/latest/command/add_executable.html
  """
  return parse_standard(
      tokens, npargs=3,
      kwargs={},
      flags=["ALIAS"],
      breakstack=breakstack)
예제 #13
0
def parse_add_library_alias(tokens, breakstack):
    """
  ::
    add_library(<name> ALIAS <target>)

    :see: https://cmake.org/cmake/help/latest/command/add_library.html#alias-libraries
  """
    return parse_standard(tokens,
                          npargs=3,
                          kwargs={},
                          flags=["ALIAS"],
                          breakstack=breakstack)
예제 #14
0
def parse_add_library_interface(tokens, breakstack):
    """
  ::
    add_library(<name> INTERFACE [IMPORTED [GLOBAL]])

    :see: https://cmake.org/cmake/help/latest/command/add_library.html#interface-libraries
  """
    return parse_standard(tokens,
                          npargs='+',
                          kwargs={},
                          flags=["INTERFACE", "IMPORTED", "GLOBAL"],
                          breakstack=breakstack)
예제 #15
0
def parse_install(tokens, breakstack):
  """
  The ``install()`` command has multiple different forms, implemented
  by different functions. The forms are indicated by the first token
  and are:

  * TARGETS
  * FILES
  * DIRECTORY
  * SCRIPT
  * CODE
  * EXPORT

  :see: https://cmake.org/cmake/help/v3.0/command/install.html
  """

  descriminator_token = get_first_semantic_token(tokens)
  if descriminator_token is None:
    logger.warning("Invalid install() command at %s", tokens[0].get_location())
    return parse_standard(tokens, npargs='*', kwargs={}, flags=[],
                          breakstack=breakstack)

  descriminator = descriminator_token.spelling.upper()
  parsemap = {
      "TARGETS": parse_install_targets,
      "FILES": parse_install_files,
      "PROGRAMS": parse_install_files,
      "DIRECTORY": parse_install_directory,
      "SCRIPT": parse_install_script,
      "CODE": parse_install_script,
      "EXPORT": parse_install_export
  }
  if descriminator not in parsemap:
    logger.warning("Invalid install form \"%s\" at %s", descriminator,
                   tokens[0].location())
    return parse_standard(tokens, npargs='*', kwargs={}, flags=[],
                          breakstack=breakstack)

  return parsemap[descriminator](tokens, breakstack)
예제 #16
0
def parse_add_executable_imported(tokens, breakstack):
  """
  ::

    add_executable(<name> IMPORTED [GLOBAL])

  :see: https://cmake.org/cmake/help/latest/command/add_executable.html
  """
  return parse_standard(
      tokens, npargs='+',
      kwargs={},
      flags=["IMPORTED", "GLOBAL"],
      breakstack=breakstack)
예제 #17
0
def parse_foreach_range(tokens, breakstack):
    """
  ::

    foreach(<loop_var> RANGE <start> <stop> [<step>])
      <commands>
    endforeach()
  """

    return parse_standard(tokens,
                          npargs=1,
                          kwargs={"RANGE": PositionalParser(3)},
                          flags=[],
                          breakstack=breakstack)
예제 #18
0
def parse_file_timestamp(tokens, breakstack):
    """
  ::

    file(TIMESTAMP <filename> <variable> [<format>] [UTC])

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#strings
  """

    return parse_standard(tokens,
                          npargs='+',
                          kwargs={},
                          flags=["TIMESTAMP", "UTC"],
                          breakstack=breakstack)
예제 #19
0
def parse_file_hash(tokens, breakstack):
    """
  ::

    file(<HASH> <filename> <variable>)

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#strings
  """

    return parse_standard(tokens,
                          npargs=3,
                          kwargs={},
                          flags=HASH_STRINGS,
                          breakstack=breakstack)
예제 #20
0
def parse_add_library_imported(tokens, breakstack):
    """
  ::
    add_library(<name> <SHARED|STATIC|MODULE|OBJECT|UNKNOWN> IMPORTED
                [GLOBAL])

    :see: https://cmake.org/cmake/help/latest/command/add_library.html
  """
    return parse_standard(tokens,
                          npargs='+',
                          kwargs={},
                          flags=[
                              "SHARED", "STATIC", "MODULE", "OBJECT", "UNKOWN",
                              "IMPORTED", "GLOBAL"
                          ],
                          breakstack=breakstack)
예제 #21
0
def parse_set_target_properties(tokens, breakstack):
  """
  ::
    set_target_properties(target1 target2 ...
                        PROPERTIES prop1 value1
                        prop2 value2 ...)
  """

  return parse_standard(
      tokens,
      npargs='+',
      kwargs={
          "PROPERTIES": PositionalTupleParser(2, '+', [])
      },
      flags=[],
      breakstack=breakstack)
예제 #22
0
def parse_file_copy(tokens, breakstack):
    """
  ::

    file(<COPY|INSTALL> <files>... DESTINATION <dir>
         [FILE_PERMISSIONS <permissions>...]
         [DIRECTORY_PERMISSIONS <permissions>...]
         [NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS]
         [FILES_MATCHING]
         [[PATTERN <pattern> | REGEX <regex>]
          [EXCLUDE] [PERMISSIONS <permissions>...]] [...])

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#filesystem
  """

    return parse_standard(
        tokens,
        npargs='*',
        kwargs={
            "COPY":
            PositionalParser('*'),
            "DESTINATION":
            PositionalParser(1),
            "FILE_PERMISSIONS":
            PositionalParser('+',
                             flags=[
                                 "OWNER_READ", "OWNER_WRITE", "OWNER_EXECUTE",
                                 "GROUP_READ", "GROUP_WRITE", "GROUP_EXECUTE",
                                 "WORLD_READ", "WORLD_WRITE", "WORLD_EXECUTE",
                                 "SETUID", "SETGID"
                             ]),
            "DIRECTORY_PERMISSIONS":
            PositionalParser('+'),
            "PATTERN":
            parse_pattern,
            "REGEX":
            parse_pattern,
        },
        flags=[
            "INSTALL",
            "NO_SOURCE_PERMISSIONS",
            "USE_SOURCE_PERMISSIONS",
            "FILES_MATCHING",
        ],
        breakstack=breakstack)
예제 #23
0
def parse_file_read(tokens, breakstack):
    """
  ::

    file(READ <filename> <variable>
         [OFFSET <offset>] [LIMIT <max-in>] [HEX])

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#read
  """

    return parse_standard(tokens,
                          npargs='*',
                          kwargs={
                              "OFFSET": PositionalParser(1),
                              "LIMIT": PositionalParser(1),
                          },
                          flags=["READ", "HEX"],
                          breakstack=breakstack)
예제 #24
0
def parse_fetchcontent_getproperties(tokens, breakstack):
    """
  ::

    FetchContent_GetProperties( <name>
      [SOURCE_DIR <srcDirVar>]
      [BINARY_DIR <binDirVar>]
      [POPULATED <doneVar>]
    )
  """
    return parse_standard(tokens,
                          npargs=1,
                          kwargs={
                              "SOURCE_DIR": PositionalParser(1),
                              "BINARY_DIR": PositionalParser(1),
                              "POPULATED": PositionalParser(1),
                          },
                          flags=[],
                          breakstack=breakstack)
예제 #25
0
def parse_file_create_link(tokens, breakstack):
    """
  ::

    file(CREATE_LINK <original> <linkname>
        [RESULT <result>] [COPY_ON_ERROR] [SYMBOLIC])

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#filesystem
  """

    return parse_standard(tokens,
                          npargs='+',
                          kwargs={
                              "RESULT": PositionalParser(1),
                          },
                          flags=[
                              "COPY_ON_ERROR",
                              "SYMBOLIC",
                          ],
                          breakstack=breakstack)
예제 #26
0
def parse_file_generate_output(tokens, breakstack):
    """
  ::

    file(GENERATE OUTPUT output-file
        <INPUT input-file|CONTENT content>
        [CONDITION expression])

  :see: https://cmake.org/cmake/help/v3.14/command/file.html#writing
  """

    return parse_standard(tokens,
                          npargs=1,
                          kwargs={
                              "OUTPUT": PositionalParser(1),
                              "INPUT": PositionalParser(1),
                              "CONTENT": PositionalParser('+'),
                              "CONDITION": parse_conditional,
                          },
                          flags=["GENERATE"],
                          breakstack=breakstack)
예제 #27
0
def parse_install_script(tokens, breakstack):
  """
  ::

    install([[SCRIPT <file>] [CODE <code>]]
            [COMPONENT <component>] [EXCLUDE_FROM_ALL] [...])

  :see: https://cmake.org/cmake/help/v3.14/command/install.html#custom-installation-logic
  """
  return parse_standard(
      tokens,
      npargs='*',
      kwargs={
          "SCRIPT": PositionalParser(1),
          "CODE": PositionalParser(1),
          "COMPONENT": PositionalParser(1),
      },
      flags=[
          "EXCLUDE_FROM_ALL"
      ],
      breakstack=breakstack)
예제 #28
0
def parse_install_directory(tokens, breakstack):
  """
  ::

    install(DIRECTORY dirs...
            TYPE <type> | DESTINATION <dir>
            [FILE_PERMISSIONS permissions...]
            [DIRECTORY_PERMISSIONS permissions...]
            [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
            [CONFIGURATIONS [Debug|Release|...]]
            [COMPONENT <component>] [EXCLUDE_FROM_ALL]
            [FILES_MATCHING]
            [[PATTERN <pattern> | REGEX <regex>]
             [EXCLUDE] [PERMISSIONS permissions...]] [...])

  :see: https://cmake.org/cmake/help/v3.14/command/install.html#directory
  """
  return parse_standard(
      tokens,
      npargs='*',
      kwargs={
          "DIRECTORY": PositionalParser('+'),
          "TYPE": PositionalParser(1),
          "DESTINATION": PositionalParser(1),
          "FILE_PERMISSIONS": PositionalParser('+'),
          "DIRECTORY_PERMISSIONS": PositionalParser('+'),
          "CONFIGURATIONS": PositionalParser('+'),
          "COMPONENT": PositionalParser(1),
          "RENAME": PositionalParser(1),
          "PATTERN": parse_pattern,
          "REGEX": parse_pattern,
      },
      flags=[
          "USER_SOURCE_PERMISSIONS",
          "OPTIONAL",
          "MESSAGE_NEVER",
          "FILES_MATCHING",
      ],
      breakstack=breakstack)
예제 #29
0
def parse_foreach(tokens, breakstack):
    """
  ``parse_foreach()`` has a couple of forms:

  * the usual form
  * range form
  * in (lists/items) form

  This function is just the dispatcher

  :see: https://cmake.org/cmake/help/latest/command/foreach.html
  """

    semantic_iter = iter_semantic_tokens(tokens)
    # first token is always the loop variable
    _ = next(semantic_iter, None)
    # Second token is usually the descriminator
    second_token = next(semantic_iter, None)

    if second_token is None:
        # All foreach() statements should have at least two arguments
        logger.warning("Invalid foreach() statement at %s",
                       tokens[0].get_location())
        return parse_standard(tokens,
                              npargs='*',
                              kwargs={},
                              flags=[],
                              breakstack=breakstack)

    descriminator = second_token.spelling.upper()
    dispatchee = {
        "RANGE": parse_foreach_range,
        "IN": parse_foreach_in
    }.get(descriminator, None)
    if dispatchee is not None:
        return dispatchee(tokens, breakstack)

    return parse_foreach_standard(tokens, breakstack)
예제 #30
0
def parse_add_custom_command_standard(tokens, breakstack):
  """
  ::

      add_custom_command(OUTPUT output1 [output2 ...]
                         COMMAND command1 [ARGS] [args1...]
                         [COMMAND command2 [ARGS] [args2...] ...]
                         [MAIN_DEPENDENCY depend]
                         [DEPENDS [depends...]]
                         [BYPRODUCTS [files...]]
                         [IMPLICIT_DEPENDS <lang1> depend1
                                          [<lang2> depend2] ...]
                         [WORKING_DIRECTORY dir]
                         [COMMENT comment]
                         [DEPFILE depfile]
                         [JOB_POOL job_pool]
                         [VERBATIM] [APPEND] [USES_TERMINAL]
                         [COMMAND_EXPAND_LISTS])

  :see: https://cmake.org/cmake/help/latest/command/add_custom_command.html
  """
  return parse_standard(
      tokens,
      npargs='*',
      kwargs={
          "BYPRODUCTS": PositionalParser('*'),
          "COMMAND": parse_shell_command,
          "COMMENT": PositionalParser('*'),
          "DEPENDS": PositionalParser('*'),
          "DEPFILE": PositionalParser(1),
          "JOB_POOL": PositionalParser(1),
          "IMPLICIT_DEPENDS": PositionalTupleParser(2, '+'),
          "MAIN_DEPENDENCY": PositionalParser(1),
          "OUTPUT": PositionalParser('+'),
          "WORKING_DIRECTORY": PositionalParser(1)
      },
      flags=["APPEND", "VERBATIM", "USES_TERMINAL", "COMMAND_EXPAND_LISTS"],
      breakstack=breakstack)