Bundle libseccomp 2.3.1
[linux-seccomp.git] / libseccomp / tools / check-syntax
diff --git a/libseccomp/tools/check-syntax b/libseccomp/tools/check-syntax
new file mode 100755 (executable)
index 0000000..4369e93
--- /dev/null
@@ -0,0 +1,160 @@
+#!/bin/bash
+
+#
+# libseccomp code syntax checking tool
+#
+# Copyright (c) 2013,2015 Red Hat <pmoore@redhat.com>
+# Author: Paul Moore <paul@paul-moore.com>
+#
+
+#
+# This library is free software; you can redistribute it and/or modify it
+# under the terms of version 2.1 of the GNU Lesser General Public License as
+# published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+# for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library; if not, see <http://www.gnu.org/licenses>.
+#
+
+CHK_C_LIST="include/seccomp.h.in \
+           src/*.c src/*.h \
+           tests/*.c tests/*.h \
+           tools/*.c tools/*.h"
+CHK_C_EXCLUDE=""
+
+####
+# functions
+
+#
+# Dependency verification
+#
+# Arguments:
+#     1    Dependency to check for
+#
+function verify_deps() {
+       [[ -z "$1" ]] && return
+       if ! which "$1" >& /dev/null; then
+               echo "error: install \"$1\" and include it in your \$PATH"
+               exit 1
+       fi
+}
+
+#
+# Print out script usage details
+#
+function usage() {
+cat << EOF
+usage: check-syntax [-h]
+
+libseccomp code syntax checking tool
+optional arguments:
+  -h             show this help message and exit
+  -f             fix the file formatting
+EOF
+}
+
+#
+# Generate a properly formatted C source/header file
+#
+# Arguments:
+#     1    Source file
+#
+function tool_c_style() {
+       astyle --options=none --lineend=linux --mode=c \
+               --style=linux \
+               --indent=force-tab=8 \
+               --indent-preprocessor \
+               --indent-col1-comments \
+               --min-conditional-indent=0 \
+               --max-instatement-indent=80 \
+               --pad-oper \
+               --align-pointer=name \
+               --align-reference=name \
+               --max-code-length=80 \
+               --break-after-logical < "$1"
+}
+
+#
+# Check the formatting on a C source/header file
+#
+# Arguments:
+#     1    File to check
+#
+function tool_c_style_check() {
+       [[ -z "$1" || ! -r "$1" ]] && return
+
+       tool_c_style "$1" | diff -pu --label="$1.orig" "$1" --label="$1" -
+}
+
+#
+# Fix the formatting on a C source/header file
+#
+# Arguments:
+#     1    File to fix
+#
+function tool_c_style_fix() {
+       [[ -z "$1" || ! -r "$1" ]] && return
+
+       tmp="$(mktemp --tmpdir=$(dirname "$1"))"
+       tool_c_style "$1" > "$tmp"
+       mv "$tmp" "$1"
+}
+
+#
+# Perform all known syntax checks for the configured C sources/headers
+#
+function check_c() {
+       for i in $CHK_C_LIST; do
+               echo "$CHK_C_EXCLUDE" | grep -q "$i" && continue
+               echo "Differences for $i"
+               tool_c_style_check "$i"
+       done
+}
+
+#
+# Perform all known syntax fixess for the configured C sources/headers
+#
+function fix_c() {
+       for i in $CHK_C_LIST; do
+               echo "$CHK_C_EXCLUDE" | grep -q "$i" && continue
+               echo "Fixing $i"
+               tool_c_style_fix "$i"
+       done
+}
+
+####
+# main
+
+verify_deps astyle
+
+opt_fix=0
+
+while getopts "fh" opt; do
+       case $opt in
+       f)
+               opt_fix=1
+               ;;
+       h|*)
+               usage
+               exit 1
+               ;;
+       esac
+done
+
+# display the results
+echo "=============== $(date) ==============="
+echo "Code Syntax Check Results (\"check-syntax $*\")"
+if [[ $opt_fix -eq 1 ]]; then
+       fix_c
+else
+       check_c
+fi
+echo "============================================================"
+
+# exit
+exit 0
This page took 0.011418 seconds and 4 git commands to generate.