xref: /Universal-ctags/circle.yml (revision f6604ed7a1fa48b7fcb8f1501286fbd2a104ec9a)
1version: 2
2jobs:
3  #
4  # This is for the latest RELEASED Fedora.
5  # Update the version of Fedora when new version is released.
6  # We don't use row hide, the development version of Fedora
7  # till the list of TODO items of u-ctags becomes nil.
8  #
9  # We assume GNU Make is available.
10  #
11   fedora34_gmake:
12     working_directory: ~/universal-ctags
13     docker:
14       - image: docker.io/fedora:34
15     steps:
16       - run:
17           name: Install Git, Gdb and Procps-NG
18           command: |
19             yum -y install git gdb procps-ng
20       - checkout
21       - run:
22           name: Install build tools
23           command: |
24             dnf -y install gcc automake autoconf pkgconfig make libseccomp-devel libxml2-devel jansson-devel libyaml-devel pcre2-devel findutils diffutils sudo
25             dnf -y install jq puppet python3-sphinx
26       - run:
27           name: Build
28           command: |
29             bash ./autogen.sh
30             ./configure --enable-debugging
31             make -j 2
32       - run:
33           name: Test
34           command: |
35             make check
36       - run:
37           name: Make HTML documents
38           command: |
39             cd docs
40             make html
41
42   fedora34_gmake_roundtrip:
43     working_directory: ~/universal-ctags
44     docker:
45       - image: docker.io/fedora:34
46     steps:
47       - run:
48           name: Install Git and Gdb
49           command: |
50             yum -y install git gdb
51       - checkout
52       - run:
53           name: Install build tools
54           command: |
55             dnf -y install gcc automake autoconf pkgconfig make libseccomp-devel libxml2-devel jansson-devel libyaml-devel pcre2-devel findutils diffutils sudo
56             dnf -y install jq puppet
57       - run:
58           name: Build
59           command: |
60             bash ./autogen.sh
61             ./configure --enable-debugging
62             make -j 2
63       - run:
64           name: Test
65           command: |
66             make roundtrip
67
68  #
69  # We assume GNU make as the `make` command as we use GNU make extension
70  # aggressively in man/Makefile and win32/Makefile.
71  #
72  # man/Makefile is used to generate man files only when rst2man is installed.
73  # win32/Makefile is used only when either source.mk or win32/*.in is updated.
74  # In other cases we can still build ctags without GNU make.
75  #
76  # The following tests use bmake (NetBSD make) to check if GNU make extensions
77  # are not used unintentionally.
78  #
79  # On Fedora 31 bmake package cannot be installed because a package required by
80  # bmake is not available. More inspection is needed. Fedora 30 is the last
81  # version where bmake can be installed.
82  #
83   fedora30_bmake:
84     working_directory: ~/universal-ctags
85     docker:
86       - image: docker.io/fedora:30
87     steps:
88       - run:
89           name: Install Git and Gdb
90           command: |
91             dnf -y install git gdb
92       - checkout
93       - run:
94           name: Install packages for building ctags and validating test input files
95           command: |
96             dnf -y install gcc automake autoconf pkgconfig bmake libseccomp-devel libxml2-devel jansson-devel libyaml-devel pcre2-devel findutils sudo
97             dnf -y install g++ jq puppet
98       - run:
99           name: Build
100           command: |
101             bash ./autogen.sh
102             MAKE=bmake ./configure --enable-debugging
103             bmake -j 2
104       - run:
105           name: Test
106           command: |
107             MAKE=bmake bmake validate-input check codecheck
108
109   fedora30_bmake_roundtrip:
110     working_directory: ~/universal-ctags
111     docker:
112       - image: docker.io/fedora:30
113     steps:
114       - run:
115           name: Install Git and Gdb
116           command: |
117             dnf -y install git gdb
118       - checkout
119       - run:
120           name: Install build tools
121           command: |
122             dnf -y install gcc automake autoconf pkgconfig bmake libseccomp-devel libxml2-devel jansson-devel libyaml-devel pcre2-devel findutils sudo
123             dnf -y install jq puppet
124       - run:
125           name: Build
126           command: |
127             bash ./autogen.sh
128             MAKE=bmake ./configure --enable-debugging
129             bmake -j 2
130       - run:
131           name: Test
132           command: |
133             MAKE=bmake bmake roundtrip
134
135   fedora34_distcheck:
136     working_directory: ~/universal-ctags
137     docker:
138       - image: docker.io/fedora:34
139     steps:
140       - run:
141           name: Install Git, Gdb and Procps-NG
142           command: |
143             dnf -y install git gdb procps-ng
144       - checkout
145       - run:
146           name: Install build tools
147           command: |
148             dnf -y install gcc automake autoconf pkgconfig make libseccomp-devel libxml2-devel jansson-devel libyaml-devel findutils diffutils sudo pcre2-devel
149             dnf -y install jq puppet python3-docutils
150       - run:
151           name: Run autogen.sh
152           command: |
153             bash ./autogen.sh
154       - run:
155           name: Run configure
156           command: |
157             ./configure
158       - run:
159           name: verify generated files (optlib, txt2cstr, etc.) are updated
160           command: |
161             make check-genfile
162       - run:
163           name: Test
164           command: |
165             ulimit -c 0
166             # Let's trick git.
167             #
168             # "git" running in "make distcheck" may refer $(pwd)/.git of THIS context.
169             # On the other hand, we want to run the test cases in an environment separated
170             # from our git repo.
171             #
172             mkdir __NO_GIT__
173             make distcheck GIT_DIR=__NO_GIT__
174             rmdir __NO_GIT__
175
176   ubi8_make:
177     working_directory: ~/universal-ctags
178     docker:
179       - image: registry.access.redhat.com/ubi8:latest
180     steps:
181       - run:
182           name: Install Git
183           command: |
184             yum -y install git
185       - checkout
186       - run:
187           name: Install build tools
188           command: |
189              yum -y --enablerepo=ubi-8-appstream --enablerepo=ubi-8-baseos --enablerepo=ubi-8-codeready-builder install python3 gcc automake autoconf pkgconfig make libxml2-devel libyaml-devel pcre2-devel findutils diffutils sudo
190       - run:
191           name: Build
192           command: |
193             bash ./autogen.sh
194             ./configure --enable-debugging
195             make -j 2
196       - run:
197           name: Test
198           command: |
199             make check
200
201   ubi8_make_roundtrip:
202     working_directory: ~/universal-ctags
203     docker:
204       - image: registry.access.redhat.com/ubi8:latest
205     steps:
206       - run:
207           name: Install Git
208           command: |
209             yum -y install git
210       - checkout
211       - run:
212           name: Install build tools
213           command: |
214              yum -y --enablerepo=ubi-8-appstream --enablerepo=ubi-8-baseos --enablerepo=ubi-8-codeready-builder install python3 gcc automake autoconf pkgconfig make libxml2-devel libyaml-devel pcre2-devel findutils diffutils sudo
215       - run:
216           name: Build
217           command: |
218             bash ./autogen.sh
219             ./configure --enable-debugging
220             make -j 2
221       - run:
222           name: Test
223           command: |
224             make roundtrip
225   centos7_make:
226     working_directory: ~/universal-ctags
227     docker:
228       - image: docker.io/centos:7
229     steps:
230       - run:
231           name: Install Git
232           command: |
233             yum -y install git
234       - checkout
235       - run:
236           name: Install build tools
237           command: |
238              yum -y install python3 gcc automake autoconf pkgconfig make libxml2-devel jansson-devel libyaml-devel pcre2-devel findutils diffutils sudo
239       - run:
240           name: Build
241           command: |
242             bash ./autogen.sh
243             ./configure --enable-debugging
244             make -j 2
245       - run:
246           name: Test
247           command: |
248             make check SKIP_CHECKGEN_WIN32=yes
249
250   centos7_make_roundtrip:
251     working_directory: ~/universal-ctags
252     docker:
253       - image: docker.io/centos:7
254     steps:
255       - run:
256           name: Install Git
257           command: |
258             yum -y install git
259       - checkout
260       - run:
261           name: Install build tools
262           command: |
263              yum -y install gcc automake autoconf pkgconfig make libxml2-devel jansson-devel libyaml-devel pcre2-devel findutils diffutils sudo
264       - run:
265           name: Build
266           command: |
267             bash ./autogen.sh
268             ./configure --enable-debugging
269             make -j 2
270       - run:
271           name: Test
272           command: |
273             make roundtrip
274
275   ubuntu20_mingw:
276     working_directory: ~/universal-ctags
277     docker:
278       - image: docker.io/ubuntu:20.04
279     steps:
280       - run:
281           name: Install git
282           command: |
283             export DEBIAN_FRONTEND=noninteractive
284             apt-get -y update
285             apt-get -y install git
286       - checkout
287       - run:
288           name: Install build tools
289           command: |
290             export DEBIAN_FRONTEND=noninteractive
291             apt-get -o APT::Immediate-Configure=false -y install \
292             binutils-mingw-w64-i686 gcc-mingw-w64-i686 make gcc
293       - run:
294           name: Build
295           command: |
296             make -j2 CC=i686-w64-mingw32-gcc WINDRES=i686-w64-mingw32-windres CC_FOR_PACKCC=gcc -f mk_mingw.mak
297   ubuntu20_32bit:
298     working_directory: ~/universal-ctags
299     docker:
300       - image: docker.io/ubuntu:20.04
301     steps:
302       - run:
303           name: Install git
304           command: |
305             export DEBIAN_FRONTEND=noninteractive
306             dpkg --add-architecture i386
307             apt-get -y update
308             apt-get -y install git
309       - checkout
310       - run:
311           name: Install build tools
312           # APT::Immediate-Configure=false is taken from
313           # https://superuser.com/questions/199582/apt-error-could-not-perform-immediate-configuration-on
314           # I don't understand why I need this.
315           # -- Masatake
316           command: |
317             export DEBIAN_FRONTEND=noninteractive
318             apt-get -o APT::Immediate-Configure=false -y install \
319             pkg-config autoconf automake make gcc \
320             libjansson-dev:i386 libyaml-dev:i386 libseccomp-dev:i386 libxml2-dev:i386 \
321             gdb valgrind \
322             python3-docutils \
323             libc6-dev-i386 libc6-dbg:i386
324       - run:
325           name: Build
326           command: |
327             bash ./autogen.sh
328             CC='gcc -m32' ./configure --enable-debugging
329             make -j 2
330       - run:
331           name: Test
332           command: |
333             # make check roundtrip
334             make units CATEGORIES=parser-varlink
335
336   fedora33_cross_aarch64:
337     working_directory: ~/universal-ctags
338     docker:
339       - image: docker.io/library/fedora:33
340     steps:
341       - run:
342           name: Install tools
343           command: |
344             dnf -y install git gcc autoconf automake make file
345       - run:
346           name: Prepare repo file for install cross compiler
347           command: |
348             curl -o /etc/yum.repos.d/lantw44-aarch64-linux-gnu-toolchain-fedora-33.repo https://copr.fedorainfracloud.org/coprs/lantw44/aarch64-linux-gnu-toolchain/repo/fedora-33/lantw44-aarch64-linux-gnu-toolchain-fedora-33.repo
349       - run:
350           name: Install the cross compiler for aarch64
351           command: |
352             dnf -y install aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc aarch64-linux-gnu-glibc
353       - checkout
354       - run:
355           name: Build ctags for aarch64
356           command: |
357             bash ./autogen.sh
358             mkdir out
359             ./configure --host=aarch64-linux-gnu \
360             --prefix=`pwd`/out \
361             --enable-static \
362             --disable-seccomp \
363             CC=/usr/bin/aarch64-linux-gnu-gcc \
364             CPP=/usr/bin/aarch64-linux-gnu-cpp \
365             AR=/usr/bin/aarch64-linux-gnu-gcc-ar \
366             RANLIB=/usr/bin/aarch64-linux-gnu-gcc-ranlib \
367             CC_FOR_BUILD=/usr/bin/gcc
368             make -j 2
369       - run:
370           name: Install locally
371           command: |
372             make install
373       - run:
374           name: Test
375           command: |
376             test -f out/bin/ctags && ( file out/bin/ctags | grep -q 'ARM aarch64' )
377
378workflows:
379  version: 2
380  build_and_test:
381    jobs:
382      - ubuntu20_32bit
383      - fedora30_bmake
384      - fedora34_distcheck
385      - ubi8_make
386      - fedora34_gmake
387      - fedora33_cross_aarch64
388      - centos7_make
389      - ubuntu20_mingw
390      - ubi8_make_roundtrip
391      - fedora30_bmake_roundtrip
392      - fedora34_gmake_roundtrip
393      - centos7_make_roundtrip
394