diff options
Diffstat (limited to 'misc')
| -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  | 
