aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Komissarov <ABBAPOH@gmail.com>2019-11-24 22:17:15 +0100
committerIvan Komissarov <ABBAPOH@gmail.com>2019-12-05 15:51:00 +0000
commit5b124352feb959f0e4370bdeaa4b6b95d068610d (patch)
tree2ed6f4224982b5786ebce8e8e30b22828c6c0974
parente7ee801c5a7b9b46115c708b906875ad887566cf (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-tidy4
-rw-r--r--.travis.yml9
-rwxr-xr-xscripts/run-analyzer.sh39
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