1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-05-22 17:16:01 +02:00

gnu: stepmania: Update to 5.1.0-b2-1.d55acb1.

* gnu/packages/patches/stepmania-ffmpeg-compat.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it here.
* gnu/packages/games.scm (stepmania): Update to 5.1.0-b2-1.d55acb1.
[source]<patches>: Add “stepmania-ffmpeg-compat.patch”.
<snippet>: Adjust unbundling.
[arguments]<#:configure-flags>: Add “-DWITH_SYSTEM_GLEW=1”,
“-DWITH_SYSTEM_JSONCPP=1”, “-DWITH_SYSTEM_JPEG=1”, “-DWITH_SYSTEM_MAD=1”,
“-DWITH_SYSTEM_OGG=1”, “-DWITH_SYSTEM_PCRE=1”, “-DWITH_SYSTEM_PNG=1”,
“-DWITH_SYSTEM_TOMMATH=1”, “-DWITH_SYSTEM_TOMCRYPT=1” and
“-DWITH_SYSTEM_ZLIB=1”.
<#:phases>: Remove ‘unbundle-libpng’.
[inputs]: Drop labels.  Sort alphabetically.
Replace ffmpeg-for-stepmania with ffmpeg-6.
Add libtommath and libtomcrypt.

Change-Id: I577fe1c15f906c3c67d1ae71a1e085e3fd05aef2
Signed-off-by: 宋文武 <iyzsong@member.fsf.org>
This commit is contained in:
Liliana Marie Prikler
2025-10-04 11:52:54 +02:00
committed by 宋文武
parent 59910f1834
commit 3191948625
3 changed files with 227 additions and 143 deletions
+1
View File
@@ -2084,6 +2084,7 @@ dist_patch_DATA = \
%D%/packages/patches/smalltalk-multiplication-overflow.patch \
%D%/packages/patches/soci-mysql-ddl-types.patch \
%D%/packages/patches/sqlite-hurd.patch \
%D%/packages/patches/stepmania-ffmpeg-compat.patch \
%D%/packages/patches/stk-5.0.1-fix-typo.patch \
%D%/packages/patches/strace-readlink-tests.patch \
%D%/packages/patches/sunxi-tools-remove-sys-io.patch \
+177 -143
View File
@@ -10293,154 +10293,188 @@ via the in-game download manager.")
(license (list license:gpl2+))))
(define-public stepmania
(package
(name "stepmania")
(version "5.1.0-b2")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/stepmania/stepmania")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0a7y9l7xm510vgnpmj1is7p9m6d6yd0fcaxrjcickz295k5w3rdn"))
(modules '((guix build utils)))
(snippet
'(begin
;; Remove song files, which are licensed under a non-commercial
;; clause, and a course pointing to them.
(for-each delete-file-recursively
'("Songs/StepMania 5/Goin' Under"
"Songs/StepMania 5/MechaTribe Assault"
"Songs/StepMania 5/Springtime"))
(for-each delete-file '("Courses/Default/Jupiter.crs"
"Courses/Default/Jupiter.png"))
;; Unbundle libpng.
(substitute* "extern/CMakeLists.txt"
(("include\\(CMakeProject-png.cmake\\)") ""))
(delete-file-recursively "extern/libpng")
;; Include missing <ctime> header.
(substitute* "src/arch/ArchHooks/ArchHooks.h"
(("#define ARCH_HOOKS_H" all)
(string-append all "\n#include <ctime> // struct tm")))))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f ;FIXME: couldn't find how to run tests
#:build-type "Release"
#:out-of-source? #f ;for the 'install-desktop' phase
#:configure-flags
(list "-DWITH_SYSTEM_FFMPEG=1"
;; SSE instructions are available on Intel systems only.
,@(if (any (cute string-prefix? <> (or (%current-target-system)
(%current-system)))
'("x86_64" "i686"))
'()
'("-DWITH_SSE2=NO"))
;; Configuration cannot find GTK2 without the two following
;; flags.
(string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
(assoc-ref %build-inputs "gtk+")
"/lib/gtk-2.0/include")
(string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
(assoc-ref %build-inputs "glib")
"/lib/glib-2.0/include"))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'ensure-application-files-can-be-found
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(substitute* "src/arch/LoadingWindow/LoadingWindow_Gtk.cpp"
(("RageFileManagerUtil::sDirOfExecutable \\+ \"/\" \\+ \"GtkModule.so\"")
(string-append "\"" out
"/share/stepmania/GtkModule.so\"")))
(substitute* "src/arch/ArchHooks/ArchHooks_Unix.cpp"
(("Root = sDirOfExecutable")
(string-append "Root = \"" out "/share/stepmania/\""))
(("sDirOfExecutable \\+ \"/(Packages|Songs)\"" _ dir)
(string-append "\"" out "/share/stepmania/" dir "\"")))
(substitute* "src/RageFileManager.cpp"
(("RageFileManagerUtil::sDirOfExecutable \\+ \"/\"")
(string-append "\"" out "/share/stepmania/\""))))
#t))
(add-after 'unpack 'fix-install-subdir
;; Installation would be done in "%out/stepmania-X.Y", but we
;; prefer the more common layout "%out/share/stepmania".
(lambda _
(substitute* "src/CMakeLists.txt"
(("\"stepmania-.*?\"") "\"share/stepmania\""))
#t))
(add-after 'unpack 'unbundle-libpng
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "src/CMakeLists.txt"
(("\\$\\{SM_EXTERN_DIR\\}/libpng/include")
(string-append (assoc-ref inputs "libpng") "/include")))
#t))
(add-after 'install 'install-executable
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(exe (string-append out "/share/stepmania/stepmania")))
(mkdir-p bin)
(symlink exe (string-append bin "/stepmania"))
#t)))
(add-after 'install-executable 'install-desktop
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(share (string-append out "/share"))
(applications (string-append share "/applications"))
(icons (string-append share "/icons")))
(install-file "stepmania.desktop" applications)
(mkdir-p icons)
(copy-recursively "icons" icons)
#t)))
;; Move documentation in a more usual place, i.e.,
;; "%out/share/doc/stepmania/".
(add-after 'install-desktop 'install-doc
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(share (string-append out "/share")))
(with-directory-excursion share
(mkdir-p "doc")
(symlink "../stepmania/Docs" "doc/stepmania"))
#t))))))
(native-inputs
(list pkg-config yasm))
(inputs
`(("alsa-lib" ,alsa-lib)
;; Per upstream, StepMania is only guaranteed to work with a very
;; specific FFmpeg version, which is included in the repository as
;; a Git submodule. This particular version requirement usually
;; changes every few years.
("ffmpeg" ,ffmpeg-for-stepmania)
("glib" ,glib)
("glew" ,glew)
("gtk+" ,gtk+-2)
("jsoncpp" ,jsoncpp)
("libpng" ,libpng)
("libjpeg" ,libjpeg-turbo)
("libmad" ,libmad)
("libogg" ,libogg)
("libva" ,libva)
("libvorbis" ,libvorbis)
("libxinerama" ,libxinerama)
("libxrandr" ,libxrandr)
("mesa" ,mesa)
("pcre" ,pcre)
("pulseaudio" ,pulseaudio)
("sdl" ,sdl2)
("udev" ,eudev)
("zlib" ,zlib)))
(synopsis "Advanced rhythm game designed for both home and arcade use")
(description "StepMania is a dance and rhythm game. It features 3D
;; Last release on July 24, 2018.
(let ((commit "d55acb1ba26f1c5b5e3048d6d6c0bd116625216f")
(revision "1"))
(package
(name "stepmania")
(version (git-version "5.1.0-b2" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/stepmania/stepmania")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"00fxwlfvsmsyll1wp5dp05dxwi81w8l8rb7ms735zqjimm1zdlg3"))
(patches (search-patches "stepmania-ffmpeg-compat.patch"))
(modules '((guix build utils)
(ice-9 ftw)))
(snippet
'(begin
;; Remove song files, which are licensed under a non-commercial
;; clause, and a course pointing to them.
(for-each delete-file-recursively
'("Songs/StepMania 5/Goin' Under"
"Songs/StepMania 5/MechaTribe Assault"
"Songs/StepMania 5/Springtime"))
(for-each delete-file '("Courses/Default/Jupiter.crs"
"Courses/Default/Jupiter.png"))
;; Unbundle external sources, keep CMakeProject-* files for
;; compatibility, lua and libmmmagic.
(with-directory-excursion "extern"
(for-each
(lambda (f)
(unless (member f '("." ".."
"CMakeLists.txt"
"CMakeProject-glew.cmake"
"CMakeProject-json.cmake"
"CMakeProject-jpeg.cmake"
"CMakeProject-lua.cmake"
"CMakeProject-mad.cmake"
"CMakeProject-mmmagic.cmake"
"CMakeProject-pcre.cmake"
"CMakeProject-png.cmake"
"CMakeProject-tomcrypt.cmake"
"CMakeProject-tommath.cmake"
"CMakeProject-zlib.cmake"
"libmmmagic"
"lua-5.1"))
(delete-file-recursively f)))
(scandir ".")))
;; Fix up #include directives.
(substitute* "src/RageUtil.cpp"
(("\\.\\./extern/pcre/pcre\\.h") "pcre.h"))
;; Include missing <ctime> header.
(substitute* "src/arch/ArchHooks/ArchHooks.h"
(("#define ARCH_HOOKS_H" all)
(string-append all "\n#include <ctime> // struct tm")))))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f ;FIXME: couldn't find how to run tests
#:build-type "Release"
#:out-of-source? #f ;for the 'install-desktop' phase
#:configure-flags
(list "-DWITH_SYSTEM_FFMPEG=1"
"-DWITH_SYSTEM_GLEW=1"
"-DWITH_SYSTEM_JSONCPP=1"
"-DWITH_SYSTEM_JPEG=1"
"-DWITH_SYSTEM_MAD=1"
"-DWITH_SYSTEM_OGG=1"
"-DWITH_SYSTEM_PCRE=1"
"-DWITH_SYSTEM_PNG=1"
"-DWITH_SYSTEM_TOMMATH=1"
"-DWITH_SYSTEM_TOMCRYPT=1"
"-DWITH_SYSTEM_ZLIB=1"
;; SSE instructions are available on Intel systems only.
,@(if (any (cute string-prefix? <> (or (%current-target-system)
(%current-system)))
'("x86_64" "i686"))
'()
'("-DWITH_SSE2=NO"))
;; Configuration cannot find GTK2 without the two following
;; flags.
(string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
(assoc-ref %build-inputs "gtk+")
"/lib/gtk-2.0/include")
(string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
(assoc-ref %build-inputs "glib")
"/lib/glib-2.0/include"))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'ensure-application-files-can-be-found
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(substitute* "src/arch/LoadingWindow/LoadingWindow_Gtk.cpp"
(("RageFileManagerUtil::sDirOfExecutable \\+ \"/\" \\+ \"GtkModule.so\"")
(string-append "\"" out
"/share/stepmania/GtkModule.so\"")))
(substitute* "src/arch/ArchHooks/ArchHooks_Unix.cpp"
(("Root = sDirOfExecutable")
(string-append "Root = \"" out "/share/stepmania/\""))
(("sDirOfExecutable \\+ \"/(Packages|Songs)\"" _ dir)
(string-append "\"" out "/share/stepmania/" dir "\"")))
(substitute* "src/RageFileManager.cpp"
(("RageFileManagerUtil::sDirOfExecutable \\+ \"/\"")
(string-append "\"" out "/share/stepmania/\""))))
#t))
(add-after 'unpack 'fix-install-subdir
;; Installation would be done in "%out/stepmania-X.Y", but we
;; prefer the more common layout "%out/share/stepmania".
(lambda _
(substitute* "src/CMakeLists.txt"
(("\"stepmania-.*?\"") "\"share/stepmania\""))
#t))
(add-after 'unpack 'unbundle-libpng
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "src/CMakeLists.txt"
(("\\$\\{SM_EXTERN_DIR\\}/libpng/include")
(string-append (assoc-ref inputs "libpng") "/include")))
#t))
(add-after 'install 'install-executable
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(exe (string-append out "/share/stepmania/stepmania")))
(mkdir-p bin)
(symlink exe (string-append bin "/stepmania"))
#t)))
(add-after 'install-executable 'install-desktop
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(share (string-append out "/share"))
(applications (string-append share "/applications"))
(icons (string-append share "/icons")))
(install-file "stepmania.desktop" applications)
(mkdir-p icons)
(copy-recursively "icons" icons)
#t)))
;; Move documentation in a more usual place, i.e.,
;; "%out/share/doc/stepmania/".
(add-after 'install-desktop 'install-doc
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(share (string-append out "/share")))
(with-directory-excursion share
(mkdir-p "doc")
(symlink "../stepmania/Docs" "doc/stepmania"))
#t))))))
(native-inputs
(list pkg-config yasm))
(inputs
(list alsa-lib
eudev
ffmpeg-6
glib
glew
gtk+-2
jsoncpp
libpng
libjpeg-turbo
libmad
libogg
libtommath
libtomcrypt
libva
libvorbis
libxinerama
libxrandr
mesa
pcre
pulseaudio
sdl2
zlib))
(synopsis "Advanced rhythm game designed for both home and arcade use")
(description "StepMania is a dance and rhythm game. It features 3D
graphics, keyboard and dance pad support, and an editor for creating your own
steps.
This package provides the core application, but no song is shipped. You need
to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
(home-page "https://www.stepmania.com")
(license license:expat)))
(home-page "https://www.stepmania.com")
(license license:expat))))
(define-public oshu
(package
@@ -0,0 +1,49 @@
See [6] and [7].
[6] https://github.com/Tatsh/tatsh-overlay/blob/master/games-arcade/stepmania/files/stepmania-ffmpeg-6.patch
[7] https://github.com/Tatsh/tatsh-overlay/blob/master/games-arcade/stepmania/files/stepmania-ffmpeg-7.patch
diff --git a/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp b/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp
index 935ddf324b0..d4eed01d599 100644
--- a/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp
+++ b/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp
@@ -9,6 +9,10 @@
#include <cerrno>
+#if LIBAVCODEC_VERSION_MAJOR > 59
+#define frame_number frame_num
+#endif
+
static void FixLilEndian()
{
#if defined(ENDIAN_LITTLE)
@@ -405,7 +405,7 @@ void MovieTexture_FFMpeg::RegisterProtocols()
return;
Done = true;
-#if !FF_API_NEXT
+#if LIBAVCODEC_VERSION_MAJOR < 58
avcodec::avcodec_register_all();
avcodec::av_register_all();
#endif
@@ -508,7 +508,7 @@ RString MovieDecoder_FFMpeg::OpenCodec()
if( m_pStreamCodec->codec )
avcodec::avcodec_close( m_pStreamCodec );
- avcodec::AVCodec *pCodec = avcodec::avcodec_find_decoder( m_pStreamCodec->codec_id );
+ const avcodec::AVCodec *pCodec = avcodec::avcodec_find_decoder( m_pStreamCodec->codec_id );
if( pCodec == nullptr )
return ssprintf( "Couldn't find decoder %i", m_pStreamCodec->codec_id );
diff --git a/src/arch/MovieTexture/MovieTexture_FFMpeg.h b/src/arch/MovieTexture/MovieTexture_FFMpeg.h
index c092b765fc2..99f5ffcb1be 100644
--- a/src/arch/MovieTexture/MovieTexture_FFMpeg.h
+++ b/src/arch/MovieTexture/MovieTexture_FFMpeg.h
@@ -13,6 +13,7 @@ namespace avcodec
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/pixdesc.h>
+ #include <libavcodec/avcodec.h>
#if LIBAVCODEC_VERSION_MAJOR >= 58
#define av_free_packet av_packet_unref