QGIS/scripts/sipify_all.sh
Julien Cabieces 51dc2ec2ac api(Deprecated): Generate always /Deprecated/ annotation with text
Use cmake to remove text when SIP version is less than 6.9.0
2024-12-17 09:06:44 +01:00

116 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
###########################################################################
# sipify_all.sh
# ---------------------
# Date : 25.03.2017
# Copyright : (C) 2017 by Denis Rouzaud
# Email : denis.rouzaud@gmail.com
###########################################################################
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
###########################################################################
set -e
CLASS_MAP=0
while getopts "m" opt; do
case $opt in
m)
CLASS_MAP=1
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
shift $((OPTIND-1))
DIR=$(git rev-parse --show-toplevel)
# GNU prefix command for bsd/mac os support (gsed, gsplit)
GP=
if [[ "$OSTYPE" == *bsd* ]] || [[ "$OSTYPE" =~ darwin* ]]; then
GP=g
fi
pushd ${DIR} > /dev/null
count=0
if [[ -n $1 ]]; then
modules=("$1")
else
modules=(core gui analysis server 3d)
fi
pids=()
iPid=0
for root_dir in python python/PyQt6; do
if [[ $root_dir == "python/PyQt6" ]]; then
IS_QT6="-qt6"
fi
for module in "${modules[@]}"; do
module_dir=${root_dir}/${module}
if [[ ${CLASS_MAP} -eq 1 ]]; then
rm ${module_dir}/class_map.yaml || true
touch ${module_dir}/class_map.yaml
fi
# clean auto_additions and auto_generated folders
rm -rf ${module_dir}/auto_additions/*.py
rm -rf ${module_dir}/auto_generated/*.py
# put back __init__.py
echo '"""
This folder is completed using sipify.py script
It is not aimed to be manually edited
"""' > ${module_dir}/auto_additions/__init__.py
while read -r sipfile; do
echo "$sipfile.in"
header=$(${GP}sed -E 's@(.*)\.sip@src/\1.h@; s@auto_generated/@@' <<< $sipfile)
pyfile=$(${GP}sed -E 's@([^\/]+\/)*([^\/]+)\.sip@\2.py@;' <<< $sipfile)
if [ ! -f $header ]; then
echo "*** Missing header: $header for sipfile $sipfile"
else
path=$(${GP}sed -r 's@/[^/]+$@@' <<< $sipfile)
mkdir -p python/$path
CLASS_MAP_CALL=
if [[ ${CLASS_MAP} -eq 1 ]]; then
CLASS_MAP_CALL="-c ${module_dir}/class_map.yaml"
fi
./scripts/sipify.py $IS_QT6 -s ${root_dir}/${sipfile}.in -p ${module_dir}/auto_additions/${pyfile} ${CLASS_MAP_CALL} ${header} &
pids[iPid]=$!
iPid=$((iPid+1))
fi
count=$((count+1))
done < <( ${GP}sed -n -r "s@^%Include auto_generated/(.*\.sip)@${module}/auto_generated/\1@p" python/${module}/${module}_auto.sip )
done
done
for pid in "${pids[@]}"; do
wait $pid || ( echo "Errors while calling sipify!!!" && exit 1 )
done
if [[ ${CLASS_MAP} -eq 1 ]]; then
for root_dir in python python/PyQt6; do
for module in "${modules[@]}"; do
module_dir=${root_dir}/${module}
echo "sorting ${module_dir}/class_map.yaml"
sort -n -o ${module_dir}/class_map.yaml ${module_dir}/class_map.yaml
done
done
fi
echo " => $count files sipified! 🍺"
popd > /dev/null