[Libreoffice-commits] core.git: bin/fixincludeguards.sh

Thomas Arnhold thomas at arnhold.org
Wed Oct 23 03:26:28 PDT 2013


 bin/fixincludeguards.sh |   74 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

New commits:
commit b009e8fd4fce06d9abae8aaac8750ece7df212e4
Author: Thomas Arnhold <thomas at arnhold.org>
Date:   Tue Oct 22 05:35:49 2013 +0200

    fixincludeguards.sh: unify all include guards
    
    The include guard gets generated based on the path of the header file.
    
    INCLUDED_FOO_BAR_HXX for global headers in include/
    
    INCLUDED_FOO_SOURCE_BAR_BAZ_HXX for anything else.
    
    See fdo#68849.
    
    Change-Id: Ia250e7c99cef3cb5bb0f9d4dc758ef2da3eec0a8
    Reviewed-on: https://gerrit.libreoffice.org/6386
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/bin/fixincludeguards.sh b/bin/fixincludeguards.sh
new file mode 100755
index 0000000..ec47edf
--- /dev/null
+++ b/bin/fixincludeguards.sh
@@ -0,0 +1,74 @@
+#!/bin/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 sh fixincludeguards.sh
+
+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'`
+
+    # 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
+        # _XMLOFF_ANIMEXP_HXX, BENTOID_H, IXFOBJECT_INC
+        pattern=".*\(_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 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*\(${guard_prefix}${guard}\).*/#endif \/\/ \3/g" "$fn"
+
+    fi
+done


More information about the Libreoffice-commits mailing list