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;
}
|