qml-autoreqprov/qml.req

64 lines
1.5 KiB
Plaintext
Raw Normal View History

#!/bin/bash
# SPDX-FileCopyrightText: 2020-2021 Fabian Vogt <fabian@ritter-vogt.de>
# SPDX-License-Identifier: GPL-3.0-or-later
set -euo pipefail
qtvers=
ret=0
while [ $# -gt 0 ]; do
case $1 in
--qtver)
qtvers=$2
shift
;;
*)
echo "Unknown argument $1" >&2
exit 1
esac
shift
done
# Guess Qt version
qtver=
[[ -n ${qtvers} ]] || qtvers="5 6 7"
for ver in ${qtvers}; do
stat /usr/lib*/qt${ver} &>/dev/null && qtver="${qtver}${ver}"
done
# Zero or more than one version of Qt found. Abort.
if [[ ${#qtver} -ne 1 ]]; then
echo "Failed to guess Qt version!" >&2
exit 1
fi
if [[ ${qtver} == 5 ]]; then
importscanner="qmlimportscanner-qt5"
else
importscanner="$(qmake${qtver} -query QT_HOST_LIBEXECS)/qmlimportscanner"
fi
command -v "${importscanner}" &>/dev/null || echo "Failed to locate qmlimportscanner"
declare -A dependencies
# foundDependency qt5qmlimport(Module.Uri.42) 69
# In the dependencies array, it sets the version of qt5qmlimport(Module.Uri.42) to 69, if lower
foundDependency() {
if [ ${dependencies[$1]:=0} -lt $2 ]; then
dependencies[$1]=$2
fi
}
# TODO: Get exit status of qmlimportscanner
while read import min; do
foundDependency "qt${qtver}qmlimport(${import})" "$min"
done < <(grep -vE '/designer/.*\.qml' | xargs -r "$importscanner" -qmlFiles | jq -r '.[] | select(.type == "module") | .name + " " + .version' | gawk 'match($2, /^([0-9]+)\.([0-9]+)$/, ver) { printf "%s.%d %d\n", $1, ver[1], ver[2]; }')
for export in "${!dependencies[@]}"; do
echo "${export} >= ${dependencies["$export"]}"
done
exit $ret