Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,46 @@


def extract_libtool(la_file):
--- a/tests/scanner/test_shlibs.py
+++ b/tests/scanner/test_shlibs.py
@@ -7,6 +7,30 @@ from giscanner.shlibs import resolve_from_ldd_output, sanitize_shlib_path

class TestLddParser(unittest.TestCase):

+ def test_resolve_from_ldd_output_nix(self):
+ output = '''\
+ libglib-2.0.so.0 => @nixStoreDir@/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libglib-2.0.so.0 (0x00007f0ee1b28000)
+ libgobject-2.0.so.0 => @nixStoreDir@/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgobject-2.0.so.0 (0x00007f0ee18cf000)
+ libgio-2.0.so.0 => @nixStoreDir@/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgio-2.0.so.0 (0x00007f0ee1502000)
+ libxml2.so.2 => @nixStoreDir@/72mxkk74cv266snkjpz1kwl1i2rg8rpc-libxml2-2.9.8/lib/libxml2.so.2 (0x00007f0ee119c000)
+ libsqlite3.so.0 => @nixStoreDir@/ck5ay23hsmlc67pg3m34kzd1k2hhvww0-sqlite-3.24.0/lib/libsqlite3.so.0 (0x00007f0ee0e98000)
+ libpsl.so.5 => @nixStoreDir@/qn3l2gn7m76f318676wflrs2z6d4rrkj-libpsl-0.20.2-list-2017-02-03/lib/libpsl.so.5 (0x00007f0ee0c88000)
+ libc.so.6 => @nixStoreDir@/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/libc.so.6 (0x00007f0ee08d4000)
+ libpcre.so.1 => @nixStoreDir@/hxbq8lpc53qsf1bc0dfcsm47wmcxzjvh-pcre-8.42/lib/libpcre.so.1 (0x00007f0ee0662000)
+ @nixStoreDir@/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib64/ld-linux-x86-64.so.2 (0x00007f0ee20ff000)
+ libblkid.so.1 => @nixStoreDir@/q0kgnq21j0l2yd77gdlld371246cwghh-util-linux-2.32.1/lib/libblkid.so.1 (0x00007f0edd0cd000)
+ libuuid.so.1 => @nixStoreDir@/q0kgnq21j0l2yd77gdlld371246cwghh-util-linux-2.32.1/lib/libuuid.so.1 (0x00007f0edcec5000)
+ librt.so.1 => @nixStoreDir@/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/librt.so.1 (0x00007f0edccbd000)
+ libstdc++.so.6 => @nixStoreDir@/3v5r7fkrbkw2qajadvjbf6p6qriz9p1i-gcc-7.3.0-lib/lib/libstdc++.so.6 (0x00007f0edc936000)
+ libgcc_s.so.1 => @nixStoreDir@/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/libgcc_s.so.1 (0x00007f0edc720000)
+ '''
+ libraries = ['glib-2.0', 'gio-2.0']
+
+ self.assertEqual(
+ ['@nixStoreDir@/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libglib-2.0.so.0',
+ '@nixStoreDir@/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgio-2.0.so.0'],
+ resolve_from_ldd_output(libraries, output))
+
def test_resolve_from_ldd_output(self):
output = '''\
libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fbe12d68000)
@@ -40,7 +64,8 @@ class TestLddParser(unittest.TestCase):

self.assertEqual(
sanitize_shlib_path('/foo/bar'),
- '/foo/bar' if sys.platform == 'darwin' else 'bar')
+ # NixOS always want the absolute path
+ '/foo/bar')

def test_unresolved_library(self):
output = ''
110 changes: 74 additions & 36 deletions pkgs/development/libraries/gobject-introspection/default.nix
Original file line number Diff line number Diff line change
@@ -1,61 +1,97 @@
{ stdenv, fetchurl, glib, flex, bison, meson, ninja, pkgconfig, libffi, python3
, libintl, cctools, cairo, gnome3, glibcLocales
, substituteAll, nixStoreDir ? builtins.storeDir
{ stdenv
, fetchurl
, glib
, flex
, bison
, meson
, ninja
, gtk-doc
, docbook-xsl-nons
, docbook_xml_dtd_43
, docbook_xml_dtd_45
, pkg-config
, libffi
, python3
, cctools
, cairo
, gnome3
, substituteAll
, nixStoreDir ? builtins.storeDir
, x11Support ? true
}:

# now that gobject-introspection creates large .gir files (eg gtk3 case)
# it may be worth thinking about using multiple derivation outputs
# In that case its about 6MB which could be separated

with stdenv.lib;
stdenv.mkDerivation rec {
pname = "gobject-introspection";
version = "1.64.1";

# outputs TODO: share/gobject-introspection-1.0/tests is needed during build
# by pygobject3 (and maybe others), but it's only searched in $out
outputs = [ "out" "dev" "devdoc" "man" ];
outputBin = "dev";

src = fetchurl {
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "19vz7vp10h0zj3f491yk72dp89bix6rgkzxg4qcm4d6151ksxgl0";
};

outputs = [ "out" "dev" "man" ];
outputBin = "dev";
patches = [
# Make g-ir-scanner put absolute path to GIR files it generates
# so that programs can just dlopen them without having to muck
# with LD_LIBRARY_PATH environment variable.
(substituteAll {
src = ./absolute_shlib_path.patch;
inherit nixStoreDir;
})
] ++ stdenv.lib.optionals x11Support [
# Hardcode the cairo shared library path in the Cairo gir shipped with this package.
# https://github.com/NixOS/nixpkgs/issues/34080
(substituteAll {
src = ./absolute_gir_path.patch;
cairoLib = "${stdenv.lib.getLib cairo}/lib";
})
];

LC_ALL = "en_US.UTF-8"; # for tests
nativeBuildInputs = [
meson
ninja
pkg-config
flex
bison
gtk-doc
docbook-xsl-nons
docbook_xml_dtd_43 # FIXME: remove in next release
docbook_xml_dtd_45
python3
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah. It's in both. That would be fine I suppose.

setupHook # move .gir files
];

nativeBuildInputs = [ meson ninja pkgconfig libintl glibcLocales ];
buildInputs = [ flex bison python3 setupHook/*move .gir*/ ]
++ stdenv.lib.optional stdenv.isDarwin cctools;
propagatedBuildInputs = [ libffi glib ];
buildInputs = [
python3
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cc @FRidh from a cross-compiling perspective we usually used the build-native python interpreter to build python packages, no?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, the build-native one is used in buildPythonPackage.

Copy link
Member

@FRidh FRidh May 20, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe they link against the interpreter, that is, use the C API?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Build scripts need build python and some gobject utils are written in python so they need host python.

];

checkInputs = stdenv.lib.optionals stdenv.isDarwin [
cctools # for otool
];

propagatedBuildInputs = [
libffi
glib
];

mesonFlags = [
"--datadir=${placeholder "dev"}/share"
"-Ddoctool=disabled"
"-Dcairo=disabled"
"-Dgtk_doc=true"
];

# outputs TODO: share/gobject-introspection-1.0/tests is needed during build
# by pygobject3 (and maybe others), but it's only searched in $out

setupHook = ./setup-hook.sh;

patches = [
(substituteAll {
src = ./test_shlibs.patch;
inherit nixStoreDir;
})
(substituteAll {
src = ./absolute_shlib_path.patch;
inherit nixStoreDir;
})
] ++ stdenv.lib.optional x11Support # https://github.com/NixOS/nixpkgs/issues/34080
(substituteAll {
src = ./absolute_gir_path.patch;
cairoLib = "${getLib cairo}/lib";
});

doCheck = !stdenv.isAarch64;

preBuild = ''
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.
Expand All @@ -64,10 +100,12 @@ stdenv.mkDerivation rec {
ln -s $PWD/tests/scanner/libregress-1.0${stdenv.targetPlatform.extensions.sharedLibrary} $out/lib/libregress-1.0${stdenv.targetPlatform.extensions.sharedLibrary}
'';

preInstall = ''
postCheck = ''
rm $out/lib/libregress-1.0${stdenv.targetPlatform.extensions.sharedLibrary}
'';

setupHook = ./setup-hook.sh;

passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
Expand All @@ -76,9 +114,9 @@ stdenv.mkDerivation rec {

meta = with stdenv.lib; {
description = "A middleware layer between C libraries and language bindings";
homepage = "http://live.gnome.org/GObjectIntrospection";
maintainers = with maintainers; [ lovek323 lethalman ];
platforms = platforms.unix;
homepage = "https://gi.readthedocs.io/";
maintainers = teams.gnome.members ++ (with maintainers; [ lovek323 ]);
platforms = platforms.unix;
license = with licenses; [ gpl2 lgpl2 ];

longDescription = ''
Expand Down
43 changes: 0 additions & 43 deletions pkgs/development/libraries/gobject-introspection/test_shlibs.patch

This file was deleted.