diff --git a/Makefile b/Makefile index 8d4c2ca..a405d46 100644 --- a/Makefile +++ b/Makefile @@ -274,6 +274,95 @@ linux_release: # Elimina la carpeta temporal $(RMDIR) "$(RELEASE_FOLDER)" +linux_release_desktop: + @echo "Creando release con integracion desktop para Linux - Version: $(VERSION)" +# Elimina carpetas previas + $(RMDIR) "$(RELEASE_FOLDER)" + +# Crea la estructura de directorios estándar para Linux + $(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)" + $(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin" + $(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications" + $(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps" + $(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)" + +# Copia ficheros del juego + cp -R data "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)/" + cp LICENSE "$(RELEASE_FOLDER)/$(TARGET_NAME)/" + cp README.md "$(RELEASE_FOLDER)/$(TARGET_NAME)/" + +# Compila el ejecutable + $(CXX) $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin/$(TARGET_NAME)" + strip -s -R .comment -R .gnu.version "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin/$(TARGET_NAME)" --strip-unneeded + +# Crea el archivo .desktop + @echo '[Desktop Entry]' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Version=1.0' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Type=Application' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Name=$(APP_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Comment=Arcade action game - defend Earth from alien invasion!' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Exec=/opt/$(TARGET_NAME)/bin/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Icon=$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Path=/opt/$(TARGET_NAME)/share/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Terminal=false' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'StartupNotify=true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Categories=Game;ArcadeGame;' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + @echo 'Keywords=arcade;action;shooter;retro;' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop" + +# Copia el icono (si existe) y lo redimensiona si es necesario + @if [ -f "release/icon.png" ]; then \ + if command -v magick >/dev/null 2>&1; then \ + magick "release/icon.png" -resize 256x256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \ + echo "Icono redimensionado de release/icon.png (usando ImageMagick)"; \ + elif command -v convert >/dev/null 2>&1; then \ + convert "release/icon.png" -resize 256x256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \ + echo "Icono redimensionado de release/icon.png (usando ImageMagick legacy)"; \ + elif command -v ffmpeg >/dev/null 2>&1; then \ + ffmpeg -i "release/icon.png" -vf scale=256:256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png" -y -loglevel quiet; \ + echo "Icono redimensionado de release/icon.png (usando ffmpeg)"; \ + else \ + cp "release/icon.png" "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \ + echo "Icono copiado sin redimensionar (instalar ImageMagick o ffmpeg para redimensionado automatico)"; \ + fi; \ + elif [ -f "release/coffee.png" ]; then \ + cp "release/coffee.png" "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \ + echo "Icono copiado desde release/coffee.png"; \ + else \ + echo "Advertencia: No se encontró release/icon.png ni release/coffee.png - crear icono manualmente"; \ + fi + +# Crea script de instalación + @echo '#!/bin/bash' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + @echo 'echo "Instalando $(APP_NAME)..."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + @echo 'sudo cp -R * /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + @echo 'sudo ln -sf /opt/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop /usr/share/applications/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + @echo 'sudo ln -sf /opt/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png /usr/share/icons/hicolor/256x256/apps/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + @echo 'sudo update-desktop-database /usr/share/applications 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + @echo 'sudo gtk-update-icon-cache /usr/share/icons/hicolor 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + @echo 'echo "$(APP_NAME) instalado correctamente!"' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + @echo 'echo "Ya puedes encontrarlo en el menu de aplicaciones en la categoria Juegos."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + chmod +x "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh" + +# Crea script de desinstalación + @echo '#!/bin/bash' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + @echo 'echo "Desinstalando $(APP_NAME)..."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + @echo 'sudo rm -rf /opt/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + @echo 'sudo rm -f /usr/share/applications/$(TARGET_NAME).desktop' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + @echo 'sudo rm -f /usr/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + @echo 'sudo update-desktop-database /usr/share/applications 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + @echo 'sudo gtk-update-icon-cache /usr/share/icons/hicolor 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + @echo 'echo "$(APP_NAME) desinstalado correctamente."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + chmod +x "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh" + +# Empaqueta ficheros + $(RMFILE) "$(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz" + tar -czvf "$(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz" -C "$(RELEASE_FOLDER)" . + @echo "Release con integracion desktop creado: $(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz" + @echo "Para instalar: extraer y ejecutar ./$(TARGET_NAME)/install.sh" + +# Elimina la carpeta temporal + $(RMDIR) "$(RELEASE_FOLDER)" + raspi: @echo "Compilando para Raspberry Pi: $(TARGET_NAME)" $(CXX) $(APP_SOURCES) $(INCLUDES) -DVERBOSE $(CXXFLAGS) $(LDFLAGS) -o $(TARGET_FILE) @@ -340,7 +429,8 @@ help: @echo " windows_release - Crear release completo para Windows" @echo " linux - Compilar para Linux" @echo " linux_debug - Compilar debug para Linux" - @echo " linux_release - Crear release completo para Linux" + @echo " linux_release - Crear release basico para Linux" + @echo " linux_release_desktop - Crear release con integracion desktop para Linux" @echo " macos - Compilar para macOS" @echo " macos_debug - Compilar debug para macOS" @echo " macos_release - Crear release completo para macOS" @@ -351,4 +441,4 @@ help: @echo " show_version - Mostrar version actual ($(VERSION))" @echo " help - Mostrar esta ayuda" -.PHONY: windows windows_rec windows_debug windows_release macos macos_debug macos_release linux linux_debug linux_release raspi raspi_debug raspi_release anbernic no_audio show_version help \ No newline at end of file +.PHONY: windows windows_rec windows_debug windows_release macos macos_debug macos_release linux linux_debug linux_release linux_release_desktop raspi raspi_debug raspi_release anbernic no_audio show_version help \ No newline at end of file