unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
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

  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

  List information: https://guix.gnu.org/

* 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 public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).