#!/bin/bash set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" OUTPUT_TARGET="${1:-$SCRIPT_DIR}" mkdir -p "$OUTPUT_TARGET" OUTPUT_DIR="$(cd "$OUTPUT_TARGET" && pwd)" MOC_BIN="" MOC_CANDIDATES=( /usr/lib/qt6/moc /usr/lib/qt6/libexec/moc /usr/libexec/qt6/moc /usr/lib64/qt6/libexec/moc /usr/lib/qt6/bin/moc /usr/lib64/qt6/bin/moc moc-qt6 moc6 moc ) for candidate in "${MOC_CANDIDATES[@]}"; do TARGET_BIN="" if [ -x "$candidate" ]; then TARGET_BIN="$candidate" elif command -v "$candidate" &>/dev/null; then TARGET_BIN="$(command -v "$candidate")" fi if [ -n "$TARGET_BIN" ]; then VER_OUT="$("$TARGET_BIN" -v 2>&1 || true)" if [[ "$VER_OUT" =~ moc\ 6\. ]] || [[ "$VER_OUT" =~ Qt\ 6\. ]] || [[ "$VER_OUT" =~ 6\.[0-9]+ ]]; then MOC_BIN="$TARGET_BIN" break fi fi done if [ -z "$MOC_BIN" ]; then echo "Warning: Qt6 moc compiler not found (detected Qt5 moc or no moc)." echo "On Arch Linux, please ensure Qt6 development tools are installed:" echo " sudo pacman -S qt6-base kf6-purpose kf6-kcoreaddons" exit 0 fi # Detect header search paths INC_ARGS=() for path in \ /usr/include/KF6/Purpose \ /usr/include/KF6/KCoreAddons \ /usr/include/KF6 \ /usr/include/purpose \ /tmp/purpose_devel/usr/include/KF6/Purpose \ /tmp/purpose_devel/usr/include/KF6; do if [ -d "$path" ]; then INC_ARGS+=("-I$path") fi done for path in \ /usr/include/qt6 \ /usr/include/qt6/QtCore \ /usr/include/qt6/QtGui \ /usr/include/x86_64-linux-gnu/qt6 \ /usr/include/x86_64-linux-gnu/qt6/QtCore \ /usr/include/x86_64-linux-gnu/qt6/QtGui; do if [ -d "$path" ]; then INC_ARGS+=("-I$path") fi done if [ ${#INC_ARGS[@]} -eq 0 ]; then echo "Warning: KF6 Purpose/Qt6 headers not found. Skipping Purpose plugin compilation." echo "On Arch Linux, install development packages: sudo pacman -S kf6-purpose kf6-kcoreaddons qt6-base" exit 0 fi LIB_ARGS=() for lib_path in \ /usr/lib/libKF6Purpose.so.6 /usr/lib64/libKF6Purpose.so.6 /usr/lib/x86_64-linux-gnu/libKF6Purpose.so.6 \ /usr/lib/libKF6Purpose.so /usr/lib64/libKF6Purpose.so /usr/lib/x86_64-linux-gnu/libKF6Purpose.so; do if [ -f "$lib_path" ]; then LIB_ARGS+=("$lib_path") break fi done for lib_path in \ /usr/lib/libKF6CoreAddons.so.6 /usr/lib64/libKF6CoreAddons.so.6 /usr/lib/x86_64-linux-gnu/libKF6CoreAddons.so.6 \ /usr/lib/libKF6CoreAddons.so /usr/lib64/libKF6CoreAddons.so /usr/lib/x86_64-linux-gnu/libKF6CoreAddons.so; do if [ -f "$lib_path" ]; then LIB_ARGS+=("$lib_path") break fi done BUILD_DIR="$(mktemp -d)" trap 'rm -rf "$BUILD_DIR"' EXIT cp "$SCRIPT_DIR/f0ckmplugin.cpp" "$SCRIPT_DIR/f0ckmplugin.json" "$BUILD_DIR/" pushd "$BUILD_DIR" >/dev/null "$MOC_BIN" "${INC_ARGS[@]}" f0ckmplugin.cpp -o f0ckmplugin.moc g++ -shared -fPIC -O2 f0ckmplugin.cpp \ "${INC_ARGS[@]}" \ "${LIB_ARGS[@]}" \ -lQt6Core \ -o "$OUTPUT_DIR/f0ckmpurposeplugin.so" popd >/dev/null echo "Successfully built f0ckmpurposeplugin.so at $OUTPUT_DIR/f0ckmpurposeplugin.so"