diff --git a/.github/workflows/linux-gcc13.yaml b/.github/workflows/linux-gcc13.yaml index d1f375f8..34be8844 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,10 +27,17 @@ 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 - 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 8ddfda00..bfa80265 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,10 +32,17 @@ 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 - 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/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) 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; +}