diff options
author | Ivan Komissarov <ABBAPOH@gmail.com> | 2019-11-24 22:17:15 +0100 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2019-12-05 15:51:00 +0000 |
commit | 5b124352feb959f0e4370bdeaa4b6b95d068610d (patch) | |
tree | 2ed6f4224982b5786ebce8e8e30b22828c6c0974 | |
parent | e7ee801c5a7b9b46115c708b906875ad887566cf (diff) |
Enable clang-tidy job on Travis
This runs predefined clang-tidy checks on the QBS sources, excluding
examples and tests
Most checks are displayed as warings, however, some checks are treated
as errors to avoid adding regressions in the new code
clang-analyzer-* checks are not enabled due to performance reasons
(otherwise, Travis job hits 50 min)
Change-Id: I686003d2526a11d90fc74c88104b4357d67620d1
Reviewed-by: Richard Weickelt <richard@weickelt.de>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r-- | .clang-tidy | 4 | ||||
-rw-r--r-- | .travis.yml | 9 | ||||
-rwxr-xr-x | scripts/run-analyzer.sh | 39 |
3 files changed, 46 insertions, 6 deletions
diff --git a/.clang-tidy b/.clang-tidy index 7af193cc6..a261f4b59 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,6 +1,6 @@ --- -Checks: 'clang-diagnostic-*,clang-analyzer-*,-*,bugprone-*,clang-analyzer-*,cppcoreguidelines-c-copy-assignment-signature,cppcoreguidelines-interfaces-global-init,cppcoreguidelines-no-malloc,cppcoreguidelines-pro-bounds-constant-array-index,cppcoreguidelines-pro-bounds-pointer-arithmetic,cppcoreguidelines-pro-type-const-cast,cppcoreguidelines-pro-type-cstyle-cast,cppcoreguidelines-pro-type-member-init,cppcoreguidelines-pro-type-union-access,cppcoreguidelines-slicing,cppcoreguidelines-special-member-functions,fuchsia-virtual-inheritance,google-build-explicit-make-pair,google-build-namespaces,google-global-names-in-headers,google-objc-*,google-readability-casting,google-readability-function-size,google-readability-namespace-comments,google-readability-todo,google-runtime-int,google-runtime-operator,misc-definitions-in-headers,misc-misplaced-const,misc-new-delete-overloads,misc-non-copyable-objects,misc-redundant-expression,misc-static-assert,misc-unconventional-assign-operator,misc-uniqueptr-reset-release,misc-unused-*,modernize-avoid-bind,modernize-deprecated-headers,modernize-loop-convert,modernize-make-*,modernize-pass-by-value,modernize-raw-string-literal,modernize-redundant-void-arg,modernize-replace-*,modernize-return-braced-init-list,modernize-shrink-to-fit,modernize-unary-static-assert,modernize-use-auto,modernize-use-bool-literals,modernize-use-emplace,modernize-use-equals-*,modernize-use-noexcept,modernize-use-nullptr,modernize-use-override,modernize-use-transparent-functors,modernize-use-using,performance-*,readability-avoid-const-params-in-decls,readability-container-size-empty,readability-delete-null-pointer,readability-deleted-default,readability-function-size,readability-identifier-naming,readability-inconsistent-declaration-parameter-name,readability-misleading-indentation,readability-misplaced-array-index,readability-non-const-parameter,readability-redundant-*,readability-simplify-boolean-expr,readability-static-definition-in-anonymous-namespace,readability-uniqueptr-delete-release' -WarningsAsErrors: '' +Checks: '-*,bugprone-*,cppcoreguidelines-c-copy-assignment-signature,cppcoreguidelines-interfaces-global-init,cppcoreguidelines-no-malloc,cppcoreguidelines-pro-bounds-constant-array-index,cppcoreguidelines-pro-type-const-cast,cppcoreguidelines-pro-type-cstyle-cast,cppcoreguidelines-pro-type-member-init,cppcoreguidelines-pro-type-union-access,cppcoreguidelines-slicing,cppcoreguidelines-special-member-functions,fuchsia-virtual-inheritance,google-build-explicit-make-pair,google-build-namespaces,google-global-names-in-headers,google-objc-*,google-readability-casting,google-readability-function-size,google-readability-namespace-comments,google-runtime-int,google-runtime-operator,misc-definitions-in-headers,misc-misplaced-const,misc-new-delete-overloads,misc-non-copyable-objects,misc-redundant-expression,misc-static-assert,misc-throw-by-value-catch-by-reference,misc-unconventional-assign-operator,misc-uniqueptr-reset-release,misc-unused-*,modernize-avoid-bind,modernize-deprecated-headers,modernize-loop-convert,modernize-make-*,modernize-pass-by-value,modernize-redundant-void-arg,modernize-replace-*,modernize-return-braced-init-list,modernize-shrink-to-fit,modernize-unary-static-assert,modernize-use-auto,modernize-use-bool-literals,modernize-use-emplace,modernize-use-equals-*,modernize-use-noexcept,modernize-use-nullptr,modernize-use-override,modernize-use-transparent-functors,modernize-use-using,performance-*,readability-avoid-const-params-in-decls,readability-container-size-empty,readability-delete-null-pointer,readability-deleted-default,readability-function-size,readability-identifier-naming,readability-misleading-indentation,readability-misplaced-array-index,readability-non-const-parameter,readability-redundant-*,readability-simplify-boolean-expr,readability-static-definition-in-anonymous-namespace,readability-uniqueptr-delete-release' +WarningsAsErrors: 'bugprone-*,-bugprone-suspicious-enum-usage,-bugprone-macro-parentheses,-bugprone-narrowing-conversions,modernize-make-unique,modernize-use-emplace,modernize-use-equals-default,modernize-use-override' HeaderFilterRegex: '' AnalyzeTemporaryDtors: false CheckOptions: diff --git a/.travis.yml b/.travis.yml index c0a64367a..4917087a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,6 +50,15 @@ jobs: script: - docker-compose run bionic qbs build ${BUILD_OPTIONS} + - <<: *build-on-bionic + name: With Qbs on Ubuntu bionic (linux_clang64 & clang_tidy) + env: + BUILD_OPTIONS="profile:qt-clang_64 modules.cpp.compilerWrapper:ccache" + services: + - docker + script: + - docker-compose run --rm bionic scripts/run-analyzer.sh + - &build-on-macos stage: Build Qbs and and run autotests name: With Qbs on macOS (xcode 10.3) diff --git a/scripts/run-analyzer.sh b/scripts/run-analyzer.sh index e3743f631..7f437ac04 100755 --- a/scripts/run-analyzer.sh +++ b/scripts/run-analyzer.sh @@ -38,8 +38,6 @@ ## ############################################################################# -set -e - LLVM_INSTALL_DIR=${LLVM_INSTALL_DIR:-""} # on Debian, it might be necessary to setup which version of clang-tidy and run-clang-tidy.py @@ -59,10 +57,22 @@ if [ -z "$RUN_CLANG_TIDY" ] || [ -z "$CLANG_TIDY" ]; then fi fi +NPROC=`which nproc` +SYSCTL=`which sysctl` +CPU_COUNT=2 +if [ ! -z "$NPROC" ]; then # Linux + CPU_COUNT=`$NPROC --all` +elif [ ! -z "$SYSCTL" ]; then # macOS + CPU_COUNT=`$SYSCTL -n hw.ncpu` +fi + BUILD_OPTIONS="\ ${QBS_BUILD_PROFILE:+profile:${QBS_BUILD_PROFILE}} \ modules.qbsbuildconfig.enableProjectFileUpdates:true \ - modules.qbsbuildconfig.enableUnitTests:true \ + modules.cpp.treatWarningsAsErrors:true \ + modules.qbs.buildVariant:release \ + project.withTests:false \ + ${BUILD_OPTIONS} \ config:analyzer " @@ -73,8 +83,29 @@ if [ ! -f "$QBS_SRC_DIR/qbs.qbs" ]; then exit 1 fi +set -e + qbs resolve -f "$QBS_SRC_DIR/qbs.qbs" $BUILD_OPTIONS qbs build -f "$QBS_SRC_DIR/qbs.qbs" $BUILD_OPTIONS qbs generate -g clangdb -f "$QBS_SRC_DIR/qbs.qbs" $BUILD_OPTIONS -"$RUN_CLANG_TIDY" -p analyzer -clang-tidy-binary "$CLANG_TIDY" -header-filter=".*qbs.*\.h" +SCRIPT=" +import json +import os +import sys + +file = sys.argv[1] +blacklist = ['json.cpp'] +patched_db = [] +with open(file, 'r') as f: + db = json.load(f) + for item in db: + if os.path.basename(item['file']) not in blacklist: + patched_db.append(item) + +with open(file, 'w') as f: + f.write(json.dumps(patched_db, indent=2)) +" +python -c "${SCRIPT}" analyzer/compile_commands.json + +"$RUN_CLANG_TIDY" -p analyzer -clang-tidy-binary "$CLANG_TIDY" -j $CPU_COUNT -header-filter=".*qbs.*\.h" -quiet |