Changeset View
Changeset View
Standalone View
Standalone View
test/lint/lint-locale-dependence.sh
Show First 20 Lines • Show All 187 Lines • ▼ Show 20 Lines | function join_array { | ||||
shift | shift | ||||
echo "$*" | echo "$*" | ||||
} | } | ||||
REGEXP_IGNORE_KNOWN_VIOLATIONS=$(join_array "|" "${KNOWN_VIOLATIONS[@]}") | REGEXP_IGNORE_KNOWN_VIOLATIONS=$(join_array "|" "${KNOWN_VIOLATIONS[@]}") | ||||
# Invoke "git grep" only once in order to minimize run-time | # Invoke "git grep" only once in order to minimize run-time | ||||
REGEXP_LOCALE_DEPENDENT_FUNCTIONS=$(join_array "|" "${LOCALE_DEPENDENT_FUNCTIONS[@]}") | REGEXP_LOCALE_DEPENDENT_FUNCTIONS=$(join_array "|" "${LOCALE_DEPENDENT_FUNCTIONS[@]}") | ||||
GIT_GREP_OUTPUT=$(git grep -nE "[^a-zA-Z0-9_\`'\"<>](${REGEXP_LOCALE_DEPENDENT_FUNCTIONS}(_r|_s)?)[^a-zA-Z0-9_\`'\"<>]" -- ":/*.cpp" ":/*.h") | GIT_GREP_OUTPUT=$(git grep -nE "[^a-zA-Z0-9_\`'\"<>](${REGEXP_LOCALE_DEPENDENT_FUNCTIONS}(_r|_s)?)[^a-zA-Z0-9_\`'\"<>]" -- "$1") | ||||
EXIT_CODE=0 | FUNCTION_FOUND=0 | ||||
for LOCALE_DEPENDENT_FUNCTION in "${LOCALE_DEPENDENT_FUNCTIONS[@]}"; do | for LOCALE_DEPENDENT_FUNCTION in "${LOCALE_DEPENDENT_FUNCTIONS[@]}"; do | ||||
MATCHES=$(grep -E "[^a-zA-Z0-9_\`'\"<>]${LOCALE_DEPENDENT_FUNCTION}(_r|_s)?[^a-zA-Z0-9_\`'\"<>]" <<< "${GIT_GREP_OUTPUT}" | \ | MATCHES=$(grep -E "[^a-zA-Z0-9_\`'\"<>]${LOCALE_DEPENDENT_FUNCTION}(_r|_s)?[^a-zA-Z0-9_\`'\"<>]" <<< "${GIT_GREP_OUTPUT}" | \ | ||||
grep -vE "\.(c|cpp|h):[0-9]+:\s*(//|\*|/\*|\").*${LOCALE_DEPENDENT_FUNCTION}") | grep -vE "\.(c|cpp|h):[0-9]+:\s*(//|\*|/\*|\").*${LOCALE_DEPENDENT_FUNCTION}") | ||||
if [[ ${REGEXP_IGNORE_EXTERNAL_DEPENDENCIES} != "" ]]; then | if [[ ${REGEXP_IGNORE_EXTERNAL_DEPENDENCIES} != "" ]]; then | ||||
MATCHES=$(grep -vE "${REGEXP_IGNORE_EXTERNAL_DEPENDENCIES}" <<< "${MATCHES}") | MATCHES=$(grep -vE "${REGEXP_IGNORE_EXTERNAL_DEPENDENCIES}" <<< "${MATCHES}") | ||||
fi | fi | ||||
if [[ ${REGEXP_IGNORE_KNOWN_VIOLATIONS} != "" ]]; then | if [[ ${REGEXP_IGNORE_KNOWN_VIOLATIONS} != "" ]]; then | ||||
MATCHES=$(grep -vE "${REGEXP_IGNORE_KNOWN_VIOLATIONS}" <<< "${MATCHES}") | MATCHES=$(grep -vE "${REGEXP_IGNORE_KNOWN_VIOLATIONS}" <<< "${MATCHES}") | ||||
fi | fi | ||||
if [[ ${MATCHES} != "" ]]; then | if [[ ${MATCHES} != "" ]]; then | ||||
echo "The locale dependent function ${LOCALE_DEPENDENT_FUNCTION}(...) appears to be used:" | echo "The locale dependent function ${LOCALE_DEPENDENT_FUNCTION}(...) appears to be used:" | ||||
echo "${MATCHES}" | echo "${MATCHES}" | ||||
echo | echo | ||||
EXIT_CODE=1 | FUNCTION_FOUND=1 | ||||
fi | fi | ||||
done | done | ||||
if [[ ${EXIT_CODE} != 0 ]]; then | if [[ ${FUNCTION_FOUND} != 0 ]]; then | ||||
echo "Unnecessary locale dependence can cause bugs that are very" | echo "Unnecessary locale dependence can cause bugs that are very" | ||||
echo "tricky to isolate and fix. Please avoid using locale dependent" | echo "tricky to isolate and fix. Please avoid using locale dependent" | ||||
echo "functions if possible." | echo "functions if possible." | ||||
echo | echo | ||||
echo "Advice not applicable in this specific case? Add an exception" | echo "Advice not applicable in this specific case? Add an exception" | ||||
echo "by updating the ignore list in $0" | echo "by updating the ignore list in $0" | ||||
fi | fi | ||||
exit ${EXIT_CODE} | exit 0 |