|
|
#!/usr/bin/bash
|
|
|
|
|
|
function usage {
|
|
|
echo " usage: $0 [ninja|make]"
|
|
|
echo " Launch clang-analyzer on the sources with ninja or make."
|
|
|
exit
|
|
|
}
|
|
|
|
|
|
function execAndTest {
|
|
|
"$@"
|
|
|
local status=$?
|
|
|
if [ $status -ne 0 ]; then
|
|
|
echo "" >&2
|
|
|
echo " ERROR with $1" >&2
|
|
|
exit $status
|
|
|
fi
|
|
|
return $status
|
|
|
}
|
|
|
|
|
|
# Défaut : Ninja
|
|
|
generator="Ninja"
|
|
|
builder="ninja"
|
|
|
|
|
|
if [[ $# -gt 1 ]]; then
|
|
|
echo " ERROR: illegal number of arguments." >&2
|
|
|
echo " provided: $#" >&2
|
|
|
echo " expected: 0 or 1" >&2
|
|
|
echo "" >&2
|
|
|
usage
|
|
|
elif [[ $# -eq 1 ]]; then
|
|
|
if [[ "$1" == "ninja" ]]; then
|
|
|
echo "=> Using multiple jobs"
|
|
|
generator="Ninja"
|
|
|
builder="ninja"
|
|
|
elif [[ "$1" == "make" ]]; then
|
|
|
echo "=> Using single job"
|
|
|
generator="Ninja"
|
|
|
builder="ninja -j 1"
|
|
|
elif [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
|
|
|
usage
|
|
|
else
|
|
|
echo " ERREUR:" >&2
|
|
|
echo " L'option doit être 'ninja' ou 'make'" >&2
|
|
|
echo "" >&2
|
|
|
exit -1
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
|
|
# On se place à la racine du projet SciQlop
|
|
|
execAndTest cd $DIR
|
|
|
if ! [ -e CMakeLists.txt -a -e README.md ]; then
|
|
|
echo " ERREUR:" >&2
|
|
|
echo " CMakeLists.txt ou README.md n'existent pas." >&2
|
|
|
echo " Verifier que le script est bien execute a partir" >&2
|
|
|
echo " du sous-dossier 'scripts' de SciQlop" >&2
|
|
|
echo ""
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
# Vérification de l'existence de scan-build, ccc-analyzer, ccc-analyzer.bat
|
|
|
# et c++-analyzer.bat
|
|
|
export SCAN_BUILD_DIR="C:/Dev/CNRS-DEV/cfe/tools/scan-build"
|
|
|
export CLANG_BUILD_DIR="C:/Appli/LLVM/bin"
|
|
|
if ! [ -e $SCAN_BUILD_DIR/bin/scan-build \
|
|
|
-a -e $SCAN_BUILD_DIR/libexec/ccc-analyzer \
|
|
|
-a -e $SCAN_BUILD_DIR/libexec/ccc-analyzer.bat \
|
|
|
-a -e $SCAN_BUILD_DIR/libexec/c++-analyzer.bat ]; then
|
|
|
echo " ERREUR:"
|
|
|
echo " Les fichiers scan-build, ccc-analyzer, ccc-analyzer.bat"
|
|
|
echo " et c++-analyzer.bat ne sont pas présents dans le dossier :"
|
|
|
echo " $SCAN_BUILD_DIR."
|
|
|
echo " Assurez-vous d'avoir installé clang-analyzer en relançant le"
|
|
|
echo " script d'installation d'environnement de SciQlop."
|
|
|
echo ""
|
|
|
exit 2
|
|
|
fi
|
|
|
|
|
|
# Création d'un dossier build/debug_clanganalyzer et cd dedans
|
|
|
execAndTest mkdir -p build/debug_clanganalyzer
|
|
|
execAndTest cd build/debug_clanganalyzer
|
|
|
|
|
|
# Création d'un dossier clang-analyzer-output pour recevoir les
|
|
|
# rapports
|
|
|
execAndTest mkdir -p clang-analyzer-output
|
|
|
|
|
|
# Export des compilateurs pour clang-analyzer
|
|
|
export CCC_CC=gcc
|
|
|
export CCC_CXX=g++
|
|
|
|
|
|
# Exécution de cmake avec scan-build pour initialiser clang-analyzer
|
|
|
execAndTest $SCAN_BUILD_DIR/bin/scan-build \
|
|
|
-o clang-analyzer-output \
|
|
|
--use-analyzer $CLANG_BUILD_DIR/clang.exe \
|
|
|
cmake -G "$generator" \
|
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
|
-DCMAKE_CXX_COMPILER=C:/Appli/LLVM/libexec/c++-analyzer.bat \
|
|
|
-DCMAKE_C_COMPILER=C:/Appli/LLVM/libexec/ccc-analyzer.bat \
|
|
|
-DCMAKE_CXX_COMPILER_ID=GNU \
|
|
|
-DBUILD_TESTS=NONE \
|
|
|
-DENABLE_CHECKSTYLE=OFF \
|
|
|
-DENABLE_CODE_ANALYSIS=OFF \
|
|
|
-DENABLE_FORMATTING=OFF \
|
|
|
../..
|
|
|
|
|
|
# Clean de la construction pour avoir tous les bugs tout le temps
|
|
|
execAndTest $builder clean
|
|
|
|
|
|
# Exécution de ninja avec scan-build pour lancer clang-analyzer
|
|
|
execAndTest $SCAN_BUILD_DIR/scan-build \
|
|
|
-o clang-analyzer-output \
|
|
|
--use-analyzer $CLANG_BUILD_DIR/clang.exe \
|
|
|
$builder
|
|
|
|