about summary refs log tree commit diff
path: root/pkgs/applications/graphics/opentoonz/default.nix
blob: 1dd460c2e1d2b97eaa704ed803400a2e5d5c7418 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
{ boost
, cmake
, fetchFromGitHub
, freeglut
, freetype
, glew
, libjpeg
, libmypaint
, libpng
, libusb1
, lz4
, xz
, lzo
, openblas
, opencv
, pkg-config
, qtbase
, qtmultimedia
, qtscript
, qtserialport
, lib
, stdenv
, superlu
, wrapQtAppsHook
, libtiff
, zlib
}:
let
  libtiff-ver = "4.0.3"; # The version in thirdparty/tiff-*
  opentoonz-ver = "1.7.1";

  src = fetchFromGitHub {
    owner = "opentoonz";
    repo = "opentoonz";
    rev = "v${opentoonz-ver}";
    hash = "sha256-5iXOvh4QTv+G0fjEHU62u7QCee+jbvKhK0+fQXbdJis=";
  };

  opentoonz-opencv = opencv.override {
    inherit libtiff;
  };

  opentoonz-libtiff = stdenv.mkDerivation {
    pname = "libtiff";
    version = "${libtiff-ver}-opentoonz";

    inherit src;
    outputs = [ "bin" "dev" "out" "man" "doc" ];

    nativeBuildInputs = [ pkg-config ];
    propagatedBuildInputs = [ zlib libjpeg xz ];

    postUnpack = ''
      sourceRoot="$sourceRoot/thirdparty/tiff-${libtiff-ver}"
    '';

    # opentoonz uses internal libtiff headers
    postInstall = ''
      cp libtiff/{tif_config,tif_dir,tiffiop}.h $dev/include
    '';

    meta = libtiff.meta // {
      knownVulnerabilities = [
        ''
          Do not open untrusted files with Opentoonz:
          Opentoonz uses an old custom fork of tibtiff from 2012 that is known to
          be affected by at least these 50 vulnerabilities:
            CVE-2012-4564 CVE-2013-4232 CVE-2013-4243 CVE-2013-4244 CVE-2014-8127
            CVE-2014-8128 CVE-2014-8129 CVE-2014-8130 CVE-2014-9330 CVE-2015-1547
            CVE-2015-8781 CVE-2015-8782 CVE-2015-8783 CVE-2015-8784 CVE-2015-8870
            CVE-2016-3620 CVE-2016-3621 CVE-2016-3623 CVE-2016-3624 CVE-2016-3625
            CVE-2016-3631 CVE-2016-3632 CVE-2016-3633 CVE-2016-3634 CVE-2016-3658
            CVE-2016-3945 CVE-2016-3990 CVE-2016-3991 CVE-2016-5102 CVE-2016-5314
            CVE-2016-5315 CVE-2016-5316 CVE-2016-5318 CVE-2016-5319 CVE-2016-5321
            CVE-2016-5322 CVE-2016-5323 CVE-2016-6223 CVE-2016-9453 CVE-2016-9532
            CVE-2017-9935 CVE-2017-9937 CVE-2018-10963 CVE-2018-5360
            CVE-2019-14973 CVE-2019-17546 CVE-2020-35521 CVE-2020-35522
            CVE-2020-35523 CVE-2020-35524
          More info at https://github.com/opentoonz/opentoonz/issues/4193
        ''
      ];
      maintainers = with lib.maintainers; [ chkno ];
    };
  };
in
stdenv.mkDerivation {
  inherit src;

  pname = "opentoonz";
  version = opentoonz-ver;

  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];

  buildInputs = [
    boost
    freeglut
    freetype
    glew
    libjpeg
    libmypaint
    libpng
    opentoonz-libtiff
    libusb1
    lz4
    xz
    lzo
    openblas
    opentoonz-opencv
    qtbase
    qtmultimedia
    qtscript
    qtserialport
    superlu
  ];

  postUnpack = "sourceRoot=$sourceRoot/toonz";

  cmakeDir = "../sources";
  cmakeFlags = [
    "-DCMAKE_SKIP_BUILD_RPATH=ON"
    "-DTIFF_INCLUDE_DIR=${opentoonz-libtiff.dev}/include"
    "-DTIFF_LIBRARY=${opentoonz-libtiff.out}/lib/libtiff.so"
    (lib.cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
  ];

  postInstall = ''
    sed -i '/cp -r .*stuff/a\    chmod -R u+w $HOME/.config/OpenToonz/stuff' $out/bin/opentoonz
  '';

  meta = {
    description = "Full-featured 2D animation creation software";
    homepage = "https://opentoonz.github.io/";
    license = lib.licenses.bsd3;
    maintainers = with lib.maintainers; [ chkno ];
  };
}