name: CMake Build for Doxygen on: [push, pull_request] jobs: build: name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.os }} strategy: fail-fast: false matrix: config: - { name: "Ubuntu Latest GCC Release", os: ubuntu-18.04, build_type: "Release", cc: "gcc", cxx: "g++", build_gen: "Unix Makefiles", cmake_extra_opts: "-Dbuild_search=YES -Dbuild_app=YES -Dbuild_parse=YES -Dbuild_xmlparser=YES -Duse_sqlite3=ON" } - { name: "Ubuntu Latest GCC Debug", os: ubuntu-18.04, build_type: "Debug", cc: "gcc", cxx: "g++", build_gen: "Unix Makefiles", cmake_extra_opts: "-Dbuild_search=YES -Dbuild_app=YES -Dbuild_parse=YES -Dbuild_xmlparser=YES -Duse_sqlite3=ON" } - { name: "Ubuntu Latest Clang Release", os: ubuntu-20.04, build_type: "Release", cc: "clang", cxx: "clang++", build_gen: "Unix Makefiles", cmake_extra_opts: "-Duse_libclang=YES -Dstatic_libclang=YES -Duse_libc++=NO -Duse_sqlite3=ON" } - { name: "Ubuntu Latest Clang Debug", os: ubuntu-20.04, build_type: "Debug", cc: "clang", cxx: "clang++", build_gen: "Unix Makefiles", cmake_extra_opts: "-Duse_libclang=YES -Dstatic_libclang=YES -Duse_libc++=NO -Duse_sqlite3=ON" } - { name: "macOS Latest Release", os: macos-latest, build_type: "Release", cc: "clang", cxx: "clang++", build_gen: "Unix Makefiles" } - { name: "macOS Latest Debug", os: macos-latest, build_type: "Debug", cc: "clang", cxx: "clang++", build_gen: "Unix Makefiles" } - { name: "Windows Latest MSVC Debug", os: windows-latest, build_type: "Debug", cc: "cl", cxx: "cl", build_gen: "NMake Makefiles" } - { name: "Windows Latest MSVC Release", os: windows-latest, build_type: "Release", cc: "cl", cxx: "cl", build_gen: "NMake Makefiles" } steps: - uses: actions/checkout@v1 - name: Download MikTex (Windows) run: | $wc = New-Object System.Net.WebClient; $maxAttempts=5; $attemptCount=0; Do { $attemptCount++; Try { $wc.DownloadFile("https://ctan.math.illinois.edu/systems/win32/miktex/setup/windows-x64/miktexsetup-4.1-x64.zip","miktexsetup-4.1-x64.zip") } Catch [Exception] { Write-Host $_.Exception | format-list -force } } while (((Test-Path "miktexsetup-4.1-x64.zip") -eq $false) -and ($attemptCount -le $maxAttempts)) shell: pwsh if: matrix.config.os == 'windows-latest' - uses: suisei-cn/actions-download-file@v1 with: url: "https://github.com/pffang/libiconv-for-Windows/releases/download/v1.16/libiconv-for-Windows_1.16.7z" target: . if: matrix.config.os == 'windows-latest' - name: Install LaTeX (Linux) run: sudo apt-get install texlive texlive-latex-recommended texlive-extra-utils texlive-latex-extra texlive-font-utils if: startsWith(matrix.config.os,'ubuntu-') - name: Install LaTeX (MacOS) run: | brew install --cask mactex; echo "/Library/TeX/texbin/" >> $GITHUB_PATH if: matrix.config.os == 'macos-latest' - name: Install libclang (Ubuntu 20.04) run: | sudo apt remove llvm-8 clang-8 libclang-common-8-dev clang-format-8 libllvm8 sudo apt remove llvm-9 llvm-9-dev llvm-9-tools llvm-9-runtime clang-9 libclang-common-9-dev clang-format-9 libllvm9 #sudo apt remove llvm-10 llvm-10-dev llvm-10-tools llvm-10-runtime clang-10 clang-format-10 libclang-common-10-dev libclang-cpp10 libclang1-10 libllvm10 sudo apt-get autoremove sudo apt-get clean #sudo apt install libclang-9-dev libclang-common-9-dev sudo apt install libclang-10-dev libclang-common-10-dev apt list --installed | egrep '(clang|llvm)' ls -d /usr/lib/llvm-*/include/ clang++ -v if: matrix.config.os == 'ubuntu-20.04' - name: Install libxapian (Ubuntu 18.04) run: | sudo apt install libxapian-dev if: matrix.config.os == 'ubuntu-18.04' - name: Extract MikTex zip (Windows) shell: bash run: | unzip miktexsetup-4.1-x64.zip if: matrix.config.os == 'windows-latest' - name: Download MikTex packages (Windows) shell: bash run: | ./miktexsetup_standalone --verbose \ --local-package-repository=C:/miktex-repository \ --remote-package-repository="https://ctan.math.illinois.edu/systems/win32/miktex/tm/packages/" \ --package-set=essential \ download if: matrix.config.os == 'windows-latest' - name: Install MikTex packages (Windows) shell: bash run: | ./miktexsetup_standalone --local-package-repository=C:/miktex-repository \ --package-set=essential \ --shared \ install if: matrix.config.os == 'windows-latest' - name: Setting MikTex paths (Windows) shell: bash run: | echo "C:/Program Files/MiKTeX/miktex/bin/x64/" >> $GITHUB_PATH export PATH="/c/Program Files/MiKTeX/miktex/bin/x64/:$PATH" echo "Configuring MiKTeX to install missing packages on the fly" initexmf --admin --verbose --set-config-value='[MPM]AutoInstall=1' if: matrix.config.os == 'windows-latest' - name: Install Ghostscript (Linux) run: sudo apt-get install ghostscript if: startsWith(matrix.config.os,'ubuntu-') - name: Install Ghostscript (Windows) run: choco install ghostscript if: matrix.config.os == 'windows-latest' - name: Setting Ghostscript paths (Windows) shell: bash run: | echo "C:/Program Files (x86)/gs/gs9.53.3/bin/" >> $GITHUB_PATH echo "C:/Program Files/gs/gs9.53.3/bin/" >> $GITHUB_PATH export PATH="/c/Program Files (x86)/gs/gs9.53.3/bin/:$PATH" export PATH="/c/Program Files/gs/gs9.53.3/bin/:$PATH" if: matrix.config.os == 'windows-latest' - name: Install xmllint (Linux) run: sudo apt-get install libxml2-utils if: startsWith(matrix.config.os,'ubuntu-') - name: Install xmllint (MacOS) run: brew install libxml2 if: matrix.config.os == 'macos-latest' - name: Install bison (MacOS) run: | brew install bison; echo "/usr/local/opt/bison/bin" >> $GITHUB_PATH if: matrix.config.os == 'macos-latest' - name: Install bison/flex (Windows) run: choco install winflexbison if: matrix.config.os == 'windows-latest' - name: Install Graphviz (Linux) run: sudo apt-get install graphviz if: startsWith(matrix.config.os,'ubuntu-') - name: Install Graphviz (MacOS) run: brew install graphviz if: matrix.config.os == 'macos-latest' - name: Install Graphviz (Windows) run: choco install graphviz.portable if: matrix.config.os == 'windows-latest' # - name: Install Perl (Windows) # run: # choco install activeperl # if: matrix.config.os == 'windows-latest' - name: Setup VS Environment (Windows) uses: seanmiddleditch/gha-setup-vsdevenv@master if: matrix.config.os == 'windows-latest' - name: Refresh Env (Windows) run: refreshenv if: matrix.config.os == 'windows-latest' - name: Install Qt uses: jurplel/install-qt-action@v2 - name: Check tool versions (Linux / MacOS) shell: bash run: | echo "=== perl ==="; perl --version; echo "=== python ==="; python --version; echo "=== cmake ==="; cmake --version; echo "=== latex ==="; latex --version; echo "=== bibtex ==="; bibtex --version echo "=== dvips ==="; dvips --version echo "=== bison ==="; bison --version; echo "=== flex ==="; flex --version; echo "=== dot ==="; dot -V; echo "=== ghostscript ==="; gs --version; if: matrix.config.os != 'windows-latest' - name: Check tool versions (Windows) shell: bash run: | echo "=== perl ==="; perl --version; echo "=== python ==="; python --version; echo "=== cmake ==="; cmake --version; echo "=== latex ==="; latex --version; echo "=== bibtex ==="; bibtex --version echo "=== dvips ==="; dvips --version echo "=== bison ==="; win_bison --version; echo "=== flex ==="; win_flex --version; echo "=== dot ==="; dot -V; echo "=== ghostscript ==="; gswin64c --version; if: matrix.config.os == 'windows-latest' - name: Configure shell: cmake -P {0} run: | set(ENV{CC} ${{ matrix.config.cc }}) set(ENV{CXX} ${{ matrix.config.cxx }}) execute_process( COMMAND cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.config.build_type }} -G "${{ matrix.config.build_gen }}" -Dbuild_doc=YES -Dbuild_wizard=YES ${{ matrix.config.cmake_extra_opts }} RESULT_VARIABLE result ) if (NOT result EQUAL 0) message(FATAL_ERROR "Bad exit status") endif() - name: Build shell: cmake -P {0} run: | include(ProcessorCount) ProcessorCount(N) execute_process( COMMAND cmake --build build --parallel ${N} RESULT_VARIABLE result OUTPUT_VARIABLE output ERROR_VARIABLE output ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE ) if (NOT result EQUAL 0) string(REGEX MATCH "FAILED:.*$" error_message "${output}") string(REPLACE "\n" "%0A" error_message "${error_message}") message("::error::${error_message}") message(FATAL_ERROR "Build failed") endif() - name: Archive build artifacts uses: actions/upload-artifact@v2 with: name: "${{ matrix.config.name }} build artifacts" path: build/bin/ - name: Run tests (Linux / MacOS) shell: cmake -P {0} run: | include(ProcessorCount) ProcessorCount(N) set(ENV{CTEST_OUTPUT_ON_FAILURE} "ON") execute_process( COMMAND cmake --build build --target tests TEST_FLAGS="--xml --xmlxsd --xhtml --docbook --rtf" RESULT_VARIABLE result ) if (NOT result EQUAL 0) message(FATAL_ERROR "Running tests failed!") endif() if: matrix.config.os != 'windows-latest' - name: Run tests (Windows) shell: cmake -P {0} run: | include(ProcessorCount) ProcessorCount(N) set(ENV{CTEST_OUTPUT_ON_FAILURE} "ON") execute_process( COMMAND cmake --build build --target tests TEST_FLAGS="--xml --xmlxsd" RESULT_VARIABLE result ) if (NOT result EQUAL 0) message(FATAL_ERROR "Running tests failed!") endif() if: matrix.config.os == 'windows-latest' - name: Generate documentation shell: cmake -P {0} run: | execute_process( COMMAND cmake --build build --target docs RESULT_VARIABLE result ) if (NOT result EQUAL 0) message(FATAL_ERROR "Building documentation failed") endif() if: matrix.config.os != 'windows-latest'