Skip to content

Commit

Permalink
edopro: init at 40.1.4 (#342365)
Browse files Browse the repository at this point in the history
Co-authored-by: Cosima Neidahl <opna2608@protonmail.com>
  • Loading branch information
Redhawk18 and OPNA2608 authored Oct 23, 2024
1 parent 868c371 commit 2b2950f
Show file tree
Hide file tree
Showing 4 changed files with 480 additions and 0 deletions.
14 changes: 14 additions & 0 deletions pkgs/by-name/ed/edopro/deps.nix

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 29 additions & 0 deletions pkgs/by-name/ed/edopro/ocgcore-lua-symbols.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
From 41e750142b44465f3af197b7e2f0d6f54fc48c2d Mon Sep 17 00:00:00 2001
From: OPNA2608 <opna2608@protonmail.com>
Date: Mon, 21 Oct 2024 17:42:24 +0200
Subject: [PATCH] Mark Lua symbols as C symbols

Otherwise linking against our Lua built by a C-compiler fails due to the symbols being resolved as C++ symbols.
---
interpreter.h | 2 ++
1 file changed, 2 insertions(+)

diff --git a/interpreter.h b/interpreter.h
index 6c405a1..c471ecb 100644
--- a/interpreter.h
+++ b/interpreter.h
@@ -9,9 +9,11 @@
#define INTERPRETER_H_

// Due to longjmp behaviour, we must build Lua as C++ to avoid UB
+extern "C" {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
+}

#include "common.h"
#include <unordered_map>
--
2.44.1

318 changes: 318 additions & 0 deletions pkgs/by-name/ed/edopro/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,318 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchzip,
makeWrapper,
premake5,
writeShellScriptBin,
runCommandLocal,
symlinkJoin,
imagemagick,
bzip2,
curl,
flac,
# Use fmt 10+ after release 40.1.4+
fmt_9,
freetype,
libevent,
libgit2,
libGL,
libGLU,
libjpeg,
libpng,
libvorbis,
libX11,
libxkbcommon,
libXxf86vm,
lua5_3,
mono,
nlohmann_json,
openal,
SDL2,
sqlite,
wayland,
egl-wayland,
covers_url ? "https://pics.projectignis.org:2096/pics/cover/{}.jpg",
fields_url ? "https://pics.projectignis.org:2096/pics/field/{}.png",
# While ygoprodeck has higher quality images, "spamming" of their api results in a ban.
# Thats why this link can change since it's compiled into the program, However it will
# download assets when needed so it is unlikely to get banned. Unless you search the
# card list with no filters of any kind. When testing use ProjectIgnis' website instead.
pics_url ? "https://images.ygoprodeck.com/images/cards/{}.jpg",
}:
let
archLabel =
{
"x86_64-linux" = "x64";
"aarch64-linux" = "arm64";
}
.${stdenv.hostPlatform.system}
or (throw "${stdenv.hostPlatform.system} is an unsupported arch label for edopro");

deps = import ./deps.nix;
in
let
assets = fetchzip {
url = "https://github.com/ProjectIgnis/edopro-assets/releases/download/${deps.edopro-version}/ProjectIgnis-EDOPro-${deps.edopro-version}-linux.tar.gz";
hash = deps.assets-hash;
};

irrlicht-edopro = stdenv.mkDerivation {
pname = "irrlicht-edopro";
version = deps.irrlicht-version;

src = fetchFromGitHub {
owner = "edo9300";
repo = "irrlicht1-8-4";
rev = deps.irrlicht-rev;
hash = deps.irrlicht-hash;
};

buildInputs = [
libGLU
libX11
libxkbcommon
libXxf86vm
wayland
];

enableParallelBuilding = true;
buildFlags = [
"NDEBUG=1"
];
makeFlags = [
"-C"
"source/Irrlicht"
];

installPhase = ''
runHook preInstall
mkdir -p $out/{bin,include}
cp lib/Linux/libIrrlicht.a $out/bin
cp -r include/* $out/include
runHook postInstall
'';
};

ocgcore = stdenv.mkDerivation {
pname = "ygopro-core";
version = deps.ocgcore-version;

src = fetchFromGitHub {
owner = "edo9300";
repo = "ygopro-core";
rev = deps.ocgcore-rev;
hash = deps.ocgcore-hash;
fetchSubmodules = true;
};

patches = [
./ocgcore-lua-symbols.patch
];

nativeBuildInputs = [ premake5 ];

buildInputs = [ lua5_3 ];

preBuild = ''
premake5 gmake2 \
--lua-path="${lua5_3}"
'';

enableParallelBuilding = true;
buildFlags = [
"verbose=true"
"config=release"
"ocgcoreshared"
];
makeFlags = [
"-C"
"build"
];

installPhase = ''
runHook preInstall
install -Dm644 -t $out/lib bin/release/libocgcore${stdenv.hostPlatform.extensions.sharedLibrary}
runHook postInstall
'';
};

edopro = stdenv.mkDerivation {
pname = "edopro";
version = deps.edopro-version;

src = fetchFromGitHub {
owner = "edo9300";
repo = "edopro";
rev = deps.edopro-rev;
hash = deps.edopro-hash;
fetchSubmodules = true;
};

nativeBuildInputs = [
makeWrapper
premake5
];

buildInputs = [
bzip2
curl
flac
fmt_9
freetype
irrlicht-edopro
libevent
libgit2
libjpeg
libpng
libvorbis
lua5_3
nlohmann_json
ocgcore
openal
SDL2
sqlite
];

# nixpkgs' gcc stack currently appears to not support LTO
postPatch = ''
substituteInPlace premake5.lua \
--replace-fail 'flags "LinkTimeOptimization"' 'removeflags "LinkTimeOptimization"'
'';

preBuild = ''
premake5 gmake2 \
--architecture=${archLabel} \
--covers=\"${covers_url}\" \
--fields=\"${fields_url}\" \
--pics=\"${pics_url}\" \
--prebuilt-core="${lib.getLib ocgcore}/lib" \
--sound=sfml
'';

enableParallelBuilding = true;
env = {
# remove after release 40.1.4+
# https://discord.com/channels/170601678658076672/792223685112889344/1286043823293599785
CXXFLAGS = "-include cstdint";
LDFLAGS = "-I ${irrlicht-edopro}/include -L ${irrlicht-edopro}/bin";
};
buildFlags = [
"verbose=true"
"config=release_${archLabel}"
"ygopro"
];
makeFlags = [
"-C"
"build"
];

installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp bin/${archLabel}/release/ygopro $out/bin
wrapProgram $out/bin/ygopro \
--prefix PATH : ${lib.makeBinPath [ mono ]} \
--prefix LD_LIBRARY_PATH : ${
lib.makeLibraryPath [
libGL
libX11
libxkbcommon
libXxf86vm
sqlite
wayland
egl-wayland
]
}
runHook postInstall
'';
};

edopro-script =
let
assetsToCopy = lib.concatStringsSep "," [
# Needed if we download files from ProjectIgnis' website or any https only website.
"cacert.pem"
"config"
"deck"
"COPYING.txt"
"expansions"
"lflists"
"notices"
"puzzles"
"fonts"
"script"
"skin"
"sound"
"textures"
"WindBot"
];
in
writeShellScriptBin "edopro" ''
set -eu
EDOPRO_DIR="''${XDG_DATA_HOME:-$HOME/.local/share}/edopro"
if [ ! -d $EDOPRO_DIR ]; then
mkdir -p $EDOPRO_DIR
cp -r --no-preserve=all ${assets}/{${assetsToCopy}} $EDOPRO_DIR
chmod -R go-rwx $EDOPRO_DIR
rm $EDOPRO_DIR/config/io.github.edo9300.EDOPro.desktop.in
fi
exec ${edopro}/bin/ygopro -C $EDOPRO_DIR $@
'';

edopro-desktop = runCommandLocal "io.github.edo9300.EDOPro.desktop" { } ''
cp ${assets}/config/io.github.edo9300.EDOPro.desktop.in desktop-template
sed '/Path=/d' -i desktop-template
sed 's/Exec=.*/Exec=EDOPro/' -i desktop-template
sed 's/Icon=.*/Icon=EDOPro/' -i desktop-template
install -D desktop-template $out/share/applications/io.github.edo9300.EDOPro.desktop
'';
in
symlinkJoin {
name = "edopro-application-${deps.edopro-version}";
version = deps.edopro-version;
paths = [
edopro-script
edopro-desktop
];

postBuild = ''
mkdir -p $out/share/icons/hicolor/256x256/apps/
${imagemagick}/bin/magick \
${assets}/textures/AppIcon.png \
-resize 256x256 \
$out/share/icons/hicolor/256x256/apps/EDOPro.png
'';

passthru.updateScript = ./update.py;

meta = {
description = "Bleeding-edge automatic duel simulator, a fork of the YGOPro client";
homepage = "https://projectignis.github.io";
changelog = "https://github.com/edo9300/edopro/releases";
license = lib.licenses.agpl3Plus;
maintainers = with lib.maintainers; [
OPNA2608
redhawk
];
mainProgram = "edopro";
# This is likely a very easy app to port if you're interested.
# We just have no way to test on other platforms.
platforms = [
"x86_64-linux"
"aarch64-linux"
];
};
}
Loading

0 comments on commit 2b2950f

Please sign in to comment.