From bd88304bf1d868fff309cc64d98b63aa46b5c992 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Wed, 23 Jan 2019 00:54:25 +0100
Subject: [PATCH] Add clang-format target to cmake

If `clang-format` is found the 'clang-format' target is defined. To build this
target, clang format is run on pastis sources (c++) omitting 'packages' sources.

It is better to configure editors to use clang-format than running this on the
whole sources before pushing...
---
 CMakeLists.txt                 | 15 +++++++++++++++
 cmake/ClangFormatProcess.cmake | 13 +++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 cmake/ClangFormatProcess.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a397a275..4cb090516 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,6 +121,21 @@ endif()
 
 set(PASTIS_HAS_MPI ${MPI_FOUND})
 
+#------------------------------------------------------
+# search for clang-format
+
+find_program(CLANG_FORMAT clang-format)
+if (CLANG_FORMAT)
+  add_custom_target(clang-format
+    COMMAND echo "running ${CLANG_FORMAT} ..."
+    COMMAND ${CMAKE_COMMAND}
+    -DPASTIS_SOURCE_DIR="${PASTIS_SOURCE_DIR}"
+    -DCLANG_FORMAT="${CLANG_FORMAT}"
+    -P ${PASTIS_SOURCE_DIR}/cmake/ClangFormatProcess.cmake)
+else ()
+  message(WARNING "clang-format no found!")
+endif()
+
 #------------------------------------------------------
 
 # setting Kokkos defaults to OpenMP when available
diff --git a/cmake/ClangFormatProcess.cmake b/cmake/ClangFormatProcess.cmake
new file mode 100644
index 000000000..f1da4c989
--- /dev/null
+++ b/cmake/ClangFormatProcess.cmake
@@ -0,0 +1,13 @@
+# --------------- runs clang-format in place using the style file ---------------
+
+if(PASTIS_SOURCE_DIR AND CLANG_FORMAT)
+  # get C++ sources file list (ignoring packages)
+  file(GLOB_RECURSE ALL_SOURCE_FILES
+    ${PASTIS_SOURCE_DIR}/src/**.[hc]pp
+    ${PASTIS_SOURCE_DIR}/tests/**.[hc]pp)
+
+  # apply style to the file list
+  foreach(SOURCE_FILE ${ALL_SOURCE_FILES})
+    execute_process(COMMAND "${CLANG_FORMAT}" -style=file -verbose -i "${SOURCE_FILE}")
+  endforeach()
+endif()
-- 
GitLab