summary refs log tree commit diff
path: root/pkgs/applications/video/avidemux/default.nix
blob: 3ffc18e3b181bbc633656c83fa5198a734384927 (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
{ stdenv, lib, fetchurl, cmake, pkgconfig, lndir
, zlib, gettext, libvdpau, libva, libXv, sqlite, x265
, yasm, fribidi, gtk3, qt4
, withX264 ? true, x264
, withLAME ? true, lame
, withFAAC ? true, faac
, withVorbis ? true, libvorbis
, withPulse ? true, libpulseaudio
, withFAAD ? true, faad2
, withOpus ? true, libopus
, withVPX ? true, libvpx
}:

stdenv.mkDerivation rec {
  name = "avidemux-${version}";
  version = "2.6.12";

  src = fetchurl {
    url = "mirror://sourceforge/avidemux/avidemux/${version}/avidemux_${version}.tar.gz";
    sha256 = "0nz52yih8sff53inndkh2dba759xjzsh4b8xjww419lcpk0qp6kn";
  };

  nativeBuildInputs = [ cmake pkgconfig yasm lndir ];
  buildInputs = [ zlib gettext libvdpau libva libXv sqlite x265 fribidi gtk3 qt4 ]
             ++ lib.optional withX264 x264
             ++ lib.optional withLAME lame
             ++ lib.optional withFAAC faac
             ++ lib.optional withVorbis libvorbis
             ++ lib.optional withPulse libpulseaudio
             ++ lib.optional withFAAD faad2
             ++ lib.optional withOpus libopus
             ++ lib.optional withVPX libvpx
             ;

  enableParallelBuilding = false;

  outputs = [ "out" "cli" "gtk" "qt4" ];

  patches = [ ./dynamic_install_dir.patch ];

  buildCommand = ''
    unpackPhase
    cd "$sourceRoot"
    patchPhase

    export cmakeFlags="$cmakeFlags -DAVIDEMUX_SOURCE_DIR=$(pwd)"

    function buildOutput() {
      ( plugin_ui="$1"
        output_dir="$2"
        shift 2
        export cmakeFlags="$cmakeFlags -DPLUGIN_UI=$plugin_ui -DCMAKE_INSTALL_PREFIX=$output_dir"
        for i in "$@" avidemux_plugins; do
          ( cd "$i"
            cmakeConfigurePhase
            buildPhase
            installPhase
          )
        done
        rm -rf avidemux_plugins/build
      )
    }

    function buildUi() {
      plugin_ui="$1"
      output_dir="$2"
      shift 2

      # Hack to split builds properly
      mkdir -p $output_dir
      lndir $out $output_dir
      buildOutput $plugin_ui $output_dir "$@"
    }

    function fixupUi() {
      output_dir="$1"
      shift

      find $output_dir -lname $out\* -delete
      find $output_dir -type f | while read -r f; do
        rpath="$(patchelf --print-rpath $f 2>/dev/null)" || continue
        new_rpath=""
        IFS=':' read -ra old_rpath <<< "$rpath"
        for p in "''${old_rpath[@]}"; do
          new_rpath="$new_rpath:$p"
          if [[ $p = $output_dir* ]]; then
            new_rpath="$new_rpath:$out/''${p#$output_dir}"
          fi
        done
        patchelf --set-rpath "$new_rpath" $f
        patchelf --shrink-rpath $f
      done
    }

    buildOutput COMMON $out avidemux_core
    buildOutput SETTINGS $out
    buildUi CLI $cli avidemux/cli
    buildUi GTK $gtk avidemux/gtk
    buildUi QT4 $qt4 avidemux/qt4

    fixupPhase

    fixupUi $cli
    fixupUi $gtk
    fixupUi $qt4
  '';

  meta = {
    homepage = http://fixounet.free.fr/avidemux/;
    description = "Free video editor designed for simple video editing tasks";
    maintainers = with stdenv.lib.maintainers; [ viric abbradar ];
    platforms = with stdenv.lib.platforms; linux;
    license = stdenv.lib.licenses.gpl2;
  };
}