blob: e9c85722a73c6e66fb61713f9a65d53897832dfd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
#!/bin/sh
#
# cmake-format - a simple cmake formatter
#
# Copyright (c) 2019,2021 Ralf Habacker <ralf.habacker@freenet.de>
#
# SPDX-License-Identifier: BSD-3-Clause
if test -z "$1"; then
echo "format cmake files by Ralf Habacker"
echo
echo "Usage: $0 --all | --end-args | --indents | --keyword-case | --keyword-spaces | --tabs | --trailing-spaces [<source-dir>]"
echo
echo "command line parameter:"
echo " --all all above"
echo " --end-args remove obsolete parameter list from end... cmake commands"
echo " --indents fix indents (requires keyword-case)"
echo " --keyword-case make all cmake keywords lowercase"
echo " --keyword-spaces remove spaces between keyword and opening bracket"
echo " --tabs replace tabs by 4 spaces"
echo " --trailing-spaces remove trailing spaces"
echo " --check-indents check indents"
echo " [<source-dir>] specify root dir to perform the requested action (optional)"
echo " If not specified, dbus source dir root is used"
exit 1
fi
# only apply to cmake keywords
KEYWORDS=$(cmake --help-command-list)
# do not search in comments
range="/^[ ]*#/!"
# use 4 spaces
indent="\ \ \ \ "
# remove tabs
exp="${range}s/\t/${indent}/g"
expt=$exp
# remove trailing spaces
exp="${range}s/[ \t]*$//"
expts=$exp
# fix indents
exp=
for j in $(echo $KEYWORDS); do
exp="$exp;${range}s/^ \{1,3\}$j(/${indent}$j(/g"
exp="$exp;${range}s/^ \{5,7\}$j(/${indent}${indent}$j(/g"
exp="$exp;${range}s/^ \{9,11\}$j(/${indent}${indent}${indent}$j(/g"
done
expki=$exp
# convert upper case keywords to lower case
exp=
for j in $(echo $KEYWORDS); do
u=$(echo $j | sed 's/.*/\U&/')
exp="$exp;${range}s/$u[ \t]*(/$j(/g"
done
expku=$exp
# remove spaces after keywords and (
exp=
for j in $(echo $KEYWORDS); do
exp="$exp;${range}s/$j[ \t]\+(/$j(/g"
done
expks=$exp
# remove obsolete arguments from end...()
exp=
for j in $(echo $KEYWORDS); do
e=$(echo $j | grep '^end')
if test -n "$e"; then
exp="$exp;${range}s/$j(.*)/$j()/g"
fi
done
expke=$exp
func=
if test "$1" == "--all"; then
exp="${expt};${expts}${expku}${expki}${expks}${expke}"
func=$1
shift
elif test "$1" == "--end-args"; then
exp=$expke
func=$1
shift
elif test "$1" == "--indents"; then
exp=$expki
func=$1
shift
elif test "$1" == "--keyword-case"; then
exp=$expku
func=$1
shift
elif test "$1" == "--keyword-spaces"; then
exp=$expks
func=$1
shift
elif test "$1" == "--tabs"; then
exp=$expt
func=$1
shift
elif test "$1" == "--trailing-spaces"; then
exp=$expts
func=$1
shift
elif test "$1" == "--check-indents"; then
echo "locations with unusual indention level changes, please inspect"
func=$1
shift
fi
# setup dir to apply
if test -n "$1"; then
root=$1
else
s=$(dirname $0)
root=$(realpath $s/..)
fi
#echo $exp
#echo $root
# script for checking indents
awk='BEGIN { debug=0; indent=0 }
$0 ~ /^ {0}/ && $0 !~ /^$/{ indent=0; }
$0 ~ /^ {4}/ { indent=1; }
$0 ~ /^ {8}/ { indent=2; }
$0 ~ /^ {12}/ { indent=3; }
debug == 1 { print FILENAME "[" NR "]:" indent " " oldindent ": " $0; }
{ if (indent - oldindent > 1) print FILENAME ":" NR ":" $0; }
{ oldindent = indent;}
'
# apply to cmake related files
for i in $(find $root -name 'CMakeLists.txt' -o -name '*.cmake' | grep -v README.cmake | grep -v config.h.cmake | grep -v bat.cmake | grep -v '/Find'); do
# apply style
if ! test "$func" = "--check-indents"; then
sed -i "$exp" $i
else
gawk "$awk" $i
fi
done
|