Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Jul 2023 16:31:42 +0200
From:      Dimitry Andric <dim@FreeBSD.org>
To:        Nuno Teixeira <eduardo@freebsd.org>
Cc:        Danilo Egea Gondolfo <danilo@freebsd.org>, FreeBSD Ports <ports@freebsd.org>
Subject:   Re: glib2 deprecated declarations failing on clang16
Message-ID:  <22F61A7B-3566-4761-8D7A-DC78B9CF20E6@FreeBSD.org>
In-Reply-To: <CAFDf7ULBM1pV_X6OeRKbEggfyGcd0j-LuF720usWtM8KaG%2BJFA@mail.gmail.com>
References:  <CAFDf7U%2B-M1D7xL_AkB-eY%2B0jq2JjjdhzoZUZtnmanVoa25vOtQ@mail.gmail.com> <BBD89BC1-8E9D-4E6D-887E-4A785F4A21D4@FreeBSD.org> <ffcb1751-dc86-b241-d7aa-f54896851697@FreeBSD.org> <CAFDf7ULBM1pV_X6OeRKbEggfyGcd0j-LuF720usWtM8KaG%2BJFA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_50368B33-18CF-48C7-BF28-0EAD5DD5CE1B
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

I got to exactly the same patches. This is due to how glib's gclosure.h
header declares its callback function type as '(void)', even though in
reality the number and type of the arguments varies:

  /**
   * GCallback:
   *
   * The type used for callback functions in structure definitions and =
function
   * signatures.
   *
   * This doesn't mean that all callback functions must take no  =
parameters and
   * return void. The required signature of a callback function is =
determined by                                                            =
                                                          * the context =
in which is used (e.g. the signal to which it is connected).
   *
   * Use G_CALLBACK() to cast the callback function to a #GCallback.
   */
  typedef void  (*GCallback)              (void);

It would have been better if glib had just used '(...)', but the
solution they have chosen requires each callback function to be cast
using the G_CALLBACK() macro.

That basically shuts up any incompatible function pointer warnings, and
disables any argument checks.

-Dimitry

> On 4 Jul 2023, at 16:21, Nuno Teixeira <eduardo@freebsd.org> wrote:
>=20
> Hello Danilo!
>=20
> Yes, it builds ok.
>=20
> I will do a run test tomorrow on bluefish.
>=20
> Any hint on how to explain it in commit:
>=20
> ---
> --- src/bftextview2_autocomp.c.orig     2023-07-04 14:09:37 UTC
> +++ src/bftextview2_autocomp.c
> @@ -429,7 +429,7 @@ acwin_create(BluefishTextView * btv)
>         /*gtk_widget_set_size_request(acw->reflabel,150,-1); */
>         gtk_widget_show_all(acw->scroll);
>         gtk_widget_show(hbox);
> -       g_signal_connect(acw->reflabel, "activate-link", =
acw_label_active_link_lcb, acw);
> +       g_signal_connect(acw->reflabel, "activate-link", =
G_CALLBACK(acw_label_active_link_lcb), acw);
>         /*gtk_widget_set_size_request(GTK_WIDGET(acw->tree),100,200); =
*/
>         /*gtk_widget_set_size_request(acw->win, 150, 200); */
>         =
/*g_signal_connect(G_OBJECT(acw->win),"key-release-event",G_CALLBACK(acwin=
_key_release_lcb),acw); */
> ---
> and
> ---
> --- src/external_commands.c.orig        2023-07-04 14:12:18 UTC
> +++ src/external_commands.c
> @@ -483,7 +483,7 @@ create_commandstring(Texternalp * ep, const gchar =
* fo
>                 =
gtk_dialog_set_default_response(GTK_DIALOG(dialog),GTK_RESPONSE_ACCEPT);
>                 tmp =3D g_strdup_printf(_("Supply arguments to define =
%%a in '%s'"), formatstring);
>                 entry =3D dialog_entry_labeled(NULL, tmp, =
gtk_dialog_get_content_area(GTK_DIALOG(dialog)), 6);
> -               g_signal_connect(G_OBJECT(entry), "activate", =
command_dialog_entry_activated_lcb, dialog);
> +               g_signal_connect(G_OBJECT(entry), "activate", =
G_CALLBACK(command_dialog_entry_activated_lcb), dialog);
>                 g_free(tmp);
>                 gtk_widget_show_all(dialog);
>                 result =3D gtk_dialog_run(GTK_DIALOG(dialog));
> ---
>=20
> Thanks!
>=20
> Danilo Egea Gondolfo <danilo@freebsd.org> escreveu no dia ter=C3=A7a, =
4/07/2023 =C3=A0(s) 15:00:
> On 04/07/2023 14:56, Dimitry Andric wrote:
>=20
> > On 4 Jul 2023, at 14:37, Nuno Teixeira <eduardo@freebsd.org> wrote:
> >> I'm getting build errors from current with www/bluefish about =
deprecated glib2 declarations and causing build to fail with clang16:
> >> ---
> >> /usr/local/include/glib-2.0/glib/gmacros.h:1262:37: note: expanded =
from macro 'G_DEPRECATED'
> >> #define G_DEPRECATED __attribute__((__deprecated__))
> >>                                      ^
> >> mv -f .deps/bluefish.Tpo .deps/bluefish.Po
> >> bftextview2_langmgr.c:2665:2: warning: 'g_thread_create_full' is =
deprecated: Use 'g_thread_new' instead [-Wdeprecated-declarations]
> >>          g_thread_create_full(build_bflang2scan_thread, NULL, 0, =
FALSE, FALSE, G_THREAD_PRIORITY_LOW, &gerror);
> >> ---
> >>
> >> Any help is welcome on finding out its cause.
> >>
> >> a related issue: https://github.com/PCSX2/pcsx2/issues/3315
> >>
> >> Build log: =
https://pkg-status.freebsd.org/beefy17/data/main-i386-default/pf46bd2c5842=
5_s0631830a7a/logs/bluefish-2.2.14.log
> > The actual error is an incompatible callback function signature:
> >
> > bftextview2_autocomp.c:432:2: error: incompatible function pointer =
types passing 'gboolean (GtkLabel *, gchar *, gpointer)' (aka 'int =
(struct _GtkLabel *, char *, void *)') to parameter of type 'GCallback' =
(aka 'void (*)(void)') [-Wincompatible-function-pointer-types]
> > g_signal_connect(acw->reflabel, "activate-link", =
acw_label_active_link_lcb, acw);
> > =
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=
~~~~~~
> > /usr/local/include/glib-2.0/gobject/gsignal.h:515:59: note: expanded =
from macro 'g_signal_connect'
> > g_signal_connect_data ((instance), (detailed_signal), (c_handler), =
(data), NULL, (GConnectFlags) 0)
> > ^~~~~~~~~~~
> > /usr/local/include/glib-2.0/gobject/gsignal.h:411:25: note: passing =
argument to parameter 'c_handler' here
> > GCallback c_handler,
> > ^
> >
> > I have seen these more often with glib-based applications. In some =
cases
> > it is feasible to fix the callback function to have the correct
> > signature, in other cases you can slap a cast in place. Or, if the
> > affected code is vala-generated (also happens), the big hammer is to
> > suppress the warning(s).
> >
> > -Dimitry
> >
> Not a glib expert here, but you can try this =
https://pastebin.com/ty8hLjVU
>=20
>=20
>=20
> --
> Nuno Teixeira
> FreeBSD Committer (ports)


--Apple-Mail=_50368B33-18CF-48C7-BF28-0EAD5DD5CE1B
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=signature.asc
Content-Type: application/pgp-signature;
	name=signature.asc
Content-Description: Message signed with OpenPGP

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.2

iF0EARECAB0WIQR6tGLSzjX8bUI5T82wXqMKLiCWowUCZKQtTgAKCRCwXqMKLiCW
o3iJAJ4j9vhxEQmMA3LZHrkkrM25tHSHngCg/u9uCH+qUtkYjXjjDEnTFWekUNA=
=bLiO
-----END PGP SIGNATURE-----

--Apple-Mail=_50368B33-18CF-48C7-BF28-0EAD5DD5CE1B--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?22F61A7B-3566-4761-8D7A-DC78B9CF20E6>