gnu: Add stepmania.

* gnu/packages/games.scm (stepmania):
* gnu/packages/video.scm (ffmpeg-for-stepmania): New variables.
This commit is contained in:
Nicolas Goaziou 2018-11-11 00:43:34 +01:00
parent 81cf0174b5
commit 1faf0a0459
No known key found for this signature in database
GPG key ID: DA00B4F048E92F2D
2 changed files with 156 additions and 0 deletions

View file

@ -70,6 +70,7 @@ (define-module (gnu packages games)
#:use-module (gnu packages admin)
#:use-module (gnu packages audio)
#:use-module (gnu packages avahi)
#:use-module (gnu packages assembly)
#:use-module (gnu packages bash)
#:use-module (gnu packages bison)
#:use-module (gnu packages boost)
@ -6011,3 +6012,130 @@ (define-public endless-sky
license:cc-by-sa3.0
license:cc-by-sa4.0
license:public-domain))))
(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.git")
(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")
#t))))
(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"
;; 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 '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
`(("pkg-config" ,pkg-config)
("yasm" ,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-8)
("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
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)))

View file

@ -871,6 +871,34 @@ (define-public ffmpeg-3.4
(base32
"0b59qk5wpc5ksiha76jbhb859g5gxa4w0k6afh3kgvgajiivs73l"))))))
(define-public ffmpeg-for-stepmania
(hidden-package
(package
(inherit ffmpeg)
(version "2.1.3")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/stepmania/ffmpeg.git")
(commit "eda6effcabcf9c238e4635eb058d72371336e09b")))
(sha256
(base32 "1by8rmbva8mfrivdbbkr2gx4kga89zqygkd4cfjl76nr8mdcdamb"))
(file-name (git-file-name "ffmpeg" version))))
(arguments
(substitute-keyword-arguments (package-arguments ffmpeg)
((#:configure-flags flags)
'(list "--disable-programs"
"--disable-doc"
"--disable-debug"
"--disable-avdevice"
"--disable-swresample"
"--disable-postproc"
"--disable-avfilter"
"--disable-shared"
"--enable-static"))))
(inputs '()))))
(define-public ffmpegthumbnailer
(package
(name "ffmpegthumbnailer")