diff --git a/pkgs/by-name/np/np2kai/package.nix b/pkgs/by-name/np/np2kai/package.nix index add57748df67..8ed66b71bdfe 100644 --- a/pkgs/by-name/np/np2kai/package.nix +++ b/pkgs/by-name/np/np2kai/package.nix @@ -2,32 +2,23 @@ stdenv, lib, fetchFromGitHub, - enable16Bit ? true, - enable32Bit ? true, - - enableSDL ? true, - withSDLVersion ? "2", - SDL, - SDL_ttf, - SDL_mixer, + unstableGitUpdater, + writeShellApplication, + cmake, + fontconfig, + freetype, + glib, + gtk2, + libusb1, + libX11, + openssl, + pkg-config, SDL2, SDL2_ttf, SDL2_mixer, + enable16Bit ? true, enableX11 ? stdenv.hostPlatform.isLinux, - automake, - autoconf, - autoconf-archive, - libtool, - pkg-config, - unzip, - gtk2, - libusb1, - libXxf86vm, - nasm, - libICE, - libSM, - # HAXM build succeeds but the binary segfaults, seemingly due to the missing HAXM kernel module # Enable once there is a HAXM kernel module option in NixOS? Or somehow bind it to the system kernel having HAXM? # Or leave it disabled by default? @@ -35,198 +26,104 @@ enableHAXM ? false, }: -assert lib.assertMsg ( - enable16Bit || enable32Bit -) "Must enable 16-Bit and/or 32-Bit system variant."; -assert lib.assertMsg (enableSDL || enableX11) "Must enable SDL and/or X11 graphics interfaces."; -assert lib.assertOneOf "withSDLVersion" withSDLVersion [ - "1" - "2" -]; -assert enableHAXM -> (lib.assertMsg enableX11 "Must enable X11 graphics interface for HAXM build."); -let - inherit (lib) optional optionals optionalString; - inherit (lib.strings) concatStringsSep concatMapStringsSep; - isSDL2 = (withSDLVersion == "2"); - sdlInfix = optionalString isSDL2 "2"; - sdlDeps1 = [ - SDL - SDL_ttf - SDL_mixer - ]; - sdlDeps2 = [ - SDL2 - SDL2_ttf - SDL2_mixer - ]; - sdlDepsBuildonly = if isSDL2 then sdlDeps1 else sdlDeps2; - sdlDepsTarget = if isSDL2 then sdlDeps2 else sdlDeps1; - sdlMakefileSuffix = - if stdenv.hostPlatform.isWindows then - "win" - else if stdenv.hostPlatform.isDarwin then - "mac" - else - "unix"; - sdlMakefiles = concatMapStringsSep " " (x: x + "." + sdlMakefileSuffix) ( - optionals enable16Bit [ - "Makefile" - ] - ++ optionals enable32Bit [ - "Makefile21" - ] - ); - sdlBuildFlags = concatStringsSep " " ( - optionals enableSDL [ - "SDL_VERSION=${withSDLVersion}" - ] - ); - sdlBins = concatStringsSep " " ( - optionals enable16Bit [ - "np2kai" - ] - ++ optionals enable32Bit [ - "np21kai" - ] - ); - x11ConfigureFlags = concatStringsSep " " ( - ( - if ((enableHAXM && (enable16Bit || enable32Bit)) || (enable16Bit && enable32Bit)) then - [ - "--enable-build-all" - ] - else if enableHAXM then - [ - "--enable-haxm" - ] - else if enable32Bit then - [ - "--enable-ia32" - ] - else - [ ] - ) - ++ optionals (!isSDL2) [ - "--enable-sdl" - "--enable-sdlmixer" - "--enable-sdlttf" - - "--enable-sdl2=no" - "--enable-sdl2mixer=no" - "--enable-sdl2ttf=no" - ] - ); - x11BuildFlags = concatStringsSep " " [ - "SDL2_CONFIG=sdl2-config" - "SDL_CONFIG=sdl-config" - "SDL_CFLAGS=\"$(sdl${sdlInfix}-config --cflags)\"" - "SDL_LIBS=\"$(sdl${sdlInfix}-config --libs) -lSDL${sdlInfix}_mixer -lSDL${sdlInfix}_ttf\"" - ]; - x11Bins = concatStringsSep " " ( - optionals enable16Bit [ - "xnp2kai" - ] - ++ optionals enable32Bit [ - "xnp21kai" - ] - ++ optionals enableHAXM [ - "xnp21kai_haxm" - ] - ); -in -stdenv.mkDerivation rec { +stdenv.mkDerivation (finalAttrs: { pname = "np2kai"; - version = "0.86rev22"; # update src.rev to commit rev accordingly + version = "0.86rev22-unstable-2024-12-22"; src = fetchFromGitHub { owner = "AZO234"; repo = "NP2kai"; - rev = "4a317747724669343e4c33ebdd34783fb7043221"; - sha256 = "0kxysxhx6jyk82mx30ni0ydzmwdcbnlxlnarrlq018rsnwb4md72"; + rev = "da219658c24c610ba82d5a07ea9897e8e0eef670"; + hash = "sha256-b0KOfqUgVtFuZxw8js6JCnzMh6Wh+f7o/IHcD6TiG1s="; }; - configurePhase = - '' - export GIT_VERSION=${builtins.substring 0 7 src.rev} - '' - + optionalString enableParallelBuilding '' - appendToVar buildFlags "-j$NIX_BUILD_CORES" - '' - + optionalString enableX11 '' - cd x11 - substituteInPlace Makefile.am \ - --replace 'GIT_VERSION :=' 'GIT_VERSION ?=' - ./autogen.sh ${x11ConfigureFlags} - ./configure ${x11ConfigureFlags} - cd .. - ''; + # Don't require Git + # Use SDL2(_*) targets for correct includedirs + # Add return type in ancient code + postPatch = '' + substituteInPlace CMakeLists.txt \ + --replace-fail 'if(NOT git_result EQUAL 0)' 'if(FALSE)' \ + --replace-fail "\''${SDL2_DEFINE}" "" \ + --replace-fail "\''${SDL2_INCLUDE_DIR}" "" \ + --replace-fail "\''${SDL2_LIBRARY}" "SDL2::SDL2" \ + --replace-fail "\''${SDL2_MIXER_DEFINE}" "" \ + --replace-fail "\''${SDL2_MIXER_INCLUDE_DIR}" "" \ + --replace-fail "\''${SDL2_MIXER_LIBRARY}" "SDL2_mixer::SDL2_mixer" \ + --replace-fail "\''${SDL2_TTF_DEFINE}" "" \ + --replace-fail "\''${SDL2_TTF_INCLUDE_DIR}" "" \ + --replace-fail "\''${SDL2_TTF_LIBRARY}" "SDL2_ttf::SDL2_ttf" \ + + substituteInPlace x/cmserial.c \ + --replace-fail 'convert_np2tocm(UINT port, UINT8* param, UINT32* speed) {' 'int convert_np2tocm(UINT port, UINT8* param, UINT32* speed) {' + substituteInPlace x/gtk2/gtk_menu.c \ + --replace-fail 'xmenu_visible_item(MENU_HDL hdl, const char *name, BOOL onoff)' 'int xmenu_visible_item(MENU_HDL hdl, const char *name, BOOL onoff)' + ''; + + strictDeps = true; nativeBuildInputs = - sdlDepsBuildonly - ++ optionals enableX11 [ - automake - autoconf - autoconf-archive - libtool + [ + cmake + ] + ++ lib.optionals enableX11 [ pkg-config - unzip - nasm ]; buildInputs = - sdlDepsTarget - ++ optionals enableX11 [ - gtk2 - libICE - libSM + [ libusb1 - libXxf86vm + openssl + SDL2 + SDL2_ttf + SDL2_mixer + ] + ++ lib.optionals enableX11 [ + fontconfig + freetype + glib + gtk2 + libX11 ]; + cmakeFlags = [ + (lib.cmakeBool "BUILD_SDL" true) + (lib.cmakeBool "BUILD_X" enableX11) + (lib.cmakeBool "BUILD_HAXM" enableHAXM) + (lib.cmakeBool "BUILD_I286" enable16Bit) + + (lib.cmakeBool "USE_SDL" true) + (lib.cmakeBool "USE_SDL2" true) + (lib.cmakeBool "USE_SDL_MIXER" true) + (lib.cmakeBool "USE_SDL_TTF" true) + (lib.cmakeBool "USE_X" enableX11) + (lib.cmakeBool "USE_HAXM" enableHAXM) + ]; + enableParallelBuilding = true; - # TODO Remove when bumping past rev22 - env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-D_DARWIN_C_SOURCE"; + env = { + NP2KAI_VERSION = finalAttrs.version; + NP2KAI_HASH = builtins.substring 0 7 finalAttrs.src.rev; + # GCC 14 incompatibility + NIX_CFLAGS_COMPILE = "-Wno-error=incompatible-pointer-types"; + }; - buildPhase = - optionalString enableSDL '' - cd sdl2 - for mkfile in ${sdlMakefiles}; do - substituteInPlace $mkfile \ - --replace 'GIT_VERSION :=' 'GIT_VERSION ?=' - echo make -f $mkfile $buildFlags ${sdlBuildFlags} clean - make -f $mkfile $buildFlags ${sdlBuildFlags} clean - make -f $mkfile $buildFlags ${sdlBuildFlags} - done - cd .. - '' - + optionalString enableX11 '' - cd x11 - make $buildFlags ${x11BuildFlags} - cd .. - ''; + passthru.updateScript = unstableGitUpdater { + # 0.86 version prefix is implied, add it back for our versioning + tagConverter = lib.getExe (writeShellApplication { + name = "update-np2kai"; + text = '' + sed -e 's/^rev\./0.86rev/g' + ''; + }); + }; - installPhase = - optionalString enableSDL '' - cd sdl2 - for emu in ${sdlBins}; do - install -D -m 755 $emu $out/bin/$emu - done - cd .. - '' - + optionalString enableX11 '' - cd x11 - for emu in ${x11Bins}; do - install -D -m 755 $emu $out/bin/$emu - done - cd .. - ''; - - meta = with lib; { + meta = { description = "PC-9801 series emulator"; homepage = "https://github.com/AZO234/NP2kai"; - license = licenses.mit; - maintainers = with maintainers; [ OPNA2608 ]; - platforms = platforms.x86; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ OPNA2608 ]; + mainProgram = "${if enableX11 then "x" else "sdl"}np21kai"; + platforms = lib.platforms.x86; }; -} +})