From 1a9b392a71186d2014034a32bffd3f6cd75a5ac0 Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 27 Apr 2024 15:16:03 +0200 Subject: [PATCH] Upgraded alpine images --- CMakeLists.txt | 36 +------------------ Dockerfile-build-alpine | 4 +-- Dockerfile-build-arch | 2 +- Dockerfile-release | 11 +++--- INSTALL.md | 2 +- cmake/modules/FindSTB.cmake | 10 ------ cmake/modules/FindStbImage.cmake | 18 ++++++++++ src/libs/av/CMakeLists.txt | 2 +- src/libs/core/CMakeLists.txt | 3 ++ src/libs/image/CMakeLists.txt | 28 ++++++++++----- .../image/impl/graphicsmagick/JPEGImage.hpp | 4 --- .../image/impl/graphicsmagick/RawImage.hpp | 4 --- src/libs/image/impl/stb/RawImage.cpp | 14 ++++++++ src/libs/image/impl/stb/RawImage.hpp | 4 --- src/libs/metadata/CMakeLists.txt | 1 + src/libs/services/auth/CMakeLists.txt | 16 +++++++++ 16 files changed, 82 insertions(+), 77 deletions(-) delete mode 100644 cmake/modules/FindSTB.cmake create mode 100644 cmake/modules/FindStbImage.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a203733..e0727bfc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,18 +17,12 @@ if(ENABLE_TESTS) find_package(GTest REQUIRED) endif() +# Common dependencies find_package(PkgConfig REQUIRED) find_package(Threads REQUIRED) find_package(Filesystem REQUIRED) find_package(Boost REQUIRED COMPONENTS system program_options iostreams) find_package(Wt REQUIRED COMPONENTS Wt Dbo DboSqlite3 HTTP) -pkg_check_modules(Taglib REQUIRED IMPORTED_TARGET taglib) -pkg_check_modules(Config++ REQUIRED IMPORTED_TARGET libconfig++) -pkg_check_modules(GraphicsMagick++ IMPORTED_TARGET GraphicsMagick++) -pkg_check_modules(LIBAV IMPORTED_TARGET libavcodec libavutil libavformat) -pkg_check_modules(Archive REQUIRED IMPORTED_TARGET libarchive) -find_package(PAM) -find_package(STB) # WT if (NOT Wt_FOUND) @@ -47,34 +41,6 @@ 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 (GraphicsMagick++_FOUND) - set(IMAGE_LIBRARY GraphicsMagick++ CACHE STRING "GraphicsMagick++") -else () - message(FATAL_ERROR "Cannot find suitable image library") -endif() -set_property(CACHE IMAGE_LIBRARY PROPERTY STRINGS GraphicsMagick++ STB) -if (IMAGE_LIBRARY STREQUAL GraphicsMagick++ AND NOT GraphicsMagick++_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}") - # Benchmark option(BUILD_BENCHMARKS "Build benchmarks" OFF) if (BUILD_BENCHMARKS) diff --git a/Dockerfile-build-alpine b/Dockerfile-build-alpine index 02c18010..e4a29b8b 100644 --- a/Dockerfile-build-alpine +++ b/Dockerfile-build-alpine @@ -1,5 +1,5 @@ FROM --platform=$BUILDPLATFORM tonistiigi/xx AS xx -FROM --platform=$BUILDPLATFORM alpine:3.18 +FROM --platform=$BUILDPLATFORM alpine:3.19 ARG BUILD_PACKAGES="\ clang \ @@ -36,7 +36,7 @@ ARG LMS_BUILD_TYPE="Release" RUN \ DIR=/tmp/lms/build && mkdir -p ${DIR} && cd ${DIR} && \ xx-info is-cross && export BUILD_TESTS=OFF || export BUILD_TESTS=ON && \ - PKG_CONFIG_PATH=/$(xx-info)/usr/lib/pkgconfig cmake /tmp/lms/ -DCMAKE_INCLUDE_PATH=${PREFIX}/include -DCMAKE_BUILD_TYPE=${LMS_BUILD_TYPE} $(xx-clang --print-cmake-defines) -DCMAKE_PREFIX_PATH=/$(xx-info)/usr/lib/cmake -DBUILD_TESTING=${BUILD_TESTS} -DBUILD_BENCHMARKS=ON && \ + PKG_CONFIG_PATH=/$(xx-info)/usr/lib/pkgconfig cmake /tmp/lms/ -DCMAKE_INCLUDE_PATH=/$(xx-info)/usr/include -DCMAKE_BUILD_TYPE=${LMS_BUILD_TYPE} $(xx-clang --print-cmake-defines) -DCMAKE_PREFIX_PATH=/$(xx-info)/usr/lib/cmake -DBUILD_TESTING=${BUILD_TESTS} -DBUILD_BENCHMARKS=ON && \ VERBOSE=1 make -j$(nproc) && \ xx-verify src/lms/lms && \ (xx-info is-cross || make test) diff --git a/Dockerfile-build-arch b/Dockerfile-build-arch index 82cc3ee0..b197342c 100644 --- a/Dockerfile-build-arch +++ b/Dockerfile-build-arch @@ -23,6 +23,6 @@ COPY . /tmp/lms/ ARG LMS_BUILD_TYPE="Release" RUN \ DIR=/tmp/lms/build && mkdir -p ${DIR} && cd ${DIR} && \ - cmake /tmp/lms/ -DCMAKE_BUILD_TYPE=${LMS_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_BENCHMARKS=ON && \ + cmake /tmp/lms/ -DCMAKE_BUILD_TYPE=${LMS_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=/usr -DLMS_IMAGE_BACKEND=graphicsmagick -DBUILD_BENCHMARKS=ON && \ VERBOSE=1 make -j$(nproc) && \ make test diff --git a/Dockerfile-release b/Dockerfile-release index b78366dc..a4702988 100644 --- a/Dockerfile-release +++ b/Dockerfile-release @@ -1,4 +1,4 @@ -FROM alpine:3.18 AS build +FROM alpine:3.19 AS build WORKDIR /tmp/workdir @@ -37,7 +37,7 @@ ARG BUILD_PACKAGES=" \ RUN apk add --no-cache --update ${BUILD_PACKAGES} # ffmpeg -ARG FFMPEG_VERSION=4.3.5 +ARG FFMPEG_VERSION=6.1.1 RUN \ DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \ curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \ @@ -79,7 +79,7 @@ RUN \ make distclean # WT -ARG WT_VERSION=4.10.2 +ARG WT_VERSION=4.10.4 RUN \ DIR=/tmp/wt && mkdir -p ${DIR} && cd ${DIR} && \ curl -sLO https://github.com/emweb/wt/archive/${WT_VERSION}.tar.gz && \ @@ -92,7 +92,7 @@ RUN \ make install # STB -ARG STB_VERSION=5736b15f7ea0ffb08dd38af21067c314d6a3aae9 +ARG STB_VERSION=ae721c50eaf761660b4f90cc590453cdb0c2acd0 RUN \ DIR=/tmp/stb && mkdir -p ${DIR} && cd ${DIR} && \ curl -sLO https://github.com/nothings/stb/archive/${STB_VERSION}.tar.gz && \ @@ -134,7 +134,7 @@ RUN \ rm -rf /tmp/fakeroot/share/Wt/resources/themes ## Release Stage -FROM alpine:3.18 AS release +FROM alpine:3.19 AS release LABEL maintainer="Emeric Poupon " ARG RUNTIME_PACKAGES=" \ @@ -179,4 +179,3 @@ COPY --from=build /tmp/fakeroot/share/lms/lms.conf /etc/lms.conf EXPOSE 5082 ENTRYPOINT ["/usr/bin/lms"] - diff --git a/INSTALL.md b/INSTALL.md index 0e3d7b83..b97d2fe6 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -54,7 +54,7 @@ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ``` __Notes__: * you can customize the installation directory using `-DCMAKE_INSTALL_PREFIX=path` (defaults to `/usr/local`). -* you can customize the image library using `-DIMAGE_LIBRARY=` +* you can customize the image library using `-DLMS_IMAGE_BACKEND=` (defaults to `stb`) ```sh make ``` diff --git a/cmake/modules/FindSTB.cmake b/cmake/modules/FindSTB.cmake deleted file mode 100644 index 9da76b57..00000000 --- a/cmake/modules/FindSTB.cmake +++ /dev/null @@ -1,10 +0,0 @@ -find_path(STB_INCLUDE_DIR stb_image.h PATH_SUFFIXES stb) - -include(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS( - STB - REQUIRED_VARS STB_INCLUDE_DIR -) - - diff --git a/cmake/modules/FindStbImage.cmake b/cmake/modules/FindStbImage.cmake new file mode 100644 index 00000000..307b79fe --- /dev/null +++ b/cmake/modules/FindStbImage.cmake @@ -0,0 +1,18 @@ +find_path(STB_IMAGE_INCLUDE_DIR stb_image.h PATH_SUFFIXES stb) + +find_path(STB_IMAGE_RESIZE2_INCLUDE_DIR stb_image_resize2.h PATH_SUFFIXES stb) +if(STB_IMAGE_RESIZE2_INCLUDE_DIR) + set(STB_IMAGE_RESIZE_VERSION 2) +else() + find_path(STB_IMAGE_RESIZE_INCLUDE_DIR stb_image_resize.h PATH_SUFFIXES stb) + if(STB_IMAGE_RESIZE_INCLUDE_DIR) + set(STB_IMAGE_RESIZE_VERSION 1) + endif() +endif() + +include(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + StbImage + REQUIRED_VARS STB_IMAGE_INCLUDE_DIR STB_IMAGE_RESIZE_VERSION +) diff --git a/src/libs/av/CMakeLists.txt b/src/libs/av/CMakeLists.txt index 3db2d5e7..be2bd834 100644 --- a/src/libs/av/CMakeLists.txt +++ b/src/libs/av/CMakeLists.txt @@ -1,3 +1,4 @@ +pkg_check_modules(LIBAV IMPORTED_TARGET libavcodec libavutil libavformat) add_library(lmsav SHARED impl/AudioFile.cpp @@ -27,4 +28,3 @@ target_link_libraries(lmsav PRIVATE ) install(TARGETS lmsav DESTINATION ${CMAKE_INSTALL_LIBDIR}) - diff --git a/src/libs/core/CMakeLists.txt b/src/libs/core/CMakeLists.txt index c8b5ff50..7e22c4be 100644 --- a/src/libs/core/CMakeLists.txt +++ b/src/libs/core/CMakeLists.txt @@ -1,3 +1,6 @@ +pkg_check_modules(Config++ REQUIRED IMPORTED_TARGET libconfig++) +pkg_check_modules(Archive REQUIRED IMPORTED_TARGET libarchive) + add_library(lmscore SHARED impl/http/Client.cpp impl/http/SendQueue.cpp diff --git a/src/libs/image/CMakeLists.txt b/src/libs/image/CMakeLists.txt index f6228210..586b038b 100644 --- a/src/libs/image/CMakeLists.txt +++ b/src/libs/image/CMakeLists.txt @@ -17,23 +17,33 @@ target_link_libraries(lmsimage PUBLIC std::filesystem ) -if (IMAGE_LIBRARY STREQUAL STB) +set(LMS_IMAGE_BACKEND "stb" CACHE STRING "Image library") +set_property(CACHE LMS_IMAGE_BACKEND PROPERTY STRINGS "stb" "graphicsmagick") + +if (${LMS_IMAGE_BACKEND} STREQUAL "stb") + find_package(StbImage REQUIRED) + message(STATUS "Using stb (resize version ${STB_IMAGE_RESIZE_VERSION})") + target_sources(lmsimage PRIVATE impl/stb/JPEGImage.cpp impl/stb/RawImage.cpp - ) - target_compile_options(lmsimage PRIVATE "-DLMS_SUPPORT_IMAGE_STB") - target_include_directories(lmsimage PRIVATE ${STB_INCLUDE_DIR}) -elseif (IMAGE_LIBRARY STREQUAL GraphicsMagick++) + ) + target_compile_options(lmsimage PRIVATE "-DSTB_IMAGE_RESIZE_VERSION=${STB_IMAGE_RESIZE_VERSION}") + target_include_directories(lmsimage PRIVATE ${STB_IMAGE_INCLUDE_DIR}) + +elseif (${LMS_IMAGE_BACKEND} STREQUAL "graphicsmagick") + pkg_check_modules(GraphicsMagick++ REQUIRED IMPORTED_TARGET GraphicsMagick++) + message(STATUS "Using graphicsmagick") + target_sources(lmsimage PRIVATE impl/graphicsmagick/JPEGImage.cpp impl/graphicsmagick/RawImage.cpp - ) - target_compile_options(lmsimage PRIVATE "-DLMS_SUPPORT_IMAGE_GM") + ) target_link_libraries(lmsimage PRIVATE PkgConfig::GraphicsMagick++) + else () - message(FATAL_ERROR "Invalid IMAGE_LIBRARY provided") -endif() + message(FATAL_ERROR "Invalid image library") +endif () install(TARGETS lmsimage DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/src/libs/image/impl/graphicsmagick/JPEGImage.hpp b/src/libs/image/impl/graphicsmagick/JPEGImage.hpp index cc2e6b37..934d2ed5 100644 --- a/src/libs/image/impl/graphicsmagick/JPEGImage.hpp +++ b/src/libs/image/impl/graphicsmagick/JPEGImage.hpp @@ -19,10 +19,6 @@ #pragma once -#ifndef LMS_SUPPORT_IMAGE_GM -#error "Bad configuration" -#endif - #include #include "image/IEncodedImage.hpp" diff --git a/src/libs/image/impl/graphicsmagick/RawImage.hpp b/src/libs/image/impl/graphicsmagick/RawImage.hpp index 2055f285..d65813e1 100644 --- a/src/libs/image/impl/graphicsmagick/RawImage.hpp +++ b/src/libs/image/impl/graphicsmagick/RawImage.hpp @@ -19,10 +19,6 @@ #pragma once -#ifndef LMS_SUPPORT_IMAGE_GM -#error "Bad configuration" -#endif - #include #include diff --git a/src/libs/image/impl/stb/RawImage.cpp b/src/libs/image/impl/stb/RawImage.cpp index c55164f0..28608217 100644 --- a/src/libs/image/impl/stb/RawImage.cpp +++ b/src/libs/image/impl/stb/RawImage.cpp @@ -28,7 +28,13 @@ #define STBI_FAILURE_USERMSG #include +#if STB_IMAGE_RESIZE_VERSION == 1 #include +#elif STB_IMAGE_RESIZE_VERSION == 2 +#include +#else +#error "Unhandled STB image resize version"! +#endif #include "core/ITraceLogger.hpp" #include "image/Exception.hpp" @@ -94,9 +100,17 @@ namespace lms::image::STB if (!resizedData) throw Exception{ "Cannot allocate memory for resized image!" }; +#if STB_IMAGE_RESIZE_VERSION == 1 if (::stbir_resize_uint8_srgb(reinterpret_cast(_data.get()), _width, _height, 0, reinterpret_cast(resizedData.get()), width, height, 0, 3, STBIR_ALPHA_CHANNEL_NONE, 0) == 0) +#elif STB_IMAGE_RESIZE_VERSION == 2 + if (::stbir_resize_uint8_srgb(reinterpret_cast(_data.get()), _width, _height, 0, + reinterpret_cast(resizedData.get()), width, height, 0, + STBIR_RGB) == 0) +#else + #error "Unhandled STB image resize version"! +#endif { throw Exception{ "Failed to resize image:" + std::string{ ::stbi_failure_reason() } }; } diff --git a/src/libs/image/impl/stb/RawImage.hpp b/src/libs/image/impl/stb/RawImage.hpp index 4bef16d5..d4788d4d 100644 --- a/src/libs/image/impl/stb/RawImage.hpp +++ b/src/libs/image/impl/stb/RawImage.hpp @@ -19,10 +19,6 @@ #pragma once -#ifndef LMS_SUPPORT_IMAGE_STB -#error "Bad configuration" -#endif - #include #include diff --git a/src/libs/metadata/CMakeLists.txt b/src/libs/metadata/CMakeLists.txt index 7d4b39bb..e8f84c24 100644 --- a/src/libs/metadata/CMakeLists.txt +++ b/src/libs/metadata/CMakeLists.txt @@ -1,3 +1,4 @@ +pkg_check_modules(Taglib REQUIRED IMPORTED_TARGET taglib) if(BUILD_TESTING) add_subdirectory(test) diff --git a/src/libs/services/auth/CMakeLists.txt b/src/libs/services/auth/CMakeLists.txt index 145c46fb..45c6557d 100644 --- a/src/libs/services/auth/CMakeLists.txt +++ b/src/libs/services/auth/CMakeLists.txt @@ -27,6 +27,22 @@ target_link_libraries(lmsauth PUBLIC Boost::system Wt::Wt ) + +# PAM +option(USE_PAM "Use the PAM backend authentication API" ON) +if (USE_PAM) + find_package(PAM QUIET) + if (USE_PAM AND NOT PAM_FOUND) + message(WARNING "PAM library not found: disabling") + set(USE_PAM OFF) + endif () +endif () + +if (USE_PAM) + message(STATUS "Using PAM authentication backend") +else () + message(STATUS "NOT using PAM authentication backend") +endif () if (USE_PAM) target_compile_options(lmsauth PRIVATE "-DLMS_SUPPORT_PAM")