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.
60 lines
1.5 KiB
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
|