[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: autoconf tests and stdcall name mangling
From: |
Eric Blake |
Subject: |
Re: autoconf tests and stdcall name mangling |
Date: |
Wed, 22 May 2013 14:35:00 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 |
On 05/22/2013 02:12 PM, Zack Weinberg wrote:
> On Wed, May 22, 2013 at 1:06 PM, Nick Bowler <address@hidden> wrote:
>> The fundamental problem, I think, is that you really need the proper
>> headers included and AC_REPLACE_FUNCS does not seem to allow you to
>> specify the includes. So you probably can't use this macro at all.
>>
>> You can use AC_LINK_IFELSE to fully specify the test program to compile
>> and link, which is probably what you'll need to do here. This may still
>> be tricky to get right. Alternately, Gnulib[1] has a getaddrinfo module[2]
>> which may already do everything you need (although I have not used it).
>
> I wrote the attached macro to solve a closely related problem (looking
> for ntohl, not getaddrinfo; the way Winsock works, it's equivalent).
> Perhaps it will be useful to you.
>
> Going forward I think AC_*_FUNC[S] really need to grow a way to
> specify headers. Fake-declaring everything as "char foo();" has been
> kinda silly for years now.
AC_CHECK_DECL ("can I compile against this function when using the right
headers") is a much better macro than AC_CHECK_FUNC ("can I link against
this symbol, and cross-my-fingers that the library actually exported it
by this name and not some other due to aliasing or stdcall or ...").
There are still a few corner cases where some platforms accidentally
declare a function but fail to export it, so both styles of probes are
still useful in practice; but generally you should try the DECL form first.
Maybe this warrants a patch to the autoconf manual to point this out
more emphatically; anyone want to take a stab at it?
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature