diff --git a/.travis.yml b/.travis.yml index 99c8f4c9..8ae249d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,55 @@ +arch: +- amd64 +- arm64 language: cpp -sudo: required +os: linux dist: focal +addons: + apt: + packages: + - build-essential + - cmake + - libboost-all-dev + - libconfig++-dev + - libavcodec-dev + - libavutil-dev + - libavformat-dev + - ffmpeg + - libstb-dev + - libpstreams-dev + - libtag1-dev + - libpam0g-dev + - libgraphicsmagick++1-dev +compiler: +- clang +- gcc before_install: -- eval "${MATRIX_EVAL}" -- sudo apt-get install build-essential cmake libboost-all-dev libconfig++-dev libavcodec-dev libavutil-dev libavformat-dev ffmpeg libstb-dev libpstreams-dev libconfig++-dev libpstreams-dev libtag1-dev libpam0g-dev -- git clone https://github.com/emweb/wt.git wt -- pushd wt; -- git checkout 4.4.0 -- cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr && sudo make install -- popd -script: cmake -DCMAKE_BUILD_TYPE=Release . && make && make test +- | + if [ ! -d ${HOME}/wt-${WT_VERSION}/include ]; then + git clone https://github.com/emweb/wt.git wt + cd wt + git checkout ${WT_VERSION} + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${WT_INSTALL_PREFIX} -DENABLE_LIBWTTEST=OFF + make install + cd .. + fi +script: mkdir build && cd build && cmake -DCMAKE_MODULE_PATH=${WT_INSTALL_PREFIX}/lib/cmake/wt -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DUSE_PAM=${USE_PAM} -DIMAGE_LIBRARY=${IMAGE_LIBRARY} .. && make && make test +cache: + directories: + - ${HOME}/wt-${WT_VERSION} env: - global: + global: - MAKEFLAGS="-j 2" + - WT_VERSION=4.4.0 + - WT_INSTALL_PREFIX=${HOME}/wt-${WT_VERSION} + jobs: + - BUILD_TYPE=Release USE_PAM=ON IMAGE_LIBRARY=STB + - BUILD_TYPE=Release USE_PAM=OFF IMAGE_LIBRARY=STB + - BUILD_TYPE=Release USE_PAM=OFF IMAGE_LIBRARY=GraphicsMagick++ + - BUILD_TYPE=Debug USE_PAM=ON IMAGE_LIBRARY=STB + +# clang7 is not enough for full c++17 support +jobs: + exclude: + - compiler: clang + arch: amd64 diff --git a/CMakeLists.txt b/CMakeLists.txt index e2d8e509..a56f2fa0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.12) project(lms) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules/) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) @@ -14,27 +14,57 @@ find_package(FFMPEGAV REQUIRED) find_package(Taglib REQUIRED) find_package(Boost REQUIRED COMPONENTS system program_options) find_package(PStreams REQUIRED) +find_package(Wt REQUIRED COMPONENTS Wt Dbo DboSqlite3 HTTP) find_package(PAM) find_package(STB) pkg_check_modules(GRAPHICSMAGICKXX GraphicsMagick++) +# WT +if (NOT Wt_FOUND) + message(FATAL_ERROR "Wt package not found!") +endif () +if (NOT TARGET Wt::Wt) + message(FATAL_ERROR "Cannot find Wt::Wt!") +endif () +if (NOT TARGET Wt::Dbo) + message(FATAL_ERROR "Cannot find Wt::Dbo!") +endif () +if (NOT TARGET Wt::DboSqlite3) + message(FATAL_ERROR "Cannot find Wt::DboSqlite3!") +endif () +if (NOT TARGET Wt::HTTP) + message(FATAL_ERROR "Cannot find Wt::HTTP!") +endif () + +# PAM +option(USE_PAM "Use the PAM backend authentication API" ON) +if (USE_PAM AND NOT PAM_FOUND) + message(WARNING "PAM library not found: disabling") + set(USE_PAM OFF) +endif () +if (USE_PAM) + message(STATUS "Using PAM authentication backend") +else () + message(STATUS "NOT using PAM authentication backend") +endif () + +# IMAGE if (STB_FOUND) set(IMAGE_LIBRARY STB CACHE STRING "STB library") elseif (GRAPHICSMAGICKXX_FOUND) - set(IMAGE_LIBRARY GraphicksMagick++ CACHE STRING "GraphicsMagick++") + set(IMAGE_LIBRARY GraphicsMagick++ CACHE STRING "GraphicsMagick++") else () message(FATAL_ERROR "Cannot find suitable image library") endif() -set_property(CACHE IMAGE_LIBRARY PROPERTY STRINGS GraphicksMagick++ STB) - -if (IMAGE_LIBRARY STREQUAL GraphicksMagick++ AND NOT GRAPHICSMAGICKXX_FOUND) - message(FATAL_ERROR "GraphicksMagick++ not found") +set_property(CACHE IMAGE_LIBRARY PROPERTY STRINGS GraphicsMagick++ STB) +if (IMAGE_LIBRARY STREQUAL GraphicsMagick++ AND NOT GRAPHICSMAGICKXX_FOUND) + message(FATAL_ERROR "GraphicsMagick++ not found") elseif (IMAGE_LIBRARY STREQUAL STB AND NOT STB_FOUND) message(FATAL_ERROR "STB not found") endif () - message(STATUS "IMAGE_LIBRARY set to ${IMAGE_LIBRARY}") + add_subdirectory(src) install(DIRECTORY approot DESTINATION share/lms) diff --git a/docker/Dockerfile b/docker/Dockerfile index 48fae34f..77a11bc0 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -47,7 +47,7 @@ RUN \ curl -sLO https://github.com/nothings/stb/archive/${STB_VERSION}.tar.gz && \ tar -x --strip-components=1 -f ${STB_VERSION}.tar.gz && \ mkdir -p ${PREFIX}/include/stb && \ - cp *.h ${PREFIX}/include/stb + cp ./*.h ${PREFIX}/include/stb # ffmpeg RUN \ @@ -98,7 +98,7 @@ RUN \ RUN \ DIR=/tmp/wt && mkdir -p ${DIR} && cd ${DIR} && \ - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} -DBUILD_EXAMPLES=NO && \ + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} -DBUILD_EXAMPLES=NO -DENABLE_LIBWTTEST=OFF && \ make && \ make install @@ -117,7 +117,7 @@ RUN \ RUN \ DIR=/tmp/lms && mkdir -p ${DIR} && cd ${DIR} && \ - PKG_CONFIG_PATH=/tmp/install/lib/pkgconfig CXXFLAGS="-I${PREFIX}/include" LDFLAGS="-L${PREFIX}/lib -Wl,--rpath-link=${PREFIX}/lib" cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} && \ + PKG_CONFIG_PATH=/tmp/install/lib/pkgconfig CXXFLAGS="-I${PREFIX}/include" LDFLAGS="-L${PREFIX}/lib -Wl,--rpath-link=${PREFIX}/lib" cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_MODULE_PATH=${PREFIX}/lib/cmake/wt && \ make && \ LD_LIBRARY_PATH=${PREFIX}/lib make test && \ make install && \ diff --git a/src/libs/auth/CMakeLists.txt b/src/libs/auth/CMakeLists.txt index a3c18dc8..bceb83c3 100644 --- a/src/libs/auth/CMakeLists.txt +++ b/src/libs/auth/CMakeLists.txt @@ -10,7 +10,7 @@ target_include_directories(lmsauth INTERFACE ) target_include_directories(lmsauth PRIVATE - include/ + include ) target_link_libraries(lmsauth PRIVATE @@ -21,15 +21,15 @@ target_link_libraries(lmsauth PRIVATE target_link_libraries(lmsauth PUBLIC pthread Boost::system - wt + Wt::Wt ) -if (PAM_FOUND) +if (USE_PAM) target_compile_options(lmsauth PRIVATE "-DLMS_SUPPORT_PAM") target_sources(lmsauth PRIVATE impl/pam/PAM.cpp) target_include_directories(lmsauth PRIVATE ${PAM_INCLUDE_DIR}) target_link_libraries(lmsauth PRIVATE ${PAM_LIBRARIES}) -endif (PAM_FOUND) +endif (USE_PAM) install(TARGETS lmsauth DESTINATION lib) diff --git a/src/libs/auth/impl/AuthTokenService.hpp b/src/libs/auth/impl/AuthTokenService.hpp index 00b0b5a8..c63f8193 100644 --- a/src/libs/auth/impl/AuthTokenService.hpp +++ b/src/libs/auth/impl/AuthTokenService.hpp @@ -37,9 +37,6 @@ namespace Auth { AuthTokenService(std::size_t maxThrottlerEntries); - AuthTokenService() = default; - ~AuthTokenService() = default; - AuthTokenService(const AuthTokenService&) = delete; AuthTokenService& operator=(const AuthTokenService&) = delete; AuthTokenService(AuthTokenService&&) = delete; diff --git a/src/libs/auth/impl/PasswordService.hpp b/src/libs/auth/impl/PasswordService.hpp index a5b8784c..ddbb7e31 100644 --- a/src/libs/auth/impl/PasswordService.hpp +++ b/src/libs/auth/impl/PasswordService.hpp @@ -38,9 +38,6 @@ namespace Auth { PasswordService(std::size_t maxThrottlerEntries); - PasswordService() = default; - ~PasswordService() = default; - PasswordService(const PasswordService&) = delete; PasswordService& operator=(const PasswordService&) = delete; PasswordService(PasswordService&&) = delete; @@ -48,7 +45,7 @@ namespace Auth { private: - bool isAuthModeSupported(Database::User::AuthMode authMode) const; + bool isAuthModeSupported(Database::User::AuthMode authMode) const override; PasswordCheckResult checkUserPassword(Database::Session& session, const boost::asio::ip::address& clientAddress, const std::string& loginName, const std::string& password) override; Database::User::PasswordHash hashPassword(const std::string& password) const override; bool evaluatePasswordStrength(const std::string& loginName, const std::string& password) const override; diff --git a/src/libs/av/CMakeLists.txt b/src/libs/av/CMakeLists.txt index ce3fb126..a5c24167 100644 --- a/src/libs/av/CMakeLists.txt +++ b/src/libs/av/CMakeLists.txt @@ -11,7 +11,7 @@ target_include_directories(lmsav INTERFACE ) target_include_directories(lmsav PRIVATE - include/ + include ${AVCODEC_INCLUDE_DIR} ${AVFORMAT_INCLUDE_DIR} ${AVUTIL_INCLUDE_DIR} @@ -19,10 +19,7 @@ target_include_directories(lmsav PRIVATE target_link_libraries(lmsav PUBLIC lmsutils - avformat - avutil std::filesystem - wt ) target_link_libraries(lmsav PRIVATE diff --git a/src/libs/cover/CMakeLists.txt b/src/libs/cover/CMakeLists.txt index e8c8f09c..3365d4a0 100644 --- a/src/libs/cover/CMakeLists.txt +++ b/src/libs/cover/CMakeLists.txt @@ -28,7 +28,7 @@ if (IMAGE_LIBRARY STREQUAL STB) ) target_compile_options(lmscover PRIVATE "-DLMS_SUPPORT_IMAGE_STB") target_include_directories(lmscover PRIVATE ${STB_INCLUDE_DIR}) -elseif (IMAGE_LIBRARY STREQUAL GraphicksMagick++) +elseif (IMAGE_LIBRARY STREQUAL GraphicsMagick++) target_sources(lmscover PRIVATE impl/graphicsmagick/JPEGImage.cpp impl/graphicsmagick/RawImage.cpp diff --git a/src/libs/database/CMakeLists.txt b/src/libs/database/CMakeLists.txt index 93bcb6f6..00a2ef23 100644 --- a/src/libs/database/CMakeLists.txt +++ b/src/libs/database/CMakeLists.txt @@ -24,13 +24,13 @@ target_include_directories(lmsdatabase PRIVATE ) target_link_libraries(lmsdatabase PRIVATE - wtdbosqlite3 + Wt::DboSqlite3 ) target_link_libraries(lmsdatabase PUBLIC lmsutils std::filesystem - wtdbo + Wt::Dbo ) install(TARGETS lmsdatabase DESTINATION lib) diff --git a/src/libs/database/impl/SqlQuery.cpp b/src/libs/database/impl/SqlQuery.cpp index c10eaee1..b08cd1ce 100644 --- a/src/libs/database/impl/SqlQuery.cpp +++ b/src/libs/database/impl/SqlQuery.cpp @@ -145,7 +145,7 @@ FromClause::FromClause(const std::string& clause) FromClause& FromClause::And(const FromClause& clause) { - for (const std::string fromClause : clause._clause) + for (const std::string& fromClause : clause._clause) { _clause.push_back(fromClause); } diff --git a/src/libs/metadata/impl/AvFormatParser.cpp b/src/libs/metadata/impl/AvFormatParser.cpp index 3da2e720..b55eed4d 100644 --- a/src/libs/metadata/impl/AvFormatParser.cpp +++ b/src/libs/metadata/impl/AvFormatParser.cpp @@ -54,7 +54,7 @@ findFirstValueOfAs(const MetadataMap& metadataMap, std::initializer_list strUuids = StringUtils::splitString(*str, "/"); std::vector res; - for (const std::string strUuid : strUuids) + for (const std::string& strUuid : strUuids) { std::optional uuid {UUID::fromString(strUuid)}; if (!uuid) diff --git a/src/libs/recommendation/CMakeLists.txt b/src/libs/recommendation/CMakeLists.txt index b33e36c3..7bb9696f 100644 --- a/src/libs/recommendation/CMakeLists.txt +++ b/src/libs/recommendation/CMakeLists.txt @@ -12,6 +12,7 @@ target_include_directories(lmsrecommendation INTERFACE ) target_include_directories(lmsrecommendation PRIVATE + impl include ) @@ -19,10 +20,7 @@ target_link_libraries(lmsrecommendation PRIVATE lmsdatabase lmssom std::filesystem - wt ) -target_include_directories(lmsrecommendation PRIVATE impl) - install(TARGETS lmsrecommendation DESTINATION lib) diff --git a/src/libs/recommendation/impl/Engine.cpp b/src/libs/recommendation/impl/Engine.cpp index ca520850..e3986ce5 100644 --- a/src/libs/recommendation/impl/Engine.cpp +++ b/src/libs/recommendation/impl/Engine.cpp @@ -265,7 +265,6 @@ Engine::loadClassifier(std::unique_ptr classifier, } _pendingClassifiersCondvar.notify_one(); - } void diff --git a/src/libs/scanner/CMakeLists.txt b/src/libs/scanner/CMakeLists.txt index 07f6cf1c..4f5fa30b 100644 --- a/src/libs/scanner/CMakeLists.txt +++ b/src/libs/scanner/CMakeLists.txt @@ -22,7 +22,7 @@ target_link_libraries(lmsscanner PRIVATE target_link_libraries(lmsscanner PUBLIC std::filesystem - wt + Wt::Wt ) install(TARGETS lmsscanner DESTINATION lib) diff --git a/src/libs/subsonic/CMakeLists.txt b/src/libs/subsonic/CMakeLists.txt index 439e6289..e11f5814 100644 --- a/src/libs/subsonic/CMakeLists.txt +++ b/src/libs/subsonic/CMakeLists.txt @@ -20,15 +20,15 @@ target_link_libraries(lmssubsonic PRIVATE lmsauth lmsav lmscover + lmsdatabase lmsrecommendation + lmsscanner lmsutils std::filesystem ) target_link_libraries(lmssubsonic PUBLIC - lmsdatabase - lmsscanner - wt + Wt::Wt ) install(TARGETS lmssubsonic DESTINATION lib) diff --git a/src/libs/utils/CMakeLists.txt b/src/libs/utils/CMakeLists.txt index 37a21f76..75e11b19 100644 --- a/src/libs/utils/CMakeLists.txt +++ b/src/libs/utils/CMakeLists.txt @@ -28,7 +28,7 @@ target_link_libraries(lmsutils PRIVATE target_link_libraries(lmsutils PUBLIC Boost::system std::filesystem - wt + Wt::Wt ) install(TARGETS lmsutils DESTINATION lib) diff --git a/src/libs/utils/impl/Zipper.cpp b/src/libs/utils/impl/Zipper.cpp index 0da558f2..33933378 100644 --- a/src/libs/utils/impl/Zipper.cpp +++ b/src/libs/utils/impl/Zipper.cpp @@ -35,9 +35,8 @@ namespace Zip class ZipHeader { public: - constexpr ZipHeader(std::byte* buffer, SizeType bufferSize) + constexpr ZipHeader(std::byte* buffer, SizeType) : _buffer {buffer} - , _bufferSize {bufferSize} {} enum GeneralPurposeFlag : std::uint16_t @@ -71,7 +70,6 @@ namespace Zip private: std::byte* _buffer {}; - const SizeType _bufferSize {}; }; void diff --git a/src/lms/CMakeLists.txt b/src/lms/CMakeLists.txt index 3239f633..ba77ba17 100644 --- a/src/lms/CMakeLists.txt +++ b/src/lms/CMakeLists.txt @@ -49,8 +49,8 @@ target_link_libraries(lms PRIVATE lmsscanner lmssubsonic lmsutils - wt - wthttp + Wt::Wt + Wt::HTTP ) install(TARGETS lms DESTINATION bin)