summaryrefslogtreecommitdiff
path: root/pkgs/development/compilers/vala/default.nix
blob: 47d32565ac185ba86268417fd29a589191e96a0a (plain)
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
{
  stdenv,
  lib,
  fetchurl,
  pkg-config,
  flex,
  bison,
  libxslt,
  autoconf,
  autoreconfHook,
  gnome,
  graphviz,
  glib,
  libiconv,
  libintl,
  libtool,
  expat,
  replaceVars,
  vala,
  gobject-introspection,
}:

let
  generic = lib.makeOverridable (
    {
      version,
      hash,
      extraNativeBuildInputs ? [ ],
      extraBuildInputs ? [ ],
      withGraphviz ? false,
    }:
    let
      # Build vala (valadoc) without graphviz support. Inspired from the openembedded-core project.
      # https://github.com/openembedded/openembedded-core/blob/a5440d4288e09d3e/meta/recipes-devtools/vala/vala/disable-graphviz.patch
      graphvizPatch =
        {
          "0.56" = ./disable-graphviz-0.56.8.patch;
        }
        .${lib.versions.majorMinor version} or (throw "no graphviz patch for this version of vala");

      disableGraphviz = !withGraphviz;

    in
    stdenv.mkDerivation rec {
      pname = "vala";
      inherit version;

      setupHook = replaceVars ./setup-hook.sh {
        apiVersion = lib.versions.majorMinor version;
      };

      src = fetchurl {
        url = "mirror://gnome/sources/vala/${lib.versions.majorMinor version}/vala-${version}.tar.xz";
        inherit hash;
      };

      postPatch = ''
        patchShebangs tests
      '';

      # If we're disabling graphviz, apply the patches and corresponding
      # configure flag. We also need to override the path to the valac compiler
      # so that it can be used to regenerate documentation.
      patches = lib.optionals disableGraphviz [ graphvizPatch ];
      configureFlags = lib.optional disableGraphviz "--disable-graphviz";
      # when cross-compiling ./compiler/valac is valac for host
      # so add the build vala in nativeBuildInputs
      preBuild = lib.optionalString (
        disableGraphviz && (stdenv.buildPlatform == stdenv.hostPlatform)
      ) "buildFlagsArray+=(\"VALAC=$(pwd)/compiler/valac\")";

      outputs = [
        "out"
        "devdoc"
      ];

      nativeBuildInputs = [
        pkg-config
        flex
        bison
        libxslt
        gobject-introspection
      ]
      ++ lib.optional (stdenv.hostPlatform.isDarwin) expat
      ++ lib.optional disableGraphviz autoreconfHook # if we changed our ./configure script, need to reconfigure
      ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ vala ]
      ++ extraNativeBuildInputs;

      buildInputs = [
        glib
        libiconv
        libintl
      ]
      ++ lib.optional withGraphviz graphviz
      ++ extraBuildInputs;

      enableParallelBuilding = true;

      doCheck = false; # fails, requires dbus daemon

      passthru = {
        updateScript = gnome.updateScript {
          attrPath =
            let
              roundUpToEven = num: num + lib.mod num 2;
            in
            "vala_${lib.versions.major version}_${toString (roundUpToEven (lib.toInt (lib.versions.minor version)))}";
          packageName = "vala";
          freeze = true;
        };
      };

      meta = {
        description = "Compiler for GObject type system";
        homepage = "https://vala.dev";
        license = lib.licenses.lgpl21Plus;
        platforms = lib.platforms.unix;
        maintainers = with lib.maintainers; [
          antono
          jtojnar
        ];
        teams = [ lib.teams.pantheon ];
      };
    }
  );

in
rec {
  vala_0_56 = generic {
    version = "0.56.18";
    hash = "sha256-8q/+fUCrY9uOe57MP2vcnC/H4xNMhP8teV9IL+kmo4I=";
  };

  vala = vala_0_56;
}