After patching up the shared libraries in c420de6 to use absolute paths,
there are still some libraries left which do not get an absolute paths
assigned.
Those libraries are the ones which have an absolute path outside of the
Nix store, so we assume that they're build products of the current build
and make them absolute by prepending "$out/lib" or "$lib/lib" (depending
on whether it's a multiple output derivation or not) to its basename.
So for my test case, the resulting library paths now look like this:
/nix/store/...-libblockdev-1.3/lib/libblockdev.so.0
/nix/store/...-glibc-2.21/lib/libm.so.6
/nix/store/...-dmraid-1.0.0.rc16/lib/libdmraid.so.1.0.0.rc16
/nix/store/...-libblockdev-1.3/lib/libbd_utils.so.0
Which is perfectly fine and everything gets resolved correctly after
importing the library using GI.
However, I didn't test it against other libraries and programs, so this
still needs testing, especially for Darwin.
Signed-off-by: aszlig <aszlig@redmoonstudios.org>
The gi-r-scanner is generating a list of shared libraries that are
referenced in the shared-library attribute of the <namespace/> element
of the GIR file. However, this attribute only contains the names of the
libraries and not the full store paths, like for example while preparing
to package libblockdev, the following items were included in the
shared-library attribute:
/nix/store/...-libblockdev-1.3/lib/libblockdev.so.0
libm.so.6
libdmraid.so.1.0.0.rc16
libbd_utils.so.0
Unfortunately, loading such a library without setting LD_LIBRARY_PATH is
going to fail finding libm.so.6 and libdmraid.so.1.0.0.rc16.
Now the first attempt at solving this was to put absolute paths of all
the libraries referenced in the shared-library attribute, but this also
led up to including paths of build-time shared objects into that
attribute:
/nix/store/...-libblockdev-1.3/lib/libblockdev.so.0
/nix/store/...-glibc-2.21/lib/libm.so.6
/nix/store/...-dmraid-1.0.0.rc16/lib/libdmraid.so.1.0.0.rc16
/tmp/nix-build-libblockdev-1.3.drv-0/.../utils/.libs/libbd_utils.so.0
This of course is not what we want, so the final solution is to only
use the absolute path whenever it is a Nix path and leave the library
name as-is if the path doesn't reside within the store, like this:
/nix/store/...-libblockdev-1.3/lib/libblockdev.so.0
/nix/store/...-glibc-2.21/lib/libm.so.6
/nix/store/...-dmraid-1.0.0.rc16/lib/libdmraid.so.1.0.0.rc16
libbd_utils.so.0
The downside of this approach is that if not even the output path of the
library is in LD_LIBRARY_PATH, even loading of libbd_utils.so.0 could
fail, so we need to patch the loader as well.
Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This update was generated by hackage2nix v20151217-9-geddefc2 using the following inputs:
- Nixpkgs: a28e076b47
- Hackage: c63083af59
- LTS Haskell: cf055c2754
- Stackage Nightly: 8f10b44c12
Without less, we get:
```
2016-01-22 10:31:59,098 - MainThread - awscli.help - DEBUG - Running command: ['groff', '-man', '-T', 'ascii']
2016-01-22 10:31:59,109 - MainThread - awscli.help - DEBUG - Running command: ['less', '-R']
2016-01-22 10:31:59,111 - MainThread - awscli.clidriver - DEBUG - Exception caught in main()
Traceback (most recent call last):
File "/nix/store/jmgflkyf1yfz6an82pvhq084mp1j0bjn-awscli-1.7.41/lib/python2.7/site-packages/awscli/clidriver.py", line 183, in main
return command_table[parsed_args.command](remaining, parsed_args)
File "/nix/store/jmgflkyf1yfz6an82pvhq084mp1j0bjn-awscli-1.7.41/lib/python2.7/site-packages/awscli/help.py", line 245, in __call__
self.renderer.render(self.doc.getvalue())
File "/nix/store/jmgflkyf1yfz6an82pvhq084mp1j0bjn-awscli-1.7.41/lib/python2.7/site-packages/awscli/help.py", line 81, in render
self._send_output_to_pager(converted_content)
File "/nix/store/jmgflkyf1yfz6an82pvhq084mp1j0bjn-awscli-1.7.41/lib/python2.7/site-packages/awscli/help.py", line 86, in _send_output_to_pager
p = self._popen(cmdline, stdin=PIPE)
File "/nix/store/jmgflkyf1yfz6an82pvhq084mp1j0bjn-awscli-1.7.41/lib/python2.7/site-packages/awscli/help.py", line 90, in _popen
return Popen(*args, **kwargs)
File "/nix/store/6a1x9r9wywa27v9gvp0yqgq0mmkfa3ww-python-2.7.11/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/nix/store/6a1x9r9wywa27v9gvp0yqgq0mmkfa3ww-python-2.7.11/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
2016-01-22 10:31:59,112 - MainThread - awscli.clidriver - DEBUG - Exiting with rc 255
[Errno 2] No such file or directory
```
Import less along with groff
Fixes#12549.
This adds a backport of rhinstaller/blivet#39 to the pinned blivet
version 0.17, it's addressing the following upstream bug:
https://bugzilla.redhat.com/show_bug.cgi?id=1196397
It has been reported at aszlig/nixpart#7 and tested by @manveru (the
issue reporter), thanks a lot.
Thanks also to @domenkozar for finding the upstream issue.
Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Reported-by: Michael Fellinger <m.fellinger@gmail.com>
Fixes: aszlig/nixpart#7