tome4: fix build, modernize (#454928)

This commit is contained in:
Masum Reza
2025-10-28 17:09:35 +00:00
committed by GitHub
4 changed files with 199 additions and 40 deletions
@@ -0,0 +1,24 @@
From e0c17a8665250b3e3e7f4938f7b256ff50b78fc8 Mon Sep 17 00:00:00 2001
From: Tom van Dijk <18gatenmaker6@gmail.com>
Date: Thu, 23 Oct 2025 15:01:01 +0200
Subject: [PATCH 1/3] web missing include
---
src/web.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/web.c b/src/web.c
index f12eebb..940aaf9 100644
--- a/src/web.c
+++ b/src/web.c
@@ -32,6 +32,7 @@
#include "te4web.h"
#include "web-external.h"
#include "lua_externs.h"
+#include <unistd.h>
/*
* Grab web browser methods -- availabe only here
--
2.51.0
@@ -0,0 +1,24 @@
From a14890a8a7080c73cac10ff31365833b179c0464 Mon Sep 17 00:00:00 2001
From: Tom van Dijk <18gatenmaker6@gmail.com>
Date: Thu, 23 Oct 2025 15:45:03 +0200
Subject: [PATCH 2/3] zlib missing include
---
src/zlib/gzguts.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/zlib/gzguts.h b/src/zlib/gzguts.h
index 990a4d2..7c89751 100644
--- a/src/zlib/gzguts.h
+++ b/src/zlib/gzguts.h
@@ -21,6 +21,7 @@
#include <stdio.h>
#include "zlib.h"
#ifdef STDC
+# include <unistd.h>
# include <string.h>
# include <stdlib.h>
# include <limits.h>
--
2.51.0
@@ -0,0 +1,71 @@
From ed9f9819c3a0d6b8e92f66aafa6324eb4b310282 Mon Sep 17 00:00:00 2001
From: Tom van Dijk <18gatenmaker6@gmail.com>
Date: Thu, 23 Oct 2025 15:53:06 +0200
Subject: [PATCH 3/3] incompatible pointer types
---
src/display_sdl.c | 2 +-
src/physfs/archivers/bind_physfs.c | 2 +-
src/physfs/physfs.c | 3 ++-
src/tgl.h | 2 +-
4 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/display_sdl.c b/src/display_sdl.c
index 61b2f0e..c533c8b 100644
--- a/src/display_sdl.c
+++ b/src/display_sdl.c
@@ -78,5 +78,5 @@ GLuint gl_c_shader = 0;
int nb_draws = 0;
int gl_c_vertices_nb = 0, gl_c_texcoords_nb = 0, gl_c_colors_nb = 0;
GLfloat *gl_c_vertices_ptr = NULL;
-GLfloat *gl_c_texcoords_ptr = NULL;
+void *gl_c_texcoords_ptr = NULL;
GLfloat *gl_c_colors_ptr = NULL;
diff --git a/src/physfs/archivers/bind_physfs.c b/src/physfs/archivers/bind_physfs.c
index d02d323..c0d77c1 100644
--- a/src/physfs/archivers/bind_physfs.c
+++ b/src/physfs/archivers/bind_physfs.c
@@ -222,7 +222,7 @@ static fvoid *doOpen(dvoid *opaque, const char *name,
static fvoid *BIND_PHYSFS_openRead(dvoid *opaque, const char *fnm, int *exist)
{
- return(doOpen(opaque, fnm, PHYSFS_openRead, exist));
+ return(doOpen(opaque, fnm, (void * (*)(const char *)) PHYSFS_openRead, exist));
} /* BIND_PHYSFS_openRead */
diff --git a/src/physfs/physfs.c b/src/physfs/physfs.c
index 03eb86d..32e2c91 100644
--- a/src/physfs/physfs.c
+++ b/src/physfs/physfs.c
@@ -68,12 +68,13 @@ extern const PHYSFS_Archiver __PHYSFS_Archiver_MVL;
extern const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_WAD;
extern const PHYSFS_Archiver __PHYSFS_Archiver_WAD;
extern const PHYSFS_Archiver __PHYSFS_Archiver_DIR;
+extern const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_BIND_PHYSFS;
extern const PHYSFS_Archiver __PHYSFS_Archiver_BIND_PHYSFS;
static const PHYSFS_ArchiveInfo *supported_types[] =
{
- &__PHYSFS_Archiver_BIND_PHYSFS,
+ &__PHYSFS_ArchiveInfo_BIND_PHYSFS,
#if (defined PHYSFS_SUPPORTS_ZIP)
&__PHYSFS_ArchiveInfo_SUBZIP,
&__PHYSFS_ArchiveInfo_ZIP,
diff --git a/src/tgl.h b/src/tgl.h
index e2ec026..f905033 100644
--- a/src/tgl.h
+++ b/src/tgl.h
@@ -71,7 +71,7 @@ extern int nb_draws;
extern int gl_c_vertices_nb, gl_c_texcoords_nb, gl_c_colors_nb;
extern GLfloat *gl_c_vertices_ptr;
-extern GLfloat *gl_c_texcoords_ptr;
+extern void *gl_c_texcoords_ptr;
extern GLfloat *gl_c_colors_ptr;
#define glVertexPointer(nb, t, v, p) \
{ \
--
2.51.0
+80 -40
View File
@@ -1,11 +1,12 @@
{
lib,
stdenv,
fetchurl,
fetchFromGitLab,
fetchpatch2,
copyDesktopItems,
makeDesktopItem,
makeWrapper,
premake4,
unzip,
openal,
libpng,
libvorbis,
@@ -13,39 +14,53 @@
SDL2,
SDL2_image,
SDL2_ttf,
xorg,
nix-update-script,
}:
stdenv.mkDerivation rec {
let
sdlInputs = [
SDL2
SDL2_ttf
SDL2_image
];
in
stdenv.mkDerivation (finalAttrs: {
pname = "tome4";
version = "1.7.6";
src = fetchurl {
url = "https://te4.org/dl/t-engine/t-engine4-src-${version}.tar.bz2";
sha256 = "sha256-mJ3qAIA/jNyt4CT0ZH1IC7GsDUN8JUKSwHVJwnKkaAw=";
};
desktop = makeDesktopItem {
desktopName = pname;
name = pname;
exec = "@out@/bin/${pname}";
icon = pname;
comment = "An open-source, single-player, role-playing roguelike game set in the world of Eyal.";
type = "Application";
categories = [
"Game"
"RolePlaying"
];
genericName = pname;
# Official source according to https://te4.org/wiki/How_to_compile
src = fetchFromGitLab {
domain = "git.net-core.org";
owner = "tome";
repo = "t-engine4";
tag = "tome-${finalAttrs.version}";
hash = "sha256-v0YPbmaOqKYgFkOe/X0FCirucrMo2UGAyhZ7MFj+nsU=";
};
prePatch = ''
# http://forums.te4.org/viewtopic.php?f=42&t=49478&view=next#p234354
sed -i 's|#include <GL/glext.h>||' src/tgl.h
substituteInPlace src/tgl.h \
--replace-fail "#include <GL/glext.h>" ""
'';
patches = [
# https://forums.te4.org/viewtopic.php?f=69&t=39859&p=168681&hilit=luaopen_shaders#p168681
(fetchpatch2 {
url = "https://gist.githubusercontent.com/hasufell/cb3b10f834e891d90f83/raw/cb4adda13868f6b94585575db4f8df70877ae45a/tome4-1.1.3-fix-implicit-declaration.patch";
hash = "sha256-g47N/bi2/DDKqaEkfTaGp9ItS57QVnObzMDWXqrCjWE=";
})
# unistd required for execv
./0001-web-missing-include.patch
# unistd required for read and close
./0002-zlib-missing-include.patch
./0003-incompatible-pointer-types.patch
];
nativeBuildInputs = [
copyDesktopItems
makeWrapper
unzip
premake4
];
@@ -56,52 +71,77 @@ stdenv.mkDerivation rec {
openal
libpng
libvorbis
SDL2
SDL2_ttf
SDL2_image
];
xorg.libX11
xorg.xorgproto
]
++ sdlInputs;
# disable parallel building as it caused sporadic build failures
enableParallelBuilding = false;
env.NIX_CFLAGS_COMPILE = "-I${lib.getInclude SDL2}/include/SDL2 -I${SDL2_image}/include/SDL2 -I${SDL2_ttf}/include/SDL2";
env = {
NIX_CFLAGS_COMPILE =
lib.concatMapStringsSep " " (i: "-I${lib.getInclude i}/include/SDL2") sdlInputs
+ " "
+ lib.concatMapStringsSep " " (i: "-I${lib.getInclude i}") finalAttrs.buildInputs;
NIX_CFLAGS_LINK = lib.concatMapStringsSep " " (i: "-L${lib.getLib i}/lib") finalAttrs.buildInputs;
};
makeFlags = [ "config=release" ];
desktopItems = [
(makeDesktopItem {
desktopName = "Tales of Maj'Eyal";
name = "tome4";
exec = "tome4";
icon = "te4-icon";
comment = "An open-source, single-player, role-playing roguelike game set in the world of Eyal.";
type = "Application";
categories = [
"Game"
"RolePlaying"
];
genericName = "2D roguelike RPG";
})
];
# The wrapper needs to cd into the correct directory as tome4's detection of
# the game asset root directory is faulty.
installPhase = ''
runHook preInstall
dir=$out/share/${pname}
dir=$out/share/tome4
install -Dm755 t-engine $dir/t-engine
cp -r bootstrap game $dir
makeWrapper $dir/t-engine $out/bin/${pname} \
makeWrapper $dir/t-engine $out/bin/tome4 \
--chdir "$dir"
install -Dm755 ${desktop}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
substituteInPlace $out/share/applications/${pname}.desktop \
--subst-var out
install -Dm644 game/engines/default/data/gfx/te4-icon.png -t $out/share/icons/hicolor/64x64
unzip -oj -qq game/engines/te4-${version}.teae data/gfx/te4-icon.png
install -Dm644 te4-icon.png $out/share/icons/hicolor/64x64/${pname}.png
install -Dm644 -t $out/share/doc/${pname} CONTRIBUTING COPYING COPYING-MEDIA CREDITS
install -Dm644 -t $out/share/doc/tome4 CONTRIBUTING COPYING COPYING-MEDIA CREDITS
runHook postInstall
'';
meta = with lib; {
passthru.updateScript = nix-update-script {
extraArgs = [
"--version-regex"
"tome-(.*)"
];
};
meta = {
description = "Tales of Maj'eyal (rogue-like game)";
mainProgram = "tome4";
homepage = "https://te4.org/";
license = licenses.gpl3;
maintainers = with maintainers; [ peterhoeg ];
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [ peterhoeg ];
platforms = [
"i686-linux"
"x86_64-linux"
];
};
}
})