• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1version: 2
2
3jobs:
4
5  macos-10.12.6-aat-fonts:
6    macos:
7      xcode: "9.0.1"
8    steps:
9      - checkout
10      - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install wget autoconf automake libtool pkg-config ragel freetype glib cairo
11      - run: ./autogen.sh --with-freetype --with-glib --with-gobject --with-cairo
12      - run: make -j4
13      - run: make check || .ci/fail.sh
14
15  macos-10.13.6-aat-fonts:
16    macos:
17      xcode: "10.1.0"
18    steps:
19      - checkout
20      - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install wget autoconf automake libtool pkg-config ragel freetype glib cairo
21      - run: ./autogen.sh --with-freetype --with-glib --with-gobject --with-cairo
22      - run: make -j4
23      - run: make check || .ci/fail.sh
24
25  macos-10.14.4-aat-fonts:
26    macos:
27      xcode: "11.0.0"
28    steps:
29      - checkout
30      - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install wget autoconf automake libtool pkg-config ragel freetype glib cairo icu4c graphite2 cmake
31      - run: export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig" && ./autogen.sh --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-coretext --with-graphite2
32      - run: make -j4
33      - run: make check || .ci/fail.sh
34      - run: cmake -Bbuild -H. -DHB_HAVE_CORETEXT=1 -DHB_BUILD_TESTS=0 && cmake --build build
35
36  distcheck:
37    docker:
38      - image: ubuntu:19.04
39    steps:
40      - checkout
41      - run: apt update && apt install -y ninja-build binutils libtool autoconf automake make cmake gcc g++ pkg-config ragel gtk-doc-tools libfontconfig1-dev libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
42      - run: pip install fonttools
43      - run: ./autogen.sh
44      - run: make -j32
45      - run: make distcheck || .ci/fail.sh
46      - run: rm -rf harfbuzz-*
47      - run: make distdir && cd harfbuzz-* && cmake -DHB_CHECK=ON -Bbuild -H. -GNinja && ninja -Cbuild && CTEST_OUTPUT_ON_FAILURE=1 ninja -Cbuild test && ninja -Cbuild install
48
49  alpine-O3-Os-NOMMAP:
50    docker:
51      - image: alpine
52    steps:
53      - checkout
54      - run: apk update && apk add ragel make pkgconfig libtool autoconf automake gettext gcc g++ glib-dev freetype-dev cairo-dev python
55      # C??FLAGS are not needed for a regular build
56      - run: CFLAGS="-O3" CXXFLAGS="-O3 -DHB_NO_MMAP" ./autogen.sh
57      - run: make -j32
58      - run: make check || .ci/fail.sh
59      - run: make clean
60      - run: CFLAGS="-Os -DHB_OPTIMIZE_SIZE" CXXFLAGS="-Os -DHB_NO_MMAP -DHB_OPTIMIZE_SIZE" ./autogen.sh
61      - run: make -j32
62      - run: make check || .ci/fail.sh
63
64  archlinux-py3-all:
65    docker:
66      - image: archlinux/base
67    steps:
68      - checkout
69      - run: pacman --noconfirm -Syu freetype2 cairo icu gettext gobject-introspection gcc gcc-libs glib2 graphite pkg-config ragel python python-pip make which base-devel
70      - run: pip install flake8 fonttools
71      - run: flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
72      # C??FLAGS are not needed for a regular build
73      - run: ./autogen.sh --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2
74      - run: make -j32 CPPFLAGS="-Werror"
75      - run: make check CPPFLAGS="-Werror" || .ci/fail.sh
76
77  ## Doesn't play well with CircleCI apparently
78  #void-notest:
79  #  docker:
80  #    - image: voidlinux/voidlinux
81  #  steps:
82  #    - checkout
83  #    - run: xbps-install -Suy freetype gettext gcc glib graphite pkg-config ragel libtool autoconf automake make
84  #    - run: ./autogen.sh && make -j32 && make check
85
86  clang-O3-O0-and-nobuildsystem:
87    docker:
88      - image: ubuntu:18.10
89    steps:
90      - checkout
91      - run: apt update || true
92      - run: apt install -y clang wget autoconf automake libtool pkg-config ragel libfreetype6-dev libfontconfig1-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
93      - run: pip install fonttools
94      - run: wget http://download.savannah.gnu.org/releases/freetype/freetype-2.9.tar.bz2 && tar xf freetype-2.9.tar.bz2 && cd freetype-2.9 && ./autogen.sh && ./configure && make -j32 && cd ..
95      - run: CFLAGS="-O3" CXXFLAGS="-O3" CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-fontconfig --with-glib --with-cairo --with-icu --with-graphite2
96      - run: make -j32
97      - run: LD_LIBRARY_PATH="$PWD/freetype-2.9/objs/.libs" make check || .ci/fail.sh
98      - run: CFLAGS="-O0" CXXFLAGS="-O0" CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-fontconfig --with-glib --with-cairo --with-icu --with-graphite2
99      - run: make -j32
100      - run: LD_LIBRARY_PATH="$PWD/freetype-2.9/objs/.libs" make check || .ci/fail.sh
101      - run: make clean
102      - run: make -Csrc CPPFLAGS="-DHB_TINY -DHB_NO_OT_FONT" libharfbuzz-subset.la && make clean
103      - run: clang -c src/hb-*.cc -DHB_NO_MT
104
105  gcc-valgrind:
106    docker:
107      - image: ubuntu:18.10
108    steps:
109      - checkout
110      - run: apt update || true
111      - run: apt install -y gcc binutils libtool autoconf automake make pkg-config gtk-doc-tools ragel libfreetype6-dev libfontconfig1-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip valgrind
112      - run: pip install fonttools
113      - run: ./autogen.sh --with-freetype --with-glib --with-cairo --with-icu --with-graphite2 --with-fontconfig
114      - run: make -j32
115      # run-shape-fuzzer-tests.py automatically runs valgrind if see available
116      # but test/api runs it by request, we probably should normalize the approaches
117      - run: HB_TEST_SHAPE_FUZZER_TIMEOUT=3 HB_TEST_SUBSET_FUZZER_TIMEOUT=30 RUN_VALGRIND=1 make check && make -Ctest/api check-valgrind || .ci/fail.sh
118      # informational for now
119      - run: make -Ctest/api check-symbols || true
120
121  clang-everything:
122    docker:
123      - image: ubuntu:18.10
124    steps:
125      - checkout
126      - run: apt update || true; apt install -y wget gnupg
127      - run: wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
128      - run: echo "deb http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdev.list
129      - run: echo "deb-src http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdevsrc.list
130      - run: apt update || true
131      - run: apt install -y clang lld binutils libtool autoconf automake make pkg-config gtk-doc-tools ragel libfreetype6-dev libfontconfig1-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
132      - run: pip install fonttools
133      - run: CFLAGS="-Weverything -Wno-reserved-id-macro -Wno-conversion -Wno-padded -Wno-sign-conversion -Wno-cast-qual -Wno-documentation -Wno-documentation-unknown-command -DHB_WITH_WIN1256" CXXFLAGS="-Weverything -Wno-old-style-cast -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-cast-qual -Wno-c++98-compat-pedantic -Wno-sign-conversion -Wno-padded -Wno-shorten-64-to-32 -Wno-reserved-id-macro -Wno-float-conversion -Wno-format-pedantic -Wno-shadow -Wno-conversion -Wno-zero-as-null-pointer-constant -Wno-missing-field-initializers -Wno-used-but-marked-unused -Wno-unused-macros -Wno-comma -Wno-float-equal -Wno-disabled-macro-expansion -Wno-weak-vtables -Wno-unused-parameter -Wno-covered-switch-default -Wno-unreachable-code -Wno-unused-template -DHB_WITH_WIN1256" CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-glib --with-cairo --with-icu --with-graphite2 --with-fontconfig
134      - run: make -j32 CPPFLAGS="-Werror"
135      - run: make check CPPFLAGS="-Werror" || .ci/fail.sh
136
137  clang-asan:
138    docker:
139      - image: ubuntu:18.10
140    steps:
141      - checkout
142      - run: apt update || true; apt install -y wget gnupg
143      - run: wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
144      - run: echo "deb http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdev.list
145      - run: echo "deb-src http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdevsrc.list
146      - run: apt update || true
147      - run: apt install -y clang lld binutils libtool autoconf automake make pkg-config gtk-doc-tools ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
148      - run: pip install fonttools
149      - run: CPPFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address -O1 -g -fno-omit-frame-pointer" CFLAGS="-fsanitize=address -O1 -g -fno-omit-frame-pointer" CXXFLAGS="-fsanitize=address -O1 -g -fno-omit-frame-pointer" LD=ld.lld CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-glib --with-cairo --with-icu --with-graphite2
150      - run: make -j32
151      - run: make check || .ci/fail.sh | asan_symbolize | c++filt
152
153  clang-msan:
154    docker:
155      - image: ubuntu:18.10
156    steps:
157      - checkout
158      - run: apt update || true; apt install -y wget gnupg
159      - run: wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
160      - run: echo "deb http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdev.list
161      - run: echo "deb-src http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdevsrc.list
162      - run: apt update || true
163      - run: apt install -y clang lld binutils libtool autoconf automake gtk-doc-tools gettext make pkg-config ragel libcairo2-dev libicu-dev libmount-dev libgraphite2-dev python python-pip
164      - run: pip install fonttools
165      - run: update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.lld" 10
166      - run: wget https://ftp.gnome.org/pub/gnome/sources/glib/2.58/glib-2.58.1.tar.xz && tar xf glib-2.58.1.tar.xz && cd glib-2.58.1 && ./autogen.sh --with-pcre CPPFLAGS="-fsanitize=memory" LDFLAGS="-fsanitize=memory" CFLAGS="-fsanitize=memory" CXXFLAGS="-fsanitize=memory" LD=ld.lld CC=clang CXX=clang++ && make -j32 && make install && cd ..
167      - run: wget http://download.savannah.gnu.org/releases/freetype/freetype-2.9.tar.bz2 && tar xf freetype-2.9.tar.bz2 && cd freetype-2.9 && ./autogen.sh && ./configure CPPFLAGS="-fsanitize=memory" LDFLAGS="-fsanitize=memory -O1 -g -fno-omit-frame-pointer" CFLAGS="-fsanitize=memory -O1 -g -fno-omit-frame-pointer" CXXFLAGS="-fsanitize=memory -O1 -g -fno-omit-frame-pointer" LD=ld.lld CC=clang CXX=clang++ && make -j32 && make install && cd ..
168      - run: CPPFLAGS="-fsanitize=memory -fsanitize-memory-track-origins" LDFLAGS="-fsanitize=memory -fsanitize-memory-track-origins -O1 -g -fno-omit-frame-pointer" CFLAGS="-fsanitize=memory -fsanitize-memory-track-origins -O1 -g -fno-omit-frame-pointer" CXXFLAGS="-fsanitize=memory -fsanitize-memory-track-origins -O1 -g -fno-omit-frame-pointer" LD=ld.lld CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-glib --without-icu
169      - run: make -j32 && MSAN_OPTIONS=exitcode=42 HB_TEST_SUBSET_FUZZER_TIMEOUT=12 make check || .ci/fail.sh | asan_symbolize | c++filt
170
171  clang-tsan:
172    docker:
173      - image: ubuntu:18.10
174    steps:
175      - checkout
176      - run: apt update || true; apt install -y wget gnupg
177      - run: wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
178      - run: echo "deb http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdev.list
179      - run: echo "deb-src http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdevsrc.list
180      - run: apt update || true
181      - run: apt install -y clang lld binutils libtool autoconf automake make pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
182      - run: pip install fonttools
183      - run: CPPFLAGS="-fsanitize=thread" LDFLAGS="-fsanitize=thread -O1 -g -fno-omit-frame-pointer" CFLAGS="-fsanitize=thread -O1 -g -fno-omit-frame-pointer" CXXFLAGS="-fsanitize=thread -O1 -g -fno-omit-frame-pointer" LD=ld.lld CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-glib --with-cairo --with-icu --with-graphite2
184      - run: make -j32
185      - run: HB_TEST_SUBSET_FUZZER_TIMEOUT=40 make check || .ci/fail.sh | asan_symbolize | c++filt
186
187  clang-ubsan:
188    docker:
189      - image: ubuntu:18.10
190    steps:
191      - checkout
192      - run: apt update || true; apt install -y wget gnupg
193      - run: wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
194      - run: echo "deb http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdev.list
195      - run: echo "deb-src http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic main" > /etc/apt/sources.list.d/llvmdevsrc.list
196      - run: apt update || true
197      - run: apt install -y clang lld binutils libtool autoconf automake make pkg-config ragel libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
198      - run: pip install fonttools
199      - run: CPPFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined" LDFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined -O1 -g -fno-omit-frame-pointer" CFLAGS="-fsanitize=undefined -O1 -g -fno-omit-frame-pointer" CXXFLAGS="-fsanitize=undefined -O1 -g -fno-omit-frame-pointer" LD=ld.lld CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-glib --with-cairo --with-icu --with-graphite2
200      - run: make -j32
201      - run: UBSAN_OPTIONS=print_stacktrace=1 make check || .ci/fail.sh | asan_symbolize | c++filt
202
203  fedora-O0-debug-outoftreebuild-mingw:
204    docker:
205      - image: fedora
206    steps:
207      - checkout
208      - run: dnf install -y pkg-config ragel gcc gcc-c++ automake autoconf libtool make which glib2-devel freetype-devel cairo-devel libicu-devel gobject-introspection-devel graphite2-devel redhat-rpm-config python mingw32-gcc-c++ mingw64-gcc-c++ mingw32-glib2 mingw32-cairo mingw32-freetype mingw64-glib2 mingw64-cairo mingw64-freetype glibc-devel.i686 || true
209      - run: NOCONFIGURE=1 ./autogen.sh
210      - run: mkdir build && cd build && CFLAGS="-O0" CXXFLAGS="-O0" CPPFLAGS="-DHB_DEBUG" ../configure --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2 && make -j32 && (make check || ../.ci/fail.sh)
211      - run: pip install pefile
212      - run: mkdir winbuild32 && cd winbuild32 && ../mingw32.sh && make -j32 && make dist-win && cp harfbuzz-*-win32.zip harfbuzz-win32.zip
213      - run: mkdir winbuild64 && cd winbuild64 && ../mingw64.sh && make -j32 && make dist-win && cp harfbuzz-*-win64.zip harfbuzz-win64.zip
214      - store_artifacts:
215          path: winbuild32/harfbuzz-win32.zip
216          destination: harfbuzz-win32.zip
217      - store_artifacts:
218          path: winbuild64/harfbuzz-win64.zip
219          destination: harfbuzz-win64.zip
220
221  cmake-gcc:
222    docker:
223      - image: ubuntu:19.04
224    steps:
225      - checkout
226      - run: apt update && apt install -y ninja-build binutils cmake gcc g++ pkg-config ragel gtk-doc-tools libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
227      - run: pip install fonttools
228      - run: cmake -DHB_CHECK=ON -Bbuild -H. -GNinja
229      - run: ninja -Cbuild
230      - run: CTEST_OUTPUT_ON_FAILURE=1 ninja -Cbuild test
231      - run: ninja -Cbuild install
232
233  #cmake-oracledeveloperstudio:
234  #  docker:
235  #    - image: fedora
236  #  steps:
237  #    - checkout
238  #    - run: dnf install -y gcc ragel cmake make which glib2-devel freetype-devel cairo-devel libicu-devel graphite2-devel wget tar bzip2 python libnsl || true
239  #    - run: wget http://$ODSUSER:$ODSPASS@behdad.org/harfbuzz-private/OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 && tar xf OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 --owner root --group root --no-same-owner
240  #    - run: CC=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/suncc CXX=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/sunCC cmake -DHB_HAVE_GRAPHITE2=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_FREETYPE=ON -Bbuild -H.
241  #    - run: make -Cbuild -j32
242  #    - run: CTEST_OUTPUT_ON_FAILURE=1 make -Cbuild test
243  #    - run: make -Cbuild install
244
245  crosscompile-notest-djgpp:
246    docker:
247      # https://gist.github.com/ebraminio/8551fc74f27951e668102baa2f6b1175
248      - image: quay.io/ebraminio/djgpp
249    steps:
250      - checkout
251      - run: apt update && apt install -y ragel pkg-config libtool autoconf
252      - run: CFLAGS="-Wno-attributes" CXXFLAGS="-Wno-attributes" ./autogen.sh --prefix=/usr/local/djgpp --host=i586-pc-msdosdjgpp
253      - run: make -j32
254
255  crosscompile-notest-psvita:
256    docker:
257      - image: dockcross/base
258    steps:
259      - checkout
260      - run: git clone https://github.com/vitasdk/vdpm && cd vdpm && ./bootstrap-vitasdk.sh
261      - run: echo '#!/bin/true' > /usr/bin/ragel && chmod +x /usr/bin/ragel
262      - run: ./autogen.sh --prefix=/usr/local/vitasdk/arm-vita-eabi --host=arm-vita-eabi
263      - run: make -j32
264
265  crosscompile-cmake-notest-android-arm:
266    docker:
267      - image: dockcross/android-arm
268    steps:
269      - checkout
270      - run: cmake -Bbuild -H. -GNinja -DHB_BUILD_TESTS=OFF
271      - run: ninja -Cbuild
272
273  crosscompile-cmake-notest-browser-asmjs-hb_tiny:
274    docker:
275      - image: dockcross/browser-asmjs
276    steps:
277      - checkout
278      - run: cmake -Bbuild -H. -GNinja -DCMAKE_CXX_FLAGS="-DHB_TINY" -DHB_BUILD_TESTS=OFF
279      - run: ninja -Cbuild
280
281  crosscompile-cmake-notest-linux-arm64:
282    docker:
283      - image: dockcross/linux-arm64
284    steps:
285      - checkout
286      - run: cmake -Bbuild -H. -GNinja -DHB_BUILD_TESTS=OFF
287      - run: ninja -Cbuild
288
289  crosscompile-cmake-notest-linux-mips:
290    docker:
291      - image: dockcross/linux-mips
292    steps:
293      - checkout
294      - run: cmake -Bbuild -H. -GNinja -DHB_BUILD_TESTS=OFF
295      - run: ninja -Cbuild
296
297  #crosscompile-cmake-notest-windows-x64:
298  #  docker:
299  #    - image: dockcross/windows-x64
300  #  steps:
301  #    - checkout
302  #    - run: cmake -Bbuild -H. -GNinja
303  #    - run: ninja -Cbuild
304
305workflows:
306  version: 2
307  build:
308    jobs:
309      # macOS
310      - macos-10.12.6-aat-fonts
311      - macos-10.13.6-aat-fonts
312      - macos-10.14.4-aat-fonts
313
314      # both autotools and cmake
315      - distcheck
316
317      # autotools based builds
318      - alpine-O3-Os-NOMMAP
319      - archlinux-py3-all
320      #- void-notest
321      - gcc-valgrind
322      - clang-O3-O0-and-nobuildsystem
323      - clang-everything
324      - clang-asan
325      - clang-msan
326      - clang-tsan
327      - clang-ubsan
328      - fedora-O0-debug-outoftreebuild-mingw
329
330      # cmake based builds
331      - cmake-gcc
332      #- cmake-oracledeveloperstudio
333
334      # crosscompiles
335      # they can't be test thus are without tests
336      ## autotools
337      - crosscompile-notest-djgpp
338      - crosscompile-notest-psvita
339
340      ## cmake
341      - crosscompile-cmake-notest-android-arm
342      - crosscompile-cmake-notest-browser-asmjs-hb_tiny
343      - crosscompile-cmake-notest-linux-arm64
344      - crosscompile-cmake-notest-linux-mips
345      #- crosscompile-cmake-notest-windows-x64
346