diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b1794b34..2c70849f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,9 +3,8 @@ # to speed up compilation. stages: - - bootstrap - - test - - deploy-test + - test-from-git + - test-from-tarball - deploy cache: @@ -25,7 +24,7 @@ after_script: # somehow after_script loses environment - export CCACHE_BASEDIR=${PWD} - export CCACHE_DIR=${PWD}/cache - - if which ccache >/dev/null; then ccache -s; fi + - if type -p ccache >/dev/null; then ccache -s; fi variables: BUILD_IMAGES_PROJECT: gnuwget/build-images @@ -40,49 +39,22 @@ variables: GET_SOURCES_ATTEMPTS: "3" GIT_DEPTH: "5" CONFIGURE_BASE_FLAGS: --enable-assert --cache-file cache/config.cache - CFLAGS_DEFAULT: -O2 -g -ggdb3 - - -# Debian Builds - -Debian-Testing: - stage: bootstrap - image: $CI_BASE_PATH/debian:testing-bootstrap - script: - - export CFLAGS=$CFLAGS_DEFAULT - - ./bootstrap --skip-po && touch .manywarnings - tags: - - shared - - linux - except: - - coverity-scan@gnuwget/wget - artifacts: - expire_in: 2 weeks - when: on_failure - paths: - - ./*.log - artifacts: - expire_in: 2 weeks - when: on_success - paths: - - ./ - exclude: - - .git/ - - .gitmodules - - gnulib/ - - cache - - cache/* - - cache/** + CFLAGS_DEFAULT: -O0 -g -ggdb3 +# Create the tarball in a separate build directory (VPATH). Build-Tarball: - stage: test - image: $CI_BASE_PATH/debian:testing-bootstrap - variables: - GIT_STRATEGY: none + stage: test-from-git + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD script: - export CFLAGS=$CFLAGS_DEFAULT + - ./bootstrap + - autoreconf -fi - mkdir vpath && cd vpath - - ../configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache --without-ssl + - ../configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache + --without-ssl --enable-ipv6 --without-zlib --without-libiconv-prefix + --disable-iri --disable-ntlm --disable-pcre --without-libpsl --without-libuuid + --without-libintl-prefix + - make -j$(nproc) - make -j$(nproc) syntax-check - make -j$(nproc) dist - mv wget-*.gz .. @@ -91,9 +63,6 @@ Build-Tarball: - linux except: - coverity-scan@gnuwget/wget - dependencies: - - Debian-Testing - needs: ["Debian-Testing"] artifacts: expire_in: 2 weeks when: on_failure @@ -110,12 +79,14 @@ Build-Tarball: - wget-*.gz Valgrind: - stage: test + stage: test-from-tarball image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD variables: GIT_STRATEGY: none script: - export CFLAGS=$CFLAGS_DEFAULT + - tar xvf wget-*.gz + - cd wget-*/ - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache - make check-valgrind tags: @@ -124,8 +95,8 @@ Valgrind: except: - coverity-scan@gnuwget/wget dependencies: - - Debian-Testing - needs: ["Debian-Testing"] + - Build-Tarball + needs: ["Build-Tarball"] artifacts: expire_in: 2 weeks when: on_failure @@ -136,7 +107,7 @@ Valgrind: - wget-*/testenv/*.log Minimal: - stage: deploy-test + stage: test-from-tarball image: $CI_BASE_PATH/debian:testing-minimal variables: GIT_STRATEGY: none @@ -167,7 +138,7 @@ Minimal: - wget-*/testenv/*.log Debian-OldStable: - stage: deploy-test + stage: test-from-tarball image: $CI_BASE_PATH/debian:oldstable variables: GIT_STRATEGY: none @@ -178,14 +149,14 @@ Debian-OldStable: - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache - make - make -j$(nproc) check - dependencies: - - Build-Tarball - needs: ["Build-Tarball"] tags: - shared - linux except: - coverity-scan@gnuwget/wget + dependencies: + - Build-Tarball + needs: ["Build-Tarball"] artifacts: expire_in: 2 weeks when: on_failure @@ -196,7 +167,7 @@ Debian-OldStable: - wget-*/testenv/*.log Debian-Stable: - stage: deploy-test + stage: test-from-tarball image: $CI_BASE_PATH/debian:stable variables: GIT_STRATEGY: none @@ -205,15 +176,14 @@ Debian-Stable: - tar xvf wget-*.gz - cd wget-*/ - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache - - make - make -j$(nproc) check - dependencies: - - Build-Tarball tags: - shared - linux except: - coverity-scan@gnuwget/wget + dependencies: + - Build-Tarball needs: ["Build-Tarball"] artifacts: expire_in: 2 weeks @@ -225,7 +195,7 @@ Debian-Stable: - wget-*/testenv/*.log CentOS-OldLTS: - stage: deploy-test + stage: test-from-tarball image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$CENTOS_OLDLTS_BUILD variables: GIT_STRATEGY: none @@ -234,17 +204,15 @@ CentOS-OldLTS: - tar xvf wget-*.gz - cd wget-*/ - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache - - make + - make -j$(nproc) - make -j$(nproc) check - dependencies: - - Build-Tarball tags: - shared - linux except: - coverity-scan@gnuwget/wget - # The test suite is currently broken, so a temporary allowance - allow_failure: true + dependencies: + - Build-Tarball needs: ["Build-Tarball"] artifacts: expire_in: 2 weeks @@ -254,26 +222,31 @@ CentOS-OldLTS: - wget-*/fuzz/*.log - wget-*/tests/*.log - wget-*/testenv/*.log + # The test suite is currently broken, so a temporary allowance + allow_failure: true TLS/OpenSSL: - stage: test + stage: test-from-tarball image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD variables: GIT_STRATEGY: none script: + - export CFLAGS=$CFLAGS_DEFAULT + - tar xvf wget-*.gz + - cd wget-*/ - echo "127.0.0.1 wgettestingserver" >>/etc/hosts - cat /etc/hosts - - ./configure $CONFIGURE_BASE_FLAGS --with-ssl=openssl - - make -j$(nproc) distcheck - - make check-valgrind + - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache --with-ssl=openssl + - make -j$(nproc) + - make -j$(nproc) check-valgrind tags: - shared - linux except: - coverity-scan@gnuwget/wget dependencies: - - Debian-Testing - needs: ["Debian-Testing"] + - Build-Tarball + needs: ["Build-Tarball"] artifacts: expire_in: 2 weeks when: on_failure @@ -284,24 +257,27 @@ TLS/OpenSSL: - testenv/*.log TLS/GnuTLS: - stage: test + stage: test-from-tarball image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD variables: GIT_STRATEGY: none script: + - export CFLAGS=$CFLAGS_DEFAULT + - tar xvf wget-*.gz + - cd wget-*/ - echo "127.0.0.1 wgettestingserver" >>/etc/hosts - cat /etc/hosts - - ./configure $CONFIGURE_BASE_FLAGS --with-ssl=gnutls - - make -j$(nproc) distcheck - - make check-valgrind + - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache --with-ssl=gnutls + - make -j$(nproc) + - make -j$(nproc) check-valgrind tags: - shared - linux except: - coverity-scan@gnuwget/wget dependencies: - - Debian-Testing - needs: ["Debian-Testing"] + - Build-Tarball + needs: ["Build-Tarball"] artifacts: expire_in: 2 weeks when: on_failure @@ -311,20 +287,23 @@ TLS/GnuTLS: - tests/*.log - testenv/*.log - Sanitizers: - stage: test + stage: test-from-tarball image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD variables: GIT_STRATEGY: none script: + - export CFLAGS=$CFLAGS_DEFAULT + - tar xvf wget-*.gz + - cd wget-*/ # - export CFLAGS="$CFLAGS_DEFAULT -Werror" - export CFLAGS="$CFLAGS_DEFAULT" - export CC="ccache clang" - export UBSAN_OPTIONS=print_stacktrace=1 - export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-8/bin/llvm-symbolizer # - export LSAN_OPTIONS=suppressions="$PWD/tests/clang-asan-suppressions" - - ./configure $CONFIGURE_BASE_FLAGS --enable-fsanitize-asan --enable-fsanitize-ubsan + - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache + --enable-fsanitize-asan --enable-fsanitize-ubsan - make -j$(nproc) check tags: - shared @@ -332,8 +311,8 @@ Sanitizers: except: - coverity-scan@gnuwget/wget dependencies: - - Debian-Testing - needs: ["Debian-Testing"] + - Build-Tarball + needs: ["Build-Tarball"] artifacts: expire_in: 2 weeks when: on_failure @@ -343,17 +322,16 @@ Sanitizers: - tests/*.log - testenv/*.log - -# Maybe we should run scan-build on a tarball build? Scan-Build: - stage: test + stage: test-from-tarball image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD variables: GIT_STRATEGY: none script: - export CFLAGS=$CFLAGS_DEFAULT - - rm .manywarnings - - scan-build ./configure $CONFIGURE_BASE_FLAGS + - tar xvf wget-*.gz + - cd wget-*/ + - scan-build ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache - make -C lib -j$(nproc) - scan-build -v -enable-checker nullability --keep-empty --status-bugs -o scan-build make -j$(nproc) tags: @@ -362,51 +340,97 @@ Scan-Build: except: - tags - coverity-scan@gnuwget/wget - allow_failure: true dependencies: - - Debian-Testing - needs: ["Debian-Testing"] + - Build-Tarball + needs: ["Build-Tarball"] artifacts: - when: always + expire_in: 2 weeks + when: on_failure paths: - - scan-build + - wget-*/scan-build/* + # There currently is a false positive that needs to be suppressed. + allow_failure: true CoverageReports: - stage: test + stage: test-from-tarball image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_TESTING_BUILD variables: GIT_STRATEGY: none script: - - export CFLAGS="$CFLAGS_DEFAULT" - - ./configure $CONFIGURE_BASE_FLAGS + - export CFLAGS=$CFLAGS_DEFAULT + - tar xvf wget-*.gz + - cd wget-*/ + - ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache - make -j$(nproc) check-coverage - mv lcov test-coverage - make -C doc html - make -j$(nproc) fuzz-coverage - mv lcov fuzz-coverage - make dist - - mv wget-*.gz wget-latest.tar.gz tags: - shared - linux dependencies: - - Debian-Testing - needs: ["Debian-Testing"] + - Build-Tarball + needs: ["Build-Tarball"] artifacts: when: on_success paths: - - wget-latest.tar.gz - test-coverage/ - fuzz-coverage/ only: - master +MinGW64: + stage: test-from-tarball + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD + variables: + GIT_STRATEGY: none + script: + - export CFLAGS=$CFLAGS_DEFAULT + - tar xvf wget-*.gz + - cd wget-*/ + - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc + - echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register + - export CC="ccache $PREFIX-gcc" + - export GCCLIB=$(dirname $(find /usr/lib/gcc/$PREFIX -name libgcc_s_seh-1.dll|grep posix)) + - export WINEPATH="$WINEPATH;/usr/$PREFIX/bin;/usr/$PREFIX/lib;$PWD/libwget/.libs;$GCCLIB" + - echo "WINEPATH=$WINEPATH" + - LIBS="-ldl -lpsapi" ./configure $CONFIGURE_BASE_FLAGS --cache-file ../cache/config.cache + --build=x86_64-pc-linux-gnu --host=$PREFIX --enable-shared + - make -j$(nproc) + - cp -p src/wget.exe src/wget + - make check -j$(nproc) LOG_COMPILER=wine + tags: + - shared + - linux + except: + - tags + - coverity-scan@gnuwget/wget + dependencies: + - Build-Tarball + needs: ["Build-Tarball"] + artifacts: + expire_in: 2 weeks + when: on_failure + paths: + - wget-*/./config.h + - wget-*/./*.log + - wget-*/fuzz/*.log + - wget-*/tests/*.log + - wget-*/testenv/*.log + # The MinGW64 build breaks quite often, mostly due to dependencies. + allow_failure: true + +# Build from git should work on Arch. ArchLinux: - stage: test + stage: test-from-git image: $CI_BASE_PATH/archlinux script: - export CFLAGS="$CFLAGS_DEFAULT" - - ./bootstrap --skip-po && touch .manywarnings + - ./bootstrap + - autoreconf -fi + - touch .manywarnings - ./configure $CONFIGURE_BASE_FLAGS - make -j$(nproc) - make check -j$(nproc) @@ -425,12 +449,15 @@ ArchLinux: - tests/*.log - testenv/*.log +# Build from git should work on Fedora. Fedora: - stage: test + stage: test-from-git image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD script: - export CFLAGS="$CFLAGS_DEFAULT" - - ./bootstrap --skip-po && touch .manywarnings + - ./bootstrap + - autoreconf -fi + - touch .manywarnings - ./configure $CONFIGURE_BASE_FLAGS - make -j$(nproc) check tags: @@ -448,52 +475,13 @@ Fedora: - tests/*.log - testenv/*.log -MinGW64: - stage: deploy-test - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD - variables: - GIT_STRATEGY: none - script: - - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc && - echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register - - tar xvf wget-*.gz - - cd wget-*/ - - export CFLAGS=$CFLAGS_DEFAULT - - export CC="ccache $PREFIX-gcc" - - export GCCLIB=$(dirname $(find /usr/lib/gcc/$PREFIX -name libgcc_s_seh-1.dll|grep posix)) - - export WINEPATH="$WINEPATH;/usr/$PREFIX/bin;/usr/$PREFIX/lib;$PWD/libwget/.libs;$GCCLIB" - - echo "WINEPATH=$WINEPATH" - - LIBS="-ldl -lpsapi" ./configure $CONFIGURE_BASE_FLAGS --build=x86_64-pc-linux-gnu --host=$PREFIX --enable-shared - - make -j$(nproc) - - cp -p src/wget.exe src/wget - - make check -j$(nproc) LOG_COMPILER=wine - dependencies: - - Build-Tarball - needs: ["Build-Tarball"] - tags: - - shared - - linux - except: - - tags - - coverity-scan@gnuwget/wget - allow_failure: true - artifacts: - expire_in: 2 weeks - when: on_failure - paths: - - wget-*/./config.h - - wget-*/./*.log - - wget-*/fuzz/*.log - - wget-*/tests/*.log - - wget-*/testenv/*.log - pages: stage: deploy script: - mkdir -p public - rm -rf public/reference public/coverage public/fuzz-coverage - - mv wget-latest.tar.gz public/ + - mv wget-*.gz public/wget-latest.tar.gz - mv test-coverage public/coverage - mv fuzz-coverage public/fuzz-coverage - mv scan-build public/scan-build diff --git a/configure.ac b/configure.ac index 05058e12..03fbe10f 100644 --- a/configure.ac +++ b/configure.ac @@ -55,8 +55,6 @@ AM_INIT_AUTOMAKE([subdir-objects dist-lzip]) AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC -AC_PROG_CC_C99 -AM_PROG_CC_C_O dnl dnl Get canonical host