diff --git a/cmake/SIPMacros.cmake b/cmake/SIPMacros.cmake index 21e22141687..1d58e900a45 100644 --- a/cmake/SIPMacros.cmake +++ b/cmake/SIPMacros.cmake @@ -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}") diff --git a/scripts/sipify.py b/scripts/sipify.py index 740d4718168..5175a095e5b 100755 --- a/scripts/sipify.py +++ b/scripts/sipify.py @@ -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") @@ -80,7 +79,6 @@ class Context: 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 @@ -147,7 +145,6 @@ class Context: 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) @@ -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")) @@ -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/", @@ -1206,11 +1200,7 @@ 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) @@ -1218,9 +1208,8 @@ def fix_annotations(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 diff --git a/scripts/sipify_all.sh b/scripts/sipify_all.sh index 8c830089e02..738a877ce59 100755 --- a/scripts/sipify_all.sh +++ b/scripts/sipify_all.sh @@ -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 @@ -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 @@ -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))