* [bug#73488] [PATCH 1/7] gnu: bsnes: Remove input labels and use gexps.
[not found] <cover.1727320201.git.maxim.cournoyer@gmail.com>
@ 2024-09-26 3:09 ` Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 2/7] gnu: Add jg-api Maxim Cournoyer
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Maxim Cournoyer @ 2024-09-26 3:09 UTC (permalink / raw)
To: 73488; +Cc: Maxim Cournoyer
* 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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#73488] [PATCH 2/7] gnu: Add jg-api.
[not found] <cover.1727320201.git.maxim.cournoyer@gmail.com>
2024-09-26 3:09 ` [bug#73488] [PATCH 1/7] gnu: bsnes: Remove input labels and use gexps Maxim Cournoyer
@ 2024-09-26 3:09 ` Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 3/7] gnu: Add jgrf Maxim Cournoyer
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Maxim Cournoyer @ 2024-09-26 3:09 UTC (permalink / raw)
To: 73488; +Cc: Maxim Cournoyer
* 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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#73488] [PATCH 3/7] gnu: Add jgrf.
[not found] <cover.1727320201.git.maxim.cournoyer@gmail.com>
2024-09-26 3:09 ` [bug#73488] [PATCH 1/7] gnu: bsnes: Remove input labels and use gexps Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 2/7] gnu: Add jg-api Maxim Cournoyer
@ 2024-09-26 3:09 ` Maxim Cournoyer
2024-09-26 3:31 ` Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 4/7] gnu: jgrf: Add search path mechanism Maxim Cournoyer
` (3 subsequent siblings)
6 siblings, 1 reply; 8+ messages in thread
From: Maxim Cournoyer @ 2024-09-26 3:09 UTC (permalink / raw)
To: 73488; +Cc: Maxim Cournoyer
* 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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#73488] [PATCH 4/7] gnu: jgrf: Add search path mechanism.
[not found] <cover.1727320201.git.maxim.cournoyer@gmail.com>
` (2 preceding siblings ...)
2024-09-26 3:09 ` [bug#73488] [PATCH 3/7] gnu: Add jgrf Maxim Cournoyer
@ 2024-09-26 3:09 ` Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 5/7] gnu: Add jg-bsnes Maxim Cournoyer
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Maxim Cournoyer @ 2024-09-26 3:09 UTC (permalink / raw)
To: 73488; +Cc: Maxim Cournoyer
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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#73488] [PATCH 5/7] gnu: Add jg-bsnes.
[not found] <cover.1727320201.git.maxim.cournoyer@gmail.com>
` (3 preceding siblings ...)
2024-09-26 3:09 ` [bug#73488] [PATCH 4/7] gnu: jgrf: Add search path mechanism Maxim Cournoyer
@ 2024-09-26 3:09 ` Maxim Cournoyer
2024-09-26 3:10 ` [bug#73488] [PATCH 6/7] gnu: Add jg-nestopia Maxim Cournoyer
2024-09-26 3:10 ` [bug#73488] [PATCH 7/7] gnu: Add jg-cega Maxim Cournoyer
6 siblings, 0 replies; 8+ messages in thread
From: Maxim Cournoyer @ 2024-09-26 3:09 UTC (permalink / raw)
To: 73488; +Cc: Maxim Cournoyer
* 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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#73488] [PATCH 6/7] gnu: Add jg-nestopia.
[not found] <cover.1727320201.git.maxim.cournoyer@gmail.com>
` (4 preceding siblings ...)
2024-09-26 3:09 ` [bug#73488] [PATCH 5/7] gnu: Add jg-bsnes Maxim Cournoyer
@ 2024-09-26 3:10 ` Maxim Cournoyer
2024-09-26 3:10 ` [bug#73488] [PATCH 7/7] gnu: Add jg-cega Maxim Cournoyer
6 siblings, 0 replies; 8+ messages in thread
From: Maxim Cournoyer @ 2024-09-26 3:10 UTC (permalink / raw)
To: 73488; +Cc: Maxim Cournoyer
* 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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#73488] [PATCH 7/7] gnu: Add jg-cega.
[not found] <cover.1727320201.git.maxim.cournoyer@gmail.com>
` (5 preceding siblings ...)
2024-09-26 3:10 ` [bug#73488] [PATCH 6/7] gnu: Add jg-nestopia Maxim Cournoyer
@ 2024-09-26 3:10 ` Maxim Cournoyer
6 siblings, 0 replies; 8+ messages in thread
From: Maxim Cournoyer @ 2024-09-26 3:10 UTC (permalink / raw)
To: 73488; +Cc: Maxim Cournoyer
* 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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#73488] [PATCH 3/7] gnu: Add jgrf.
2024-09-26 3:09 ` [bug#73488] [PATCH 3/7] gnu: Add jgrf Maxim Cournoyer
@ 2024-09-26 3:31 ` Maxim Cournoyer
0 siblings, 0 replies; 8+ messages in thread
From: Maxim Cournoyer @ 2024-09-26 3:31 UTC (permalink / raw)
To: 73488
Hi,
Maxim Cournoyer <maxim.cournoyer@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
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-09-26 3:33 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <cover.1727320201.git.maxim.cournoyer@gmail.com>
2024-09-26 3:09 ` [bug#73488] [PATCH 1/7] gnu: bsnes: Remove input labels and use gexps Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 2/7] gnu: Add jg-api Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 3/7] gnu: Add jgrf Maxim Cournoyer
2024-09-26 3:31 ` Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 4/7] gnu: jgrf: Add search path mechanism Maxim Cournoyer
2024-09-26 3:09 ` [bug#73488] [PATCH 5/7] gnu: Add jg-bsnes Maxim Cournoyer
2024-09-26 3:10 ` [bug#73488] [PATCH 6/7] gnu: Add jg-nestopia Maxim Cournoyer
2024-09-26 3:10 ` [bug#73488] [PATCH 7/7] gnu: Add jg-cega Maxim Cournoyer
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).