Compare commits

...

46 Commits

Author SHA1 Message Date
bef7660836 Отказ от использования файла Variables.cmake 2021-06-07 17:46:58 +03:00
dbc0b76a76 Опция CMLIB_USE_DEVELOPMENT_INSTALL_PREFIX
При включении CMLIB_USE_DEVELOPMENT_INSTALL_PREFIX установка
будет производиться в каталог _output внутри проекта.
2021-06-01 13:55:12 +03:00
ab6d9dab66 Переменная для названия работы (темы) 2021-06-01 13:36:24 +03:00
956a94800f Запрет установки в каталог с исходниками 2021-06-01 13:32:03 +03:00
8fbf0a3b3d Переименование 2021-05-30 23:07:16 +03:00
63c433a82e Исправлена область видимости переменных 2021-05-30 20:53:38 +03:00
ec1d917195 Форматирование 2021-05-30 20:32:08 +03:00
28cf80381e Выбор версии стандарта C++ (для Астра 1.5 - 11, иначе 17) 2021-05-30 20:31:10 +03:00
c6414bbc03 Переименованы стандартные каталоги для данных (data->share, lib->var) 2021-05-25 14:59:59 +03:00
894a63237a Функция для добавления общего префикса ко всем переменным в списке 2021-05-18 08:59:52 +03:00
1bff4d2a0d Команда для проверки форматирования кода 2021-02-19 11:04:50 +03:00
b725122c89 Revert "Проверка доступности стандарта C++17"
This reverts commit a0cc72077c.
2020-12-23 11:03:49 +03:00
6748c65058 Revert "Заплатка для версий CMake < 3.8.0"
This reverts commit 0f5a90952b.
2020-12-23 11:03:41 +03:00
0f5a90952b Заплатка для версий CMake < 3.8.0 2020-12-23 09:36:24 +03:00
a0cc72077c Проверка доступности стандарта C++17 2020-12-21 16:05:42 +03:00
81bed8b385 Merge branch 'master' of git.246060.ru:f1x1t/cmlib 2020-12-10 12:24:32 +03:00
6020cb02c0 Исправлена сборка статической библиотеки в режиме профилировки 2020-12-10 12:23:47 +03:00
f5151f5a2b Поддержка новых версий clang 2020-12-01 13:12:24 +03:00
5ffcde34e2 Форматирование файла 2020-12-01 13:12:15 +03:00
0e96514413 Исправление связки cotire + clang 2020-10-15 06:55:02 +03:00
39111c890a Тест 2020-10-02 11:38:14 +03:00
67cbb07e51 Установка флагов в зависимости от типа цели 2020-10-02 11:31:18 +03:00
eeae991b4c Проба 2020-10-02 11:20:30 +03:00
e3957adb47 Проба 2020-10-02 10:58:45 +03:00
41e27fb251 Merge branch 'master' of git.246060.ru:f1x1t/cmlib 2020-10-02 08:37:54 +03:00
2be896c4a8 Глобальные настройки PVS-Studio 2020-10-02 08:37:25 +03:00
e3600e96ce Передача аргументов во внешние проекты (переменная CMLIB_EXT_PROJ_DEFAULT_ARGS) 2020-08-03 15:16:10 +03:00
5c90828e4e Убрана явное указания языка для файла исходных текстов 2020-07-23 10:21:40 +03:00
186d67c4bb Добавление флагов в виде строк 2020-06-26 04:09:40 +03:00
2e18f5981b Правка добавления флагов 2020-06-26 04:04:38 +03:00
ef788f6cc5 Другой способ установки флагов 2020-06-25 12:22:35 +03:00
954b27fa27 Рефакторинг 2020-06-25 11:30:48 +03:00
a8e546734a Лишние пробелы 2020-06-25 09:21:18 +03:00
f2ee747a38 По возможности использовать C++14, иначе С++11 2020-06-25 09:20:23 +03:00
a6bb734f49 Правка для ОС Эльбрус 2020-05-18 19:33:26 +03:00
23be253a8d Переписана работа с флагами по умолчанию 2020-04-27 19:30:41 +03:00
9df188963e Удаление дубликатов флагов 2020-04-26 18:42:18 +03:00
aee649f061 Правила для формирования архивов 2020-04-26 17:50:18 +03:00
4821f16044 Проба создания правил для работы с отладочной информацией 2020-04-25 17:35:24 +03:00
2ea38c32c8 Добавлены tpp и tcc к списку расширений файлов для C++ 2020-04-25 08:43:05 +03:00
a4c2efa3d2 Маски для исключения файлов из архива 2020-04-24 22:47:58 +03:00
1eaded9031 Правила именования пакетов 2020-04-24 20:51:10 +03:00
d6c1e11d49 Форматирование кода 2020-04-24 20:35:57 +03:00
bc44f42f89 Обновлены правила для формирования пакетов 2020-04-24 20:28:01 +03:00
ea2b322df6 Улучшена генерация файла pkg-config 2020-04-22 22:25:22 +03:00
c73c31b380 Генерация файла для pkg-config вынесена в отдельную функцию 2020-04-22 22:05:17 +03:00
31 changed files with 481 additions and 160 deletions

View File

@@ -1,19 +1,21 @@
# cmake-format: off
if(NOT TARGET create_auxilary_symlinks) if(NOT TARGET create_auxilary_symlinks)
if(UNIX) if(UNIX)
add_custom_target( add_custom_target(
create_auxilary_symlinks create_auxilary_symlinks
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/files
# Ссылка на каталог с журналами # Ссылка на каталог с журналами
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/files/log ${CMAKE_BINARY_DIR}/files/log COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_SOURCE_DIR}/files/log ${CMAKE_BINARY_DIR}/log
# Ссылка на каталог с обрабатываемыми данными # Ссылка на каталог с обрабатываемыми данными
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/files/lib ${CMAKE_BINARY_DIR}/files/lib COMMAND ${CMAKE_COMMAND} -E create_symlink
# Ссылка на каталог с временными данными ${CMAKE_SOURCE_DIR}/files/var ${CMAKE_BINARY_DIR}/var
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/files/cache
${CMAKE_BINARY_DIR}/files/cache
# Ссылка на каталог с постоянными данными # Ссылка на каталог с постоянными данными
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/files/data ${CMAKE_BINARY_DIR}/files/data COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_SOURCE_DIR}/files/share ${CMAKE_BINARY_DIR}/share
# Ссылка на каталог настроек # Ссылка на каталог настроек
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/files/etc ${CMAKE_BINARY_DIR}/etc) COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_SOURCE_DIR}/files/etc ${CMAKE_BINARY_DIR}/etc)
endif() endif()
endif() endif()
# cmake-format: on

View File

@@ -21,17 +21,23 @@ else()
endif() endif()
endif() endif()
set(_gcc_debug_flags "-ggdb -fno-omit-frame-pointer")
set(_gcc_profile_flags "-pg")
if(CMAKE_BUILD_TYPE STREQUAL Profile) if(CMAKE_BUILD_TYPE STREQUAL Profile)
# Ключи компиляции для режима профилирования в зависимости от типа компилятора # Ключи компиляции для режима профилирования в зависимости от типа компилятора
if(CMAKE_CXX_COMPILER_IS_Clang OR CMAKE_CXX_COMPILER_IS_GCC) if(CMAKE_CXX_COMPILER_IS_Clang OR CMAKE_CXX_COMPILER_IS_GCC)
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -ggdb -pg -fno-omit-frame-pointer" CACHE STRING "" set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} ${_gcc_debug_flags} ${_gcc_profile_flags}"
FORCE) CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE} -ggdb -pg -fno-omit-frame-pointer" CACHE STRING set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE} ${_gcc_debug_flags} ${_gcc_profile_flags}"
"" FORCE) CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "" FORCE) set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${_gcc_profile_flags}"
set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "" FORCE) CACHE STRING "" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS_PROFILE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "" FORCE) set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} ${_gcc_profile_flags}"
set(CMAKE_MODULE_LINKER_FLAGS_PROFILE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} -pg" CACHE STRING "" FORCE) CACHE STRING "" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS_PROFILE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE}" CACHE STRING "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS_PROFILE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} ${_gcc_profile_flags}"
CACHE STRING "" FORCE)
elseif(CMAKE_CXX_COMPILER_IS_Intel) elseif(CMAKE_CXX_COMPILER_IS_Intel)
message("Set options for profiling with Intel C++") message("Set options for profiling with Intel C++")
elseif(CMAKE_CXX_COMPILER_IS_MSVC) elseif(CMAKE_CXX_COMPILER_IS_MSVC)
@@ -43,8 +49,11 @@ if(CMAKE_BUILD_TYPE STREQUAL Profile)
elseif(CMAKE_BUILD_TYPE STREQUAL Debug) elseif(CMAKE_BUILD_TYPE STREQUAL Debug)
# В режиме отладки подробный вывод сообщений компилятора # В режиме отладки подробный вывод сообщений компилятора
if(CMAKE_CXX_COMPILER_IS_Clang OR CMAKE_CXX_COMPILER_IS_GCC) if(CMAKE_CXX_COMPILER_IS_Clang OR CMAKE_CXX_COMPILER_IS_GCC)
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb -fno-omit-frame-pointer" CACHE STRING "" FORCE) string(REPLACE " ${_gcc_debug_flags}" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb -fno-omit-frame-pointer" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${_gcc_debug_flags}" CACHE STRING "" FORCE)
string(REPLACE " ${_gcc_debug_flags}" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${_gcc_debug_flags}" CACHE STRING "" FORCE)
endif() endif()
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable generation of verbose build scripts." FORCE) set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "Enable generation of verbose build scripts." FORCE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable generation of compile_commands.json." FORCE) set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable generation of compile_commands.json." FORCE)
@@ -57,3 +66,6 @@ elseif(CMAKE_BUILD_TYPE STREQUAL None)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable generation of compile_commands.json." FORCE) set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable generation of compile_commands.json." FORCE)
set(ANALYSIS 1) set(ANALYSIS 1)
endif() endif()
unset(_gcc_debug_flags)
unset(_gcc_profile_flags)

View File

@@ -1,17 +1,17 @@
# Общие настройки для пакета: организация, автор, версия # Общие настройки для пакета: организация, автор, версия
set(CPACK_PACKAGE_VENDOR ${CMLIB_ORGANIZATION_NAME_LOWER}) set(CPACK_PACKAGE_VENDOR ${CMLIB_ORGANIZATION_NAME_LOWER} CACHE STRING "")
set(CPACK_PACKAGE_NAME ${CMLIB_PROJECT_NAME_LOWER}) set(CPACK_PACKAGE_NAME ${CMLIB_PROJECT_NAME_LOWER} CACHE STRING "")
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION} CACHE STRING "")
# Параметры для архива исходных текстов # Параметры для архива исходных текстов
if(NOT CPACK_SOURCE_GENERATOR) if(NOT CPACK_SOURCE_GENERATOR)
set(CPACK_SOURCE_GENERATOR "TXZ") set(CPACK_SOURCE_GENERATOR "TGZ")
endif() endif()
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${CPACK_PACKAGE_VERSION}") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${CPACK_PACKAGE_VERSION}")
# Типы генераторов для бинарных архивов # Типы генераторов для бинарных архивов
if(NOT CPACK_GENERATOR) if(NOT CPACK_GENERATOR)
set(CPACK_GENERATOR "TXZ" "DEB") set(CPACK_GENERATOR "TGZ" "DEB")
endif() endif()
# Параметры для архива собранного проекта # Параметры для архива собранного проекта
@@ -28,10 +28,11 @@ set(CPACK_SOURCE_IGNORE_FILES
"${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}"
"^${CMAKE_SOURCE_DIR}/.?build.?/" "^${CMAKE_SOURCE_DIR}/.?build.?/"
"^${CMAKE_SOURCE_DIR}/.?output.?/" "^${CMAKE_SOURCE_DIR}/.?output.?/"
"^${CMAKE_SOURCE_DIR}/files/lib" "^${CMAKE_SOURCE_DIR}/files/var"
"^${CMAKE_SOURCE_DIR}/files/log" "^${CMAKE_SOURCE_DIR}/files/log"
"CMakeLists.txt.user.*" "CMakeLists.txt.user.*"
".*.autosave" ".*.autosave"
".*.status"
"~$" "~$"
"\\\\.swp$") "\\\\.swp$")
@@ -40,6 +41,7 @@ if(CMLIB_COMPACT_SOURCE_PACKAGE)
# Список масок для исключения из архива исходных текстов для более компактного архива # Список масок для исключения из архива исходных текстов для более компактного архива
set(CPACK_SOURCE_IGNORE_FILES set(CPACK_SOURCE_IGNORE_FILES
"${CPACK_SOURCE_IGNORE_FILES}" "${CPACK_SOURCE_IGNORE_FILES}"
"\\\\.git"
"/\\\\.git/" "/\\\\.git/"
"/\\\\.gitlab-ci/" "/\\\\.gitlab-ci/"
"\\\\.clang-tidy$" "\\\\.clang-tidy$"
@@ -52,6 +54,14 @@ endif()
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_LIST_DIR}/CMLibCPackProject.cmake) set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_LIST_DIR}/CMLibCPackProject.cmake)
option(CMLIB_CPACK_DEFAULT_SCHEME "Use packaging default scheme" ON)
# Правила для сборки обычных архивов
if(CMLIB_CPACK_DEFAULT_SCHEME)
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
set(CPACK_COMPONENTS_GROUPING IGNORE)
endif()
# Правила для сборки пакетов для Debian # Правила для сборки пакетов для Debian
include(CMLibCPackDeb) include(CMLibCPackDeb)

View File

@@ -16,43 +16,64 @@ if(NOT CPACK_DEB_COMPONENT_INSTALL)
set(CPACK_DEB_COMPONENT_INSTALL ON) set(CPACK_DEB_COMPONENT_INSTALL ON)
endif() endif()
# Если имя компонента по умолчанию не определено, то устанавливается MAIN if(CMLIB_CPACK_DEFAULT_SCHEME)
if(NOT CMAKE_INSTALL_DEFAULT_COMPONENT_NAME) # Если имя компонента по умолчанию не определено, то устанавливается MAIN
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME MAIN) if(NOT CMAKE_INSTALL_DEFAULT_COMPONENT_NAME)
endif() set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME main)
# В списке компонентов обязательно должны быть MAIN и DEV
list(APPEND CPACK_COMPONENTS_ALL MAIN DEV)
list(REMOVE_DUPLICATES CPACK_COMPONENTS_ALL)
# Правило формирования имени пакета и файла для компонента MAIN
set(CPACK_DEBIAN_MAIN_PACKAGE_NAME "${CMLIB_PROJECT_NAME_LOWER}")
set(CPACK_DEBIAN_MAIN_FILE_NAME
"${CMLIB_PROJECT_NAME_LOWER}_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}.deb")
# Правило формирования имени пакета и файла для остальных компонентов
foreach(C ${CPACK_COMPONENTS_ALL})
if(NOT "${C}" STREQUAL "MAIN")
string(TOLOWER "${C}" cl)
set(CPACK_DEBIAN_${C}_PACKAGE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${cl}")
set(CPACK_DEBIAN_${C}_FILE_NAME
"${CMLIB_PROJECT_NAME_LOWER}-${cl}_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}.deb")
endif() endif()
endforeach()
# Если в каталоге ${CMAKE_SOURCE_DIR}/cmake/deb находятся сценарии сопровождающего # В списке компонентов обязательно должны быть main, base-dev, libs-dev и doc
# postinst, preinst, postrm и prerm, то они будут добавлены к пакету. list(
if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/preinst") APPEND
list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/preinst") CPACK_COMPONENTS_ALL
endif() main
if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/postinst") base-dev
list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/postinst") libs-dev
endif() doc)
if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/prerm") list(REMOVE_DUPLICATES CPACK_COMPONENTS_ALL)
list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/prerm")
endif() # Правило формирования имени пакета и файла для компонента main
if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/postrm") set(CPACK_DEBIAN_MAIN_PACKAGE_NAME "${CMLIB_PROJECT_NAME_LOWER}")
list(APPEND CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/postrm") set(CPACK_DEBIAN_MAIN_FILE_NAME
${CMLIB_PROJECT_NAME_LOWER}_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}.deb)
# Правило формирования имени пакета и файла для компонента base-dev
set(CPACK_DEBIAN_BASE-DEV_PACKAGE_NAME "lib${CMLIB_PROJECT_NAME_LOWER}-base-dev")
set(CPACK_DEBIAN_BASE-DEV_FILE_NAME
lib${CMLIB_PROJECT_NAME_LOWER}-base-dev_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}.deb)
# Правило формирования имени пакета и файла для компонента libs-dev
set(CPACK_DEBIAN_LIBS-DEV_PACKAGE_NAME lib${CMLIB_PROJECT_NAME_LOWER}-dev)
set(CPACK_DEBIAN_LIBS-DEV_FILE_NAME
lib${CMLIB_PROJECT_NAME_LOWER}-dev_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}.deb)
set(CPACK_DEBIAN_LIBS-DEV_PACKAGE_DEPENDS "lib${CMLIB_PROJECT_NAME_LOWER}-base-dev")
foreach(_C ${CPACK_COMPONENTS_ALL})
string(TOLOWER ${_C} _cl)
string(TOUPPER ${_C} _cu)
# Правила формирования имени пакета и файла для остальных компонентов
if(NOT ${_cl} STREQUAL main AND NOT ${_cl} STREQUAL base-dev AND NOT ${_cl} STREQUAL libs-dev)
set(CPACK_DEBIAN_${_cu}_PACKAGE_NAME "${CMLIB_PROJECT_NAME_LOWER}-${_cl}")
set(CPACK_DEBIAN_${_cu}_FILE_NAME
"${CMLIB_PROJECT_NAME_LOWER}-${_cl}_${CPACK_PACKAGE_VERSION}_${CPACK_TARGET_ARCH}.deb")
endif()
# Если в каталоге ${CMAKE_SOURCE_DIR}/cmake/deb/${_cl} находятся сценарии сопровождающего
# postinst, preinst, postrm и prerm, то они будут добавлены к пакету.
if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/${_cl}/preinst")
list(APPEND CPACK_DEBIAN_${_cu}_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/${_cl}/preinst")
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/${_cl}/postinst")
list(APPEND CPACK_DEBIAN_${_cu}_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/${_cl}/postinst")
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/${_cl}/prerm")
list(APPEND CPACK_DEBIAN_${_cu}_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/${_cl}/prerm")
endif()
if(EXISTS "${CMAKE_SOURCE_DIR}/cmake/deb/${_cl}/postrm")
list(APPEND CPACK_DEBIAN_${_cu}_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/deb/${_cl}/postrm")
endif()
endforeach()
endif() endif()
if(UNIX AND NOT TARGET deb) if(UNIX AND NOT TARGET deb)

View File

@@ -1,4 +1,12 @@
find_program(CLANG_CHECK_EXE NAMES clang-check-10 clang-check-9 clang-check) find_program(
CLANG_CHECK_EXE
NAMES
clang-check-13
clang-check-12
clang-check-11
clang-check-10
clang-check-9
clang-check)
if(CLANG_CHECK_EXE) if(CLANG_CHECK_EXE)
option(CMLIB_CLANG_ANALYZE_FIX "Perform fixes for Clang-Check" OFF) option(CMLIB_CLANG_ANALYZE_FIX "Perform fixes for Clang-Check" OFF)
endif() endif()

View File

@@ -1,4 +1,12 @@
find_program(CLANG_TIDY_EXE NAMES clang-tidy-10 clang-tidy-9 clang-tidy) find_program(
CLANG_TIDY_EXE
NAMES
clang-tidy-13
clang-tidy-12
clang-tidy-11
clang-tidy-10
clang-tidy-9
clang-tidy)
if(CLANG_TIDY_EXE) if(CLANG_TIDY_EXE)
option(CMLIB_CLANG_TIDY_FIX "Perform fixes for Clang-Tidy" OFF) option(CMLIB_CLANG_TIDY_FIX "Perform fixes for Clang-Tidy" OFF)
endif() endif()

View File

@@ -1,4 +1,11 @@
find_program(CLANG_APPLY_REPLACEMENTS_EXE NAMES clang-apply-replacements-10 clang-apply-replacements-9 find_program(
CLANG_APPLY_REPLACEMENTS_EXE
NAMES
clang-apply-replacements-13
clang-apply-replacements-12
clang-apply-replacements-11
clang-apply-replacements-10
clang-apply-replacements-9
clang-apply-replacements) clang-apply-replacements)
find_program(CLAZY_EXE NAMES clazy-standalone) find_program(CLAZY_EXE NAMES clazy-standalone)

View File

@@ -15,6 +15,20 @@ function(add_pvs_check target)
ARGS --analysis-mode 29 --exclude-path ${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen ARGS --analysis-mode 29 --exclude-path ${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen
MODE GA:1,2,3;64:1;OP:1,2;CS:1,2) MODE GA:1,2,3;64:1;OP:1,2;CS:1,2)
add_dependencies(pvs-check pvs-check-${target}) add_dependencies(pvs-check pvs-check-${target})
configure_file("${CMLIB_MODULE_DIR}/hpp/pvs_studio.hpp.in" "${CMAKE_BINARY_DIR}/include/pvs_studio.hpp")
get_target_property(target_type ${target} TYPE)
if(${target_type} STREQUAL "INTERFACE_LIBRARY")
set(target_type INTERFACE)
else()
set(target_type PRIVATE)
endif()
if(MSVC)
target_compile_options(${target} BEFORE ${target_type} /FI
"${CMAKE_BINARY_DIR}/include/pvs_studio.hpp")
else() # GCC/Clang
target_compile_options(${target} BEFORE ${target_type} -include
"${CMAKE_BINARY_DIR}/include/pvs_studio.hpp")
endif()
else() else()
message(STATUS "CMLIB warning:") message(STATUS "CMLIB warning:")
message(STATUS " PVS-Studio analyzer is not found") message(STATUS " PVS-Studio analyzer is not found")

View File

@@ -7,9 +7,7 @@ function(add_code_coverage target)
if(CMLIB_ENABLE_CODE_COVERAGE) if(CMLIB_ENABLE_CODE_COVERAGE)
if(CMAKE_CXX_COMPILER_IS_GCC) if(CMAKE_CXX_COMPILER_IS_GCC)
target_compile_options(${target} PUBLIC "--coverage") target_compile_options(${target} PUBLIC "--coverage")
get_target_property(LF ${target} LINK_FLAGS) set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " --coverage")
string(APPEND LF " --coverage")
set_target_properties(${target} PROPERTIES LINK_FLAGS ${LF})
if(LCOV_EXE) if(LCOV_EXE)
add_custom_target( add_custom_target(

View File

@@ -5,6 +5,10 @@ if(CMAKE_INSTALL_PREFIX STREQUAL PROJECT_BINARY_DIR)
message(FATAL_ERROR "Cannot install into build directory") message(FATAL_ERROR "Cannot install into build directory")
endif() endif()
if(CMAKE_INSTALL_PREFIX STREQUAL PROJECT_SOURCE_DIR)
message(FATAL_ERROR "Cannot install into source directory")
endif()
include(CMLibDisableInSourceBuild) include(CMLibDisableInSourceBuild)
include(CMakeParseArguments) include(CMakeParseArguments)
include(GNUInstallDirs) include(GNUInstallDirs)
@@ -12,6 +16,7 @@ if(DEFINED ENV{DEB_HOST_MULTIARCH})
string(APPEND CMAKE_INSTALL_LIBDIR "/$ENV{DEB_HOST_MULTIARCH}") string(APPEND CMAKE_INSTALL_LIBDIR "/$ENV{DEB_HOST_MULTIARCH}")
endif() endif()
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${CMAKE_CXX_SOURCE_FILE_EXTENSIONS};tpp;tcc)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY USE_FOLDERS ON)
@@ -25,12 +30,14 @@ include(CMLibLSBInfo)
include(CMLibCompiler) include(CMLibCompiler)
include(CMLibCompilerFlags) include(CMLibCompilerFlags)
include(CMLibDistCC) include(CMLibDistCC)
include(CMLibCompilerFeaturesHPPGenerate) include(CMLibGenerateCompilerFeaturesHPP)
include(CMLibFlagRemove) include(CMLibFlagRemove)
include(CMLibCotire) include(CMLibCotire)
include(CMLibBuildTypes) include(CMLibBuildTypes)
include(CMLibDebugOutput)
include(CMLibCommonTargetProperties) include(CMLibCommonTargetProperties)
include(CMLibCommonLibraryTarget) include(CMLibCommonLibraryTarget)
include(CMLibPkgConfig)
include(CMLibCodeAnalysisPvsStudio) include(CMLibCodeAnalysisPvsStudio)
include(CMLibCodeAnalysisClangAnalyze) include(CMLibCodeAnalysisClangAnalyze)
include(CMLibCodeAnalysisClangTidy) include(CMLibCodeAnalysisClangTidy)
@@ -44,7 +51,8 @@ include(CMLibDocBreathe)
include(CMLibQtTranslation) include(CMLibQtTranslation)
include(CMLibToday) include(CMLibToday)
include(CMLibAuxilarySymlinks) include(CMLibAuxilarySymlinks)
include(CMLibConfigHPPGenerate) include(CMLibGeneratePrivateConfigHPP)
include(CMLibNinjaGeneratorHelper) include(CMLibNinjaGeneratorHelper)
include(CMLibExternalProject)
include(CMLibCPack) include(CMLibCPack)
include(CMLibUninstall) include(CMLibUninstall)

View File

@@ -35,7 +35,4 @@ function(add_common_library target)
install(TARGETS ${target}_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(TARGETS ${target}_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif() endif()
# cmake-format: on # cmake-format: on
configure_file(${CMLIB_MODULE_DIR}/pc/lib.pc.in ${CMAKE_BINARY_DIR}/${target}.pc)
install(FILES ${CMAKE_BINARY_DIR}/${target}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
endfunction() endfunction()

View File

@@ -1,9 +1,10 @@
set(COMMON_CXX_FEATURES cxx_alias_templates cxx_nullptr cxx_override) set(COMMON_CXX_FEATURES cxx_alias_templates cxx_nullptr cxx_override)
function(common_target_properties target) function(common_target_properties target)
get_target_property(__type ${target} TYPE) get_target_property(_targetType ${target} TYPE)
set(__visibility PUBLIC) set(__visibility PUBLIC)
if(__type STREQUAL INTERFACE_LIBRARY) if(_targetType STREQUAL INTERFACE_LIBRARY)
set(__interface 1) set(__interface 1)
set(__visibility INTERFACE) set(__visibility INTERFACE)
endif() endif()
@@ -17,7 +18,6 @@ function(common_target_properties target)
endforeach() endforeach()
target_compile_features(${target} ${__visibility} ${COMMON_CXX_FEATURES}) target_compile_features(${target} ${__visibility} ${COMMON_CXX_FEATURES})
get_target_property(_targetType ${target} TYPE)
if(_targetType STREQUAL "EXECUTABLE") if(_targetType STREQUAL "EXECUTABLE")
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
@@ -25,57 +25,56 @@ function(common_target_properties target)
target_compile_options(${target} PUBLIC "${CMAKE_CXX_COMPILE_OPTIONS_PIE}") target_compile_options(${target} PUBLIC "${CMAKE_CXX_COMPILE_OPTIONS_PIE}")
endif() endif()
endif() endif()
target_include_directories( target_include_directories(
${target} ${target}
PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>) $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
if(APPLE) if(APPLE)
target_compile_definitions(${target} ${__visibility} Darwin) target_compile_definitions(${target} ${__visibility} Darwin)
endif() endif()
if(NOT __interface) if(NOT __interface)
if(TARGET Qt5::Core) if(TARGET Qt5::Core)
if(_targetType STREQUAL "EXECUTABLE") if(_targetType STREQUAL "EXECUTABLE")
target_compile_options(${target} PUBLIC "${Qt5Core_EXECUTABLE_COMPILE_FLAGS}") target_compile_options(${target} PUBLIC "${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
endif() endif()
if(NOT CMLIB_DEBUG_OUTPUT)
add_definitions(-DQT_NO_DEBUG_OUTPUT)
endif()
if(NOT CMLIB_INFO_OUTPUT)
add_definitions(-DQT_NO_INFO_OUTPUT)
endif()
if(NOT CMLIB_WARNING_OUTPUT)
add_definitions(-DQT_NO_WARNING_OUTPUT)
endif()
endif() endif()
if(CMAKE_CXX_COMPILER_IS_GCC AND NOT APPLE) if(CMAKE_CXX_COMPILER_IS_GCC AND NOT APPLE)
set_target_properties(${target} PROPERTIES LINK_FLAGS "-Wl,--no-as-needed") set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-as-needed")
endif() endif()
endif() endif()
# LTO only for executables (not libraries) in Release build type # LTO only for executables (not libraries) in Release build type
get_target_property(target_type ${target} TYPE) if(_targetType STREQUAL "EXECUTABLE" AND CMAKE_BUILD_TYPE STREQUAL "Release")
if(target_type STREQUAL "EXECUTABLE" AND CMAKE_BUILD_TYPE STREQUAL "Release")
check_cxx_compiler_flag(-flto CXX_HAS_LTO_FLAG) check_cxx_compiler_flag(-flto CXX_HAS_LTO_FLAG)
check_cxx_compiler_flag(-fno-fat-lto-objects CXX_HAS_NO_FAT_LTO_FLAG) check_cxx_compiler_flag(-fno-fat-lto-objects CXX_HAS_NO_FAT_LTO_FLAG)
if(CMAKE_CXX_COMPILER_IS_GCC AND CXX_HAS_LTO_FLAG) if(CXX_HAS_LTO_FLAG)
find_program(CMAKE_GCC_AR NAMES "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar${_CMAKE_TOOLCHAIN_SUFFIX}" target_compile_options(${target} PUBLIC "-flto")
"${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar" HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " -flto")
find_program(CMAKE_GCC_NM NAMES "${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm${_CMAKE_TOOLCHAIN_SUFFIX}"
"${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm" HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
find_program(
CMAKE_GCC_RANLIB NAMES "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib${_CMAKE_TOOLCHAIN_SUFFIX}"
"${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib" HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
if(CMAKE_GCC_AR AND CMAKE_GCC_NM AND CMAKE_GCC_RANLIB)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
if(CXX_HAS_NO_FAT_LTO_FLAG) if(CXX_HAS_NO_FAT_LTO_FLAG)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-fat-lto-objects") target_compile_options(${target} PUBLIC "-fno-fat-lto-objects")
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " -fno-fat-lto-objects")
endif() endif()
set(CMAKE_AR "${CMAKE_GCC_AR}")
set(CMAKE_NM "${CMAKE_GCC_NM}")
set(CMAKE_RANLIB "${CMAKE_GCC_RANLIB}")
else()
message(WARNING "GCC indicates LTO support, but binutils wrappers could not be found. Disabling LTO.")
endif()
else()
check_enable_compiler_flag(-flto)
check_enable_compiler_flag(-fno-fat-lto-objects)
endif() endif()
endif() endif()
set_target_properties(${target} PROPERTIES COTIRE_ENABLE_PRECOMPILED_HEADER # cmake-format: off
${CMLIB_COTIRE_ENABLE_PRECOMPILED_HEADER}) set_property(TARGET ${target}
set_target_properties(${target} PROPERTIES COTIRE_ADD_UNITY_BUILD ${CMLIB_COTIRE_ADD_UNITY_BUILD}) PROPERTY COTIRE_ENABLE_PRECOMPILED_HEADER ${CMLIB_COTIRE_ENABLE_PRECOMPILED_HEADER})
set_property(TARGET ${target}
PROPERTY COTIRE_ADD_UNITY_BUILD ${CMLIB_COTIRE_ADD_UNITY_BUILD})
# cmake-format: on
if(CMAKE_BUILD_TYPE STREQUAL Profile) if(CMAKE_BUILD_TYPE STREQUAL Profile)
target_compile_definitions(${target} ${__visibility} PROFILE) target_compile_definitions(${target} ${__visibility} PROFILE)
@@ -86,9 +85,6 @@ function(common_target_properties target)
elseif(CMAKE_BUILD_TYPE STREQUAL None) elseif(CMAKE_BUILD_TYPE STREQUAL None)
target_compile_definitions(${target} ${__visibility} ANALYSIS) target_compile_definitions(${target} ${__visibility} ANALYSIS)
endif() endif()
target_compile_definitions( target_compile_definitions(${target} ${__visibility} "TARGET_LSB_ID_${LSB_DISTRIBUTOR_ID}")
${target} target_compile_definitions(${target} ${__visibility} "TARGET_LSB_CODENAME_${LSB_CODENAME}")
${__visibility}
"TARGET_LSB_ID_${LSB_DISTRIBUTOR_ID}"
"TARGET_LSB_CODENAME_${LSB_CODENAME}")
endfunction() endfunction()

View File

@@ -19,3 +19,28 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_CXX_COMPILER_IS_MSVC ON) set(CMAKE_CXX_COMPILER_IS_MSVC ON)
endif() endif()
# Предпочтительные пути к утилитам для компоновки
if(CMAKE_CXX_COMPILER_IS_GCC)
find_program(
CMAKE_GCC_AR NAMES "/usr/e2k-linux/bin/ar" "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar${_CMAKE_TOOLCHAIN_SUFFIX}"
"${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar" "ar" HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
if(CMAKE_GCC_AR)
set(CMAKE_AR ${CMAKE_GCC_AR} CACHE STRING "" FORCE)
endif()
find_program(
CMAKE_GCC_NM NAMES "/usr/e2k-linux/bin/nm" "${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm${_CMAKE_TOOLCHAIN_SUFFIX}"
"${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm" "nm" HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
if(CMAKE_GCC_NM)
set(CMAKE_NM ${CMAKE_GCC_NM} CACHE STRING "" FORCE)
endif()
find_program(
CMAKE_GCC_RANLIB
NAMES "/usr/e2k-linux/bin/ranlib" "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib${_CMAKE_TOOLCHAIN_SUFFIX}"
"${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib" "ranlib" HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
if(CMAKE_GCC_RANLIB)
set(CMAKE_RANLIB ${CMAKE_GCC_RANLIB} CACHE STRING "" FORCE)
endif()
endif()

View File

@@ -1,23 +0,0 @@
include(WriteCompilerDetectionHeader)
set(OUTPUT_FILE ${CMAKE_BINARY_DIR}/include/compiler_features.hpp)
if(CMLIB_GENERATED_HEADERS_PATH)
set(OUTPUT_FILE ${CMLIB_GENERATED_HEADERS_PATH}/compiler_features.hpp)
endif()
write_compiler_detection_header(
FILE ${OUTPUT_FILE}
PREFIX ${CMLIB_PROJECT_NAME_CANONICAL}
COMPILERS GNU Clang MSVC Intel
FEATURES
cxx_nullptr
cxx_override
cxx_alignas
cxx_alignof
cxx_attributes
cxx_auto_type
cxx_constexpr
cxx_digit_separators
cxx_range_for)
unset(OUTPUT_FILE)

View File

@@ -19,12 +19,61 @@ macro(CHECK_ENABLE_CXX_FLAG flag)
unset(CHECK_CXX_FLAG CACHE) unset(CHECK_CXX_FLAG CACHE)
endmacro() endmacro()
if(LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxSE" AND LSB_CODENAME STREQUAL "smolensk" AND LSB_RELEASE STREQUAL function(cmlib_set_cxx_standard version)
"1.5") # Выбор стандарта по умолчанию (можно переопределить в проекте)
set(CMAKE_CXX_STANDARD_REQUIRED YES PARENT_SCOPE)
if(version EQUAL 11)
set(CMAKE_CXX_STANDARD 11 PARENT_SCOPE)
set(CMAKE_CXX_EXTENSIONS YES PARENT_SCOPE)
endif()
if(version EQUAL 14)
set(CMAKE_CXX_STANDARD 14 PARENT_SCOPE)
set(CMAKE_CXX_EXTENSIONS YES PARENT_SCOPE)
endif()
if(version EQUAL 17)
if(${CMAKE_VERSION} VERSION_LESS "3.10.0")
check_cxx_compiler_flag(-std=gnu++17 HAVE_FLAG_STD_GNUXX17)
if(HAVE_FLAG_STD_GNUXX17)
add_compile_options("-std=gnu++17")
else()
check_cxx_compiler_flag(-std=gnu++1z HAVE_FLAG_STD_GNUXX1Z)
if(HAVE_FLAG_STD_GNUXX1Z)
add_compile_options("-std=gnu++1z")
else()
check_cxx_compiler_flag(-std=c++17 HAVE_FLAG_STD_CXX17)
if(HAVE_FLAG_STD_CXX17)
add_compile_options("-std=c++17")
else()
check_cxx_compiler_flag(-std=c++1z HAVE_FLAG_STD_CXX1Z)
if(HAVE_FLAG_STD_CXX1Z)
add_compile_options("-std=c++1z")
endif()
endif()
endif()
endif()
else()
set(CMAKE_CXX_STANDARD 17 PARENT_SCOPE)
set(CMAKE_CXX_EXTENSIONS YES PARENT_SCOPE)
endif()
endif()
endfunction()
# cmake-format: off
if(LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxSE" AND
LSB_CODENAME STREQUAL "smolensk" AND
LSB_RELEASE STREQUAL "1.5")
# cmake-format: on
cmlib_set_cxx_standard(11)
set(_CMAKE_TOOLCHAIN_PREFIX "x86_64-linux-gnu-") set(_CMAKE_TOOLCHAIN_PREFIX "x86_64-linux-gnu-")
set(_CMAKE_TOOLCHAIN_SUFFIX "-4.7") set(_CMAKE_TOOLCHAIN_SUFFIX "-4.7")
set(_CMAKE_TOOLCHAIN_LOCATION} "/usr/bin") set(_CMAKE_TOOLCHAIN_LOCATION} "/usr/bin")
else() else()
cmlib_set_cxx_standard(17)
# -Wshadow gives a lot of false positives with GCC 4.7.2 in Astra Linux 1.5 # -Wshadow gives a lot of false positives with GCC 4.7.2 in Astra Linux 1.5
if(CMAKE_CXX_COMPILER_IS_GCC) if(CMAKE_CXX_COMPILER_IS_GCC)
check_enable_cxx_flag(-Wshadow) check_enable_cxx_flag(-Wshadow)
@@ -33,10 +82,6 @@ endif()
# Common configuration for GCC, clang and Intel. # Common configuration for GCC, clang and Intel.
if(CMAKE_CXX_COMPILER_IS_CLANG OR CMAKE_CXX_COMPILER_IS_INTEL OR CMAKE_CXX_COMPILER_IS_GCC) if(CMAKE_CXX_COMPILER_IS_CLANG OR CMAKE_CXX_COMPILER_IS_INTEL OR CMAKE_CXX_COMPILER_IS_GCC)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS YES)
if(CMLIB_WARNING_FLAGS AND CMAKE_BUILD_TYPE STREQUAL "Debug") if(CMLIB_WARNING_FLAGS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
check_enable_cxx_flag(-Wall) check_enable_cxx_flag(-Wall)
check_enable_cxx_flag(-Wextra) check_enable_cxx_flag(-Wextra)

13
CMLibDebugOutput.cmake Normal file
View File

@@ -0,0 +1,13 @@
# По умолчанию отключена отладочная печать
# (если не включена явно программистом)
option(CMLIB_DEBUG_OUTPUT "Enable debug output" OFF)
option(CMLIB_INFO_OUTPUT "Enable info output" OFF)
option(CMLIB_WARNING_OUTPUT "Enable warning output" OFF)
# Если сборка производится в режиме для отладки,
# то включаются флаги для разрешения отладочной печати
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMLIB_DEBUG_OUTPUT ON CACHE BOOL "" FORCE)
set(CMLIB_INFO_OUTPUT ON CACHE BOOL "" FORCE)
set(CMLIB_WARNING_OUTPUT ON CACHE BOOL "" FORCE)
endif()

View File

@@ -0,0 +1,45 @@
include(ExternalProject)
if(CMAKE_BUILD_TYPE)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
endif()
if(CMAKE_C_COMPILER)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER})
endif()
if(CMAKE_C_FLAGS)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -E env "CFLAGS=${CMAKE_C_FLAGS}")
endif()
if(CMAKE_CPP_COMPILER)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -DCMAKE_CPP_COMPILER=${CMAKE_CPP_COMPILER})
endif()
if(CMAKE_CXX_FLAGS)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -E env "CXXFLAGS=${CMAKE_CXX_FLAGS}")
endif()
if(CMAKE_Fortran_COMPILER)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER})
endif()
if(CMAKE_Fortran_FLAGS)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -E env "FFLAGS=${CMAKE_Fortran_FLAGS}")
endif()
if(CMAKE_INSTALL_PREFIX)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR})
endif()
if(CMAKE_PREFIX_PATH)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH})
endif()
if(Qt5_DIR)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -DQt5_DIR=${Qt5_DIR})
endif()
if(Qt5Core_DIR)
list(APPEND CMLIB_EXT_PROJ_DEFAULT_ARGS -DQt5Core_DIR=${Qt5Core_DIR})
endif()

View File

@@ -4,20 +4,26 @@ function(add_format_sources target)
if(NOT TARGET format-sources) if(NOT TARGET format-sources)
add_custom_target(format-sources) add_custom_target(format-sources)
endif() endif()
if(NOT TARGET check-format-sources)
add_custom_target(check-format-sources)
endif()
if(NOT TARGET doc-add-comments) if(NOT TARGET doc-add-comments)
add_custom_target(doc-add-comments) add_custom_target(doc-add-comments)
endif() endif()
find_program(UNCRUSTIFY_EXE NAMES uncrustify) find_program(UNCRUSTIFY_EXE NAMES uncrustify)
if(UNCRUSTIFY_EXE) if(UNCRUSTIFY_EXE)
list(APPEND UNCRUSTIFY_OPTS -lCPP --replace --no-backup)
if(EXISTS ${CMAKE_SOURCE_DIR}/cmake/etc/uncrustify/default.cfg) if(EXISTS ${CMAKE_SOURCE_DIR}/cmake/etc/uncrustify/default.cfg)
list(APPEND UNCRUSTIFY_OPTS -c ${CMAKE_SOURCE_DIR}/cmake/etc/uncrustify/default.cfg) list(APPEND UNCRUSTIFY_OPTS -c ${CMAKE_SOURCE_DIR}/cmake/etc/uncrustify/default.cfg)
endif() endif()
# cmake-format: off # cmake-format: off
add_custom_target(format-sources-uncrustify-${target} COMMAND ${UNCRUSTIFY_EXE} ${UNCRUSTIFY_OPTS} add_custom_target(check-format-sources-uncrustify-${target} COMMAND ${UNCRUSTIFY_EXE}
--mtime ${_sources}) ${UNCRUSTIFY_OPTS} --check ${_sources})
add_custom_target(doc-add-comments-uncrustify-${target} COMMAND ${UNCRUSTIFY_EXE} ${UNCRUSTIFY_OPTS} list(APPEND UNCRUSTIFY_OPTS --replace --no-backup)
add_custom_target(format-sources-uncrustify-${target} COMMAND ${UNCRUSTIFY_EXE}
${UNCRUSTIFY_OPTS} --mtime ${_sources})
add_custom_target(doc-add-comments-uncrustify-${target} COMMAND ${UNCRUSTIFY_EXE}
${UNCRUSTIFY_OPTS}
--set cmt_insert_file_header=fileheader.txt --set cmt_insert_file_header=fileheader.txt
--set cmt_insert_file_footer=filefooter.txt --set cmt_insert_file_footer=filefooter.txt
--set cmt_insert_func_header=funcheader.txt --set cmt_insert_func_header=funcheader.txt
@@ -25,6 +31,7 @@ function(add_format_sources target)
--set cmt_insert_before_ctor_dtor=true ${_sources}) --set cmt_insert_before_ctor_dtor=true ${_sources})
# cmake-format: on # cmake-format: on
add_dependencies(format-sources format-sources-uncrustify-${target}) add_dependencies(format-sources format-sources-uncrustify-${target})
add_dependencies(check-format-sources check-format-sources-uncrustify-${target})
add_dependencies(doc-add-comments doc-add-comments-uncrustify-${target}) add_dependencies(doc-add-comments doc-add-comments-uncrustify-${target})
else() else()
message(STATUS "CMLIB warning:") message(STATUS "CMLIB warning:")

View File

@@ -0,0 +1,25 @@
if(${CMAKE_VERSION} VERSION_GREATER "3.6.0")
include(WriteCompilerDetectionHeader)
set(OUTPUT_FILE ${CMAKE_BINARY_DIR}/include/compiler_features.hpp)
if(CMLIB_GENERATED_HEADERS_PATH)
set(OUTPUT_FILE ${CMLIB_GENERATED_HEADERS_PATH}/compiler_features.hpp)
endif()
write_compiler_detection_header(
FILE ${OUTPUT_FILE}
PREFIX ${CMLIB_PROJECT_NAME_CANONICAL}
COMPILERS GNU Clang MSVC Intel
FEATURES
cxx_nullptr
cxx_override
cxx_alignas
cxx_alignof
cxx_attributes
cxx_auto_type
cxx_constexpr
cxx_digit_separators
cxx_range_for)
unset(OUTPUT_FILE)
endif()

View File

@@ -1,4 +1,4 @@
function(cmlib_config_hpp_generate) function(cmlib_generate_private_config_hpp)
include(CMLibLargeFiles) include(CMLibLargeFiles)
cmlib_test_large_files(HAVE_LARGEFILES) cmlib_test_large_files(HAVE_LARGEFILES)

View File

@@ -3,3 +3,12 @@ function(canonical_string INV OUTV)
string(REGEX REPLACE "[ -]" "_" _arg_fixed ${_arg_uppercase}) string(REGEX REPLACE "[ -]" "_" _arg_fixed ${_arg_uppercase})
set(${OUTV} ${_arg_fixed} PARENT_SCOPE) set(${OUTV} ${_arg_fixed} PARENT_SCOPE)
endfunction() endfunction()
# Добавление общего префикса ко всем переменным в списке
function(list_transform_prepend var prefix)
set(temp "")
foreach(f ${${var}})
list(APPEND temp "${prefix}${f}")
endforeach()
set(${var} "${temp}" PARENT_SCOPE)
endfunction()

View File

@@ -1,11 +1,27 @@
if (NOT CMLIB_THEME_NAME)
set(CMLIB_THEME_NAME "default")
endif()
canonical_string(${CMLIB_ORGANIZATION_NAME} CMLIB_ORGANIZATION_NAME_CANONICAL)
canonical_string(${PROJECT_NAME} CMLIB_PROJECT_NAME_CANONICAL) canonical_string(${PROJECT_NAME} CMLIB_PROJECT_NAME_CANONICAL)
canonical_string(${ORGANIZATION_NAME} CMLIB_ORGANIZATION_NAME_CANONICAL) canonical_string(${CMLIB_THEME_NAME} CMLIB_THEME_NAME_CANONICAL)
string(TOLOWER ${CMLIB_ORGANIZATION_NAME_CANONICAL} CMLIB_ORGANIZATION_NAME_LOWER) string(TOLOWER ${CMLIB_ORGANIZATION_NAME_CANONICAL} CMLIB_ORGANIZATION_NAME_LOWER)
string(TOLOWER ${CMLIB_PROJECT_NAME_CANONICAL} CMLIB_PROJECT_NAME_LOWER) string(TOLOWER ${CMLIB_PROJECT_NAME_CANONICAL} CMLIB_PROJECT_NAME_LOWER)
string(TOLOWER ${CMLIB_THEME_NAME_CANONICAL} CMLIB_THEME_NAME_LOWER)
string(TOUPPER ${CMLIB_ORGANIZATION_NAME_CANONICAL} CMLIB_ORGANIZATION_NAME_UPPER) string(TOUPPER ${CMLIB_ORGANIZATION_NAME_CANONICAL} CMLIB_ORGANIZATION_NAME_UPPER)
string(TOUPPER ${CMLIB_PROJECT_NAME_CANONICAL} CMLIB_PROJECT_NAME_UPPER) string(TOUPPER ${CMLIB_PROJECT_NAME_CANONICAL} CMLIB_PROJECT_NAME_UPPER)
string(TOUPPER ${CMLIB_THEME_NAME_CANONICAL} CMLIB_THEME_NAME_UPPER)
option(CMLIB_USE_DEVELOPMENT_INSTALL_PREFIX "Auto-generated output prefix for development installation" OFF)
if (CMLIB_USE_DEVELOPMENT_INSTALL_PREFIX)
if (CMLIB_THEME_NAME_LOWER STREQUAL "default")
set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/_output" CACHE PATH "" FORCE)
else()
set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/_output/${CMLIB_THEME_NAME_LOWER}" CACHE PATH "" FORCE)
endif()
endif()
# CMLIB_MODULE_DIR # CMLIB_MODULE_DIR
foreach(_m ${CMAKE_MODULE_PATH}) foreach(_m ${CMAKE_MODULE_PATH})

15
CMLibPkgConfig.cmake Normal file
View File

@@ -0,0 +1,15 @@
function(generate_pkgconfig library_name)
set(options)
set(oneValueArgs COMPONENT INSTALL_LIBRARY)
set(multiValueArgs)
cmake_parse_arguments(_PKG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(${_PKG_INSTALL_LIBRARY})
configure_file(${CMLIB_MODULE_DIR}/pc/lib.pc.in ${CMAKE_BINARY_DIR}/${library_name}.pc)
else()
configure_file(${CMLIB_MODULE_DIR}/pc/lib-header-only.pc.in ${CMAKE_BINARY_DIR}/${library_name}.pc)
endif()
install(FILES ${CMAKE_BINARY_DIR}/${library_name}.pc COMPONENT ${_PKG_COMPONENT}
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
endfunction()

View File

@@ -1,19 +1,21 @@
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/cmake/etc/Variables.cmake") #
message(FATAL_ERROR "Required file cmake/etc/Variables.cmake does not exist") # Обязательные переменные, значения которым необходимо присвоить в файле CMakeLists.txt
# до подключения CMLib, либо передать из командной строки через ключ -D
#
if(NOT CMLIB_ORGANIZATION_NAME)
message(FATAL_ERROR "Required variable CMLIB_ORGANIZATION_NAME is not defined")
endif() endif()
include("${CMAKE_SOURCE_DIR}/cmake/etc/Variables.cmake") if(NOT CMLIB_AUTHOR_NAME)
message(FATAL_ERROR "Required variable CMLIB_AUTHOR_NAME is not defined")
if(NOT ORGANIZATION_NAME)
message(FATAL_ERROR "Required variable ORGANIZATION_NAME is not defined")
endif() endif()
set(CPACK_PACKAGE_VENDOR ${ORGANIZATION_NAME}) if(NOT CMLIB_AUTHOR_EMAIL)
message(FATAL_ERROR "Required variable CMLIB_AUTHOR_EMAIL is not defined")
if(NOT CPACK_PACKAGE_CONTACT)
message(FATAL_ERROR "Required variable CPACK_PACKAGE_CONTACT is not defined")
endif() endif()
set(CPACK_PACKAGE_CONTACT "${CMLIB_AUTHOR_NAME} <${CMLIB_AUTHOR_EMAIL}>" CACHE STRING "")
if(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY) if(NOT CMLIB_DESCRIPTION)
message(FATAL_ERROR "Required variable CPACK_PACKAGE_DESCRIPTION_SUMMARY is not defined") message(FATAL_ERROR "Required variable CMLIB_DESCRIPTION is not defined")
endif() endif()
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${CMLIB_DESCRIPTION} CACHE STRING "")

View File

@@ -51,6 +51,7 @@ set(CPACK_SOURCE_IGNORE_FILES
obj.*/ obj.*/
_build/ _build/
_output/ _output/
files/log
files/var files/var
CMakeLists.txt.user CMakeLists.txt.user
~$ ~$

View File

@@ -9,7 +9,7 @@
#if defined (CMLIB_ORGANIZATION_NAME) #if defined (CMLIB_ORGANIZATION_NAME)
#error "Duplicate definition of macros CMLIB_ORGANIZATION_NAME" #error "Duplicate definition of macros CMLIB_ORGANIZATION_NAME"
#else #else
#define CMLIB_ORGANIZATION_NAME "@ORGANIZATION_NAME@" #define CMLIB_ORGANIZATION_NAME "@CMLIB_ORGANIZATION_NAME@"
#endif #endif
#if defined (CMLIB_ORGANIZATION_NAME_LOWER) #if defined (CMLIB_ORGANIZATION_NAME_LOWER)
@@ -42,6 +42,42 @@
#define CMLIB_PROJECT_NAME_UPPER "@CMLIB_PROJECT_NAME_UPPER@" #define CMLIB_PROJECT_NAME_UPPER "@CMLIB_PROJECT_NAME_UPPER@"
#endif #endif
#if defined (CMLIB_THEME_NAME)
#error "Duplicate definition of macros CMLIB_THEME_NAME"
#else
#define CMLIB_THEME_NAME "@CMLIB_THEME_NAME@"
#endif
#if defined (CMLIB_THEME_NAME_LOWER)
#error "Duplicate definition of macros CMLIB_THEME_NAME_LOWER"
#else
#define CMLIB_THEME_NAME_LOWER "@CMLIB_THEME_NAME_LOWER@"
#endif
#if defined (CMLIB_THEME_NAME_UPPER)
#error "Duplicate definition of macros CMLIB_THEME_NAME_UPPER"
#else
#define CMLIB_THEME_NAME_UPPER "@CMLIB_THEME_NAME_UPPER@"
#endif
#if defined (CMLIB_AUTHOR_NAME)
#error "Duplicate definition of macros CMLIB_AUTHOR_NAME"
#else
#define CMLIB_AUTHOR_NAME "@CMLIB_AUTHOR_NAME@"
#endif
#if defined (CMLIB_AUTHOR_EMAIL)
#error "Duplicate definition of macros CMLIB_AUTHOR_EMAIL"
#else
#define CMLIB_AUTHOR_EMAIL "@CMLIB_AUTHOR_EMAIL@"
#endif
#if defined (CMLIB_DESCRIPTION)
#error "Duplicate definition of macros CMLIB_DESCRIPTION"
#else
#define CMLIB_DESCRIPTION "@CMLIB_DESCRIPTION@"
#endif
#if defined (CMLIB_BUILD_TYPE) #if defined (CMLIB_BUILD_TYPE)
#error "Duplicate definition of macros CMLIB_BUILD_TYPE" #error "Duplicate definition of macros CMLIB_BUILD_TYPE"
#else #else

8
hpp/pvs_studio.hpp.in Normal file
View File

@@ -0,0 +1,8 @@
#ifndef PVS_STUDIO_HPP_
#define PVS_STUDIO_HPP_
#pragma once
//-V813_MINSIZE=33
#endif // PVS_STUDIO_HPP_

11
pc/lib-header-only.pc.in Normal file
View File

@@ -0,0 +1,11 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=@CMAKE_INSTALL_PREFIX@
includedir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@
Name: @library_name@
Description: @library_name@ library
Version: @PROJECT_VERSION@
Requires:
Cflags: -I@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@

View File

@@ -3,11 +3,11 @@ exec_prefix=@CMAKE_INSTALL_PREFIX@
libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
includedir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@ includedir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@
Name: @current_target@ Name: @library_name@
Description: @current_target@ library Description: @library_name@ library
Version: @PROJECT_VERSION@ Version: @PROJECT_VERSION@
Requires: Requires:
Libs: -L@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ -l@current_target@ Libs: -L@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ -l@library_name@
Cflags: -I@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@ Cflags: -I@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@

View File

@@ -1136,6 +1136,11 @@ function (cotire_parse_includes _language _scanOutput _ignoredIncludeDirs _honor
string (REPLACE ";" "\\;" _scanOutput "${_scanOutput}") string (REPLACE ";" "\\;" _scanOutput "${_scanOutput}")
# then separate lines # then separate lines
string (REGEX REPLACE "\n" ";" _scanOutput "${_scanOutput}") string (REGEX REPLACE "\n" ";" _scanOutput "${_scanOutput}")
if ("${_language}" STREQUAL "CXX")
# Fix clang9's libc++ errno
message (STATUS "replacing <stdlib.h> with <cstdlib>")
string (REGEX REPLACE "include_next" "include" _scanOutput "${_scanOutput}")
endif()
list (LENGTH _scanOutput _len) list (LENGTH _scanOutput _len)
# remove duplicate lines to speed up parsing # remove duplicate lines to speed up parsing
list (REMOVE_DUPLICATES _scanOutput) list (REMOVE_DUPLICATES _scanOutput)