NixOS Package

General discussions about game development using the Drag[en]gine Game Engine.

If you do not know where to post your questions try this place.
dragonlord
Site Admin
Posts: 39
Joined: Tue Apr 21, 2020 12:18 am

Re: NixOS Package

Post by dragonlord »

That's really not nice. It's a security feature to avoid file corruption and tampering. But you could disable the checks in if nothing helps:
- https://github.com/LordOfDragons/dragen ... e.cpp#L548
- https://github.com/LordOfDragons/dragen ... n.cpp#L390
You would need to disable the entire if-blocks there to avoid the file based exception.
gale_username
Posts: 8
Joined: Sun Sep 08, 2024 1:28 am

Re: NixOS Package

Post by gale_username »

Is there a way I could generate the manifest files separate from the main build step after the modules have been patched?
dragonlord
Site Admin
Posts: 39
Joined: Tue Apr 21, 2020 12:18 am

Re: NixOS Package

Post by dragonlord »

The manifest files are XML files. You can use an XML library to load, edit and save them. Most probably simpler would be using an XSLT processor to alter a specific tag content. "xsltproc" is the usual command line tool to do this.
dragonlord
Site Admin
Posts: 39
Joined: Tue Apr 21, 2020 12:18 am

Re: NixOS Package

Post by dragonlord »

So is it now all working as expected? Anything I should upstream or not?
gale_username
Posts: 8
Joined: Sun Sep 08, 2024 1:28 am

Re: NixOS Package

Post by gale_username »

I ended up not using dragengine, but got a fair amount working. Will post what I had below for others to reference:

dragengine:

Code: Select all

{
  lib,
  stdenv,
  fetchgit,
  symlinkJoin,
  scons,
  autoPatchelfHook,
  ensureNewerSourcesForZipFilesHook,
  zlib,
  libpng,
  libjpeg,
  openal,
  openvr,
  libogg,
  libvorbis,
  libtheora,
  fox,
  dragonscript,
  libevdev,
  soundtouch,
  libvpx,
  libwebp,
  libwebm,
  openxr-loader,
  liburing,
  xorg,
  libGL,
  vulkan-loader,
  libpulseaudio,
  alsa-lib,
  portaudio,
}:
stdenv.mkDerivation (finalAttrs: {
  pname = "dragengine";
  # Next release after this commit can be used once it's out.
  version = "f783fbe179d6b828102f0837526e5a9052ee0984";

  src = fetchgit {
    url = "https://github.com/LordOfDragons/dragengine.git";
    rev = finalAttrs.version;
    hash = "sha256-FlozWfQOwFTJKBTD+fFIfVQb/bFx7zwhsC7h0ejYqs8=";
    fetchLFS = true;
  };

  patches = [
    # The checks will fail, because of patchelf.
    ./disable-lib-file-size-checks.patch
  ];

  buildInputs = [
    zlib
    libpng
    libjpeg
    openal
    libogg
    libvorbis
    libtheora
    fox
    dragonscript
    libevdev
    soundtouch
    libwebp
    libwebm
    libvpx
    liburing
    openvr
    openxr-loader
    xorg.libX11
    xorg.xorgproto
    xorg.libXrender
    xorg.libXrandr
    xorg.libXi
    xorg.libXext
    xorg.libXfixes
    libGL
    vulkan-loader

    libpulseaudio
    alsa-lib
    portaudio
  ];
  nativeBuildInputs = [
    scons
    autoPatchelfHook
    ensureNewerSourcesForZipFilesHook
  ];

  # These flags are largely based on
  # https://github.com/LordOfDragons/dragengine/blob/master/.github/workflows/custom_linux.py
  sconsFlags = [
    "with_system_zlib=yes"
    "with_system_libpng=yes"
    "with_system_libapng=yes"
    "with_system_libjpeg=yes"
    "with_system_openal=yes"
    "with_openal_backends=alsa,pulseaudio,portaudio,oss"
    "with_system_libogg=yes"
    "with_system_libvorbis=yes"
    "with_system_libtheora=yes"
    "with_system_fox=yes"
    "with_system_dragonscript=yes"
    "with_system_libevdev=yes"
    "with_system_soundtouch=yes"
    "with_system_libwebp=yes"
    "with_system_libwebm=yes"
    "with_system_libvpx=yes"
    "with_system_liburing=yes"
    "with_system_openvr=yes"
    "with_system_openxr=yes"
    "with_opengl=yes"
    "with_dl=yes"
    "with_pthread=yes"
    "with_x=yes"
    # Disable game store sdks for now.
    "build_service_steamsdk=no"
    "build_service_eossdk=no"
    "build_service_modio=no"

    # Modules
    "build_audio_openal=yes"
    "build_cr_basic=yes"
    "build_graphics_opengl=yes"
    "build_image_png=yes"
    "build_image_png3d=yes"
    "build_image_jpeg=yes"
    "build_image_webp=yes"
    "build_input_x=yes"
    "build_input_w32=no"
    "build_input_beos=no"
    "build_input_macos=no"
    "build_input_android=no"
    "build_physics_bullet=yes"
    "build_script_ds=yes"
    "build_script_python=no"
    "build_script_smalltalk=no"
    "build_sound_ogg=yes"
    "build_video_theora=yes"
    "build_video_apng=yes"
    "build_guilauncher=yes"
    "build_plugin_npapi=no"
    "build_launcher_android=no"
    "build_archive_delga=yes"
    "build_vr_openvr=yes"
    "build_vr_openxr=yes"

    # IGDE
    "build_igde=yes"
    "igde_toolkit=fox"
    "build_editor_animator=yes"
    "build_editor_conversation=yes"
    "build_editor_font=yes"
    "build_editor_gamedefinition=yes"
    "build_editor_langpack=yes"
    "build_editor_particleemitter=yes"
    "build_editor_rig=yes"
    "build_editor_skin=yes"
    "build_editor_sky=yes"
    "build_editor_speechanimation=yes"
    "build_editor_synthesizer=yes"
    "build_editor_world=yes"
  ];

  CPPFLAGS = let
    includes = symlinkJoin {
      name = "dragengine-includes";
      paths = [
        zlib.dev
        libpng.dev
        libjpeg.dev
        openal
        libogg.dev
        libvorbis.dev
        libtheora.dev
        fox
        dragonscript
        libevdev
        soundtouch
        libwebp
        libwebm
        libvpx.dev
        liburing.dev
        openvr
        openxr-loader.dev
        xorg.libX11.dev
        xorg.xorgproto
        xorg.libXrender.dev
        xorg.libXrandr.dev
        xorg.libXi.dev
        xorg.libXext.dev
        xorg.libXfixes.dev
        libGL.dev
        vulkan-loader.dev
      ];
    };
  in "-I${includes}/include";

  LDFLAGS = let
    libs = symlinkJoin {
      name = "dragengine-libs ";
      paths = [
        zlib.out
        libpng.out
        libjpeg.out
        openal
        libogg.out
        libvorbis.out
        libtheora.out
        fox
        dragonscript
        libevdev
        soundtouch
        libwebp
        libwebm
        libvpx.out
        liburing.out
        openvr
        openxr-loader.out
        xorg.libX11.out
        xorg.xorgproto
        xorg.libXrender.out
        xorg.libXrandr.out
        xorg.libXi.out
        xorg.libXext.out
        xorg.libXfixes.out
        libGL.out
        vulkan-loader.out
      ];
    };
  in "-L${libs}/lib";

  enableParallelBuilding = true;

  strictDeps = true;

  meta = {
    description = "A free software game engine focusing on developing games faster, more modular and stable with true -1 day portability support";
    homepage = "https://dragondreams.ch/index.php/dragengine/";
    license = lib.licenses.mit;
    mainProgram = "delauncher";
  };
})

disable-lib-file-size-checks.patch:

Code: Select all

diff --git a/src/deigde/deigde/src/module/igdeEditorModuleDefinition.cpp b/src/deigde/deigde/src/module/igdeEditorModuleDefinition.cpp
index 908bcb906..4d7a1404c 100644
--- a/src/deigde/deigde/src/module/igdeEditorModuleDefinition.cpp
+++ b/src/deigde/deigde/src/module/igdeEditorModuleDefinition.cpp
@@ -386,11 +386,11 @@ void igdeEditorModuleDefinition::pVerify(){
 	}
 	
 	// check that the file size matches the one specified
-	if( fs.st_size != pLibSize ){
-		pErrorCode = eecLibFileSizeMismatch;
-		pCanLoad = false;
-		return;
-	}
+	// if( fs.st_size != pLibSize ){
+	// 	pErrorCode = eecLibFileSizeMismatch;
+	// 	pCanLoad = false;
+	// 	return;
+	// }
 	
 	// check that the sha1 sum is the same
 	
diff --git a/src/dragengine/src/systems/modules/deLibraryModule.cpp b/src/dragengine/src/systems/modules/deLibraryModule.cpp
index f551b0a67..9045f3af4 100644
--- a/src/dragengine/src/systems/modules/deLibraryModule.cpp
+++ b/src/dragengine/src/systems/modules/deLibraryModule.cpp
@@ -544,10 +544,10 @@ bool deLibraryModule::pVerifyLibrary( const char* filename ){
 	}
 	
 	// check that the file size matches the one specified
-	if( fs.st_size != pLibFileSize ){
-		SetErrorCode( eecLibFileSizeMismatch );
-		return false;
-	}
+	// if( fs.st_size != pLibFileSize ){
+	// 	SetErrorCode( eecLibFileSizeMismatch );
+	// 	return false;
+	// }
 #endif
 	
 	// check that the sha1 sum is the same

dragonscript:

Code: Select all

{
  lib,
  stdenv,
  fetchgit,
  scons,
  

}:
stdenv.mkDerivation (finalAttrs: {
  pname = "dragonscript";
  # Need changes that aren't in a release yet for dragengine.
  version = "cfe9e5fad17bb7cf309ec24ac01794f27dd89b86";

  src = fetchgit {
    url = "https://github.com/LordOfDragons/dragonscript";
    rev = finalAttrs.version;
    hash = "sha256-3XOY0qavZbFTv7257MQmX5U14BcUZQTORQ+zxqrRdmI=";
  };
  nativeBuildInputs = [scons];

  meta = {
    description = "DragonScript Script Language";
    homepage = "https://lordofdragons.github.io/dragonscript/";
    license = lib.licenses.lgpl3;
  };
})

libwebm:

Code: Select all

{
  lib,
  stdenv,
  fetchgit,
  cmake,
}:
stdenv.mkDerivation rec {
  pname = "libwebm";
  version = "1.0.0.31";
  src = fetchgit {
    url = "https://chromium.googlesource.com/webm/libwebm";
    rev = "libwebm-${version}";
    hash = "sha256-+ayX33rcX/jkewsW8WrGalTe9X44qFBHOrIYTteOQzc=";
  };
  nativeBuildInputs = [
    cmake
  ];
  cmakeFlags = [
    "-DENABLE_WEBM_PARSER=ON"
  ];
  meta.license = lib.licenses.bsd3;
}

dragonlord
Site Admin
Posts: 39
Joined: Tue Apr 21, 2020 12:18 am

Re: NixOS Package

Post by dragonlord »

gale_username wrote: Tue Oct 29, 2024 10:24 pm I ended up not using dragengine, but got a fair amount working...
Can you quickly explain the reasons for not using it so I can improve in the future?
gale_username
Posts: 8
Joined: Sun Sep 08, 2024 1:28 am

Re: NixOS Package

Post by gale_username »

I wasn't planning on using it much, so the extra effort to get it working wasn't worth it.
dragonlord
Site Admin
Posts: 39
Joined: Tue Apr 21, 2020 12:18 am

Re: NixOS Package

Post by dragonlord »

gale_username wrote: Wed Oct 30, 2024 10:40 pm I wasn't planning on using it much, so the extra effort to get it working wasn't worth it.
I see. I guess NixOS is quite special in the way packaging works to cause that many troubles.
Post Reply