| #!/usr/bin/env bash | |
| # Format all source files in the project. | |
| # | |
| # Set CLANG_FORMAT_CMD environment variable to specify executable used (default: `clang-format`). | |
| set -e | |
| ################################################################################ | |
| # Configuration | |
| # folders to search | |
| FOLDERS=" | |
| include | |
| internal | |
| examples | |
| " | |
| # paths to ignore | |
| EXCLUDE_PATHS=" | |
| internal/ceres/gtest/* | |
| internal/ceres/gmock/* | |
| internal/ceres/gmock_gtest_all.cc | |
| internal/ceres/gmock_main.cc | |
| internal/ceres/generated/* | |
| internal/ceres/generated_bundle_adjustment_tests/* | |
| internal/ceres/schur_eliminator.cc | |
| internal/ceres/partitioned_matrix_view.cc | |
| internal/ceres/schur_templates.cc | |
| " | |
| ################################################################################ | |
| # Implementation | |
| # directory of this script and the repository root | |
| SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" | |
| REPO_DIR="$SCRIPT_DIR/.." | |
| # set default for CLANG_FORMAT_CMD | |
| CLANG_FORMAT_CMD=${CLANG_FORMAT_CMD:-clang-format} | |
| echo "Formatting with $CLANG_FORMAT_CMD (`$CLANG_FORMAT_CMD --version`)" | |
| # prepare arguments to exclude ignored paths | |
| EXCLUDE_ARGS="" | |
| for p in $EXCLUDE_PATHS; do | |
| EXCLUDE_ARGS="-not -path */$p $EXCLUDE_ARGS" | |
| done | |
| # for each folder, format header and source dirs | |
| for d in $FOLDERS; do | |
| d="$REPO_DIR/$d" | |
| find "$d" \( -name "*.h" -or -name "*.cc" \) $EXCLUDE_ARGS | xargs $CLANG_FORMAT_CMD -verbose -i | |
| done |