2024-05-02 00:46:19 +00:00
{
stdenv ,
lib ,
fetchurl ,
gettext ,
meson ,
mesonEmulatorHook ,
ninja ,
pkg-config ,
asciidoc ,
gobject-introspection ,
buildPackages ,
withIntrospection ?
lib . meta . availableOn stdenv . hostPlatform gobject-introspection
&& stdenv . hostPlatform . emulatorAvailable buildPackages ,
vala ,
python3 ,
gi-docgen ,
graphviz ,
libxml2 ,
glib ,
wrapGAppsNoGuiHook ,
sqlite ,
libstemmer ,
gnome ,
icu ,
libuuid ,
libsoup ,
libsoup_3 ,
json-glib ,
systemd ,
dbus ,
writeText ,
# for passthru
# , testers
} :
stdenv . mkDerivation ( finalAttrs : {
pname = " t r a c k e r " ;
version = " 3 . 6 . 0 " ;
outputs = [
" o u t "
" d e v "
" d e v d o c "
] ;
src = fetchurl {
url =
with finalAttrs ;
" m i r r o r : / / g n o m e / s o u r c e s / ${ pname } / ${ lib . versions . majorMinor version } / ${ pname } - ${ version } . t a r . x z " ;
sha256 = " U l k s / h m 6 / 9 F t v k d H W + f a d Q 2 9 C 2 M z / X r L Y P q p 2 l v E D f I = " ;
} ;
strictDeps = true ;
depsBuildBuild = [ pkg-config ] ;
nativeBuildInputs =
[
meson
ninja
pkg-config
asciidoc
gettext
glib
wrapGAppsNoGuiHook
gi-docgen
graphviz
( python3 . pythonOnBuildForHost . withPackages ( p : [ p . pygobject3 ] ) )
]
++ lib . optionals withIntrospection [
gobject-introspection
vala
]
++ lib . optionals ( ! stdenv . buildPlatform . canExecute stdenv . hostPlatform ) [ mesonEmulatorHook ] ;
buildInputs = [
glib
libxml2
sqlite
icu
libsoup
libsoup_3
libuuid
json-glib
libstemmer
dbus
] ++ lib . optionals stdenv . isLinux [ systemd ] ;
nativeCheckInputs = [ dbus ] ;
mesonFlags =
[
" - D d o c s = t r u e "
( lib . mesonEnable " i n t r o s p e c t i o n " withIntrospection )
( lib . mesonEnable " v a p i " withIntrospection )
( lib . mesonBool " t e s t _ u t i l s " withIntrospection )
]
2024-06-30 08:16:52 +00:00
++ (
let
2024-05-02 00:46:19 +00:00
# https://gitlab.gnome.org/GNOME/tracker/-/blob/master/meson.build#L159
crossFile = writeText " c r o s s - f i l e . c o n f " ''
[ properties ]
sqlite3_has_fts5 = ' $ { lib . boolToString ( lib . hasInfix " - D S Q L I T E _ E N A B L E _ F T S 3 " sqlite . NIX_CFLAGS_COMPILE ) } '
2024-06-30 08:16:52 +00:00
'' ;
in
2024-05-02 00:46:19 +00:00
[ " - - c r o s s - f i l e = ${ crossFile } " ]
)
++ lib . optionals ( ! stdenv . isLinux ) [ " - D s y s t e m d _ u s e r _ s e r v i c e s = f a l s e " ] ;
doCheck =
# https://gitlab.gnome.org/GNOME/tracker/-/issues/402
! stdenv . isDarwin
# https://gitlab.gnome.org/GNOME/tracker/-/issues/398
&& ! stdenv . is32bit ;
postPatch = ''
chmod + x \
docs/reference/libtracker-sparql/embed-files.py \
docs/reference/libtracker-sparql/generate-svgs.sh
patchShebangs \
utils/data-generators/cc/generate \
docs/reference/libtracker-sparql/embed-files.py \
docs/reference/libtracker-sparql/generate-svgs.sh
'' ;
preCheck =
let
linuxDot0 = lib . optionalString stdenv . isLinux " . 0 " ;
darwinDot0 = lib . optionalString stdenv . isDarwin " . 0 " ;
extension = stdenv . hostPlatform . extensions . sharedLibrary ;
in
''
# (tracker-store:6194): Tracker-CRITICAL **: 09:34:07.722: Cannot initialize database: Could not open sqlite3 database:'/homeless-shelter/.cache/tracker/meta.db': unable to open database file
export HOME = $ ( mktemp - d )
# Our gobject-introspection patches make the shared library paths absolute
# in the GIR files. When running functional 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
ln - s $ PWD/src/libtracker-sparql/libtracker-sparql-3.0 $ { darwinDot0 } $ { extension } $ out/lib/libtracker-sparql-3.0 $ { darwinDot0 } $ { extension } $ { linuxDot0 }
'' ;
checkPhase = ''
runHook preCheck
dbus-run-session \
- - config-file = $ { dbus } /share/dbus-1/session.conf \
meson test \
- - timeout-multiplier 2 \
- - print-errorlogs
runHook postCheck
'' ;
postCheck = ''
# Clean up out symlinks
rm - r $ out/lib
'' ;
postFixup = ''
# Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back.
moveToOutput " s h a r e / d o c " " $ d e v d o c "
'' ;
# passthru = {
# updateScript = gnome.updateScript {
# packageName = finalAttrs.pname;
# };
# tests.pkg-config = testers.hasPkgConfigModules {
# package = finalAttrs.finalPackage;
# };
# };
meta = with lib ; {
homepage = " h t t p s : / / t r a c k e r . g n o m e . o r g / " ;
description = " D e s k t o p - n e u t r a l u s e r i n f o r m a t i o n s t o r e , s e a r c h t o o l a n d i n d e x e r " ;
mainProgram = " t r a c k e r 3 " ;
maintainers = teams . gnome . members ;
license = licenses . gpl2Plus ;
platforms = platforms . unix ;
pkgConfigModules = [
" t r a c k e r - s p a r q l - 3 . 0 "
" t r a c k e r - t e s t u t i l s - 3 . 0 "
] ;
} ;
} )