Skip to content

Commit

Permalink
api(Deprecated): Generate always /Deprecated/ annotation with text
Browse files Browse the repository at this point in the history
Use cmake to remove text when SIP version is less than 6.9.0
  • Loading branch information
troopa81 committed Dec 16, 2024
1 parent 816adfb commit 8ca2258
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 28 deletions.
8 changes: 8 additions & 0 deletions cmake/SIPMacros.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,14 @@ MACRO(GENERATE_SIP_PYTHON_MODULE_CODE MODULE_NAME MODULE_SIP SIP_FILES CPP_FILES
FILE(RELATIVE_PATH _sip_file_relpath ${BINDING_FILES_ROOT_DIR} "${_sip_file_path}/${_sip_file_name_we}")
SET(_out_sip_file "${CMAKE_CURRENT_BINARY_DIR}/${_sip_file_relpath}.sip")
CONFIGURE_FILE(${_sip_file} ${_out_sip_file})

# Deprecated annotation supports message only since version 6.9.0
if(${SIP_VERSION_STR} VERSION_LESS 6.9.0)
file(READ ${_out_sip_file} _content)
string(REGEX REPLACE "([/,])Deprecated=\"[^\"]*\"([/,])" "\\1Deprecated\\2" _content "${_content}")
file(GENERATE OUTPUT ${_out_sip_file} CONTENT "${_content}")
endif()

ENDFOREACH (_sip_file)

SET(_message "-DMESSAGE=Generating CPP code for module ${MODULE_NAME}")
Expand Down
23 changes: 6 additions & 17 deletions scripts/sipify.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ class MultiLineType(Enum):
parser = argparse.ArgumentParser(description="Convert header file to SIP and Python")
parser.add_argument("-debug", action="store_true", help="Enable debug mode")
parser.add_argument("-qt6", action="store_true", help="Enable Qt6 mode")
parser.add_argument("-generate_deprecated_message", action="store_true", help="Generate sip files with deprecated messages (supported only in SIP > 6.9.0)")
parser.add_argument("-sip_output", help="SIP output file")
parser.add_argument("-python_output", help="Python output file")
parser.add_argument("-class_map", help="Class map file")
Expand Down Expand Up @@ -80,7 +79,6 @@ def __init__(self):
self.debug: bool = False
self.is_qt6: bool = False
self.header_file: str = ""
self.generate_deprecated_message = False
self.current_line: str = ""
self.sip_run: bool = False
self.header_code: bool = False
Expand Down Expand Up @@ -147,7 +145,6 @@ def current_fully_qualified_struct_name(self) -> str:
CONTEXT = Context()
CONTEXT.debug = args.debug
CONTEXT.is_qt6 = args.qt6
CONTEXT.generate_deprecated_message = args.generate_deprecated_message
CONTEXT.header_file = args.headerfile
CONTEXT.input_lines = input_lines
CONTEXT.line_count = len(input_lines)
Expand Down Expand Up @@ -891,7 +888,9 @@ def process_doxygen_line(line: str) -> str:
version = version[:-1]
depr_line = f"\n.. deprecated:: {version}"
message = deprecated_match.group("DEPR_MESSAGE")
CONTEXT.deprecated_message = f"Since {version}. {process_deprecated_message(message)}"
CONTEXT.deprecated_message = (
f"Since {version}. {process_deprecated_message(message)}"
)
if message:
depr_line += "\n"
depr_line += "\n".join(f"\n {_m}" for _m in message.split("\n"))
Expand Down Expand Up @@ -1169,11 +1168,6 @@ def fix_annotations(line):
CONTEXT.skipped_params_out.append(param)
dbg_info(f"caught removed param: {CONTEXT.skipped_params_out[-1]}")

if "SIP_DEPRECATED" in line:

if CONTEXT.deprecated_message is None:
exit_with_error(f"Error in file {CONTEXT.header_file}: missing deprecated message for SIP_DEPRECATED instruction on line {CONTEXT.line_idx}. Please add \\deprecated instruction")

# Printed annotations
replacements = {
r"//\s*SIP_ABSTRACT\b": "/Abstract/",
Expand Down Expand Up @@ -1206,21 +1200,16 @@ def fix_annotations(line):
# these have no effect (and aren't required) on sip >= 6
replacements[r"SIP_THROW\(\s*([\w\s,]+?)\s*\)"] = ""

if CONTEXT.generate_deprecated_message:
# check deprecated message is not empty
replacements[r"\bSIP_DEPRECATED\b"] = f'/Deprecated="{CONTEXT.deprecated_message}"/'
else:
replacements[r"\bSIP_DEPRECATED\b"] = f"/Deprecated/"
replacements[r"\bSIP_DEPRECATED\b"] = f'/Deprecated="{CONTEXT.deprecated_message}"/'

for _pattern, replacement in replacements.items():
line = re.sub(_pattern, replacement, line)

# Combine multiple annotations
while True:
new_line = re.sub(
r'/([\w,]+(="?[^"]+"?)?)/\s*/([\w,]+(="?[^"]+"?)?]?)/',
r"/\1,\3/",
line)
r'/([\w,]+(="?[^"]+"?)?)/\s*/([\w,]+(="?[^"]+"?)?]?)/', r"/\1,\3/", line
)
if new_line == line:
break
line = new_line
Expand Down
13 changes: 2 additions & 11 deletions scripts/sipify_all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,11 @@
set -e

CLASS_MAP=0
DEPRECATED_MESSAGE=0
while getopts "md" opt; do
while getopts "m" opt; do
case $opt in
m)
CLASS_MAP=1
;;
d)
DEPRECATED_MESSAGE=1
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
Expand Down Expand Up @@ -54,11 +50,6 @@ fi
pids=()
iPid=0

GENERATE_DEPRECATED_MESSAGE=""
if [[ ${DEPRECATED_MESSAGE} -eq 1 ]]; then
GENERATE_DEPRECATED_MESSAGE="-generate_deprecated_message"
fi

for root_dir in python python/PyQt6; do

if [[ $root_dir == "python/PyQt6" ]]; then
Expand Down Expand Up @@ -95,7 +86,7 @@ It is not aimed to be manually edited
if [[ ${CLASS_MAP} -eq 1 ]]; then
CLASS_MAP_CALL="-c ${module_dir}/class_map.yaml"
fi
./scripts/sipify.py $IS_QT6 $GENERATE_DEPRECATED_MESSAGE -s ${root_dir}/${sipfile}.in -p ${module_dir}/auto_additions/${pyfile} ${CLASS_MAP_CALL} ${header} &
./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))

Expand Down

0 comments on commit 8ca2258

Please sign in to comment.