From: taylanbayirli@gmail.com (Taylan Ulrich Bayırlı/Kammer)
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: guix-devel@gnu.org
Subject: Re: pkg-config "Requires" fields and propagated inputs
Date: Tue, 24 Mar 2015 23:52:18 +0100 [thread overview]
Message-ID: <877fu62el9.fsf@taylan.uni.cx> (raw)
In-Reply-To: <87twxayuz6.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Tue, 24 Mar 2015 21:57:17 +0100")
ludo@gnu.org (Ludovic Courtès) writes:
> Do you have an example of a package that uses Requires.private?
libxrandr is a good test case. Indeed I patched it a few days ago
because some libraries in its Requires.private weren't propagated, which
fixed my issue.
>> However, pkg-config isn't aware of compile-time/run-time dependency
>> differences; it's considered an error if a Requires.private of libfoo
>> isn't found,
>
> Really, even without --static?
>
>> because as far as pkg-config is concerned, it means libfoo is
>> dysfunctional. So we *do* need to propagate Requires.private, for the
>> sake of pkg-config. (The problem mainly manifests in the form of
>> ./configure scripts claiming libfoo isn't found when it's only libbar
>> that's missing, because in that case pkg-config returns an error to
>> the ./configure script when inquired about libfoo.)
>
> Do you have an example of that?
I hit the issue with libxrandr while packaging mpv. It has x11 under
its Requires.private, and:
$ ./pre-inst-env guix environment --pure -E guile guile-json mpv
GNU Guile 2.0.11
Copyright (C) 1995-2014 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guile-user)> ,use (srfi srfi-1)
scheme@(guile-user)> (define path (string-split (getenv "PKG_CONFIG_PATH") #\:))
scheme@(guile-user)> (find (lambda (s) (string-match "x11" s)) path)
$1 = "/gnu/store/99bgd1yjf51y0mrh2p40g499ida8l1qr-libx11-1.6.2/lib/pkgconfig"
scheme@(guile-user)> (system* "pkg-config" "--exists" "xrandr")
$2 = 0
scheme@(guile-user)> (system* "pkg-config" "--print-errors" "xrandr")
$3 = 0
scheme@(guile-user)> (system* "pkg-config" "--libs" "xrandr")
-L/gnu/store/05a5lxii4qvgf9jnxq85jvmbpalljr9a-libxrandr-1.4.2/lib -lXrandr
$4 = 0
scheme@(guile-user)> (define path* (filter (lambda (s) (not (string-match "x11" s))) path))
scheme@(guile-user)> (setenv "PKG_CONFIG_PATH" (string-join path* ":"))
scheme@(guile-user)> (system* "pkg-config" "--exists" "xrandr")
$5 = 256
scheme@(guile-user)> (system* "pkg-config" "--print-errors" "xrandr")
Package x11 was not found in the pkg-config search path.
Perhaps you should add the directory containing `x11.pc'
to the PKG_CONFIG_PATH environment variable
Package 'x11', required by 'xrandr', not found
$6 = 256
scheme@(guile-user)> (system* "pkg-config" "--libs" "xrandr")
-L/gnu/store/05a5lxii4qvgf9jnxq85jvmbpalljr9a-libxrandr-1.4.2/lib -lXrandr
$7 = 0
scheme@(guile-user)>
So while e.g. --libs actually works, --exists reports failure, and
--print-errors explains why.
One could say this is partially a bug, because if libxrandr statically
linked against libx11, then libx11 needn't exist at build nor run time.
It might be nice to have build-only propagated inputs. On the other
hand, someone installing libxrandr in their profile will expect
pkg-config on libxrandr to work without errors. More generally, they
will expect any build operation to work; i.e. a user might want to use
Guix-installed libraries for Guix-external development, and build-only
propagated inputs would mean annoying such users because they now have
to install them manually. Unless we provide a special "install for
development" operation that is. But the complexity grows. :-)
Taylan
next prev parent reply other threads:[~2015-03-24 22:52 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-19 20:48 pkg-config "Requires" fields and propagated inputs Taylan Ulrich Bayırlı/Kammer
2015-03-24 20:57 ` Ludovic Courtès
2015-03-24 22:52 ` Taylan Ulrich Bayırlı/Kammer [this message]
2015-03-25 16:56 ` Ludovic Courtès
2015-03-25 19:48 ` Taylan Ulrich Bayırlı/Kammer
2015-03-26 22:03 ` Taylan Ulrich Bayırlı/Kammer
2015-03-31 12:14 ` Ludovic Courtès
2015-04-29 20:17 ` Taylan Ulrich Bayırlı/Kammer
2015-05-03 19:48 ` Ludovic Courtès
2015-05-03 20:57 ` Taylan Ulrich Bayırlı/Kammer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877fu62el9.fsf@taylan.uni.cx \
--to=taylanbayirli@gmail.com \
--cc=guix-devel@gnu.org \
--cc=ludo@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.