diff options
Diffstat (limited to 'pkgs/misc/emulators/higan/default.nix')
-rw-r--r-- | pkgs/misc/emulators/higan/default.nix | 133 |
1 files changed, 80 insertions, 53 deletions
diff --git a/pkgs/misc/emulators/higan/default.nix b/pkgs/misc/emulators/higan/default.nix index f77ce6635f2..e735bdb38ee 100644 --- a/pkgs/misc/emulators/higan/default.nix +++ b/pkgs/misc/emulators/higan/default.nix @@ -1,108 +1,135 @@ -{ stdenv, fetchurl -, p7zip, pkgconfig, libicns +{ stdenv, fetchFromGitHub +, pkgconfig , libX11, libXv , udev -, libGLU, libGL, SDL -, Carbon, Cocoa, OpenGL, OpenAL +, libGLU, libGL, SDL2 , libao, openal, libpulseaudio +, alsaLib , gtk2, gtksourceview -, runtimeShell }: +, runtimeShell +# Darwin dependencies +, libicns, Carbon, Cocoa, OpenGL, OpenAL}: -with stdenv.lib; +let + inherit (stdenv.lib) optionals; +in stdenv.mkDerivation rec { pname = "higan"; - version = "106"; - sourceName = "higan_v${version}-source"; + version = "110"; - src = fetchurl { - urls = [ "https://download.byuu.org/${sourceName}.7z" ]; - sha256 = "063dzp9wrdnbvagraxi31xg0154y2gf67rrd0mnc8h104cgzjr35"; - curlOpts = "--user-agent 'Mozilla/5.0'"; # the good old user-agent trick... + src = fetchFromGitHub { + owner = "higan-emu"; + repo = "higan"; + rev = "v${version}"; + sha256 = "11rvm53c3p2f6zk8xbyv2j51xp8zmqnch7zravhj3fk590qrjrr2"; }; patches = [ ./0001-change-flags.diff ]; postPatch = '' sed '1i#include <cmath>' -i higan/fc/ppu/ppu.cpp - for file in icarus/GNUmakefile higan/target-tomoko/GNUmakefile; do + for file in icarus/GNUmakefile higan/target-higan/GNUmakefile; do substituteInPlace "$file" \ --replace 'sips -s format icns data/$(name).png --out out/$(name).app/Contents/Resources/$(name).icns' \ 'png2icns out/$(name).app/Contents/Resources/$(name).icns data/$(name).png' done ''; - nativeBuildInputs = [ p7zip pkgconfig ] - ++ optional stdenv.isDarwin [ libicns ]; + nativeBuildInputs = [ pkgconfig ] + ++ optionals stdenv.isDarwin [ libicns ]; - buildInputs = - [ SDL libao ] - ++ optionals stdenv.isLinux [ openal libpulseaudio udev libX11 libXv libGLU libGL gtk2 gtksourceview ] - ++ optionals stdenv.isDarwin [ Carbon Cocoa OpenGL OpenAL ] - ; - - unpackPhase = '' - 7z x $src - sourceRoot=${sourceName} - ''; + buildInputs = [ SDL2 libao ] + ++ optionals stdenv.isLinux [ alsaLib udev libpulseaudio openal + gtk2 gtksourceview libX11 libXv + libGLU libGL ] + ++ optionals stdenv.isDarwin [ Carbon Cocoa OpenGL OpenAL ]; buildPhase = '' - make compiler=c++ -C icarus - make compiler=c++ -C higan + make compiler=c++ -C higan openmp=true target=higan + make compiler=c++ -C genius openmp=true + make compiler=c++ -C icarus openmp=true ''; - # Now the cheats file will be distributed separately - installPhase = (if !stdenv.isDarwin then '' - mkdir -p "$out"/bin "$out"/share/applications "$out"/share/pixmaps - install -m 755 icarus/out/icarus "$out"/bin/ - install -m 755 higan/out/higan "$out"/bin/ - install -m 644 higan/data/higan.desktop "$out"/share/applications/ - install -m 644 higan/data/higan.png "$out"/share/pixmaps/higan-icon.png - install -m 644 higan/resource/logo/higan.png "$out"/share/pixmaps/higan-logo.png - '' else '' + installPhase = (if stdenv.isDarwin then '' mkdir "$out" mv higan/out/higan.app "$out"/ mv icarus/out/icarus.app "$out"/ + mv genius/out/genius.app "$out"/ + '' else '' + install -dm 755 "$out"/bin "$out"/share/applications "$out"/share/pixmaps + + install -m 755 higan/out/higan -t "$out"/bin/ + install -m 644 higan/target-higan/resource/higan.desktop \ + -t $out/share/applications/ + install -m 644 higan/target-higan/resource/higan.svg \ + $out/share/pixmaps/higan-icon.svg + install -m 644 higan/target-higan/resource/higan.png \ + $out/share/pixmaps/higan-icon.png + + install -m 755 icarus/out/icarus -t "$out"/bin/ + install -m 644 icarus/data/icarus.desktop -t $out/share/applications/ + install -m 644 icarus/data/icarus.svg $out/share/pixmaps/icarus-icon.svg + install -m 644 icarus/data/icarus.png $out/share/pixmaps/icarus-icon.png + + install -m 755 genius/out/genius -t "$out"/bin/ + install -m 644 genius/data/genius.desktop -t $out/share/applications/ + install -m 644 genius/data/genius.svg $out/share/pixmaps/genius-icon.svg + install -m 644 genius/data/genius.png $out/share/pixmaps/genius-icon.png '') + '' - mkdir -p "$out"/share/higan + mkdir -p "$out"/share/higan "$out"/share/icarus + cp --recursive --no-dereference --preserve='links' --no-preserve='ownership' \ + higan/System/ "$out"/share/higan/ cp --recursive --no-dereference --preserve='links' --no-preserve='ownership' \ - higan/systems/* "$out"/share/higan/ + icarus/Database icarus/Firmware $out/share/icarus/ ''; fixupPhase = let - dest = if !stdenv.isDarwin then "\\$HOME/.local/share/higan" else "\\$HOME/Library/Application Support/higan"; + dest = if stdenv.isDarwin + then "\\$HOME/Library/Application Support/higan" + else "\\$HOME/higan"; in '' # A dirty workaround, suggested by @cpages: # we create a first-run script to populate - # the local $HOME with all the auxiliary - # stuff needed by higan at runtime + # $HOME with all the stuff needed at runtime mkdir -p "$out"/bin cat <<EOF > $out/bin/higan-init.sh #!${runtimeShell} - cp --recursive --update $out/share/higan/*.sys "${dest}"/ + cp --recursive --update $out/share/higan/System/ "${dest}"/ EOF chmod +x $out/bin/higan-init.sh ''; - meta = { - description = "An open-source, cycle-accurate Nintendo multi-system emulator"; + meta = with stdenv.lib; { + description = "An open-source, cycle-accurate multi-system emulator"; longDescription = '' - higan (formerly bsnes) is a multi-system game console emulator. + higan is a multi-system game console emulator. The purpose of higan is to + serve as hardware documentation in source code form: it is meant to be as + accurate and complete as possible, with code that is easy to read and + understand. + It currently supports the following systems: - - Nintendo's Famicom, Super Famicom (with subsystems: - Super Game Boy, BS-X Satellaview, Sufami Turbo); - Game Boy, Game Boy Color, Game Boy Advance; - - Sega's Master System, Game Gear, Mega Drive; - - NEC's PC Engine, SuperGrafx; - - Bandai's WonderSwan, WonderSwan Color. + - Famicom + Famicom Disk System + - Super Famicom + Super Game Boy + - Game Boy + Game Boy Color + - Game Boy Advance + Game Boy Player + - SG-1000 + SC-3000 + - Master System + Game Gear + - Mega Drive + Mega CD + - PC Engine + SuperGrafx + - MSX + MSX2 + - ColecoVision + - Neo Geo Pocket + Neo Geo Pocket Color + - WonderSwan + WonderSwan Color + SwanCrystal + Pocket Challenge V2 ''; - homepage = "https://byuu.org/emulation/higan/"; + homepage = "https://byuu.org/higan/"; license = licenses.gpl3Plus; maintainers = with maintainers; [ AndersonTorres ]; - platforms = with platforms; unix; + platforms = platforms.unix; }; } +# TODO: Qt and GTK3+ support |