Merge topic 'gitlab-ci-lint'

4318e8ed35 gitlab-ci: add iwyu job
0866b9253b gitlab-ci: add initial clang-tidy build
0a5bcf97b9 gitlab-ci: add scripts for use by CI
960158b90d ci: add scripts to download build tools
6af91c7c4d ci: add an image for Debian 10
68903ae238 ci: add a Docker container for building CMake
3ac24a8a6e cmFunctionBlocker: include missing header
b745b8fd36 IWYU: mark includes needed for assert statements as needed
...

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4643
This commit is contained in:
Brad King
2020-04-30 13:59:48 +00:00
committed by Kitware Robot
36 changed files with 402 additions and 16 deletions

97
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,97 @@
.only_settings: &only_settings
- merge_requests
- branches@cmake/cmake
- tags@cmake/cmake
.fedora31: &fedora31
image: "kitware/cmake:ci-fedora31-x86_64-2020-04-27"
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR/gitlab-kitware-cmake ci"
.debian10: &debian10
image: "kitware/cmake:ci-debian10-x86_64-2020-04-27"
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR/gitlab-kitware-cmake ci"
.debian10_iwyu: &debian10_iwyu
extends: .debian10
variables:
CMAKE_CONFIGURATION: debian10_iwyu
CTEST_NO_WARNINGS_ALLOWED: 1
.fedora31_tidy: &fedora31_tidy
extends: .fedora31
variables:
CMAKE_CONFIGURATION: fedora31_tidy
CTEST_NO_WARNINGS_ALLOWED: 1
before_script:
- .gitlab/ci/cmake.sh
- .gitlab/ci/ninja.sh
- export PATH=$PWD/.gitlab:$PWD/.gitlab/cmake/bin:$PATH
- cmake --version
- ninja --version
.cmake_build_unix: &cmake_build_unix
stage: build
only: *only_settings
tags:
- build
- docker
- linux
script:
- .gitlab/ci/sccache.sh
- sccache --start-server
- sccache --show-stats
- "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake"
- "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake"
- sccache --show-stats
interruptible: true
stages:
- build
- test
build:debian10-iwyu:
<<:
- *debian10_iwyu
stage: build
only: *only_settings
tags:
- build
- docker
- linux
script:
- .gitlab/ci/sccache.sh
- sccache --start-server
- sccache --show-stats
- "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake"
- "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake"
- sccache --show-stats
interruptible: true
build:fedora31-tidy:
<<:
- *fedora31_tidy
stage: build
only: *only_settings
tags:
- build
- docker
- linux
script:
- .gitlab/ci/sccache.sh
- sccache --start-server
- sccache --show-stats
- "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake"
- "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake"
- sccache --show-stats
interruptible: true

16
.gitlab/ci/cmake.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/sh
set -e
readonly version="3.17.2"
readonly sha256sum="dc57f3cc448ca67fc8776b4ad4c22b087b9c6a8e459938b9622b8c7f4ef6b21e"
readonly filename="cmake-$version-Linux-x86_64"
readonly tarball="$filename.tar.gz"
cd .gitlab
echo "$sha256sum $tarball" > cmake.sha256sum
curl -OL "https://github.com/Kitware/CMake/releases/download/v$version/$tarball"
sha256sum --check cmake.sha256sum
tar xf "$tarball"
mv "$filename" cmake

View File

@@ -0,0 +1,3 @@
set(CTEST_USE_LAUNCHERS "ON" CACHE STRING "")
include("${CMAKE_CURRENT_LIST_DIR}/configure_sccache.cmake")

View File

@@ -0,0 +1,4 @@
set(CMake_RUN_IWYU ON CACHE BOOL "")
set(IWYU_COMMAND "/usr/bin/include-what-you-use-6.0" CACHE FILEPATH "")
include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")

View File

@@ -0,0 +1,3 @@
set(CMake_RUN_CLANG_TIDY ON CACHE BOOL "")
include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")

View File

@@ -0,0 +1,2 @@
set(CMAKE_C_COMPILER_LAUNCHER "sccache" CACHE STRING "")
set(CMAKE_CXX_COMPILER_LAUNCHER "sccache" CACHE STRING "")

View File

@@ -0,0 +1,30 @@
cmake_minimum_required(VERSION 3.8)
include("${CMAKE_CURRENT_LIST_DIR}/gitlab_ci.cmake")
# Read the files from the build directory.
ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}")
# Pick up from where the configure left off.
ctest_start(APPEND)
if (CTEST_CMAKE_GENERATOR STREQUAL "Unix Makefiles")
include(ProcessorCount)
ProcessorCount(nproc)
set(CTEST_BUILD_FLAGS "-j${nproc}")
endif ()
ctest_build(
NUMBER_WARNINGS num_warnings
RETURN_VALUE build_result)
ctest_submit(PARTS Build)
if (build_result)
message(FATAL_ERROR
"Failed to build")
endif ()
if ("$ENV{CTEST_NO_WARNINGS_ALLOWED}" AND num_warnings GREATER 0)
message(FATAL_ERROR
"Found ${num_warnings} warnings (treating as fatal).")
endif ()

View File

@@ -0,0 +1,32 @@
cmake_minimum_required(VERSION 3.8)
include("${CMAKE_CURRENT_LIST_DIR}/gitlab_ci.cmake")
set(cmake_args
-C "${CMAKE_CURRENT_LIST_DIR}/configure_$ENV{CMAKE_CONFIGURATION}.cmake")
# Create an entry in CDash.
ctest_start(Experimental TRACK "${ctest_track}")
# Gather update information.
find_package(Git)
set(CTEST_UPDATE_VERSION_ONLY ON)
set(CTEST_UPDATE_COMMAND "${GIT_EXECUTABLE}")
ctest_update()
# Configure the project.
ctest_configure(
OPTIONS "${cmake_args}"
RETURN_VALUE configure_result)
# Read the files from the build directory.
ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}")
# We can now submit because we've configured. This is a cmb-superbuild-ism.
ctest_submit(PARTS Update)
ctest_submit(PARTS Configure)
if (configure_result)
message(FATAL_ERROR
"Failed to configure")
endif ()

View File

@@ -0,0 +1,6 @@
set(test_exclusions
)
string(REPLACE ";" "|" test_exclusions "${test_exclusions}")
if (test_exclusions)
set(test_exclusions "(${test_exclusions})")
endif ()

View File

@@ -0,0 +1,24 @@
cmake_minimum_required(VERSION 3.8)
include("${CMAKE_CURRENT_LIST_DIR}/gitlab_ci.cmake")
# Read the files from the build directory.
ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}")
# Pick up from where the configure left off.
ctest_start(APPEND)
include(ProcessorCount)
ProcessorCount(nproc)
include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake")
ctest_test(
PARALLEL_LEVEL "${nproc}"
RETURN_VALUE test_result
EXCLUDE "${test_exclusions}")
ctest_submit(PARTS Test)
if (test_result)
message(FATAL_ERROR
"Failed to test")
endif ()

View File

@@ -0,0 +1,15 @@
FROM debian:10 as iwyu-build
MAINTAINER Ben Boeckel <ben.boeckel@kitware.com>
COPY install_iwyu.sh /root/install_iwyu.sh
RUN sh /root/install_iwyu.sh
FROM debian:10
MAINTAINER Ben Boeckel <ben.boeckel@kitware.com>
COPY install_deps.sh /root/install_deps.sh
RUN sh /root/install_deps.sh
COPY --from=iwyu-build /root/iwyu.tar.gz /root/iwyu.tar.gz
RUN tar -C / -xf /root/iwyu.tar.gz
RUN ln -s /usr/lib/llvm-6.0/bin/include-what-you-use /usr/bin/include-what-you-use-6.0

View File

@@ -0,0 +1,22 @@
#!/bin/sh
set -e
apt-get update
# Install build requirements.
apt-get install -y \
libssl-dev
# Install development tools.
apt-get install -y \
g++ \
curl \
git
# Install iwyu runtime deps.
apt-get install -y \
clang-6.0 \
libncurses6
apt-get clean

View File

@@ -0,0 +1,32 @@
#!/bin/sh
set -e
# Install development tools.
apt-get update
apt-get install -y \
clang-6.0 \
libclang-6.0-dev \
llvm-6.0-dev \
libz-dev \
g++ \
cmake \
ninja-build \
git
cd /root
git clone "https://github.com/include-what-you-use/include-what-you-use.git"
cd include-what-you-use
readonly llvm_version="$( clang-6.0 --version | head -n1 | cut -d' ' -f3 | cut -d. -f-2 )"
git checkout "clang_$llvm_version"
mkdir build
cd build
cmake -GNinja \
-DCMAKE_BUILD_TYPE=Release \
"-DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$llvm_version" \
"-DIWYU_LLVM_ROOT_PATH=/usr/lib/llvm-$llvm_version" \
..
ninja
DESTDIR=/root/iwyu-destdir ninja install
tar -C /root/iwyu-destdir -cf /root/iwyu.tar.gz .

View File

@@ -0,0 +1,5 @@
FROM fedora:31
MAINTAINER Ben Boeckel <ben.boeckel@kitware.com>
COPY install_deps.sh /root/install_deps.sh
RUN sh /root/install_deps.sh

View File

@@ -0,0 +1,13 @@
#!/bin/sh
# Install build requirements.
dnf install -y \
openssl-devel
# Install development tools.
dnf install -y \
clang-tools-extra \
gcc-c++ \
git-core
dnf clean all

View File

@@ -0,0 +1,46 @@
if (NOT DEFINED "ENV{GITLAB_CI}")
message(FATAL_ERROR
"This script assumes it is being run inside of GitLab-CI")
endif ()
# Set up the source and build paths.
set(CTEST_SOURCE_DIRECTORY "$ENV{CI_PROJECT_DIR}")
set(CTEST_BINARY_DIRECTORY "${CTEST_SOURCE_DIRECTORY}/build")
if ("$ENV{CMAKE_CONFIGURATION}" STREQUAL "")
message(FATAL_ERROR
"The CMAKE_CONFIGURATION environment variable is required to know what "
"cache initialization file to use.")
endif ()
# Set the build metadata.
set(CTEST_BUILD_NAME "$ENV{CI_PROJECT_NAME}-$ENV{CMAKE_CONFIGURATION}")
set(CTEST_SITE "gitlab-ci")
# Default to Release builds.
if (NOT "$ENV{CMAKE_BUILD_TYPE}" STREQUAL "")
set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_BUILD_TYPE}")
endif ()
if (NOT CTEST_BUILD_CONFIGURATION)
set(CTEST_BUILD_CONFIGURATION "Release")
endif ()
# Default to using Ninja.
if (NOT "$ENV{CMAKE_GENERATOR}" STREQUAL "")
set(CTEST_CMAKE_GENERATOR "$ENV{CMAKE_GENERATOR}")
endif ()
if (NOT CTEST_CMAKE_GENERATOR)
set(CTEST_CMAKE_GENERATOR "Ninja")
endif ()
# Determine the track to submit to.
set(ctest_track "Experimental")
if (NOT "$ENV{CI_MERGE_REQUEST_ID}" STREQUAL "")
set(ctest_track "merge-requests")
elseif ("$ENV{CI_PROJECT_PATH}" STREQUAL "cmb/smtk")
if ("$ENV{CI_COMMIT_REF_NAME}" STREQUAL "master")
set(ctest_track "master")
elseif ("$ENV{CI_COMMIT_REF_NAME}" STREQUAL "release")
set(ctest_track "release")
endif ()
endif ()

15
.gitlab/ci/ninja.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
set -e
readonly version="1.10.0"
readonly sha256sum="6566836ddf3d72ca06685b34814e0c6fa0f0943542d651d0dab3150f10307c82"
readonly filename="ninja-linux"
readonly tarball="$filename.zip"
cd .gitlab
echo "$sha256sum $tarball" > ninja.sha256sum
curl -OL "https://github.com/ninja-build/ninja/releases/download/v$version/$tarball"
sha256sum --check ninja.sha256sum
./cmake/bin/cmake -E tar xf "$tarball"

16
.gitlab/ci/sccache.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/sh
set -e
readonly version="0.2.12"
readonly sha256sum="26fd04c1273952cc2a0f359a71c8a1857137f0ee3634058b3f4a63b69fc8eb7f"
readonly filename="sccache-$version-x86_64-unknown-linux-musl"
readonly tarball="$filename.tar.gz"
cd .gitlab
echo "$sha256sum $tarball" > sccache.sha256sum
curl -OL "https://github.com/mozilla/sccache/releases/download/$version/$tarball"
sha256sum --check sccache.sha256sum
tar xf "$tarball"
mv "$filename/sccache" .

View File

@@ -2,7 +2,7 @@
file Copyright.txt or https://cmake.org/licensing for details. */
#include "cmCPackIFWCommon.h"
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <sstream>
#include <utility>
#include <vector>

View File

@@ -6,7 +6,7 @@
#include <cassert>
#include <chrono>
#include <cmath>
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <cstdlib>
#include <cstring>
#include <iomanip>

View File

@@ -3,7 +3,7 @@
#include "cmCTestRunTest.h"
#include <chrono>
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <cstdint>
#include <cstdio>
#include <cstring>

View File

@@ -5,7 +5,7 @@
#include <algorithm>
#include <chrono>
#include <cmath>
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <cstdio>
#include <cstdlib>
#include <cstring>

View File

@@ -64,7 +64,7 @@
*/
#include "bindexplib.h"
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <sstream>
#include <vector>

View File

@@ -3,7 +3,6 @@
#include "cmArgumentParser.h"
#include <algorithm>
#include <type_traits>
namespace ArgumentParser {

View File

@@ -4,7 +4,7 @@
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
// NOTE The declaration of `std::abs` has moved to `cmath` since C++17
// See https://en.cppreference.com/w/cpp/numeric/math/abs
// ALERT But IWYU used to lint `#include`s do not "understand"

View File

@@ -3,7 +3,9 @@
#include "cmFunctionBlocker.h"
#include <cassert>
#include <memory> // IWYU pragma: keep
#include <sstream>
#include <string> // IWYU pragma: keep
#include <utility>
#include "cmExecutionStatus.h"

View File

@@ -14,7 +14,7 @@
#include "cmGeneratedFileStream.h"
#include "cmGeneratorTarget.h"
#include "cmGlobalGhsMultiGenerator.h"
#include "cmLinkLineComputer.h"
#include "cmLinkLineComputer.h" // IWYU pragma: keep
#include "cmLocalGenerator.h"
#include "cmLocalGhsMultiGenerator.h"
#include "cmMakefile.h"

View File

@@ -18,7 +18,7 @@
#include "cmGeneratorExpression.h"
#include "cmGeneratorTarget.h"
#include "cmGlobalUnixMakefileGenerator3.h"
#include "cmLinkLineComputer.h"
#include "cmLinkLineComputer.h" // IWYU pragma: keep
#include "cmLocalCommonGenerator.h"
#include "cmLocalUnixMakefileGenerator3.h"
#include "cmMakefile.h"

View File

@@ -4,7 +4,7 @@
#include <algorithm>
#include <cerrno>
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <cstdio>
#include <cstdlib>

View File

@@ -4,7 +4,7 @@
#define cmUVProcessChain_h
#include <array>
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <cstdint>
#include <iosfwd>
#include <memory>

View File

@@ -6,7 +6,7 @@
#include "cmConfigure.h" // IWYU pragma: keep
#include <chrono>
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <ctime>
#include <ostream>
#include <stack>

View File

@@ -1,4 +1,4 @@
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <iostream>
#include <map>
#include <string>

View File

@@ -1,4 +1,4 @@
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <iostream>
#include <memory>
#include <string>

View File

@@ -1,7 +1,7 @@
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <cstring>
#include <iostream>
#include <iterator>

View File

@@ -1,6 +1,6 @@
#include <cassert>
#include <chrono>
#include <cstddef>
#include <cstddef> // IWYU pragma: keep
#include <cstdlib>
#include <iostream>
#include <map>

View File

@@ -27,6 +27,7 @@
{ include: [ "<bits/std_abs.h>", private, "<stdlib.h>", public ] },
{ include: [ "<bits/stdint-intn.h>", private, "<stdint.h>", public ] },
{ include: [ "<bits/stdint-uintn.h>", private, "<stdint.h>", public ] },
{ include: [ "<bits/string_view.tcc>", private, "<string_view>", public ] },
{ include: [ "<bits/time.h>", private, "<time.h>", public ] },
{ include: [ "<bits/types/clock_t.h>", private, "<time.h>", public ] },
{ include: [ "<bits/types/mbstate_t.h>", private, "<wchar.h>", public ] },
@@ -77,6 +78,7 @@
# Use '-Xiwyu -v7' to see the fully qualified names that need this.
# TODO: Can this be simplified with an @-expression?
#{ symbol: [ "@std::__decay_and_strip<.*>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<bool>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<char const (&)[1]>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<cmCommand *&>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<cmGeneratorTarget *&>::__type", private, "\"cmConfigure.h\"", public ] },
@@ -86,7 +88,9 @@
{ symbol: [ "std::__decay_and_strip<std::basic_string<char> &>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<const std::basic_string<char> &>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<cmFindPackageCommand::PathLabel &>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<cmGlobalNinjaGenerator::TargetAlias &>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<__gnu_cxx::__normal_iterator<const cmCTestTestHandler::cmCTestTestProperties *, std::vector<cmCTestTestHandler::cmCTestTestProperties, std::allocator<cmCTestTestHandler::cmCTestTestProperties> > > &>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__decay_and_strip<const __gnu_cxx::__normal_iterator<std::pair<cm::string_view, std::function<void (ArgumentParser::Instance &, void *)> > *, std::vector<std::pair<cm::string_view, std::function<void (ArgumentParser::Instance &, void *)> >, std::allocator<std::pair<cm::string_view, std::function<void (ArgumentParser::Instance &, void *)> > > > > &>::__type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__success_type<std::chrono::duration<double, std::ratio<1, 1> > >::type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::__success_type<std::chrono::duration<long, std::ratio<1, 1000000000> > >::type", private, "\"cmConfigure.h\"", public ] },
{ symbol: [ "std::enable_if<true, std::chrono::duration<long, std::ratio<1, 1> > >::type", private, "\"cmConfigure.h\"", public ] },