#!/bin/bash # Wrapper around the opensource clang meant to work around various path or library # issues occurring when one tries to substitute Apple's version of clang with # a different version. # The wrapper tries to mitigate version discrepancies in clang's fatal warnings. SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" CLANG_COMPILER="${SCRIPT_DIR}/../../../facebook-clang-plugins/clang/bin/clang" # WARNING: use at your own risk, not needed in most cases # Path that points to clang internal headers to be replaced with # path to infer's clang internal headers. CLANG_INCLUDE_TO_REPLACE="${FCP_CLANG_INCLUDE_TO_REPLACE}" CLANG_LIB_INCLUDE="${SCRIPT_DIR}/../../../facebook-clang-plugins/clang/lib/clang/3.8.0/include" if [ "${0%++}" != "$0" ]; then XX="++"; else XX=""; fi COMMAND=("${CLANG_COMPILER}${XX}") # Remove command line options not supported by the opensource compiler or the plugins. PREV="" for X in "$@" do if [ "$X" == "-fembed-bitcode-marker" ]; then continue elif [ "$X" == "armv7k" ] && [ "$PREV" == "-arch" ]; then # replace armv7k arch with armv7 COMMAND+=("armv7") elif [ "$X" == "$CLANG_INCLUDE_TO_REPLACE" ] && [ "$PREV" == "-isystem" ]; then COMMAND+=("$CLANG_LIB_INCLUDE") else COMMAND+=("$X") fi PREV="$X" done # Never error on warnings. Clang is often more strict than Apple's version. # These arguments are appended to override previous opposite settings. # How it's done: surpress all the warnings, since there are no warnings, # compiler can't elevate them to error level. COMMAND+=("-Wno-everything") COMMAND+=("-include") COMMAND+=(${SCRIPT_DIR}/"global_defines.h") "${COMMAND[@]}"