Loading pkgs/by-name/np/np2kai/package.nix +90 −193 Original line number Diff line number Diff line Loading @@ -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? Loading @@ -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 ]; enableParallelBuilding = true; cmakeFlags = [ (lib.cmakeBool "BUILD_SDL" true) (lib.cmakeBool "BUILD_X" enableX11) (lib.cmakeBool "BUILD_HAXM" enableHAXM) (lib.cmakeBool "BUILD_I286" enable16Bit) # TODO Remove when bumping past rev22 env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-D_DARWIN_C_SOURCE"; (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) ]; 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 .. ''; enableParallelBuilding = true; 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 .. 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"; }; 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' ''; }); }; 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; }; } }) Loading
pkgs/by-name/np/np2kai/package.nix +90 −193 Original line number Diff line number Diff line Loading @@ -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? Loading @@ -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 ]; enableParallelBuilding = true; cmakeFlags = [ (lib.cmakeBool "BUILD_SDL" true) (lib.cmakeBool "BUILD_X" enableX11) (lib.cmakeBool "BUILD_HAXM" enableHAXM) (lib.cmakeBool "BUILD_I286" enable16Bit) # TODO Remove when bumping past rev22 env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-D_DARWIN_C_SOURCE"; (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) ]; 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 .. ''; enableParallelBuilding = true; 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 .. 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"; }; 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' ''; }); }; 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; }; } })