From 34a309eb3c78e9a1a9807fbf09a01d69155bac60 Mon Sep 17 00:00:00 2001 From: Alfi Maulana Date: Mon, 10 Jul 2023 12:55:21 +0700 Subject: [PATCH] build: add support to auto-install doxygen if not found --- .github/workflows/build.yml | 4 ---- error/cmake/target_generate_xml_docs.cmake | 20 +++++++++++++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 239841c..47afced 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -105,10 +105,6 @@ jobs: - name: Checkout repository uses: actions/checkout@v3.5.3 - - name: Install requirements - run: | - sudo apt-get install -y doxygen - - name: Configure and build documentation uses: threeal/cmake-action@v1.2.0 with: diff --git a/error/cmake/target_generate_xml_docs.cmake b/error/cmake/target_generate_xml_docs.cmake index 2d9938f..6229475 100644 --- a/error/cmake/target_generate_xml_docs.cmake +++ b/error/cmake/target_generate_xml_docs.cmake @@ -1,5 +1,21 @@ -# A function that generates XML documentation from the specified target. +# A function that generates XML documentation for the specified target. function(target_generate_xml_docs TARGET) + # Try to install Doxygen if not found + find_program(DOXYGEN_PROGRAM doxygen) + if(NOT DOXYGEN_PROGRAM) + find_program(APT_GET_PROGRAM apt-get) + if(APT_GET_PROGRAM) + message(STATUS "Doxygen could not be found, installing...") + execute_process(COMMAND ${APT_GET_PROGRAM} install -y doxygen) + endif() + + find_program(BREW_PROGRAM brew) + if(BREW_PROGRAM) + message(STATUS "Doxygen could not be found, installing...") + execute_process(COMMAND ${BREW_PROGRAM} install doxygen) + endif() + endif() + # Try to find Doxygen find_package(Doxygen) if(DOXYGEN_FOUND) @@ -25,7 +41,5 @@ function(target_generate_xml_docs TARGET) # Generate XML documentation for the target doxygen_add_docs(${TARGET}_docs ${HEADER_FILES} USE_STAMP_FILE) add_dependencies(${TARGET} ${TARGET}_docs) - else() - message(WARNING "Could not found Doxygen!") endif() endfunction()