0.7.0 (рефакторинг)
This commit is contained in:
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
# Создание динамической библиотеки из объектной библиотеки
|
||||
function(myx_cmake_add_shared_library target)
|
||||
myx_cmake_canonical_string(${target} _ctarget)
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
# Создание статической библиотеки из объектной библиотеки
|
||||
function(myx_cmake_add_static_library target)
|
||||
myx_cmake_canonical_string(${target} _ctarget)
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0057 NEW) # IN_LIST operator
|
||||
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
# Общие настройки для пакета: организация, автор, версия
|
||||
set(CPACK_PACKAGE_VENDOR ${MYX_CMAKE_ORGANIZATION_NAME_LOWER} CACHE STRING "")
|
||||
set(CPACK_PACKAGE_NAME ${MYX_CMAKE_PROJECT_NAME_LOWER} CACHE STRING "")
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
set(CLANG_APPLY_REPLACEMENTS_NAMES clang-apply-replacements)
|
||||
foreach(V RANGE 9 15)
|
||||
list(INSERT CLANG_APPLY_REPLACEMENTS_NAMES 0 "clang-apply-replacements-${V}")
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
set(CLANG_CHECK_NAMES clang-check)
|
||||
foreach(V RANGE 9 15)
|
||||
list(INSERT CLANG_CHECK_NAMES 0 "clang-check-${V}")
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
set(CLANG_TIDY_NAMES clang-tidy)
|
||||
foreach(V RANGE 9 15)
|
||||
list(INSERT CLANG_TIDY_NAMES 0 "clang-tidy-${V}")
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
find_program(CLAZY_EXE NAMES clazy-standalone)
|
||||
|
||||
if(CLAZY_EXE AND CLANG_APPLY_REPLACEMENTS_EXE)
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
if(CMAKE_EXPORT_COMPILE_COMMANDS)
|
||||
include(PVS-Studio)
|
||||
find_program(PVS_STUDIO_ANALYZER_EXE pvs-studio-analyzer)
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
option(MYX_CMAKE_CODE_COVERAGE "MyxCMake: enable code coverage" OFF)
|
||||
|
||||
if(MYX_CMAKE_CODE_COVERAGE)
|
||||
|
@ -1,3 +1,7 @@
|
||||
# Обёртки для функций вывода сообщений
|
||||
|
||||
include_guard(GLOBAL)
|
||||
|
||||
if(DEFINED ENV{TERM} AND UNIX)
|
||||
string(ASCII 27 Esc)
|
||||
set(MyxCMakeColorReset "${Esc}[m")
|
||||
|
@ -1,20 +1,26 @@
|
||||
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
|
||||
cmake_minimum_required(VERSION 3.6 FATAL_ERROR)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
include(MyxCMakeCompatIncludeGuard)
|
||||
include(MyxCMakeLSBInfo)
|
||||
include(MyxCMakeCompat)
|
||||
|
||||
# Additional functions
|
||||
include(MyxCMakeHighPrecisionMath)
|
||||
include(MyxCMakeQtTranslation)
|
||||
include(MyxCMakeRemoveFlag)
|
||||
include(MyxCMakeWriteCompilerDetectionHeader)
|
||||
|
||||
include(MyxCMakeIncludeSystemModules)
|
||||
include(MyxCMakeCurrentDate)
|
||||
include(MyxCMakeColoredMessages)
|
||||
include(MyxCMakeCheckPaths)
|
||||
|
||||
link_directories(${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
|
||||
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${CMAKE_CXX_SOURCE_FILE_EXTENSIONS};tpp;tcc)
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
include(MyxCMakeDirectoriesGuards)
|
||||
include(MyxCMakeGlobalFunctions)
|
||||
include(MyxCMakeProjectVersion)
|
||||
include(MyxCMakeRequiredVariables)
|
||||
include(MyxCMakeGlobalFunctions)
|
||||
include(MyxCMakeGlobalVariables)
|
||||
include(MyxCMakeDates)
|
||||
include(MyxCMakeLSBInfo)
|
||||
include(MyxCMakePaths)
|
||||
include(MyxCMakeLargeFiles)
|
||||
include(MyxCMakeGeneratePrivateConfigHeader)
|
||||
include(MyxCMakeGenerateGitInfoHeader)
|
||||
include(MyxCMakeCompiler)
|
||||
include(MyxCMakeCompilerFlags)
|
||||
include(MyxCMakeDistCC)
|
||||
@ -28,8 +34,10 @@ include(MyxCMakeCodeAnalyzeClangCheck)
|
||||
include(MyxCMakeCodeAnalyzeClangTidy)
|
||||
include(MyxCMakeCodeAnalyzeClazy)
|
||||
include(MyxCMakeCodeAnalyzePvsStudio)
|
||||
|
||||
include(MyxCMakeCodeCoverage)
|
||||
include(MyxCMakeFormatSources)
|
||||
include(MyxCMakeCommonPaths)
|
||||
include(MyxCMakeCommonTargetProperties)
|
||||
include(MyxCMakeAddSharedLibrary)
|
||||
include(MyxCMakeAddStaticLibrary)
|
||||
@ -40,13 +48,3 @@ include(MyxCMakeDocBreathe)
|
||||
include(MyxCMakeExternalProject)
|
||||
include(MyxCMakeCPack)
|
||||
include(MyxCMakeUninstall)
|
||||
|
||||
# Additional functions
|
||||
include(MyxCMakeGenerateGitInfoHeader)
|
||||
include(MyxCMakeGeneratePrivateConfigHeader)
|
||||
include(MyxCMakeHighPrecisionMath)
|
||||
include(MyxCMakeLargeFiles)
|
||||
include(MyxCMakeQtTranslation)
|
||||
include(MyxCMakeRemoveFlag)
|
||||
include(MyxCMakeWriteCompilerDetectionHeader)
|
||||
|
||||
|
4
MyxCMake/modules/MyxCMakeCommonPaths.cmake
Normal file
4
MyxCMake/modules/MyxCMakeCommonPaths.cmake
Normal file
@ -0,0 +1,4 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
link_directories(${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
|
@ -1,9 +1,14 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_common_target_properties target)
|
||||
if(NOT TARGET ${target})
|
||||
myx_cmake_message_error("MyxCMake: Target ${target} does not exists.")
|
||||
endif()
|
||||
get_target_property(_target_type ${target} TYPE)
|
||||
|
||||
set_target_properties(${target} PROPERTIES USE_FOLDERS ON)
|
||||
|
||||
set(__visibility PUBLIC)
|
||||
if(_target_type STREQUAL INTERFACE_LIBRARY)
|
||||
set(__visibility INTERFACE)
|
||||
|
@ -1,5 +1,5 @@
|
||||
if(MYX_CMAKE_LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxSE" OR
|
||||
MYX_CMAKE_LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxCE")
|
||||
MYX_CMAKE_LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxCE")
|
||||
set(CMAKE_37_MODULES_DIR "/usr/share/cmake-3.7/Modules")
|
||||
if(IS_DIRECTORY ${CMAKE_37_MODULES_DIR})
|
||||
if(NOT ${CMAKE_37_MODULES_DIR} IN_LIST CMAKE_MODULE_PATH)
|
13
MyxCMake/modules/MyxCMakeCompatIncludeGuard.cmake
Normal file
13
MyxCMake/modules/MyxCMakeCompatIncludeGuard.cmake
Normal file
@ -0,0 +1,13 @@
|
||||
# Защита для однократного включения файла *.cmake
|
||||
# Функция include_guard() реализована в версии 3.10
|
||||
# Макрос реализован для обратной совместимости
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.10.0")
|
||||
macro(include_guard)
|
||||
if (MYX_CMAKE_INCLUDED_${CMAKE_CURRENT_LIST_FILE})
|
||||
return()
|
||||
endif()
|
||||
set(MYX_CMAKE_INCLUDED_${CMAKE_CURRENT_LIST_FILE} TRUE)
|
||||
endmacro()
|
||||
endif()
|
||||
|
@ -1,3 +1,5 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
# C compiler name
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "Intel")
|
||||
set(CMAKE_C_COMPILER_IS_INTEL ON)
|
||||
@ -24,26 +26,25 @@ endif()
|
||||
|
||||
# Предпочтительные пути к утилитам для компоновки
|
||||
if(CMAKE_CXX_COMPILER_IS_GCC)
|
||||
# cmake-format: off
|
||||
# Astra Linux Smolensk 1.5
|
||||
if(MYX_CMAKE_LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxSE" AND
|
||||
MYX_CMAKE_LSB_CODENAME STREQUAL "smolensk" AND
|
||||
MYX_CMAKE_LSB_RELEASE STREQUAL "1.5")
|
||||
if(MYX_CMAKE_LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxSE" AND
|
||||
MYX_CMAKE_LSB_CODENAME STREQUAL "smolensk" AND
|
||||
MYX_CMAKE_LSB_RELEASE_VERSION STREQUAL "1.5")
|
||||
find_program(CMAKE_GCC_AR NAMES "/usr/bin/x86_64-linux-gnu-gcc-ar-4.7")
|
||||
find_program(CMAKE_GCC_NM NAMES "/usr/bin/x86_64-linux-gnu-gcc-nm-4.7")
|
||||
find_program(CMAKE_GCC_RANLIB NAMES "/usr/bin/x86_64-linux-gnu-gcc-ranlib-4.7")
|
||||
# Elbrus E2K
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "e2k")
|
||||
find_program(CMAKE_GCC_AR
|
||||
NAMES "/usr/${CMAKE_SYSTEM_PROCESSOR}-linux/bin/ar")
|
||||
find_program(CMAKE_GCC_NM
|
||||
NAMES "/usr/${CMAKE_SYSTEM_PROCESSOR}-linux/bin/nm")
|
||||
find_program(CMAKE_GCC_RANLIB
|
||||
NAMES "/usr/${CMAKE_SYSTEM_PROCESSOR}-linux/bin/ranlib")
|
||||
find_program(CMAKE_GCC_AR NAMES "/usr/${CMAKE_SYSTEM_PROCESSOR}-linux/bin/ar")
|
||||
find_program(CMAKE_GCC_NM NAMES "/usr/${CMAKE_SYSTEM_PROCESSOR}-linux/bin/nm")
|
||||
find_program(CMAKE_GCC_RANLIB NAMES "/usr/${CMAKE_SYSTEM_PROCESSOR}-linux/bin/ranlib")
|
||||
else()
|
||||
find_program(CMAKE_GCC_AR NAMES "gcc-ar" "ar")
|
||||
find_program(CMAKE_GCC_NM NAMES "gcc-nm" "nm")
|
||||
find_program(CMAKE_GCC_RANLIB NAMES "gcc-ranlib" "ranlib")
|
||||
endif()
|
||||
# cmake-format: on
|
||||
|
||||
if(CMAKE_GCC_AR)
|
||||
set(CMAKE_AR ${CMAKE_GCC_AR} CACHE STRING "" FORCE)
|
||||
|
@ -1,3 +1,5 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
# based on https://github.com/bluescarni/yacma
|
||||
|
||||
include(CheckCXXCompilerFlag)
|
||||
@ -7,13 +9,14 @@ macro(CHECK_ENABLE_CXX_FLAG flag)
|
||||
check_cxx_compiler_flag("${flag}" CHECK_CXX_FLAG)
|
||||
unset(CMAKE_REQUIRED_QUIET)
|
||||
|
||||
# cmake-format: off
|
||||
if(CHECK_CXX_FLAG)
|
||||
myx_cmake_message_notice("'${flag}': flag is supported.")
|
||||
string(CONCAT _MYX_CMAKE_DETECTED_CXX_FLAGS
|
||||
"${_MYX_CMAKE_DETECTED_CXX_FLAGS} ${flag}")
|
||||
string(CONCAT _MYX_CMAKE_DETECTED_CXX_FLAGS "${_MYX_CMAKE_DETECTED_CXX_FLAGS} ${flag}")
|
||||
else()
|
||||
myx_cmake_message_status("'${flag}': flag is NOT supported.")
|
||||
endif()
|
||||
# cmake-format: on
|
||||
# NOTE: check_cxx_compiler stores variables in the cache.
|
||||
unset(CHECK_CXX_FLAG CACHE)
|
||||
endmacro()
|
||||
@ -24,40 +27,32 @@ macro(CHECK_ENABLE_DEBUG_CXX_FLAG flag)
|
||||
check_cxx_compiler_flag("${flag}" CHECK_CXX_FLAG_DEBUG)
|
||||
unset(CMAKE_REQUIRED_QUIET)
|
||||
|
||||
# cmake-format: off
|
||||
if(CHECK_CXX_FLAG_DEBUG)
|
||||
myx_cmake_message_notice("'${flag}': debug flag is supported.")
|
||||
string(CONCAT _MYX_CMAKE_DETECTED_CXX_FLAGS_DEBUG
|
||||
"${_MYX_CMAKE_DETECTED_CXX_FLAGS_DEBUG} ${flag}")
|
||||
string(CONCAT _MYX_CMAKE_DETECTED_CXX_FLAGS_DEBUG "${_MYX_CMAKE_DETECTED_CXX_FLAGS_DEBUG} ${flag}")
|
||||
else()
|
||||
myx_cmake_message_status("'${flag}': debug flag is NOT supported.")
|
||||
endif()
|
||||
# cmake-format: on
|
||||
# NOTE: check_cxx_compiler stores variables in the cache.
|
||||
unset(CHECK_CXX_FLAG_DEBUG CACHE)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
function(myx_cmake_set_cxx_standard version)
|
||||
# cmake-format: off
|
||||
# Выбор стандарта по умолчанию (можно переопределить в проекте)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED
|
||||
YES
|
||||
PARENT_SCOPE)
|
||||
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)
|
||||
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)
|
||||
set(CMAKE_CXX_STANDARD 14 PARENT_SCOPE)
|
||||
set(CMAKE_CXX_EXTENSIONS YES PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
if(version EQUAL 17)
|
||||
@ -82,14 +77,11 @@ function(myx_cmake_set_cxx_standard version)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
set(CMAKE_CXX_STANDARD
|
||||
17
|
||||
PARENT_SCOPE)
|
||||
set(CMAKE_CXX_EXTENSIONS
|
||||
YES
|
||||
PARENT_SCOPE)
|
||||
set(CMAKE_CXX_STANDARD 17 PARENT_SCOPE)
|
||||
set(CMAKE_CXX_EXTENSIONS YES PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
# cmake-format: on
|
||||
endfunction()
|
||||
|
||||
if(NOT MYX_CMAKE_CXX_FLAGS_AUTODETECTION_DONE)
|
||||
@ -210,9 +202,9 @@ if(NOT MYX_CMAKE_CXX_FLAGS_AUTODETECTION_DONE)
|
||||
endif()
|
||||
|
||||
# cmake-format: off
|
||||
if(MYX_CMAKE_LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxSE" AND
|
||||
MYX_CMAKE_LSB_CODENAME STREQUAL "smolensk" AND
|
||||
MYX_CMAKE_LSB_RELEASE STREQUAL "1.5")
|
||||
if(MYX_CMAKE_LSB_DISTRIBUTOR_ID STREQUAL "AstraLinuxSE" AND
|
||||
MYX_CMAKE_LSB_CODENAME STREQUAL "smolensk" AND
|
||||
MYX_CMAKE_LSB_RELEASE_VERSION STREQUAL "1.5")
|
||||
# cmake-format: on
|
||||
myx_cmake_set_cxx_standard(11)
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "e2k")
|
||||
@ -227,14 +219,10 @@ if(NOT MYX_CMAKE_CXX_FLAGS_AUTODETECTION_DONE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# cmake-format: off
|
||||
# Set the cache variables.
|
||||
set(MYX_CMAKE_DETECTED_CXX_FLAGS
|
||||
"${_MYX_CMAKE_DETECTED_CXX_FLAGS}"
|
||||
CACHE INTERNAL "")
|
||||
set(MYX_CMAKE_DETECTED_CXX_FLAGS_DEBUG
|
||||
"${_MYX_CMAKE_DETECTED_CXX_FLAGS_DEBUG}"
|
||||
CACHE INTERNAL "")
|
||||
set(MYX_CMAKE_CXX_FLAGS_AUTODETECTION_DONE
|
||||
YES
|
||||
CACHE INTERNAL "")
|
||||
set(MYX_CMAKE_DETECTED_CXX_FLAGS "${_MYX_CMAKE_DETECTED_CXX_FLAGS}" CACHE INTERNAL "")
|
||||
set(MYX_CMAKE_DETECTED_CXX_FLAGS_DEBUG "${_MYX_CMAKE_DETECTED_CXX_FLAGS_DEBUG}" CACHE INTERNAL "")
|
||||
set(MYX_CMAKE_CXX_FLAGS_AUTODETECTION_DONE YES CACHE INTERNAL "")
|
||||
# cmake-format: on
|
||||
endif()
|
||||
|
@ -1,3 +1,5 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
if(NOT MYX_CMAKE_TODAY)
|
||||
if(WIN32)
|
||||
execute_process(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE MYX_CMAKE_TODAY)
|
||||
@ -15,4 +17,3 @@ if(NOT MYX_CMAKE_YEAR)
|
||||
endif()
|
||||
string(REGEX REPLACE "(..)/(..)/(....).*" "\\3" MYX_CMAKE_YEAR ${MYX_CMAKE_YEAR})
|
||||
endif()
|
||||
|
@ -1,10 +1,13 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
# По умолчанию отключена отладочная печать (если не включена явно программистом)
|
||||
option(MYX_CMAKE_DEBUG_OUTPUT "Enable debug output" OFF)
|
||||
option(MYX_CMAKE_INFO_OUTPUT "Enable info output" OFF)
|
||||
option(MYX_CMAKE_WARNING_OUTPUT "Enable warning output" OFF)
|
||||
|
||||
# Если сборка производится в режиме для отладки, то включаются флаги для
|
||||
# разрешения отладочной печати
|
||||
# Если сборка производится в режиме для отладки,
|
||||
# то включаются флаги для разрешения отладочной печати
|
||||
if(CMAKE_BUILD_TYPE STREQUAL Debug)
|
||||
set(MYX_CMAKE_DEBUG_OUTPUT ON CACHE BOOL "" FORCE)
|
||||
set(MYX_CMAKE_INFO_OUTPUT ON CACHE BOOL "" FORCE)
|
||||
|
@ -1,9 +1,10 @@
|
||||
# Запись результатов сборки проекта внутрь иерархии каталогов с исходными
|
||||
# текстами приводит к засорению файлами формируемыми на этапе сборки, которые
|
||||
# затрудняют разработку, поиск в оригинальных файлах и мешают ориентироваться в
|
||||
# проекте. При работе с несколькими типами сборки, например, отладка и выпуск,
|
||||
# появляется необходимость корректного полного удаления результатов предыдущего
|
||||
# варианта.
|
||||
# Запись результатов сборки проекта внутрь иерархии каталогов с исходными текстами
|
||||
# приводит к засорению файлами формируемыми на этапе сборки, которые затрудняют
|
||||
# разработку, поиск в оригинальных файлах и мешают ориентироваться в проекте.
|
||||
# При работе с несколькими типами сборки, например, отладка и выпуск, появляется
|
||||
# необходимость корректного полного удаления результатов предыдущего варианта.
|
||||
|
||||
include_guard(GLOBAL)
|
||||
|
||||
get_filename_component(_source_realpath "${CMAKE_SOURCE_DIR}" REALPATH)
|
||||
get_filename_component(_binary_realpath "${CMAKE_BINARY_DIR}" REALPATH)
|
@ -1,3 +1,5 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
find_program(DISTCC_EXECUTABLE distcc)
|
||||
mark_as_advanced(DISTCC_EXECUTABLE)
|
||||
if(DISTCC_EXECUTABLE)
|
||||
|
97
MyxCMake/modules/MyxCMakeDocBreathe.cmake
Normal file
97
MyxCMake/modules/MyxCMakeDocBreathe.cmake
Normal file
@ -0,0 +1,97 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_doc_breathe)
|
||||
set(BREATHE_FOUND AUTO CACHE STRING "Enable Breathe documentation generator")
|
||||
set_property(CACHE BREATHE_FOUND PROPERTY STRINGS ON OFF AUTO)
|
||||
|
||||
find_package(Doxygen)
|
||||
find_package(Perl)
|
||||
set(Python_ADDITIONAL_VERSIONS 3.11;3.10;3.9;3.8;3.7;3.6;3.5;3.4;3.3;3.2)
|
||||
find_package(PythonInterp)
|
||||
if(PYTHONINTERP_FOUND)
|
||||
find_package(Sphinx)
|
||||
include(FindPythonModule)
|
||||
find_python_module(breathe)
|
||||
find_python_module(recommonmark)
|
||||
if(DOXYGEN_FOUND
|
||||
AND PERL_FOUND
|
||||
AND PYTHONINTERP_FOUND
|
||||
AND SPHINX_EXECUTABLE
|
||||
AND breathe
|
||||
AND recommonmark)
|
||||
set(BREATHE_FOUND ON CACHE STRING "Breathe documentation generator enabled" FORCE)
|
||||
else()
|
||||
set(BREATHE_FOUND OFF CACHE STRING "Breathe documentation generator disabled" FORCE)
|
||||
endif()
|
||||
else()
|
||||
set(BREATHE_FOUND OFF CACHE STRING "Breathe documentation generator disabled" FORCE)
|
||||
endif()
|
||||
|
||||
set(_target "myx-cmake-doc-breathe-${CMAKE_PROJECT_NAME}")
|
||||
if(NOT BREATHE_FOUND)
|
||||
message(STATUS "MyxCMake:")
|
||||
add_custom_target(${_target} VERBATIM COMMENT " Breathe is not found. Skipping target ${_target} build")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT TARGET ${_target})
|
||||
set(options)
|
||||
set(oneValueArgs COMMENT)
|
||||
set(multiValueArgs)
|
||||
cmake_parse_arguments(_arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
set(BREATHE_DIR ${CMAKE_BINARY_DIR}/doc/breathe)
|
||||
set(BREATHE_CONF_DIR ${BREATHE_DIR}/conf)
|
||||
set(BREATHE_DOXYGEN_DIR ${BREATHE_DIR}/doxygen)
|
||||
set(GENERATE_XML YES)
|
||||
set(GENERATE_HTML NO)
|
||||
set(GENERATE_LATEX NO)
|
||||
set(CONF_FILE ${MYX_CMAKE_FUNCTIONS_DIR}/doc/breathe-conf.py.in)
|
||||
set(DOXY_FILE ${MYX_CMAKE_FUNCTIONS_DIR}/doc/Doxyfile.in)
|
||||
|
||||
configure_file(${CONF_FILE} ${BREATHE_CONF_DIR}/conf.py @ONLY)
|
||||
configure_file(${DOXY_FILE} ${BREATHE_DOXYGEN_DIR}/Doxyfile @ONLY)
|
||||
|
||||
add_custom_target(${_target}
|
||||
VERBATIM
|
||||
DEPENDS ${DOXY_FILE}
|
||||
DEPENDS ${CONF_FILE}
|
||||
COMMAND "${CMAKE_COMMAND}" -E make_directory ${BREATHE_CONF_DIR}
|
||||
COMMAND ${SPHINX_EXECUTABLE} -q -b html -c ${BREATHE_CONF_DIR}
|
||||
-d ${BREATHE_DIR}/cache ${BREATHE_DOXYGEN_DIR} ${BREATHE_DIR}/html
|
||||
COMMENT "Building ${CMAKE_PROJECT_NAME} documentation with Breathe")
|
||||
|
||||
set(INDEX_MD_FILE ${CMAKE_HOME_DIRECTORY}/doc/breathe/index.md.in)
|
||||
if(EXISTS ${INDEX_MD_FILE})
|
||||
configure_file(${INDEX_MD_FILE} ${BREATHE_DOXYGEN_DIR}/index.md @ONLY)
|
||||
file(GLOB MD_FILES ${CMAKE_HOME_DIRECTORY}/doc/breathe/*.md)
|
||||
if(MD_FILES)
|
||||
add_custom_command(TARGET ${_target} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${MD_FILES} ${BREATHE_DOXYGEN_DIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(INDEX_RST_FILE ${CMAKE_HOME_DIRECTORY}/doc/breathe/index.rst.in)
|
||||
if(EXISTS ${INDEX_RST_FILE})
|
||||
configure_file(${INDEX_RST_FILE} ${BREATHE_DOXYGEN_DIR}/index.rst @ONLY)
|
||||
file(GLOB RST_FILES ${CMAKE_SOURCE_DIR}/doc/breathe/*.rst)
|
||||
if(RST_FILES)
|
||||
add_custom_command(TARGET ${target} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${RST_FILES} ${BREATHE_DOXYGEN_DIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT TARGET myx-cmake-doc-breathe)
|
||||
add_custom_target(myx-cmake-doc-breathe)
|
||||
endif()
|
||||
add_dependencies(myx-cmake-doc-breathe ${_target})
|
||||
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/doc/breathe/html
|
||||
COMPONENT doc OPTIONAL
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/breathe)
|
||||
else()
|
||||
message(STATUS "MyxCMake:")
|
||||
add_custom_target(${target} VERBATIM COMMENT " Breathe is not found. Skipping target ${target} build")
|
||||
endif()
|
||||
endfunction()
|
99
MyxCMake/modules/MyxCMakeDocDoxygen.cmake
Normal file
99
MyxCMake/modules/MyxCMakeDocDoxygen.cmake
Normal file
@ -0,0 +1,99 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_doc_doxygen)
|
||||
set(DOXYGEN_FOUND AUTO CACHE STRING "Enable Doxygen documentation generator")
|
||||
set_property(CACHE DOXYGEN_FOUND PROPERTY STRINGS ON OFF AUTO)
|
||||
|
||||
find_package(Doxygen)
|
||||
if(DOXYGEN_FOUND)
|
||||
set(DOXYGEN_FOUND ON CACHE STRING "Doxygen documentation generator enabled" FORCE)
|
||||
else()
|
||||
set(DOXYGEN_FOUND OFF CACHE STRING "Doxygen documentation generator disabled" FORCE)
|
||||
endif()
|
||||
|
||||
set(_target "myx-cmake-doc-doxygen-${CMAKE_PROJECT_NAME}")
|
||||
if(NOT DOXYGEN_FOUND)
|
||||
message(STATUS "MyxCMake:")
|
||||
add_custom_target(${_target} VERBATIM COMMENT " Doxygen is not found. Skipping target ${_target} build")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT TARGET ${_target})
|
||||
set(options)
|
||||
set(oneValueArgs SQLITE LATEX HTML LANGUAGE)
|
||||
set(multiValueArgs)
|
||||
cmake_parse_arguments(_arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
set(GENERATE_XML YES)
|
||||
set(GENERATE_HTML NO)
|
||||
set(GENERATE_LATEX NO)
|
||||
set(DOXYGEN_OUTPUT_LANGUAGE Russian)
|
||||
if(_arg_HTML)
|
||||
set(GENERATE_HTML YES)
|
||||
endif()
|
||||
if(_arg_LATEX)
|
||||
set(GENERATE_LATEX YES)
|
||||
endif()
|
||||
if(_arg_LANGUAGE)
|
||||
set(DOXYGEN_OUTPUT_LANGUAGE ${_arg_LANGUAGE})
|
||||
endif()
|
||||
|
||||
set(_myx_cmake_doxygen_in
|
||||
"
|
||||
PROJECT_NAME = \"${DOXYGEN_PROJECT_TITLE}\"
|
||||
OUTPUT_DIRECTORY = \"${DOXYGEN_OUTPUT_DIRECTORY}\"
|
||||
OUTPUT_LANGUAGE = \"${DOXYGEN_OUTPUT_LANGUAGE}\"
|
||||
STRIP_FROM_PATH = \"${CMAKE_HOME_DIRECTORY}/src}\"
|
||||
STRIP_FROM_INC_PATH = \"${CMAKE_HOME_DIRECTORY}/src}\"
|
||||
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = YES
|
||||
EXTRACT_STATIC = YES
|
||||
EXTRACT_LOCAL_METHODS = YES
|
||||
|
||||
INPUT = \"${CMAKE_HOME_DIRECTORY}/src\" \"${CMAKE_HOME_DIRECTORY}/doc/doxygen\"
|
||||
RECURSIVE = YES
|
||||
|
||||
CLANG_ASSISTED_PARSING = YES
|
||||
CLANG_DATABASE_PATH = \"${CMAKE_BINARY_DIR}\"
|
||||
|
||||
GENERATE_HTML = ${GENERATE_HTML}
|
||||
GENERATE_TREEVIEW = YES
|
||||
|
||||
GENERATE_LATEX = ${GENERATE_LATEX}
|
||||
LATEX_CMD_NAME = xelatex
|
||||
COMPACT_LATEX = YES
|
||||
|
||||
GENERATE_XML = YES
|
||||
|
||||
UML_LOOK = YES
|
||||
TEMPLATE_RELATIONS = YES
|
||||
CALL_GRAPH = YES
|
||||
CALLER_GRAPH = YES
|
||||
INTERACTIVE_SVG = YES
|
||||
")
|
||||
|
||||
set(_myx_cmake_doxygen_in_path ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Doxygen.in)
|
||||
file(WRITE ${_myx_cmake_doxygen_in_path} ${_myx_cmake_doxygen_in})
|
||||
set(work_dir ${CMAKE_BINARY_DIR}/doc/doxygen)
|
||||
configure_file(${_myx_cmake_doxygen_in_path} ${work_dir}/Doxyfile @ONLY)
|
||||
|
||||
add_custom_target(${_target}
|
||||
VERBATIM
|
||||
WORKING_DIRECTORY ${work_dir}
|
||||
COMMAND ${DOXYGEN_EXECUTABLE} ${work_dir}/Doxyfile
|
||||
COMMENT "Generating API documentation with Doxygen")
|
||||
if(_arg_HTML)
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/doc/doxygen/html/
|
||||
COMPONENT doc OPTIONAL
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/doxygen)
|
||||
endif()
|
||||
if(NOT TARGET myx-cmake-doc-doxygen)
|
||||
add_custom_target(myx-cmake-doc-doxygen)
|
||||
endif()
|
||||
add_dependencies(myx-cmake-doc-doxygen ${_target})
|
||||
else()
|
||||
message(STATUS "MyxCMake: target ${_target} is already defined.")
|
||||
endif()
|
||||
endfunction()
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
include(ExternalProject)
|
||||
|
||||
if(CMAKE_BUILD_TYPE)
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
find_program(UNCRUSTIFY_EXE NAMES uncrustify)
|
||||
|
||||
if(UNCRUSTIFY_EXE)
|
||||
|
85
MyxCMake/modules/MyxCMakeGenerateGitInfoHeader.cmake
Normal file
85
MyxCMake/modules/MyxCMakeGenerateGitInfoHeader.cmake
Normal file
@ -0,0 +1,85 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_generate_git_info_header)
|
||||
set(_filename ${CMAKE_BINARY_DIR}/${CMAKE_INCLUDE_DIR}/${MYX_CMAKE_PROJECT_NAME_LOWER}/myx_cmake_git_info_p.hpp)
|
||||
if(MYX_CMAKE_GENERATED_HEADERS_PATH)
|
||||
set(_filename ${MYX_CMAKE_GENERATED_HEADERS_PATH}/${MYX_CMAKE_PROJECT_NAME_LOWER}/myx_cmake_git_info_p.hpp)
|
||||
elseif(ARGV0)
|
||||
set(_filename ${ARGV0})
|
||||
endif()
|
||||
|
||||
set(_git_info_hpp_in
|
||||
"#ifndef @MYX_CMAKE_PROJECT_NAME_UPPER@_MYX_CMAKE_GIT_INFO_HPP_
|
||||
#define @MYX_CMAKE_PROJECT_NAME_UPPER@_MYX_CMAKE_GIT_INFO_HPP_
|
||||
|
||||
#pragma once
|
||||
|
||||
#if defined (@MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_REV)
|
||||
#error \"Duplicate definition of macros @MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_REV\"
|
||||
#else
|
||||
#define @MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_REV \"@MYX_CMAKE_GIT_REV@\"
|
||||
#endif
|
||||
|
||||
#if defined (@MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_DIFF)
|
||||
#error \"Duplicate definition of macros @MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_DIFF\"
|
||||
#else
|
||||
#define @MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_DIFF \"@MYX_CMAKE_GIT_DIFF@\"
|
||||
#endif
|
||||
|
||||
#if defined (@MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_BRANCH)
|
||||
#error \"Duplicate definition of macros @MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_BRANCH\"
|
||||
#else
|
||||
#define @MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_BRANCH \"@MYX_CMAKE_GIT_BRANCH@\"
|
||||
#endif
|
||||
|
||||
#if defined (@MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_TAG)
|
||||
#error \"Duplicate definition of macros @MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_TAG\"
|
||||
#else
|
||||
#define @MYX_CMAKE_PROJECT_NAME_UPPER@_GIT_TAG \"@MYX_CMAKE_GIT_TAG@\"
|
||||
#endif
|
||||
|
||||
#endif /* @MYX_CMAKE_PROJECT_NAME_UPPER@_MYX_CMAKE_GIT_INFO_HPP_ */
|
||||
")
|
||||
set(_git_info_hpp_in_path ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/myx_cmake_git_info_p.hpp.in)
|
||||
file(WRITE ${_git_info_hpp_in_path} ${_git_info_hpp_in})
|
||||
|
||||
set(_git_info_cmake_in
|
||||
"set(MYX_CMAKE_GIT_REV \"N/A\")
|
||||
set(MYX_CMAKE_GIT_DIFF \"\")
|
||||
set(MYX_CMAKE_GIT_TAG \"N/A\")
|
||||
set(MYX_CMAKE_GIT_BRANCH \"N/A\")
|
||||
|
||||
find_program(GIT_EXECUTABLE git)
|
||||
if(GIT_EXECUTABLE)
|
||||
execute_process(COMMAND git log --pretty=format:'%h' -n 1 OUTPUT_VARIABLE MYX_CMAKE_GIT_REV ERROR_QUIET)
|
||||
|
||||
# Check whether we got any revision (which isn't always the case,
|
||||
# e.g. when someone downloaded a zip file from Github instead of a checkout)
|
||||
if(NOT ${MYX_CMAKE_GIT_REV} STREQUAL \"\")
|
||||
execute_process(COMMAND bash -c \"git diff --quiet --exit-code || echo +\" OUTPUT_VARIABLE MYX_CMAKE_GIT_DIFF)
|
||||
execute_process(COMMAND git describe --exact-match --tags OUTPUT_VARIABLE MYX_CMAKE_GIT_TAG ERROR_QUIET)
|
||||
execute_process(COMMAND git rev-parse --abbrev-ref HEAD OUTPUT_VARIABLE MYX_CMAKE_GIT_BRANCH)
|
||||
|
||||
string(STRIP \"${MYX_CMAKE_GIT_REV}\" MYX_CMAKE_GIT_REV)
|
||||
string(SUBSTRING \"${MYX_CMAKE_GIT_REV}\" 1 7 MYX_CMAKE_GIT_REV)
|
||||
string(STRIP \"${MYX_CMAKE_GIT_DIFF}\" MYX_CMAKE_GIT_DIFF)
|
||||
string(STRIP \"${MYX_CMAKE_GIT_TAG}\" MYX_CMAKE_GIT_TAG)
|
||||
string(STRIP \"${MYX_CMAKE_GIT_BRANCH}\" MYX_CMAKE_GIT_BRANCH)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
configure_file(${_git_info_hpp_in_path} ${MYX_CMAKE_GIT_INFO_FILE})
|
||||
")
|
||||
set(_git_info_cmake_in_path ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/MyxCMakeGitInfo.cmake.in)
|
||||
file(WRITE ${_git_info_cmake_in_path} ${_git_info_cmake_in})
|
||||
|
||||
# cmake-format: off
|
||||
if(NOT TARGET myx-cmake-git-info-header-${MYX_CMAKE_PROJECT_NAME_LOWER})
|
||||
add_custom_target(myx-cmake-git-info-header-${MYX_CMAKE_PROJECT_NAME_LOWER} ALL
|
||||
${CMAKE_COMMAND} -DMYX_CMAKE_PROJECT_NAME_UPPER=${MYX_CMAKE_PROJECT_NAME_UPPER}
|
||||
-DMYX_CMAKE_GIT_INFO_FILE=${_filename} -P ${_git_info_cmake_in_path}
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
endif()
|
||||
# cmake-format: on
|
||||
endfunction()
|
116
MyxCMake/modules/MyxCMakeGeneratePrivateConfigHeader.cmake
Normal file
116
MyxCMake/modules/MyxCMakeGeneratePrivateConfigHeader.cmake
Normal file
@ -0,0 +1,116 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_generate_private_config_header)
|
||||
include(MyxCMakeLargeFiles)
|
||||
myx_cmake_test_large_files(HAVE_LARGEFILES)
|
||||
|
||||
set(_filename ${CMAKE_BINARY_DIR}/${CMAKE_INCLUDE_DIR}/${MYX_CMAKE_PROJECT_NAME_LOWER}/myx_cmake_private_config_p.hpp)
|
||||
if(MYX_CMAKE_GENERATED_HEADERS_PATH)
|
||||
set(_filename ${MYX_CMAKE_GENERATED_HEADERS_PATH}/${MYX_CMAKE_PROJECT_NAME_LOWER}/myx_cmake_private_config_p.hpp)
|
||||
elseif(ARGV0)
|
||||
set(_filename ${ARGV0})
|
||||
endif()
|
||||
|
||||
get_property(PROJECT_VERSION_INT GLOBAL PROPERTY PROJECT_VERSION_INT)
|
||||
|
||||
set(_myx_cmake_private_config_hpp_in
|
||||
"#ifndef @MYX_CMAKE_PROJECT_NAME_UPPER@_MYX_CMAKE_CONFIG_HPP_
|
||||
#define @MYX_CMAKE_PROJECT_NAME_UPPER@_MYX_CMAKE_CONFIG_HPP_
|
||||
|
||||
#pragma once
|
||||
|
||||
#define @MYX_CMAKE_PROJECT_NAME_UPPER@_VERSION_STR \"@PROJECT_VERSION@\"
|
||||
#define @MYX_CMAKE_PROJECT_NAME_UPPER@_VERSION_INT @PROJECT_VERSION_INT@
|
||||
|
||||
#if defined (MYX_CMAKE_ORGANIZATION_NAME)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_ORGANIZATION_NAME\"
|
||||
#else
|
||||
#define MYX_CMAKE_ORGANIZATION_NAME \"@MYX_CMAKE_ORGANIZATION_NAME@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_ORGANIZATION_NAME_LOWER)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_ORGANIZATION_NAME_LOWER\"
|
||||
#else
|
||||
#define MYX_CMAKE_ORGANIZATION_NAME_LOWER \"@MYX_CMAKE_ORGANIZATION_NAME_LOWER@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_ORGANIZATION_NAME_UPPER)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_ORGANIZATION_NAME_UPPER\"
|
||||
#else
|
||||
#define MYX_CMAKE_ORGANIZATION_NAME_UPPER \"@MYX_CMAKE_ORGANIZATION_NAME_UPPER@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_PROJECT_NAME)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_PROJECT_NAME\"
|
||||
#else
|
||||
#define MYX_CMAKE_PROJECT_NAME \"@CMAKE_PROJECT_NAME@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_PROJECT_NAME_LOWER)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_PROJECT_NAME_LOWER\"
|
||||
#else
|
||||
#define MYX_CMAKE_PROJECT_NAME_LOWER \"@MYX_CMAKE_PROJECT_NAME_LOWER@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_PROJECT_NAME_UPPER)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_PROJECT_NAME_UPPER\"
|
||||
#else
|
||||
#define MYX_CMAKE_PROJECT_NAME_UPPER \"@MYX_CMAKE_PROJECT_NAME_UPPER@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_THEME_NAME)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_THEME_NAME\"
|
||||
#else
|
||||
#define MYX_CMAKE_THEME_NAME \"@MYX_CMAKE_THEME_NAME@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_THEME_NAME_LOWER)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_THEME_NAME_LOWER\"
|
||||
#else
|
||||
#define MYX_CMAKE_THEME_NAME_LOWER \"@MYX_CMAKE_THEME_NAME_LOWER@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_THEME_NAME_UPPER)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_THEME_NAME_UPPER\"
|
||||
#else
|
||||
#define MYX_CMAKE_THEME_NAME_UPPER \"@MYX_CMAKE_THEME_NAME_UPPER@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_AUTHOR_NAME)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_AUTHOR_NAME\"
|
||||
#else
|
||||
#define MYX_CMAKE_AUTHOR_NAME \"@MYX_CMAKE_AUTHOR_NAME@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_AUTHOR_EMAIL)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_AUTHOR_EMAIL\"
|
||||
#else
|
||||
#define MYX_CMAKE_AUTHOR_EMAIL \"@MYX_CMAKE_AUTHOR_EMAIL@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_DESCRIPTION)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_DESCRIPTION\"
|
||||
#else
|
||||
#define MYX_CMAKE_DESCRIPTION \"@MYX_CMAKE_DESCRIPTION@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_BUILD_TYPE)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_BUILD_TYPE\"
|
||||
#else
|
||||
#define MYX_CMAKE_BUILD_TYPE \"@CMAKE_BUILD_TYPE@\"
|
||||
#endif
|
||||
|
||||
#if defined (MYX_CMAKE_BUILD_DATE)
|
||||
#error \"Duplicate definition of macros MYX_CMAKE_BUILD_DATE\"
|
||||
#else
|
||||
#define MYX_CMAKE_BUILD_DATE \"@TODAY@\"
|
||||
#endif
|
||||
|
||||
#endif /* @MYX_CMAKE_PROJECT_NAME_UPPER@_MYX_CMAKE_CONFIG_HPP_ */
|
||||
")
|
||||
set(_myx_cmake_private_config_hpp_in_path ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/myx_cmake_private_config_p.hpp)
|
||||
file(WRITE ${_myx_cmake_private_config_hpp_in_path} ${_myx_cmake_private_config_hpp_in})
|
||||
|
||||
configure_file(${_myx_cmake_private_config_hpp_in_path} ${_filename})
|
||||
endfunction()
|
@ -1,15 +1,17 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
# Формирование строки, состоящей из заглавных символов, цифр и подчёркиваний
|
||||
function(myx_cmake_canonical_string in_string out_string)
|
||||
string(TOUPPER ${in_string} _arg_uppercase)
|
||||
string(REGEX REPLACE "[ -]" "_" _arg_fixed ${_arg_uppercase})
|
||||
set(${out_string} ${_arg_fixed} PARENT_SCOPE)
|
||||
string(TOUPPER ${in_string} _uppercase)
|
||||
string(REGEX REPLACE "[ -]" "_" _fixed ${_uppercase})
|
||||
set(${out_string} ${_fixed} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Добавление общего префикса ко всем переменным в списке
|
||||
function(myx_cmake_list_transform_prepend var prefix)
|
||||
set(temp "")
|
||||
foreach(filename ${${var}})
|
||||
list(APPEND temp "${prefix}${filename}")
|
||||
function(myx_cmake_list_transform_prepend values prefix)
|
||||
set(_list "")
|
||||
foreach(_val ${${values}})
|
||||
list(APPEND _list "${prefix}${_val}")
|
||||
endforeach()
|
||||
set(${var} ${temp} PARENT_SCOPE)
|
||||
set(${values} ${_list} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
@ -1,5 +1,7 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
if(NOT MYX_CMAKE_THEME_NAME)
|
||||
set(MYX_CMAKE_THEME_NAME "default")
|
||||
set(MYX_CMAKE_THEME_NAME "default" CACHE STRING "")
|
||||
endif()
|
||||
|
||||
# cmake-format: off
|
||||
@ -15,10 +17,10 @@ string(TOUPPER ${MYX_CMAKE_ORGANIZATION_NAME_CANONICAL} MYX_CMAKE_ORGANIZATION_N
|
||||
string(TOUPPER ${MYX_CMAKE_PROJECT_NAME_CANONICAL} MYX_CMAKE_PROJECT_NAME_UPPER)
|
||||
string(TOUPPER ${MYX_CMAKE_THEME_NAME_CANONICAL} MYX_CMAKE_THEME_NAME_UPPER)
|
||||
|
||||
option(MYX_CMAKE_ADD_THEME_PREFIX "Append theme name to install prefix" OFF)
|
||||
if(MYX_CMAKE_ADD_THEME_PREFIX AND NOT MYX_CMAKE_THEME_PREFIX_APPENDED)
|
||||
option(MYX_CMAKE_ADD_THEME_TO_INSTALL_PREFIX "Append theme name to install prefix" OFF)
|
||||
if(MYX_CMAKE_ADD_THEME_TO_INSTALL_PREFIX AND NOT MYX_CMAKE_THEME_INSTALL_PREFIX_APPENDED)
|
||||
if(NOT MYX_CMAKE_THEME_NAME_LOWER STREQUAL "default")
|
||||
set(MYX_CMAKE_THEME_PREFIX_APPENDED ON CACHE BOOL "" FORCE)
|
||||
set(MYX_CMAKE_THEME_INSTALL_PREFIX_APPENDED ON CACHE BOOL "" FORCE)
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/${MYX_CMAKE_THEME_NAME}" CACHE PATH "" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
16
MyxCMake/modules/MyxCMakeHighPrecisionMath.cmake
Normal file
16
MyxCMake/modules/MyxCMakeHighPrecisionMath.cmake
Normal file
@ -0,0 +1,16 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_enable_high_precision_math)
|
||||
find_package(Quadmath)
|
||||
if(QUADMATH_FOUND)
|
||||
add_definitions(-DHAVE_QUADMATH=1)
|
||||
else()
|
||||
find_package(MPFR)
|
||||
if(MPFR_FOUND)
|
||||
find_package(MPFRCppThirdparty)
|
||||
else()
|
||||
myx_cmake_message_error("MyxCMake: Nor Quadmath, nor MPFR found.")
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
3
MyxCMake/modules/MyxCMakeIncludeSystemModules.cmake
Normal file
3
MyxCMake/modules/MyxCMakeIncludeSystemModules.cmake
Normal file
@ -0,0 +1,3 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
include(GNUInstallDirs)
|
@ -1,29 +1,27 @@
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(MYX_CMAKE_LSB_RELEASE)
|
||||
return()
|
||||
endif()
|
||||
include_guard(GLOBAL)
|
||||
|
||||
set(MYX_CMAKE_LSB_DISTRIBUTOR_ID "unknown")
|
||||
set(MYX_CMAKE_LSB_CODENAME "unknown")
|
||||
set(MYX_CMAKE_LSB_RELEASE "unknown")
|
||||
set(MYX_CMAKE_LSB_RELEASE_VERSION "unknown")
|
||||
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(EXISTS /etc/mcst_version)
|
||||
set(MYX_CMAKE_LSB_DISTRIBUTOR_ID "ElbrusD")
|
||||
set(MYX_CMAKE_LSB_CODENAME "Jessie")
|
||||
execute_process(
|
||||
COMMAND cat /etc/mcst_version
|
||||
OUTPUT_VARIABLE MYX_CMAKE_LSB_RELEASE
|
||||
OUTPUT_VARIABLE MYX_CMAKE_LSB_RELEASE_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
else()
|
||||
find_program(_lsb_release_executable lsb_release)
|
||||
find_program(_lsb_release_exe lsb_release)
|
||||
# cmake-format: off
|
||||
if(_lsb_release_executable)
|
||||
execute_process(COMMAND ${_lsb_release_executable} -si OUTPUT_VARIABLE MYX_CMAKE_LSB_DISTRIBUTOR_ID OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${_lsb_release_executable} -sc OUTPUT_VARIABLE MYX_CMAKE_LSB_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${_lsb_release_executable} -sr OUTPUT_VARIABLE MYX_CMAKE_LSB_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(_lsb_release_exe)
|
||||
execute_process(COMMAND ${_lsb_release_exe} -si OUTPUT_VARIABLE MYX_CMAKE_LSB_DISTRIBUTOR_ID OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${_lsb_release_exe} -sc OUTPUT_VARIABLE MYX_CMAKE_LSB_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${_lsb_release_exe} -sr OUTPUT_VARIABLE MYX_CMAKE_LSB_RELEASE_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif()
|
||||
# cmake-format: on
|
||||
endif()
|
||||
|
208
MyxCMake/modules/MyxCMakeLargeFiles.cmake
Normal file
208
MyxCMake/modules/MyxCMakeLargeFiles.cmake
Normal file
@ -0,0 +1,208 @@
|
||||
#
|
||||
# This file is part of the GROMACS molecular simulation package.
|
||||
#
|
||||
# Copyright (c) 2009,2010,2012,2014,2019, by the GROMACS development team, led by
|
||||
# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
|
||||
# and including many others, as listed in the AUTHORS file in the
|
||||
# top-level source directory and at http://www.gromacs.org.
|
||||
#
|
||||
# GROMACS is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public License
|
||||
# as published by the Free Software Foundation; either version 2.1
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# GROMACS is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with GROMACS; if not, see
|
||||
# http://www.gnu.org/licenses, or write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# If you want to redistribute modifications to GROMACS, please
|
||||
# consider that scientific software is very special. Version
|
||||
# control is crucial - bugs must be traceable. We will be happy to
|
||||
# consider code for inclusion in the official distribution, but
|
||||
# derived work must not be called official GROMACS. Details are found
|
||||
# in the README & COPYING files - if they are missing, get the
|
||||
# official version at http://www.gromacs.org.
|
||||
#
|
||||
# To help us fund GROMACS development, we humbly ask that you cite
|
||||
# the research papers on the package. Check out http://www.gromacs.org.
|
||||
|
||||
# Forked from Gromacs
|
||||
|
||||
# - Define macro to check large file support
|
||||
#
|
||||
# myx_cmake_test_large_files(VARIABLE)
|
||||
#
|
||||
# VARIABLE will be set to true if off_t is 64 bits, and fseeko/ftello present.
|
||||
# This macro will also set defines necessary enable large file support, for instance
|
||||
# _LARGE_FILES
|
||||
# _LARGEFILE_SOURCE
|
||||
# _FILE_OFFSET_BITS 64
|
||||
# HAVE_FSEEKO
|
||||
# HAVE__FSEEKI64
|
||||
#
|
||||
# However, it is YOUR job to make sure these defines are set in a cmakedefine so they
|
||||
# end up in a config.h file that is included in your source if necessary!
|
||||
|
||||
include_guard(GLOBAL)
|
||||
include(CheckTypeSize)
|
||||
|
||||
|
||||
set(_test_file_offset_bits_c
|
||||
"
|
||||
#include <sys/types.h>
|
||||
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||
int off_t_is_large[ (LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1 ];
|
||||
int main(int argc, char **argv) { return 0; }
|
||||
")
|
||||
set(_test_file_offset_bits_c_path ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/test_file_offset_bits.c)
|
||||
file(WRITE ${_test_file_offset_bits_c_path} ${_test_file_offset_bits_c})
|
||||
|
||||
|
||||
set(_test_large_file_c_in
|
||||
"
|
||||
#cmakedefine _LARGEFILE_SOURCE
|
||||
#cmakedefine _LARGEFILE64_SOURCE
|
||||
#cmakedefine _LARGE_FILES
|
||||
#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int off_t_is_large[ (LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1 ];
|
||||
FILE *fp = fopen(argv[0],\"r\");
|
||||
off_t offset = ftello( fp );
|
||||
fseeko( fp, offset, SEEK_CUR );
|
||||
fclose(fp);
|
||||
return off_t_is_large[0] || argc;
|
||||
}
|
||||
")
|
||||
set(_test_large_file_c_path ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/test_large_file.c)
|
||||
set(_test_large_file_c_in_path ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/test_large_file.c.in)
|
||||
file(WRITE ${_test_large_file_c_in_path} ${_test_large_file_c_in})
|
||||
|
||||
|
||||
set(_test_windows_fseek_c
|
||||
"
|
||||
#include <stdio.h>
|
||||
int main()
|
||||
{
|
||||
__int64 off=0;
|
||||
_fseeki64(NULL, off, SEEK_SET);
|
||||
return 0;
|
||||
}
|
||||
")
|
||||
set(_test_windows_fseek_c_path ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/test_windows_fseek.c)
|
||||
file(WRITE ${_test_windows_fseek_c_path} ${_test_windows_fseek_c})
|
||||
|
||||
|
||||
macro(myx_cmake_test_large_files VARIABLE)
|
||||
if(NOT DEFINED ${VARIABLE})
|
||||
|
||||
# On most platforms it is probably overkill to first test the flags for 64-bit off_t,
|
||||
# and then separately fseeko. However, in the future we might have 128-bit filesystems
|
||||
# (ZFS), so it might be dangerous to indiscriminately set e.g. _FILE_OFFSET_BITS=64.
|
||||
|
||||
message(STATUS "Checking for 64-bit off_t")
|
||||
|
||||
# First check without any special flags
|
||||
try_compile(FILE64_OK ${CMAKE_CURRENT_BINARY_DIR} ${_test_file_offset_bits_c_path})
|
||||
if(FILE64_OK)
|
||||
message(STATUS "Checking for 64-bit off_t - present")
|
||||
endif()
|
||||
|
||||
if(NOT FILE64_OK)
|
||||
# Test with _FILE_OFFSET_BITS=64
|
||||
try_compile(FILE64_OK ${CMAKE_CURRENT_BINARY_DIR} ${_test_file_offset_bits_c_path}
|
||||
COMPILE_DEFINITIONS "-D_FILE_OFFSET_BITS=64")
|
||||
if(FILE64_OK)
|
||||
message(STATUS "Checking for 64-bit off_t - present with _FILE_OFFSET_BITS=64")
|
||||
set(_FILE_OFFSET_BITS 64 CACHE INTERNAL "64-bit off_t requires _FILE_OFFSET_BITS=64")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT FILE64_OK)
|
||||
# Test with _LARGE_FILES
|
||||
try_compile(FILE64_OK ${CMAKE_CURRENT_BINARY_DIR} ${_test_file_offset_bits_c_path}
|
||||
COMPILE_DEFINITIONS "-D_LARGE_FILES")
|
||||
if(FILE64_OK)
|
||||
message(STATUS "Checking for 64-bit off_t - present with _LARGE_FILES")
|
||||
set(_LARGE_FILES 1 CACHE INTERNAL "64-bit off_t requires _LARGE_FILES")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT FILE64_OK)
|
||||
# Test with _LARGEFILE_SOURCE
|
||||
try_compile(FILE64_OK ${CMAKE_CURRENT_BINARY_DIR} ${_test_file_offset_bits_c_path}
|
||||
COMPILE_DEFINITIONS "-D_LARGEFILE_SOURCE")
|
||||
if(FILE64_OK)
|
||||
message(STATUS "Checking for 64-bit off_t - present with _LARGEFILE_SOURCE")
|
||||
set(_LARGEFILE_SOURCE 1 CACHE INTERNAL "64-bit off_t requires _LARGEFILE_SOURCE")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT FILE64_OK)
|
||||
message(STATUS "Checking for 64-bit off_t - not present")
|
||||
else()
|
||||
# 64-bit off_t found. Now check that ftello/fseeko is available.
|
||||
|
||||
# Set the flags we might have determined to be required above
|
||||
configure_file(${_test_large_file_c_in_path} ${_test_large_file_c_path})
|
||||
|
||||
message(STATUS "Checking for fseeko/ftello")
|
||||
# Test if ftello/fseeko are available
|
||||
try_compile(FSEEKO_COMPILE_OK ${CMAKE_CURRENT_BINARY_DIR} ${_test_large_file_c_path})
|
||||
if(FSEEKO_COMPILE_OK)
|
||||
message(STATUS "Checking for fseeko/ftello - present")
|
||||
endif()
|
||||
|
||||
if(NOT FSEEKO_COMPILE_OK)
|
||||
# glibc 2.2 neds _LARGEFILE_SOURCE for fseeko (but not 64-bit off_t...)
|
||||
try_compile(FSEEKO_COMPILE_OK ${CMAKE_CURRENT_BINARY_DIR} ${_test_large_file_c_path}
|
||||
COMPILE_DEFINITIONS "-D_LARGEFILE_SOURCE")
|
||||
if(FSEEKO_COMPILE_OK)
|
||||
message(STATUS "Checking for fseeko/ftello - present with _LARGEFILE_SOURCE")
|
||||
set(_LARGEFILE_SOURCE 1 CACHE INTERNAL "64-bit fseeko requires _LARGEFILE_SOURCE")
|
||||
else()
|
||||
set(FILE64_OK 0)
|
||||
message(STATUS "64-bit off_t present but fseeko/ftello not found!")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# cmake-lint: disable=C0103
|
||||
if(NOT FILE64_OK)
|
||||
# now check for Windows stuff
|
||||
try_compile(FILE64_OK ${CMAKE_CURRENT_BINARY_DIR} ${_test_windows_fseek_c_path})
|
||||
if(FILE64_OK)
|
||||
message(STATUS "Checking for 64-bit off_t - present with _fseeki64")
|
||||
set(HAVE__FSEEKI64 1 CACHE INTERNAL "64-bit off_t requires _fseeki64")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(FSEEKO_COMPILE_OK)
|
||||
set(${VARIABLE} 1 CACHE INTERNAL "Result of test for large file support" FORCE)
|
||||
set(HAVE_FSEEKO 1 CACHE INTERNAL "64-bit fseeko is available" FORCE)
|
||||
elseif(HAVE__FSEEKI64)
|
||||
set(${VARIABLE} 1 CACHE INTERNAL "Result of test for large file support" FORCE)
|
||||
set(HAVE__FSEEKI64 1 CACHE INTERNAL "Windows 64-bit fseek" FORCE)
|
||||
else()
|
||||
check_type_size("long int" SIZEOF_LONG_INT)
|
||||
if(SIZEOF_LONG_INT EQUAL 8) #standard fseek is OK for 64bit
|
||||
set(${VARIABLE} 1 CACHE INTERNAL "Result of test for large file support" FORCE)
|
||||
else()
|
||||
message(FATAL_ERROR "Checking for 64-bit file support failed.")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endmacro(myx_cmake_test_large_files VARIABLE)
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
# Если выбран генератор Ninja, то в основном сборочном каталоге создаётся файл
|
||||
# Makefile, который обрабатывается командой make и передаёт исполнение системе
|
||||
# сборки ninja. Таким образом можно выполнять команду make, даже если правила
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_generate_pkgconfig target)
|
||||
set(options)
|
||||
set(oneVA COMPONENT BASENAME)
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
# cmake-format: off
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.16.0")
|
||||
include(cotire OPTIONAL)
|
||||
|
@ -1,3 +1,5 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
function(myx_cmake_check_project_version)
|
||||
if(NOT ${PROJECT_VERSION_PATCH} MATCHES "([0-9]+)")
|
||||
myx_cmake_message_error("MyxCMake: Please set project version in X.Y.Z format")
|
||||
|
60
MyxCMake/modules/MyxCMakeQtTranslation.cmake
Normal file
60
MyxCMake/modules/MyxCMakeQtTranslation.cmake
Normal file
@ -0,0 +1,60 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_qt5_translation outfiles)
|
||||
find_package(Qt5 COMPONENTS LinguistTools REQUIRED)
|
||||
|
||||
set(options)
|
||||
set(oneValueArgs BASE_NAME OUTPUT_DIR)
|
||||
set(multiValueArgs SOURCES LANGUAGES)
|
||||
|
||||
cmake_parse_arguments(_QTTR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
set(_base_name ${_QTTR_BASE_NAME})
|
||||
set(_sources ${_QTTR_SOURCES})
|
||||
set(_output_dir ${_QTTR_OUTPUT_DIR})
|
||||
set(_languages ${_QTTR_LANGUAGES})
|
||||
|
||||
set(L10N_QRC_BODY "")
|
||||
make_directory(${_output_dir})
|
||||
|
||||
foreach(lang ${_languages})
|
||||
set(_ts "${_base_name}_${lang}.ts")
|
||||
set(_qm "${_base_name}_${lang}.qm")
|
||||
list(APPEND _ts_list ${_output_dir}/${_ts})
|
||||
list(APPEND _l10n_names_list "${_base_name}_l10n_${lang}")
|
||||
string(APPEND L10N_QRC_BODY "<file alias=\"${_qm}\">${CMAKE_BINARY_DIR}/${_qm}</file>\n")
|
||||
|
||||
add_custom_target(
|
||||
${_base_name}_l10n_${lang} COMMAND ${Qt5_LUPDATE_EXECUTABLE} ${_sources} -ts ${_output_dir}/${_ts}
|
||||
-target-language ${lang} DEPENDS ${_sources})
|
||||
|
||||
if(NOT EXISTS "${_output_dir}/${_ts}")
|
||||
add_custom_target(${_ts} DEPENDS ${_base_name}_l10n_${lang})
|
||||
else()
|
||||
add_custom_target(${_ts} COMMAND echo "Skipping lupdate for ${_ts}")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/${_qm} COMMAND ${Qt5_LRELEASE_EXECUTABLE} ARGS ${_output_dir}/${_ts} -qm
|
||||
${CMAKE_BINARY_DIR}/${_qm} DEPENDS ${_ts} ${_sources})
|
||||
endforeach()
|
||||
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/${_base_name}_l10n.qrc
|
||||
"<RCC>\n"
|
||||
" <qresource prefix=\"/qm\">\n"
|
||||
" ${L10N_QRC_BODY}\n"
|
||||
" </qresource>\n"
|
||||
"</RCC>\n"
|
||||
)
|
||||
qt5_add_resources(${outfiles} ${CMAKE_BINARY_DIR}/${_base_name}_l10n.qrc)
|
||||
add_custom_target(${_base_name}_qrc DEPENDS ${_qrc})
|
||||
add_custom_target(${_base_name}_l10n DEPENDS ${_l10n_names_list})
|
||||
if(NOT TARGET l10n)
|
||||
add_custom_target(l10n)
|
||||
endif()
|
||||
add_dependencies(l10n ${_base_name}_l10n)
|
||||
|
||||
# add_dependencies(${_target} ${_target}_qrc)
|
||||
# target_sources(${_target} PUBLIC ${_qrc})
|
||||
set(${outfiles} ${${outfiles}} PARENT_SCOPE)
|
||||
endfunction()
|
76
MyxCMake/modules/MyxCMakeRemoveFlag.cmake
Normal file
76
MyxCMake/modules/MyxCMakeRemoveFlag.cmake
Normal file
@ -0,0 +1,76 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
# https://stackoverflow.com/a/49216539
|
||||
#
|
||||
# Removes the specified compile flag from the specified target.
|
||||
# _target - The target to remove the compile flag from
|
||||
# _flag - The compile flag to remove
|
||||
#
|
||||
# Pre: apply_global_cxx_flags_to_all_targets() must be invoked.
|
||||
#
|
||||
# cmake-lint: disable=C0103
|
||||
macro(myx_cmake_remove_flag_from_target _target _flag)
|
||||
get_target_property(_target_cxx_flags ${_target} COMPILE_OPTIONS)
|
||||
if(_target_cxx_flags)
|
||||
list(REMOVE_ITEM _target_cxx_flags ${_flag})
|
||||
set_target_properties(${_target} PROPERTIES COMPILE_OPTIONS "${_target_cxx_flags}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
#
|
||||
# Removes the specified compiler flag from the specified file.
|
||||
# _target - The target that _file belongs to
|
||||
# _file - The file to remove the compiler flag from
|
||||
# _flag - The compiler flag to remove.
|
||||
#
|
||||
# Pre: apply_global_cxx_flags_to_all_targets() must be invoked.
|
||||
#
|
||||
# cmake-lint: disable=C0103
|
||||
macro(myx_cmake_remove_flag_from_file _target _file _flag)
|
||||
get_target_property(_target_sources ${_target} SOURCES)
|
||||
# Check if a sync is required, in which case we'll force a rewrite of the cache variables.
|
||||
if(_flag_sync_required)
|
||||
unset(_cached_${_target}_cxx_flags CACHE)
|
||||
unset(_cached_${_target}_${_file}_cxx_flags CACHE)
|
||||
endif()
|
||||
get_target_property(_${_target}_cxx_flags ${_target} COMPILE_OPTIONS)
|
||||
# On first entry, cache the target compile flags and apply them to each source file
|
||||
# in the target.
|
||||
if(NOT _cached_${_target}_cxx_flags)
|
||||
# Obtain and cache the target compiler options, then clear them.
|
||||
get_target_property(_target_cxx_flags ${_target} COMPILE_OPTIONS)
|
||||
set(_cached_${_target}_cxx_flags "${_target_cxx_flags}" CACHE INTERNAL "")
|
||||
set_target_properties(${_target} PROPERTIES COMPILE_OPTIONS "")
|
||||
# Apply the target compile flags to each source file.
|
||||
foreach(_source_file ${_target_sources})
|
||||
# Check for pre-existing flags set by set_source_files_properties().
|
||||
get_source_file_property(_source_file_cxx_flags ${_source_file} COMPILE_FLAGS)
|
||||
if(_source_file_cxx_flags)
|
||||
separate_arguments(_source_file_cxx_flags UNIX_COMMAND ${_source_file_cxx_flags})
|
||||
list(APPEND _source_file_cxx_flags "${_target_cxx_flags}")
|
||||
else()
|
||||
set(_source_file_cxx_flags "${_target_cxx_flags}")
|
||||
endif()
|
||||
# Apply the compile flags to the current source file.
|
||||
string(REPLACE ";" " " _source_file_cxx_flags_string "${_source_file_cxx_flags}")
|
||||
set_source_files_properties(${_source_file} PROPERTIES COMPILE_FLAGS "${_source_file_cxx_flags_string}")
|
||||
endforeach()
|
||||
endif()
|
||||
list(FIND _target_sources ${_file} _file_found_at)
|
||||
if(_file_found_at GREATER -1)
|
||||
if(NOT _cached_${_target}_${_file}_cxx_flags)
|
||||
# Cache the compile flags for the specified file.
|
||||
# This is the list that we'll be removing flags from.
|
||||
get_source_file_property(_source_file_cxx_flags ${_file} COMPILE_FLAGS)
|
||||
separate_arguments(_source_file_cxx_flags UNIX_COMMAND ${_source_file_cxx_flags})
|
||||
set(_cached_${_target}_${_file}_cxx_flags ${_source_file_cxx_flags} CACHE INTERNAL "")
|
||||
endif()
|
||||
# Remove the specified flag, then re-apply the rest.
|
||||
list(REMOVE_ITEM _cached_${_target}_${_file}_cxx_flags ${_flag})
|
||||
string(REPLACE ";" " " _cached_${_target}_${_file}_cxx_flags_string
|
||||
"${_cached_${_target}_${_file}_cxx_flags}")
|
||||
set_source_files_properties(${_file} PROPERTIES COMPILE_FLAGS
|
||||
"${_cached_${_target}_${_file}_cxx_flags_string}")
|
||||
endif()
|
||||
endmacro()
|
@ -1,27 +1,33 @@
|
||||
#
|
||||
# Обязательные переменные, значения которым необходимо присвоить в файле
|
||||
# CMakeLists.txt до подключения MyxCMake, либо передать из командной строки
|
||||
# через ключ -D
|
||||
#
|
||||
# Обязательные переменные, значения которым необходимо присвоить
|
||||
# в файле CMakeLists.txt до подключения MyxCMake, либо передать через ключ -D
|
||||
|
||||
include_guard(GLOBAL)
|
||||
|
||||
# cmake-format: off
|
||||
if(NOT MYX_CMAKE_ORGANIZATION_NAME)
|
||||
myx_cmake_message_error("MyxCMake: Required variable MYX_CMAKE_ORGANIZATION_NAME is not defined")
|
||||
myx_cmake_message_warning("MyxCMake: Required variable MYX_CMAKE_ORGANIZATION_NAME is not defined")
|
||||
else()
|
||||
set(MYX_CMAKE_ORGANIZATION_NAME "ORG NAME" CACHE STRING "")
|
||||
endif()
|
||||
|
||||
if(NOT MYX_CMAKE_AUTHOR_NAME)
|
||||
myx_cmake_message_error("MyxCMake: Required variable MYX_CMAKE_AUTHOR_NAME is not defined")
|
||||
myx_cmake_message_warning("MyxCMake: Required variable MYX_CMAKE_AUTHOR_NAME is not defined")
|
||||
else()
|
||||
set(MYX_CMAKE_AUTHOR_NAME "AUTHOR NAME" CACHE STRING "")
|
||||
endif()
|
||||
|
||||
if(NOT MYX_CMAKE_AUTHOR_EMAIL)
|
||||
myx_cmake_message_error("MyxCMake: Required variable MYX_CMAKE_AUTHOR_EMAIL is not defined")
|
||||
myx_cmake_message_warning("MyxCMake: Required variable MYX_CMAKE_AUTHOR_EMAIL is not defined")
|
||||
else()
|
||||
set(MYX_CMAKE_AUTHOR_EMAIL "AUTHOR@EMAIL" CACHE STRING "")
|
||||
endif()
|
||||
|
||||
if(NOT MYX_CMAKE_DESCRIPTION)
|
||||
myx_cmake_message_error("MyxCMake: Required variable MYX_CMAKE_DESCRIPTION is not defined")
|
||||
myx_cmake_message_warning("MyxCMake: Required variable MYX_CMAKE_DESCRIPTION is not defined")
|
||||
else()
|
||||
set(MYX_CMAKE_DESCRIPTION "PROJECT DESCRIPTION" CACHE STRING "")
|
||||
endif()
|
||||
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${MYX_CMAKE_DESCRIPTION} CACHE STRING "")
|
||||
set(CPACK_PACKAGE_CONTACT "${MYX_CMAKE_AUTHOR_NAME} <${MYX_CMAKE_AUTHOR_EMAIL}>" CACHE STRING "")
|
||||
# cmake-format: on
|
||||
|
||||
|
@ -1,3 +1,6 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
if(NOT TARGET uninstall)
|
||||
configure_file("${CMAKE_CURRENT_LIST_DIR}/MyxCMakeUninstall.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
|
||||
|
@ -1,3 +1,5 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.16.0")
|
||||
include(cotire OPTIONAL)
|
||||
if(COMMAND cotire)
|
||||
|
33
MyxCMake/modules/MyxCMakeWriteCompilerDetectionHeader.cmake
Normal file
33
MyxCMake/modules/MyxCMakeWriteCompilerDetectionHeader.cmake
Normal file
@ -0,0 +1,33 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
|
||||
function(myx_cmake_write_compiler_detection_header)
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.6.0")
|
||||
return()
|
||||
endif()
|
||||
|
||||
include(WriteCompilerDetectionHeader)
|
||||
|
||||
set(OUTPUT_FILE ${CMAKE_BINARY_DIR}/include/compiler_features.hpp)
|
||||
if(MYX_CMAKE_GENERATED_HEADER_FILENAME)
|
||||
set(OUTPUT_FILE ${MYX_CMAKE_GENERATED_HEADER_FILENAME})
|
||||
endif()
|
||||
|
||||
write_compiler_detection_header(
|
||||
FILE ${OUTPUT_FILE}
|
||||
PREFIX ${MYX_CMAKE_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)
|
||||
endfunction()
|
||||
|
185
MyxCMake/modules/doc/breathe-conf.py.in
Normal file
185
MyxCMake/modules/doc/breathe-conf.py.in
Normal file
@ -0,0 +1,185 @@
|
||||
#!@PYTHON_EXECUTABLE@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# At top on conf.py (with other import statements)
|
||||
import recommonmark
|
||||
from recommonmark.parser import CommonMarkParser
|
||||
from recommonmark.transform import AutoStructify
|
||||
from recommonmark.states import DummyStateMachine
|
||||
# Monkey patch to fix recommonmark 0.4 doc reference issues.
|
||||
orig_run_role = DummyStateMachine.run_role
|
||||
def run_role(self, name, options=None, content=None):
|
||||
if name == 'doc':
|
||||
name = 'any'
|
||||
return orig_run_role(self, name, options, content)
|
||||
DummyStateMachine.run_role = run_role
|
||||
|
||||
source_parsers = {
|
||||
'.md': CommonMarkParser
|
||||
}
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'breathe', 'sphinx.ext.autosectionlabel', 'recommonmark'
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
source_suffix = ['.rst', '.md']
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = '@DOXYGEN_PROJECT_TITLE@'
|
||||
author = '@MYX_CMAKE_AUTHOR_NAME@'
|
||||
copyright = '© @MYX_CMAKE_YEAR@, ' + author
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '@PROJECT_VERSION@'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = ''
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This patterns also effect to html_static_path and html_extra_path
|
||||
exclude_patterns = ['_build', '_output', 'Thumbs.db', '.DS_Store']
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = False
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
# html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = []
|
||||
|
||||
# Custom sidebar templates, must be a dictionary that maps document names
|
||||
# to template names.
|
||||
#
|
||||
# This is required for the alabaster theme
|
||||
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
|
||||
html_sidebars = {
|
||||
'**': [
|
||||
'relations.html', # needs 'show_related': True theme option to display
|
||||
'searchbox.html',
|
||||
]
|
||||
}
|
||||
|
||||
# -- Options for HTMLHelp output ------------------------------------------
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = '@CMAKE_PROJECT_NAME@doc'
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, '@CMAKE_PROJECT_NAME@.tex', '@CMAKE_PROJECT_NAME@ Documentation',
|
||||
author, 'manual'),
|
||||
]
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [(master_doc, '@CMAKE_PROJECT_NAME@', '@CMAKE_PROJECT_NAME@ Documentation', [author], 1)]
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, '@CMAKE_PROJECT_NAME@', '@CMAKE_PROJECT_NAME@ Documentation', author, '@CMAKE_PROJECT_NAME@',
|
||||
'One line description of project.', 'Miscellaneous'),
|
||||
]
|
||||
|
||||
breathe_projects = {'@CMAKE_PROJECT_NAME@': '@BREATHE_DOXYGEN_DIR@/xml'}
|
||||
|
||||
|
||||
def run_doxygen(folder):
|
||||
"""Run the doxygen make command in the designated folder"""
|
||||
|
||||
try:
|
||||
retcode = subprocess.call("cd {}; doxygen".format(folder), shell=True)
|
||||
if retcode < 0:
|
||||
sys.stderr.write(
|
||||
"doxygen terminated by signal {}".format(-retcode))
|
||||
except OSError as e:
|
||||
sys.stderr.write("doxygen execution failed: {}".format(e))
|
||||
|
||||
|
||||
def setup(app):
|
||||
run_doxygen('@BREATHE_DOXYGEN_DIR@')
|
||||
app.add_config_value('recommonmark_config', {
|
||||
'enable_auto_toc_tree': True,
|
||||
'enable_eval_rst': True,
|
||||
'enable_auto_doc_ref': True,
|
||||
'enable_math': True,
|
||||
'enable_inline_math': True
|
||||
}, True)
|
||||
app.add_transform(AutoStructify)
|
Reference in New Issue
Block a user