diff options
author | Christoph Cullmann <cullmann@kde.org> | 2019-10-20 20:00:56 +0200 |
---|---|---|
committer | Christoph Cullmann <cullmann@kde.org> | 2019-10-20 20:00:59 +0200 |
commit | 235fcabf50189c5a89b5f6664fc5e01657ddc65c (patch) | |
tree | dfbc13003b06eb05cd9bcddf86ce41a0359768ff /kde-modules/KDEClangFormat.cmake | |
parent | ebd61cd51ab5b66ab70bbc918cb4007da1a9af4c (diff) | |
download | extra-cmake-modules-235fcabf50189c5a89b5f6664fc5e01657ddc65c.tar.gz extra-cmake-modules-235fcabf50189c5a89b5f6664fc5e01657ddc65c.tar.bz2 |
Provide clang-format target with a KDE Frameworks style file
Summary:
Provides a clang-format target if wanted
Example usage:
include(KDEClangFormat)
# add clang-format target for all our real source files
file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES autotests/src/*.cpp autotests/src/*.h src/*.cpp src/*.h templates/*.cpp templates/*.h)
kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
Test Plan: Tried that above usage thingy in KTextEditor
Reviewers: #frameworks, dfaure
Reviewed By: dfaure
Subscribers: zzag, sitter, mwolff, ochurlaud, nalvarez, kossebau, aacid, davidedmundson, dhaumann, apol, ognarb, kde-frameworks-devel, kde-buildsystem
Tags: #frameworks, #build_system
Differential Revision: https://phabricator.kde.org/D24568
Diffstat (limited to 'kde-modules/KDEClangFormat.cmake')
-rw-r--r-- | kde-modules/KDEClangFormat.cmake | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/kde-modules/KDEClangFormat.cmake b/kde-modules/KDEClangFormat.cmake new file mode 100644 index 00000000..d00f2c9f --- /dev/null +++ b/kde-modules/KDEClangFormat.cmake @@ -0,0 +1,82 @@ +#.rst: +# KDEClangFormat +# -------------------- +# +# This module provides a functionality to format the source +# code of your repository according to a predefined KDE +# clang-format file. +# +# This module provides the following function: +# +# :: +# +# kde_clang_format(<files>) +# +# Using this function will create a clang-format target that will format all +# <files> passed to the function with the predefined KDE clang-format style. +# +# Example usage: +# +# include(KDEClangFormat) +# file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES src/*.cpp src/*.h) +# kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) +# +# Since 5.64 + +#============================================================================= +# Copyright 2019 Christoph Cullmann <cullmann@kde.org> +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# try to find clang-format in path +find_program(KDE_CLANG_FORMAT_EXECUTABLE clang-format) + +# instantiate our clang-format file, must be in source directory for tooling if we have the tool +if(KDE_CLANG_FORMAT_EXECUTABLE) + configure_file(${CMAKE_CURRENT_LIST_DIR}/clang-format.cmake ${CMAKE_CURRENT_SOURCE_DIR}/.clang-format @ONLY) +endif() + +# formatting target +function(KDE_CLANG_FORMAT) + # add target only if clang-format available + if(KDE_CLANG_FORMAT_EXECUTABLE) + add_custom_target(clang-format + COMMAND + ${KDE_CLANG_FORMAT_EXECUTABLE} + -style=file + -i + ${ARGV} + WORKING_DIRECTORY + ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT + "Formatting sources in ${CMAKE_CURRENT_SOURCE_DIR} with ${KDE_CLANG_FORMAT_EXECUTABLE}..." + ) + else() + add_custom_target(clang-format + COMMAND + ${CMAKE_COMMAND} -E echo + "Could not set up the clang-format target as the clang-format executable is missing." + ) + endif() +endfunction() |