about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/gjs/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/gjs/default.nix')
-rw-r--r--nixpkgs/pkgs/development/libraries/gjs/default.nix137
1 files changed, 137 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/gjs/default.nix b/nixpkgs/pkgs/development/libraries/gjs/default.nix
new file mode 100644
index 000000000000..52b53a15b410
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gjs/default.nix
@@ -0,0 +1,137 @@
+{ fetchurl
+, fetchpatch
+, lib, stdenv
+, meson
+, ninja
+, pkg-config
+, gnome3
+, gtk3
+, atk
+, gobject-introspection
+, spidermonkey_78
+, pango
+, cairo
+, readline
+, glib
+, libxml2
+, dbus
+, gdk-pixbuf
+, makeWrapper
+, which
+, xvfb_run
+, nixosTests
+}:
+
+let
+  testDeps = [
+    gobject-introspection # for Gio and cairo typelibs
+    gtk3 atk pango.out gdk-pixbuf
+  ];
+in stdenv.mkDerivation rec {
+  pname = "gjs";
+  version = "1.66.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gjs/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "vX9fixcSd8wLue4XVLAkC2Lwana4sYyWjPRxs0qzTlk=";
+  };
+
+  outputs = [ "out" "dev" "installedTests" ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    makeWrapper
+    which # for locale detection
+    libxml2 # for xml-stripblanks
+  ];
+
+  buildInputs = [
+    gobject-introspection
+    cairo
+    readline
+    spidermonkey_78
+    dbus # for dbus-run-session
+  ];
+
+  checkInputs = [
+    xvfb_run
+  ] ++ testDeps;
+
+  propagatedBuildInputs = [
+    glib
+  ];
+
+  mesonFlags = [
+    "-Dprofiler=disabled"
+    "-Dinstalled_test_prefix=${placeholder "installedTests"}"
+  ];
+
+  patches = [
+    # Hard-code various paths
+    ./fix-paths.patch
+
+    # Allow installing installed tests to a separate output.
+    ./installed-tests-path.patch
+  ];
+
+  doCheck = true;
+
+  postPatch = ''
+    patchShebangs build/choose-tests-locale.sh
+    substituteInPlace installed-tests/debugger-test.sh --subst-var-by gjsConsole $out/bin/gjs-console
+  '';
+
+  preCheck = ''
+    # Our gobject-introspection patches make the shared library paths absolute
+    # in the GIR files. When running tests, the library is not yet installed,
+    # though, so we need to replace the absolute path with a local one during build.
+    # We are using a symlink that will be overridden during installation.
+    mkdir -p $out/lib $installedTests/libexec/installed-tests/gjs
+    ln -s $PWD/libgjs.so.0 $out/lib/libgjs.so.0
+    ln -s $PWD/installed-tests/js/libgimarshallingtests.so $installedTests/libexec/installed-tests/gjs/libgimarshallingtests.so
+    ln -s $PWD/installed-tests/js/libregress.so $installedTests/libexec/installed-tests/gjs/libregress.so
+    ln -s $PWD/installed-tests/js/libwarnlib.so $installedTests/libexec/installed-tests/gjs/libwarnlib.so
+  '';
+
+  postInstall = ''
+    # TODO: make the glib setup hook handle moving the schemas in other outputs.
+    installedTestsSchemaDatadir="$installedTests/share/gsettings-schemas/${pname}-${version}"
+    mkdir -p "$installedTestsSchemaDatadir"
+    mv "$installedTests/share/glib-2.0" "$installedTestsSchemaDatadir"
+  '';
+
+  postFixup = ''
+    wrapProgram "$installedTests/libexec/installed-tests/gjs/minijasmine" \
+      --prefix XDG_DATA_DIRS : "$installedTestsSchemaDatadir" \
+      --prefix GI_TYPELIB_PATH : "${lib.makeSearchPath "lib/girepository-1.0" testDeps}"
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+    xvfb-run -s '-screen 0 800x600x24' \
+      meson test --print-errorlogs
+    runHook postCheck
+  '';
+
+  separateDebugInfo = stdenv.isLinux;
+
+  passthru = {
+    tests = {
+      installed-tests = nixosTests.installed-tests.gjs;
+    };
+
+    updateScript = gnome3.updateScript {
+      packageName = "gjs";
+    };
+  };
+
+  meta = with lib; {
+    description = "JavaScript bindings for GNOME";
+    homepage = "https://gitlab.gnome.org/GNOME/gjs/blob/master/doc/Home.md";
+    license = licenses.lgpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}