Skip to content

Commit

Permalink
ARROW-1626 Add make targets to run the inter-procedural static analys…
Browse files Browse the repository at this point in the history
…is tool called infer

Author: Rene Sugar <rene.sugar@gmail.com>

Closes apache#1149 from renesugar/infer and squashes the following commits:

8591b5f [Rene Sugar] ARROW-1626 Add make targets to run the inter-procedural static analysis tool called infer
  • Loading branch information
renesugar authored and wesm committed Oct 3, 2017
1 parent ccbf644 commit cc3b27c
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 0 deletions.
21 changes: 21 additions & 0 deletions cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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})
Expand Down Expand Up @@ -596,6 +604,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
############################################################
Expand Down
48 changes: 48 additions & 0 deletions cpp/build-support/run-infer.sh
Original file line number Diff line number Diff line change
@@ -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
45 changes: 45 additions & 0 deletions cpp/cmake_modules/FindInferTools.cmake
Original file line number Diff line number Diff line change
@@ -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()

0 comments on commit cc3b27c

Please sign in to comment.