Skip to content

Commit fb9d743

Browse files
szedergitster
authored andcommitted
travis-ci: build with GCC 4.8 as well
C99 'for' loop initial declaration, i.e. 'for (int i = 0; i < n; i++)', is not allowed in Git's codebase yet, to maintain compatibility with some older compilers. Our Travis CI builds used to catch 'for' loop initial declarations, because the GETTEXT_POISON job has always built Git with the default 'cc', which in Travis CI's previous default Linux image (based on Ubuntu 14.04 Trusty) is GCC 4.8, and that GCC version errors out on this construct (not only with DEVELOPER=1, but with our default CFLAGS as well). Alas, that's not the case anymore, becase after 14.04's EOL Travis CI's current default Linux image is based on Ubuntu 16.04 Xenial [1] and its default 'cc' is now GCC 5.4, which, just like all later GCC and Clang versions, simply accepts this construct, even if we don't explicitly specify '-std=c99'. Ideally we would adjust our CFLAGS used with DEVELOPER=1 to catch this undesired construct already when contributors build Git on their own machines. Unfortunately, however, there seems to be no compiler option that would catch only this particular construct without choking on many other things, e.g. while a later compiler with '-std=c90' and/or '-ansi' does catch this construct, it can't build Git because of several screenfulls of other errors. Add the 'linux-gcc-4.8' job to Travis CI, in order to build Git with GCC 4.8, and thus to timely catch any 'for' loop initial declarations. To catch those it's sufficient to only build Git with GCC 4.8, so don't run the test suite in this job, because 'make test' takes rather long [2], and it's already run five times in other jobs, so we wouldn't get our time's worth. [1] The Azure Pipelines builds have been using Ubuntu 16.04 images from the start, so I belive they never caught 'for' loop initial declarations. [2] On Travis CI 'make test' alone would take about 9 minutes in this new job (without running httpd, Subversion, and P4 tests). For comparison, starting the job and building Git with GCC 4.8 takes only about 2 minutes. Signed-off-by: SZEDER Gábor <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b697d92 commit fb9d743

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ matrix:
2121
compiler:
2222
addons:
2323
before_install:
24+
- env: jobname=linux-gcc-4.8
25+
os: linux
26+
dist: trusty
27+
compiler:
2428
- env: jobname=Linux32
2529
os: linux
2630
compiler:

ci/run-build-and-tests.sh

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,26 @@ windows*) cmd //c mklink //j t\\.prove "$(cygpath -aw "$cache_dir/.prove")";;
1111
esac
1212

1313
make
14-
make test
15-
if test "$jobname" = "linux-gcc"
16-
then
14+
case "$jobname" in
15+
linux-gcc)
16+
make test
1717
export GIT_TEST_SPLIT_INDEX=yes
1818
export GIT_TEST_FULL_IN_PACK_ARRAY=true
1919
export GIT_TEST_OE_SIZE=10
2020
export GIT_TEST_OE_DELTA_SIZE=5
2121
export GIT_TEST_COMMIT_GRAPH=1
2222
export GIT_TEST_MULTI_PACK_INDEX=1
2323
make test
24-
fi
24+
;;
25+
linux-gcc-4.8)
26+
# Don't run the tests; we only care about whether Git can be
27+
# built with GCC 4.8, as it errors out on some undesired (C99)
28+
# constructs that newer compilers seem to quietly accept.
29+
;;
30+
*)
31+
make test
32+
;;
33+
esac
2534

2635
check_unignored_build_artifacts
2736

0 commit comments

Comments
 (0)