Обновление

This commit is contained in:
Andrei Astafev 2021-07-02 10:41:56 +03:00
parent 85ccfd0626
commit 5e4f8d371a
16 changed files with 278 additions and 106 deletions

248
.cmake-format.py Normal file
View File

@ -0,0 +1,248 @@
#!/usr/bin/env python3
# ----------------------------------
# Options affecting listfile parsing
# ----------------------------------
with section("parse"):
# Specify structure for custom cmake functions
additional_commands = {
'add_doxygen': { 'flags' : [],
'kwargs': { 'LATEX': 1,
'HTML': 1,
'COMMENT': 1}},
'add_breathe': { 'flags' : [],
'kwargs': { 'COMMENT': 1}},
'add_common_library': { 'flags' : [],
'kwargs': { 'OUTPUT_NAME': 1,
'SOURCES': '*',
'TARGET': 1}},
'qt5_translation': { 'flags' : [],
'kwargs': { 'OUTPUT_DIR': 1,
'LANGUAGES': '*',
'SOURCES': '*',
'BASE_NAME': 1}},
'pvs_studio_add_target': { 'flags' : [ 'COMPILE_COMMANDS',
'OUTPUT',
'HIDE_HELP'],
'kwargs': { 'ARGS': '*',
'CONFIG': '*',
'DEPENDS': '*',
'FORMAT': '*',
'MODE': '*',
'TARGET': 1}},
'write_compiler_detection_header': { 'flags' : [],
'kwargs': { 'COMPILERS': '*',
'FEATURES': '*',
'FILE': '*',
'PREFIX': '*'}}}
# Specify variable tags.
vartags = []
# Specify property tags.
proptags = []
# -----------------------------
# Options affecting formatting.
# -----------------------------
with section("format"):
# How wide to allow formatted cmake files
line_width = 110
# How many spaces to tab for indent
tab_size = 2
# 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 = 3
# If a positional argument group contains more than this many arguments, then
# force it to a vertical layout.
max_pargs_hwrap = 5
# 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 = False
# If true, separate function names from parentheses with a space
separate_fn_name_with_space = False
# If a statement is wrapped to more than one line, than dangle the closing
# parenthesis on its own line.
dangle_parens = False
# 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 = 2
# 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 = 'unix'
# 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 = None
# 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 = False
# ----------------------------
# Options affecting the linter
# ----------------------------
with section("lint"):
# a list of lint codes to disable
disabled_codes = ['C0113']
# 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
# scope
global_var_pattern = '[0-9A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with global
# scope (but internal semantic)
internal_var_pattern = '_[0-9A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for variables with local
# scope
local_var_pattern = '[0-9a-z_]+'
# regular expression pattern describing valid names for privatedirectory
# variables
private_var_pattern = '_[0-9a-z_]+'
# regular expression pattern describing valid names for publicdirectory
# variables
public_var_pattern = '[0-9A-Z][0-9A-Z_]+'
# regular expression pattern describing valid names for keywords used in
# functions or macros
keyword_pattern = '[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 = {}

View File

@ -1,5 +1,7 @@
include:
- local: .gitlab-ci/scheduled.yml
- project: 'f1x1t/gitlab-ci'
ref: master
file: 'scheduled.yml'
smolensk15-nightly:
variables:
@ -19,3 +21,7 @@ focal-nightly:
elbrus-nightly:
extends: .scheduled-elbrus
check-format-sources:
only:
- merge_requests
extends: .check-format-sources

View File

@ -1,78 +0,0 @@
variables:
GIT_SUBMODULE_STRATEGY: recursive
GET_SOURCES_ATTEMPTS: 10
.scheduled-test:
only:
refs:
- schedules
cache:
paths: ['*.status']
before_script:
- >
if [ -f "${CI_JOB_NAME}.status" ]; then
if [ "$(cat ${CI_JOB_NAME}.status)" == "${CI_COMMIT_SHA}" ]; then
echo "=== Commit ${CI_COMMIT_SHORT_SHA} already tested with job ${CI_JOB_NAME} ==="
exit 0
fi
fi
- >
if [ -n "${UPDATE_CMD}" ]; then
${UPDATE_CMD}
fi
- >
if [ -n "${INSTALL_CMD}" ]; then
${INSTALL_CMD}
fi
script:
- >
if [ -f "${CI_JOB_NAME}.status" ]; then
if [ "$(cat ${CI_JOB_NAME}.status)" == "${CI_COMMIT_SHA}" ]; then
echo "=== Commit ${CI_COMMIT_SHORT_SHA} already tested with job ${CI_JOB_NAME} ==="
exit 0
fi
fi
- rm -f ${CI_JOB_NAME}.status
- mkdir build
- cd build
- cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=_output -DCPACK_PACKAGING_INSTALL_PREFIX=/opt/rtis ..
- ninja
- >
if [ -z "${CI_SHARED_ENVIRONMENT+x}" ]; then
ninja install
ninja package
ninja package_source
fi
- echo "${CI_COMMIT_SHA}" > "../${CI_JOB_NAME}.status"
artifacts:
paths:
- build/*.xz
- build/*.deb
when: on_success
expire_in: 10 days
.scheduled-smolensk15:
extends: .scheduled-test
image: smolensk15-dev
tags: ['docker']
.scheduled-orel212:
extends: .scheduled-test
image: orel212-dev
tags: ['docker']
.scheduled-bionic:
extends: .scheduled-test
image: bionic-dev
tags: ['docker']
.scheduled-focal:
extends: .scheduled-test
image: focal-dev
tags: ['docker']
.scheduled-elbrus:
extends: .scheduled-test
tags: ['elbrus']

3
.gitmodules vendored
View File

@ -7,9 +7,6 @@
[submodule "cmake/generators"]
path = cmake/generators
url = https://git.246060.ru/f1x1t/cmake-generators.git
[submodule "cmake/doc"]
path = cmake/doc
url = https://git.246060.ru/f1x1t/cmake-doc.git
[submodule "cmake/etc/uncrustify"]
path = cmake/etc/uncrustify
url = https://git.246060.ru/f1x1t/uncrustify-config.git

View File

@ -1,5 +1,5 @@
# Минимальная версия CMake
cmake_minimum_required(VERSION 3.3)
cmake_minimum_required(VERSION 3.6)
# Предпочтительно следовать стандартам принятым в указанном диапазоне версий
cmake_policy(VERSION 3.0.2..3.7)
@ -7,13 +7,21 @@ cmake_policy(VERSION 3.0.2..3.7)
# Название и версия проекта и используемые языки программирования
project(cmlib-example-app VERSION 0.2.0 LANGUAGES C CXX)
# Обязательные переменные
set(CMLIB_ORGANIZATION_NAME "ECS5" CACHE STRING "")
set(CMLIB_AUTHOR_NAME "Андрей Астафьев" CACHE STRING "")
set(CMLIB_AUTHOR_EMAIL "dev@246060.ru" CACHE STRING "")
set(CMLIB_DESCRIPTION "Пример проекта: приложение и подключение библиотеки" CACHE STRING "")
# В каталоге cmake/cmlib находятся файлы с библиотечными функциями
if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/cmlib)
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/cmlib)
else()
message(FATAL_ERROR "CMake library directory does not exist")
if(NOT DEFINED CMLIB_MAIN_DIR)
set(CMLIB_MAIN_DIR "${CMAKE_SOURCE_DIR}/cmake/cmlib")
endif()
if(IS_DIRECTORY "${CMLIB_MAIN_DIR}" AND EXISTS "${CMLIB_MAIN_DIR}/CMLibCommon.cmake")
list(INSERT CMAKE_MODULE_PATH 0 "${CMLIB_MAIN_DIR}")
else()
message(FATAL_ERROR "CMLib main directory ${CMLIB_MAIN_DIR} does not exists")
endif()
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/find)
include(CMLibCommon)
@ -24,7 +32,7 @@ set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost 1.55.0 REQUIRED)
# Автоматически генерируемый заголовочный файл
cmlib_config_hpp_generate()
cmlib_generate_private_config_hpp()
# Подключение внешних проектов
include(ExternalProject)
@ -43,7 +51,8 @@ ExternalProject_Add(ext-lib
add_subdirectory(src/cmlib-example)
# Документация
add_subdirectory(cmake/doc)
add_breathe_target(doc-breathe)
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
# Создание вспомогательных символических ссылок
add_dependencies(cmlib-example create_auxilary_symlinks)

@ -1 +1 @@
Subproject commit 197e5b3939709a0cc4924e44c355aa8ad7358b8e
Subproject commit 061327890c93ae2e96a63ac50f86e8df0ac14e12

@ -1 +0,0 @@
Subproject commit acdfb6a9dd5ca1cb037e541f7da7033968873357

View File

@ -1,9 +0,0 @@
set(ORGANIZATION_NAME "org")
set(AUTHOR_NAME "John Doe")
set(DOXYGEN_PROJECT_TITLE "Пример проекта приложения")
set(DOXYGEN_GENERATE_LATEX YES)
set(DOXYGEN_GENERATE_HTML YES)
set(CPACK_PACKAGE_CONTACT "John Doe <box@mail.domain>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CMLib application project example")

@ -1 +1 @@
Subproject commit 0cd764fc187ab3b66cb31a5549f13b3336858894
Subproject commit e11d85f13317dcf3652988026ce1ef4dcbe72c68

@ -1 +1 @@
Subproject commit d0bc6e71e9c613eaaecca62eaf445d647f5216ed
Subproject commit 29faeeae1ac920e987aa6a6c16fff8f8f9f9a647

View File

@ -19,10 +19,10 @@ add_dependencies(${TRGT} ext-lib)
target_include_directories(${TRGT} PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
# Компоновка с библиотекой из внешнего проекта
target_link_libraries(${TRGT} ${CMAKE_BINARY_DIR}/lib/libcmlib-example.a)
target_link_libraries(${TRGT} ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/libcmlib-example.a)
# Имя выходного файла для цели
set_target_properties(${TRGT} PROPERTIES OUTPUT_NAME ${TRGT})
# Правила для установки
install(TARGETS ${TRGT} COMPONENT MAIN RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(TARGETS ${TRGT} COMPONENT main RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

@ -1 +1 @@
Subproject commit 76ede7e013d94cdca2b0f18350a2da32028f18d2
Subproject commit bbe71486ed65dfc59e599534d7a76e8c5cb61365