about summary refs log tree commit diff
path: root/pkgs/by-name/re/renpy
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/re/renpy')
-rw-r--r--pkgs/by-name/re/renpy/package.nix138
-rw-r--r--pkgs/by-name/re/renpy/shutup-erofs-errors.patch29
2 files changed, 167 insertions, 0 deletions
diff --git a/pkgs/by-name/re/renpy/package.nix b/pkgs/by-name/re/renpy/package.nix
new file mode 100644
index 0000000000000..d31ad9ced8641
--- /dev/null
+++ b/pkgs/by-name/re/renpy/package.nix
@@ -0,0 +1,138 @@
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  python3,
+  pkg-config,
+  SDL2,
+  libpng,
+  ffmpeg,
+  freetype,
+  glew,
+  libGL,
+  libGLU,
+  fribidi,
+  zlib,
+  harfbuzz,
+  makeWrapper,
+}:
+
+let
+  # https://renpy.org/doc/html/changelog.html#versioning
+  # base_version is of the form major.minor.patch
+  # vc_version is of the form YYMMDDCC
+  # version corresponds to the tag on GitHub
+  base_version = "8.2.1";
+  vc_version = "24030407";
+  version = "${base_version}.${vc_version}";
+in
+stdenv.mkDerivation {
+  pname = "renpy";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "renpy";
+    repo = "renpy";
+    rev = version;
+    hash = "sha256-07Hj8mJGR0+Pn1DQ+sK5YQ3x3CTMsZ5h5yEoz44b2TM=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+    # Ren'Py currently does not compile on Cython 3.x.
+    # See https://github.com/renpy/renpy/issues/5359
+    python3.pkgs.cython_0
+    python3.pkgs.setuptools
+  ];
+
+  buildInputs =
+    [
+      SDL2
+      libpng
+      ffmpeg
+      freetype
+      glew
+      libGLU
+      libGL
+      fribidi
+      zlib
+      harfbuzz
+    ]
+    ++ (with python3.pkgs; [
+      python
+      pygame-sdl2
+      tkinter
+      future
+      six
+      pefile
+      requests
+      ecdsa
+    ]);
+
+  RENPY_DEPS_INSTALL = lib.concatStringsSep "::" [
+    SDL2
+    SDL2.dev
+    libpng
+    ffmpeg.lib
+    freetype
+    glew.dev
+    libGLU
+    libGL
+    fribidi
+    zlib
+    harfbuzz.dev
+  ];
+
+  enableParallelBuilding = true;
+
+  patches = [ ./shutup-erofs-errors.patch ];
+
+  postPatch = ''
+    cp tutorial/game/tutorial_director.rpy{m,}
+
+    cat > renpy/vc_version.py << EOF
+    version = '${version}'
+    official = False
+    nightly = False
+    # Look at https://renpy.org/latest.html for what to put.
+    version_name = '64bit Sensation'
+    EOF
+  '';
+
+  buildPhase = with python3.pkgs; ''
+    runHook preBuild
+    ${python.pythonOnBuildForHost.interpreter} module/setup.py build --parallel=$NIX_BUILD_CORES
+    runHook postBuild
+  '';
+
+  installPhase = with python3.pkgs; ''
+    runHook preInstall
+
+    ${python.pythonOnBuildForHost.interpreter} module/setup.py install_lib -d $out/${python.sitePackages}
+    mkdir -p $out/share/renpy
+    cp -vr sdk-fonts gui launcher renpy the_question tutorial renpy.py $out/share/renpy
+
+    makeWrapper ${python.interpreter} $out/bin/renpy \
+      --set PYTHONPATH "$PYTHONPATH:$out/${python.sitePackages}" \
+      --add-flags "$out/share/renpy/renpy.py"
+
+    runHook postInstall
+  '';
+
+  env.NIX_CFLAGS_COMPILE = with python3.pkgs; "-I${pygame-sdl2}/include/${python.libPrefix}";
+
+  meta = {
+    description = "Visual Novel Engine";
+    mainProgram = "renpy";
+    homepage = "https://renpy.org/";
+    changelog = "https://renpy.org/doc/html/changelog.html";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ shadowrz ];
+  };
+
+  passthru = {
+    inherit base_version vc_version;
+  };
+}
diff --git a/pkgs/by-name/re/renpy/shutup-erofs-errors.patch b/pkgs/by-name/re/renpy/shutup-erofs-errors.patch
new file mode 100644
index 0000000000000..9889c9f8ef858
--- /dev/null
+++ b/pkgs/by-name/re/renpy/shutup-erofs-errors.patch
@@ -0,0 +1,29 @@
+From 09e598ddf1f6af72ccb6c7c9301abff689e64f88 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=E5=A4=9C=E5=9D=82=E9=9B=85?=
+ <23130178+ShadowRZ@users.noreply.github.com>
+Date: Wed, 17 May 2023 14:32:03 +0800
+Subject: [PATCH] Don't print a backtrace on EROFS
+
+This can shut up EROFS errors caused by writing to read-only /nix/store.
+---
+ renpy/script.py | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/renpy/script.py b/renpy/script.py
+index de35457ba..b7d511560 100644
+--- a/renpy/script.py
++++ b/renpy/script.py
+@@ -705,6 +705,10 @@ class Script(object):
+                                 rpydigest = hashlib.md5(fullf.read()).digest()
+ 
+                             self.write_rpyc_md5(f, rpydigest)
++                    except OSError as e:
++                        if e.errno != 30:
++                            import traceback
++                            traceback.print_exc()
+                     except Exception:
+                         import traceback
+                         traceback.print_exc()
+-- 
+2.40.1
+