summaryrefslogtreecommitdiffstats
path: root/.github/workflows/build_cmake.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/build_cmake.yml')
-rw-r--r--.github/workflows/build_cmake.yml360
1 files changed, 360 insertions, 0 deletions
diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml
new file mode 100644
index 0000000..555319e
--- /dev/null
+++ b/.github/workflows/build_cmake.yml
@@ -0,0 +1,360 @@
+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"
+ }
+ - {
+ 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"
+ }
+ - {
+ 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"
+ }
+ - {
+ 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"
+ }
+ - {
+ 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.0-x64.zip","miktexsetup-4.0-x64.zip")
+ } Catch [Exception] {
+ Write-Host $_.Exception | format-list -force
+ }
+ } while (((Test-Path "miktexsetup-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-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.0-x64.zip
+ if: matrix.config.os == 'windows-latest'
+
+ - name: Download MikTex packages (Windows)
+ shell: bash
+ run: |
+ ./miktexsetup --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 --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'