2021-03-21 01:22:13 +00:00
|
|
|
{ lib
|
|
|
|
, stdenv
|
|
|
|
, fetchurl
|
|
|
|
, pkg-config
|
|
|
|
, glib
|
|
|
|
, gdk-pixbuf
|
2023-07-31 11:31:53 +00:00
|
|
|
, installShellFiles
|
2021-03-21 01:22:13 +00:00
|
|
|
, pango
|
|
|
|
, cairo
|
|
|
|
, libxml2
|
|
|
|
, bzip2
|
|
|
|
, libintl
|
|
|
|
, ApplicationServices
|
|
|
|
, Foundation
|
|
|
|
, libobjc
|
2021-08-30 17:16:57 +00:00
|
|
|
, rustPlatform
|
2021-03-21 01:22:13 +00:00
|
|
|
, rustc
|
2022-12-07 05:21:46 +00:00
|
|
|
, cargo-auditable-cargo-wrapper
|
2022-02-16 18:36:42 +00:00
|
|
|
, gi-docgen
|
2022-05-13 01:56:24 +00:00
|
|
|
, python3Packages
|
2021-05-07 21:18:14 +00:00
|
|
|
, gnome
|
2021-03-21 01:22:13 +00:00
|
|
|
, vala
|
2023-02-18 05:33:24 +00:00
|
|
|
, writeScript
|
2023-10-12 13:13:57 +00:00
|
|
|
, withIntrospection ? lib.meta.availableOn stdenv.hostPlatform gobject-introspection && stdenv.hostPlatform.emulatorAvailable buildPackages
|
2023-02-18 04:49:20 +00:00
|
|
|
, buildPackages
|
2021-03-21 01:22:13 +00:00
|
|
|
, gobject-introspection
|
2022-08-05 20:04:16 +00:00
|
|
|
, _experimental-update-script-combinators
|
|
|
|
, common-updater-scripts
|
|
|
|
, jq
|
|
|
|
, nix
|
2023-08-02 23:23:06 +00:00
|
|
|
|
|
|
|
# for passthru.tests
|
|
|
|
, enlightenment
|
|
|
|
, ffmpeg
|
|
|
|
, gegl
|
|
|
|
, gimp
|
|
|
|
, imagemagick
|
|
|
|
, imlib2
|
|
|
|
, vips
|
|
|
|
, xfce
|
2021-03-21 01:22:13 +00:00
|
|
|
}:
|
2013-01-29 01:39:15 +00:00
|
|
|
|
2023-07-05 18:32:23 +00:00
|
|
|
stdenv.mkDerivation (finalAttrs: {
|
2021-03-21 01:22:13 +00:00
|
|
|
pname = "librsvg";
|
2024-08-18 06:15:15 +00:00
|
|
|
version = "2.58.3";
|
2013-09-07 00:09:11 +00:00
|
|
|
|
2022-09-07 21:50:58 +00:00
|
|
|
outputs = [ "out" "dev" ] ++ lib.optionals withIntrospection [
|
2022-02-16 18:36:42 +00:00
|
|
|
"devdoc"
|
|
|
|
];
|
2016-04-24 12:58:04 +00:00
|
|
|
|
2021-03-21 01:22:13 +00:00
|
|
|
src = fetchurl {
|
2023-07-05 18:32:23 +00:00
|
|
|
url = "mirror://gnome/sources/librsvg/${lib.versions.majorMinor finalAttrs.version}/librsvg-${finalAttrs.version}.tar.xz";
|
2024-08-18 06:15:15 +00:00
|
|
|
hash = "sha256-SfKaCpL0wtGaLLQelqsvzn61veQYUMipFPz2VeMRCUQ=";
|
2021-03-21 01:22:13 +00:00
|
|
|
};
|
2020-04-06 09:20:00 +00:00
|
|
|
|
2022-08-05 20:04:16 +00:00
|
|
|
cargoDeps = rustPlatform.fetchCargoTarball {
|
2023-07-05 18:32:23 +00:00
|
|
|
inherit (finalAttrs) src;
|
|
|
|
name = "librsvg-deps-${finalAttrs.version}";
|
2024-08-18 06:15:15 +00:00
|
|
|
hash = "sha256-pTd3H4ZYwsCb4C6gijE0gRWZ4Mq6gGGmwXE3nKGILhw=";
|
2022-08-05 20:04:16 +00:00
|
|
|
# TODO: move this to fetchCargoTarball
|
|
|
|
dontConfigure = true;
|
|
|
|
};
|
2021-08-30 17:16:57 +00:00
|
|
|
|
2021-08-30 20:15:14 +00:00
|
|
|
strictDeps = true;
|
|
|
|
|
2023-07-05 18:32:23 +00:00
|
|
|
depsBuildBuild = [
|
|
|
|
pkg-config
|
|
|
|
];
|
2021-08-30 20:15:14 +00:00
|
|
|
|
2021-03-21 01:22:13 +00:00
|
|
|
nativeBuildInputs = [
|
2021-08-30 20:15:14 +00:00
|
|
|
gdk-pixbuf
|
2023-07-31 11:31:53 +00:00
|
|
|
installShellFiles
|
2021-03-21 01:22:13 +00:00
|
|
|
pkg-config
|
|
|
|
rustc
|
2022-12-07 05:21:46 +00:00
|
|
|
cargo-auditable-cargo-wrapper
|
2022-05-13 01:56:24 +00:00
|
|
|
python3Packages.docutils
|
2021-03-21 01:22:13 +00:00
|
|
|
vala
|
2021-08-30 17:16:57 +00:00
|
|
|
rustPlatform.cargoSetupHook
|
|
|
|
] ++ lib.optionals withIntrospection [
|
2021-03-21 01:22:13 +00:00
|
|
|
gobject-introspection
|
2022-02-16 18:36:42 +00:00
|
|
|
gi-docgen
|
2021-03-21 01:22:13 +00:00
|
|
|
];
|
2013-09-07 00:09:11 +00:00
|
|
|
|
2021-03-21 01:22:13 +00:00
|
|
|
buildInputs = [
|
|
|
|
libxml2
|
|
|
|
bzip2
|
|
|
|
pango
|
|
|
|
libintl
|
2023-02-18 04:49:20 +00:00
|
|
|
vala # for share/vala/Makefile.vapigen
|
2021-03-21 01:22:13 +00:00
|
|
|
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
|
2021-10-31 07:00:08 +00:00
|
|
|
ApplicationServices
|
|
|
|
Foundation
|
2021-03-21 01:22:13 +00:00
|
|
|
libobjc
|
|
|
|
];
|
2013-09-07 00:09:11 +00:00
|
|
|
|
2021-03-21 01:22:13 +00:00
|
|
|
propagatedBuildInputs = [
|
|
|
|
glib
|
|
|
|
gdk-pixbuf
|
|
|
|
cairo
|
|
|
|
];
|
2012-03-08 22:45:42 +00:00
|
|
|
|
2018-05-09 01:58:06 +00:00
|
|
|
configureFlags = [
|
2021-08-30 17:16:57 +00:00
|
|
|
(lib.enableFeature withIntrospection "introspection")
|
2022-11-20 06:14:38 +00:00
|
|
|
(lib.enableFeature withIntrospection "vala")
|
2021-08-30 17:16:57 +00:00
|
|
|
|
2018-05-09 01:58:06 +00:00
|
|
|
"--enable-always-build-tests"
|
2021-11-29 07:01:33 +00:00
|
|
|
] ++ lib.optional stdenv.hostPlatform.isDarwin "--disable-Bsymbolic"
|
lib.systems: elaborate Rust metadata
We need this stuff to be available in lib so make-derivation.nix can
access it to construct the Meson cross file.
This has a couple of other advantages:
- It makes Rust less special. Now figuring out what Rust calls a
platform is the same as figuring out what Linux or QEMU call it.
- We can unify the schema used to define Rust targets, and the schema
used to access those values later. Just like you can set "config"
or "system" in a platform definition, and then access those same
keys on the elaborated platform, you can now set "rustcTarget" in
your crossSystem, and then access "stdenv.hostPlatform.rustcTarget"
in your code.
"rustcTarget", "rustcTargetSpec", "cargoShortTarget", and
"cargoEnvVarTarget" have the "rustc" and "cargo" prefixes because
these are not exposed to code by the compiler, and are not
standardized. The arch/os/etc. variables are all named to match the
forms in the Rust target spec JSON.
The new rust.target-family only takes a list, since we don't need to
worry about backwards compatibility when that name is used.
The old APIs are all still functional with no warning for now, so that
it's possible for external code to use a single API on both 23.05 and
23.11. We can introduce the warnings once 23.05 is EOL, and make them
hard errors when 23.11 is EOL.
2023-05-09 13:38:32 +00:00
|
|
|
++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "RUST_TARGET=${stdenv.hostPlatform.rust.rustcTarget}";
|
2018-05-09 01:58:06 +00:00
|
|
|
|
2021-03-21 01:22:13 +00:00
|
|
|
doCheck = false; # all tests fail on libtool-generated rsvg-convert not being able to find coreutils
|
2013-01-29 01:39:15 +00:00
|
|
|
|
2023-02-18 05:33:24 +00:00
|
|
|
GDK_PIXBUF_QUERYLOADERS = writeScript "gdk-pixbuf-loader-loaders-wrapped" ''
|
|
|
|
${lib.optionalString (stdenv.hostPlatform.emulatorAvailable buildPackages) (stdenv.hostPlatform.emulator buildPackages)} ${lib.getDev gdk-pixbuf}/bin/gdk-pixbuf-query-loaders
|
|
|
|
'';
|
|
|
|
|
2024-08-31 01:48:43 +00:00
|
|
|
# librsvg only links Foundation, but it also requiers libobjc.
|
|
|
|
env = lib.optionalAttrs stdenv.hostPlatform.isDarwin { NIX_LDFLAGS = "-lobjc"; };
|
2023-07-20 02:06:27 +00:00
|
|
|
|
2023-02-18 04:49:20 +00:00
|
|
|
preConfigure = ''
|
|
|
|
PKG_CONFIG_VAPIGEN_VAPIGEN="$(type -p vapigen)"
|
|
|
|
export PKG_CONFIG_VAPIGEN_VAPIGEN
|
|
|
|
'';
|
|
|
|
|
2012-11-11 17:02:27 +00:00
|
|
|
# It wants to add loaders and update the loaders.cache in gdk-pixbuf
|
|
|
|
# Patching the Makefiles to it creates rsvg specific loaders and the
|
|
|
|
# relevant loader.cache here.
|
|
|
|
# The loaders.cache can be used by setting GDK_PIXBUF_MODULE_FILE to
|
|
|
|
# point to this file in a wrapper.
|
|
|
|
postConfigure = ''
|
2015-06-14 13:59:52 +00:00
|
|
|
GDK_PIXBUF=$out/lib/gdk-pixbuf-2.0/2.10.0
|
2012-11-11 17:02:27 +00:00
|
|
|
mkdir -p $GDK_PIXBUF/loaders
|
2023-07-31 11:31:53 +00:00
|
|
|
sed -i gdk-pixbuf-loader/Makefile \
|
|
|
|
-e "s#gdk_pixbuf_moduledir = .*#gdk_pixbuf_moduledir = $GDK_PIXBUF/loaders#" \
|
|
|
|
-e "s#gdk_pixbuf_cache_file = .*#gdk_pixbuf_cache_file = $GDK_PIXBUF/loaders.cache#" \
|
|
|
|
-e "s#\$(GDK_PIXBUF_QUERYLOADERS)#GDK_PIXBUF_MODULEDIR=$GDK_PIXBUF/loaders \$(GDK_PIXBUF_QUERYLOADERS)#"
|
2017-09-30 23:30:17 +00:00
|
|
|
|
|
|
|
# Fix thumbnailer path
|
2019-05-22 11:03:39 +00:00
|
|
|
sed -e "s#@bindir@\(/gdk-pixbuf-thumbnailer\)#${gdk-pixbuf}/bin\1#g" \
|
2017-09-30 23:30:17 +00:00
|
|
|
-i gdk-pixbuf-loader/librsvg.thumbnailer.in
|
2021-10-22 02:41:10 +00:00
|
|
|
|
|
|
|
# 'error: linker `cc` not found' when cross-compiling
|
|
|
|
export RUSTFLAGS="-Clinker=$CC"
|
2023-02-18 05:33:24 +00:00
|
|
|
'' + lib.optionalString ((stdenv.buildPlatform != stdenv.hostPlatform) && (stdenv.hostPlatform.emulatorAvailable buildPackages)) ''
|
|
|
|
# the replacement is the native conditional
|
|
|
|
substituteInPlace gdk-pixbuf-loader/Makefile \
|
|
|
|
--replace 'RUN_QUERY_LOADER_TEST = false' 'RUN_QUERY_LOADER_TEST = test -z "$(DESTDIR)"' \
|
2012-11-11 17:02:27 +00:00
|
|
|
'';
|
2015-06-14 13:59:52 +00:00
|
|
|
|
2021-08-30 17:16:57 +00:00
|
|
|
# Not generated when cross compiling.
|
2023-07-21 01:48:30 +00:00
|
|
|
postInstall = let emulator = stdenv.hostPlatform.emulator buildPackages; in
|
|
|
|
lib.optionalString (stdenv.hostPlatform.emulatorAvailable buildPackages) ''
|
|
|
|
# Merge gdkpixbuf and librsvg loaders
|
|
|
|
cat ${lib.getLib gdk-pixbuf}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache $GDK_PIXBUF/loaders.cache > $GDK_PIXBUF/loaders.cache.tmp
|
|
|
|
mv $GDK_PIXBUF/loaders.cache.tmp $GDK_PIXBUF/loaders.cache
|
|
|
|
|
2023-07-31 11:31:53 +00:00
|
|
|
installShellCompletion --cmd rsvg-convert \
|
|
|
|
--bash <(${emulator} $out/bin/rsvg-convert --completion bash) \
|
|
|
|
--fish <(${emulator} $out/bin/rsvg-convert --completion fish) \
|
|
|
|
--zsh <(${emulator} $out/bin/rsvg-convert --completion zsh)
|
2023-07-21 01:48:30 +00:00
|
|
|
'';
|
2016-08-02 16:06:29 +00:00
|
|
|
|
2022-05-13 01:56:24 +00:00
|
|
|
postFixup = lib.optionalString withIntrospection ''
|
2022-02-16 18:36:42 +00:00
|
|
|
# Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back.
|
|
|
|
moveToOutput "share/doc" "$devdoc"
|
|
|
|
'';
|
|
|
|
|
2018-03-03 02:30:09 +00:00
|
|
|
passthru = {
|
2022-08-05 20:04:16 +00:00
|
|
|
updateScript =
|
|
|
|
let
|
|
|
|
updateSource = gnome.updateScript {
|
|
|
|
packageName = "librsvg";
|
|
|
|
};
|
|
|
|
|
|
|
|
updateLockfile = {
|
|
|
|
command = [
|
|
|
|
"sh"
|
|
|
|
"-c"
|
|
|
|
''
|
|
|
|
PATH=${lib.makeBinPath [
|
|
|
|
common-updater-scripts
|
|
|
|
jq
|
|
|
|
nix
|
|
|
|
]}
|
2024-06-09 17:46:03 +00:00
|
|
|
update-source-version librsvg --ignore-same-version --source-key=cargoDeps > /dev/null
|
2022-08-05 20:04:16 +00:00
|
|
|
''
|
|
|
|
];
|
|
|
|
# Experimental feature: do not copy!
|
|
|
|
supportedFeatures = [ "silent" ];
|
|
|
|
};
|
|
|
|
in
|
|
|
|
_experimental-update-script-combinators.sequence [
|
|
|
|
updateSource
|
|
|
|
updateLockfile
|
|
|
|
];
|
2023-08-02 23:23:06 +00:00
|
|
|
tests = {
|
|
|
|
inherit
|
|
|
|
gegl
|
|
|
|
gimp
|
|
|
|
imagemagick
|
|
|
|
imlib2
|
|
|
|
vips;
|
|
|
|
inherit (enlightenment) efl;
|
|
|
|
inherit (xfce) xfwm4;
|
|
|
|
ffmpeg = ffmpeg.override { withSvg = true; };
|
|
|
|
};
|
2018-03-03 02:30:09 +00:00
|
|
|
};
|
|
|
|
|
2021-01-21 17:00:13 +00:00
|
|
|
meta = with lib; {
|
2018-03-03 02:30:09 +00:00
|
|
|
description = "Small library to render SVG images to Cairo surfaces";
|
2024-05-08 18:06:21 +00:00
|
|
|
homepage = "https://gitlab.gnome.org/GNOME/librsvg";
|
2018-03-03 02:30:09 +00:00
|
|
|
license = licenses.lgpl2Plus;
|
2020-04-01 12:40:51 +00:00
|
|
|
maintainers = teams.gnome.members;
|
2022-05-05 00:52:27 +00:00
|
|
|
mainProgram = "rsvg-convert";
|
2018-03-03 02:30:09 +00:00
|
|
|
platforms = platforms.unix;
|
2016-08-02 16:06:29 +00:00
|
|
|
};
|
2023-07-05 18:32:23 +00:00
|
|
|
})
|