Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
dc9a06f
commit 2faf98c
Showing
3 changed files
with
190 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
#!/bin/sh | ||
|
||
# Script to install a version of cppcheck in ~/cppcheck.local/ | ||
# | ||
# Used by Travis-CI builds, until Travis supports cppcheck natively | ||
# | ||
# Currently only supports git repos as sources | ||
# | ||
# Usage: /path/to/install_cppcheck.sh <cppcheck-git-repo> <version-tag> | ||
|
||
INSTALL_ROOT=~/cppcheck.local | ||
|
||
# ---------------------------------------------------------------------------- | ||
# U S A G E | ||
# ---------------------------------------------------------------------------- | ||
usage() | ||
{ | ||
echo "** Usage: $0 <git-repo URL> <version-tag>" | ||
echo " e.g. $0 https://github.com/danmar/cppcheck.git 1.90" | ||
} >&2 | ||
|
||
# ---------------------------------------------------------------------------- | ||
# C A L L _ M A K E | ||
# | ||
# Calls make with the specified parameters, but only displays the error | ||
# log if it fails | ||
# ---------------------------------------------------------------------------- | ||
call_make() | ||
{ | ||
# Disable set -e, if active | ||
set_entry_opts=`set +o` | ||
set +e | ||
|
||
status=1 | ||
log=`mktemp /tmp/cppcheck-log.XXXXXXXXXX` | ||
if [ -n "$log" ]; then | ||
make "$@" >$log 2>&1 | ||
status=$? | ||
if [ $status -ne 0 ]; then | ||
cat $log >&2 | ||
fi | ||
rm $log | ||
fi | ||
|
||
# Re-enable `set -e` if active before | ||
$set_entry_opts | ||
|
||
return $status | ||
} | ||
|
||
# ---------------------------------------------------------------------------- | ||
# M A I N | ||
# ---------------------------------------------------------------------------- | ||
if [ $# -ne 2 ]; then | ||
usage | ||
exit 1 | ||
fi | ||
REPO_URL="$1" | ||
CPPCHECK_VER="$2" | ||
|
||
# Already installed? | ||
exe=$INSTALL_ROOT/$CPPCHECK_VER/bin/cppcheck | ||
if [ -x "$exe" ]; then | ||
echo "cppcheck version $CPPCHECK_VER is already installed at $exe" >&2 | ||
exit 0 | ||
fi | ||
|
||
workdir=`mktemp -d /tmp/cppcheck.XXXXXXXXXX` | ||
if [ -z "$workdir" ]; then | ||
echo "** Unable to create temporary working directory" 2>&1 | ||
exit 1 | ||
fi | ||
|
||
# Use a sub-process for the next bit to restrict the scope of 'set -e' | ||
( | ||
set -e ; # Exit sub-process on first error | ||
|
||
# Put everything in this directory | ||
FILESDIR=$INSTALL_ROOT/$CPPCHECK_VER | ||
|
||
# CFGDIR is needed for cppcheck before 1.86 | ||
make_args="FILESDIR=$FILESDIR PREFIX=$FILESDIR CFGDIR=$FILESDIR" | ||
|
||
# See https://stackoverflow.com/questions/ | ||
# 791959/download-a-specific-tag-with-git | ||
git clone -b $CPPCHECK_VER --depth 1 $REPO_URL $workdir | ||
|
||
cd $workdir | ||
echo "Making cppcheck..." | ||
# CFGDIR is needed for cppcheck before 1.86 | ||
call_make $make_args | ||
|
||
echo "Installing cppcheck..." | ||
mkdir -p $FILESDIR | ||
call_make install $make_args | ||
) | ||
status=$? | ||
|
||
if [ $status -eq 0 ]; then | ||
rm -rf $workdir | ||
else | ||
"** Script failed. Work dir is $workdir" >&2 | ||
fi | ||
|
||
exit $status |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#!/bin/sh | ||
|
||
# Script to run cppcheck | ||
# | ||
# Usage: /path/to/run_cppcheck.sh [ -v CPPCHECK_VER] [<extra_opts_and_dirs>] | ||
# | ||
# - If <extra_opts_and_dirs> is missing, '.' is assumed | ||
# - If -v CPPCHECK_VER is specified, that version of cppcheck is run from | ||
# ~/cppcheck.local (whether or not it's there!). Use install_cppcheck.sh | ||
# to install a new version. | ||
# | ||
# Environment (all optional):- | ||
# | ||
# CPPCHECK : Override the default cppcheck command ('cppcheck'). | ||
# Ignored if -v is specified | ||
# CPPCHECK_FLAGS : Override the default cppcheck flags | ||
|
||
INSTALL_ROOT=~/cppcheck.local | ||
|
||
# Figure out CPPCHECK setting, if any. Currently '-v' must be the first | ||
# argument on the command line. | ||
case "$1" in | ||
-v) # Version is separate parameter | ||
if [ $# -ge 2 ]; then | ||
CPPCHECK="$INSTALL_ROOT/$2/bin/cppcheck" | ||
shift 2 | ||
else | ||
echo "** ignoring '-v' with no arg" >&2 | ||
shift 1 | ||
fi | ||
;; | ||
-v*) # Version is in same parameter | ||
# ${parameter#word} is not supported by classic Bourne shell, | ||
# but it is on bash, dash, etc. If it doesn't work on your shell, | ||
# don't use this form! | ||
CPPCHECK="$INSTALL_ROOT/${1#-v}/bin/cppcheck" | ||
shift 1 | ||
esac | ||
if [ -z "$CPPCHECK" ]; then | ||
CPPCHECK=cppcheck | ||
fi | ||
|
||
# Supply default flags passed to cppcheck if necessary | ||
if [ -z "$CPPCHECK_FLAGS" ]; then | ||
CPPCHECK_FLAGS="--quiet --force --std=c11 --std=c++11 --inline-suppr \ | ||
--enable=warning --error-exitcode=1" | ||
fi | ||
|
||
# Any options/directories specified? | ||
if [ $# -eq 0 ]; then | ||
set -- . | ||
fi | ||
|
||
# Display the cppcheck version and command for debugging | ||
"$CPPCHECK" --version && { | ||
echo Command: $CPPCHECK $CPPCHECK_FLAGS "$@" | ||
"$CPPCHECK" $CPPCHECK_FLAGS "$@" | ||
} |