diff --git a/.github/workflows/MediaConch_Build_Lib.yml b/.github/workflows/MediaConch_Build_Lib.yml new file mode 100644 index 00000000..1356a147 --- /dev/null +++ b/.github/workflows/MediaConch_Build_Lib.yml @@ -0,0 +1,39 @@ +name: Build_libs + +on: [push, pull_request] + +jobs: + build: + strategy: + matrix: + library_type: [static, shared] + os: [ubuntu-latest, macos-latest, windows-latest] + include: + - os: ubuntu-latest + cmake_preset_name: conan-release + - os: macos-latest + cmake_preset_name: conan-release + - os: windows-latest + cmake_preset_name: conan-default + fail-fast: false + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + cache: 'pip' # caching pip dependencies + - name: "install dependencies" # use conan package manager to install c and c++ dependencies + run: | + pip install --disable-pip-version-check uv + uvx conan profile detect + uvx conan install -of build --requires="zlib/1.3.1" --requires="libxslt/1.1.43" --requires="libxml2/2.13.8" --requires="libzen/0.4.38" --requires="libmediainfo/22.03" --build=missing -g CMakeDeps -g CMakeToolchain + - name: Configure cmake + run: | + cmake --preset ${{ matrix.cmake_preset_name }} -D BUILD_SHARED_LIBS=${{ matrix.library_type == 'static' && 'NO' || 'YES'}} + - name: Build + run: | + cmake --build --preset conan-release + - name: Install + run: | + cmake --install build --prefix sample_prefix \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..4f29b2b3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.5) +project(mediaconch) +set(CMAKE_CXX_STANDARD 11) +cmake_policy(SET CMP0135 NEW) + +option(MEDIACONCH_WITH_SQLITE "Enable SQLite DB" OFF) +option(MEDIACONCH_WITH_JANSSON "Enable Jansson Library" OFF) +option(MEDIACONCH_WITH_LIBEVENT "Enable Libevent" OFF) + +find_package(ZLIB REQUIRED) +find_package(ZenLib REQUIRED) +find_package(libxml2 REQUIRED) +find_package(LibXslt REQUIRED) +find_package(MediaInfoLib REQUIRED) + +find_package(jansson QUIET) +find_package(Libevent QUIET) + +add_subdirectory(Source) \ No newline at end of file diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt new file mode 100644 index 00000000..a61b3c62 --- /dev/null +++ b/Source/CMakeLists.txt @@ -0,0 +1,2 @@ +# Other configurations can be added here such as CLI, or GUI +add_subdirectory(Lib) diff --git a/Source/Lib/CMakeLists.txt b/Source/Lib/CMakeLists.txt new file mode 100644 index 00000000..d0d71e86 --- /dev/null +++ b/Source/Lib/CMakeLists.txt @@ -0,0 +1,93 @@ +add_library(MediaConchLib + ../Common/Configuration.cpp + ../Common/Core.cpp + ../Common/DaemonClient.cpp + ../Common/Database.cpp + ../Common/DatabaseReport.cpp + ../Common/DpfManager.cpp + ../Common/Http.cpp + ../Common/Httpd.cpp + ../Common/IMSC1.cpp + ../Common/JS_Tree.cpp + ../Common/Json.cpp + ../Common/LibEventHttp.cpp + ../Common/LibEventHttpd.cpp + ../Common/MediaConchLib.cpp + ../Common/NoDatabaseReport.cpp + ../Common/Plugin.cpp + ../Common/PluginFileLog.cpp + ../Common/PluginPreHook.cpp + ../Common/PluginsConfig.cpp + ../Common/PluginsManager.cpp + ../Common/Policy.cpp + ../Common/Policies.cpp + ../Common/Queue.cpp + ../Common/Reports.cpp + ../Common/REST_API.cpp + ../Common/Scheduler.cpp + ../Common/Schema.cpp + ../Common/SQLLite.cpp + ../Common/SQLLiteReport.cpp + ../Common/UnknownPolicy.cpp + ../Common/VeraPDF.cpp + ../Common/WatchFolder.cpp + ../Common/WatchFoldersManager.cpp + ../Common/Xslt.cpp + ../Common/XsltPolicy.cpp + ../IMSC1/IMSC1Plugin.cpp + ../Checker/Checker.cpp + ../Checker/Path.cpp + ../ThirdParty/tfsxml/tfsxml.cpp + MediaConchDLL.cpp + Lib.cpp +) + +target_link_libraries(MediaConchLib + PRIVATE + zen + LibXml2::LibXml2 + libxslt::libxslt + ZLIB::ZLIB + mediainfo +) + +add_library(MediaConch:lib ALIAS MediaConchLib) + +set_target_properties(MediaConchLib PROPERTIES + OUTPUT_NAME mediaconch + PUBLIC_HEADER MediaConchDLL.h +) + +target_include_directories(MediaConchLib + PRIVATE + $ + $ +) + +if (MEDIACONCH_WITH_SQLITE) + target_sources(MediaConchLib PRIVATE ../ThirdParty/sqlite/sqlite3.c) + target_include_directories(MediaConchLib PRIVATE ../ThirdParty/sqlite) + target_compile_definitions(MediaConchLib PRIVATE HAVE_SQLITE) +endif () + +if(Libevent_FOUND AND MEDIACONCH_WITH_LIBEVENT) + target_link_libraries(MediaConchLib PRIVATE libevent::libevent) + target_compile_definitions(MediaConchLib PRIVATE HAVE_LIBEVENT) +endif () + +if(jansson_FOUND AND MEDIACONCH_WITH_JANSSON) + target_link_libraries(MediaConchLib PRIVATE jansson::jansson) + target_compile_definitions(MediaConchLib PRIVATE HAVE_JANSSON) +endif () + +install(TARGETS MediaConchLib EXPORT MediaConchTargets + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + PUBLIC_HEADER DESTINATION include/MediaConch +) +install(EXPORT MediaConchTargets + FILE MediaConchTargets.cmake + NAMESPACE MediaConch:: + DESTINATION share/cmake/${PROJECT_NAME} +)