nixpkgs/pkgs/applications/editors/gnome-builder/default.nix
Guillaume Girol 33afbf39f6 treewide: switch to nativeCheckInputs
checkInputs used to be added to nativeBuildInputs. Now we have
nativeCheckInputs to do that instead. Doing this treewide change allows
to keep hashes identical to before the introduction of
nativeCheckInputs.
2023-01-21 12:00:00 +00:00

179 lines
4.1 KiB
Nix

{ stdenv
, lib
, ctags
, cmark
, desktop-file-utils
, editorconfig-core-c
, fetchurl
, fetchpatch
, flatpak
, gnome
, libgit2-glib
, gi-docgen
, gobject-introspection
, enchant
, icu
, gtk4
, gtksourceview5
, json-glib
, jsonrpc-glib
, libadwaita
, libpanel
, libpeas
, libportal-gtk4
, libxml2
, meson
, ninja
, ostree
, d-spy
, pcre2
, pkg-config
, python3
, sysprof
, template-glib
, vala
, vte-gtk4
, webkitgtk_5_0
, wrapGAppsHook4
, dbus
, xvfb-run
}:
stdenv.mkDerivation rec {
pname = "gnome-builder";
version = "43.4";
outputs = [ "out" "devdoc" ];
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
sha256 = "Hg1tZ4RcGb7J463VlpX5pTHXKg5UKyA6zJD7OBInwrw=";
};
patches = [
# The test environment hardcodes `GI_TYPELIB_PATH` environment variable to direct dependencies of libide & co.
# https://gitlab.gnome.org/GNOME/gnome-builder/-/commit/2ce510b0ec0518c29427a29b386bb2ac1a121edf
# https://gitlab.gnome.org/GNOME/gnome-builder/-/commit/2964f7c2a0729f2f456cdca29a0f5b7525baf7c1
#
# But Nix does not have a fallback path for typelibs like /usr/lib on FHS distros and relies solely
# on `GI_TYPELIB_PATH` environment variable. So, when Ide started to depend on Vte, which
# depends on Pango, among others, GIrepository was unable to find these indirect dependencies
# and crashed with:
#
# Typelib file for namespace 'Pango', version '1.0' not found (g-irepository-error-quark, 0)
./fix-finding-test-typelibs.patch
];
nativeBuildInputs = [
desktop-file-utils
gi-docgen
gobject-introspection
meson
ninja
pkg-config
python3
python3.pkgs.wrapPython
wrapGAppsHook4
];
buildInputs = [
ctags
cmark
editorconfig-core-c
flatpak
libgit2-glib
libpeas
libportal-gtk4
vte-gtk4
enchant
icu
gtk4
gtksourceview5
json-glib
jsonrpc-glib
libadwaita
libpanel
libxml2
ostree
d-spy
pcre2
python3
sysprof
template-glib
vala
webkitgtk_5_0
];
nativeCheckInputs = [
dbus
xvfb-run
];
mesonFlags = [
"-Ddocs=true"
# Making the build system correctly detect clang header and library paths
# is difficult. Somebody should look into fixing this.
"-Dplugin_clang=false"
# Do not try to check if appstream images exist
"-Dnetwork_tests=false"
];
doCheck = true;
postPatch = ''
patchShebangs build-aux/meson/post_install.py
substituteInPlace build-aux/meson/post_install.py \
--replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
'';
checkPhase = ''
GTK_A11Y=none \
xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
--config-file=${dbus}/share/dbus-1/session.conf \
meson test --print-errorlogs
'';
pythonPath = with python3.pkgs; requiredPythonModules [ pygobject3 ];
preFixup = ''
buildPythonPath "$out $pythonPath"
gappsWrapperArgs+=(
--prefix PYTHONPATH : "$program_PYTHONPATH"
)
# Ensure that all plugins get their interpreter paths fixed up.
find $out/lib -name \*.py -type f -print0 | while read -d "" f; do
chmod a+x "$f"
done
'';
postFixup = ''
# Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back.
moveToOutput share/doc/libide "$devdoc"
'';
passthru.updateScript = gnome.updateScript {
packageName = pname;
};
meta = with lib; {
description = "An IDE for writing GNOME-based software";
longDescription = ''
Global search, auto-completion, source code map, documentation
reference, and other features expected in an IDE, but with a focus
on streamlining GNOME-based development projects.
This package does not pull in the dependencies needed for every
plugin. If you find that a plugin you wish to use doesn't work, we
currently recommend running gnome-builder inside a nix-shell with
appropriate dependencies loaded.
'';
homepage = "https://wiki.gnome.org/Apps/Builder";
license = licenses.gpl3Plus;
maintainers = teams.gnome.members;
platforms = platforms.linux;
};
}