From 55bb9d40e722cadd17b6c0b3adabbd3cf7a4b655 Mon Sep 17 00:00:00 2001
From: Pascal Palenda <pascal.palenda@akustik.rwth-aachen.de>
Date: Mon, 13 Feb 2023 14:22:26 +0100
Subject: [PATCH] Add cmake format definition and format

---
 .cmake-format  | 386 +++++++++++++++++++++++++++++++++++++++++++++++++
 CMakeLists.txt |   4 +-
 Index.cmake    |   4 +-
 3 files changed, 390 insertions(+), 4 deletions(-)
 create mode 100644 .cmake-format

diff --git a/.cmake-format b/.cmake-format
new file mode 100644
index 0000000..5312b23
--- /dev/null
+++ b/.cmake-format
@@ -0,0 +1,386 @@
+# ----------------------------------
+# Options affecting listfile parsing
+# ----------------------------------
+with section("parse"):
+
+  # Specify structure for custom cmake functions
+  additional_commands = {
+    'cpmaddpackage' : { 
+      'pargs' : { 
+        'nargs' : '*',
+        'flags' : [] 
+      },
+    'spelling': 'CPMAddPackage',
+    'kwargs': {
+      'NAME' : 1,
+      'FORCE' : 1,
+      'VERSION' : 1,
+      'GIT_TAG' : 1,
+      'DOWNLOAD_ONLY' : 1,
+      'GITHUB_REPOSITORY' : 1,
+      'GITLAB_REPOSITORY' : 1,
+      'GIT_REPOSITORY' : 1,
+      'SVN_REPOSITORY' : 1,
+      'SVN_REVISION' : 1,
+      'SOURCE_DIR' : 1,
+      'DOWNLOAD_COMMAND' : 1,
+      'FIND_PACKAGE_ARGUMENTS' : 1,
+      'NO_CACHE' : 1,
+      'GIT_SHALLOW' : 1,
+      'URL' : 1,
+      'URL_HASH' : 1,
+      'URL_MD5' : 1,
+      'DOWNLOAD_NAME' : 1,
+      'DOWNLOAD_NO_EXTRACT' : 1,
+      'HTTP_USERNAME' : 1,
+      'HTTP_PASSWORD' : 1,
+      'EXCLUDE_FROM_ALL' : 1,
+      'SOURCE_SUBDIR' : 1,
+      'OPTIONS' : '+'
+      }
+    },
+    'cpmfindpackage': {
+      'pargs': {
+        'nargs': '*',
+        'flags': []
+      },
+      'spelling': 'CPMFindPackage',
+      'kwargs': {
+        'NAME' : 1,
+        'FORCE' : 1,
+        'VERSION' : 1,
+        'GIT_TAG' : 1,
+        'DOWNLOAD_ONLY' : 1,
+        'GITHUB_REPOSITORY' : 1,
+        'GITLAB_REPOSITORY' : 1,
+        'GIT_REPOSITORY' : 1,
+        'SVN_REPOSITORY' : 1,
+        'SVN_REVISION' : 1,
+        'SOURCE_DIR' : 1,
+        'DOWNLOAD_COMMAND' : 1,
+        'FIND_PACKAGE_ARGUMENTS' : 1,
+        'NO_CACHE' : 1,
+        'GIT_SHALLOW' : 1,
+        'URL' : 1,
+        'URL_HASH' : 1,
+        'URL_MD5' : 1,
+        'DOWNLOAD_NAME' : 1,
+        'DOWNLOAD_NO_EXTRACT' : 1,
+        'HTTP_USERNAME' : 1,
+        'HTTP_PASSWORD' : 1,
+        'EXCLUDE_FROM_ALL' : 1,
+        'SOURCE_SUBDIR' : 1,
+        'OPTIONS' : '+'
+      }
+    },
+    'cpmdeclarepackage': {
+      'pargs': {
+        'nargs': '*',
+        'flags': []
+      },
+      'spelling': 'CPMDeclarePackage',
+      'kwargs': {
+        'NAME' : 1,
+        'FORCE' : 1,
+        'VERSION' : 1,
+        'GIT_TAG' : 1,
+        'DOWNLOAD_ONLY' : 1,
+        'GITHUB_REPOSITORY' : 1,
+        'GITLAB_REPOSITORY' : 1,
+        'GIT_REPOSITORY' : 1,
+        'SVN_REPOSITORY' : 1,
+        'SVN_REVISION' : 1,
+        'SOURCE_DIR' : 1,
+        'DOWNLOAD_COMMAND' : 1,
+        'FIND_PACKAGE_ARGUMENTS' : 1,
+        'NO_CACHE' : 1,
+        'GIT_SHALLOW' : 1,
+        'URL' : 1,
+        'URL_HASH' : 1,
+        'URL_MD5' : 1,
+        'DOWNLOAD_NAME' : 1,
+        'DOWNLOAD_NO_EXTRACT' : 1,
+        'HTTP_USERNAME' : 1,
+        'HTTP_PASSWORD' : 1,
+        'EXCLUDE_FROM_ALL' : 1,
+        'SOURCE_SUBDIR' : 1,
+        'OPTIONS' : '+'
+      }
+    },
+    'packageproject': {
+      'pargs': {
+        'nargs': '*',
+        'flags': []
+      },
+      'spelling': 'packageProject',
+      'kwargs': {
+        'NAME' : 1,
+        'VERSION' : 1,
+        'INCLUDE_DIR' : 1,
+        'INCLUDE_DESTINATION' : 1,
+        'BINARY_DIR' : 1,
+        'COMPATIBILITY' : 1,
+        'VERSION_HEADER' : 1,
+        'DEPENDENCIES' : '+'
+      }
+    },
+    'cpmusepackagelock': {
+      'pargs': 1,
+      'spelling': 'CPMUsePackageLock'
+    },
+    'cpmregisterpackage': {
+      'pargs': 1,
+      'spelling': 'CPMRegisterPackage'
+    },
+    'cpmgetpackageversion': {
+      'pargs': 2,
+      'spelling': 'CPMGetPackageVersion'
+    },
+    'packageproject': {
+      'pargs': {
+        'nargs': '*',
+        'flags': []
+      },
+      'spelling': 'packageProject',
+      'kwargs':{
+        'NAME' : 1,
+        'VERSION' : 1,
+        'NAMESPACE' : 1,
+        'INCLUDE_DIR' : 1,
+        'INCLUDE_DESTINATION' : 1,
+        'BINARY_DIR' : 1,
+        'COMPATIBILITY' : 1,
+        'VERSION_HEADER' : 1,
+        'EXPORT_HEADER' : 1,
+        'DISABLE_VERSION_SUFFIX' : 1,
+        'DEPENDENCIES' : '+'
+      }
+    },
+    'groupsourcesbyfolder': {
+      'spelling': 'GroupSourcesByFolder'
+    }
+  }
+
+# -----------------------------
+# Options affecting formatting.
+# -----------------------------
+with section("format"):
+
+  # Disable formatting entirely, making cmake-format a no-op
+  disable = False
+
+  # How wide to allow formatted cmake files
+  line_width = 120
+
+  # How many spaces to tab for indent
+  tab_size = 4
+
+  # If true, lines are indented using tab characters (utf-8 0x09) instead of
+  # <tab_size> space characters (utf-8 0x20). In cases where the layout would
+  # require a fractional tab character, the behavior of the  fractional
+  # indentation is governed by <fractional_tab_policy>
+  use_tabchars = True
+
+  # If <use_tabchars> is True, then the value of this variable indicates how
+  # fractional indentions are handled during whitespace replacement. If set to
+  # 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set
+  # to `round-up` fractional indentation is replaced with a single tab character
+  # (utf-8 0x09) effectively shifting the column to the next tabstop
+  fractional_tab_policy = 'use-space'
+
+  # If an argument group contains more than this many sub-groups (parg or kwarg
+  # groups) then force it to a vertical layout.
+  max_subgroups_hwrap = 2
+
+  # If a positional argument group contains more than this many arguments, then
+  # force it to a vertical layout.
+  max_pargs_hwrap = 6
+
+  # If a cmdline positional group consumes more than this many lines without
+  # nesting, then invalidate the layout (and nest)
+  max_rows_cmdline = 2
+
+  # If true, separate flow control names from their parentheses with a space
+  separate_ctrl_name_with_space = True
+
+  # If true, separate function names from parentheses with a space
+  separate_fn_name_with_space = True
+
+  # If a statement is wrapped to more than one line, than dangle the closing
+  # parenthesis on its own line.
+  dangle_parens = True
+
+  # If the trailing parenthesis must be 'dangled' on its on line, then align it
+  # to this reference: `prefix`: the start of the statement,  `prefix-indent`:
+  # the start of the statement, plus one indentation  level, `child`: align to
+  # the column of the arguments
+  dangle_align = 'prefix'
+
+  # If the statement spelling length (including space and parenthesis) is
+  # smaller than this amount, then force reject nested layouts.
+  min_prefix_chars = 4
+
+  # If the statement spelling length (including space and parenthesis) is larger
+  # than the tab width by more than this amount, then force reject un-nested
+  # layouts.
+  max_prefix_chars = 10
+
+  # If a candidate layout is wrapped horizontally but it exceeds this many
+  # lines, then reject the layout.
+  max_lines_hwrap = 2
+
+  # What style line endings to use in the output.
+  line_ending = 'auto'
+
+  # Format command names consistently as 'lower' or 'upper' case
+  command_case = 'canonical'
+
+  # Format keywords consistently as 'lower' or 'upper' case
+  keyword_case = 'upper'
+
+  # A list of command names which should always be wrapped
+  always_wrap = []
+
+  # If true, the argument lists which are known to be sortable will be sorted
+  # lexicographicall
+  enable_sort = True
+
+  # If true, the parsers may infer whether or not an argument list is sortable
+  # (without annotation).
+  autosort = False
+
+  # By default, if cmake-format cannot successfully fit everything into the
+  # desired linewidth it will apply the last, most agressive attempt that it
+  # made. If this flag is True, however, cmake-format will print error, exit
+  # with non-zero status code, and write-out nothing
+  require_valid_layout = False
+
+  # A dictionary mapping layout nodes to a list of wrap decisions. See the
+  # documentation for more information.
+  layout_passes = {}
+
+# ------------------------------------------------
+# Options affecting comment reflow and formatting.
+# ------------------------------------------------
+with section("markup"):
+
+  # What character to use for bulleted lists
+  bullet_char = '*'
+
+  # What character to use as punctuation after numerals in an enumerated list
+  enum_char = '.'
+
+  # If comment markup is enabled, don't reflow the first comment block in each
+  # listfile. Use this to preserve formatting of your copyright/license
+  # statements.
+  first_comment_is_literal = False
+
+  # If comment markup is enabled, don't reflow any comment block which matches
+  # this (regex) pattern. Default is `None` (disabled).
+  literal_comment_pattern = '^\\s*[0-9a-zA-Z_]+\\s*\(.*\)'
+
+  # Regular expression to match preformat fences in comments default=
+  # ``r'^\s*([`~]{3}[`~]*)(.*)$'``
+  fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$'
+
+  # Regular expression to match rulers in comments default=
+  # ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'``
+  ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'
+
+  # If a comment line matches starts with this pattern then it is explicitly a
+  # trailing comment for the preceeding argument. Default is '#<'
+  explicit_trailing_pattern = '#<'
+
+  # If a comment line starts with at least this many consecutive hash
+  # characters, then don't lstrip() them off. This allows for lazy hash rulers
+  # where the first hash char is not separated by space
+  hashruler_min_length = 10
+
+  # If true, then insert a space between the first hash char and remaining hash
+  # chars in a hash ruler, and normalize its length to fill the column
+  canonicalize_hashrulers = True
+
+  # enable comment markup parsing and reflow
+  enable_markup = True
+
+# ----------------------------
+# Options affecting the linter
+# ----------------------------
+with section("lint"):
+
+  # a list of lint codes to disable
+  disabled_codes = []
+
+  # regular expression pattern describing valid function names
+  function_pattern = '[0-9a-z_]+'
+
+  # regular expression pattern describing valid macro names
+  macro_pattern = '[0-9A-Z_]+'
+
+  # regular expression pattern describing valid names for variables with global
+  # (cache) scope
+  global_var_pattern = '[A-Z][0-9A-Z_]+'
+
+  # regular expression pattern describing valid names for variables with global
+  # scope (but internal semantic)
+  internal_var_pattern = '_[A-Z][0-9A-Z_]+'
+
+  # regular expression pattern describing valid names for variables with local
+  # scope
+  local_var_pattern = '[a-z][a-z0-9_]+'
+
+  # regular expression pattern describing valid names for privatedirectory
+  # variables
+  private_var_pattern = '_[0-9a-z_]+'
+
+  # regular expression pattern describing valid names for public directory
+  # variables
+  public_var_pattern = '[A-Z][0-9A-Z_]+'
+
+  # regular expression pattern describing valid names for function/macro
+  # arguments and loop variables.
+  argument_var_pattern = '[a-z][a-z0-9_]+'
+
+  # regular expression pattern describing valid names for keywords used in
+  # functions or macros
+  keyword_pattern = '[A-Z][0-9A-Z_]+'
+
+  # In the heuristic for C0201, how many conditionals to match within a loop in
+  # before considering the loop a parser.
+  max_conditionals_custom_parser = 2
+
+  # Require at least this many newlines between statements
+  min_statement_spacing = 1
+
+  # Require no more than this many newlines between statements
+  max_statement_spacing = 2
+  max_returns = 6
+  max_branches = 12
+  max_arguments = 5
+  max_localvars = 15
+  max_statements = 50
+
+# -------------------------------
+# Options affecting file encoding
+# -------------------------------
+with section("encode"):
+
+  # If true, emit the unicode byte-order mark (BOM) at the start of the file
+  emit_byteorder_mark = False
+
+  # Specify the encoding of the input file. Defaults to utf-8
+  input_encoding = 'utf-8'
+
+  # Specify the encoding of the output file. Defaults to utf-8. Note that cmake
+  # only claims to support utf-8 so be careful when using anything else
+  output_encoding = 'utf-8'
+
+# -------------------------------------
+# Miscellaneous configurations options.
+# -------------------------------------
+with section("misc"):
+
+  # A dictionary containing any per-command configuration overrides. Currently
+  # only `command_case` is supported.
+  per_command = {}
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 54acc4b..4369c59 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,3 +1,3 @@
-include_guard()
+include_guard ()
 
-include("${CMAKE_CURRENT_LIST_DIR}/src/Index.cmake")
\ No newline at end of file
+include ("${CMAKE_CURRENT_LIST_DIR}/src/Index.cmake")
diff --git a/Index.cmake b/Index.cmake
index 54acc4b..4369c59 100644
--- a/Index.cmake
+++ b/Index.cmake
@@ -1,3 +1,3 @@
-include_guard()
+include_guard ()
 
-include("${CMAKE_CURRENT_LIST_DIR}/src/Index.cmake")
\ No newline at end of file
+include ("${CMAKE_CURRENT_LIST_DIR}/src/Index.cmake")
-- 
GitLab