From 3e3fe7b6b129d8de26e24391ca7ad324a114e659 Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Tue, 4 Mar 2025 20:53:41 +0100 Subject: [PATCH 1/3] toppler: add gcc14 patch --- pkgs/games/toppler/default.nix | 5 ++ pkgs/games/toppler/gcc14.patch | 85 ++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 pkgs/games/toppler/gcc14.patch diff --git a/pkgs/games/toppler/default.nix b/pkgs/games/toppler/default.nix index 0c9290dcc4d9..ae8e7ccff4d2 100644 --- a/pkgs/games/toppler/default.nix +++ b/pkgs/games/toppler/default.nix @@ -43,6 +43,11 @@ stdenv.mkDerivation (finalAttrs: { zlib ]; + patches = [ + # Based on https://gitlab.com/roever/toppler/-/merge_requests/3 + ./gcc14.patch + ]; + # GIMP needs a writable home preBuild = '' export HOME=$(mktemp -d) diff --git a/pkgs/games/toppler/gcc14.patch b/pkgs/games/toppler/gcc14.patch new file mode 100644 index 000000000000..9582fe694bb0 --- /dev/null +++ b/pkgs/games/toppler/gcc14.patch @@ -0,0 +1,85 @@ +diff --git a/Makefile b/Makefile +index a6a140f..fb9a8b9 100644 +--- a/Makefile ++++ b/Makefile +@@ -518,7 +518,7 @@ src/po/%.po: _build/toppler.pot + # TODO dist and windist.. + + .PHONY: install +-install: toppler.dat toppler $(TRANSLATIONFILES_INST) ++install: toppler $(TRANSLATIONFILES_INST) + $(INSTALL) -m755 -d $(DESTDIR)$(PKGDATADIR) + $(INSTALL) -m755 -d $(DESTDIR)$(BINDIR) + $(INSTALL) -m755 -d $(DESTDIR)$(MANDIR)/man6 +diff --git a/src/decl.cc b/src/decl.cc +index f80f83e..8a7bbd9 100644 +--- a/src/decl.cc ++++ b/src/decl.cc +@@ -22,6 +22,7 @@ + #include + + #include ++#include + #include + #include + #include +diff --git a/src/keyb.cc b/src/keyb.cc +index c3c13df..7d37847 100644 +--- a/src/keyb.cc ++++ b/src/keyb.cc +@@ -156,7 +156,7 @@ static void handleEvents(void) { + mouse_button = e.button.button; + break; + case SDL_QUIT: +- fprintf(stderr, _("Wheee!!\n").c_str()); ++ fprintf(stderr, "%s", _("Wheee!!\n").c_str()); + exit(0); + break; + +diff --git a/src/level.cc b/src/level.cc +index e1e2bb8..ac2faf3 100644 +--- a/src/level.cc ++++ b/src/level.cc +@@ -27,6 +27,7 @@ + #endif + + #include "decl.h" ++#include + + #ifdef _WIN32 + #include +diff --git a/src/main.cc b/src/main.cc +index 522d041..ffc8e40 100644 +--- a/src/main.cc ++++ b/src/main.cc +@@ -46,7 +46,7 @@ static bool parse_arguments(int argc, char *argv[]) { + if (parm >= '0' && parm <= '9') { + printf(_("Debug level is now %c.\n").c_str(), parm); + config.debug_level(parm - '0'); +- } else printf(_("Illegal debug level value, using default.\n").c_str()); ++ } else printf("%s", _("Illegal debug level value, using default.\n").c_str()); + } else { + printhelp(); + return false; +@@ -110,7 +110,7 @@ int main(int argc, char *argv[]) { + atexit(QuitFunction); + srand(time(0)); + startgame(); +- printf(_("Thanks for playing!\n").c_str()); ++ printf("%s", _("Thanks for playing!\n").c_str()); + SDL_ShowCursor(mouse); + SDL_Quit(); + } +diff --git a/src/screen.cc b/src/screen.cc +index eb18543..ce23571 100644 +--- a/src/screen.cc ++++ b/src/screen.cc +@@ -30,6 +30,8 @@ + #include "keyb.h" + #include "configuration.h" + ++#include ++ + static SDL_Surface *display = nullptr; + static SDL_Window *sdlWindow = nullptr; + static SDL_Renderer *sdlRenderer = nullptr; From ce22aab43ebf0035015bce620e8dc2f524f0b158 Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Tue, 4 Mar 2025 22:59:06 +0100 Subject: [PATCH 2/3] toppler: move to by-name tree --- pkgs/{games => by-name/to}/toppler/gcc14.patch | 0 .../toppler/default.nix => by-name/to/toppler/package.nix} | 0 pkgs/top-level/all-packages.nix | 4 ---- 3 files changed, 4 deletions(-) rename pkgs/{games => by-name/to}/toppler/gcc14.patch (100%) rename pkgs/{games/toppler/default.nix => by-name/to/toppler/package.nix} (100%) diff --git a/pkgs/games/toppler/gcc14.patch b/pkgs/by-name/to/toppler/gcc14.patch similarity index 100% rename from pkgs/games/toppler/gcc14.patch rename to pkgs/by-name/to/toppler/gcc14.patch diff --git a/pkgs/games/toppler/default.nix b/pkgs/by-name/to/toppler/package.nix similarity index 100% rename from pkgs/games/toppler/default.nix rename to pkgs/by-name/to/toppler/package.nix diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2825b1ea2ab5..e866ecbf712b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -16520,10 +16520,6 @@ with pkgs; tibia = pkgsi686Linux.callPackage ../games/tibia { }; - toppler = callPackage ../games/toppler { - SDL2_image = SDL2_image_2_0; - }; - speed_dreams = callPackage ../games/speed-dreams { # Torcs wants to make shared libraries linked with plib libraries (it provides static). # i686 is the only platform I know than can do that linking without plib built with -fPIC From 45693de57e779b302506ff958ea6bfd48f727f8f Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Tue, 4 Mar 2025 23:01:46 +0100 Subject: [PATCH 3/3] toppler: modernize derivation --- pkgs/by-name/to/toppler/package.nix | 50 +++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/pkgs/by-name/to/toppler/package.nix b/pkgs/by-name/to/toppler/package.nix index ae8e7ccff4d2..e1a118094795 100644 --- a/pkgs/by-name/to/toppler/package.nix +++ b/pkgs/by-name/to/toppler/package.nix @@ -2,14 +2,17 @@ lib, stdenv, fetchFromGitLab, + nix-update-script, + writableTmpDirAsHomeHook, + buildPackages, pkg-config, gettext, povray, imagemagick, gimp, - SDL2, + sdl2-compat, SDL2_mixer, SDL2_image, libpng, @@ -27,19 +30,31 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-ecEaELu52Nmov/BD9VzcUw6wyWeHJcsKQkEzTnaW330="; }; + strictDeps = true; + enableParallelBuilding = true; + + depsBuildBuild = [ + buildPackages.stdenv.cc + pkg-config + sdl2-compat + SDL2_image + libpng + zlib + ]; + nativeBuildInputs = [ pkg-config gettext povray imagemagick gimp + # GIMP needs a writable home + writableTmpDirAsHomeHook ]; buildInputs = [ - SDL2 + sdl2-compat SDL2_mixer - SDL2_image - libpng zlib ]; @@ -48,20 +63,29 @@ stdenv.mkDerivation (finalAttrs: { ./gcc14.patch ]; - # GIMP needs a writable home + makeFlags = [ + "CXX_NATIVE=$(CXX_FOR_BUILD)" + "PKG_CONFIG_NATIVE=$(PKG_CONFIG_FOR_BUILD)" + "PREFIX=${placeholder "out"}" + ]; + preBuild = '' - export HOME=$(mktemp -d) + # The `$` is escaped in `makeFlags` so using it for these parameters results in infinite recursion + makeFlagsArray+=(CXX=$CXX PKG_CONFIG=$PKG_CONFIG); ''; - makeFlags = [ "PREFIX=$(out)" ]; + passthru.updateScript = nix-update-script { }; - hardeningDisable = [ "format" ]; - - meta = with lib; { + meta = { description = "Jump and run game, reimplementation of Tower Toppler/Nebulus"; homepage = "https://gitlab.com/roever/toppler"; - license = licenses.gpl2Plus; - maintainers = with maintainers; [ fgaz ]; - platforms = platforms.all; + license = with lib.licenses; [ + gpl2Plus + # Makefile + gpl3Plus + ]; + maintainers = with lib.maintainers; [ fgaz ]; + platforms = lib.platforms.all; + mainProgram = "toppler"; }; })