[bug#76545,v3] gnu: mame: Update to 0.276.

Message ID c25cd546388ee45bbc06f23f8e1d1b67664678d4.1743490874.git.mail@nicolasgoaziou.fr
State New
Headers
Series [bug#76545,v3] gnu: mame: Update to 0.276. |

Commit Message

Nicolas Goaziou April 1, 2025, 7:04 a.m. UTC
* gnu/packages/emulators.scm (mame): Update to 0.276.
[source]: Add modules for cut and scandir.  Preserve the minimum set of
third-party libraries.
[arguments]<#:make-flags>: Remove unnecessary flags.
<#:phases>: Add a phase to use all possible system libraries instead of
listing them piece wise.
[native-inputs]: Add nasm.
[inputs]: Replace lua with lua-5.4. Add zstd:lib.

Change-Id: I650a008461d69e5a39ba6a12e7140aa785dc0298
---

v3: Update to 0.276.  Remove old comment.  Do not try to use C++ Lua as it is
not packaged in Guix yet.

 gnu/packages/emulators.scm | 63 ++++++++++++++++++++++++++------------
 1 file changed, 43 insertions(+), 20 deletions(-)


base-commit: 5735c278e16517d9be5e26235fe68dea9bae3527
  

Comments

Liliana Marie Prikler April 21, 2025, 7:55 p.m. UTC | #1
Am Dienstag, dem 01.04.2025 um 09:04 +0200 schrieb Nicolas Goaziou:
> * gnu/packages/emulators.scm (mame): Update to 0.276.
> [source]: Add modules for cut and scandir.  Preserve the minimum set
> of third-party libraries.
> [arguments]<#:make-flags>: Remove unnecessary flags.
> <#:phases>: Add a phase to use all possible system libraries instead
> of listing them piece wise.
> [native-inputs]: Add nasm.
> [inputs]: Replace lua with lua-5.4. Add zstd:lib.
> 
> Change-Id: I650a008461d69e5a39ba6a12e7140aa785dc0298
> ---
> 
> v3: Update to 0.276.  Remove old comment.  Do not try to use C++ Lua
> as it is not packaged in Guix yet.
I keep wanting to try this patch, but haven't yet succeeded in building
the package.  (This may very well be a "my machine" problem, as the
build seems to require quite a lot of resources.)  In any case, it
lexically LGTM.

Cheers
  
Nicolas Goaziou April 21, 2025, 9:40 p.m. UTC | #2
Hello,

Liliana Marie Prikler <liliana.prikler@gmail.com> writes:

> Am Dienstag, dem 01.04.2025 um 09:04 +0200 schrieb Nicolas Goaziou:
>> * gnu/packages/emulators.scm (mame): Update to 0.276.
>> [source]: Add modules for cut and scandir.  Preserve the minimum set
>> of third-party libraries.
>> [arguments]<#:make-flags>: Remove unnecessary flags.
>> <#:phases>: Add a phase to use all possible system libraries instead
>> of listing them piece wise.
>> [native-inputs]: Add nasm.
>> [inputs]: Replace lua with lua-5.4. Add zstd:lib.
>> 
>> Change-Id: I650a008461d69e5a39ba6a12e7140aa785dc0298
>> ---
>> 
>> v3: Update to 0.276.  Remove old comment.  Do not try to use C++ Lua
>> as it is not packaged in Guix yet.

> I keep wanting to try this patch, but haven't yet succeeded in building
> the package.  (This may very well be a "my machine" problem, as the
> build seems to require quite a lot of resources.)  In any case, it
> lexically LGTM.

Alas, this package doesn’t build yet. At this point, I’m not even sure
about the error, only that it is related to Lua. For the record, the
failure log can be found there:
<https://bordeaux.guix.gnu.org/build/9b1cb885-0466-4ae1-829b-9edbe91064d7/log>.

I certainly would appreciate some help if anyone wants to have a look
into it.

Regards,
  

Patch

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index e71c2803a3..eb784bd43b 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -6,7 +6,7 @@ 
 ;;; Copyright © 2015, 2018, 2023 David Thompson <dthompson2@worcester.edu>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017-2024 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2017-2025 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2017, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
@@ -3026,7 +3026,7 @@  (define-public libticalcs2
 (define-public mame
   (package
     (name "mame")
-    (version "0.252")
+    (version "0.276")
     (source
      (origin
        (method git-fetch)
@@ -3035,33 +3035,54 @@  (define-public mame
              (commit (apply string-append "mame" (string-split version #\.)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "07qhcm1v47sy2wj30nx3cbhvcbgki0cl83gabr0miiw60fhgyn6j"))
-       (modules '((guix build utils)))
+        (base32 "1npjb5n03gchprnz61br0b0sprvwylkhygla3z84xklzd11y678d"))
+       (modules '((ice-9 ftw)
+                  (srfi srfi-26)
+                  (guix build utils)))
        (snippet
-        ;; Remove bundled libraries.
-        '(begin
-           (with-directory-excursion "3rdparty"
-             (for-each delete-file-recursively
-                       '("asio" "expat" "glm" "libflac" "libjpeg" "lua"
-                         "portaudio" "portmidi" "pugixml" "rapidjson" "SDL2"
-                         "SDL2-override" "sqlite3" "utf8proc" "zlib")))))))
+        ;; Remove most bundled libraries.
+        ;;
+        ;; XXX: Some of the preserved the libraries below ship with Guix, but
+        ;; may prove difficult to un-bundle.
+        #~(with-directory-excursion "3rdparty"
+            (let ((keep (list "." ".."
+                              "asmjit"
+                              "bgfx"
+                              "bimg"
+                              "bx"
+                              "genie"
+                              "linenoise"
+                              "lsqlite3"
+                              "lua-linenoise"
+                              "lua-zlib"
+                              "luafilesystem"
+                              "lzma"
+                              "minimp3"
+                              "nanosvg"
+                              "softfloat"
+                              "softfloat3"
+                              "sol2"
+                              "wdlfft"
+                              "ymfm")))
+              (for-each delete-file-recursively
+                        (scandir "." (negate (cut member <> keep)))))))))
     (build-system gnu-build-system)
     (arguments
      (list
       #:make-flags
-      #~(cons*
+      #~(list
          ;; A 'strict-overflow' error pops up on i686 so disable '-Werror'.
          "NOWERROR=1"
          (string-append "QT_HOME=" #$(this-package-input "qtbase"))
-         (string-append "SDL_INI_PATH=" #$output "/share/mame/ini")
-         (map (lambda (lib)
-                (string-append "USE_SYSTEM_LIB_" (string-upcase lib) "=1"))
-              '("asio" "expat" "flac" "glm" "jpeg" "lua" "portaudio" "portmidi"
-                "pugixml" "rapidjson" "sqlite3" "utf8proc" "zlib")))
+         (string-append "SDL_INI_PATH=" #$output "/share/mame/ini"))
       #:tests? #f                       ;no test in regular release
       #:phases
       #~(modify-phases %standard-phases
           (delete 'configure)
+          (add-before 'build 'use-system-libraries
+            (lambda _
+              (substitute* "makefile"
+                (("# +(USE_SYSTEM_LIB)" _ option) option))))
           (add-after 'build 'build-documentation
             (lambda _ (invoke "make" "-C" "docs" "man" "info")))
           (replace 'install
@@ -3164,7 +3185,8 @@  (define-public mame
                            Keywords=Game;Emulator;Arcade;~%"
                             executable)))))))))
     (native-inputs
-     (list pkg-config
+     (list nasm
+           pkg-config
            python-sphinx
            python-sphinxcontrib-svg2pdfconverter
            texinfo))
@@ -3178,7 +3200,7 @@  (define-public mame
            libjpeg-turbo
            libxi
            libxinerama
-           lua
+           lua-5.4
            portaudio
            portmidi
            pugixml
@@ -3189,7 +3211,8 @@  (define-public mame
            (sdl-union (list sdl2 sdl2-ttf))
            sqlite
            utf8proc
-           zlib))
+           zlib
+           `(,zstd "lib")))
     (home-page "https://www.mamedev.org")
     (synopsis "Multi-purpose emulation framework")
     (description "MAME's purpose is to preserve decades of software