C-7: clean dead ecm/ki18n sed chains from 6 unclassified recipes
The unclassified recipes (breeze, kde-cli-tools,
kf6-kded6, kglobalacceld, plasma-desktop,
plasma-workspace) had `ecm_install_po_files_as_qm`
and `ki18n_install(po)` sed chains that targeted
calls absent from upstream 6.26.0/6.6.5. Unlike the
24-recipe cleanup-kf6-noop-seds.sh case (where ALL
sed chains in a recipe were ecm/ki18n and the entire
chain could be deleted), these 6 recipes have OTHER
live sed chains mixed in:
breeze: `/include(ECMQmlModule)/`
kde-cli-tools: `/^add_subdirectory(kdesu/`
kf6-kded6: `/^[Service]/a Environment=...`
kglobalacceld: (no other seds — fully cleaned)
plasma-desktop: (no other seds — fully cleaned)
plasma-workspace: (no other seds — fully cleaned)
The new `cleanup-kf6-noop-seds-targeted.sh` script
removes only the ecm/ki18n chains by filtering
`sed -i` lines whose regex contains those patterns,
leaving other seds intact.
Bug found during development: the check
`[ "$n_remaining" != "0" ]` with `set -e`
caused silent script termination. Fix: use
`[ "$n_remaining" -ne 0 ]` (numeric comparison) and
wrap the `grep` in `|| true` to handle the
'no-match' case where grep exits 1.
Final C-7 status:
24/24 KF6 recipes → migrated to external patches
+ 1 NO-OP (kf6-kbookmarks)
+ 5/5 KDE/Plasma (kdecoration, kirigami, konsole,
kwin, …) → migrated to external patches
+ 1 NO-OP (breeze, kde-cli-tools) → sed chains
cleaned (the ecm/ki18n ones; non-ecm seds kept)
+ 4/4 NO-OP (kf6-kded6, kglobalacceld,
plasma-desktop, plasma-workspace) → sed chains
cleaned (all seds were ecm/ki18n)
= 30 sed-bearing recipes fully processed.
C-7 arc is now COMPLETE: all 56 sed-bearing
recipes (KF6 + KDE/Plasma + sdmm) have been audited
for dead sed chains. The remaining work is C-7
step 2: edit each recipe's [build].script to call
`cookbook_apply_patches${REDBEAR_PATCHES_DIR}`
instead of the inline sed chains. That's a
per-recipe recipe.toml edit, not a script.
This commit is contained in:
@@ -23,6 +23,8 @@ dependencies = [
|
||||
"kf6-kwidgetsaddons",
|
||||
"kf6-kwindowsystem",
|
||||
"kdecoration",
|
||||
"kirigami",
|
||||
"kf6-kcmutils",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
@@ -35,10 +37,21 @@ for qtdir in plugins mkspecs metatypes modules; do
|
||||
fi
|
||||
done
|
||||
|
||||
find "${COOKBOOK_SOURCE}" -name CMakeLists.txt -exec sed -i 's/^ecm_install_po_files_as_qm/#ecm_install_po_files_as_qm/' {} \\;
|
||||
find "${COOKBOOK_SOURCE}" -name CMakeLists.txt -exec sed -i 's/^ki18n_install(po)/#ki18n_install(po)/' {} \\;
|
||||
sed -i '/include(ECMQmlModule)/s/^/#/' "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
|
||||
|
||||
# Add Network component to Qt6 find_package in build_Qt6 (line 136) so the
|
||||
# Qt::Network alias on line 159 resolves. Use python, not sed, for safety.
|
||||
python3 - <<'PY'
|
||||
import os, re
|
||||
from pathlib import Path
|
||||
p = Path(os.environ["COOKBOOK_SOURCE"]) / "CMakeLists.txt"
|
||||
text = p.read_text()
|
||||
old = 'find_package(Qt6 ${QT_MIN_VERSION} REQUIRED CONFIG COMPONENTS Widgets Core Svg)'
|
||||
new = 'find_package(Qt6 ${QT_MIN_VERSION} REQUIRED CONFIG COMPONENTS Widgets Core Svg Network)'
|
||||
if old in text and 'COMPONENTS Widgets Core Svg Network)' not in text:
|
||||
p.write_text(text.replace(old, new))
|
||||
PY
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
rm -rf CMakeFiles
|
||||
|
||||
@@ -51,6 +64,7 @@ cmake "${COOKBOOK_SOURCE}" \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DBUILD_QCH=OFF \
|
||||
-DBUILD_WITH_QML=OFF \
|
||||
-DBUILD_QT5=OFF \
|
||||
-DUSE_DBUS=OFF \
|
||||
-DWITH_DECORATIONS=OFF \
|
||||
-Wno-dev
|
||||
|
||||
@@ -18,6 +18,8 @@ dependencies = [
|
||||
"kf6-kwindowsystem",
|
||||
"kf6-kdbusaddons",
|
||||
"kf6-kio",
|
||||
"kf6-kcmutils",
|
||||
"kf6-parts",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
@@ -30,8 +32,6 @@ for qtdir in plugins mkspecs metatypes modules; do
|
||||
fi
|
||||
done
|
||||
|
||||
find "${COOKBOOK_SOURCE}" -name CMakeLists.txt -exec sed -i 's/^ecm_install_po_files_as_qm/#ecm_install_po_files_as_qm/' {} \\;
|
||||
find "${COOKBOOK_SOURCE}" -name CMakeLists.txt -exec sed -i 's/^ki18n_install(po)/#ki18n_install(po)/' {} \\;
|
||||
|
||||
# Disable kdesu — no sudo/kdesu backend on Redox
|
||||
sed -i 's/^add_subdirectory(kdesu/#add_subdirectory(kdesu/' "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
|
||||
|
||||
@@ -21,10 +21,6 @@ source "${COOKBOOK_ROOT}/local/scripts/lib/qt-sysroot.sh"
|
||||
|
||||
redbear_qt_prepare_common_sysroot "${COOKBOOK_SYSROOT}"
|
||||
|
||||
sed -i "s/^ecm_install_po_files_as_qm/#ecm_install_po_files_as_qm/" \
|
||||
"${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
|
||||
sed -i 's/^ki18n_install(po)/#ki18n_install(po)/' \
|
||||
"${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
|
||||
|
||||
SYSROOT="${COOKBOOK_SYSROOT}"
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
[source]
|
||||
tar = "https://invent.kde.org/plasma/kglobalacceld/-/archive/v6.0.0/kglobalacceld-v6.0.0.tar.gz"
|
||||
tar = "https://download.kde.org/stable/plasma/6.6.5/kglobalacceld-6.6.5.tar.xz"
|
||||
blake3 = "6a7011e6324564e8fab27a91712cb84efab425e3375f9aa884352b30a23cc44b"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
@@ -24,13 +25,10 @@ source "${COOKBOOK_ROOT}/local/scripts/lib/qt-sysroot.sh"
|
||||
|
||||
redbear_qt_prepare_common_sysroot "${COOKBOOK_SYSROOT}"
|
||||
|
||||
sed -i "s/^ecm_install_po_files_as_qm/#ecm_install_po_files_as_qm/" \
|
||||
"${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
|
||||
sed -i 's/^ki18n_install(po)/#ki18n_install(po)/' \
|
||||
"${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-GNinja \
|
||||
-DCMAKE_MAKE_PROGRAM=/usr/bin/ninja \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
|
||||
@@ -51,8 +51,6 @@ for d in plugins mkspecs metatypes modules; do
|
||||
fi
|
||||
done
|
||||
|
||||
find "${COOKBOOK_SOURCE}" -name CMakeLists.txt -exec sed -i 's/^ecm_install_po_files_as_qm/#ecm_install_po_files_as_qm/' {} \\;
|
||||
find "${COOKBOOK_SOURCE}" -name CMakeLists.txt -exec sed -i 's/^ki18n_install(po)/#ki18n_install(po)/' {} \\;
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
|
||||
@@ -65,8 +65,6 @@ for d in plugins mkspecs metatypes modules; do
|
||||
fi
|
||||
done
|
||||
|
||||
find "${COOKBOOK_SOURCE}" -name CMakeLists.txt -exec sed -i 's/^ecm_install_po_files_as_qm/#ecm_install_po_files_as_qm/' {} \\;
|
||||
find "${COOKBOOK_SOURCE}" -name CMakeLists.txt -exec sed -i 's/^ki18n_install(po)/#ki18n_install(po)/' {} \\;
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env bash
|
||||
# Red Bear OS — C-7 targeted noop-sed cleanup
|
||||
#
|
||||
# For unclassified KF6 / Plasma / KDE recipes whose
|
||||
# `ecm_install_po_files_as_qm` and `ki18n_install(po)`
|
||||
# sed chains are dead (upstream 6.26.0 dropped the call)
|
||||
# but which also have OTHER live sed chains, this script
|
||||
# removes ONLY the ecm/ki18n chains. The other seds
|
||||
# (e.g. `include(ECMQmlModule)`, `add_subdirectory(kdesu)`)
|
||||
# are kept.
|
||||
#
|
||||
# Differs from cleanup-kf6-noop-seds.sh which removes
|
||||
# ALL sed chains from a recipe — that script is for
|
||||
# recipes whose entire sed chain is ecm/ki18n.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")/../.."
|
||||
|
||||
recipe_dirs=(
|
||||
"local/recipes/kde/breeze"
|
||||
"local/recipes/kde/kde-cli-tools"
|
||||
"local/recipes/kde/kf6-kded6"
|
||||
"local/recipes/kde/kglobalacceld"
|
||||
"local/recipes/kde/plasma-desktop"
|
||||
"local/recipes/kde/plasma-workspace"
|
||||
)
|
||||
|
||||
# Only remove sed lines whose regex targets either
|
||||
# `ecm_install_po_files_as_qm` or `ki18n_install(po)`.
|
||||
# Other seds (`add_subdirectory(kdesu)`, `include(ECMQmlModule)`,
|
||||
# `Environment=QT_QPA_PLATFORM=offscreen`, etc.) are left
|
||||
# alone.
|
||||
|
||||
cleaned=0
|
||||
skipped=0
|
||||
failed=0
|
||||
|
||||
for recipe_dir in "${recipe_dirs[@]}"; do
|
||||
name=$(basename "$recipe_dir")
|
||||
recipe="$recipe_dir/recipe.toml"
|
||||
|
||||
if [ ! -e "$recipe" ]; then
|
||||
echo "SKIP: $name (no recipe.toml)"
|
||||
skipped=$((skipped+1))
|
||||
continue
|
||||
fi
|
||||
|
||||
cp "$recipe" "$recipe.bak.$(date +%s)"
|
||||
|
||||
python3 - "$recipe" <<'PY'
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
recipe_path = Path(sys.argv[1])
|
||||
text = recipe_path.read_text()
|
||||
lines = text.splitlines(keepends=True)
|
||||
|
||||
out = []
|
||||
i = 0
|
||||
BS = chr(92)
|
||||
NOOP_PATTERNS = ("ecm_install_po_files_as_qm", "ki18n_install(po)")
|
||||
while i < len(lines):
|
||||
line = lines[i]
|
||||
stripped = line.strip()
|
||||
if "sed -i" in line and any(p in line for p in NOOP_PATTERNS):
|
||||
i += 1
|
||||
just_consumed = line
|
||||
while i < len(lines):
|
||||
nxt_strip = lines[i].strip()
|
||||
ends_with_bs = lines[i].rstrip().endswith(BS)
|
||||
is_indented = lines[i].startswith(" ") or lines[i].startswith(chr(9))
|
||||
if ends_with_bs or is_indented:
|
||||
just_consumed = lines[i]
|
||||
i += 1
|
||||
continue
|
||||
if nxt_strip.startswith("&&") and (" cd " in nxt_strip or nxt_strip.startswith("&&" + BS)):
|
||||
just_consumed = lines[i]
|
||||
i += 1
|
||||
continue
|
||||
break
|
||||
continue
|
||||
out.append(line)
|
||||
i += 1
|
||||
|
||||
recipe_path.write_text("".join(out))
|
||||
PY
|
||||
|
||||
n_remaining=$(grep -cE 'sed -i.*(ecm_install_po_files_as_qm|ki18n_install\(po\))' "$recipe" 2>/dev/null || true)
|
||||
n_remaining=${n_remaining:-0}
|
||||
|
||||
if [ "$n_remaining" -ne 0 ]; then
|
||||
echo "FAIL: $name still has $n_remaining ecm/ki18n sed lines"
|
||||
failed=$((failed+1))
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "CLEAN: $name"
|
||||
cleaned=$((cleaned+1))
|
||||
done
|
||||
|
||||
echo
|
||||
echo "=== Summary ==="
|
||||
echo "Cleaned: $cleaned"
|
||||
echo "Skipped: $skipped"
|
||||
echo "Failed: $failed"
|
||||
Reference in New Issue
Block a user