You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
scripts/misc/replace_includehints

60 lines
1.5 KiB

#!/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