#!/usr/bin/env bash set -euo pipefail # Apply lightweight fix to Grantlee sources in externals to avoid duplicate # QT_TESTCASE_BUILDDIR definition which causes compiler errors on Qt6. GRANTLEE_SRC_DIR="${1:-./external/grantlee-src}" if [ ! -d "$GRANTLEE_SRC_DIR" ]; then echo "Grantlee source dir not found: $GRANTLEE_SRC_DIR" >&2 exit 2 fi TARGET_FILE="$GRANTLEE_SRC_DIR/textdocument/tests/CMakeLists.txt" if [ ! -f "$TARGET_FILE" ]; then echo "Target CMake file not found: $TARGET_FILE" >&2 exit 3 fi # Replace the unconditional target_compile_definitions block with a commented # explanation to avoid duplicate -D flags. # export TARGET_FILE for the python subprocess TARGET_FILE="$TARGET_FILE" export TARGET_FILE python3 - <<'PY' import io,sys import os TARGET_FILE = os.environ.get('TARGET_FILE') if not TARGET_FILE: print('TARGET_FILE not set', file=sys.stderr) sys.exit(2) with open(TARGET_FILE, 'r', encoding='utf-8') as f: s = f.read() old = 'target_compile_definitions(plainmarkupbuildertest_exec PRIVATE QT_TESTCASE_BUILDDIR' if old in s: # remove the line and any surrounding if/endif that only wrap it import re # replace the specific line plus optional surrounding if/endif block with a comment s2 = re.sub(r"if \(NOT GRANTLEE_BUILD_WITH_QT6\)\s*target_compile_definitions\(plainmarkupbuildertest_exec PRIVATE QT_TESTCASE_BUILDDIR[\s\S]*?endif\(\)\n?", \ '# QT_TESTCASE_BUILDDIR was previously defined here which could conflict with the\n# the definition injected by Qt\'s test configuration. Defining the macro in\n# multiple places leads to compiler redefinition errors. The test framework\n# already provides this define when needed, so omit the explicit definition\n# to avoid duplicate -D flags.\n', s) if s2==s: # fallback: remove only the line s2 = s.replace('target_compile_definitions(plainmarkupbuildertest_exec PRIVATE QT_TESTCASE_BUILDDIR="${CMAKE_BINARY_DIR}")\n','') s = s2 with open(TARGET_FILE, 'w', encoding='utf-8') as f: f.write(s) print('Applied grantlee fix to', TARGET_FILE) PY