EG/packaging/debian/build_deb.sh
2026-04-07 09:57:39 +08:00

79 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
APP_DIR="${APP_DIR:-$ROOT_DIR/dist/EGEditor}"
PACKAGE_NAME="${PACKAGE_NAME:-eg-editor}"
DISPLAY_NAME="${DISPLAY_NAME:-EG Editor}"
VERSION="${1:-${VERSION:-0.1.0}}"
ARCH="${ARCH:-$(dpkg-architecture -qDEB_HOST_ARCH 2>/dev/null || echo amd64)}"
MAINTAINER="${MAINTAINER:-EG Team <noreply@example.com>}"
DESCRIPTION="${DESCRIPTION:-EG 3D editor and engine packaged from the PyInstaller distribution directory.}"
INSTALL_DIR="/opt/${PACKAGE_NAME}"
STAGE_BASE="$ROOT_DIR/build/deb/${PACKAGE_NAME}_${VERSION}_${ARCH}"
PKG_ROOT="$STAGE_BASE/${PACKAGE_NAME}"
OUTPUT_DIR="${OUTPUT_DIR:-$ROOT_DIR/dist-deb}"
OUTPUT_FILE="$OUTPUT_DIR/${PACKAGE_NAME}_${VERSION}_${ARCH}.deb"
ICON_SOURCE="${ICON_SOURCE:-$ROOT_DIR/icons/logo.png}"
if [[ ! -x "$APP_DIR/EGEditor" ]]; then
echo "error: executable not found: $APP_DIR/EGEditor" >&2
echo "hint: build the PyInstaller bundle first, or set APP_DIR=/path/to/EGEditor" >&2
exit 1
fi
if [[ ! -f "$ICON_SOURCE" ]]; then
echo "error: icon not found: $ICON_SOURCE" >&2
exit 1
fi
rm -rf "$STAGE_BASE"
mkdir -p \
"$PKG_ROOT/DEBIAN" \
"$PKG_ROOT$INSTALL_DIR" \
"$PKG_ROOT/usr/bin" \
"$PKG_ROOT/usr/share/applications" \
"$PKG_ROOT/usr/share/pixmaps" \
"$OUTPUT_DIR"
cp -a "$APP_DIR/." "$PKG_ROOT$INSTALL_DIR/"
cp "$ICON_SOURCE" "$PKG_ROOT/usr/share/pixmaps/${PACKAGE_NAME}.png"
cat > "$PKG_ROOT/usr/bin/${PACKAGE_NAME}" <<EOF
#!/usr/bin/env bash
exec "${INSTALL_DIR}/EGEditor" "\$@"
EOF
chmod 0755 "$PKG_ROOT/usr/bin/${PACKAGE_NAME}"
cat > "$PKG_ROOT/usr/share/applications/${PACKAGE_NAME}.desktop" <<EOF
[Desktop Entry]
Version=1.0
Type=Application
Name=${DISPLAY_NAME}
Comment=Launch ${DISPLAY_NAME}
Exec=${PACKAGE_NAME}
Icon=${PACKAGE_NAME}
Terminal=false
Categories=Graphics;Development;
StartupNotify=true
EOF
chmod 0644 "$PKG_ROOT/usr/share/applications/${PACKAGE_NAME}.desktop"
cat > "$PKG_ROOT/DEBIAN/control" <<EOF
Package: ${PACKAGE_NAME}
Version: ${VERSION}
Section: graphics
Priority: optional
Architecture: ${ARCH}
Maintainer: ${MAINTAINER}
Depends: libc6 (>= 2.35), libgl1
Description: ${DISPLAY_NAME}
${DESCRIPTION}
EOF
chmod 0644 "$PKG_ROOT/DEBIAN/control"
dpkg-deb --build --root-owner-group "$PKG_ROOT" "$OUTPUT_FILE"
echo "built: $OUTPUT_FILE"