aboutsummaryrefslogtreecommitdiff
path: root/build-native.sh
blob: 3ebc825afc1c652875419723e5271795823a13ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env bash
# build-native.sh — Build and install Fluorine Manager natively (non-Flatpak).
# Uses a container to compile, then installs to ~/.local/share/fluorine/.
# Override container engine with CONTAINER_ENGINE=docker.
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
IMAGE_NAME="fluorine-builder"
CONTAINER_ENGINE="${CONTAINER_ENGINE:-podman}"
INSTALL_DIR="${HOME}/.local/share/fluorine"
STAGING="${SCRIPT_DIR}/build-container/staging"

# ── Build the container image if it doesn't exist ──
if ! ${CONTAINER_ENGINE} image exists "${IMAGE_NAME}" 2>/dev/null; then
    echo "Building ${IMAGE_NAME} image (one-time)..."
    ${CONTAINER_ENGINE} build -t "${IMAGE_NAME}" -f "${SCRIPT_DIR}/docker/Dockerfile" "${SCRIPT_DIR}/docker"
fi

# ── Ensure build dir exists (Podman needs it before mounting) ──
mkdir -p "${SCRIPT_DIR}/build-container"

# ── Run the build inside the container ──
echo "Building Fluorine Manager inside container..."
${CONTAINER_ENGINE} run --rm \
    -v "${SCRIPT_DIR}:/src:Z" \
    -v "${SCRIPT_DIR}/build-container:/src/build:Z" \
    -w /src \
    "${IMAGE_NAME}" \
    bash docker/build-inner.sh

if [ ! -d "${STAGING}" ]; then
    echo "ERROR: Staging directory not found at ${STAGING}"
    exit 1
fi

# ── Install to ~/.local/share/fluorine/ ──
echo ""
echo "Installing to ${INSTALL_DIR}/ ..."
mkdir -p "${INSTALL_DIR}"

# Remove dangling symlinks left by the Flatpak wrapper (they point to /app/
# which doesn't exist outside the sandbox) and stale symlinks that conflict
# with directories from the staging area.
find "${INSTALL_DIR}" -maxdepth 3 -type l ! -exec test -e {} \; -delete 2>/dev/null || true
for d in plugins/libs plugins/dlls plugins/data; do
    [ -L "${INSTALL_DIR}/${d}" ] && rm -f "${INSTALL_DIR}/${d}"
done

# Copy all files, preserving structure.  Existing user data (Prefix/, logs/,
# config/, instances) won't be touched because they're in subdirs that the
# staging area doesn't contain.
cp -af "${STAGING}/." "${INSTALL_DIR}/"

# ── Desktop entry ──
DESKTOP_DIR="${HOME}/.local/share/applications"
mkdir -p "${DESKTOP_DIR}"
cat > "${DESKTOP_DIR}/com.fluorine.manager.desktop" <<EOF
[Desktop Entry]
Type=Application
Name=Fluorine Manager
Comment=Mod Organizer 2 for Linux
Exec=${INSTALL_DIR}/fluorine-manager
Icon=com.fluorine.manager
Terminal=false
Categories=Game;
EOF

# Icon
mkdir -p "${HOME}/.local/share/icons/hicolor/256x256/apps/"
cp -f "${SCRIPT_DIR}/flatpak/com.fluorine.manager.png" "${HOME}/.local/share/icons/hicolor/256x256/apps/"

# ── Symlink into ~/.local/bin for PATH access ──
BIN_DIR="${HOME}/.local/bin"
mkdir -p "${BIN_DIR}"
ln -sf "${INSTALL_DIR}/fluorine-manager" "${BIN_DIR}/fluorine-manager"

echo ""
echo "=== Installed ==="
du -sh "${INSTALL_DIR}"/*/ "${INSTALL_DIR}"/ModOrganizer-core 2>/dev/null | sort -rh
echo ""
echo "Fluorine Manager installed to: ${INSTALL_DIR}/"
echo "Run with: fluorine-manager  (or find it in your app launcher)"