diff options
-rwxr-xr-x | misc/replace_includehints | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/misc/replace_includehints b/misc/replace_includehints new file mode 100755 index 0000000..edccc89 --- /dev/null +++ b/misc/replace_includehints @@ -0,0 +1,59 @@ +#!/bin/bash +# +# This script replaces <includehints> in TQt designer UI files +# with global <include>'s, removing duplicate includes. +# +# The reasons for this is that includehints are not well supported +# and can cause FTBFS. +# +# Copyright (C) 2022 Mavridis Philippe <mavridisf@gmail.com> +# for the Trinity Desktop Project +# +# Licensed under GNU GPLv2 or later. +# + +# Find files needing update +TO_REPLACE=$(find * -name \*.ui -exec grep -l includehint '{}' \;) + +if [[ ${#TO_REPLACE} == 0 ]] +then + echo "No files need to be modified." + exit 0 +fi + +echo "Files that will be modified:" +for f in $TO_REPLACE +do + echo " - $f" +done + +echo +echo "Press any key to continue to ^C to cancel." +read + +# Start replacing +declare -a headers +for f in $TO_REPLACE +do + echo "Updating file '$f'..." + + # Replace containing tag + sed -Ei 's!<(\/?)includehints>!<\1includes>!g' $f + + # Replace includes themselves while avoiding duplicates (a simple + # sed -Ei 's/<includehint>([[:alnum:]\/.]*)</includehint>/<include location="global" impldecl="in implementation">\1</include>/g' $f + # would leave duplicates behind). + headers=() + for h in $(grep -o "<includehint>[[:alnum:]\/.]*</includehint>" $f | sed -E 's/<\/?includehint>//g') + do + if [[ ! "${headers[*]}" =~ $h ]] # if this is a unique header + then + echo " - $h" + sed -i "0,/<includehint>$h<\/includehint>/{s//<include location=\"global\" impldecl=\"in implementation\">$h<\/include>/}" $f + headers+=($h) + fi + done + + # Remove leftover duplicate includehints + sed -Ei '/<includehint>([[:alnum:]\/.]*)<\/includehint>/d' $f +done |