biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / applications / graphics / djv / default.nix
blob735807691af795e34cc5d87abe1d97bcf07399d3
1 { stdenv
2 , cmake
3 , fetchFromGitHub
4 , fetchpatch
5 , lib
6 , alsa-lib
7 , libGL
8 , libX11
9 , libXinerama
10 , libXi
11 , zlib
12 , rtaudio
13 , rapidjson
14 , ilmbase
15 , glm
16 , glfw3
17 , libpng
18 , opencolorio_1
19 , freetype
22 let
24   # The way third-party dependencies are packaged has changed
25   # significantly from the 2.0.8 release. This means any packaging
26   # effort for the 2.0.8 release would have to be redone for the next
27   # release. Hence we package the git version for now and can easily
28   # jump onto the next release once it's available.
29   djvVersion = "2.0.8-unstable-2021-07-31";
31   djvSrc = fetchFromGitHub {
32     owner = "darbyjohnston";
33     repo = "djv";
34     rev = "ae31712c4f2802a874217ac194bde26287993934";
35     sha256 = "1qgia6vqb6fhyfj8w925xl6k6zidrp2gj5f32bpi94lwwhi6p9pd";
36   };
38   # DJV's build system tries to automatically pull in FSeq, another
39   # library by the DJV author.
40   #
41   # When updating, check the following file in the DJV source:
42   # etc/SuperBuild/cmake/Modules/BuildFSeq.cmake
43   #
44   # If there is revision or tag specified, DJV wants to use the most
45   # recent master version
46   fseqSrc = fetchFromGitHub {
47     owner = "darbyjohnston";
48     repo = "fseq";
49     rev = "545fac6018100f7fca474b8ee4f1efa7cbf6bf45";
50     sha256 = "0qfhbrzji05hh5kwgd1wvq2lbf81ylbi7v7aqk28aws27f8d2hk0";
51   };
53   djv-deps = stdenv.mkDerivation rec {
54     pname = "djv-dependencies";
55     version = djvVersion;
57     src = djvSrc;
59     sourceRoot = "${src.name}/etc/SuperBuild";
61     nativeBuildInputs = [ cmake ];
62     buildInputs = [
63       libGL
64     ];
66     postPatch = ''
67       chmod -R +w .
69       sed -i 's,GIT_REPOSITORY https://github.com/darbyjohnston/FSeq.git,SOURCE_DIR ${fseqSrc},' \
70           cmake/Modules/BuildFSeq.cmake
72       # We pull these projects in as normal Nix dependencies. No need
73       # to build them again here.
75       sed -i CMakeLists.txt \
76           -e '/list(APPEND DJV_THIRD_PARTY_DEPS RapidJSON)/d' \
77           -e '/list(APPEND DJV_THIRD_PARTY_DEPS RtAudio)/d' \
78           -e '/list(APPEND DJV_THIRD_PARTY_DEPS IlmBase)/d' \
79           -e '/list(APPEND DJV_THIRD_PARTY_DEPS GLM)/d' \
80           -e '/list(APPEND DJV_THIRD_PARTY_DEPS GLFW)/d' \
81           -e '/list(APPEND DJV_THIRD_PARTY_DEPS ZLIB)/d' \
82           -e '/list(APPEND DJV_THIRD_PARTY_DEPS PNG)/d' \
83           -e '/list(APPEND DJV_THIRD_PARTY_DEPS FreeType)/d' \
84           -e '/list(APPEND DJV_THIRD_PARTY_DEPS OCIO)/d'
86       # The "SuperBuild" wants to build DJV right here. This is
87       # inconvenient, because then the `make install` target is not generated
88       # by CMake. We build DJV in its own derivation below. This also makes
89       # the build a bit more modular.
91       sed -i '/include(BuildDJV)/d' \
92           CMakeLists.txt
93     '';
95     cmakeFlags = [
96       "-DDJV_THIRD_PARTY_OpenEXR:BOOL=False"
97       "-DDJV_THIRD_PARTY_JPEG:BOOL=False"
98       "-DDJV_THIRD_PARTY_TIFF:BOOL=False"
99     ];
101     dontInstall = true;
102     doCheck = true;
103   };
106 stdenv.mkDerivation rec {
107   pname = "djv";
108   version = djvVersion;
110   src = djvSrc;
111   patches = [
112     # Pull fix ending upstream inclusion for gcc-12+ support:
113     #   https://github.com/darbyjohnston/DJV/pull/477
114     (fetchpatch {
115       name = "gcc-13-cstdint-include.patch";
116       url = "https://github.com/darbyjohnston/DJV/commit/be0dd90c256f30c0305ff7b180fd932a311e66e5.patch";
117       hash = "sha256-x8GAfakhgjBiCKHbfgCukT5iFNad+zqURDJkQr092uk=";
118     })
119     (fetchpatch {
120       name = "gcc-11-limits.patch";
121       url = "https://github.com/darbyjohnston/DJV/commit/0544ffa1a263a6b8e8518b47277de7601b21b4f4.patch";
122       hash = "sha256-x6ye0xMwTlKyNW4cVFb64RvAayvo71kuOooPj3ROn0g=";
123     })
124     (fetchpatch {
125       name = "gcc-11-IO.patch";
126       url = "https://github.com/darbyjohnston/DJV/commit/ce79f2d2cb35d03322648323858834bff942c792.patch";
127       hash = "sha256-oPbXOnN5Y5QL+bs/bL5eJALu45YHnyTBLQcC8XcJi0c=";
128     })
129     (fetchpatch {
130       name = "gcc-11-sleep_for.patch";
131       url = "https://github.com/darbyjohnston/DJV/commit/6989f43db27f66a7691f6048a2eb3299ef43a92e.patch";
132       hash = "sha256-1kiF3VrZiO+FSoR7NHCbduQ8tMq/Uuu6Z+sQII4xBAw=";
133     })
134   ];
136   nativeBuildInputs = [ cmake ];
137   buildInputs = [
138     alsa-lib
139     libGL
140     libX11
141     libXinerama
142     libXi
143     rapidjson
144     rtaudio
145     ilmbase
146     glm
147     glfw3
148     zlib.dev
149     libpng
150     freetype
151     opencolorio_1
152     djv-deps
153   ];
155   postPatch = ''
156     chmod -R +w .
158     # When linking opencolorio statically this results in failing to
159     # pull in opencolorio's dependencies (tixml and yaml libraries). Avoid
160     # this by linking it statically instead.
162     sed -i cmake/Modules/FindOCIO.cmake \
163         -e 's/PATH_SUFFIXES static//' \
164         -e '/OpenColorIO_STATIC/d'
165   '';
167   # GLFW requires a working X11 session.
168   doCheck = false;
170   meta = with lib; {
171     description = "A professional review software for VFX, animation, and film production";
172     homepage = "https://darbyjohnston.github.io/DJV/";
173     platforms = platforms.linux;
174     maintainers = [ maintainers.blitz ];
175     license = licenses.bsd3;
176   };