diff mbox

gnu: Add higan.

Message ID 87fustalcn.fsf@T420.taylan
State New
Headers show

Commit Message

Taylan Ulrich Bayırlı =?utf-8?Q?=2FKammer?= June 3, 2016, 11:44 p.m. UTC
Some things to note about this package & questions:

- There's no official VCS repo and the author doesn't want automated
  tools to download files from his homepage; there's an unofficial git
  repo at GitLab but I found it unsuitable so I'm hosting the sources
  specifically for Guix at GitHub now:

  https://github.com/TaylanUB/higan

  Is this OK, or is there a place we can upload the original source
  bundle for Guix to download from?

- I forgot if there's a guideline for this: the release versions are
  called 'v097', 'v098' etc. with always a 'v' in front.  Should that
  'v' appear in the version field of the package or should it be
  stripped?

- As seems to be tradition among emulator developers, the build system
  and the program's handling of the file system are a big pile of poo,
  so:

  * Is it principally OK to reuse the standard `build' and `install'
    phase procedures a second time, just with the CWD changed, as I do
    here?

  * The program insists on looking in ~/.local/share for some data files
    that are actually installed in $prefix/share; does my strategy here
    look OK, in that I wrap the executable to copy the data files into
    ~/.local/share every time the program is run?

Thank you!

Taylan

Comments

Taylan Ulrich Bayırlı =?utf-8?Q?=2FKammer?= June 7, 2016, 3:28 p.m. UTC | #1
If there are no comments, I'll just push this soon, and issues can be
fixed later; at least it builds and runs fine. :-)

Taylan


taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") writes:

> Some things to note about this package & questions:
>
> - There's no official VCS repo and the author doesn't want automated
>   tools to download files from his homepage; there's an unofficial git
>   repo at GitLab but I found it unsuitable so I'm hosting the sources
>   specifically for Guix at GitHub now:
>
>   https://github.com/TaylanUB/higan
>
>   Is this OK, or is there a place we can upload the original source
>   bundle for Guix to download from?
>
> - I forgot if there's a guideline for this: the release versions are
>   called 'v097', 'v098' etc. with always a 'v' in front.  Should that
>   'v' appear in the version field of the package or should it be
>   stripped?
>
> - As seems to be tradition among emulator developers, the build system
>   and the program's handling of the file system are a big pile of poo,
>   so:
>
>   * Is it principally OK to reuse the standard `build' and `install'
>     phase procedures a second time, just with the CWD changed, as I do
>     here?
>
>   * The program insists on looking in ~/.local/share for some data files
>     that are actually installed in $prefix/share; does my strategy here
>     look OK, in that I wrap the executable to copy the data files into
>     ~/.local/share every time the program is run?
>
> Thank you!
>
> Taylan
>
>
> From 707e8fc3c2ba1293693168b1d7a34e6000671158 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
>  <taylanbayirli@gmail.com>
> Date: Sun, 1 Nov 2015 20:45:09 +0100
> Subject: [PATCH] gnu: Add higan.
>
> * gnu/packages/games.scm (higan): New variable.
> ---
>  gnu/packages/games.scm | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 92 insertions(+)
>
> diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
> index e552d09..57f8907 100644
> --- a/gnu/packages/games.scm
> +++ b/gnu/packages/games.scm
> @@ -2243,3 +2243,95 @@ Red Eclipse provides fast paced and accessible gameplay.")
>                       license:cc-by-sa3.0
>                       license:cc-by3.0
>                       license:cc0)))))
> +
> +(define-public higan
> +  (package
> +    (name "higan")
> +    (version "v098")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (string-append
> +             "https://github.com/TaylanUB/higan/archive/" version ".tar.gz"))
> +       (file-name (string-append name "-" version ".tar.gz"))
> +       (sha256
> +        (base32 "12snxrk8wa94x3l69qcimgm0xc22zjgf7vzhckp2lzyfbf27950v"))))
> +    (build-system gnu-build-system)
> +    (native-inputs
> +     `(("pkg-config" ,pkg-config)))
> +    (inputs
> +     `(("alsa-lib" ,alsa-lib)
> +       ("ao" ,ao)
> +       ("eudev" ,eudev)
> +       ("gtk+" ,gtk+-2)
> +       ("gtksourceview-2" ,gtksourceview-2)
> +       ("libxv" ,libxv)
> +       ("mesa" ,mesa)
> +       ("openal" ,openal)
> +       ("pulseaudio" ,pulseaudio)
> +       ("sdl" ,sdl)))
> +    (arguments
> +     '(#:phases
> +       (let ((build-phase (assoc-ref %standard-phases 'build))
> +             (install-phase (assoc-ref %standard-phases 'install)))
> +         (modify-phases %standard-phases
> +           ;; The higan build system has no configure phase.
> +           (delete 'configure)
> +           (add-before 'build 'chdir-to-higan
> +             (lambda _
> +               (chdir "higan")))
> +           (add-before 'install 'create-/share/applications
> +             (lambda* (#:key outputs #:allow-other-keys)
> +               (let ((out (assoc-ref outputs "out")))
> +                 ;; It seems the author forgot to do this in the Makefile.
> +                 (mkdir-p (string-append out "/share/applications")))))
> +           (add-after 'install 'chdir-to-icarus
> +             (lambda _
> +               (chdir "../icarus")))
> +           (add-after 'chdir-to-icarus 'build-icarus build-phase)
> +           (add-after 'build-icarus 'install-icarus install-phase)
> +           (add-after 'install-icarus 'wrap-higan-executable
> +             (lambda* (#:key inputs outputs #:allow-other-keys)
> +               (let* ((out (assoc-ref outputs "out"))
> +                      (bin (string-append out "/bin"))
> +                      (higan (string-append bin "/higan"))
> +                      (higan-original (string-append higan "-original"))
> +                      (bash (string-append (assoc-ref inputs "bash")
> +                                           "/bin/bash"))
> +                      (coreutils (assoc-ref inputs "coreutils"))
> +                      (mkdir (string-append coreutils "/bin/mkdir"))
> +                      (cp (string-append coreutils "/bin/cp")))
> +                 ;; First, have the executable make sure ~/.local/share/higan
> +                 ;; contains up to date files.  Higan insists on looking there
> +                 ;; for these data files.
> +                 (rename-file higan higan-original)
> +                 (with-output-to-file higan
> +                   (lambda ()
> +                     (display
> +                      (string-append
> +                       "#!" bash "\n"
> +                       ;; higan doesn't respect $XDG_DATA_HOME
> +                       mkdir " -p ~/.local/share\n"
> +                       cp " -r " out "/share/higan ~/.local/share\n"
> +                       "exec " higan-original))))
> +                 (chmod higan #o555)
> +                 ;; Second, make sure higan will find icarus in PATH.
> +                 (wrap-program higan
> +                   `("PATH" ":" prefix (,bin))))))))
> +       #:make-flags
> +       (list "compiler=g++"
> +             (string-append "prefix=" (assoc-ref %outputs "out")))
> +       ;; There is no test suite.
> +       #:tests? #f))
> +    (home-page "http://byuu.org/emulation/higan/")
> +    (synopsis "Nintendo multi-system emulator")
> +    (description
> +     "higan (formerly bsnes) is an emulator for multiple Nintendo video game
> +consoles, including the Nintendo Entertainment System (NES/Famicom), Super
> +Nintendo Entertainment System (SNES/Super Famicom), Game Boy, Game Boy
> +Color (GBC), and Game Boy Advance (GBA).  It also supports the subsystems
> +Super Game Boy, BS-X Satellaview, and Sufami Turbo.")
> +    ;; As noted in these files among more:
> +    ;; - icarus/icarus.cpp
> +    ;; - higan/emulator/emulator.hpp
> +    (license license:gpl3)))
Efraim Flashner June 7, 2016, 6:29 p.m. UTC | #2
On Tue, Jun 07, 2016 at 06:28:59PM +0300, Taylan Ulrich Bayırlı/Kammer wrote:
> If there are no comments, I'll just push this soon, and issues can be
> fixed later; at least it builds and runs fine. :-)
> 
> Taylan
> 
> 
> taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") writes:
> 
> > Some things to note about this package & questions:
> >
> > - There's no official VCS repo and the author doesn't want automated
> >   tools to download files from his homepage; there's an unofficial git
> >   repo at GitLab but I found it unsuitable so I'm hosting the sources
> >   specifically for Guix at GitHub now:
> >

it does list http://download.byuu.org/higan_v098-source.7z and it lists
the git repo at https://gitlab.com/higan/higan , which only there says
its the unofficial one.

> >   https://github.com/TaylanUB/higan
> >
> >   Is this OK, or is there a place we can upload the original source
> >   bundle for Guix to download from?
> >
> > - I forgot if there's a guideline for this: the release versions are
> >   called 'v097', 'v098' etc. with always a 'v' in front.  Should that
> >   'v' appear in the version field of the package or should it be
> >   stripped?

This one I have some insight for. Vapoursynth numbers all their versions
R28, R29, etc. Its version is 29, with the download as `... name "-R"
version ...'

> >
> > - As seems to be tradition among emulator developers, the build system
> >   and the program's handling of the file system are a big pile of poo,
> >   so:
> >
> >   * Is it principally OK to reuse the standard `build' and `install'
> >     phase procedures a second time, just with the CWD changed, as I do
> >     here?

that should be ok

> >
> >   * The program insists on looking in ~/.local/share for some data files
> >     that are actually installed in $prefix/share; does my strategy here
> >     look OK, in that I wrap the executable to copy the data files into
> >     ~/.local/share every time the program is run?
> >
> > Thank you!
> >
> > Taylan
> >
> >
> > From 707e8fc3c2ba1293693168b1d7a34e6000671158 Mon Sep 17 00:00:00 2001
> > From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
> >  <taylanbayirli@gmail.com>
> > Date: Sun, 1 Nov 2015 20:45:09 +0100
> > Subject: [PATCH] gnu: Add higan.
> >
> > * gnu/packages/games.scm (higan): New variable.
> > ---
> >  gnu/packages/games.scm | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 92 insertions(+)
> >
> > diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
> > index e552d09..57f8907 100644
> > --- a/gnu/packages/games.scm
> > +++ b/gnu/packages/games.scm
> > @@ -2243,3 +2243,95 @@ Red Eclipse provides fast paced and accessible gameplay.")
> >                       license:cc-by-sa3.0
> >                       license:cc-by3.0
> >                       license:cc0)))))
> > +
> > +(define-public higan
> > +  (package
> > +    (name "higan")
> > +    (version "v098")
> > +    (source
> > +     (origin
> > +       (method url-fetch)
> > +       (uri (string-append
> > +             "https://github.com/TaylanUB/higan/archive/" version ".tar.gz"))
> > +       (file-name (string-append name "-" version ".tar.gz"))
> > +       (sha256
> > +        (base32 "12snxrk8wa94x3l69qcimgm0xc22zjgf7vzhckp2lzyfbf27950v"))))
> > +    (build-system gnu-build-system)
> > +    (native-inputs
> > +     `(("pkg-config" ,pkg-config)))
> > +    (inputs
> > +     `(("alsa-lib" ,alsa-lib)
> > +       ("ao" ,ao)
> > +       ("eudev" ,eudev)
> > +       ("gtk+" ,gtk+-2)
> > +       ("gtksourceview-2" ,gtksourceview-2)
> > +       ("libxv" ,libxv)
> > +       ("mesa" ,mesa)
> > +       ("openal" ,openal)
> > +       ("pulseaudio" ,pulseaudio)
> > +       ("sdl" ,sdl)))
> > +    (arguments
> > +     '(#:phases
> > +       (let ((build-phase (assoc-ref %standard-phases 'build))
> > +             (install-phase (assoc-ref %standard-phases 'install)))
> > +         (modify-phases %standard-phases
> > +           ;; The higan build system has no configure phase.
> > +           (delete 'configure)
> > +           (add-before 'build 'chdir-to-higan
> > +             (lambda _
> > +               (chdir "higan")))
> > +           (add-before 'install 'create-/share/applications
> > +             (lambda* (#:key outputs #:allow-other-keys)
> > +               (let ((out (assoc-ref outputs "out")))
> > +                 ;; It seems the author forgot to do this in the Makefile.
> > +                 (mkdir-p (string-append out "/share/applications")))))
> > +           (add-after 'install 'chdir-to-icarus
> > +             (lambda _
> > +               (chdir "../icarus")))
> > +           (add-after 'chdir-to-icarus 'build-icarus build-phase)
> > +           (add-after 'build-icarus 'install-icarus install-phase)
> > +           (add-after 'install-icarus 'wrap-higan-executable
> > +             (lambda* (#:key inputs outputs #:allow-other-keys)
> > +               (let* ((out (assoc-ref outputs "out"))
> > +                      (bin (string-append out "/bin"))
> > +                      (higan (string-append bin "/higan"))
> > +                      (higan-original (string-append higan "-original"))
> > +                      (bash (string-append (assoc-ref inputs "bash")
> > +                                           "/bin/bash"))
> > +                      (coreutils (assoc-ref inputs "coreutils"))
> > +                      (mkdir (string-append coreutils "/bin/mkdir"))
> > +                      (cp (string-append coreutils "/bin/cp")))
> > +                 ;; First, have the executable make sure ~/.local/share/higan
> > +                 ;; contains up to date files.  Higan insists on looking there
> > +                 ;; for these data files.
> > +                 (rename-file higan higan-original)
> > +                 (with-output-to-file higan
> > +                   (lambda ()
> > +                     (display
> > +                      (string-append
> > +                       "#!" bash "\n"
> > +                       ;; higan doesn't respect $XDG_DATA_HOME
> > +                       mkdir " -p ~/.local/share\n"
> > +                       cp " -r " out "/share/higan ~/.local/share\n"
> > +                       "exec " higan-original))))
> > +                 (chmod higan #o555)
> > +                 ;; Second, make sure higan will find icarus in PATH.
> > +                 (wrap-program higan
> > +                   `("PATH" ":" prefix (,bin))))))))
> > +       #:make-flags
> > +       (list "compiler=g++"
> > +             (string-append "prefix=" (assoc-ref %outputs "out")))
> > +       ;; There is no test suite.
> > +       #:tests? #f))
> > +    (home-page "http://byuu.org/emulation/higan/")
> > +    (synopsis "Nintendo multi-system emulator")
> > +    (description
> > +     "higan (formerly bsnes) is an emulator for multiple Nintendo video game
> > +consoles, including the Nintendo Entertainment System (NES/Famicom), Super
> > +Nintendo Entertainment System (SNES/Super Famicom), Game Boy, Game Boy
> > +Color (GBC), and Game Boy Advance (GBA).  It also supports the subsystems
> > +Super Game Boy, BS-X Satellaview, and Sufami Turbo.")
> > +    ;; As noted in these files among more:
> > +    ;; - icarus/icarus.cpp
> > +    ;; - higan/emulator/emulator.hpp
> > +    (license license:gpl3)))
>
Taylan Ulrich Bayırlı =?utf-8?Q?=2FKammer?= June 7, 2016, 7:08 p.m. UTC | #3
Efraim Flashner <efraim@flashner.co.il> writes:

> On Tue, Jun 07, 2016 at 06:28:59PM +0300, Taylan Ulrich Bayırlı/Kammer wrote:
>> If there are no comments, I'll just push this soon, and issues can be
>> fixed later; at least it builds and runs fine. :-)
>> 
>> Taylan
>> 
>> 
>> taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") writes:
>> 
>> > Some things to note about this package & questions:
>> >
>> > - There's no official VCS repo and the author doesn't want automated
>> >   tools to download files from his homepage; there's an unofficial git
>> >   repo at GitLab but I found it unsuitable so I'm hosting the sources
>> >   specifically for Guix at GitHub now:
>> >
>
> it does list http://download.byuu.org/higan_v098-source.7z and it lists
> the git repo at https://gitlab.com/higan/higan , which only there says
> its the unofficial one.

The author doesn't wish for build tools to download tarballs from the
site.  From a thread on the BBS forum:

| I don't want people writing build scripts that fetch the source from
| byuu.org. I change file names and directory structures all the time,
| and I don't want that breaking people's builds.

| I would rather distributions host their own repositories of build
| files. And for that, you're welcome to store higan in .tar.xz format
| instead of .7z format.

The linked GitLab repo could be said to be semi-official, but I noted
that it doesn't tag releases very consistently.  E.g. there's no tag for
the latest release.

>> >   https://github.com/TaylanUB/higan
>> >
>> >   Is this OK, or is there a place we can upload the original source
>> >   bundle for Guix to download from?
>> >
>> > - I forgot if there's a guideline for this: the release versions are
>> >   called 'v097', 'v098' etc. with always a 'v' in front.  Should that
>> >   'v' appear in the version field of the package or should it be
>> >   stripped?
>
> This one I have some insight for. Vapoursynth numbers all their versions
> R28, R29, etc. Its version is 29, with the download as `... name "-R"
> version ...'

Ah good, I'll strip the 'v' then.

>> > - As seems to be tradition among emulator developers, the build system
>> >   and the program's handling of the file system are a big pile of poo,
>> >   so:
>> >
>> >   * Is it principally OK to reuse the standard `build' and `install'
>> >     phase procedures a second time, just with the CWD changed, as I do
>> >     here?
>
> that should be ok

Thanks for the review. :-)

Taylan
Ludovic Courtès June 8, 2016, 12:37 p.m. UTC | #4
taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") skribis:

> Some things to note about this package & questions:
>
> - There's no official VCS repo and the author doesn't want automated
>   tools to download files from his homepage; there's an unofficial git
>   repo at GitLab but I found it unsuitable so I'm hosting the sources
>   specifically for Guix at GitHub now:
>
>   https://github.com/TaylanUB/higan

In what sense is it unsuitable?  It’s OK to have a couple of patches,
but it’s not quite OK to host a fork of the upstream package, IMO (at
the very least, it can create confusion and make it harder to see how it
differs from the “real” package.)

> - I forgot if there's a guideline for this: the release versions are
>   called 'v097', 'v098' etc. with always a 'v' in front.  Should that
>   'v' appear in the version field of the package or should it be
>   stripped?

I’d strip it.

> - As seems to be tradition among emulator developers, the build system
>   and the program's handling of the file system are a big pile of poo,
>   so:
>
>   * Is it principally OK to reuse the standard `build' and `install'
>     phase procedures a second time, just with the CWD changed, as I do
>     here?

It’s OK, though I often find it clearer to use
‘with-directory-excursion’ so that we can more easily reason about the
current directory.

>   * The program insists on looking in ~/.local/share for some data files
>     that are actually installed in $prefix/share; does my strategy here
>     look OK, in that I wrap the executable to copy the data files into
>     ~/.local/share every time the program is run?

Sounds like a sledgehammer no?  :-)

If those files are immutable, what about patching Higan to look for
those files in $datadir instead?

Thanks, and sorry for the delay!

Ludo’.
Taylan Ulrich Bayırlı =?utf-8?Q?=2FKammer?= June 8, 2016, 1:21 p.m. UTC | #5
ludo@gnu.org (Ludovic Courtès) writes:

> taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") skribis:
>
>> Some things to note about this package & questions:
>>
>> - There's no official VCS repo and the author doesn't want automated
>>   tools to download files from his homepage; there's an unofficial git
>>   repo at GitLab but I found it unsuitable so I'm hosting the sources
>>   specifically for Guix at GitHub now:
>>
>>   https://github.com/TaylanUB/higan
>
> In what sense is it unsuitable?  It’s OK to have a couple of patches,
> but it’s not quite OK to host a fork of the upstream package, IMO (at
> the very least, it can create confusion and make it harder to see how it
> differs from the “real” package.)

The repo is just for having a consistent place from which the source can
be fetched, as the author doesn't want source bundles to be downloaded
from his website.  No changes to the code are made.

The repo at GitLab didn't seem to tag releases properly.  That being
said, now that I look at it, it seems more like an oversight for v098.
Other releases seem to be tagged quite consistently:

    https://gitlab.com/higan/higan/tags

Should we use that repo instead?  It's a bit more official than mine.

>>   * The program insists on looking in ~/.local/share for some data files
>>     that are actually installed in $prefix/share; does my strategy here
>>     look OK, in that I wrap the executable to copy the data files into
>>     ~/.local/share every time the program is run?
>
> Sounds like a sledgehammer no?  :-)
>
> If those files are immutable, what about patching Higan to look for
> those files in $datadir instead?

Apparently, the files that are part of the distribution are pure data
files, i.e. fine to be read-only.  However, the directory hierarchy of
which they're a part needs to be writable, as higan creates further
files there.  With that cp -r, the directory hierarchy is made sure to
be there, and the data files made sure to be up to date.

Although I didn't look too closely at the sources, patching higan to do
things differently would presumably be a nontrivial task, since it seems
bent on doing things in terms of this directory structure that contains
both pure data and read-write data files.

> Thanks, and sorry for the delay!

No problem, thanks for the review. :-)

> Ludo’.

Taylan


P.S.: I already pushed a patch yesterday, but can push fixes as desired.
Ludovic Courtès June 8, 2016, 3:27 p.m. UTC | #6
taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") skribis:

> ludo@gnu.org (Ludovic Courtès) writes:

[...]

>> In what sense is it unsuitable?  It’s OK to have a couple of patches,
>> but it’s not quite OK to host a fork of the upstream package, IMO (at
>> the very least, it can create confusion and make it harder to see how it
>> differs from the “real” package.)
>
> The repo is just for having a consistent place from which the source can
> be fetched, as the author doesn't want source bundles to be downloaded
> from his website.  No changes to the code are made.
>
> The repo at GitLab didn't seem to tag releases properly.  That being
> said, now that I look at it, it seems more like an oversight for v098.
> Other releases seem to be tagged quite consistently:
>
>     https://gitlab.com/higan/higan/tags
>
> Should we use that repo instead?  It's a bit more official than mine.

Yes, I think it would be more appropriate.

>>>   * The program insists on looking in ~/.local/share for some data files
>>>     that are actually installed in $prefix/share; does my strategy here
>>>     look OK, in that I wrap the executable to copy the data files into
>>>     ~/.local/share every time the program is run?
>>
>> Sounds like a sledgehammer no?  :-)
>>
>> If those files are immutable, what about patching Higan to look for
>> those files in $datadir instead?
>
> Apparently, the files that are part of the distribution are pure data
> files, i.e. fine to be read-only.  However, the directory hierarchy of
> which they're a part needs to be writable, as higan creates further
> files there.  With that cp -r, the directory hierarchy is made sure to
> be there, and the data files made sure to be up to date.
>
> Although I didn't look too closely at the sources, patching higan to do
> things differently would presumably be a nontrivial task, since it seems
> bent on doing things in terms of this directory structure that contains
> both pure data and read-write data files.

Hmm OK.  What do other distros do?

Thank you!

Ludo’.
diff mbox

Patch

From 707e8fc3c2ba1293693168b1d7a34e6000671158 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
 <taylanbayirli@gmail.com>
Date: Sun, 1 Nov 2015 20:45:09 +0100
Subject: [PATCH] gnu: Add higan.

* gnu/packages/games.scm (higan): New variable.
---
 gnu/packages/games.scm | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 92 insertions(+)

diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index e552d09..57f8907 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -2243,3 +2243,95 @@  Red Eclipse provides fast paced and accessible gameplay.")
                      license:cc-by-sa3.0
                      license:cc-by3.0
                      license:cc0)))))
+
+(define-public higan
+  (package
+    (name "higan")
+    (version "v098")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/TaylanUB/higan/archive/" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12snxrk8wa94x3l69qcimgm0xc22zjgf7vzhckp2lzyfbf27950v"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("ao" ,ao)
+       ("eudev" ,eudev)
+       ("gtk+" ,gtk+-2)
+       ("gtksourceview-2" ,gtksourceview-2)
+       ("libxv" ,libxv)
+       ("mesa" ,mesa)
+       ("openal" ,openal)
+       ("pulseaudio" ,pulseaudio)
+       ("sdl" ,sdl)))
+    (arguments
+     '(#:phases
+       (let ((build-phase (assoc-ref %standard-phases 'build))
+             (install-phase (assoc-ref %standard-phases 'install)))
+         (modify-phases %standard-phases
+           ;; The higan build system has no configure phase.
+           (delete 'configure)
+           (add-before 'build 'chdir-to-higan
+             (lambda _
+               (chdir "higan")))
+           (add-before 'install 'create-/share/applications
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 ;; It seems the author forgot to do this in the Makefile.
+                 (mkdir-p (string-append out "/share/applications")))))
+           (add-after 'install 'chdir-to-icarus
+             (lambda _
+               (chdir "../icarus")))
+           (add-after 'chdir-to-icarus 'build-icarus build-phase)
+           (add-after 'build-icarus 'install-icarus install-phase)
+           (add-after 'install-icarus 'wrap-higan-executable
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin"))
+                      (higan (string-append bin "/higan"))
+                      (higan-original (string-append higan "-original"))
+                      (bash (string-append (assoc-ref inputs "bash")
+                                           "/bin/bash"))
+                      (coreutils (assoc-ref inputs "coreutils"))
+                      (mkdir (string-append coreutils "/bin/mkdir"))
+                      (cp (string-append coreutils "/bin/cp")))
+                 ;; First, have the executable make sure ~/.local/share/higan
+                 ;; contains up to date files.  Higan insists on looking there
+                 ;; for these data files.
+                 (rename-file higan higan-original)
+                 (with-output-to-file higan
+                   (lambda ()
+                     (display
+                      (string-append
+                       "#!" bash "\n"
+                       ;; higan doesn't respect $XDG_DATA_HOME
+                       mkdir " -p ~/.local/share\n"
+                       cp " -r " out "/share/higan ~/.local/share\n"
+                       "exec " higan-original))))
+                 (chmod higan #o555)
+                 ;; Second, make sure higan will find icarus in PATH.
+                 (wrap-program higan
+                   `("PATH" ":" prefix (,bin))))))))
+       #:make-flags
+       (list "compiler=g++"
+             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ;; There is no test suite.
+       #:tests? #f))
+    (home-page "http://byuu.org/emulation/higan/")
+    (synopsis "Nintendo multi-system emulator")
+    (description
+     "higan (formerly bsnes) is an emulator for multiple Nintendo video game
+consoles, including the Nintendo Entertainment System (NES/Famicom), Super
+Nintendo Entertainment System (SNES/Super Famicom), Game Boy, Game Boy
+Color (GBC), and Game Boy Advance (GBA).  It also supports the subsystems
+Super Game Boy, BS-X Satellaview, and Sufami Turbo.")
+    ;; As noted in these files among more:
+    ;; - icarus/icarus.cpp
+    ;; - higan/emulator/emulator.hpp
+    (license license:gpl3)))
-- 
2.7.4