diff --git a/pkgs/applications/graphics/djv/default.nix b/pkgs/applications/graphics/djv/default.nix new file mode 100644 index 000000000000..95a29f243e4a --- /dev/null +++ b/pkgs/applications/graphics/djv/default.nix @@ -0,0 +1,152 @@ +{ stdenv +, cmake +, fetchFromGitHub +, lib +, alsa-lib +, libGL +, libX11 +, libXinerama +, libXi +, zlib +, rtaudio +, rapidjson +, ilmbase +, glm +, glfw3 +, libpng +, opencolorio_1 +, freetype +}: + +let + + # The way third-party dependencies are packaged has changed + # significantly from the 2.0.8 release. This means any packaging + # effort for the 2.0.8 release would have to be redone for the next + # release. Hence we package the git version for now and can easily + # jump onto the next release once it's available. + djvVersion = "2.0.8-unstable-2021-07-31"; + + djvSrc = fetchFromGitHub { + owner = "darbyjohnston"; + repo = "djv"; + rev = "ae31712c4f2802a874217ac194bde26287993934"; + sha256 = "1qgia6vqb6fhyfj8w925xl6k6zidrp2gj5f32bpi94lwwhi6p9pd"; + }; + + # DJV's build system tries to automatically pull in FSeq, another + # library by the DJV author. + # + # When updating, check the following file in the DJV source: + # etc/SuperBuild/cmake/Modules/BuildFSeq.cmake + # + # If there is revision or tag specified, DJV wants to use the most + # recent master version + fseqSrc = fetchFromGitHub { + owner = "darbyjohnston"; + repo = "fseq"; + rev = "545fac6018100f7fca474b8ee4f1efa7cbf6bf45"; + sha256 = "0qfhbrzji05hh5kwgd1wvq2lbf81ylbi7v7aqk28aws27f8d2hk0"; + }; + + djv-deps = stdenv.mkDerivation rec { + pname = "djv-dependencies"; + version = djvVersion; + + src = djvSrc; + + sourceRoot = "source/etc/SuperBuild"; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ + libGL + ]; + + postPatch = '' + chmod -R +w . + + sed -i 's,GIT_REPOSITORY https://github.com/darbyjohnston/FSeq.git,SOURCE_DIR ${fseqSrc},' \ + cmake/Modules/BuildFSeq.cmake + + # We pull these projects in as normal Nix dependencies. No need + # to build them again here. + + sed -i CMakeLists.txt \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS RapidJSON)/d' \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS RtAudio)/d' \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS IlmBase)/d' \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS GLM)/d' \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS GLFW)/d' \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS ZLIB)/d' \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS PNG)/d' \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS FreeType)/d' \ + -e '/list(APPEND DJV_THIRD_PARTY_DEPS OCIO)/d' + + # The "SuperBuild" wants to build DJV right here. This is + # inconvenient, because then the `make install` target is not generated + # by CMake. We build DJV in its own derivation below. This also makes + # the build a bit more modular. + + sed -i '/include(BuildDJV)/d' \ + CMakeLists.txt + ''; + + cmakeFlags = [ + "-DDJV_THIRD_PARTY_OpenEXR:BOOL=False" + "-DDJV_THIRD_PARTY_JPEG:BOOL=False" + "-DDJV_THIRD_PARTY_TIFF:BOOL=False" + ]; + + dontInstall = true; + doCheck = true; + }; + +in +stdenv.mkDerivation rec { + pname = "djv"; + version = djvVersion; + + src = djvSrc; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ + alsa-lib + libGL + libX11 + libXinerama + libXi + rapidjson + rtaudio + ilmbase + glm + glfw3 + zlib.dev + libpng + freetype + opencolorio_1 + djv-deps + ]; + + postPatch = '' + chmod -R +w . + + # When linking opencolorio statically this results in failing to + # pull in opencolorio's dependencies (tixml and yaml libraries). Avoid + # this by linking it statically instead. + + sed -i cmake/Modules/FindOCIO.cmake \ + -e 's/PATH_SUFFIXES static//' \ + -e '/OpenColorIO_STATIC/d' + ''; + + # GLFW requires a working X11 session. + doCheck = false; + + meta = with lib; { + description = "A professional review software for VFX, animation, and film production"; + homepage = "https://darbyjohnston.github.io/DJV/"; + platforms = platforms.linux; + maintainers = [ maintainers.blitz ]; + license = licenses.bsd3; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cbd3aa6c5267..5ab9b9c25406 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2548,6 +2548,8 @@ in dino = callPackage ../applications/networking/instant-messengers/dino { }; + djv = callPackage ../applications/graphics/djv { }; + dlx = callPackage ../misc/emulators/dlx { }; dgen-sdl = callPackage ../misc/emulators/dgen-sdl { };