From 51c78144c5cf773b8b02708474cfb8dff52a7ddc Mon Sep 17 00:00:00 2001 From: Steve Lhomme Date: Mon, 31 Aug 2026 15:55:39 +0200 Subject: [PATCH 1/3] CI: build static and shared Linux libraries One target has the utf8cpp package, the other doesn't. --- .github/workflows/linux-gcc13.yaml | 9 +++++++-- .github/workflows/linux-newer.yaml | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linux-gcc13.yaml b/.github/workflows/linux-gcc13.yaml index d1f375f8..320d4d6f 100644 --- a/.github/workflows/linux-gcc13.yaml +++ b/.github/workflows/linux-gcc13.yaml @@ -7,11 +7,16 @@ on: jobs: build_libebml: - name: libebml for Linux ${{ matrix.cxx }} + name: libebml for Linux ${{ matrix.cxx }} (${{ matrix.lib.name }}) runs-on: ubuntu-latest strategy: matrix: cxx: ['g++-14', 'clang++-18'] + lib: [ + { "name": "static", "option": "-DBUILD_SHARED_LIBS=OFF"}, + { "name": "shared", "option": "-DBUILD_SHARED_LIBS=ON"}, + { "name": "auto", "option": ""}, + ] env: CXX: ${{matrix.cxx}} steps: @@ -22,7 +27,7 @@ jobs: uses: actions/checkout@v7 - name: Configure CMake - run: cmake -S . -B _build -DCMAKE_INSTALL_PREFIX:STRING=${GITHUB_WORKSPACE}/_built -G Ninja + run: cmake -S . -B _build ${{ matrix.lib.option }} -DCMAKE_INSTALL_PREFIX:STRING=${GITHUB_WORKSPACE}/_built -G Ninja - name: Build with CMake run: cmake --build _build --parallel diff --git a/.github/workflows/linux-newer.yaml b/.github/workflows/linux-newer.yaml index 8ddfda00..5ed53185 100644 --- a/.github/workflows/linux-newer.yaml +++ b/.github/workflows/linux-newer.yaml @@ -7,11 +7,16 @@ on: jobs: build_libebml: - name: libebml for Newer Linux ${{ matrix.cxx }} + name: libebml for Newer Linux ${{ matrix.cxx }} (${{ matrix.lib.name }}) runs-on: ubuntu-26.04 strategy: matrix: cxx: ['g++-15', 'clang++-22'] + lib: [ + { "name": "static", "option": "-DBUILD_SHARED_LIBS=OFF"}, + { "name": "shared", "option": "-DBUILD_SHARED_LIBS=ON"}, + { "name": "auto", "option": ""}, + ] env: CXX: ${{matrix.cxx}} steps: @@ -27,7 +32,7 @@ jobs: uses: actions/checkout@v7 - name: Configure CMake - run: cmake -S . -B _build -DCMAKE_INSTALL_PREFIX:STRING=${GITHUB_WORKSPACE}/_built -G Ninja + run: cmake -S . -B _build ${{ matrix.lib.option }} -DCMAKE_INSTALL_PREFIX:STRING=${GITHUB_WORKSPACE}/_built -G Ninja - name: Build with CMake run: cmake --build _build --parallel From c7c1222fa3eaecbaeae40d677e00822787755b96 Mon Sep 17 00:00:00 2001 From: Steve Lhomme Date: Mon, 31 Aug 2026 16:15:23 +0200 Subject: [PATCH 2/3] CI: add a test example to find libebml via CMake and link with it --- .github/workflows/linux-gcc13.yaml | 9 ++- .github/workflows/linux-newer.yaml | 9 ++- examples/CMakeLists.txt | 10 ++++ examples/test00.cpp | 91 ++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 examples/CMakeLists.txt create mode 100644 examples/test00.cpp diff --git a/.github/workflows/linux-gcc13.yaml b/.github/workflows/linux-gcc13.yaml index 320d4d6f..34be8844 100644 --- a/.github/workflows/linux-gcc13.yaml +++ b/.github/workflows/linux-gcc13.yaml @@ -33,4 +33,11 @@ jobs: run: cmake --build _build --parallel - name: Test installation - run: cmake --install _build --prefix ${GITHUB_WORKSPACE}/_built + run: | + cmake --install _build --prefix ${GITHUB_WORKSPACE}/_built + cmake -E remove_directory _build + + - name: Check installed version links properly with CMake + run: | + cmake -S examples -B examples/_build ${{ matrix.lib.option }} -DCMAKE_PREFIX_PATH="${GITHUB_WORKSPACE}/_built" + cmake --build examples/_build --parallel diff --git a/.github/workflows/linux-newer.yaml b/.github/workflows/linux-newer.yaml index 5ed53185..bfa80265 100644 --- a/.github/workflows/linux-newer.yaml +++ b/.github/workflows/linux-newer.yaml @@ -38,4 +38,11 @@ jobs: run: cmake --build _build --parallel - name: Test installation - run: cmake --install _build --prefix ${GITHUB_WORKSPACE}/_built + run: | + cmake --install _build --prefix ${GITHUB_WORKSPACE}/_built + cmake -E remove_directory _build + + - name: Check installed version links properly with CMake + run: | + cmake -S examples -B examples/_build ${{ matrix.lib.option }} -DCMAKE_PREFIX_PATH="${GITHUB_WORKSPACE}/_built" + cmake --build examples/_build --parallel diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt new file mode 100644 index 00000000..299220bd --- /dev/null +++ b/examples/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.5) + +project(linkebml VERSION 0.0.1) + +find_package(EBML REQUIRED) + +add_executable(testlink test00.cpp) +target_link_libraries(testlink PUBLIC EBML::ebml) + + diff --git a/examples/test00.cpp b/examples/test00.cpp new file mode 100644 index 00000000..49a5987b --- /dev/null +++ b/examples/test00.cpp @@ -0,0 +1,91 @@ +// Copyright © 2002-2004 Steve Lhomme. +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*! + \file + \author Steve Lhomme + Test the writing a basic EBML file +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using namespace libebml; + +class UniStringWithoutDefault : public EbmlUnicodeString { + public: UniStringWithoutDefault(EBML_EXTRA_PARAM); + UniStringWithoutDefault(const UniStringWithoutDefault & ElementToClone) : EbmlUnicodeString(ElementToClone) {} + EBML_CONCRETE_CLASS(UniStringWithoutDefault) +}; + +DEFINE_xxx_CLASS(UniStringWithoutDefault, 0x4123, 2, EbmlHead, "UniStringWithoutDefault", GetEbmlGlobal_Context) + +const char RW_FILENAME[] = "test.ebml"; + +int main(void) +{ + printf("Test00 :\nEBML %s\n", EbmlCodeVersion.c_str()); + StdIOCallback Ebml_file(RW_FILENAME, ::MODE_CREATE); + + ///// Writing test + EbmlHead TestHead; + + printf("Write EBML + Matroska elements\n"); + EDocType & MyDocType = GetChild(TestHead); + MyDocType.SetValue("matroska"); + + EDocTypeVersion & MyDocTypeVer = GetChild(TestHead); + MyDocTypeVer.SetValue(1); + + EDocTypeReadVersion & MyDocTypeReadVer = GetChild(TestHead); + MyDocTypeReadVer.SetValue(1); + + auto & MyString = GetChild(TestHead); + MyDocType.SetValue("éé"); + + TestHead.Render(Ebml_file); + + Ebml_file.close(); + + ///// Reading test + StdIOCallback Ebml_Wfile(RW_FILENAME, ::MODE_READ); + + // example 1 skip all the elements found + EbmlStream aStream(Ebml_Wfile); + EbmlElement * ElementLevel0; + EbmlElement * ElementLevel1; + EbmlElement * ElementLevel2; + EbmlElement * ElementLevel3; + + // read the data until a possible element is found (valid ID + size combination) + printf("Read EBML elements & skip data\n"); + // find the EBML head in the file + ElementLevel0 = aStream.FindNextID(EBML_INFO(EbmlHead), 0xFFFFFFFFL); + if (ElementLevel0 != NULL) + { + printf("ID : "); + for (unsigned int i=EbmlId(*ElementLevel0).GetLength(); i; i++) + { + printf("[%02X]", (EbmlId(*ElementLevel0).GetValue() >> ((i-1)*8)) & 0xFF); + } + printf("\n"); + + ElementLevel0->SkipData(aStream, EBML_CLASS_CONTEXT(EbmlHead)); + if (ElementLevel0 != NULL) + delete ElementLevel0; + } + + + Ebml_Wfile.close(); + + return 0; +} From ca8ddce789273eda491dc160ebcd30a23a85066f Mon Sep 17 00:00:00 2001 From: SunBlack Date: Mon, 31 Aug 2026 13:01:33 +0200 Subject: [PATCH 3/3] Implement utf8cpp dependency check for EBML Added a dependency check for utf8cpp when shared libraries are not built. Co-Authored-by: Steve Lhomme --- EBMLConfig.cmake.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/EBMLConfig.cmake.in b/EBMLConfig.cmake.in index f7c5071c..1bb52b7c 100644 --- a/EBMLConfig.cmake.in +++ b/EBMLConfig.cmake.in @@ -2,4 +2,9 @@ include(${CMAKE_CURRENT_LIST_DIR}/EBMLTargets.cmake) +include(CMakeFindDependencyMacro) +if(@utf8cpp_FOUND@) + find_dependency(utf8cpp REQUIRED) +endif() + check_required_components(EBML)