git: 8904f97734e9 - main - games/taisei: Update to 1.4.6

From: Nuno Teixeira <eduardo_at_FreeBSD.org>
Date: Sun, 01 Nov 2026 18:14:49 UTC
The branch main has been updated by eduardo:

URL: https://cgit.FreeBSD.org/ports/commit/?id=8904f97734e9448478e56284fbf81e1913e14243

commit 8904f97734e9448478e56284fbf81e1913e14243
Author:     Nuno Teixeira <eduardo@FreeBSD.org>
AuthorDate: 2026-11-01 17:48:49 +0000
Commit:     Nuno Teixeira <eduardo@FreeBSD.org>
CommitDate: 2026-11-01 18:14:37 +0000

    games/taisei: Update to 1.4.6
    
    - Switch to SDL3 and to the release tarball (includes submodules)
    - Add libunibreak, zstd and gettext-tools dependencies; drop libzip
      and shaderc
    - Detect libcrypto via pkg-config, drop the OPENSSLLIB hack
    - Remove all local patches in favour of meson options
    - Add GLES option (shader transpiler, GLES 3.0 and SDL GPU renderers)
    - Install game data as loose files (package_data=disabled)
    - Assign maintainership to submitter
    
    ChangeLog:              https://taisei-project.org/news
    PR:                     297480
    Co-authored-by:         Shamaz Mazum <shamaz.mazum@gmail.com>
---
 games/taisei/Makefile                              | 87 +++++++++++++++-------
 games/taisei/distinfo                              |  8 +-
 games/taisei/files/patch-doc_meson.build           | 24 ------
 games/taisei/files/patch-meson.build               | 42 -----------
 games/taisei/files/patch-meson__options.txt        |  8 --
 .../files/patch-scripts_taiseilib_version.py       | 11 ---
 games/taisei/files/patch-src_meson.build           | 10 ---
 games/taisei/pkg-descr                             | 10 +--
 games/taisei/pkg-plist                             | 25 ++++++-
 9 files changed, 89 insertions(+), 136 deletions(-)

diff --git a/games/taisei/Makefile b/games/taisei/Makefile
index 96d958bee3e3..fda773b2df6a 100644
--- a/games/taisei/Makefile
+++ b/games/taisei/Makefile
@@ -1,47 +1,78 @@
 PORTNAME=	taisei
-PORTVERSION=	1.3.2
-DISTVERSIONPREFIX=	v
-PORTREVISION=	2
+DISTVERSION=	1.4.6
 CATEGORIES=	games
+MASTER_SITES=	https://github.com/taisei-project/taisei/releases/download/v${DISTVERSION}/
 
-MAINTAINER=	ports@FreeBSD.org
-COMMENT=	Open source Touhou clone
+MAINTAINER=	shamaz.mazum@gmail.com
+COMMENT=	Open source Touhou Project fan game (bullet hell shoot'em up)
 WWW=		https://taisei-project.org/ \
 		https://github.com/taisei-project/taisei
 
-LICENSE=	MIT CC0-1.0 PD
+LICENSE=	CC-BY-4.0 CC0-1.0 MIT PD
 LICENSE_COMB=	multi
-LICENSE_FILE=	${WRKSRC}/COPYING
+LICENSE_FILE_MIT=	${WRKSRC}/COPYING.txt
 
-LIB_DEPENDS=	libpng.so:graphics/png \
-		libzip.so:archivers/libzip \
-		libwebp.so:graphics/webp \
-		libfreetype.so:print/freetype2 \
+BUILD_DEPENDS=	cglm>0:math/cglm
+LIB_DEPENDS=	libfreetype.so:print/freetype2 \
 		libopusfile.so:audio/opusfile \
-		libcglm.so:math/cglm
-BUILD_DEPENDS=	glslc:graphics/shaderc
+		libpng16.so:graphics/png \
+		libunibreak.so:textproc/libunibreak \
+		libwebpdecoder.so:graphics/webp \
+		libzstd.so:archivers/zstd
 
-USE_GITHUB=	yes
-GH_ACCOUNT=	taisei-project
-GH_TUPLE=	taisei-project:SDL_GameControllerDB:74e31d7:gamecontrollerdb/external/gamecontrollerdb
+USES=		compiler:c11 desktop-file-utils gettext-tools:build meson \
+		pkgconfig python:build sdl shared-mime-info shebangfix ssl \
+		tar:xz
+USE_SDL=	sdl3
 
-USES=		compiler:c11 desktop-file-utils meson pkgconfig \
-		python:build sdl ssl shebangfix shared-mime-info
 SHEBANG_FILES=	scripts/*.py
-MESON_ARGS=	-Dversion_fallback=${PORTVERSION} -Db_lto=false
-MESON_ARGS+=	--wrap-mode=nofallback
-MESON_ARGS+=	-DOPENSSLLIB="${OPENSSLLIB}"
-USE_SDL=	sdl2 ttf2 mixer2
 
-PORTDOCS=	*
+# - package_data=disabled installs the game data as loose files under
+#   DATADIR instead of a zstd-compressed zip, so py-backports.zstd is
+#   not needed at build time
+# - LTO causes a crash during the stage 3 boss fight:
+#   https://github.com/taisei-project/taisei/issues/378
+# - shader_transpiler_dxbc is Windows only, but must be disabled
+#   explicitly because USES=meson sets auto_features=enabled
+# - allocator=libc: use jemalloc from libc instead of mimalloc
+MESON_ARGS=	--wrap-mode=nofallback \
+		-Dallocator=libc \
+		-Db_lto=false \
+		-Db_pch=false \
+		-Ddefault_library=shared \
+		-Ddeveloper=false \
+		-Dforce_vendored_shader_tools=false \
+		-Dgamemode=disabled \
+		-Dinstall_freedesktop=enabled \
+		-Dinstall_macos_bundle=disabled \
+		-Dinstall_relocatable=disabled \
+		-Dkoishi:default_library=static \
+		-Dpackage_data=disabled \
+		-Dshader_transpiler_dxbc=disabled \
+		-Dtests=disabled \
+		-Duse_libcrypto=enabled \
+		-Duse_libpng=enabled \
+		-Dvalidate_glsl=disabled
+
 PORTDATA=	*
+PORTDOCS=	*
+
+OPTIONS_DEFINE=		DOCS GLES
+OPTIONS_DEFAULT=	GLES
+
+GLES_DESC=	OpenGL ES 3.0 and SDL GPU renderers (shader transpiler)
 
-OPTIONS_DEFINE=	DOCS
+DOCS_BUILD_DEPENDS=	rst2html5:textproc/py-docutils@${PY_FLAVOR} \
+			${PYTHON_PKGNAMEPREFIX}pygments>0:textproc/py-pygments@${PY_FLAVOR}
+DOCS_MESON_ENABLED=	docs
 
-DOCS_BUILD_DEPENDS=	rst2html5:textproc/py-docutils
-DOCS_MESON_TRUE=	docs
+GLES_BUILD_DEPENDS=	glslang>0:graphics/glslang
+GLES_LIB_DEPENDS=	libspirv-cross-c-shared.so:graphics/spirv-cross
 
-post-install:
-	@${RM} ${STAGEDIR}${DOCSDIR}/COPYING.txt
+# glslang is located via its CMake package config
+GLES_USES=		cmake:indirect
+GLES_MESON_ENABLED=	shader_transpiler
+GLES_MESON_ON=		-Dr_gles30=enabled -Dr_sdlgpu=enabled
+GLES_MESON_OFF=		-Dr_gles30=disabled -Dr_sdlgpu=disabled
 
 .include <bsd.port.mk>
diff --git a/games/taisei/distinfo b/games/taisei/distinfo
index c89a9762d09f..1d5562d921f3 100644
--- a/games/taisei/distinfo
+++ b/games/taisei/distinfo
@@ -1,5 +1,3 @@
-TIMESTAMP = 1620672730
-SHA256 (taisei-project-taisei-v1.3.2_GH0.tar.gz) = bee5710d5aefcdf99e334909ce18eb22f9b2f73f4b5bd3ec3e5daad3aadc8479
-SIZE (taisei-project-taisei-v1.3.2_GH0.tar.gz) = 70827325
-SHA256 (taisei-project-SDL_GameControllerDB-74e31d7_GH0.tar.gz) = 79ccf0472162c9c1b44aeb0e3b2c122fbaaaed2f5b33c653d29b293f3121068f
-SIZE (taisei-project-SDL_GameControllerDB-74e31d7_GH0.tar.gz) = 23577
+TIMESTAMP = 1793484755
+SHA256 (taisei-1.4.6.tar.xz) = 18d03c67dcc8c7faff22e8defdafc3a734b46c591618d1a678e6e914846889d9
+SIZE (taisei-1.4.6.tar.xz) = 307144568
diff --git a/games/taisei/files/patch-doc_meson.build b/games/taisei/files/patch-doc_meson.build
deleted file mode 100644
index 3e5e83fc2468..000000000000
--- a/games/taisei/files/patch-doc_meson.build
+++ /dev/null
@@ -1,24 +0,0 @@
---- doc/meson.build.orig	2019-09-28 18:31:40 UTC
-+++ doc/meson.build
-@@ -1,20 +1,7 @@
- 
- if install_docs
--    rst2html_variants = []
--
--    # This is *completely* ridiculous, but apparently this thing has THAT many faces.
--    basenames = ['rst2html5', 'rst2html', 'rst2html4']
--    suffixes = ['', '-3', '3', '-docutils']
--
--    foreach basename : basenames
--        foreach suffix : suffixes
--            variant = '@0@@1@'.format(basename, suffix)
--            rst2html_variants += [variant, '@0@.py'.format(variant)]
--        endforeach
--    endforeach
--
-     rst2html5 = find_program(
--        rst2html_variants,
-+        'rst2html5',
-         required : false
-     )
- 
diff --git a/games/taisei/files/patch-meson.build b/games/taisei/files/patch-meson.build
deleted file mode 100644
index 0b0cfd60cf7a..000000000000
--- a/games/taisei/files/patch-meson.build
+++ /dev/null
@@ -1,42 +0,0 @@
-* Make all depends required, thus deterministic.
-
-* Redefine libcrypto dependency - there are no means of detection for
-system OpenSSL on FreeBSD (e.g. no pkgconfig file), so we need to
-point the build right to the library. Additionally, since OpenSSL
-may also come from ports, respect OPENSSLLIB passed from the framework
-to pick the right library. This works with system OpenSSL, _may_
-work with OpenSSL from ports and will probably _not_ work with
-OpenSSL form ports where OPENSSL_DEFAULT is set to base, as it will
-still pick includes from /usr/local.
-
-* Make sure to never detect gamemode which is missing on FreeBSD anyway.
-
---- meson.build.orig	2021-04-30 18:54:50 UTC
-+++ meson.build
-@@ -142,19 +142,19 @@ endif
- static = get_option('static') or ['emscripten', 'nx'].contains(host_machine.system())
- 
- dep_freetype    = dependency('freetype2',                           required : true,  static : static, fallback : ['freetype', 'freetype_dep'])
--dep_opusfile    = dependency('opusfile',                            required : false, static : static, fallback : ['opusfile', 'opusfile_dep'])
-+dep_opusfile    = dependency('opusfile',                            required : true, static : static, fallback : ['opusfile', 'opusfile_dep'])
- dep_png         = dependency('libpng',         version : '>=1.5',   required : true,  static : static, fallback : ['libpng', 'png_dep'])
- dep_sdl2        = dependency('sdl2',           version : '>=2.0.6', required : true,  static : static, fallback : ['sdl2', 'sdl2_dep'])
--dep_sdl2_mixer  = dependency('SDL2_mixer',     version : '>=2.0.4', required : false, static : static, fallback : ['sdl2_mixer', 'sdl2_mixer_dep'])
-+dep_sdl2_mixer  = dependency('SDL2_mixer',     version : '>=2.0.4', required : true, static : static, fallback : ['sdl2_mixer', 'sdl2_mixer_dep'])
- dep_webp        = dependency('libwebp',        version : '>=0.5',   required : true,  static : static, fallback : ['libwebp', 'webpdecoder_dep'])
--dep_webpdecoder = dependency('libwebpdecoder', version : '>=0.5',   required : false, static : static)
--dep_zip         = dependency('libzip',         version : '>=1.2',   required : false, static : static, fallback : ['libzip', 'libzip_dep'])
-+dep_webpdecoder = dependency('libwebpdecoder', version : '>=0.5',   required : true, static : static)
-+dep_zip         = dependency('libzip',         version : '>=1.2',   required : true, static : static, fallback : ['libzip', 'libzip_dep'])
- dep_zlib        = dependency('zlib',                                required : true,  static : static, fallback : ['zlib', 'zlib_dep'])
- dep_cglm        = dependency('cglm',           version : '>=0.7.8', required : true,  static : static, fallback : ['cglm', 'cglm_dep'])
--dep_crypto      = dependency('libcrypto',                           required : false, static : static)
--dep_gamemode    = dependency('gamemode',                            required : false, static : static)
-+dep_crypto      = cc.find_library('crypto', dirs : get_option('OPENSSLLIB'), required : true)
-+dep_gamemode    = dependency('', required : false)
- 
--dep_m           = cc.find_library('m', required : false)
-+dep_m           = cc.find_library('m', required : true)
- 
- dep_glad        = subproject('glad').get_variable('glad_dep')
- 
diff --git a/games/taisei/files/patch-meson__options.txt b/games/taisei/files/patch-meson__options.txt
deleted file mode 100644
index a558ef8a612c..000000000000
--- a/games/taisei/files/patch-meson__options.txt
+++ /dev/null
@@ -1,8 +0,0 @@
---- meson_options.txt.orig	2021-04-30 18:54:50 UTC
-+++ meson_options.txt
-@@ -197,3 +197,5 @@ option(
-     value : true,
-     description : 'Allow use of some GNU C extensions (if supported by compiler)'
- )
-+
-+option('OPENSSLLIB', type : 'string')
diff --git a/games/taisei/files/patch-scripts_taiseilib_version.py b/games/taisei/files/patch-scripts_taiseilib_version.py
deleted file mode 100644
index 4ccdff9f20c2..000000000000
--- a/games/taisei/files/patch-scripts_taiseilib_version.py
+++ /dev/null
@@ -1,11 +0,0 @@
---- scripts/taiseilib/version.py.orig	2021-04-30 18:54:50 UTC
-+++ scripts/taiseilib/version.py
-@@ -57,6 +57,8 @@ def get(*, rootdir=None, fallback=None, args=common.de
-     rootdir = rootdir if rootdir is not None else args.rootdir
-     fallback = fallback if fallback is not None else args.fallback_version
- 
-+    return Version(fallback)
-+
-     if rootdir is None:
-         import pathlib
-         rootdir = pathlib.Path(__file__).parent
diff --git a/games/taisei/files/patch-src_meson.build b/games/taisei/files/patch-src_meson.build
deleted file mode 100644
index 9d4f262f6b1e..000000000000
--- a/games/taisei/files/patch-src_meson.build
+++ /dev/null
@@ -1,10 +0,0 @@
---- src/meson.build.orig	2021-04-30 18:54:50 UTC
-+++ src/meson.build
-@@ -305,7 +305,6 @@ else
-     taisei = executable(taisei_basename, taisei_src, version_deps,
-         dependencies : taisei_deps,
-         c_args : taisei_c_args,
--        c_pch : 'pch/taisei_pch.h',
-         gui_app : not get_option('win_console'),
-         install : true,
-         install_dir : bindir,
diff --git a/games/taisei/pkg-descr b/games/taisei/pkg-descr
index 66c97c325bad..b7778bb04314 100644
--- a/games/taisei/pkg-descr
+++ b/games/taisei/pkg-descr
@@ -1,6 +1,6 @@
-Taisei (lit. Occident) is a fan-made Open Source clone of the Touhou
-series, written in C using SDL/OpenGL.
+Taisei Project is a free and open-source fan game set in the world of
+the Touhou Project series. It is a top-down vertical-scrolling curtain
+fire shooting game (STG), also known as "bullet hell" or "danmaku".
 
-Basically, it is a shoot'em up game with lots of bullets (the genre
-is literally called bullet hell). The game is mostly done and very
-playable, so feel free to give it a try!
+It is not a clone of Touhou: it tells an original story with its own
+music, art, gameplay mechanics and codebase.
diff --git a/games/taisei/pkg-plist b/games/taisei/pkg-plist
index fad367a0e6b4..5fe75dca57b0 100644
--- a/games/taisei/pkg-plist
+++ b/games/taisei/pkg-plist
@@ -1,6 +1,25 @@
 bin/taisei
-share/applications/taisei-replay-viewer.desktop
-share/applications/taisei.desktop
+share/applications/org.taisei_project.Taisei.desktop
+share/applications/org.taisei_project.Taisei.tsr.desktop
+share/icons/hicolor/128x128/apps/org.taisei_project.Taisei.png
 share/icons/hicolor/128x128/apps/taisei.png
+share/icons/hicolor/128x128/mimetypes/org.taisei_project.Taisei.tsr.png
+share/icons/hicolor/128x128/mimetypes/taisei-replay.png
+share/icons/hicolor/256x256/apps/org.taisei_project.Taisei.png
+share/icons/hicolor/256x256/apps/taisei.png
+share/icons/hicolor/256x256/mimetypes/org.taisei_project.Taisei.tsr.png
 share/icons/hicolor/256x256/mimetypes/taisei-replay.png
-share/mime/packages/taisei.xml
+share/icons/hicolor/32x32/apps/org.taisei_project.Taisei.png
+share/icons/hicolor/32x32/apps/taisei.png
+share/icons/hicolor/32x32/mimetypes/org.taisei_project.Taisei.tsr.png
+share/icons/hicolor/32x32/mimetypes/taisei-replay.png
+share/icons/hicolor/512x512/apps/org.taisei_project.Taisei.png
+share/icons/hicolor/512x512/apps/taisei.png
+share/icons/hicolor/512x512/mimetypes/org.taisei_project.Taisei.tsr.png
+share/icons/hicolor/512x512/mimetypes/taisei-replay.png
+share/icons/hicolor/64x64/apps/org.taisei_project.Taisei.png
+share/icons/hicolor/64x64/apps/taisei.png
+share/icons/hicolor/64x64/mimetypes/org.taisei_project.Taisei.tsr.png
+share/icons/hicolor/64x64/mimetypes/taisei-replay.png
+share/metainfo/org.taisei_project.Taisei.appdata.xml
+share/mime/packages/org.taisei_project.Taisei.xml