From 6358fe0820f8c0c5c89dbefcef0df04b2acc22d6 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Tue, 30 Jun 2020 20:04:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 9 ++- cmake/etc/Variables.cmake | 2 +- .../{base => core}/01_endian/CMakeLists.txt | 5 +- examples/{base => core}/01_endian/endian.cpp | 9 +-- examples/{base => core}/CMakeLists.txt | 0 examples/filesystem/01_paths/CMakeLists.txt | 4 +- examples/filesystem/01_paths/paths.cpp | 3 +- examples/qt/01_translators/CMakeLists.txt | 4 +- .../qt/02_posix-signal-watcher/CMakeLists.txt | 4 +- .../posix_signal_watcher.cpp | 2 +- src/myx/backports/compiler/CMakeLists.txt | 42 +++++++++++ src/myx/backports/compiler/gcc.hpp | 29 ++++++++ src/myx/backports/cpp/CMakeLists.txt | 43 +++++++++++ src/myx/backports/cpp/helpers.hpp | 36 ++++++++++ src/myx/{base => backports/cpp}/span.hpp | 71 +++++++++---------- src/myx/backports/qt/CMakeLists.txt | 42 +++++++++++ .../backports.hpp => backports/qt/common.hpp} | 13 ++-- src/myx/base/config.cpp | 1 - src/myx/{base => core}/CMakeLists.txt | 19 ++--- src/myx/{base => core}/config.hpp | 6 +- src/myx/{base => core}/config_flags.hpp.in | 0 src/myx/{base => core}/endian_types.hpp | 50 ++++++------- .../enum_bitmask_operations.hpp | 12 ++-- src/myx/{base => core}/limits.hpp | 10 +-- src/myx/filesystem/paths.cpp | 8 +-- src/myx/filesystem/paths.hpp | 2 +- src/myx/qt/CMakeLists.txt | 1 - src/myx/qt/posix_signal_watcher.cpp | 10 ++- src/myx/qt/posix_signal_watcher.hpp | 5 +- src/myx/qt/posix_signal_watcher_p.hpp | 2 +- src/myx/qt/translators.cpp | 2 +- src/myx/qt/translators.hpp | 4 +- 32 files changed, 315 insertions(+), 135 deletions(-) rename examples/{base => core}/01_endian/CMakeLists.txt (94%) rename examples/{base => core}/01_endian/endian.cpp (53%) rename examples/{base => core}/CMakeLists.txt (100%) create mode 100644 src/myx/backports/compiler/CMakeLists.txt create mode 100644 src/myx/backports/compiler/gcc.hpp create mode 100644 src/myx/backports/cpp/CMakeLists.txt create mode 100644 src/myx/backports/cpp/helpers.hpp rename src/myx/{base => backports/cpp}/span.hpp (78%) create mode 100644 src/myx/backports/qt/CMakeLists.txt rename src/myx/{qt/backports.hpp => backports/qt/common.hpp} (65%) delete mode 100644 src/myx/base/config.cpp rename src/myx/{base => core}/CMakeLists.txt (72%) rename src/myx/{base => core}/config.hpp (73%) rename src/myx/{base => core}/config_flags.hpp.in (100%) rename src/myx/{base => core}/endian_types.hpp (81%) rename src/myx/{base => core}/enum_bitmask_operations.hpp (91%) rename src/myx/{base => core}/limits.hpp (85%) diff --git a/CMakeLists.txt b/CMakeLists.txt index ee9cf59..561029e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,16 +36,19 @@ find_package(Threads REQUIRED) find_package(Qt5 COMPONENTS Core Network REQUIRED) # Библиотеки -add_subdirectory(src/myx/base) +add_subdirectory(src/myx/backports/compiler) +add_subdirectory(src/myx/backports/cpp) +add_subdirectory(src/myx/backports/qt) +add_subdirectory(src/myx/core) add_subdirectory(src/myx/filesystem) add_subdirectory(src/myx/qt) # Примеры if(MYXLIB_BUILD_EXAMPLES) - add_subdirectory(examples/base) + add_subdirectory(examples/core) add_subdirectory(examples/filesystem) add_subdirectory(examples/qt) - add_custom_target(examples example-base-endian example-filesystem-paths example-qt-tranlators + add_custom_target(examples example-core-endian example-filesystem-paths example-qt-tranlators example-qt-posix-signal-watcher) endif() diff --git a/cmake/etc/Variables.cmake b/cmake/etc/Variables.cmake index 5445292..0338080 100644 --- a/cmake/etc/Variables.cmake +++ b/cmake/etc/Variables.cmake @@ -9,4 +9,4 @@ set(CPACK_COMPONENTS_ALL examples) set(CPACK_PACKAGE_CONTACT "Andrei Astafev ") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Mixed functions") -set(CMLIB_GENERATED_HEADERS_PATH ${CMAKE_BINARY_DIR}/include/myx/base) +set(CMLIB_GENERATED_HEADERS_PATH ${CMAKE_BINARY_DIR}/include/myx/core) diff --git a/examples/base/01_endian/CMakeLists.txt b/examples/core/01_endian/CMakeLists.txt similarity index 94% rename from examples/base/01_endian/CMakeLists.txt rename to examples/core/01_endian/CMakeLists.txt index cc3a06e..41309ad 100644 --- a/examples/base/01_endian/CMakeLists.txt +++ b/examples/core/01_endian/CMakeLists.txt @@ -1,5 +1,5 @@ # Название основной цели в текущем каталоге -set(TRGT example-base-endian) +set(TRGT example-core-endian) # Список файлов исходных текстов set(TRGT_cpp ${CMAKE_CURRENT_SOURCE_DIR}/endian.cpp) @@ -32,9 +32,8 @@ if(MYXLIB_BUILD_EXAMPLES) target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS}) target_include_directories(${TRGT} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src) - add_dependencies(${TRGT} base) + add_dependencies(${TRGT} core) - target_link_libraries(${TRGT} base_static) target_link_libraries(${TRGT} Qt5::Core) target_link_libraries(${TRGT} Threads::Threads) diff --git a/examples/base/01_endian/endian.cpp b/examples/core/01_endian/endian.cpp similarity index 53% rename from examples/base/01_endian/endian.cpp rename to examples/core/01_endian/endian.cpp index a4cc260..f147381 100644 --- a/examples/base/01_endian/endian.cpp +++ b/examples/core/01_endian/endian.cpp @@ -1,8 +1,9 @@ -#include -#include +#include +#include #include +//NOLINTNEXTLINE #define CMLIB_PROJECT_NAME "myxlib" @@ -12,11 +13,11 @@ int main( int argc, char** argv ) (void)argv; beint64 bi = 1; - int64_t bii = reinterpret_cast< int64_t* >( &bi )[0]; + int64_t bii = reinterpret_cast< int64_t* >( &bi )[0]; //NOLINT qDebug() << hex << bi << bii; leint64 li = 1; - int64_t lii = reinterpret_cast< int64_t* >( &li )[0]; + int64_t lii = reinterpret_cast< int64_t* >( &li )[0]; //NOLINT qDebug() << hex << li << lii; return( 0 ); diff --git a/examples/base/CMakeLists.txt b/examples/core/CMakeLists.txt similarity index 100% rename from examples/base/CMakeLists.txt rename to examples/core/CMakeLists.txt diff --git a/examples/filesystem/01_paths/CMakeLists.txt b/examples/filesystem/01_paths/CMakeLists.txt index 2062f33..bc6c3a6 100644 --- a/examples/filesystem/01_paths/CMakeLists.txt +++ b/examples/filesystem/01_paths/CMakeLists.txt @@ -32,9 +32,9 @@ if(MYXLIB_BUILD_EXAMPLES) target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS}) target_include_directories(${TRGT} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src) - add_dependencies(${TRGT} base filesystem) + add_dependencies(${TRGT} core filesystem) - target_link_libraries(${TRGT} base_static filesystem_static) + target_link_libraries(${TRGT} filesystem_static) target_link_libraries(${TRGT} Qt5::Core) target_link_libraries(${TRGT} Threads::Threads) diff --git a/examples/filesystem/01_paths/paths.cpp b/examples/filesystem/01_paths/paths.cpp index 739a6db..c41888f 100644 --- a/examples/filesystem/01_paths/paths.cpp +++ b/examples/filesystem/01_paths/paths.cpp @@ -1,10 +1,11 @@ -#include +#include #include #include #include +//NOLINTNEXTLINE #define CMLIB_PROJECT_NAME "myxlib" namespace MF = myx::filesystem; diff --git a/examples/qt/01_translators/CMakeLists.txt b/examples/qt/01_translators/CMakeLists.txt index c02441f..a90e559 100644 --- a/examples/qt/01_translators/CMakeLists.txt +++ b/examples/qt/01_translators/CMakeLists.txt @@ -38,9 +38,9 @@ if(MYXLIB_BUILD_EXAMPLES) target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS}) target_include_directories(${TRGT} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src) - add_dependencies(${TRGT} base qt) + add_dependencies(${TRGT} core qt) - target_link_libraries(${TRGT} base_static qt_static) + target_link_libraries(${TRGT} qt_static) target_link_libraries(${TRGT} Qt5::Core) target_link_libraries(${TRGT} Threads::Threads) diff --git a/examples/qt/02_posix-signal-watcher/CMakeLists.txt b/examples/qt/02_posix-signal-watcher/CMakeLists.txt index 1caeae2..204cec2 100644 --- a/examples/qt/02_posix-signal-watcher/CMakeLists.txt +++ b/examples/qt/02_posix-signal-watcher/CMakeLists.txt @@ -32,9 +32,9 @@ if(MYXLIB_BUILD_EXAMPLES) target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS}) target_include_directories(${TRGT} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src) - add_dependencies(${TRGT} base qt) + add_dependencies(${TRGT} core qt) - target_link_libraries(${TRGT} base_static qt_static) + target_link_libraries(${TRGT} qt_static) target_link_libraries(${TRGT} Qt5::Core) target_link_libraries(${TRGT} Threads::Threads) diff --git a/examples/qt/02_posix-signal-watcher/posix_signal_watcher.cpp b/examples/qt/02_posix-signal-watcher/posix_signal_watcher.cpp index 9fb9ef6..ccc1ca4 100644 --- a/examples/qt/02_posix-signal-watcher/posix_signal_watcher.cpp +++ b/examples/qt/02_posix-signal-watcher/posix_signal_watcher.cpp @@ -15,7 +15,7 @@ int main( int argc, char* argv[] ) sigwatch.watchForSignal( SIGTERM ); QObject::connect( &sigwatch, &MQ::PosixSignalWatcher::posixSignal, &app, &QCoreApplication::quit ); - int exitcode = app.exec(); + int exitcode = QCoreApplication::exec(); qDebug() << "Goodbye"; return( exitcode ); } diff --git a/src/myx/backports/compiler/CMakeLists.txt b/src/myx/backports/compiler/CMakeLists.txt new file mode 100644 index 0000000..d8d482d --- /dev/null +++ b/src/myx/backports/compiler/CMakeLists.txt @@ -0,0 +1,42 @@ +# Название основной цели и имя библиотеки в текущем каталоге +set(TRGT backports-compiler) + +# cmake-format: off +# Список файлов исходных текстов +set(TRGT_cpp) + +# Список заголовочных файлов +set(TRGT_hpp + ${CMAKE_CURRENT_SOURCE_DIR}/gcc.hpp + ) + +set(TRGT_headers ${TRGT_hpp}) +# cmake-format: on + +add_library(${TRGT} INTERFACE) +target_sources(${TRGT} INTERFACE ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clang-tidy +add_clang_tidy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clang-analyze +add_clang_analyze_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clazy +add_clazy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой pvs-studio +add_pvs_check(${TRGT}) + +# Создание цели для автоматического форматирования кода +add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +target_include_directories(${TRGT} INTERFACE ${CMAKE_SOURCE_DIR}/src) + +generate_pkgconfig(myx-${TRGT} COMPONENT base-dev INSTALL_LIBRARY ${MYXLIB_BUILD_LIBRARIES}) +install(FILES ${TRGT_headers} COMPONENT base-dev + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/backports/compiler) + +# Цель, используемая только для установки заголовочных файлов без компиляции проекта +add_custom_target(${TRGT}-install-headers COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=base-dev -P + "${CMAKE_BINARY_DIR}/cmake_install.cmake") diff --git a/src/myx/backports/compiler/gcc.hpp b/src/myx/backports/compiler/gcc.hpp new file mode 100644 index 0000000..67a614b --- /dev/null +++ b/src/myx/backports/compiler/gcc.hpp @@ -0,0 +1,29 @@ +#ifndef MYX_BACKPORTS_COMPILER_GCC_HPP_ +#define MYX_BACKPORTS_COMPILER_GCC_HPP_ + +#pragma once + +#ifdef __GNUC__ +// NOLINTNEXTLINE +#define GCC_VERSION ( __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) +#if GCC_VERSION <= 40702 + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wkeyword-macro" +#endif + +// NOLINTNEXTLINE +#define override + +// NOLINTNEXTLINE +#define constexpr const + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif // if GCC_VERSION <= 40702 +#endif // ifdef __GNUC__ + +#endif // ifndef MYX_BACKPORTS_COMPILER_GCC_HPP_ diff --git a/src/myx/backports/cpp/CMakeLists.txt b/src/myx/backports/cpp/CMakeLists.txt new file mode 100644 index 0000000..2c81cda --- /dev/null +++ b/src/myx/backports/cpp/CMakeLists.txt @@ -0,0 +1,43 @@ +# Название основной цели и имя библиотеки в текущем каталоге +set(TRGT backports-cpp) + +# cmake-format: off +# Список файлов исходных текстов +set(TRGT_cpp) + +# Список заголовочных файлов +set(TRGT_hpp + ${CMAKE_CURRENT_SOURCE_DIR}/helpers.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/span.hpp + ) + +set(TRGT_headers ${TRGT_hpp}) +# cmake-format: on + +add_library(${TRGT} INTERFACE) +target_sources(${TRGT} INTERFACE ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clang-tidy +add_clang_tidy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clang-analyze +add_clang_analyze_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clazy +add_clazy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой pvs-studio +add_pvs_check(${TRGT}) + +# Создание цели для автоматического форматирования кода +add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +target_include_directories(${TRGT} INTERFACE ${CMAKE_SOURCE_DIR}/src) + +generate_pkgconfig(myx-${TRGT} COMPONENT base-dev INSTALL_LIBRARY ${MYXLIB_BUILD_LIBRARIES}) +install(FILES ${TRGT_headers} COMPONENT base-dev + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/backports/cpp) + +# Цель, используемая только для установки заголовочных файлов без компиляции проекта +add_custom_target(${TRGT}-install-headers COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=base-dev -P + "${CMAKE_BINARY_DIR}/cmake_install.cmake") diff --git a/src/myx/backports/cpp/helpers.hpp b/src/myx/backports/cpp/helpers.hpp new file mode 100644 index 0000000..ff984b2 --- /dev/null +++ b/src/myx/backports/cpp/helpers.hpp @@ -0,0 +1,36 @@ +#ifndef MYX_BACKPORTS_CPP_HELPERS_HPP_ +#define MYX_BACKPORTS_CPP_HELPERS_HPP_ + +#pragma once + +#if ( __cplusplus >= 201103L ) +#include +#endif + +#if ( __cplusplus >= 201103L ) && ( __cplusplus < 201402L ) + +namespace std +{ + +template< class T > +using underlying_type_t = typename std::underlying_type< T >::type; + +} // namespace std + +#endif + +#if ( __cplusplus >= 201103L ) && ( __cplusplus < 201702L ) + +namespace std +{ + +#if defined( __STRICT_ANSI__ ) +template< typename ... Ts > struct make_void { typedef void type; }; +template< typename ... Ts > using void_t = typename make_void< Ts... >::type; +#endif + +} // namespace std + +#endif + +#endif // ifndef MYX_BACKPORTS_CPP_HELPERS_HPP_ diff --git a/src/myx/base/span.hpp b/src/myx/backports/cpp/span.hpp similarity index 78% rename from src/myx/base/span.hpp rename to src/myx/backports/cpp/span.hpp index 7533e52..6cf6339 100644 --- a/src/myx/base/span.hpp +++ b/src/myx/backports/cpp/span.hpp @@ -7,23 +7,24 @@ // Official repository: https://github.com/boostorg/beast // -#ifndef MYX_BASE_SPAN_HPP_ -#define MYX_BASE_SPAN_HPP_ +#ifndef MYX_BACKPORTS_CPP_SPAN_HPP_ +#define MYX_BACKPORTS_CPP_SPAN_HPP_ + +#pragma once + +#if ( __cplusplus >= 201103L ) && ( __cplusplus < 201703L ) + +#include #include #include #include #include -namespace myx { - -namespace base { - -template< typename ... Ts > struct make_void { typedef void type;}; // NOLINT -template< typename ... Ts > using void_t = typename make_void< Ts... >::type; // NOLINT +namespace std { template< class T, class E, class = void > -struct is_contiguous_container : std::false_type {}; // NOLINT +struct is_contiguous_container : std::false_type {}; // NOLINT template< class T, class E > struct is_contiguous_container< T, E, void_t< @@ -52,38 +53,38 @@ struct is_contiguous_container< T, E, void_t< @tparam T The type pointed to by span iterators */ template< class T > -class span // NOLINT +class span // NOLINT { T* m_data = nullptr; std::size_t m_size = 0; public: /// The type of value, including cv qualifiers - using element_type = T; + using ElementType = T; /// The type of value of each span element - using value_type = typename std::remove_const< T >::type; + using ValueType = typename std::remove_const< T >::type; /// The type of integer used to index the span - using index_type = std::ptrdiff_t; + using IndexType = std::ptrdiff_t; /// A pointer to a span element - using pointer = T*; + using Pointer = T*; /// A reference to a span element - using reference = T&; + using Reference = T&; /// The iterator used by the container - using iterator = pointer; + using Iterator = Pointer; /// The const pointer used by the container - using const_pointer = T const*; + using ConstPointer = T const*; /// The const reference used by the container - using const_reference = T const&; + using ConstReference = T const&; /// The const iterator used by the container - using const_iterator = const_pointer; + using ConstIterator = ConstPointer; /// Constructor span() = default; @@ -95,11 +96,9 @@ public: span& operator=( span const& ) = default; /** Constructor - - @param data A pointer to the beginning of the range of elements - - @param size The number of elements pointed to by `data` - */ + * @param data A pointer to the beginning of the range of elements + * @param size The number of elements pointed to by `data` + */ span( T* data, std::size_t size ) : m_data( data ), m_size( size ) @@ -108,9 +107,8 @@ public: /** Constructor - - @param container The container to construct from - */ + * @param container The container to construct from + */ template< class ContiguousContainer, class = typename std::enable_if< is_contiguous_container< @@ -143,9 +141,8 @@ public: /** Assignment - - @param container The container to assign from - */ + * @param container The container to assign from + */ template< class ContiguousContainer > typename std::enable_if< is_contiguous_container< ContiguousContainer, T >::value, @@ -205,7 +202,7 @@ public: /// Returns an iterator to the beginning of the span - iterator + Iterator begin() const { return( m_data ); @@ -213,7 +210,7 @@ public: /// Returns an iterator to the beginning of the span - const_iterator + ConstIterator cbegin() const { return( m_data ); @@ -221,7 +218,7 @@ public: /// Returns an iterator to one past the end of the span - iterator + Iterator end() const { return( m_data + m_size ); @@ -229,15 +226,15 @@ public: /// Returns an iterator to one past the end of the span - const_iterator + ConstIterator cend() const { return( m_data + m_size ); } }; // class span -} // namespace base +} // namespace std -} // namespace myx +#endif // if ( __cplusplus >= 201103L ) && ( __cplusplus < 201703L ) -#endif // ifndef MYX_BASE_SPAN_HPP_ +#endif // ifndef MYX_BACKPORTS_CPP_SPAN_HPP_ diff --git a/src/myx/backports/qt/CMakeLists.txt b/src/myx/backports/qt/CMakeLists.txt new file mode 100644 index 0000000..0dcf6bb --- /dev/null +++ b/src/myx/backports/qt/CMakeLists.txt @@ -0,0 +1,42 @@ +# Название основной цели и имя библиотеки в текущем каталоге +set(TRGT backports-qt) + +# cmake-format: off +# Список файлов исходных текстов +set(TRGT_cpp) + +# Список заголовочных файлов +set(TRGT_hpp + ${CMAKE_CURRENT_SOURCE_DIR}/common.hpp + ) + +set(TRGT_headers ${TRGT_hpp}) +# cmake-format: on + +add_library(${TRGT} INTERFACE) +target_sources(${TRGT} INTERFACE ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clang-tidy +add_clang_tidy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clang-analyze +add_clang_analyze_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой clazy +add_clazy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +# Создание цели для проверки утилитой pvs-studio +add_pvs_check(${TRGT}) + +# Создание цели для автоматического форматирования кода +add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers}) + +target_include_directories(${TRGT} INTERFACE ${CMAKE_SOURCE_DIR}/src) + +install(FILES ${TRGT_headers} COMPONENT base-dev + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/backports/qt) +generate_pkgconfig(myx-${TRGT} COMPONENT base-dev INSTALL_LIBRARY ${MYXLIB_BUILD_LIBRARIES}) + +# Цель, используемая только для установки заголовочных файлов без компиляции проекта +add_custom_target(${TRGT}-install-headers COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=base-dev -P + "${CMAKE_BINARY_DIR}/cmake_install.cmake") diff --git a/src/myx/qt/backports.hpp b/src/myx/backports/qt/common.hpp similarity index 65% rename from src/myx/qt/backports.hpp rename to src/myx/backports/qt/common.hpp index 0ce776d..55f68b1 100644 --- a/src/myx/qt/backports.hpp +++ b/src/myx/backports/qt/common.hpp @@ -1,11 +1,9 @@ -#ifndef MYX_QT_BACKPORTS_HPP_ -#define MYX_QT_BACKPORTS_HPP_ +#ifndef MYX_BACKPORTS_QT_COMMON_HPP_ +#define MYX_BACKPORTS_QT_COMMON_HPP_ #pragma once -#if ( defined ( TARGET_LSB_ID_AstraLinuxSE ) && defined ( TARGET_LSB_CODENAME_smolensk ) ) - -#define override +#if defined( QT_VERSION ) #if QT_VERSION <= 0x050700 #include @@ -33,6 +31,7 @@ void qAsConst( const T&& ) = delete; #endif // if QT_VERSION <= 0x050700 -#endif // if ( defined ( TARGET_LSB_ID_AstraLinuxSE ) && defined ( TARGET_LSB_CODENAME_smolensk ) ) -#endif // MYX_QT_BACKPORTS_HPP_ +#endif // if defined( QT_VERSION ) + +#endif // MYX_BACKPORTS_QT_COMMON_HPP_ diff --git a/src/myx/base/config.cpp b/src/myx/base/config.cpp deleted file mode 100644 index 3e8bcfb..0000000 --- a/src/myx/base/config.cpp +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/src/myx/base/CMakeLists.txt b/src/myx/core/CMakeLists.txt similarity index 72% rename from src/myx/base/CMakeLists.txt rename to src/myx/core/CMakeLists.txt index 42627d7..8c6a34a 100644 --- a/src/myx/base/CMakeLists.txt +++ b/src/myx/core/CMakeLists.txt @@ -1,24 +1,22 @@ # Название основной цели и имя библиотеки в текущем каталоге -set(TRGT base) +set(TRGT core) # cmake-format: off # Список файлов исходных текстов -set(TRGT_cpp - ${CMAKE_CURRENT_SOURCE_DIR}/config.cpp) +set(TRGT_cpp) # Список заголовочных файлов set(TRGT_hpp ${CMAKE_CURRENT_SOURCE_DIR}/config.hpp ${CMAKE_CURRENT_SOURCE_DIR}/limits.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/span.hpp ${CMAKE_CURRENT_SOURCE_DIR}/endian_types.hpp ${CMAKE_CURRENT_SOURCE_DIR}/enum_bitmask_operations.hpp) set(TRGT_headers ${TRGT_hpp}) # cmake-format: on -add_common_library(${TRGT} OUTPUT_NAME myx-${TRGT} SOURCES ${TRGT_cpp} ${TRGT_headers}) -common_target_properties(${TRGT}) +add_library(${TRGT} INTERFACE) +target_sources(${TRGT} INTERFACE ${TRGT_cpp} ${TRGT_headers}) # Создание цели для проверки утилитой clang-tidy add_clang_tidy_check(${TRGT} ${TRGT_cpp} ${TRGT_headers}) @@ -35,15 +33,10 @@ add_pvs_check(${TRGT}) # Создание цели для автоматического форматирования кода add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers}) -target_include_directories(${TRGT} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/src) - -install(TARGETS ${TRGT}_static COMPONENT libs-dev ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -if(BUILD_SHARED_LIBS) - install(TARGETS ${TRGT}_shared COMPONENT main LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif() +target_include_directories(${TRGT} INTERFACE ${CMAKE_SOURCE_DIR}/src) generate_pkgconfig(myx-${TRGT} COMPONENT base-dev INSTALL_LIBRARY ${MYXLIB_BUILD_LIBRARIES}) -install(FILES ${TRGT_headers} ${CMAKE_BINARY_DIR}/include/myx/base/compiler_features.hpp COMPONENT base-dev +install(FILES ${TRGT_headers} ${CMAKE_BINARY_DIR}/include/myx/core/compiler_features.hpp COMPONENT base-dev DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${TRGT}) # Цель, используемая только для установки заголовочных файлов без компиляции проекта diff --git a/src/myx/base/config.hpp b/src/myx/core/config.hpp similarity index 73% rename from src/myx/base/config.hpp rename to src/myx/core/config.hpp index c179cdf..946d1b2 100644 --- a/src/myx/base/config.hpp +++ b/src/myx/core/config.hpp @@ -1,5 +1,5 @@ -#ifndef MYX_BASE_CONFIG_HPP_ -#define MYX_BASE_CONFIG_HPP_ +#ifndef MYX_CORE_CONFIG_HPP_ +#define MYX_CORE_CONFIG_HPP_ #pragma once @@ -14,4 +14,4 @@ #endif #define MYXLIB_INLINE -#endif // MYX_BASE_CONFIG_HPP_ +#endif // MYX_CORE_CONFIG_HPP_ diff --git a/src/myx/base/config_flags.hpp.in b/src/myx/core/config_flags.hpp.in similarity index 100% rename from src/myx/base/config_flags.hpp.in rename to src/myx/core/config_flags.hpp.in diff --git a/src/myx/base/endian_types.hpp b/src/myx/core/endian_types.hpp similarity index 81% rename from src/myx/base/endian_types.hpp rename to src/myx/core/endian_types.hpp index 063779b..a76747a 100644 --- a/src/myx/base/endian_types.hpp +++ b/src/myx/core/endian_types.hpp @@ -3,7 +3,7 @@ #pragma once -#include +#include #include #include @@ -17,7 +17,7 @@ namespace myx { -namespace base { +namespace core { template< typename T > class EndianTypesBase @@ -29,8 +29,8 @@ protected: static T swapBytes( const T& b ) { T n; - myx::base::span< uint8_t > sn( reinterpret_cast< uint8_t* >( &n ), sizeof( T ) ); - myx::base::span< const uint8_t > sb( reinterpret_cast< const uint8_t* >( &b ), sizeof( T ) ); + std::span< uint8_t > sn( reinterpret_cast< uint8_t* >( &n ), sizeof( T ) ); //NOLINT + std::span< const uint8_t > sb( reinterpret_cast< const uint8_t* >( &b ), sizeof( T ) ); //NOLINT std::reverse_copy( sb.begin(), sb.end(), sn.begin() ); return( n ); } // swapBytes @@ -45,12 +45,12 @@ template< typename T > class LittleEndianType : public EndianTypesBase< T > { protected: - T m_data; + T m_data; //NOLINT static T transform( const T& b ) { const uint16_t k_i = 1; - return( ( reinterpret_cast< const char& >( k_i ) == 1 ) ? b : EndianTypesBase< T >::swapBytes( b ) ); + return( ( reinterpret_cast< const char& >( k_i ) == 1 ) ? b : EndianTypesBase< T >::swapBytes( b ) ); //NOLINT } @@ -106,12 +106,12 @@ template< typename T > class BigEndianType : public EndianTypesBase< T > { protected: - T m_data; + T m_data; //NOLINT static T transform( const T& b ) { const uint16_t k_i = 1; - return( ( reinterpret_cast< const char& >( k_i ) == 1 ) ? EndianTypesBase< T >::swapBytes( b ) : b ); + return( ( reinterpret_cast< const char& >( k_i ) == 1 ) ? EndianTypesBase< T >::swapBytes( b ) : b ); //NOLINT } @@ -163,30 +163,30 @@ public: #endif }; // class BigEndianType -} // namespace base +} // namespace core } // namespace myx -using leint16 = myx::base::LittleEndianType< int16_t >; -using leint32 = myx::base::LittleEndianType< int32_t >; -using leint64 = myx::base::LittleEndianType< int64_t >; +using leint16 = myx::core::LittleEndianType< int16_t >; //NOLINT +using leint32 = myx::core::LittleEndianType< int32_t >; //NOLINT +using leint64 = myx::core::LittleEndianType< int64_t >; //NOLINT -using leuint16 = myx::base::LittleEndianType< uint16_t >; -using leuint32 = myx::base::LittleEndianType< uint32_t >; -using leuint64 = myx::base::LittleEndianType< uint64_t >; +using leuint16 = myx::core::LittleEndianType< uint16_t >; //NOLINT +using leuint32 = myx::core::LittleEndianType< uint32_t >; //NOLINT +using leuint64 = myx::core::LittleEndianType< uint64_t >; //NOLINT -using lefloat = myx::base::LittleEndianType< float >; -using ledouble = myx::base::LittleEndianType< double >; +using lefloat = myx::core::LittleEndianType< float >; //NOLINT +using ledouble = myx::core::LittleEndianType< double >; //NOLINT -using beint16 = myx::base::BigEndianType< int16_t >; -using beint32 = myx::base::BigEndianType< int32_t >; -using beint64 = myx::base::BigEndianType< int64_t >; +using beint16 = myx::core::BigEndianType< int16_t >; //NOLINT +using beint32 = myx::core::BigEndianType< int32_t >; //NOLINT +using beint64 = myx::core::BigEndianType< int64_t >; //NOLINT -using beuint16 = myx::base::BigEndianType< uint16_t >; -using beuint32 = myx::base::BigEndianType< uint32_t >; -using beuint64 = myx::base::BigEndianType< uint64_t >; +using beuint16 = myx::core::BigEndianType< uint16_t >; //NOLINT +using beuint32 = myx::core::BigEndianType< uint32_t >; //NOLINT +using beuint64 = myx::core::BigEndianType< uint64_t >; //NOLINT -using befloat = myx::base::BigEndianType< float >; -using bedouble = myx::base::BigEndianType< double >; +using befloat = myx::core::BigEndianType< float >; //NOLINT +using bedouble = myx::core::BigEndianType< double >; //NOLINT #endif // MYX_BASE_ENDIAN_TYPES_HPP_ diff --git a/src/myx/base/enum_bitmask_operations.hpp b/src/myx/core/enum_bitmask_operations.hpp similarity index 91% rename from src/myx/base/enum_bitmask_operations.hpp rename to src/myx/core/enum_bitmask_operations.hpp index e7cf829..1c10f8c 100644 --- a/src/myx/base/enum_bitmask_operations.hpp +++ b/src/myx/core/enum_bitmask_operations.hpp @@ -1,5 +1,5 @@ -#ifndef MYX_BASE_ENUM_BITWISE_OPERATIONS_HPP_ -#define MYX_BASE_ENUM_BITWISE_OPERATIONS_HPP_ +#ifndef MYX_CORE_ENUM_BITWISE_OPERATIONS_HPP_ +#define MYX_CORE_ENUM_BITWISE_OPERATIONS_HPP_ #pragma once @@ -7,7 +7,7 @@ namespace myx { -namespace base { +namespace core { template< typename Enum > struct EnableBitMaskOperators @@ -61,7 +61,7 @@ operator &=( Enum& lhs, Enum rhs ) return( lhs ); } -} // namespace base +} // namespace core } // namespace myx @@ -85,9 +85,9 @@ operator &=( Enum& lhs, Enum rhs ) // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) #define ENABLE_BITMASK_OPERATORS( x ) \ template<> \ - struct myx::base::EnableBitMaskOperators< x > \ + struct myx::core::EnableBitMaskOperators< x > \ { \ static const bool kEnable = true; \ }; -#endif // ifndef MYX_BASE_ENUM_BITWISE_OPERATIONS_HPP_ +#endif // ifndef MYX_CORE_ENUM_BITWISE_OPERATIONS_HPP_ diff --git a/src/myx/base/limits.hpp b/src/myx/core/limits.hpp similarity index 85% rename from src/myx/base/limits.hpp rename to src/myx/core/limits.hpp index 3f5d390..92a9e5e 100644 --- a/src/myx/base/limits.hpp +++ b/src/myx/core/limits.hpp @@ -1,5 +1,5 @@ -#ifndef MYX_BASE_LIMITS_HPP_ -#define MYX_BASE_LIMITS_HPP_ +#ifndef MYX_CORE_LIMITS_HPP_ +#define MYX_CORE_LIMITS_HPP_ #pragma once @@ -7,7 +7,7 @@ namespace myx { -namespace base { +namespace core { /** * @brief Константа, представляющая значение, не являющееся числом, для типа float @@ -24,8 +24,8 @@ constexpr double kDoubleNAN { std::numeric_limits< double >::quiet_NaN() }; */ constexpr double kLongDoubleNAN { std::numeric_limits< long double >::quiet_NaN() }; -} // namespace base +} // namespace core } // namespace myx -#endif // MYX_BASE_LIMITS_HPP_ +#endif // MYX_CORE_LIMITS_HPP_ diff --git a/src/myx/filesystem/paths.cpp b/src/myx/filesystem/paths.cpp index ee76954..9437a2c 100644 --- a/src/myx/filesystem/paths.cpp +++ b/src/myx/filesystem/paths.cpp @@ -1,7 +1,7 @@ -#ifndef MYX_BASE_PATHS_CPP_ -#define MYX_BASE_PATHS_CPP_ +#ifndef MYX_CORE_PATHS_CPP_ +#define MYX_CORE_PATHS_CPP_ -#include +#include #include #include @@ -368,4 +368,4 @@ MYXLIB_INLINE const QString& Paths::prefixDirectory() const } // namespace myx -#endif // MYX_BASE_PATHS_CPP_ +#endif // MYX_CORE_PATHS_CPP_ diff --git a/src/myx/filesystem/paths.hpp b/src/myx/filesystem/paths.hpp index c565e5a..de22f4c 100644 --- a/src/myx/filesystem/paths.hpp +++ b/src/myx/filesystem/paths.hpp @@ -8,7 +8,7 @@ #pragma once -#include +#include #include #include diff --git a/src/myx/qt/CMakeLists.txt b/src/myx/qt/CMakeLists.txt index f2d1861..117a821 100644 --- a/src/myx/qt/CMakeLists.txt +++ b/src/myx/qt/CMakeLists.txt @@ -17,7 +17,6 @@ set(TRGT_moc_private_hpp ) set(TRGT_hpp - ${CMAKE_CURRENT_SOURCE_DIR}/backports.hpp ${CMAKE_CURRENT_SOURCE_DIR}/translators.hpp ) diff --git a/src/myx/qt/posix_signal_watcher.cpp b/src/myx/qt/posix_signal_watcher.cpp index 1a26d4b..b0d8f9b 100644 --- a/src/myx/qt/posix_signal_watcher.cpp +++ b/src/myx/qt/posix_signal_watcher.cpp @@ -1,7 +1,7 @@ #ifndef MYX_QT_POSIX_SIGNAL_WATCHER_CPP_ #define MYX_QT_POSIX_SIGNAL_WATCHER_CPP_ -#include +#include #include #include @@ -27,8 +27,8 @@ PosixSignalWatcherPrivate::PosixSignalWatcherPrivate( PosixSignalWatcher* q ) : #endif // Create a notifier for the read end of the pair - m_notifier.reset( new QSocketNotifier( mSockpair[1], QSocketNotifier::Read ) ); - + // m_notifier.reset( new QSocketNotifier( mSockpair[1], QSocketNotifier::Read ) ); + m_notifier = std::make_unique< QSocketNotifier >( mSockpair[1], QSocketNotifier::Read ); // Called when the signal handler has written to the socket pair. // Emits the Posix signal as a Qt signal. @@ -63,7 +63,7 @@ MYXLIB_INLINE void PosixSignalWatcherPrivate::watchForSignal( int signal ) #if MYX_QT_HAS_POSIX_SIGNALS // Register a sigaction which will write to the socket pair struct sigaction sigact {}; - sigact.sa_handler = PosixSignalWatcherPrivate::signalHandler; + sigact.sa_handler = PosixSignalWatcherPrivate::signalHandler; //NOLINT sigact.sa_flags = 0; sigemptyset( &sigact.sa_mask ); sigact.sa_flags |= SA_RESTART; @@ -98,8 +98,6 @@ MYXLIB_INLINE PosixSignalWatcher::PosixSignalWatcher( QObject* parent ) : } -MYXLIB_INLINE PosixSignalWatcher::~PosixSignalWatcher() = default; - /*! * Register a signal handler for the given \a signal. * diff --git a/src/myx/qt/posix_signal_watcher.hpp b/src/myx/qt/posix_signal_watcher.hpp index b4aaf6b..7b465fc 100644 --- a/src/myx/qt/posix_signal_watcher.hpp +++ b/src/myx/qt/posix_signal_watcher.hpp @@ -3,7 +3,7 @@ #pragma once -#include +#include #include @@ -33,14 +33,13 @@ class PosixSignalWatcher : public QObject public: explicit PosixSignalWatcher( QObject* parent = nullptr ); - ~PosixSignalWatcher() override; void watchForSignal( int signal ); Q_SIGNAL void posixSignal( int signal ); private: PosixSignalWatcherPrivate* const d_ptr = nullptr; - Q_DECLARE_PRIVATE( PosixSignalWatcher ) + Q_DECLARE_PRIVATE( PosixSignalWatcher ) //NOLINT }; // class PosixSignalWatcher } // namespace qt diff --git a/src/myx/qt/posix_signal_watcher_p.hpp b/src/myx/qt/posix_signal_watcher_p.hpp index 2375397..d31b36c 100644 --- a/src/myx/qt/posix_signal_watcher_p.hpp +++ b/src/myx/qt/posix_signal_watcher_p.hpp @@ -3,7 +3,7 @@ #pragma once -#include +#include #include #include diff --git a/src/myx/qt/translators.cpp b/src/myx/qt/translators.cpp index 86b4b9c..32fe57f 100644 --- a/src/myx/qt/translators.cpp +++ b/src/myx/qt/translators.cpp @@ -1,7 +1,7 @@ #ifndef MYX_QT_TRANSLATORS_CPP_ #define MYX_QT_TRANSLATORS_CPP_ -#include +#include #include #include diff --git a/src/myx/qt/translators.hpp b/src/myx/qt/translators.hpp index ae24a51..46aa162 100644 --- a/src/myx/qt/translators.hpp +++ b/src/myx/qt/translators.hpp @@ -3,8 +3,8 @@ #pragma once -#include -#include +#include +#include #include