unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* guile-2.0.pc misses a few dependency libraries
@ 2012-01-28 11:20 Eli Zaretskii
  2012-01-29 23:19 ` Ludovic Courtès
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2012-01-28 11:20 UTC (permalink / raw)
  To: guile-user

When statically linking programs against libguile-2.0.a, I get
unresolved externals.  This is on MS-Windows, but I don't think this
is related to the problem.

I finally traced that to the contents of guile-2.0.pc file:

  Libs: -L${libdir} -lguile-2.0 -Ld:/usr/lib -lgc  
  Libs.private:  d:/usr/lib/libgmp.dll.a -Ld:/usr/lib d:/usr/lib/libltdl.dll.a -Ld:/usr/lib -lffi    -lregex -lcrypt -lws2_32 -lm 

However, libguile-2.0.la shows more dependency libraries:

  dependency_libs=' -lgc -lffi -lunistring -liconv -lregex -lintl -liconv -lgmp -ltdl -lregex -lintl -lwsock32 -lole32 -luuid -lmsvcp60 -lcrypt -lws2_32'

As you see, quite a few libraries are missing from guile-2.0.pc, and
also a several libraries need to appear more than once in the link
command line.

Why doesn't the Guile build process put all of the libraries in the
.pc file?

I could easily work around this by editing guile-2.0.pc manually, but
isn't this supposed to happen automatically?

Any help would be appreciated.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: guile-2.0.pc misses a few dependency libraries
  2012-01-28 11:20 guile-2.0.pc misses a few dependency libraries Eli Zaretskii
@ 2012-01-29 23:19 ` Ludovic Courtès
  2012-01-30 17:02   ` Mark H Weaver
  2012-01-31 16:57   ` Eli Zaretskii
  0 siblings, 2 replies; 6+ messages in thread
From: Ludovic Courtès @ 2012-01-29 23:19 UTC (permalink / raw)
  To: guile-user

[-- Attachment #1: Type: text/plain, Size: 1070 bytes --]

Hi Eli,

Eli Zaretskii <eliz@gnu.org> skribis:

> When statically linking programs against libguile-2.0.a, I get
> unresolved externals.  This is on MS-Windows, but I don't think this
> is related to the problem.
>
> I finally traced that to the contents of guile-2.0.pc file:
>
>   Libs: -L${libdir} -lguile-2.0 -Ld:/usr/lib -lgc  
>   Libs.private:  d:/usr/lib/libgmp.dll.a -Ld:/usr/lib d:/usr/lib/libltdl.dll.a -Ld:/usr/lib -lffi    -lregex -lcrypt -lws2_32 -lm 
>
> However, libguile-2.0.la shows more dependency libraries:
>
>   dependency_libs=' -lgc -lffi -lunistring -liconv -lregex -lintl -liconv -lgmp -ltdl -lregex -lintl -lwsock32 -lole32 -luuid -lmsvcp60 -lcrypt -lws2_32'
>
> As you see, quite a few libraries are missing from guile-2.0.pc, and
> also a several libraries need to appear more than once in the link
> command line.

Commit 58f86505d658359508732c8f187bc37d010074d0 (see below) should solve
most of that, but not all, since I don’t know where -lole32, and -lregex
come from, for example.

Can you try it and report back?

Thanks!

Ludo’.


[-- Attachment #2: Type: text/x-patch, Size: 1189 bytes --]

commit 58f86505d658359508732c8f187bc37d010074d0 (HEAD, refs/remotes/origin/stable-2.0, refs/heads/stable-2.0)
Author: Ludovic Courtès <ludo@gnu.org>
Date:   Mon Jan 30 00:17:34 2012 +0100

    Augment `Libs.private' with for non-GNU platforms.
    
    Reported by Eli Zaretskii <eliz@gnu.org>.
    
    * meta/guile-2.0.pc.in (Libs.private): Add all the optional libraries
      that may be pulled via Gnulib on non-GNU platforms.

	Modified meta/guile-2.0.pc.in
diff --git a/meta/guile-2.0.pc.in b/meta/guile-2.0.pc.in
index ecca778..1bda734 100644
--- a/meta/guile-2.0.pc.in
+++ b/meta/guile-2.0.pc.in
@@ -15,5 +15,8 @@ Name: GNU Guile
 Description: GNU's Ubiquitous Intelligent Language for Extension
 Version: @GUILE_VERSION@
 Libs: -L${libdir} -lguile-@GUILE_EFFECTIVE_VERSION@ @BDW_GC_LIBS@
-Libs.private: @LIB_CLOCK_GETTIME@ @LIBGMP@ @LIBLTDL@ @LIBFFI_LIBS@ @GUILE_LIBS@
+Libs.private: @LIB_CLOCK_GETTIME@ @LIBGMP@ @LIBLTDL@ @LIBFFI_LIBS@	\
+  @LIBUNISTRING@ @GUILE_LIBS@ @LIBICONV@ @LIBINTL@ @LIBSOCKET@		\
+  @SERVENT_LIB@ @HOSTENT_LIB@ @GETADDRINFO_LIB@ @INET_NTOP_LIB@		\
+  @INET_PTON_LIB@
 Cflags: -I${pkgincludedir}/@GUILE_EFFECTIVE_VERSION@ @GUILE_CFLAGS@ @BDW_GC_CFLAGS@


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: guile-2.0.pc misses a few dependency libraries
  2012-01-29 23:19 ` Ludovic Courtès
@ 2012-01-30 17:02   ` Mark H Weaver
  2012-01-30 17:10     ` Ludovic Courtès
  2012-01-31 16:57   ` Eli Zaretskii
  1 sibling, 1 reply; 6+ messages in thread
From: Mark H Weaver @ 2012-01-30 17:02 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-user

ludo@gnu.org (Ludovic Courtès) writes:

> Eli Zaretskii <eliz@gnu.org> skribis:
>
>> When statically linking programs against libguile-2.0.a, I get
>> unresolved externals.  This is on MS-Windows, but I don't think this
>> is related to the problem.
>>
>> I finally traced that to the contents of guile-2.0.pc file:
>>
>>   Libs: -L${libdir} -lguile-2.0 -Ld:/usr/lib -lgc  
>>   Libs.private: d:/usr/lib/libgmp.dll.a -Ld:/usr/lib
>> d:/usr/lib/libltdl.dll.a -Ld:/usr/lib -lffi -lregex -lcrypt -lws2_32
>> -lm
>>
>> However, libguile-2.0.la shows more dependency libraries:
>>
>>   dependency_libs=' -lgc -lffi -lunistring -liconv -lregex -lintl
>> -liconv -lgmp -ltdl -lregex -lintl -lwsock32 -lole32 -luuid
>> -lmsvcp60 -lcrypt -lws2_32'
>>
>> As you see, quite a few libraries are missing from guile-2.0.pc, and
>> also a several libraries need to appear more than once in the link
>> command line.
>
> Commit 58f86505d658359508732c8f187bc37d010074d0 (see below) should solve
> most of that, but not all, since I don’t know where -lole32, and -lregex
> come from, for example.

It seems to me that adding a fixed list of indirect dependencies to
guile-2.0.pc.in is the wrong approach, because the indirect dependencies
may depend on the platform, as well as the specific versions/variants of
any of the direct or indirect dependencies.

How do other programs that use 'pkg-config' deal with this issue?
Are they all broken in this way?

If we really need the full list of indirect dependencies, maybe we
should somehow extract it from the generated .la file?

    Thanks,
      Mark


> commit 58f86505d658359508732c8f187bc37d010074d0 (HEAD, refs/remotes/origin/stable-2.0, refs/heads/stable-2.0)
> Author: Ludovic Courtès <ludo@gnu.org>
> Date:   Mon Jan 30 00:17:34 2012 +0100
>
>     Augment `Libs.private' with for non-GNU platforms.
>     
>     Reported by Eli Zaretskii <eliz@gnu.org>.
>     
>     * meta/guile-2.0.pc.in (Libs.private): Add all the optional libraries
>       that may be pulled via Gnulib on non-GNU platforms.
>
> 	Modified meta/guile-2.0.pc.in
> diff --git a/meta/guile-2.0.pc.in b/meta/guile-2.0.pc.in
> index ecca778..1bda734 100644
> --- a/meta/guile-2.0.pc.in
> +++ b/meta/guile-2.0.pc.in
> @@ -15,5 +15,8 @@ Name: GNU Guile
>  Description: GNU's Ubiquitous Intelligent Language for Extension
>  Version: @GUILE_VERSION@
>  Libs: -L${libdir} -lguile-@GUILE_EFFECTIVE_VERSION@ @BDW_GC_LIBS@
> -Libs.private: @LIB_CLOCK_GETTIME@ @LIBGMP@ @LIBLTDL@ @LIBFFI_LIBS@ @GUILE_LIBS@
> +Libs.private: @LIB_CLOCK_GETTIME@ @LIBGMP@ @LIBLTDL@ @LIBFFI_LIBS@	\
> +  @LIBUNISTRING@ @GUILE_LIBS@ @LIBICONV@ @LIBINTL@ @LIBSOCKET@		\
> +  @SERVENT_LIB@ @HOSTENT_LIB@ @GETADDRINFO_LIB@ @INET_NTOP_LIB@		\
> +  @INET_PTON_LIB@
>  Cflags: -I${pkgincludedir}/@GUILE_EFFECTIVE_VERSION@ @GUILE_CFLAGS@ @BDW_GC_CFLAGS@



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: guile-2.0.pc misses a few dependency libraries
  2012-01-30 17:02   ` Mark H Weaver
@ 2012-01-30 17:10     ` Ludovic Courtès
  0 siblings, 0 replies; 6+ messages in thread
From: Ludovic Courtès @ 2012-01-30 17:10 UTC (permalink / raw)
  To: Mark H Weaver; +Cc: guile-user

Hi,

Mark H Weaver <mhw@netris.org> skribis:

> ludo@gnu.org (Ludovic Courtès) writes:
>
>> Eli Zaretskii <eliz@gnu.org> skribis:
>>
>>> When statically linking programs against libguile-2.0.a, I get
>>> unresolved externals.  This is on MS-Windows, but I don't think this
>>> is related to the problem.
>>>
>>> I finally traced that to the contents of guile-2.0.pc file:
>>>
>>>   Libs: -L${libdir} -lguile-2.0 -Ld:/usr/lib -lgc  
>>>   Libs.private: d:/usr/lib/libgmp.dll.a -Ld:/usr/lib
>>> d:/usr/lib/libltdl.dll.a -Ld:/usr/lib -lffi -lregex -lcrypt -lws2_32
>>> -lm
>>>
>>> However, libguile-2.0.la shows more dependency libraries:
>>>
>>>   dependency_libs=' -lgc -lffi -lunistring -liconv -lregex -lintl
>>> -liconv -lgmp -ltdl -lregex -lintl -lwsock32 -lole32 -luuid
>>> -lmsvcp60 -lcrypt -lws2_32'
>>>
>>> As you see, quite a few libraries are missing from guile-2.0.pc, and
>>> also a several libraries need to appear more than once in the link
>>> command line.
>>
>> Commit 58f86505d658359508732c8f187bc37d010074d0 (see below) should solve
>> most of that, but not all, since I don’t know where -lole32, and -lregex
>> come from, for example.
>
> It seems to me that adding a fixed list of indirect dependencies to
> guile-2.0.pc.in is the wrong approach, because the indirect dependencies
> may depend on the platform, as well as the specific versions/variants of
> any of the direct or indirect dependencies.

For the record, most of those added in
58f86505d658359508732c8f187bc37d010074d0 are empty on GNU systems, for
instance.  So it’s really an OS-dependent list.

> How do other programs that use 'pkg-config' deal with this issue?
> Are they all broken in this way?

Yes, AFAIK.

> If we really need the full list of indirect dependencies, maybe we
> should somehow extract it from the generated .la file?

That sounds right, but slightly nasty.

Keep in mind that the only issue could be for users linking without
Libtool, and in the even that ‘Libs.private’ is outdated compared to
what the actual dependency list.

Thanks,
Ludo’.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: guile-2.0.pc misses a few dependency libraries
  2012-01-29 23:19 ` Ludovic Courtès
  2012-01-30 17:02   ` Mark H Weaver
@ 2012-01-31 16:57   ` Eli Zaretskii
  2012-01-31 17:56     ` Ludovic Courtès
  1 sibling, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2012-01-31 16:57 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-user

> From: ludo@gnu.org (Ludovic Courtès)
> Date: Mon, 30 Jan 2012 00:19:40 +0100
> 
> > I finally traced that to the contents of guile-2.0.pc file:
> >
> >   Libs: -L${libdir} -lguile-2.0 -Ld:/usr/lib -lgc  
> >   Libs.private:  d:/usr/lib/libgmp.dll.a -Ld:/usr/lib d:/usr/lib/libltdl.dll.a -Ld:/usr/lib -lffi    -lregex -lcrypt -lws2_32 -lm 
> >
> > However, libguile-2.0.la shows more dependency libraries:
> >
> >   dependency_libs=' -lgc -lffi -lunistring -liconv -lregex -lintl -liconv -lgmp -ltdl -lregex -lintl -lwsock32 -lole32 -luuid -lmsvcp60 -lcrypt -lws2_32'
> >
> > As you see, quite a few libraries are missing from guile-2.0.pc, and
> > also a several libraries need to appear more than once in the link
> > command line.
> 
> Commit 58f86505d658359508732c8f187bc37d010074d0 (see below) should solve
> most of that, but not all

It solves all of them, thanks.

> I don’t know where -lole32, and -lregex come from, for example.

"-lregex" is needed by regex-posix.c (naturally ;-), since the default
Windows libraries do not include regcomp, regexec, etc.  There's a
test in configure that first check the standard library link, then
"-lregex" and "-lrx".

However, @GUILE_LIBS@ already gets edited to include -lregex, so
there's no problems here.

"-lole32" (and a few others) come from libregex.la.  However, the
standard link command for the program I'm building (GNU Make, btw)
already includes these libraries even without Guile, so using your
modified guile-2.0.pc.in, I was able to link the program successfully
with no unresolved externals.

Btw, shouldn't guile-2.0-uninstalled.pc.in get the same changes?

Thanks!




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: guile-2.0.pc misses a few dependency libraries
  2012-01-31 16:57   ` Eli Zaretskii
@ 2012-01-31 17:56     ` Ludovic Courtès
  0 siblings, 0 replies; 6+ messages in thread
From: Ludovic Courtès @ 2012-01-31 17:56 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: guile-user

Hi Eli,

Eli Zaretskii <eliz@gnu.org> skribis:

>> From: ludo@gnu.org (Ludovic Courtès)
>> Date: Mon, 30 Jan 2012 00:19:40 +0100
>> 
>> > I finally traced that to the contents of guile-2.0.pc file:
>> >
>> >   Libs: -L${libdir} -lguile-2.0 -Ld:/usr/lib -lgc  
>> >   Libs.private:  d:/usr/lib/libgmp.dll.a -Ld:/usr/lib d:/usr/lib/libltdl.dll.a -Ld:/usr/lib -lffi    -lregex -lcrypt -lws2_32 -lm 
>> >
>> > However, libguile-2.0.la shows more dependency libraries:
>> >
>> >   dependency_libs=' -lgc -lffi -lunistring -liconv -lregex -lintl -liconv -lgmp -ltdl -lregex -lintl -lwsock32 -lole32 -luuid -lmsvcp60 -lcrypt -lws2_32'
>> >
>> > As you see, quite a few libraries are missing from guile-2.0.pc, and
>> > also a several libraries need to appear more than once in the link
>> > command line.
>> 
>> Commit 58f86505d658359508732c8f187bc37d010074d0 (see below) should solve
>> most of that, but not all
>
> It solves all of them, thanks.

Even better than expected.  :-)

>> I don’t know where -lole32, and -lregex come from, for example.
>
> "-lregex" is needed by regex-posix.c (naturally ;-), since the default
> Windows libraries do not include regcomp, regexec, etc.  There's a
> test in configure that first check the standard library link, then
> "-lregex" and "-lrx".
>
> However, @GUILE_LIBS@ already gets edited to include -lregex, so
> there's no problems here.
>
> "-lole32" (and a few others) come from libregex.la.  However, the
> standard link command for the program I'm building (GNU Make, btw)
> already includes these libraries even without Guile, so using your
> modified guile-2.0.pc.in, I was able to link the program successfully
> with no unresolved externals.

Great!

> Btw, shouldn't guile-2.0-uninstalled.pc.in get the same changes?

Yes, you’re right.  Fixed in 7e9a301b7f3bcc811803305250b22d71a8b06155.

Thanks,
Ludo’.



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-01-31 17:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-28 11:20 guile-2.0.pc misses a few dependency libraries Eli Zaretskii
2012-01-29 23:19 ` Ludovic Courtès
2012-01-30 17:02   ` Mark H Weaver
2012-01-30 17:10     ` Ludovic Courtès
2012-01-31 16:57   ` Eli Zaretskii
2012-01-31 17:56     ` Ludovic Courtès

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).