Fix character list generator #1480
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Dev | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| job_id: | |
| type: choice | |
| description: Specific job to run | |
| default: all | |
| required: true | |
| options: | |
| - all | |
| - canary | |
| - dragon | |
| - puffin | |
| - dodo | |
| - passenger | |
| - greatawk | |
| - wasp | |
| - bat | |
| - pterodactyl | |
| - bigbird | |
| - camel | |
| - chaffinch | |
| - fruitbat | |
| - ptarmigan | |
| - zebrilus | |
| - bee | |
| push: | |
| branches: [ master, "release/**" ] | |
| pull_request: | |
| branches: [ master ] | |
| permissions: | |
| contents: read | |
| env: | |
| CFLAGS_GCC_STYLE: '-Wall -Wextra -pedantic -Wdeclaration-after-statement -Wshadow -Wno-overlength-strings -Wimplicit-fallthrough' | |
| CFLAGS_MSVC: '/W3' | |
| CMAKE_FLAGS: '-Wdev -Werror=dev -Wdeprecated -Werror=deprecated --warn-uninitialized' | |
| jobs: | |
| canary: | |
| # Tests with: Debug & assertions; link-size=4; libedit | |
| name: GCC -O0 | |
| runs-on: ubuntu-latest | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'canary') | |
| steps: | |
| - name: Setup | |
| run: | | |
| echo "set man-db/auto-update false" | sudo debconf-communicate && sudo dpkg-reconfigure man-db | |
| sudo apt-get -qq update | |
| sudo apt-get -qq install -y libedit-dev | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Prepare | |
| run: ./autogen.sh | |
| - name: Configure | |
| run: ./configure CC='gcc -fsanitize=undefined,address -fsanitize-undefined-trap-on-error' CFLAGS="-O0 $CFLAGS_GCC_STYLE" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror --enable-pcre2test-libedit --with-link-size=4 | |
| - name: Build | |
| run: make -j3 | |
| - name: Test | |
| run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo "== $i =="; cat $i; done; exit $rc) | |
| dragon: | |
| # Tests with: clang AB/UB; link-size=3. Clang's logo is a dragon. | |
| name: Clang | |
| runs-on: ubuntu-latest | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'dragon') | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| opt: ["-O0", "-O2"] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Prepare | |
| run: ./autogen.sh | |
| - name: Configure | |
| run: ./configure CC='clang -fsanitize=undefined,address,integer -fno-sanitize-recover=undefined,integer -fno-sanitize=unsigned-integer-overflow,unsigned-shift-base,function' CFLAGS="${{ matrix.opt }} $CFLAGS_GCC_STYLE" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror --with-link-size=3 | |
| - name: Build | |
| run: make -j3 | |
| - name: Test | |
| run: | | |
| ulimit -S -s 49152 # Raise stack limit; ASAN with -O0 is very stack-hungry | |
| (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo "== $i =="; cat $i; done; exit $rc) | |
| puffin: | |
| # Tests with: GCC, -O3, very latest CMake, libedit | |
| name: GCC -O3, CMake | |
| runs-on: ubuntu-latest | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'puffin') | |
| steps: | |
| - name: Setup | |
| run: | | |
| echo "set man-db/auto-update false" | sudo debconf-communicate && sudo dpkg-reconfigure man-db | |
| sudo apt-get -qq update | |
| sudo apt-get -qq install -y git build-essential cmake zlib1g-dev libbz2-dev libedit-dev | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Check latest CMake | |
| id: get-cmake-ver | |
| run: | | |
| CMAKE_VER=$(curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | jq -r '.tag_name' | sed 's/^v//') | |
| if ! echo "$CMAKE_VER" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$' ; then | |
| echo "Extracted CMake version: '$CMAKE_VER'" >&2 | |
| echo "This does not match the expected version format" >&2 | |
| exit 1 | |
| fi | |
| echo "CMAKE_VER=$CMAKE_VER" >> $GITHUB_OUTPUT | |
| echo "CMAKE_VER=$CMAKE_VER" >> $GITHUB_ENV | |
| echo "Latest CMake version is $CMAKE_VER" | |
| - name: Cache CMake | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 | |
| with: | |
| key: cmake-${{ steps.get-cmake-ver.outputs.CMAKE_VER }}-linux-x86_64 | |
| path: cmake-${{ steps.get-cmake-ver.outputs.CMAKE_VER }}-linux-x86_64.tar.gz | |
| - name: Install CMake | |
| run: | | |
| [ -f cmake-${CMAKE_VER}-linux-x86_64.tar.gz ] || curl -L -S -O "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-linux-x86_64.tar.gz" | |
| tar -xz -f cmake-${CMAKE_VER}-linux-x86_64.tar.gz -C "$RUNNER_TEMP" | |
| realpath "$RUNNER_TEMP/cmake-${CMAKE_VER}-linux-x86_64/bin" >> "$GITHUB_PATH" | |
| - name: Configure | |
| run: | | |
| cmake --version | grep "version ${CMAKE_VER}" || (echo "CMake version mismatch" && exit 1) | |
| cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DPCRE2_SUPPORT_LIBEDIT=ON -DPCRE2_SUPPORT_LIBREADLINE=OFF -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_POLICY_VERSION_MINIMUM=$CMAKE_VER -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build | |
| - name: Build | |
| run: cd build && make -j3 | |
| - name: Test | |
| run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) | |
| - name: Install | |
| run: | | |
| cd build | |
| cmake --install . --prefix install-dir | |
| ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux | |
| ../maint/RunSymbolTest install-dir/lib/ ../maint/ | |
| - name: Test CMake install interface | |
| run: | | |
| INSTALL_PREFIX=`pwd`/build/install-dir | |
| cd maint/cmake-tests/install-interface | |
| for useStaticLibs in ON OFF; do | |
| echo "== Testing CMake install interface with PCRE2_USE_STATIC_LIBS=$useStaticLibs ==" | |
| rm -rf build | |
| cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALL_PREFIX" -DPCRE2_USE_STATIC_LIBS=$useStaticLibs -B build | |
| (cd build; make) | |
| ./build/test_executable | |
| ldd ./build/test_executable | |
| if [ $useStaticLibs = ON ]; then | |
| (ldd ./build/test_executable | grep -q "pcre2") && (echo "Error: PCRE2 found in ldd output" && exit 1) | |
| else | |
| # Test that the shared library is actually linked in | |
| (ldd ./build/test_executable | grep -q "$INSTALL_PREFIX/lib/libpcre2-8.so.0") || (echo "Error: Shared library not linked in" && exit 1) | |
| fi | |
| done | |
| - name: Test CMake build interface | |
| run: | | |
| BUILD_DIR=`pwd` | |
| cp -rp maint/cmake-tests/build-interface ../cmake-tests-build-interface | |
| cd ../cmake-tests-build-interface | |
| ln -s "$BUILD_DIR" pcre2 | |
| for buildLibs in "ON;OFF" "OFF;ON"; do | |
| static=`echo $buildLibs | cut -d';' -f1` | |
| shared=`echo $buildLibs | cut -d';' -f2` | |
| echo "== Testing CMake build interface with BUILD_STATIC_LIBS=$static and BUILD_SHARED_LIBS=$shared ==" | |
| rm -rf build | |
| cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIBS=$static -DBUILD_SHARED_LIBS=$shared -B build | |
| (cd build; make) | |
| ./build/test_executable | |
| ldd ./build/test_executable | |
| if [ $static = ON ]; then | |
| (ldd ./build/test_executable | grep -q "pcre2") && (echo "Error: PCRE2 found in ldd output" && exit 1) | |
| else | |
| # Test that the shared library is actually linked in | |
| (ldd ./build/test_executable | grep -q "`pwd`/build/pcre2/libpcre2-8.so.0") || (echo "Error: Shared library not linked in" && exit 1) | |
| fi | |
| done | |
| dodo: | |
| # Tests with: Autoconf on oldest supported Ubuntu (in non-extended support) | |
| name: GCC -Os, old Autotools | |
| runs-on: ubuntu-latest | |
| container: ubuntu:22.04 | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'dodo') | |
| steps: | |
| - name: Setup | |
| run: | | |
| echo "set man-db/auto-update false" | debconf-communicate && dpkg-reconfigure man-db | |
| export DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC | |
| apt-get -qq update | |
| apt-get -qq install -y git build-essential autoconf automake libtool | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Prepare | |
| run: ./autogen.sh | |
| - name: Configure | |
| run: ./configure CFLAGS="-Os $CFLAGS_GCC_STYLE" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror | |
| - name: Build | |
| run: make -j3 | |
| - name: Test | |
| run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo "== $i =="; cat $i; done; exit $rc) | |
| - name: Install | |
| run: | | |
| make install "DESTDIR=`pwd`/install-dir" | |
| maint/RunManifestTest install-dir maint/manifest-makeinstall-linux | |
| maint/RunSymbolTest install-dir/usr/local/lib/ maint/ | |
| passenger: | |
| # Tests with: Autoconf on oldest RHEL (in extended support). | |
| # That's the absolute limit to how old a Linux version I'll tolerate regular testing on. | |
| name: GCC, very old Autotools | |
| runs-on: ubuntu-latest | |
| container: redhat/ubi8:8.6 | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'passenger') | |
| steps: | |
| - name: Setup | |
| run: | | |
| yum -q makecache | |
| yum -q install -y gcc git make automake autoconf libtool diffutils file glibc-langpack-en | |
| yum -q update -y glibc-common | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Prepare | |
| run: ./autogen.sh | |
| - name: Configure | |
| run: ./configure CFLAGS="-O0 $CFLAGS_GCC_STYLE" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror | |
| - name: Build | |
| run: make -j3 | |
| - name: Test | |
| run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo "== $i =="; cat $i; done; exit $rc) | |
| - name: Install | |
| run: | | |
| make install "DESTDIR=`pwd`/install-dir" | |
| maint/RunManifestTest install-dir maint/manifest-makeinstall-linux | |
| maint/RunSymbolTest install-dir/usr/local/lib/ maint/ | |
| greatawk: | |
| # Tests with: GCC, -O2, oldest supported Ubuntu (in non-extended support) | |
| name: GCC -O2, old CMake | |
| runs-on: ubuntu-latest | |
| container: ubuntu:22.04 | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'greatawk') | |
| steps: | |
| - name: Setup | |
| run: | | |
| echo "set man-db/auto-update false" | debconf-communicate && dpkg-reconfigure man-db | |
| export DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC | |
| apt-get -qq update | |
| apt-get -qq install -y git build-essential cmake zlib1g-dev libbz2-dev libreadline-dev | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Configure | |
| run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -B build | |
| - name: Build | |
| run: cd build && make -j3 | |
| - name: Test | |
| run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) | |
| - name: Install | |
| run: | | |
| cd build | |
| cmake --install . --prefix install-dir | |
| ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux relwithdebinfo | |
| ../maint/RunSymbolTest install-dir/lib/ ../maint/ | |
| - name: Test CMake install interface | |
| run: | | |
| INSTALL_PREFIX=`pwd`/build/install-dir | |
| cd maint/cmake-tests/install-interface | |
| for useStaticLibs in ON OFF; do | |
| echo "== Testing CMake install interface with PCRE2_USE_STATIC_LIBS=$useStaticLibs ==" | |
| rm -rf build | |
| cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH="$INSTALL_PREFIX" -DPCRE2_USE_STATIC_LIBS=$useStaticLibs -B build | |
| (cd build; make) | |
| ./build/test_executable | |
| ldd ./build/test_executable | |
| if [ $useStaticLibs = ON ]; then | |
| (ldd ./build/test_executable | grep -q "pcre2") && (echo "Error: PCRE2 found in ldd output" && exit 1) | |
| else | |
| # Test that the shared library is actually linked in | |
| (ldd ./build/test_executable | grep -q "$INSTALL_PREFIX/lib/libpcre2-8.so.0") || (echo "Error: Shared library not linked in" && exit 1) | |
| fi | |
| done | |
| - name: Test CMake build interface | |
| run: | | |
| BUILD_DIR=`pwd` | |
| cp -rp maint/cmake-tests/build-interface ../cmake-tests-build-interface | |
| cd ../cmake-tests-build-interface | |
| ln -s "$BUILD_DIR" pcre2 | |
| for buildLibs in "ON;OFF" "OFF;ON"; do | |
| static=`echo $buildLibs | cut -d';' -f1` | |
| shared=`echo $buildLibs | cut -d';' -f2` | |
| echo "== Testing CMake build interface with BUILD_STATIC_LIBS=$static and BUILD_SHARED_LIBS=$shared ==" | |
| rm -rf build | |
| cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIBS=$static -DBUILD_SHARED_LIBS=$shared -B build | |
| (cd build; make) | |
| ./build/test_executable | |
| ldd ./build/test_executable | |
| if [ $static = ON ]; then | |
| (ldd ./build/test_executable | grep -q "pcre2") && (echo "Error: PCRE2 found in ldd output" && exit 1) | |
| else | |
| # Test that the shared library is actually linked in | |
| (ldd ./build/test_executable | grep -q "`pwd`/build/pcre2/libpcre2-8.so.0") || (echo "Error: Shared library not linked in" && exit 1) | |
| fi | |
| done | |
| wasp: | |
| # Tests with: French locale; oldest supported CMake; no JIT; -Os; libreadline | |
| name: GCC -Os, very old CMake, ninja, no JIT | |
| runs-on: ubuntu-latest | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'wasp') | |
| env: | |
| CMAKE_VER: "3.15.7" | |
| steps: | |
| - name: Setup | |
| run: | | |
| echo "set man-db/auto-update false" | sudo debconf-communicate && sudo dpkg-reconfigure man-db | |
| sudo apt-get -qq update | |
| sudo apt-get -qq install -y language-pack-fr ninja-build zlib1g-dev libbz2-dev libreadline-dev | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Cache CMake | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 | |
| with: | |
| key: cmake-${{ env.CMAKE_VER }}-Linux-x86_64 | |
| path: cmake-${{ env.CMAKE_VER }}-Linux-x86_64.tar.gz | |
| - name: Install CMake | |
| run: | | |
| [ -f cmake-${CMAKE_VER}-Linux-x86_64.tar.gz ] || curl -L -S -O "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-Linux-x86_64.tar.gz" | |
| tar -xz -f cmake-${CMAKE_VER}-Linux-x86_64.tar.gz -C "$RUNNER_TEMP" | |
| realpath "$RUNNER_TEMP/cmake-${CMAKE_VER}-Linux-x86_64/bin" >> "$GITHUB_PATH" | |
| - name: Configure | |
| run: | | |
| cmake --version | grep "version ${CMAKE_VER}" || (echo "CMake version mismatch" && exit 1) | |
| CC='clang' cmake $CMAKE_FLAGS -G Ninja -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DPCRE2_SUPPORT_LIBREADLINE=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=MinSizeRel -B build | |
| - name: Build | |
| run: ninja -C build | |
| - name: Test | |
| run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) | |
| - name: Install | |
| run: | | |
| cd build | |
| cmake --install . --prefix install-dir | |
| ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux minsizerel | |
| ../maint/RunSymbolTest install-dir/lib/ ../maint/ | |
| bat: | |
| # Tests with: MSVC 32-bit, and a variety of CMake options. Windows has "bat" files. | |
| name: Windows (Win32) | |
| runs-on: windows-latest | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'bat') | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Configure | |
| run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2GREP_SUPPORT_CALLOUT_FORK=OFF -DPCRE2_DEBUG=ON -DPCRE2_NEWLINE=ANYCRLF -DPCRE2_STATIC_PIC=ON -DPCRE2_SUPPORT_BSR_ANYCRLF=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DCMAKE_C_FLAGS="$CFLAGS_MSVC" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -B build -A Win32 | |
| - name: Build | |
| run: cmake --build build --config RelWithDebInfo | |
| - name: Test | |
| run: cd build && ctest -C RelWithDebInfo -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) | |
| pterodactyl: | |
| # Tests with: MSVC 64-bit, Debug, shared libraries | |
| name: Windows (x64) | |
| runs-on: windows-latest | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'pterodactyl') | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Configure | |
| run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=OFF -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2_DEBUG=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DCMAKE_C_FLAGS="$CFLAGS_MSVC" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -B build -A x64 | |
| - name: Build | |
| run: cmake --build build --config Debug | |
| - name: Test | |
| run: cd build && ctest -C Debug -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) | |
| bigbird: | |
| # Job to execute ManyConfigTests | |
| name: manyconfig | |
| runs-on: ubuntu-latest | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'bigbird') | |
| steps: | |
| - name: Setup | |
| run: | | |
| echo "set man-db/auto-update false" | sudo debconf-communicate && sudo dpkg-reconfigure man-db | |
| sudo apt-get -qq update | |
| sudo apt-get -qq install -y valgrind | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Run | |
| run: | | |
| ./autogen.sh | |
| ./maint/ManyConfigTests | |
| camel: | |
| # Job to execute RunPerlTest. "Camel bird" is another name for an ostrich (and it's Perl's logo). | |
| name: perl | |
| runs-on: ubuntu-latest | |
| container: perl:devel | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'camel') | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: yes | |
| - name: Test | |
| run: | | |
| perl -v | |
| maint/RunPerlTest | |
| chaffinch: | |
| # Job to verify that the CMake "unity" build (single-file / jumbo build) passes. | |
| # If this fails, it's usually because two different files define some file-static | |
| # functions or macros which collide. | |
| name: CMake unity build | |
| runs-on: ubuntu-latest | |
| if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'chaffinch') | |
| env: | |
| # Disallowing shadowing would be very spammy for unity builds, because the | |
| # same variable name can be used in multiple files. | |
| CFLAGS_UNITY: "-Wno-shadow" | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Configure | |
| run: cmake $CMAKE_FLAGS -DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=0 -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE $CFLAGS_UNITY" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build | |
| - name: Build | |
| run: cd build && make -j3 | |
| - name: Test | |
| run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) | |
| fruitbat: | |
| # Tests with: MSYS2 unix-on-Windows environment | |
| name: MSYS2 | |
| runs-on: windows-latest | |
| if: | | |
| (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'fruitbat')) || | |
| github.event_name == 'push' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # UCRT64 is the new default MSYS2 runtime, which builds native 64-bit | |
| # binaries which can then be shipped and run on systems without MSYS2 | |
| # installed (using MinGW-x64 + the UCRT). | |
| # MSYS is the Unix-variant runtime, which builds binaries that have a | |
| # dependency on MSYS2 being installed, but those binaries then use a | |
| # full emulated Unix environment at runtime. | |
| msystem: ["UCRT64", "MSYS"] | |
| steps: | |
| - name: Pre-checkout | |
| run: git config --global core.autocrlf input | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Setup | |
| uses: msys2/setup-msys2@fb197b72ce45fb24f17bf3f807a388985654d1f2 # v2.29.0 | |
| with: | |
| msystem: ${{ matrix.msystem }} | |
| update: true | |
| pacboy: diffutils gcc:p cmake:p ninja:p ${{ matrix.msystem == 'MSYS' && 'libreadline:p' || 'readline:p' }} | |
| - name: Configure | |
| shell: msys2 {0} | |
| run: cmake $CMAKE_FLAGS -G Ninja -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build | |
| - name: Build | |
| shell: msys2 {0} | |
| run: ninja -C build | |
| - name: Test | |
| shell: msys2 {0} | |
| run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) | |
| ptarmigan: | |
| # Tests with various unusual processor architectures | |
| name: Multiarch | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # S390x is important, because it's basically the only supported big-endian | |
| # architecture I can find anywhere. I used to work on SPARC and PPC-be systems | |
| # a long time ago, but even Debian has dropped those architectures now, so | |
| # it's nice that there's *least one* arch remaining to shake out endian | |
| # assumptions. | |
| - arch: "s390x" | |
| distro: ubuntu_latest | |
| # Big-iron POWER only (this is not the PowerPC arch used in old Apple Macs) | |
| - arch: "ppc64le" | |
| distro: "ubuntu_latest" | |
| # A 32-bit Linux build. i386 is mostly gone now, so ARMv7 is all that's left. | |
| - arch: "armv7" | |
| distro: "ubuntu_latest" | |
| # The only really widely-deployed non-x86 archicture, at least that's likely | |
| # to be running PCRE2. | |
| - arch: "aarch64" | |
| distro: "ubuntu_latest" | |
| # Not used by anyone yet, really, but potentially the "next big thing". | |
| - arch: "riscv64" | |
| distro: "ubuntu_latest" | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| packages: write # Necessary for uraimo/run-on-arch-action to use GitHub's Docker repository as a cache | |
| if: | | |
| (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'ptarmigan')) || | |
| github.event_name == 'push' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Prepare | |
| run: ./autogen.sh | |
| - uses: uraimo/run-on-arch-action@d94c13912ea685de38fccc1109385b83fd79427d # v3.0.1 | |
| name: Configure, build, and test | |
| with: | |
| arch: ${{ matrix.arch }} | |
| distro: ${{ matrix.distro }} | |
| # Not required, but speeds up builds by storing container images in | |
| # a GitHub package registry. | |
| githubToken: ${{ github.token }} | |
| env: | # YAML, but pipe character is necessary | |
| CFLAGS_GCC_STYLE: ${{ env.CFLAGS_GCC_STYLE }} | |
| CMAKE_FLAGS: ${{ env.CMAKE_FLAGS }} | |
| install: | | |
| echo "set man-db/auto-update false" | debconf-communicate && dpkg-reconfigure man-db | |
| apt-get -qq update | |
| apt-get -qq install -y gcc cmake ninja-build zlib1g-dev libbz2-dev libreadline-dev | |
| run: | | |
| set -e | |
| # TODO: Set -DCMAKE_COMPILE_WARNING_AS_ERROR=ON (there's currently a build failure on S390x) | |
| cmake $CMAKE_FLAGS -G Ninja -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS="$CFLAGS_GCC_STYLE" -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -B build | |
| cd build | |
| ninja | |
| ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true) | |
| zebrilus: | |
| # Tests with: Zig compiler. A "zebrilus" is known as a "zigzag heron". | |
| name: Zig | |
| runs-on: ubuntu-latest | |
| if: | | |
| (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'zebrilus')) || | |
| github.event_name == 'push' | |
| steps: | |
| - name: Setup | |
| run: | | |
| sudo snap install zig --classic --beta | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Build | |
| run: zig build -Dsupport_jit | |
| - name: Test | |
| run: | | |
| srcdir=`pwd` pcre2test=`pwd`/zig-out/bin/pcre2test ./RunTest -bigstack | |
| bee: | |
| # Tests with: Bazel build system. A bee goes "buzz buzz buzz(el)". | |
| name: Bazel | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: ["ubuntu-latest", "windows-latest"] | |
| runs-on: ${{ matrix.os }} | |
| if: | | |
| (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'bee')) || | |
| github.event_name == 'push' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: true | |
| - name: Build | |
| run: bazelisk build //... --enable_runfiles --incompatible_strict_action_env | |
| - name: Test | |
| run: bazelisk test //... --enable_runfiles --incompatible_strict_action_env --test_output=all |