1version: 2.1 2 3executors: 4 win32-executor: 5 docker: 6 - image: cimg/base:2023.10 7 win64-executor: 8 docker: 9 - image: cimg/base:2023.10 10 dist-executor: 11 docker: 12 - image: cimg/base:2023.10 13 14jobs: 15 16 macos-aat-fonts: 17 macos: 18 xcode: "15.3.0" 19 steps: 20 - checkout 21 - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config ragel freetype glib cairo python3 icu4c graphite2 gobject-introspection ninja 22 - run: pip3 install meson --upgrade 23 - run: brew link --force icu4c 24 - run: PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig" meson setup build -Dcoretext=enabled -Dgraphite=enabled -Dauto_features=enabled -Dchafa=disabled -Ddocs=disabled 25 - run: meson compile -Cbuild 26 - run: meson test -Cbuild --print-errorlogs 27 - store_artifacts: 28 path: build/meson-logs/ 29 30 dist: 31 executor: dist-executor 32 steps: 33 - checkout 34 - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y git ninja-build binutils gcc g++ pkg-config ragel gtk-doc-tools gobject-introspection libfreetype6-dev libglib2.0-dev libgirepository1.0-dev libcairo2-dev libicu-dev libgraphite2-dev python3 python3-pip 35 - run: pip3 install fonttools meson --upgrade 36 - run: meson setup build 37 - run: meson dist --no-tests -Cbuild 38 - persist_to_workspace: 39 root: . 40 paths: build/meson-dist/harfbuzz-*.tar.xz 41 42 publish-dist: 43 executor: dist-executor 44 steps: 45 - checkout 46 - attach_workspace: 47 at: . 48 - run: | 49 .ci/publish_release_artifact.sh build/meson-dist/harfbuzz-$CIRCLE_TAG.tar.xz 50 51 fedora-valgrind: 52 docker: 53 - image: fedora:36 54 steps: 55 - checkout 56 - run: dnf install -y pkg-config ragel valgrind gcc gcc-c++ meson git glib2-devel freetype-devel cairo-devel libicu-devel gobject-introspection-devel graphite2-devel redhat-rpm-config python python-pip || true 57 - run: meson setup build --buildtype=debugoptimized 58 - run: meson compile -Cbuild -j9 59 # TOOD: increase timeouts and remove --no-suite=slow 60 - run: RUN_VALGRIND=1 meson test -Cbuild --no-suite=slow --wrap='valgrind --leak-check=full --error-exitcode=1' --print-errorlogs --num-processes=$(($(nproc)/2 + 1)) 61 62 alpine: 63 docker: 64 - image: alpine 65 steps: 66 - checkout 67 - run: apk update && apk add ragel gcc g++ glib-dev freetype-dev cairo-dev git py3-pip ninja 68 - run: | 69 python3 -m venv venv 70 source venv/bin/activate 71 pip3 install meson==0.56.0 72 meson setup build --buildtype=minsize 73 meson compile -Cbuild -j9 74 meson test -Cbuild --print-errorlogs 75 76 asan-ubsan: 77 docker: 78 - image: ubuntu 79 steps: 80 - checkout 81 - run: apt update || true 82 - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip python3-venv ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev 83 - run: | 84 python3 -m venv venv 85 source venv/bin/activate 86 pip3 install meson==0.56.0 87 CC=clang CXX=clang++ meson setup build --default-library=static -Db_sanitize=address,undefined --buildtype=debugoptimized --wrap-mode=nodownload -Dexperimental_api=true 88 meson compile -Cbuild -j9 89 meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt 90 91 tsan: 92 docker: 93 - image: ubuntu:20.04 94 steps: 95 - checkout 96 - run: apt update || true 97 - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip python3-venv ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev 98 - run: | 99 python3 -m venv venv 100 source venv/bin/activate 101 pip3 install meson==0.56.0 102 CC=clang CXX=clang++ meson setup build --default-library=static -Db_sanitize=thread --buildtype=debugoptimized --wrap-mode=nodownload -Dexperimental_api=true 103 meson compile -Cbuild -j9 104 meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt 105 106 msan: 107 docker: 108 - image: ubuntu:20.04 109 steps: 110 - checkout 111 - run: apt update || true 112 - run: DEBIAN_FRONTEND=noninteractive apt install -y python3 python3-pip python3-venv ninja-build clang lld git binutils pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev 113 - run: | 114 python3 -m venv venv 115 source venv/bin/activate 116 pip3 install meson==0.56.0 117 # msan, needs --force-fallback-for=glib,freetype2 also which doesn't work yet but runs fuzzer cases at least 118 CC=clang CXX=clang++ meson setup build --default-library=static -Db_sanitize=memory --buildtype=debugoptimized --wrap-mode=nodownload -Dauto_features=disabled -Dtests=enabled -Dexperimental_api=true 119 meson compile -Cbuild -j9 120 meson test -Cbuild --print-errorlogs | asan_symbolize | c++filt 121 122 clang-cxx2a: 123 docker: 124 - image: ubuntu 125 steps: 126 - checkout 127 - run: apt update || true 128 - run: DEBIAN_FRONTEND=noninteractive apt install -y clang lld git binutils 129 - run: clang -c src/harfbuzz-subset.cc -DHB_NO_MT -Werror -std=c++2a 130 131 crossbuild-win32: 132 executor: win32-executor 133 steps: 134 - checkout 135 - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y ninja-build python3 python3-pip python3-venv git g++-mingw-w64-i686 zip 136 - run: | 137 python3 -m venv venv 138 source venv/bin/activate 139 pip3 install meson==1.6.0 140 bash .ci/build-win32.sh 141 - store_artifacts: 142 path: harfbuzz-win32.zip 143 - persist_to_workspace: 144 root: . 145 paths: harfbuzz-win32.zip 146 147 publish-win32: 148 executor: win32-executor 149 steps: 150 - checkout 151 - attach_workspace: 152 at: . 153 - run: | 154 mv harfbuzz-win32{,-$CIRCLE_TAG}.zip 155 .ci/publish_release_artifact.sh harfbuzz-win32-$CIRCLE_TAG.zip 156 157 crossbuild-win64: 158 executor: win64-executor 159 steps: 160 - checkout 161 - run: sudo apt update && DEBIAN_FRONTEND=noninteractive sudo apt install -y ninja-build python3 python3-pip python3-venv git g++-mingw-w64-x86-64 zip 162 - run: | 163 python3 -m venv venv 164 source venv/bin/activate 165 pip3 install meson==1.6.0 166 bash .ci/build-win64.sh 167 - store_artifacts: 168 path: harfbuzz-win64.zip 169 - persist_to_workspace: 170 root: . 171 paths: harfbuzz-win64.zip 172 173 publish-win64: 174 executor: win64-executor 175 steps: 176 - checkout 177 - attach_workspace: 178 at: . 179 - run: | 180 mv harfbuzz-win64{,-$CIRCLE_TAG}.zip 181 .ci/publish_release_artifact.sh harfbuzz-win64-$CIRCLE_TAG.zip 182 183 184workflows: 185 version: 2 186 187 build: 188 jobs: 189 - macos-aat-fonts 190 - dist: 191 filters: # must have filter or won't work as a dependency 192 tags: 193 only: /.*/ 194 - publish-dist: 195 requires: 196 - dist 197 filters: 198 tags: 199 only: /^\d+\.\d+\.\d+$/ 200 branches: 201 ignore: /.*/ 202 - fedora-valgrind 203 - alpine 204 - asan-ubsan 205 - tsan 206 - msan 207 - clang-cxx2a 208 - crossbuild-win32: 209 filters: # must have filter or won't work as a dependency 210 tags: 211 only: /.*/ 212 - crossbuild-win64: 213 filters: # must have filter or won't work as a dependency 214 tags: 215 only: /.*/ 216 - publish-win32: 217 requires: 218 - crossbuild-win32 219 filters: 220 tags: 221 only: /^\d+\.\d+\.\d+$/ 222 branches: 223 ignore: /.*/ 224 - publish-win64: 225 requires: 226 - crossbuild-win64 227 filters: 228 tags: 229 only: /^\d+\.\d+\.\d+$/ 230 branches: 231 ignore: /.*/ 232