summaryrefslogtreecommitdiff
path: root/bin/fixincludeguards.sh
blob: 5e05e944205fb373bcbe5a209e93af0338807e03 (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
#!/usr/bin/env bash
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# corrects include guards for hxx/h files automatically by its path.

# Usage:
# a) fixincludeguards.sh header.hxx
# b) find . -name *.hxx -or -name *.h | xargs bash ./bin/fixincludeguards.sh

# TODO: This doesn't fix wrong #endif comments, like:
# #ifndef FOO_BAR_HXX
# #define FOO_BAR_HXX
# ...
# #endif // OTHER_BAR_HXX

# TODO: Make this portable. As it is now, it likely only works on Linux, or
# other platforms with a purely GNU toolset.

guard_prefix="INCLUDED_"

for fn in "$@"; do
    # remove leading ./, if invoked with find
    fn=`echo "$fn" | sed 's/^.\///g'`

    # global header in include/ top level dir:
    # drop the project dir
    fnfixed=`echo $fn | sed 's,include/,,g'`
    # add examples prefix to headers in odk/examples
    fnfixed=`echo $fnfixed | sed 's,odk/examples/\(cpp\|DevelopersGuide\|OLE\)/,examples_,g'`

    # convert file path to header guard
    guard=`echo "$fnfixed" | sed 's/[\/\.-]/_/g' | tr 'a-z' 'A-Z'`

    if [ aa"`git grep -h "^\s*#ifndef ${guard_prefix}$guard" "$fn" | wc -l`" != "aa1" ] ||
       [ aa"`git grep -h "^\s*#define ${guard_prefix}$guard" "$fn" | wc -l`" != "aa1" ]; then

        # pattern which identifies guards, common one look like
        # _MODULE_FILE_HXX, FILE_H, FILE_INC
        pattern=".*\(_HXX\|_H\|_INC\|_hxx\|_h\|_inc\)"

        ### extract guard definition
        # head to take only the first match
        old_guard=`git grep -h "#ifndef $pattern" "$fn" | head -n1 | sed "s/.*\s\($pattern.*\)/\1/"`

        if [ aa"$old_guard" == aa"" ]; then
            echo -e "$fn: \e[00;31mwarning:\e[00m guard not detectable"
            continue
        fi


        if [ aa"`git grep -w "$old_guard" | cut -d ':' -f1 | sort -u | wc -l `" != aa"1" ]; then
            echo -e "$fn: \e[00;31mwarning:\e[00m $old_guard guard definition used in other files"
            continue
        fi

        ### skip some special files...

        # skip this comphelper stuff:
        # INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_14
        if [ aa"INCLUDED_COMPHELPER_IMPLBASE_" == aa"`echo $old_guard | sed "s/VAR_HXX_[0-9]\+//g"`" ]; then
            continue
        fi

        # skip files like xmloff/source/forms/elementimport_impl.hxx
        if [ aa"`git grep -h "#error.*directly" "$fn" | wc -l`" != "aa0" ]; then
            continue
        fi


        ### replace old guard with new scheme guard
        echo "$fn: $old_guard"

        # includes leading whitespace removal
        sed -i "s/\s*${old_guard}/ ${guard_prefix}${guard}/g" "$fn"


        ### clean up endif
        sed -i "s/#endif\s*\(\/\/\|\/\*\)\s*\#\?\(ifndef\)\?\s*!\?\s*\(${guard_prefix}${guard}\).*/#endif \/\/ \3/g" "$fn"

    fi
done
IT_ASSERT(a && b)Stephan Bergmann 2021-01-20ofz#29691 revert throw SvStreamEOFExceptionCaolán McNamara 2021-01-18make internals of ::Color privateNoel 2021-01-17tools: support reading xml namespace with XmlWalkerTomaž Vajngerl 2021-01-16make the Color constructors explicitly specify transparencyNoel 2021-01-12transparency->alpha in tools::ColorNoel 2020-12-29loplugin:stringviewparam: operator +Stephan Bergmann 2020-12-18throw exception in SvStream when reading past end of fileNoel 2020-11-24loplugin:stringviewparam extend to comparison operatorsNoel 2020-11-20tools::Polygon::Clip() is broken with bezier curves (tdf#137068)Luboš Luňák 2020-11-18tdf#123936 Formatting files in module tools with clang-formatPhilipp Hofer 2020-11-17simplify BigInt, remove isSetNoel 2020-11-14BigInt's non-big value type is currently sal_Int32Mike Kaganski 2020-10-28convert some more long -> tools::LongNoel 2020-10-19add tools::Long typedef and use it in toolsNoel 2020-09-28Fix SSE2 cpuid checksDr. David Alan Gilbert 2020-09-28Fix SSSE3 cpuid checksDr. David Alan Gilbert 2020-09-22Fix AVX2 cpuid checksDr. David Alan Gilbert 2020-07-21Fix uses of char16_t*/wchar_t* stream insertersStephan Bergmann