1# __ __ _ 2# ___\ \/ /_ __ __ _| |_ 3# / _ \\ /| '_ \ / _` | __| 4# | __// \| |_) | (_| | |_ 5# \___/_/\_\ .__/ \__,_|\__| 6# |_| XML parser 7# 8# Copyright (c) 2021-2024 Sebastian Pipping <sebastian@pipping.org> 9# Copyright (c) 2023 Joyce Brum <joycebrum@google.com> 10# Copyright (c) 2023 Hanno Böck <hanno@gentoo.org> 11# Copyright (c) 2024 Dag-Erling Smørgrav <des@des.dev> 12# Licensed under the MIT license: 13# 14# Permission is hereby granted, free of charge, to any person obtaining 15# a copy of this software and associated documentation files (the 16# "Software"), to deal in the Software without restriction, including 17# without limitation the rights to use, copy, modify, merge, publish, 18# distribute, sublicense, and/or sell copies of the Software, and to permit 19# persons to whom the Software is furnished to do so, subject to the 20# following conditions: 21# 22# The above copyright notice and this permission notice shall be included 23# in all copies or substantial portions of the Software. 24# 25# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 28# NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 29# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 30# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 31# USE OR OTHER DEALINGS IN THE SOFTWARE. 32 33name: Run Linux CI tasks 34 35on: 36 pull_request: 37 push: 38 schedule: 39 - cron: '0 2 * * 5' # Every Friday at 2am 40 workflow_dispatch: 41 42permissions: 43 contents: read 44 45jobs: 46 checks: 47 name: Perform checks 48 strategy: 49 matrix: 50 include: 51 - MODE: cmake-oos 52 - MODE: distcheck 53 - MODE: qa-sh 54 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address 55 - MODE: cmake-oos 56 FLAT_ENV: CMAKE_ARGS="-DEXPAT_ATTR_INFO=ON -DEXPAT_BUILD_FUZZERS=ON -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++" 57 - MODE: qa-sh 58 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_ATTR_INFO=ON 59 - MODE: qa-sh 60 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_CONTEXT_BYTES=0 61 - MODE: qa-sh 62 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS="-DEXPAT_DTD=OFF -DEXPAT_GE=ON" 63 - MODE: qa-sh 64 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS="-DEXPAT_DTD=OFF -DEXPAT_GE=OFF" 65 - MODE: qa-sh 66 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_LARGE_SIZE=ON 67 - MODE: qa-sh 68 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_MIN_SIZE=ON 69 - MODE: qa-sh 70 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address CMAKE_ARGS=-DEXPAT_NS=OFF 71 - MODE: qa-sh 72 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=cfi 73 - MODE: qa-sh 74 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=memory 75 - MODE: qa-sh 76 FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=undefined 77 - MODE: qa-sh 78 FLAT_ENV: CC=gcc CXX=g++ LD=ld QA_PROCESSOR=gcov 79 - MODE: qa-sh 80 FLAT_ENV: CC=gcc CXX=g++ LD=ld QA_PROCESSOR=gcov CMAKE_ARGS=-D_EXPAT_M32=ON 81 - MODE: qa-sh 82 FLAT_ENV: CC=gcc CXX=g++ LD=ld QA_PROCESSOR=gcov CMAKE_ARGS="-D_EXPAT_M32=ON -DEXPAT_ATTR_INFO=ON" 83 - MODE: qa-sh 84 FLAT_ENV: CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ LD=i686-w64-mingw32-ld QA_PROCESSOR=gcov CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Windows -DWIN32=ON -DMINGW=ON -DEXPAT_ATTR_INFO=ON" 85 - MODE: qa-sh 86 FLAT_ENV: CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ LD=i686-w64-mingw32-ld QA_PROCESSOR=gcov CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Windows -DWIN32=ON -DMINGW=ON -DEXPAT_ATTR_INFO=ON -DEXPAT_CHAR_TYPE=wchar_t" 87 runs-on: ubuntu-20.04 88 env: 89 CFLAGS: -g3 -pipe 90 steps: 91 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 92 - name: Install build dependencies (MinGW) 93 if: "${{ contains(matrix.FLAT_ENV, 'mingw') }}" 94 run: |- 95 set -x -u -o pipefail 96 source /etc/os-release 97 98 # Get rid of packages installed from ppa:ondrej/php so that we will be able to install wine32:i386 without conflicts 99 # (see issue https://github.com/actions/virtual-environments/issues/4589) 100 # In detail we: 101 # 1. Remove all packages that ppa:ondrej/php has but plain Ubuntu doesn't, e.g. everything PHP 102 # 2. Revert (remaining) packages that ppa:ondrej/php and plain Ubuntu share, back to the plain Ubuntu version 103 # 3. Assert that no packages from ppa:ondrej/php are left installed 104 dpkg -l | grep '^ii' | grep -F deb.sury.org | awk '{print $2}' | grep '^php' \ 105 | xargs -r -t sudo apt-get remove --yes debsuryorg-archive-keyring libpcre2-posix3 libzip4 106 dpkg -l | grep '^ii' | grep -F deb.sury.org | awk '{print $2}' | sed "s,\$,/${UBUNTU_CODENAME}," \ 107 | xargs -r -t sudo apt-get install --yes --no-install-recommends --allow-downgrades -V 108 ! dpkg -l | grep '^ii' | grep -F deb.sury.org 109 110 # Install 32bit Wine 111 sudo dpkg --add-architecture i386 # for wine32 112 sudo apt-get update # due to new architecture 113 sudo apt-get install --yes --no-install-recommends -V \ 114 mingw-w64 \ 115 wine-stable \ 116 wine32:i386 117 - name: Install build dependencies (Non-MinGW) 118 if: "${{ ! contains(matrix.FLAT_ENV, 'mingw') }}" 119 run: |- 120 set -x 121 source /etc/os-release 122 wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - 123 sudo add-apt-repository "deb https://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}-19 main" 124 sudo apt-get update # due to new repository 125 # NOTE: Please note the version-specific ${PATH} extension for Clang adding /usr/lib/llvm-19/bin in .ci.sh 126 sudo apt-get install --yes --no-install-recommends -V \ 127 clang-19 \ 128 libclang-rt-19-dev 129 - name: Install build dependencies (common) 130 run: |- 131 sudo apt-get install --yes --no-install-recommends -V \ 132 cmake \ 133 docbook2x \ 134 gcc-multilib \ 135 g++-multilib \ 136 lcov \ 137 libbsd-dev \ 138 lzip \ 139 moreutils 140 - name: Perform check "${{ matrix.MODE }}" 141 env: 142 MODE: ${{ matrix.MODE }} 143 run: | 144 env ${{ matrix.FLAT_ENV }} ./.ci.sh 145