Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add format compilation target that applies clang-format to whitelisted modules #3188

Merged
merged 4 commits into from
Jul 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
AlwaysBreakAfterReturnType: All
AlwaysBreakTemplateDeclarations: true
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterFunction: true
AfterClass: false
AfterStruct: false
BeforeElse: true
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
BreakBeforeBraces: Custom
BreakConstructorInitializers: BeforeComma
ColumnLimit: 88
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 0
Language: Cpp
PointerAlignment: Left
Standard: Cpp11
TabWidth: 2
UseTab: Never
34 changes: 34 additions & 0 deletions .dev/format.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#! /usr/bin/env sh

# sample command line usage: $0 clang-format(version >= 6.0) $PCL_SOURCE_DIR
# $ sh ./.dev/format.sh `which clang-format` ./
taketwo marked this conversation as resolved.
Show resolved Hide resolved
# $ sh format.sh `which clang-format` ../
# $ sh ~/pcl/format.sh `which clang-format` ~/pcl
# $ sh /pcl/format.sh `which clang-format` /pcl

format() {
# don't use a directory with whitespace
local whitelist="2d cuda gpu ml simulation stereo tracking"

local PCL_DIR="${2}"
local formatter="${1}"

if [ ! -f "${formatter}" ]; then
echo "Could not find a clang-format. Please specify one as the first argument"
exit 166
fi

# check for self
if [ ! -f "${PCL_DIR}/.dev/format.sh" ]; then
echo "Please ensure that PCL_SOURCE_DIR is passed as the second argument"
exit 166
fi

for dir in ${whitelist}; do
path=${PCL_DIR}/${dir}
find ${path} -type f -iname *.[ch] -o -iname *.[ch]pp -o -iname *.[ch]xx \
-iname *.cu | xargs -n1 ${formatter} -i -style=file
done
}

format $@
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ endif()
include("${PCL_SOURCE_DIR}/cmake/pcl_verbosity.cmake")
include("${PCL_SOURCE_DIR}/cmake/pcl_targets.cmake")
include("${PCL_SOURCE_DIR}/cmake/pcl_options.cmake")
include("${PCL_SOURCE_DIR}/cmake/clang-format.cmake")

# Enable verbose timing display?
if(CMAKE_TIMING_VERBOSE AND UNIX)
Expand Down
72 changes: 72 additions & 0 deletions cmake/Modules/FindClangFormat.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#
# .rst: FindClangFormat
# ---------------
#
# The module defines the following variables
#
# ``ClangFormat_EXECUTABLE`` Path to clang-format executable
# ``ClangFormat_FOUND`` True if the clang-format executable was found.
# ``ClangFormat_VERSION`` The version of clang-format found
#
# Example usage:
#
# .. code-block:: cmake
#
# find_package(ClangFormat)
# if(ClangFormat_FOUND)
# message("clang-format executable found: ${ClangFormat_EXECUTABLE}\n"
# "version: ${ClangFormat_VERSION}")
# endif()

find_program(ClangFormat_EXECUTABLE
NAMES
clang-format-9
clang-format-9.0
clang-format-8
clang-format-8.0
clang-format-7
clang-format-7.0
clang-format-6.0
clang-format-5.0
clang-format-4.0
clang-format-3.9
clang-format-3.8
clang-format-3.7
clang-format-3.6
clang-format-3.5
clang-format-3.4
clang-format-3.3
SergioRAgostinho marked this conversation as resolved.
Show resolved Hide resolved
clang-format # least priority
DOC "clang-format executable")
mark_as_advanced(ClangFormat_EXECUTABLE)

# Extract version from command "clang-format -version"
if(ClangFormat_EXECUTABLE)
execute_process(COMMAND ${ClangFormat_EXECUTABLE} -version
OUTPUT_VARIABLE clang_format_version
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
set(version_regex "^.*clang-format version ([.0-9]+).*")
if(clang_format_version MATCHES ${version_regex})
# clang_format_version samples:
# * clang-format version 3.9.1-4ubuntu3~16.04.1 (tags/RELEASE_391/rc2)
# * Alpine clang-format version 8.0.0 (tags/RELEASE_800/final) (based on LLVM 8.0.0)
string(REGEX
REPLACE ${version_regex}
"\\1"
ClangFormat_VERSION
"${clang_format_version}")
# ClangFormat_VERSION sample: "3.9.1", "8.0.0"
endif()
SergioRAgostinho marked this conversation as resolved.
Show resolved Hide resolved
unset(clang_format_version)
unset(version_regex)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
ClangFormat
REQUIRED_VARS
ClangFormat_EXECUTABLE
ClangFormat_VERSION
VERSION_VAR
ClangFormat_VERSION
)
12 changes: 12 additions & 0 deletions cmake/clang-format.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
find_package(ClangFormat 6)
# search for version number in clang-format without version number
if(ClangFormat_FOUND)
message(STATUS "Adding target 'format'")
add_custom_target(
format
COMMAND sh
${PCL_SOURCE_DIR}/.dev/format.sh
${ClangFormat_EXECUTABLE}
${PCL_SOURCE_DIR}
)
endif()