public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Nick Alcock <nick.alcock@oracle.com>
To: "Jose E. Marchesi" <jose.marchesi@oracle.com>
Cc: Tom Tromey <tom@tromey.com>,
	gdb-patches@sourceware.org, Simon Marchi <simark@simark.ca>,
	indu.bhagat@oracle.com, elena.zannoni@oracle.com,
	binutils@sourceware.org
Subject: Re: [PATCH] gdb: use libtool in GDB_AC_CHECK_BFD
Date: Thu, 10 Nov 2022 17:11:41 +0000	[thread overview]
Message-ID: <87sfiqwx82.fsf@esperi.org.uk> (raw)
In-Reply-To: <87sfiqsr7m.fsf@oracle.com> (Jose E. Marchesi's message of "Thu, 10 Nov 2022 17:35:09 +0100")

[Tried to Cc: gdb-patches, but I'm not yet subscribed to it from this
 address. Not sure if this is going to work... and libctf is part of
 binutils anyway, so I'm Cc:ing binutils@ in so that at least my
 response goes somewhere public.]

On 10 Nov 2022, Jose E. Marchesi said:

>>>>>>> "Jose" == Jose E Marchesi via Gdb-patches <gdb-patches@sourceware.org> writes:
>> Jose> 1) The calls to AM_ZLIB and AC_ZSTD from gdb/configure.ac.
>> Jose> 2) The definition of ZLIB and ZLIBINC from gdb/Makefile.in
>> Jose> 3) ../config/zlib.m4 from aclocal_m4_deps in gdb/Makefile.in
>>
>> ... however the use in ctf-api.h seems like it would prevent removing
>> some of the configury.  gdb includes this header and so it needs the
>> correct -I options to find the in-tree zlib.h.
>>
>> I don't see why ctf-api.h needs this include, but I essentially don't
>> know anything about CTF.
>
> Nick, would it be possible to remove the include of zlib.h from
> ctf-api.h?  Even if libctf uses zlib, it would be good to not expose the
> dependency in the API header...

Yeah, this is an interestingly painful one. I completely agree that it
needs fixing, because it causes problems if you don't have a system
zlib: you end up with a basically unusable ctf-api.h after installation,
which isn't good at all.

But... this is because of this function in the exported API:

extern int ctf_gzwrite (ctf_dict_t *fp, gzFile fd);

Now this is actually a typedef, described as "semi-opaque":

typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */

IF the name of gzfile_s is guaranteed unchanging across zlib releases we
could do this instead of the #include:

/* Note to users: this is a 'gzFile' from <zlib.h>.  */
struct gzFile_s;
extern int ctf_gzwrite (ctf_dict_t *fp, gzFile_s *fd);

The problem is that zlib apparently considers this structure name an
implementation detail (given that what it gives you in the prototype is
a typedef to it), but if that name ever changes then including
<ctf-api.h> and <zlib.h> in the same translation unit would fail. Indeed
this function used to take a void * (with the same typedef name) in
1.2.5 and before :(

Maybe I could just make it take a void *, but that's not very clear at
all! That type name is actually useful documentation... and I can't
introduce the typedef myself because double-declaring a typedef is an
error. (And a configure test won't help here, because the problem is the
zlib version installed when *users* include <ctf-api.h>...)

So... suggestions? Do people think gzFile_s is unlikely to be renamed
again or changed away from a structure in future, so that doing this is
safe? (Even when it was a void *, it was a structure internally, albeit
a totally different one.)

-- 
NULL && (void)

       reply	other threads:[~2022-11-10 17:16 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20221107194634.1313150-1-jose.marchesi@oracle.com>
     [not found] ` <5e940b15-cd5c-83b2-0bdd-9afa27b5f197@simark.ca>
     [not found]   ` <87bkpeuae6.fsf@oracle.com>
     [not found]     ` <875yfmztd6.fsf@tromey.com>
     [not found]       ` <87sfiqsr7m.fsf@oracle.com>
2022-11-10 17:11         ` Nick Alcock [this message]
2022-11-10 17:46           ` Simon Marchi
2022-11-11 13:17             ` Nix
2022-11-11 13:51               ` Simon Marchi
2022-11-14 13:56                 ` Nick Alcock

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=87sfiqwx82.fsf@esperi.org.uk \
    --to=nick.alcock@oracle.com \
    --cc=binutils@sourceware.org \
    --cc=elena.zannoni@oracle.com \
    --cc=gdb-patches@sourceware.org \
    --cc=indu.bhagat@oracle.com \
    --cc=jose.marchesi@oracle.com \
    --cc=simark@simark.ca \
    --cc=tom@tromey.com \
    /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.
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).