From 187718251e4c9d6b0e5db8363dce1f937f94fb4c Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Mon, 6 Apr 2020 08:46:00 -0300 Subject: [PATCH] higan: 106 -> 110 --- .../emulators/higan/0001-change-flags.diff | 49 ++++--- pkgs/misc/emulators/higan/default.nix | 133 +++++++++++------- 2 files changed, 104 insertions(+), 78 deletions(-) diff --git a/pkgs/misc/emulators/higan/0001-change-flags.diff b/pkgs/misc/emulators/higan/0001-change-flags.diff index 5821a9c130b0a6..745bba5d518dad 100644 --- a/pkgs/misc/emulators/higan/0001-change-flags.diff +++ b/pkgs/misc/emulators/higan/0001-change-flags.diff @@ -1,26 +1,25 @@ -diff -Naur higan_v105-source.old/higan/GNUmakefile higan_v105-source.new/higan/GNUmakefile ---- higan_v105-source.old/higan/GNUmakefile 2017-10-07 01:34:22.000000000 -0300 -+++ higan_v105-source.new/higan/GNUmakefile 2017-10-17 00:02:40.580957396 -0200 -@@ -26,7 +26,7 @@ - flags += -fopenmp - link += -fopenmp - ifeq ($(binary),application) -- flags += -march=native -+ flags += - link += -Wl,-export-dynamic - link += -lX11 -lXext - else ifeq ($(binary),library) -diff -Naur higan_v105-source.old/nall/GNUmakefile higan_v105-source.new/nall/GNUmakefile ---- higan_v105-source.old/nall/GNUmakefile 2017-09-23 18:34:22.000000000 -0300 -+++ higan_v105-source.new/nall/GNUmakefile 2017-10-17 00:03:33.568916550 -0200 -@@ -40,8 +40,8 @@ - objcflags := -x objective-c -std=c11 - cppflags := -x c++ -std=c++14 - objcppflags := -x objective-c++ -std=c++14 --flags := --link := -+flags := $(CXXFLAGS) -+link := $(LDFLAGS) +diff -Naur higan-110-old/higan/GNUmakefile higan-110-new/higan/GNUmakefile +--- higan-110-old/higan/GNUmakefile 2020-04-15 11:06:00.279935557 -0300 ++++ higan-110-new/higan/GNUmakefile 2020-04-15 11:08:32.982417291 -0300 +@@ -11,7 +11,7 @@ + include $(nall.path)/GNUmakefile - # compiler detection - ifeq ($(compiler),) + ifeq ($(platform),local) +- flags += -march=native ++ flags += + endif + + ifeq ($(platform),windows) +diff -Naur higan-110-old/nall/GNUmakefile higan-110-new/nall/GNUmakefile +--- higan-110-old/nall/GNUmakefile 2020-04-15 11:06:00.396935154 -0300 ++++ higan-110-new/nall/GNUmakefile 2020-04-15 11:10:37.738011488 -0300 +@@ -127,7 +127,8 @@ + + # linux settings + ifeq ($(platform),linux) +- options += -ldl ++ flags += $(CXXFLAGS) ++ options += $(LDFLAGS) -ldl + endif + + # bsd settings diff --git a/pkgs/misc/emulators/higan/default.nix b/pkgs/misc/emulators/higan/default.nix index f77ce6635f2dac..e735bdb38eed47 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 ' -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 < $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