Files
f0ckm-uploader/purpose_plugin/build_plugin.sh
2026-08-13 22:02:18 +02:00

114 lines
3.1 KiB
Bash
Executable File

#!/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"