Skip to content
  • Gábor Szeder's avatar
    travis-ci: build with GCC 4.8 as well · fb9d7431
    Gábor Szeder authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    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: default avatarSZEDER Gábor <szeder.dev@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    fb9d7431