GNU bug report logs - #73488
[PATCH 0/7] Add Jolly Good and some of its emulators

Previous Next

Package: guix-patches;

Reported by: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

Date: Thu, 26 Sep 2024 03:03:01 UTC

Severity: normal

Tags: patch

Done: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 73488 in the body.
You can then email your comments to 73488 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:03:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Maxim Cournoyer <maxim.cournoyer <at> gmail.com>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Thu, 26 Sep 2024 03:03:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: guix-patches <at> gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH 0/7] Add Jolly Good and some of its emulators
Date: Thu, 26 Sep 2024 11:35:58 +0900
This series adds the Jolly Good emulator API and reference user
interface (jgrf), and some core files (emulator plugins made to be used by
it). Currently I've packaged and tested their bsnes, nestopia and cega ports.


Maxim Cournoyer (7):
  gnu: bsnes: Remove input labels and use gexps.
  gnu: Add jg-api.
  gnu: Add jgrf.
  gnu: jgrf: Add search path mechanism.
  gnu: Add jg-bsnes.
  gnu: Add jg-nestopia.
  gnu: Add jg-cega.

 gnu/local.mk                                  |   1 +
 gnu/packages/emulators.scm                    | 277 ++++++++++++++--
 .../patches/jgrf-implement-search-paths.patch | 302 ++++++++++++++++++
 3 files changed, 558 insertions(+), 22 deletions(-)
 create mode 100644 gnu/packages/patches/jgrf-implement-search-paths.patch


base-commit: 8576aaf5f90db9b385ea8cf6dc98bf3c062959dc
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:18:01 GMT) Full text and rfc822 format available.

Message #8 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH 1/7] gnu: bsnes: Remove input labels and use gexps.
Date: Thu, 26 Sep 2024 12:09:55 +0900
* gnu/packages/emulators.scm (bsnes) [arguments]: Use gexps.
[inputs]: Remove labels.
[home-page]: Update URL.

Change-Id: I69046d977c4647f46c1359d62b762149b8f70160
---

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

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 4dc61bdbff..50a7b67121 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2230,31 +2230,30 @@ (define-public bsnes
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0j054x38fwai61vj36sc04r3zkzay5acq2cgd9zqv5hs51s36g5b"))))
+        (base32 "0j054x38fwai61vj36sc04r3zkzay5acq2cgd9zqv5hs51s36g5b"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "-C" "bsnes"
-                          ;; Remove march=native
-                          "local=false"
-                          (string-append "prefix=" (assoc-ref %outputs "out")))
-       #:tests? #f                      ; No tests.
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure))))
-    (native-inputs
-     (list pkg-config))
+     (list
+      #:make-flags #~(list "-C" "bsnes"
+                           ;; Remove march=native
+                           "local=false"
+                           (string-append "prefix=" #$output))
+      #:tests? #f                       ;No tests.
+      #:phases #~(modify-phases %standard-phases
+                   (delete 'configure))))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("cairo" ,cairo)
-       ("eudev" ,eudev)
-       ("gtksourceview-2" ,gtksourceview-2)
-       ("libxrandr" ,libxrandr)
-       ("libxv" ,libxv)
-       ("openal" ,openal)
-       ("pulseaudio" ,pulseaudio)
-       ("sdl2" ,sdl2)))
-    (home-page "https://bsnes.dev/")
+     (list alsa-lib
+           ao
+           cairo
+           eudev
+           gtksourceview-2
+           libxrandr
+           libxv
+           openal
+           pulseaudio
+           sdl2))
+    (home-page "https://github.com/bsnes-emu/bsnes")
     (synopsis "Emulator for the Super Nintendo / Super Famicom systems")
     (description
      "bsnes is a Super Nintendo / Super Famicom emulator that focuses on
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:18:02 GMT) Full text and rfc822 format available.

Message #11 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH 2/7] gnu: Add jg-api.
Date: Thu, 26 Sep 2024 12:09:56 +0900
* gnu/packages/emulators.scm (jg-api): New variable.

Change-Id: I2cd2086560f8353f8260209c4ee0f117c3615917
---

 gnu/packages/emulators.scm | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 50a7b67121..09e722b4f4 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2260,6 +2260,32 @@ (define-public bsnes
 performance, features, and ease of use.")
     (license license:gpl3)))
 
+(define-public jg-api
+  (package
+    (name "jg-api")
+    (version "1.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/jg")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0117cvfvzhrm9fxnryhbnf9r0f8ij4ahhfqiqp5yv11bz2wcyhqh"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f
+           #:make-flags #~(list (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)))) ;no configure phase
+    (home-page "https://gitlab.com/jgemu/jg")
+    (synopsis "Emulators Plugin API")
+    (description "This package provides the Jolly Good API C and C++ headers.
+The Jolly Good API is a shared object or plugin @acronym{API, Application
+Programming Interface} for emulators.")
+    (license license:zlib)))
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:18:02 GMT) Full text and rfc822 format available.

Message #14 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH 3/7] gnu: Add jgrf.
Date: Thu, 26 Sep 2024 12:09:57 +0900
* gnu/packages/emulators.scm (jgrf): New variable.

Change-Id: I0cf706e66977ceb96902dcd54f9175031e129445
---

 gnu/packages/emulators.scm | 59 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 09e722b4f4..6a5ff6cc19 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2286,6 +2286,65 @@ (define-public jg-api
 Programming Interface} for emulators.")
     (license license:zlib)))
 
+(define-public jgrf
+  (package
+    (name "jgrf")
+    (version "1.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/jgrf")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (modules '((guix build utils)))
+              (snippet '(begin
+                          ;; TODO: Package md5.h and md5.c from
+                          ;; http://openwall.info/wiki/people/solar/software
+                          ;; /public-domain-source-code/md5,
+                          ;; remove these bundled files and set the
+                          ;; USE_EXTERNAL_MD5 Make flag to 1.
+                          ;; (delete-file "deps/md5.h")
+                          ;; (delete-file "deps/md5.c")
+                          (delete-file-recursively "deps/miniz")))
+              (sha256
+               (base32
+                "19n6h8l3vy5g2bqvxhxwqxlg070hjz22384yisadzwl3gjkkgpxk"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;no test suite
+           #:make-flags
+           #~(list (string-append "AR=" #$(ar-for-target))
+                   (string-append "CC=" #$(cc-for-target))
+                   (string-append "CXX=" #$(cxx-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure))))
+    (native-inputs (list jg-api pkg-config))
+    (inputs
+     (list libepoxy
+           libsamplerate
+           miniz
+           soxr
+           speexdsp
+           flac
+           lzo
+           sdl2
+           zlib
+           `(,zstd "lib")))
+    (home-page "https://gitlab.com/jgemu/jgrf")
+    (synopsis "Jolly Good Reference Frontend")
+    (description "The Jolly Good Reference Frontend (accessible via the
+@command{jollygood} command) is the simplest possible frontend to The Jolly
+Good API.  It may be used to run emulators built as shared objects, or as a
+\"white-label\" frontend for statically linked standalone emulators.")
+    ;; The main license is BSD-3; the bundled source licenses are also listed
+    ;; below.
+    (license (list license:bsd-3 ;this software, gltext.h, lodepng.c, lodepng.h
+                   license:expat ;ezmenu.h source, musl_memmem.c,
+                                        ;parson.h, parson.c, tconfig.h, tconfig.c
+                   license:public-domain ;md5.h, md5.c, parg.h, parg.c
+                   license:cc0))))
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:18:03 GMT) Full text and rfc822 format available.

Message #17 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH 4/7] gnu: jgrf: Add search path mechanism.
Date: Thu, 26 Sep 2024 12:09:58 +0900
This makes it possible to automatically find core files in a profile.

* gnu/packages/patches/jgrf-implement-search-paths.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/emulators.scm (jgrf) [source]: Apply patch.
[native-search-paths]: New field.

Change-Id: Ibd78d44dcdf23f4310b2f838d73b8e57d7f31b2a
---

 gnu/local.mk                                  |   1 +
 gnu/packages/emulators.scm                    |  10 +-
 .../patches/jgrf-implement-search-paths.patch | 302 ++++++++++++++++++
 3 files changed, 312 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/jgrf-implement-search-paths.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 507cbfebca..1e85ab5352 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1589,6 +1589,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/jfsutils-add-sysmacros.patch		\
   %D%/packages/patches/jfsutils-gcc-compat.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
+  %D%/packages/patches/jgrf-implement-search-paths.patch	\
   %D%/packages/patches/john-the-ripper-jumbo-with-gcc-11.patch	\
   %D%/packages/patches/json-c-0.13-CVE-2020-12762.patch		\
   %D%/packages/patches/json-c-0.12-CVE-2020-12762.patch		\
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 6a5ff6cc19..49208f302d 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2308,7 +2308,8 @@ (define-public jgrf
                           (delete-file-recursively "deps/miniz")))
               (sha256
                (base32
-                "19n6h8l3vy5g2bqvxhxwqxlg070hjz22384yisadzwl3gjkkgpxk"))))
+                "19n6h8l3vy5g2bqvxhxwqxlg070hjz22384yisadzwl3gjkkgpxk"))
+              (patches (search-patches "jgrf-implement-search-paths.patch"))))
     (build-system gnu-build-system)
     (arguments
      (list #:tests? #f                  ;no test suite
@@ -2331,6 +2332,13 @@ (define-public jgrf
            sdl2
            zlib
            `(,zstd "lib")))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "JOLLYGOOD_CORE_DIRS")
+            (files '("lib/jollygood")))
+           (search-path-specification
+            (variable "JOLLYGOOD_ASSETS_DIRS")
+            (files '("share/jollygood")))))
     (home-page "https://gitlab.com/jgemu/jgrf")
     (synopsis "Jolly Good Reference Frontend")
     (description "The Jolly Good Reference Frontend (accessible via the
diff --git a/gnu/packages/patches/jgrf-implement-search-paths.patch b/gnu/packages/patches/jgrf-implement-search-paths.patch
new file mode 100644
index 0000000000..f4c6f20568
--- /dev/null
+++ b/gnu/packages/patches/jgrf-implement-search-paths.patch
@@ -0,0 +1,302 @@
+Upstream status: https://gitlab.com/jgemu/jgrf/-/merge_requests/61
+
+Add support for searching core files and core files assets via the
+JOLLYGOOD_CORE_DIRS and JOLLYGOOD_ASSETS_DIRS environment variables.
+
+diff --git a/Makefile b/Makefile
+index ed6eb1c..fb0709c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -20,7 +20,9 @@ INCLUDES = -I$(DEPDIR) $(CFLAGS_JG) $(CFLAGS_EPOXY) $(CFLAGS_MINIZ) \
+ 
+ LIBS = -lm
+ 
+-DEFINES :=
++# Define the '_GNU_SOURCE' macro to make the `strdup' function
++# available on GNU systems.
++DEFINES := -D_GNU_SOURCE
+ 
+ # Conditions for DEFINES
+ ifneq ($(OS), Windows_NT)
+diff --git a/deps/ezmenu.h b/deps/ezmenu.h
+index 8400a02..6c8e14b 100644
+--- a/deps/ezmenu.h
++++ b/deps/ezmenu.h
+@@ -66,10 +66,10 @@ enum ezmenu_input {
+ 
+ static void ezmenu_init(struct ezmenu *m, int hres, int vres,
+ 	int fontw, int fonth) {
+-	memset(m, 0, sizeof *m);
++	memset(m, 0, sizeof(*m));
+ 	m->w = hres/fontw;
+ 	m->h = vres/fonth;
+-	m->vislines = calloc(sizeof(char*), m->h);
++	m->vislines = calloc(m->h, sizeof(char*));
+ }
+ 
+ static void ezmenu_setlines(struct ezmenu *m, char**lines, unsigned linecount) {
+diff --git a/jollygood.6 b/jollygood.6
+index 9f36407..17fef9c 100644
+--- a/jollygood.6
++++ b/jollygood.6
+@@ -336,6 +336,14 @@ The directory for user-specific data files.
+ This path is used to find data files used by the cores.
+ Set by default to
+ .Pa $HOME/.local/share/jollygood/ .
++.It JOLLYGOOD_CORE_DIRS
++Colon-separated (or semicolon, on Windows) directories containing core
++files. If set, these core files directories take precedence over the
++default ones.
++.It JOLLYGOOD_ASSETS_DIRS
++Colon-separated (or semicolon, on Windows) directories containing core
++assets files. If set, these core assets directories take precedence
++over the default ones.
+ .El
+ .Sh EXAMPLES
+ .Bl -tag -width indent
+diff --git a/src/jgrf.c b/src/jgrf.c
+index 3a40d2d..12eede3 100644
+--- a/src/jgrf.c
++++ b/src/jgrf.c
+@@ -161,6 +161,12 @@ static void mkdirr(const char *dir) {
+     #endif
+ }
+ 
++#if defined(__MINGW32__) || defined(__MINGW64__)
++// Avoid a deprecation warning on Windows, where strdup exists but is
++// deprecated in favor of _strdup.
++#define strdup _strdup
++#endif
++
+ // Create user directories
+ static void jgrf_mkdirs(void) {
+     mkdirr(gdata.configpath);
+@@ -1096,6 +1102,88 @@ void jgrf_frametime(double frametime) {
+     corefps = frametime + 0.5;
+ }
+ 
++// Wrapper that logs and errors in case of realloc problems.
++static void* jgrf_realloc(void* array, const size_t size) {
++    void* new_array;
++    if (size > 0 && !(new_array = realloc(array, size)))
++        jgrf_log(JG_LOG_ERR, "Realloc failure\n");
++    return new_array;
++}
++
++static void jgrf_strip_trailing_sep(char* word) {
++    int end = strlen(word) - 1;
++    while (word[end] == SEP) {
++        word[end] = '\0';
++        end -= 1;
++    }
++}
++
++// Tokenize PATH based on the platform path separator and return an
++// array of strings, or NULL if there nothing could be tokenized.  The
++// count of the number of items is written at the location pointed by
++// the COUNT pointer.  The returned array is dynamically allocated and
++// should be freed when no longer needed, along its inner strings.
++// `transform' can be provided to manipulate the recovered path items;
++// it must be the pointer of a procedure accepting a single string
++// (char*) path item as argument or NULL.
++static char** tokenize_path(int* count, const char* path,
++                            void (*transform) (char*)) {
++    int length = 10;
++    int index = 0;
++    char* save_ptr;
++    char** items = jgrf_realloc(NULL, sizeof(char*) * length);
++    char* item;
++    char pathsep_str[2] = {PATHSEP, '\0'};
++    char* wr_path = strdup(path);
++    if (!wr_path)
++        jgrf_log(JG_LOG_ERR, "strdup memory allocation failure\n");
++
++    item = strtok_r(wr_path, pathsep_str, &save_ptr);
++    while (item) {
++        if (transform)
++            transform(item);
++
++        // Resize the array if needed.
++        if (index >= length) {
++            length += 10;
++            items = jgrf_realloc(items, sizeof(char*) * length);
++        }
++
++	// Assign the component.
++ 	items[index] = strdup(item);
++	if (!items[index])
++	    jgrf_log(JG_LOG_ERR, "stdup memory allocation failure\n");
++
++        index += 1;
++        item = strtok_r(NULL, pathsep_str, &save_ptr);
++    }
++    free(wr_path);
++    jgrf_realloc(items, sizeof(char*) * index);
++
++    *count = index;
++    return items;
++}
++
++// Look if a core named NAME exists under the directory CORE_DIR. Set
++// CORE_FILE as a side-effect. Return 1 if found, 0 otherwise.
++static int search_core_file(char* core_file, size_t max_length,
++                             const char* core_dir, const char* name) {
++    struct stat fbuf;
++    snprintf(core_file, max_length, "%s%c%s.%s",
++             core_dir, SEP, name, SOEXT);
++    return !stat(core_file, &fbuf);
++}
++
++// Look if an core assets directory for core named NAME exists under
++// the directory ASSETS_DIR. Set CORE_ASSETS as a side-effect. Return
++// 1 if found, 0 otherwise.
++static int search_core_assets(char* core_assets, size_t max_length,
++                              const char* assets_dir, const char* name) {
++    struct stat fbuf;
++    snprintf(core_assets, max_length, "%s%c%s", assets_dir, SEP, name);
++    return !stat(core_assets, &fbuf);
++}
++
+ int main(int argc, char *argv[]) {
+     if (argc < 2) {
+         jgrf_cli_usage(argv[0]);
+@@ -1188,7 +1276,7 @@ int main(int argc, char *argv[]) {
+         jg_get_coreinfo("")->name);
+ 
+ #if defined(LIBDIR) && defined(DATADIR) // Check for core assets system-wide
+-    char coreassets[256];
++    char coreassets[384];
+     snprintf(coreassets, sizeof(coreassets),
+         "%s%cjollygood%c%s", DATADIR, SEP, SEP, gdata.corename);
+ 
+@@ -1204,7 +1292,7 @@ int main(int argc, char *argv[]) {
+     }
+     else if (!jgrf_core_default())
+         jgrf_log(JG_LOG_ERR,
+-            "Cannot detect default core, or invalid file. Exiting...\n");
++                 "Cannot detect default core, or invalid file. Exiting...\n");
+ 
+     // Set the core path to the local core path
+     char corepath[384];
+@@ -1222,20 +1310,85 @@ int main(int argc, char *argv[]) {
+     }
+ #if defined(LIBDIR) && defined(DATADIR) // Check for the core system-wide
+     else {
+-        snprintf(corepath, sizeof(corepath), "%s%cjollygood%c%s.%s",
+-            LIBDIR, SEP, SEP, gdata.corename, SOEXT);
+-
+-        // If it was found, set the core assets path
+-        if (stat(corepath, &fbuf) == 0) {
+-            snprintf(gdata.coreassets, sizeof(gdata.coreassets),
+-                "%s%cjollygood%c%s", DATADIR, SEP, SEP, gdata.corename);
+-            corefound = 1;
++        int core_assets_found = 0;
++        int count = 0;
++
++        // Look for the core file in the JOLLYGOOD_CORE_DIRS search
++        // path.
++        const char* core_dirs_env = getenv("JOLLYGOOD_CORE_DIRS");
++        if (core_dirs_env) {
++            char** core_dirs = tokenize_path(&count, core_dirs_env,
++                                             jgrf_strip_trailing_sep);
++            for (int i=0; i < count; ++i) {
++                const char* dir = core_dirs[i];
++                if (search_core_file(corepath, sizeof corepath,
++                                     dir, gdata.corename)) {
++                    corefound = 1;
++                    break;
++                }
++            }
++            // Free all the allocated strings.
++            for (int i=0; i < count; ++i)
++                free(core_dirs[i]);
++            free(core_dirs);
++        }
++
++        // Look in the configured LIBDIR as a fallback.
++        if (!corefound) {
++            char internal_core_dir[256];
++            snprintf(internal_core_dir, sizeof internal_core_dir, "%s%c%s",
++                     LIBDIR, SEP, "jollygood");
++            if (search_core_file(corepath, sizeof corepath,
++                                 internal_core_dir, gdata.corename)) {
++                corefound = 1;
++            } else {
++                jgrf_log(JG_LOG_ERR,
++                         "Could not locate core file. Exiting...\n");
++            }
+         }
+-    }
+ 
+-    // If no core was found, there is no reason to keep the program running
+-    if (!corefound)
+-        jgrf_log(JG_LOG_ERR, "Failed to locate core. Exiting...\n");
++        // If it was found, set the core assets path. First consider
++        // the JOLLYGOOD_ASSETS_DIRS search path.
++        if (corefound) {
++            const char* assets_dirs_env = getenv("JOLLYGOOD_ASSETS_DIRS");
++            if (assets_dirs_env) {
++                char** assets_dirs = tokenize_path(&count, assets_dirs_env,
++                                                   jgrf_strip_trailing_sep);
++                for (int i=0; i < count; ++i) {
++                    const char* dir = assets_dirs[i];
++                    if (search_core_assets(gdata.coreassets,
++                                           sizeof gdata.coreassets,
++                                           dir, gdata.corename)) {
++                        core_assets_found = 1;
++                        break;
++                    }
++                }
++                for (int i=0; i < count; ++i)
++                    free(assets_dirs[i]);
++                free(assets_dirs);
++            }
++
++            // Look in the configured DATADIR as a fallback.
++            if (!core_assets_found) {
++                char internal_core_assets_dir[256];
++                snprintf(internal_core_assets_dir,
++                         sizeof internal_core_assets_dir,
++                         "%s%c%s", DATADIR, SEP, "jollygood");
++                if (search_core_assets(gdata.coreassets,
++                                       sizeof gdata.coreassets,
++                                       internal_core_assets_dir,
++                                       gdata.corename)) {
++                    core_assets_found = 1;
++                } else {
++                    // Not all emulators have core assets,
++                    // e.g. 'cega', so this is not a critical
++                    // condition.
++                    jgrf_log(JG_LOG_INF, "No assets directory for core %s\n",
++                        gdata.corename);
++                }
++            }
++        }
++    }
+ #endif // defined(LIBDIR) && defined(DATADIR)
+ 
+ #endif // JGRF_STATIC
+diff --git a/src/jgrf.h b/src/jgrf.h
+index b3f4627..57bba0e 100644
+--- a/src/jgrf.h
++++ b/src/jgrf.h
+@@ -45,8 +45,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ #if defined(_WIN32) || defined(__MINGW32__) || defined(__MINGW64__)
+     #define SEP '\\'
++    #define PATHSEP ';'
+ #else
+     #define SEP '/'
++    #define PATHSEP ':'
+ #endif
+ 
+ typedef struct jgrf_gdata_t { // Global Data
+@@ -59,7 +61,7 @@ typedef struct jgrf_gdata_t { // Global Data
+     char coreversion[32]; // Core Version
+     char gamename[128]; // Internally used game name
+     char gamefname[128]; // Internally used game name with extension
+-    char coreassets[256]; // Core asset path
++    char coreassets[384]; // Core asset path
+     char userassets[128]; // User asset path
+     char biospath[128]; // BIOS path
+     char cheatpath[128]; // Cheat path
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:18:03 GMT) Full text and rfc822 format available.

Message #20 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH 5/7] gnu: Add jg-bsnes.
Date: Thu, 26 Sep 2024 12:09:59 +0900
* gnu/packages/emulators.scm (jg-bsnes): New variable.

Change-Id: If88a7bea0c87c8af8fce051f8bec891ff249449f
---

 gnu/packages/emulators.scm | 72 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 49208f302d..068349867f 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2353,6 +2353,78 @@ (define-public jgrf
                    license:public-domain ;md5.h, md5.c, parg.h, parg.c
                    license:cc0))))
 
+(define-public jg-bsnes
+  (package
+    (name "jg-bsnes")
+    (version "2.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/bsnes")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              ;; XXX: Some source dependencies are bundled and are not easy to
+              ;; unbundle due to the build system building an object combining
+              ;; their sources directly:
+              ;;  - byuuML
+              ;;  - gb
+              ;;  - libcoco
+              ;;  - snes_spc
+              (modules '((guix build utils)))
+              (snippet '(delete-file-recursively "deps/libsamplerate"))
+              (sha256
+               (base32
+                "0z1ka4si8vcb0j6ih087cni18vpgfd3qnaw24awycxz23xc0jkdv"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;no test suite
+           #:make-flags
+           #~(list (string-append "AR=" #$(ar-for-target))
+                   (string-append "CC=" #$(cc-for-target))
+                   (string-append "CXX=" #$(cxx-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)))) ;no configure script
+    (native-inputs (list jg-api pkg-config))
+    (inputs (list libsamplerate))
+    (home-page "https://gitlab.com/jgemu/bsnes")
+    (synopsis "Jolly Good Fork of bsnes")
+    (description "@code{bsnes-jg} is a cycle accurate emulator for the Super
+Famicom/Super Nintendo Entertainment System, including support for the Super
+Game Boy, BS-X Satellaview, and Sufami Turbo.  @code{bsnes-jg} is a fork of
+@code{bsnes} v115, Many changes have been made post-fork:
+@itemize
+@item Higher quality resampler with settings
+@item Improved performance without loss of accuracy
+@item Portability improvements
+@item Removal of accuracy-reducing hacks and unnecessary code
+@item Significant increase in standards compliance
+@item Translation to the C++ Standard Library (ISO C++11)
+@end itemize
+
+In particular, it uses much less @acronym{CPU, Central Processing Unit}
+compared to the original @code{bsnes} (though not as little as @code{zsnes}).
+
+The supported file formats are:
+@itemize @file
+@item .sfc
+@item .smc
+@item .bs
+@item .st
+@item .fig
+@item .swc
+@end itemize
+
+This is intended to be used with the Jolly Good Reference Frontend
+@command{jollygood} command from the @code{jgrf} package.")
+    ;; The project license is GPL3+.  The bundled source licenses are also
+    ;; listed below.
+    (license (list license:gpl3+
+                   license:bsd-3        ;byuuML
+                   license:expat        ;gb
+                   license:isc          ;libco
+                   license:lgpl2.1+))))
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:18:04 GMT) Full text and rfc822 format available.

Message #23 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH 6/7] gnu: Add jg-nestopia.
Date: Thu, 26 Sep 2024 12:10:00 +0900
* gnu/packages/emulators.scm (jg-nestopia): New variable.

Change-Id: I2f686f43a8339a124b9ef9640638ab182ecf7079
---

 gnu/packages/emulators.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 068349867f..909602acb3 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2425,6 +2425,39 @@ (define-public jg-bsnes
                    license:isc          ;libco
                    license:lgpl2.1+))))
 
+(define-public jg-nestopia
+  (package
+    (name "jg-nestopia")
+    (version "1.52.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/nestopia")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19qg9hgh25aaym7b81v5g7165v4fyymas6dmzc4z867mzaphbn6s"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;no test suite
+           #:make-flags
+           #~(list (string-append "AR=" #$(ar-for-target))
+                   (string-append "CC=" #$(cc-for-target))
+                   (string-append "CXX=" #$(cxx-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)))) ;no configure script
+    (native-inputs (list jg-api pkg-config))
+    (home-page "https://gitlab.com/jgemu/nestopia")
+    (synopsis "Jolly Good Fork of Nestopia")
+    (description "Nestopia JG is an emulator for the Nintendo Entertainment
+System/Famicom, including support for the Famicom Disk System and VS. System.
+Though originally a fork, Nestopia JG has become the de facto upstream branch
+of the Nestopia emulator.")
+    (license (list license:gpl2+        ;this project
+                   license:lgpl2.1+)))) ;nes_ntsc source files
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:18:05 GMT) Full text and rfc822 format available.

Message #26 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH 7/7] gnu: Add jg-cega.
Date: Thu, 26 Sep 2024 12:10:01 +0900
* gnu/packages/emulators.scm (jg-cega): New variable.

Change-Id: Ice3799d9aa4600006ac386fa40e80fb97b3018c8
---

 gnu/packages/emulators.scm | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 909602acb3..9e05d59f5c 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2458,6 +2458,42 @@ (define-public jg-nestopia
     (license (list license:gpl2+        ;this project
                    license:lgpl2.1+)))) ;nes_ntsc source files
 
+(define-public jg-cega
+  (package
+    (name "jg-cega")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/cega")
+                    (commit version)))
+              (modules '((guix build utils)))
+              (snippet '(delete-file-recursively "deps/"))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "10qxfch08850zivxf4s1mhh0clx4h1cfn440acm6d7glb6wbv822"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;no test suite
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure))))
+    (native-inputs (list jg-api pkg-config))
+    (inputs (list speexdsp))
+    (home-page "https://gitlab.com/jgemu/cega")
+    (synopsis "Jolly Good SG-1000, SMS, Game Gear, and Mega Drive/Genesis \
+emulator")
+    (description "Cega is a cycle accurate emulator for the Sega SG-1000,
+Master System, and Game Gear written specifically for The Jolly Good API.
+Mega Drive emulation is in an experimental state.")
+    (license (list license:mpl2.0
+                   license:expat        ;src/emu2413, src/m68k
+                   license:bsd-3        ;src/ymfm
+                   license:zlib))))     ;src/z80.h
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 26 Sep 2024 03:34:01 GMT) Full text and rfc822 format available.

Message #29 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Subject: Re: [bug#73488] [PATCH 3/7] gnu: Add jgrf.
Date: Thu, 26 Sep 2024 12:31:39 +0900
Hi,

Maxim Cournoyer <maxim.cournoyer <at> gmail.com> writes:

[...]

> +    (build-system gnu-build-system)
> +    (arguments
> +     (list #:tests? #f                  ;no test suite
> +           #:make-flags
> +           #~(list (string-append "AR=" #$(ar-for-target))
> +                   (string-append "CC=" #$(cc-for-target))
> +                   (string-append "CXX=" #$(cxx-for-target))
> +                   (string-append "PREFIX=" #$output))
> +           #:phases #~(modify-phases %standard-phases
> +                        (delete 'configure))))
> +    (native-inputs (list jg-api pkg-config))
> +    (inputs
> +     (list libepoxy
> +           libsamplerate
> +           miniz
> +           soxr
> +           speexdsp
> +           flac
> +           lzo
> +           sdl2
> +           zlib
> +           `(,zstd "lib")))

I've noticed these inputs were not sorted; now fixed in a v2 that I'll
keep locally in case there are other things to fix.

-- 
Thanks,
Maxim




Information forwarded to adam.faiz <at> disroot.org, liliana.prikler <at> gmail.com, iyzsong <at> envs.net, guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:29:02 GMT) Full text and rfc822 format available.

Message #32 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH games v3 4/7] gnu: Add jgrf.
Date: Thu,  3 Oct 2024 16:25:42 +0900
* gnu/packages/emulators.scm (jgrf): New variable.

Change-Id: I0cf706e66977ceb96902dcd54f9175031e129445
---

Changes in v3:
 - Remove extraneous 'modules' field from origin
 - Use latest commit, with support for search paths

Changes in v2:
 - Sort inputs

 gnu/packages/emulators.scm | 70 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 09e722b4f4..ae2a78a0f6 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2286,6 +2286,76 @@ (define-public jg-api
 Programming Interface} for emulators.")
     (license license:zlib)))
 
+(define-public jgrf
+  ;; Unreleased work contains support for the JOLLYGOOD_* environment
+  ;; variables used to locate cores and assets.
+  (let ((commit "7d5c2b8593020e92d5b9b051dfb94be7f17c04ce")
+        (revision "0"))
+    (package
+      (name "jgrf")
+      (version (git-version "1.1.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.com/jgemu/jgrf")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (snippet '(begin
+                            ;; TODO: Package md5.h and md5.c from
+                            ;; http://openwall.info/wiki/people/solar/software
+                            ;; /public-domain-source-code/md5,
+                            ;; remove these bundled files and set the
+                            ;; USE_EXTERNAL_MD5 Make flag to 1.
+                            ;; (delete-file "deps/md5.h")
+                            ;; (delete-file "deps/md5.c")
+                            (use-modules (guix build utils))
+                            (delete-file-recursively "deps/miniz")))
+                (sha256
+                 (base32
+                  "0gkmyyaxpj3szw6r1zm5850h5f362p0jdr5w70g2j0939rqn5db4"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list #:tests? #f                ;no test suite
+             #:make-flags
+             #~(list (string-append "AR=" #$(ar-for-target))
+                     (string-append "CC=" #$(cc-for-target))
+                     (string-append "CXX=" #$(cxx-for-target))
+                     (string-append "PREFIX=" #$output))
+             #:phases #~(modify-phases %standard-phases
+                          (delete 'configure))))
+      (native-inputs (list jg-api pkg-config))
+      (inputs
+       (list flac
+             libepoxy
+             libsamplerate
+             lzo
+             miniz
+             sdl2
+             soxr
+             speexdsp
+             zlib
+             `(,zstd "lib")))
+      (native-search-paths
+       (list (search-path-specification
+              (variable "JOLLYGOOD_CORE_DIRS")
+              (files '("lib/jollygood")))
+             (search-path-specification
+              (variable "JOLLYGOOD_ASSET_DIRS")
+              (files '("share/jollygood")))))
+      (home-page "https://gitlab.com/jgemu/jgrf")
+      (synopsis "Jolly Good Reference Frontend")
+      (description "The Jolly Good Reference Frontend (accessible via the
+@command{jollygood} command) is the simplest possible frontend to The Jolly
+Good API.  It may be used to run emulators built as shared objects, or as a
+\"white-label\" frontend for statically linked standalone emulators.")
+      ;; The main license is BSD-3; the bundled source licenses are also listed
+      ;; below.
+      (license (list license:bsd-3 ;this software, gltext.h, lodepng.c, lodepng.h
+                     license:expat ;ezmenu.h source, musl_memmem.c,
+                                        ;parson.h, parson.c, tconfig.h, tconfig.c
+                     license:public-domain ;md5.h, md5.c, parg.h, parg.c
+                     license:cc0)))))
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to adam.faiz <at> disroot.org, liliana.prikler <at> gmail.com, iyzsong <at> envs.net, guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:29:02 GMT) Full text and rfc822 format available.

Message #35 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH games v3 7/7] gnu: Add jg-cega.
Date: Thu,  3 Oct 2024 16:25:45 +0900
* gnu/packages/emulators.scm (jg-cega): New variable.

Change-Id: Ice3799d9aa4600006ac386fa40e80fb97b3018c8
---

(no changes since v1)

 gnu/packages/emulators.scm | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 34e706188a..b29a50bdfb 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2462,6 +2462,42 @@ (define-public jg-nestopia
     (license (list license:gpl2+        ;this project
                    license:lgpl2.1+)))) ;nes_ntsc source files
 
+(define-public jg-cega
+  (package
+    (name "jg-cega")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/cega")
+                    (commit version)))
+              (modules '((guix build utils)))
+              (snippet '(delete-file-recursively "deps/"))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "10qxfch08850zivxf4s1mhh0clx4h1cfn440acm6d7glb6wbv822"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;no test suite
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure))))
+    (native-inputs (list jg-api pkg-config))
+    (inputs (list speexdsp))
+    (home-page "https://gitlab.com/jgemu/cega")
+    (synopsis "Jolly Good SG-1000, SMS, Game Gear, and Mega Drive/Genesis \
+emulator")
+    (description "Cega is a cycle accurate emulator for the Sega SG-1000,
+Master System, and Game Gear written specifically for The Jolly Good API.
+Mega Drive emulation is in an experimental state.")
+    (license (list license:mpl2.0
+                   license:expat        ;src/emu2413, src/m68k
+                   license:bsd-3        ;src/ymfm
+                   license:zlib))))     ;src/z80.h
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to adam.faiz <at> disroot.org, liliana.prikler <at> gmail.com, iyzsong <at> envs.net, guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:29:03 GMT) Full text and rfc822 format available.

Message #38 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH games v3 2/7] gnu: bsnes: Remove input labels and use gexps.
Date: Thu,  3 Oct 2024 16:25:40 +0900
* gnu/packages/emulators.scm (bsnes) [arguments]: Use gexps.
[inputs]: Remove labels.
[home-page]: Update URL.

Change-Id: I69046d977c4647f46c1359d62b762149b8f70160
---

(no changes since v1)

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

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 4dc61bdbff..50a7b67121 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2230,31 +2230,30 @@ (define-public bsnes
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0j054x38fwai61vj36sc04r3zkzay5acq2cgd9zqv5hs51s36g5b"))))
+        (base32 "0j054x38fwai61vj36sc04r3zkzay5acq2cgd9zqv5hs51s36g5b"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "-C" "bsnes"
-                          ;; Remove march=native
-                          "local=false"
-                          (string-append "prefix=" (assoc-ref %outputs "out")))
-       #:tests? #f                      ; No tests.
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure))))
-    (native-inputs
-     (list pkg-config))
+     (list
+      #:make-flags #~(list "-C" "bsnes"
+                           ;; Remove march=native
+                           "local=false"
+                           (string-append "prefix=" #$output))
+      #:tests? #f                       ;No tests.
+      #:phases #~(modify-phases %standard-phases
+                   (delete 'configure))))
+    (native-inputs (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("cairo" ,cairo)
-       ("eudev" ,eudev)
-       ("gtksourceview-2" ,gtksourceview-2)
-       ("libxrandr" ,libxrandr)
-       ("libxv" ,libxv)
-       ("openal" ,openal)
-       ("pulseaudio" ,pulseaudio)
-       ("sdl2" ,sdl2)))
-    (home-page "https://bsnes.dev/")
+     (list alsa-lib
+           ao
+           cairo
+           eudev
+           gtksourceview-2
+           libxrandr
+           libxv
+           openal
+           pulseaudio
+           sdl2))
+    (home-page "https://github.com/bsnes-emu/bsnes")
     (synopsis "Emulator for the Super Nintendo / Super Famicom systems")
     (description
      "bsnes is a Super Nintendo / Super Famicom emulator that focuses on
-- 
2.46.0





Information forwarded to adam.faiz <at> disroot.org, liliana.prikler <at> gmail.com, iyzsong <at> envs.net, guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:30:01 GMT) Full text and rfc822 format available.

Message #41 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH games v3 3/7] gnu: Add jg-api.
Date: Thu,  3 Oct 2024 16:25:41 +0900
* gnu/packages/emulators.scm (jg-api): New variable.

Change-Id: I2cd2086560f8353f8260209c4ee0f117c3615917
---

(no changes since v1)

 gnu/packages/emulators.scm | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 50a7b67121..09e722b4f4 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2260,6 +2260,32 @@ (define-public bsnes
 performance, features, and ease of use.")
     (license license:gpl3)))
 
+(define-public jg-api
+  (package
+    (name "jg-api")
+    (version "1.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/jg")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0117cvfvzhrm9fxnryhbnf9r0f8ij4ahhfqiqp5yv11bz2wcyhqh"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f
+           #:make-flags #~(list (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)))) ;no configure phase
+    (home-page "https://gitlab.com/jgemu/jg")
+    (synopsis "Emulators Plugin API")
+    (description "This package provides the Jolly Good API C and C++ headers.
+The Jolly Good API is a shared object or plugin @acronym{API, Application
+Programming Interface} for emulators.")
+    (license license:zlib)))
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to adam.faiz <at> disroot.org, liliana.prikler <at> gmail.com, iyzsong <at> envs.net, guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:30:02 GMT) Full text and rfc822 format available.

Message #44 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH games v3 6/7] gnu: Add jg-nestopia.
Date: Thu,  3 Oct 2024 16:25:44 +0900
* gnu/packages/emulators.scm (jg-nestopia): New variable.

Change-Id: I2f686f43a8339a124b9ef9640638ab182ecf7079
---

(no changes since v1)

 gnu/packages/emulators.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 4c1a705994..34e706188a 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2429,6 +2429,39 @@ (define-public jg-bsnes
                    license:isc          ;libco
                    license:lgpl2.1+))))
 
+(define-public jg-nestopia
+  (package
+    (name "jg-nestopia")
+    (version "1.52.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/nestopia")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19qg9hgh25aaym7b81v5g7165v4fyymas6dmzc4z867mzaphbn6s"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;no test suite
+           #:make-flags
+           #~(list (string-append "AR=" #$(ar-for-target))
+                   (string-append "CC=" #$(cc-for-target))
+                   (string-append "CXX=" #$(cxx-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)))) ;no configure script
+    (native-inputs (list jg-api pkg-config))
+    (home-page "https://gitlab.com/jgemu/nestopia")
+    (synopsis "Jolly Good Fork of Nestopia")
+    (description "Nestopia JG is an emulator for the Nintendo Entertainment
+System/Famicom, including support for the Famicom Disk System and VS. System.
+Though originally a fork, Nestopia JG has become the de facto upstream branch
+of the Nestopia emulator.")
+    (license (list license:gpl2+        ;this project
+                   license:lgpl2.1+)))) ;nes_ntsc source files
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to adam.faiz <at> disroot.org, liliana.prikler <at> gmail.com, iyzsong <at> envs.net, guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:30:02 GMT) Full text and rfc822 format available.

Message #47 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH games v3 0/7] Add Jolly Good and some of its emulators
Date: Thu,  3 Oct 2024 16:25:38 +0900
This series adds the Jolly Good emulator API and reference user
interface (jgrf), and some core files (emulator plugins made to be used by
it). Currently I've packaged and tested their bsnes, nestopia and cega ports.

Changes in v3:
 - Remove extraneous 'modules' field from origin
 - Use latest commit, with support for search paths
 - Remove extraneous 'modules' field from origin

Changes in v2:
 - Sort inputs

Maxim Cournoyer (7):
  teams: Register (gnu packages emulators) to games team.
  gnu: bsnes: Remove input labels and use gexps.
  gnu: Add jg-api.
  gnu: Add jgrf.
  gnu: Add jg-bsnes.
  gnu: Add jg-nestopia.
  gnu: Add jg-cega.

 etc/teams.scm              |   3 +-
 gnu/packages/emulators.scm | 281 ++++++++++++++++++++++++++++++++++---
 2 files changed, 261 insertions(+), 23 deletions(-)


base-commit: a4ea332bc219e14560d3a5daaa658425d898ec37
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:30:03 GMT) Full text and rfc822 format available.

Message #50 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH games v3 1/7] teams: Register (gnu packages emulators) to
 games team.
Date: Thu,  3 Oct 2024 16:25:39 +0900
* etc/teams.scm (games) <scope>: Register "gnu/packages/emulators.scm".

Change-Id: I269f83073ff7bb9dcfc23767d853050ce07bfcb5
---

(no changes since v1)

 etc/teams.scm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/etc/teams.scm b/etc/teams.scm
index 9239021b39..ce87f34c07 100755
--- a/etc/teams.scm
+++ b/etc/teams.scm
@@ -465,7 +465,8 @@ (define-team games
   (team 'games
         #:name "Games and Toys"
         #:description "Packaging programs for amusement."
-        #:scope (list "gnu/packages/games.scm"
+        #:scope (list "gnu/packages/emulators.scm"
+                      "gnu/packages/games.scm"
                       "gnu/packages/game-development.scm"
                       "gnu/packages/minetest.scm"
                       "gnu/packages/esolangs.scm" ; granted, rather niche
-- 
2.46.0





Information forwarded to adam.faiz <at> disroot.org, liliana.prikler <at> gmail.com, iyzsong <at> envs.net, guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:30:03 GMT) Full text and rfc822 format available.

Message #53 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488 <at> debbugs.gnu.org
Cc: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Subject: [PATCH games v3 5/7] gnu: Add jg-bsnes.
Date: Thu,  3 Oct 2024 16:25:43 +0900
* gnu/packages/emulators.scm (jg-bsnes): New variable.

Change-Id: If88a7bea0c87c8af8fce051f8bec891ff249449f
---

Changes in v3:
 - Remove extraneous 'modules' field from origin

 gnu/packages/emulators.scm | 73 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index ae2a78a0f6..4c1a705994 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2356,6 +2356,79 @@ (define-public jgrf
                      license:public-domain ;md5.h, md5.c, parg.h, parg.c
                      license:cc0)))))
 
+(define-public jg-bsnes
+  (package
+    (name "jg-bsnes")
+    (version "2.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/jgemu/bsnes")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              ;; XXX: Some source dependencies are bundled and are not easy to
+              ;; unbundle due to the build system building an object combining
+              ;; their sources directly:
+              ;;  - byuuML
+              ;;  - gb
+              ;;  - libcoco
+              ;;  - snes_spc
+              (snippet '(begin
+                          (use-modules (guix build utils))
+                          (delete-file-recursively "deps/libsamplerate")))
+              (sha256
+               (base32
+                "0z1ka4si8vcb0j6ih087cni18vpgfd3qnaw24awycxz23xc0jkdv"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;no test suite
+           #:make-flags
+           #~(list (string-append "AR=" #$(ar-for-target))
+                   (string-append "CC=" #$(cc-for-target))
+                   (string-append "CXX=" #$(cxx-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)))) ;no configure script
+    (native-inputs (list jg-api pkg-config))
+    (inputs (list libsamplerate))
+    (home-page "https://gitlab.com/jgemu/bsnes")
+    (synopsis "Jolly Good Fork of bsnes")
+    (description "@code{bsnes-jg} is a cycle accurate emulator for the Super
+Famicom/Super Nintendo Entertainment System, including support for the Super
+Game Boy, BS-X Satellaview, and Sufami Turbo.  @code{bsnes-jg} is a fork of
+@code{bsnes} v115, Many changes have been made post-fork:
+@itemize
+@item Higher quality resampler with settings
+@item Improved performance without loss of accuracy
+@item Portability improvements
+@item Removal of accuracy-reducing hacks and unnecessary code
+@item Significant increase in standards compliance
+@item Translation to the C++ Standard Library (ISO C++11)
+@end itemize
+
+In particular, it uses much less @acronym{CPU, Central Processing Unit}
+compared to the original @code{bsnes} (though not as little as @code{zsnes}).
+
+The supported file formats are:
+@itemize @file
+@item .sfc
+@item .smc
+@item .bs
+@item .st
+@item .fig
+@item .swc
+@end itemize
+
+This is intended to be used with the Jolly Good Reference Frontend
+@command{jollygood} command from the @code{jgrf} package.")
+    ;; The project license is GPL3+.  The bundled source licenses are also
+    ;; listed below.
+    (license (list license:gpl3+
+                   license:bsd-3        ;byuuML
+                   license:expat        ;gb
+                   license:isc          ;libco
+                   license:lgpl2.1+))))
+
 (define-public zsnes
   (package
     (name "zsnes")
-- 
2.46.0





Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:53:01 GMT) Full text and rfc822 format available.

Message #56 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
To: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>, 73488 <at> debbugs.gnu.org
Cc: 宋文武 <iyzsong <at> envs.net>,
 Adam Faiz <adam.faiz <at> disroot.org>
Subject: Re: [bug#73488] [PATCH games v3 2/7] gnu: bsnes: Remove input
 labels and use gexps.
Date: Thu, 03 Oct 2024 09:50:34 +0200
Am Donnerstag, dem 03.10.2024 um 16:25 +0900 schrieb Maxim Cournoyer:
> * gnu/packages/emulators.scm (bsnes) [arguments]: Use gexps.
> [inputs]: Remove labels.
> [home-page]: Update URL.
> 
> Change-Id: I69046d977c4647f46c1359d62b762149b8f70160
> ---
I think we should write out "G-Expressions".  For the header, since we
do both style improvements, I'd just write "Use new package style",
though that one's a bit more controversial ;)

Content-wise LGTM.






Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:54:02 GMT) Full text and rfc822 format available.

Message #59 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
To: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>, 73488 <at> debbugs.gnu.org
Cc: 宋文武 <iyzsong <at> envs.net>,
 Adam Faiz <adam.faiz <at> disroot.org>
Subject: Re: [bug#73488] [PATCH games v3 3/7] gnu: Add jg-api.
Date: Thu, 03 Oct 2024 09:51:51 +0200
Am Donnerstag, dem 03.10.2024 um 16:25 +0900 schrieb Maxim Cournoyer:
> * gnu/packages/emulators.scm (jg-api): New variable.
> 
> Change-Id: I2cd2086560f8353f8260209c4ee0f117c3615917
> ---
> 
> (no changes since v1)
> 
>  gnu/packages/emulators.scm | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
> index 50a7b67121..09e722b4f4 100644
> --- a/gnu/packages/emulators.scm
> +++ b/gnu/packages/emulators.scm
> @@ -2260,6 +2260,32 @@ (define-public bsnes
>  performance, features, and ease of use.")
>      (license license:gpl3)))
>  
> +(define-public jg-api
> +  (package
> +    (name "jg-api")
> +    (version "1.0.0")
> +    (source (origin
> +              (method git-fetch)
> +              (uri (git-reference
> +                    (url "https://gitlab.com/jgemu/jg")
> +                    (commit version)))
> +              (file-name (git-file-name name version))
> +              (sha256
> +               (base32
> +               
> "0117cvfvzhrm9fxnryhbnf9r0f8ij4ahhfqiqp5yv11bz2wcyhqh"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +     (list #:tests? #f
#:tests? #f should always go with a comment.
> +           #:make-flags #~(list (string-append "PREFIX=" #$output))
> +           #:phases #~(modify-phases %standard-phases
> +                        (delete 'configure)))) ;no configure phase
What about 'bootstrap?  
> +    (home-page "https://gitlab.com/jgemu/jg")
> +    (synopsis "Emulators Plugin API")
> +    (description "This package provides the Jolly Good API C and C++
> headers.
> +The Jolly Good API is a shared object or plugin @acronym{API,
> Application
> +Programming Interface} for emulators.")
> +    (license license:zlib)))
> +

Cheers


Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 07:59:02 GMT) Full text and rfc822 format available.

Message #62 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
To: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>, 73488 <at> debbugs.gnu.org
Cc: 宋文武 <iyzsong <at> envs.net>,
 Adam Faiz <adam.faiz <at> disroot.org>
Subject: Re: [bug#73488] [PATCH games v3 4/7] gnu: Add jgrf.
Date: Thu, 03 Oct 2024 09:57:15 +0200
Am Donnerstag, dem 03.10.2024 um 16:25 +0900 schrieb Maxim Cournoyer:
> * gnu/packages/emulators.scm (jgrf): New variable.
> 
> Change-Id: I0cf706e66977ceb96902dcd54f9175031e129445
> ---
> 
> Changes in v3:
>  - Remove extraneous 'modules' field from origin
>  - Use latest commit, with support for search paths
> 
> Changes in v2:
>  - Sort inputs
> 
>  gnu/packages/emulators.scm | 70
> ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 70 insertions(+)
> 
> diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
> index 09e722b4f4..ae2a78a0f6 100644
> --- a/gnu/packages/emulators.scm
> +++ b/gnu/packages/emulators.scm
> @@ -2286,6 +2286,76 @@ (define-public jg-api
>  Programming Interface} for emulators.")
>      (license license:zlib)))
>  
> +(define-public jgrf
> +  ;; Unreleased work contains support for the JOLLYGOOD_*
> environment
> +  ;; variables used to locate cores and assets.
> +  (let ((commit "7d5c2b8593020e92d5b9b051dfb94be7f17c04ce")
> +        (revision "0"))
> +    (package
> +      (name "jgrf")
> +      (version (git-version "1.1.0" revision commit))
> +      (source (origin
> +                (method git-fetch)
> +                (uri (git-reference
> +                      (url "https://gitlab.com/jgemu/jgrf")
> +                      (commit commit)))
> +                (file-name (git-file-name name version))
> +                (snippet '(begin
> +                            ;; TODO: Package md5.h and md5.c from
> +                            ;;
> http://openwall.info/wiki/people/solar/software
> +                            ;; /public-domain-source-code/md5,
> +                            ;; remove these bundled files and set
> the
> +                            ;; USE_EXTERNAL_MD5 Make flag to 1.
> +                            ;; (delete-file "deps/md5.h")
> +                            ;; (delete-file "deps/md5.c")
> +                            (use-modules (guix build utils))
> +                            (delete-file-recursively "deps/miniz")))
Uhm… why not use (modules '((guix build utils))) tho?
> +                (sha256
> +                 (base32
> +                 
> "0gkmyyaxpj3szw6r1zm5850h5f362p0jdr5w70g2j0939rqn5db4"))))
> +      (build-system gnu-build-system)
> +      (arguments
> +       (list #:tests? #f                ;no test suite
> +             #:make-flags
> +             #~(list (string-append "AR=" #$(ar-for-target))
> +                     (string-append "CC=" #$(cc-for-target))
> +                     (string-append "CXX=" #$(cxx-for-target))
> +                     (string-append "PREFIX=" #$output))
> +             #:phases #~(modify-phases %standard-phases
> +                          (delete 'configure))))
> +      (native-inputs (list jg-api pkg-config))
> +      (inputs
> +       (list flac
> +             libepoxy
> +             libsamplerate
> +             lzo
> +             miniz
> +             sdl2
> +             soxr
> +             speexdsp
> +             zlib
> +             `(,zstd "lib")))
> +      (native-search-paths
> +       (list (search-path-specification
> +              (variable "JOLLYGOOD_CORE_DIRS")
> +              (files '("lib/jollygood")))
> +             (search-path-specification
> +              (variable "JOLLYGOOD_ASSET_DIRS")
> +              (files '("share/jollygood")))))
> +      (home-page "https://gitlab.com/jgemu/jgrf")
> +      (synopsis "Jolly Good Reference Frontend")
> +      (description "The Jolly Good Reference Frontend (accessible
> via the
> +@command{jollygood} command) is the simplest possible frontend to
Are you sure about "simplest"?
> The Jolly
> +Good API.  It may be used to run emulators built as shared objects,
> or as a
> +\"white-label\" frontend for statically linked standalone
> emulators.")
This phrasing is somewhat confusing to me.  So it can run emulators
both as shared objects and as statically linked executables?
> +      ;; The main license is BSD-3; the bundled source licenses are
> also listed
> +      ;; below.
> +      (license (list license:bsd-3 ;this software, gltext.h,
> lodepng.c, lodepng.h
> +                     license:expat ;ezmenu.h source, musl_memmem.c,
> +                                        ;parson.h, parson.c,
> tconfig.h, tconfig.c
> +                     license:public-domain ;md5.h, md5.c, parg.h,
> parg.c
> +                     license:cc0)))))
> +
Cheers

Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 08:03:02 GMT) Full text and rfc822 format available.

Message #65 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
To: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>, 73488 <at> debbugs.gnu.org
Cc: 宋文武 <iyzsong <at> envs.net>,
 Adam Faiz <adam.faiz <at> disroot.org>
Subject: Re: [bug#73488] [PATCH games v3 5/7] gnu: Add jg-bsnes.
Date: Thu, 03 Oct 2024 10:00:21 +0200
Am Donnerstag, dem 03.10.2024 um 16:25 +0900 schrieb Maxim Cournoyer:
> * gnu/packages/emulators.scm (jg-bsnes): New variable.
> 
> Change-Id: If88a7bea0c87c8af8fce051f8bec891ff249449f
> ---
> 
> Changes in v3:
>  - Remove extraneous 'modules' field from origin
> 
>  gnu/packages/emulators.scm | 73
> ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 73 insertions(+)
> 
> diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
> index ae2a78a0f6..4c1a705994 100644
> --- a/gnu/packages/emulators.scm
> +++ b/gnu/packages/emulators.scm
> @@ -2356,6 +2356,79 @@ (define-public jgrf
>                       license:public-domain ;md5.h, md5.c, parg.h,
> parg.c
>                       license:cc0)))))
>  
> +(define-public jg-bsnes
> +  (package
> +    (name "jg-bsnes")
> +    (version "2.0.0")
> +    (source (origin
> +              (method git-fetch)
> +              (uri (git-reference
> +                    (url "https://gitlab.com/jgemu/bsnes")
> +                    (commit version)))
> +              (file-name (git-file-name name version))
> +              ;; XXX: Some source dependencies are bundled and are
> not easy to
> +              ;; unbundle due to the build system building an object
> combining
> +              ;; their sources directly:
> +              ;;  - byuuML
> +              ;;  - gb
> +              ;;  - libcoco
> +              ;;  - snes_spc
If possible, file an upstream bug and refer to that.
> +              (snippet '(begin
> +                          (use-modules (guix build utils))
I'm really not sure we should write (use-modules …) within the snippet
like that.
> +                          (delete-file-recursively
> "deps/libsamplerate")))
> +              (sha256
> +               (base32
> +               
> "0z1ka4si8vcb0j6ih087cni18vpgfd3qnaw24awycxz23xc0jkdv"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +     (list #:tests? #f                  ;no test suite
> +           #:make-flags
> +           #~(list (string-append "AR=" #$(ar-for-target))
> +                   (string-append "CC=" #$(cc-for-target))
> +                   (string-append "CXX=" #$(cxx-for-target))
> +                   (string-append "PREFIX=" #$output))
> +           #:phases #~(modify-phases %standard-phases
> +                        (delete 'configure)))) ;no configure script
> +    (native-inputs (list jg-api pkg-config))
> +    (inputs (list libsamplerate))
> +    (home-page "https://gitlab.com/jgemu/bsnes")
> +    (synopsis "Jolly Good Fork of bsnes")
> +    (description "@code{bsnes-jg} is a cycle accurate emulator for
> the Super
> +Famicom/Super Nintendo Entertainment System, including support for
> the Super
> +Game Boy, BS-X Satellaview, and Sufami Turbo.  @code{bsnes-jg} is a
> fork of
> +@code{bsnes} v115, Many changes have been made post-fork:
> +@itemize
> +@item Higher quality resampler with settings
> +@item Improved performance without loss of accuracy
> +@item Portability improvements
> +@item Removal of accuracy-reducing hacks and unnecessary code
> +@item Significant increase in standards compliance
> +@item Translation to the C++ Standard Library (ISO C++11)
> +@end itemize
> +
> +In particular, it uses much less @acronym{CPU, Central Processing
> Unit}
> +compared to the original @code{bsnes} (though not as little as
> @code{zsnes}).
> +
> +The supported file formats are:
> +@itemize @file
> +@item .sfc
> +@item .smc
> +@item .bs
> +@item .st
> +@item .fig
> +@item .swc
> +@end itemize
> +
> +This is intended to be used with the Jolly Good Reference Frontend
> +@command{jollygood} command from the @code{jgrf} package.")
> +    ;; The project license is GPL3+.  The bundled source licenses
> are also
> +    ;; listed below.
> +    (license (list license:gpl3+
> +                   license:bsd-3        ;byuuML
> +                   license:expat        ;gb
> +                   license:isc          ;libco
> +                   license:lgpl2.1+))))
> +
Cheers


Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Thu, 03 Oct 2024 13:00:02 GMT) Full text and rfc822 format available.

Message #68 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Cc: 73488 <at> debbugs.gnu.org, 宋文武 <iyzsong <at> envs.net>,
 Adam Faiz <adam.faiz <at> disroot.org>
Subject: Re: [bug#73488] [PATCH games v3 2/7] gnu: bsnes: Remove input
 labels and use gexps.
Date: Thu, 03 Oct 2024 21:58:24 +0900
Hi Liliana,

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

> Am Donnerstag, dem 03.10.2024 um 16:25 +0900 schrieb Maxim Cournoyer:
>> * gnu/packages/emulators.scm (bsnes) [arguments]: Use gexps.
>> [inputs]: Remove labels.
>> [home-page]: Update URL.
>> 
>> Change-Id: I69046d977c4647f46c1359d62b762149b8f70160
>> ---
> I think we should write out "G-Expressions".

I think both are acceptable; just like we can write sexps for
S-Expressions, gexps for G-Expressions seems to the point (and requires
less typing).

> For the header, since we
> do both style improvements, I'd just write "Ujse new package style",
> though that one's a bit more controversial ;)

Yeah. That may not age too well if/when we have yet a newer package
style, haha!

> Content-wise LGTM.

Thanks for taking a look.

-- 
Thanks,
Maxim




Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Sat, 05 Oct 2024 12:59:01 GMT) Full text and rfc822 format available.

Message #71 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Cc: 73488 <at> debbugs.gnu.org, Adam Faiz <adam.faiz <at> disroot.org>,
 宋文武 <iyzsong <at> envs.net>
Subject: Re: [bug#73488] [PATCH games v3 4/7] gnu: Add jgrf.
Date: Sat, 05 Oct 2024 21:57:30 +0900
Hi Liliana,

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

> Am Donnerstag, dem 03.10.2024 um 16:25 +0900 schrieb Maxim Cournoyer:
>> * gnu/packages/emulators.scm (jgrf): New variable.
>> 
>> Change-Id: I0cf706e66977ceb96902dcd54f9175031e129445

[...]

>> +(define-public jgrf
>> +  ;; Unreleased work contains support for the JOLLYGOOD_*
>> environment
>> +  ;; variables used to locate cores and assets.
>> +  (let ((commit "7d5c2b8593020e92d5b9b051dfb94be7f17c04ce")
>> +        (revision "0"))
>> +    (package
>> +      (name "jgrf")
>> +      (version (git-version "1.1.0" revision commit))
>> +      (source (origin
>> +                (method git-fetch)
>> +                (uri (git-reference
>> +                      (url "https://gitlab.com/jgemu/jgrf")
>> +                      (commit commit)))
>> +                (file-name (git-file-name name version))
>> +                (snippet '(begin
>> +                            ;; TODO: Package md5.h and md5.c from
>> +                            ;;
>> http://openwall.info/wiki/people/solar/software
>> +                            ;; /public-domain-source-code/md5,
>> +                            ;; remove these bundled files and set
>> the
>> +                            ;; USE_EXTERNAL_MD5 Make flag to 1.
>> +                            ;; (delete-file "deps/md5.h")
>> +                            ;; (delete-file "deps/md5.c")
>> +                            (use-modules (guix build utils))
>> +                            (delete-file-recursively "deps/miniz")))
> Uhm… why not use (modules '((guix build utils))) tho?

I think the (guix build utils) is now implicitly added to the snippet
environment, but I can't find the commit/code that does so.  If that
wasn't the case the above would fail though.

>> +                (sha256
>> +                 (base32
>> +                 
>> "0gkmyyaxpj3szw6r1zm5850h5f362p0jdr5w70g2j0939rqn5db4"))))
>> +      (build-system gnu-build-system)
>> +      (arguments
>> +       (list #:tests? #f                ;no test suite
>> +             #:make-flags
>> +             #~(list (string-append "AR=" #$(ar-for-target))
>> +                     (string-append "CC=" #$(cc-for-target))
>> +                     (string-append "CXX=" #$(cxx-for-target))
>> +                     (string-append "PREFIX=" #$output))
>> +             #:phases #~(modify-phases %standard-phases
>> +                          (delete 'configure))))
>> +      (native-inputs (list jg-api pkg-config))
>> +      (inputs
>> +       (list flac
>> +             libepoxy
>> +             libsamplerate
>> +             lzo
>> +             miniz
>> +             sdl2
>> +             soxr
>> +             speexdsp
>> +             zlib
>> +             `(,zstd "lib")))
>> +      (native-search-paths
>> +       (list (search-path-specification
>> +              (variable "JOLLYGOOD_CORE_DIRS")
>> +              (files '("lib/jollygood")))
>> +             (search-path-specification
>> +              (variable "JOLLYGOOD_ASSET_DIRS")
>> +              (files '("share/jollygood")))))
>> +      (home-page "https://gitlab.com/jgemu/jgrf")
>> +      (synopsis "Jolly Good Reference Frontend")
>> +      (description "The Jolly Good Reference Frontend (accessible
>> via the
>> +@command{jollygood} command) is the simplest possible frontend to
> Are you sure about "simplest"?

I've adjusted to "aims to be the simplest possible frontend [...]".

>> The Jolly
>> +Good API.  It may be used to run emulators built as shared objects,
>> or as a
>> +\"white-label\" frontend for statically linked standalone
>> emulators.")
> This phrasing is somewhat confusing to me.  So it can run emulators
> both as shared objects and as statically linked executables?

That's my understanding too.  If you developed just an emulator and want
to distribute it in a more usable form, you could build the whole thing
as a static binary and distribute that, as I understand it.

Thanks for taking a look!

-- 
Thanks,
Maxim

Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Sat, 05 Oct 2024 13:03:01 GMT) Full text and rfc822 format available.

Message #74 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Cc: 73488 <at> debbugs.gnu.org, Adam Faiz <adam.faiz <at> disroot.org>,
 宋文武 <iyzsong <at> envs.net>
Subject: Re: [bug#73488] [PATCH games v3 3/7] gnu: Add jg-api.
Date: Sat, 05 Oct 2024 22:01:24 +0900
Hi,

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

> Am Donnerstag, dem 03.10.2024 um 16:25 +0900 schrieb Maxim Cournoyer:
>> * gnu/packages/emulators.scm (jg-api): New variable.
>> 
>> Change-Id: I2cd2086560f8353f8260209c4ee0f117c3615917
>> ---
>> 
>> (no changes since v1)
>> 
>>  gnu/packages/emulators.scm | 26 ++++++++++++++++++++++++++
>>  1 file changed, 26 insertions(+)
>> 
>> diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
>> index 50a7b67121..09e722b4f4 100644
>> --- a/gnu/packages/emulators.scm
>> +++ b/gnu/packages/emulators.scm
>> @@ -2260,6 +2260,32 @@ (define-public bsnes
>>  performance, features, and ease of use.")
>>      (license license:gpl3)))
>>  
>> +(define-public jg-api
>> +  (package
>> +    (name "jg-api")
>> +    (version "1.0.0")
>> +    (source (origin
>> +              (method git-fetch)
>> +              (uri (git-reference
>> +                    (url "https://gitlab.com/jgemu/jg")
>> +                    (commit version)))
>> +              (file-name (git-file-name name version))
>> +              (sha256
>> +               (base32
>> +               
>> "0117cvfvzhrm9fxnryhbnf9r0f8ij4ahhfqiqp5yv11bz2wcyhqh"))))
>> +    (build-system gnu-build-system)
>> +    (arguments
>> +     (list #:tests? #f
> #:tests? #f should always go with a comment.

Good call; I've added the "standard" ";no test suite" inline comment.

>> +           #:make-flags #~(list (string-append "PREFIX=" #$output))
>> +           #:phases #~(modify-phases %standard-phases
>> +                        (delete 'configure)))) ;no configure phase
> What about 'bootstrap?

No need to mess with it; it checks if a "configure" script exists (which
doesn't in this case -- it's a pure Make-based build system) and when it
doesn't it simply does:

--8<---------------cut here---------------start------------->8---
(format #t "GNU build system bootstrapping not needed~%")
--8<---------------cut here---------------end--------------->8---

-- 
Thanks,
Maxim

Information forwarded to guix-patches <at> gnu.org:
bug#73488; Package guix-patches. (Sat, 05 Oct 2024 13:40:01 GMT) Full text and rfc822 format available.

Message #77 received at 73488 <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Cc: 73488 <at> debbugs.gnu.org, Adam Faiz <adam.faiz <at> disroot.org>,
 宋文武 <iyzsong <at> envs.net>
Subject: Re: [bug#73488] [PATCH games v3 5/7] gnu: Add jg-bsnes.
Date: Sat, 05 Oct 2024 22:38:19 +0900
Hi,

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

> Am Donnerstag, dem 03.10.2024 um 16:25 +0900 schrieb Maxim Cournoyer:
>> * gnu/packages/emulators.scm (jg-bsnes): New variable.
>> 
>> Change-Id: If88a7bea0c87c8af8fce051f8bec891ff249449f

[...]

>> +(define-public jg-bsnes
>> +  (package
>> +    (name "jg-bsnes")
>> +    (version "2.0.0")
>> +    (source (origin
>> +              (method git-fetch)
>> +              (uri (git-reference
>> +                    (url "https://gitlab.com/jgemu/bsnes")
>> +                    (commit version)))
>> +              (file-name (git-file-name name version))
>> +              ;; XXX: Some source dependencies are bundled and are
>> not easy to
>> +              ;; unbundle due to the build system building an object
>> combining
>> +              ;; their sources directly:
>> +              ;;  - byuuML
>> +              ;;  - gb
>> +              ;;  - libcoco
>> +              ;;  - snes_spc
> If possible, file an upstream bug and refer to that.

I don't think that's too feasible; these sources are intended to be used in
source forms; they don't ship with any build system.  See for example
byuuML [0].  gb corresponds to the 'core' source files of SameBoy:
https://github.com/LIJI32/SameBoy; it doesn't seem possible to build a
'core' library from that, although its symbols are probably part of the
a sameboy.so library we could build as part as our 'sameboy' package, so
this could be a possibility.

libco is supposed to be removed at some point [1] and finally spec_dsp
appears to be a modified forked of the original spec_dsp.c and spc_dsp.h
(no build system), making it more source than library.

I've still opened an issue mentioning that it'd be nice to use more deps
from the system, and that it seems it'd be practical to do so for
SameBoy [2].

[0]  https://github.com/SolraBizna/byuuML/tree/master?tab=readme-ov-file#using-the-byuuml-library
[1]  https://gitlab.com/jgemu/bsnes/-/issues/3
[2]  https://gitlab.com/jgemu/bsnes/-/issues/6

-- 
Thanks,
Maxim

Reply sent to Maxim Cournoyer <maxim.cournoyer <at> gmail.com>:
You have taken responsibility. (Sat, 05 Oct 2024 14:00:02 GMT) Full text and rfc822 format available.

Notification sent to Maxim Cournoyer <maxim.cournoyer <at> gmail.com>:
bug acknowledged by developer. (Sat, 05 Oct 2024 14:00:02 GMT) Full text and rfc822 format available.

Message #82 received at 73488-done <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: 73488-done <at> debbugs.gnu.org
Cc: 宋文武 <iyzsong <at> envs.net>,
 Liliana Marie Prikler <liliana.prikler <at> gmail.com>,
 Adam Faiz <adam.faiz <at> disroot.org>
Subject: Re: [bug#73488] [PATCH games v3 0/7] Add Jolly Good and some of its
 emulators
Date: Sat, 05 Oct 2024 22:58:28 +0900
Hi,

Maxim Cournoyer <maxim.cournoyer <at> gmail.com> writes:

> This series adds the Jolly Good emulator API and reference user
> interface (jgrf), and some core files (emulator plugins made to be used by
> it). Currently I've packaged and tested their bsnes, nestopia and cega ports.

With most of Liliana's comments addressed in what would be have been v4,
I went ahead and pushed this to master with commit 1ca236a02a and
following; thanks to Liliana for the review.

If I missed anything, let me know! Otherwise, enjoy.

-- 
Thanks,
Maxim




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 03 Nov 2024 12:24:13 GMT) Full text and rfc822 format available.

This bug report was last modified 265 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.