Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 6D225200D13 for ; Sat, 30 Sep 2017 18:42:49 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 621CB1609D5; Sat, 30 Sep 2017 16:42:49 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 7D1B81609C2 for ; Sat, 30 Sep 2017 18:42:48 +0200 (CEST) Received: (qmail 6714 invoked by uid 500); 30 Sep 2017 16:42:47 -0000 Mailing-List: contact commits-help@arrow.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@arrow.apache.org Delivered-To: mailing list commits@arrow.apache.org Received: (qmail 6705 invoked by uid 99); 30 Sep 2017 16:42:47 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 30 Sep 2017 16:42:47 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id E961FF574A; Sat, 30 Sep 2017 16:42:46 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: wesm@apache.org To: commits@arrow.apache.org Message-Id: <34bd928d59924cc8ac7e7abbfa886cae@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: =?utf-8?q?arrow_git_commit=3A_ARROW-1626_Add_make_targets_to_run_t?= =?utf-8?q?he_inter-procedural_static_analys=E2=80=A6?= Date: Sat, 30 Sep 2017 16:42:46 +0000 (UTC) archived-at: Sat, 30 Sep 2017 16:42:49 -0000 Repository: arrow Updated Branches: refs/heads/master 796129b4f -> 4e0f799e7 ARROW-1626 Add make targets to run the inter-procedural static analys… …is tool called infer Author: Rene Sugar Closes #1149 from renesugar/infer and squashes the following commits: 8591b5ff [Rene Sugar] ARROW-1626 Add make targets to run the inter-procedural static analysis tool called infer Project: http://git-wip-us.apache.org/repos/asf/arrow/repo Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/4e0f799e Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/4e0f799e Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/4e0f799e Branch: refs/heads/master Commit: 4e0f799e72048587715cb50abdd8d239f3d46d13 Parents: 796129b Author: Rene Sugar Authored: Sat Sep 30 11:42:37 2017 -0500 Committer: Wes McKinney Committed: Sat Sep 30 11:42:37 2017 -0500 ---------------------------------------------------------------------- cpp/CMakeLists.txt | 21 +++++++++++++ cpp/build-support/run-infer.sh | 48 +++++++++++++++++++++++++++++ cpp/cmake_modules/FindInferTools.cmake | 45 +++++++++++++++++++++++++++ 3 files changed, 114 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/arrow/blob/4e0f799e/cpp/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index ad99970..d488646 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -56,6 +56,14 @@ if ("$ENV{CMAKE_EXPORT_COMPILE_COMMANDS}" STREQUAL "1" OR CLANG_TIDY_FOUND) set(CMAKE_EXPORT_COMPILE_COMMANDS 1) endif() +find_package(InferTools) +if ("$ENV{CMAKE_EXPORT_COMPILE_COMMANDS}" STREQUAL "1" OR INFER_FOUND) + # Generate a Clang compile_commands.json "compilation database" file for use + # with various development tools, such as Vim's YouCompleteMe plugin. + # See http://clang.llvm.org/docs/JSONCompilationDatabase.html + set(CMAKE_EXPORT_COMPILE_COMMANDS 1) +endif() + find_program(CCACHE_FOUND ccache) if(CCACHE_FOUND) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND}) @@ -597,6 +605,19 @@ if (${CLANG_TIDY_FOUND}) endif() ############################################################ +# "make infer" target +############################################################ + +if (${INFER_FOUND}) + # runs infer capture + add_custom_target(infer ${BUILD_SUPPORT_DIR}/run-infer.sh ${INFER_BIN} ${CMAKE_BINARY_DIR}/compile_commands.json 1) + # runs infer analyze + add_custom_target(infer-analyze ${BUILD_SUPPORT_DIR}/run-infer.sh ${INFER_BIN} ${CMAKE_BINARY_DIR}/compile_commands.json 2) + # runs infer report + add_custom_target(infer-report ${BUILD_SUPPORT_DIR}/run-infer.sh ${INFER_BIN} ${CMAKE_BINARY_DIR}/compile_commands.json 3) +endif() + +############################################################ # "make iwyu" target ############################################################ if(UNIX) http://git-wip-us.apache.org/repos/asf/arrow/blob/4e0f799e/cpp/build-support/run-infer.sh ---------------------------------------------------------------------- diff --git a/cpp/build-support/run-infer.sh b/cpp/build-support/run-infer.sh new file mode 100755 index 0000000..823685a --- /dev/null +++ b/cpp/build-support/run-infer.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# Runs infer in the given directory +# Arguments: +# $1 - Path to the infer binary +# $2 - Path to the compile_commands.json to use +# $3 - Apply infer step (1=capture, 2=analyze, 3=report) +# +INFER=$1 +shift +COMPILE_COMMANDS=$1 +shift +APPLY_STEP=$1 +shift + +if [ "$APPLY_STEP" == "1" ]; then + $INFER capture --compilation-database $COMPILE_COMMANDS + echo "" + echo "Run 'make infer-analyze' next." +elif [ "$APPLY_STEP" == "2" ]; then + # infer's analyze step can take a very long time to complete + $INFER analyze + echo "" + echo "Run 'make infer-report' next." + echo "See: http://fbinfer.com/docs/steps-for-ci.html" +elif [ "$APPLY_STEP" == "3" ]; then + $INFER report --issues-csv ./infer-out/report.csv 1> /dev/null + $INFER report --issues-txt ./infer-out/report.txt 1> /dev/null + $INFER report --issues-json ./infer-out/report.json 1> /dev/null + echo "" + echo "Reports (report.txt, report.csv, report.json) can be found in the infer-out subdirectory." +else + echo "" + echo "See: http://fbinfer.com/docs/steps-for-ci.html" +fi http://git-wip-us.apache.org/repos/asf/arrow/blob/4e0f799e/cpp/cmake_modules/FindInferTools.cmake ---------------------------------------------------------------------- diff --git a/cpp/cmake_modules/FindInferTools.cmake b/cpp/cmake_modules/FindInferTools.cmake new file mode 100644 index 0000000..00c6709 --- /dev/null +++ b/cpp/cmake_modules/FindInferTools.cmake @@ -0,0 +1,45 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Tries to find the infer module +# +# Usage of this module as follows: +# +# find_package(InferTools) +# +# Variables used by this module, they can change the default behaviour and need +# to be set before calling find_package: +# +# InferTools_PATH - +# When set, this path is inspected instead of standard library binary locations +# to find infer +# +# This module defines +# INFER_BIN, The path to the clang tidy binary +# INFER_FOUND, Whether clang tidy was found + +find_program(INFER_BIN + NAMES infer + PATHS ${InferTools_PATH} $ENV{INFER_TOOLS_PATH} /usr/local/bin /usr/bin + /usr/local/homebrew/bin + /opt/local/bin + NO_DEFAULT_PATH +) + +if ( "${INFER_BIN}" STREQUAL "INFER_BIN-NOTFOUND" ) + set(INFER_FOUND 0) + message("infer not found") +else() + set(INFER_FOUND 1) + message("infer found at ${INFER_BIN}") +endif()