gtkd-developers / GlibD

D bindings for the GLib C Utility Library.
Other
5 stars 3 forks source link

fails with glib2.76/gobject-introspection-1.76 #16

Closed nekopsykose closed 1 year ago

nekopsykose commented 1 year ago
The Meson build system
Version: 1.0.1
Source dir: /home/demon/src/aports/community/glibd/src/GlibD-2.4.1
Build dir: /home/demon/src/aports/community/glibd/src/GlibD-2.4.1/output
Build type: native build
Project name: GlibD
Project version: 2.4.1
D compiler for the host machine: ldc2 (llvm 1.32.0 "LDC - the LLVM D compiler (1.32.0):")
D linker for the host machine: ldc2 ld.bfd 2.40
Host machine cpu family: x86_64
Host machine cpu: x86_64
Found pkg-config: /usr/bin/pkg-config (1.9.4)
Run-time dependency glib-2.0 found: YES 2.76.0
Run-time dependency gmodule-2.0 found: YES 2.76.0
Run-time dependency gobject-2.0 found: YES 2.76.0
Run-time dependency gio-2.0 found: YES 2.76.0
Run-time dependency gobject-introspection-1.0 found: YES 1.76.0
Program girtod found: YES (/usr/bin/girtod)
Message: Generating D interfaces from GIR...
Build targets in project: 4

GlibD 2.4.1

  User defined options
    auto_features : auto
    bindir        : /usr/bin
    buildtype     : plain
    datadir       : /usr/share
    includedir    : /usr/include
    infodir       : /usr/share/info
    libdir        : /usr/lib
    libexecdir    : /usr/libexec
    localedir     : /usr/share/locale
    localstatedir : /var
    mandir        : /usr/share/man
    prefix        : /usr
    sbindir       : /usr/sbin
    sharedstatedir: /var/lib
    sysconfdir    : /etc
    wrap_mode     : nodownload
    b_lto         : false
    b_pie         : true
    b_staticpic   : true

Found ninja-1.9 at /usr/bin/ninja
INFO: autodetecting backend as ninja
INFO: calculating backend command to run: /usr/bin/ninja -C /home/demon/src/aports/community/glibd/src/GlibD-2.4.1/output -j 16
ninja: entering directory '/home/demon/src/aports/community/glibd/src/GlibD-2.4.1/output'
[1/349] Compiling D object tests/gobject/value_test.p/ValueTest.d.o
[2/349] Compiling D object tests/gobject/objectg_test.p/ObjectGTest.d.o
[3/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_Flags.d.o
[4/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_Enums.d.o
[5/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_Boxed.d.o
[6/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_Type.d.o
[7/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_Signals.d.o
[8/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_DClosure.d.o
[9/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_WeakRef.d.o
[10/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_ValueArray.d.o
[11/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_Value.d.o
[12/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_TypeValueTable.d.o
[13/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_TypePluginT.d.o
[14/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_TypePluginIF.d.o
[15/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_TypeModule.d.o
[16/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_TypeInterface.d.o
[17/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_TypeInstance.d.o
[18/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_TypeClass.d.o
[19/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_SignalGroup.d.o
[20/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_ParamSpecPool.d.o
[21/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_ParamSpec.d.o
[22/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_ObjectClass.d.o
[23/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_ObjectG.d.o
[24/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_Closure.d.o
[25/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_CClosure.d.o
[26/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_BindingGroup.d.o
[27/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_Binding.d.o
[28/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_c_types.d.o
[29/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gobject_c_functions.d.o
[30/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_ErrorGIO.d.o
[31/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_DBusUtilities.d.o
[32/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_DBusError.d.o
[33/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_ContentType.d.o
[34/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_DBusNames.d.o
[35/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_PollableUtils.d.o
[36/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_ZlibDecompressor.d.o
[37/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_ZlibCompressor.d.o
[38/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeMonitor.d.o
[39/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeT.d.o
[40/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeIF.d.o
[41/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_Vfs.d.o
[42/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_UnixSocketAddress.d.o
[43/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_UnixOutputStream.d.o
[44/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_UnixMountPoint.d.o
[45/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_UnixMountMonitor.d.o
[46/349] Compiling D object libglibd-2.0.so.2.4.1.p/output_generated_gio_UnixMountEntry.d.o
ninja: job failed: ldc2 -I=libglibd-2.0.so.2.4.1.p -I=. -I=.. -I=generated -I=../generated -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -enable-color -wi -Os -relocation-model=pic -makedeps=libglibd-2.0.so.2.4.1.p/output_generated_gio_ContentType.d.o.deps -of=libglibd-2.0.so.2.4.1.p/output_generated_gio_ContentType.d.o -c ../output/generated/gio/ContentType.d
generated/glib/ArrayG.d(324): Error: constructor `glib.ArrayG.ArrayG.this(void*[] data, bool clear, ulong elementSize)` conflicts with previous declaration at generated/glib/ArrayG.d(281)
ninja: job failed: ldc2 -I=libglibd-2.0.so.2.4.1.p -I=. -I=.. -I=generated -I=../generated -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -enable-color -wi -Os -relocation-model=pic -makedeps=libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeMonitor.d.o.deps -of=libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeMonitor.d.o -c ../output/generated/gio/VolumeMonitor.d
generated/glib/ArrayG.d(324): Error: constructor `glib.ArrayG.ArrayG.this(void*[] data, bool clear, ulong elementSize)` conflicts with previous declaration at generated/glib/ArrayG.d(281)
ninja: job failed: ldc2 -I=libglibd-2.0.so.2.4.1.p -I=. -I=.. -I=generated -I=../generated -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -enable-color -wi -Os -relocation-model=pic -makedeps=libglibd-2.0.so.2.4.1.p/output_generated_gio_Vfs.d.o.deps -of=libglibd-2.0.so.2.4.1.p/output_generated_gio_Vfs.d.o -c ../output/generated/gio/Vfs.d
generated/glib/ArrayG.d(324): Error: constructor `glib.ArrayG.ArrayG.this(void*[] data, bool clear, ulong elementSize)` conflicts with previous declaration at generated/glib/ArrayG.d(281)
ninja: job failed: ldc2 -I=libglibd-2.0.so.2.4.1.p -I=. -I=.. -I=generated -I=../generated -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -enable-color -wi -Os -relocation-model=pic -makedeps=libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeT.d.o.deps -of=libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeT.d.o -c ../output/generated/gio/VolumeT.d
generated/glib/ArrayG.d(324): Error: constructor `glib.ArrayG.ArrayG.this(void*[] data, bool clear, ulong elementSize)` conflicts with previous declaration at generated/glib/ArrayG.d(281)
ninja: job failed: ldc2 -I=libglibd-2.0.so.2.4.1.p -I=. -I=.. -I=generated -I=../generated -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -enable-color -wi -Os -relocation-model=pic -makedeps=libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeIF.d.o.deps -of=libglibd-2.0.so.2.4.1.p/output_generated_gio_VolumeIF.d.o -c ../output/generated/gio/VolumeIF.d
generated/glib/ArrayG.d(324): Error: constructor `glib.ArrayG.ArrayG.this(void*[] data, bool clear, ulong elementSize)` conflicts with previous declaration at generated/glib/ArrayG.d(281)
ninja: subcommands failed
ptrcnull commented 1 year ago

it's a bug in gir-to-d, reproducible with the following APILookup.txt:

wrap: glib
file: GLib-2.0.gir
file: GModule-2.0.gir

struct: Array
class: ArrayG
ptrcnull commented 1 year ago

after a bit more debugging, it looks like gir-to-d parses the gir file incorrectly; while the function is indeed defined twice in the file:

$ fq -r '. | grep_by((.parameters.parameter | length == 3) and (.parameters.parameter[2]["@name"] == "element_size")) | ( .["@c:identifier"] + ": " + .["@name"] + "(" + (.parameters.parameter | map(.["@name"]) | join (", ")) + ")" )' GLib-2.0.gir 
g_array_new_take_zero_terminated: array_new_take_zero_terminated(data, clear, element_size)
g_array_new: new(zero_terminated, clear_, element_size)
g_array_new_take_zero_terminated: new_take_zero_terminated(data, clear, element_size)

one of them is a global function inside the namespace, while the other is defined inside the GArray record

$ fq '.repository.namespace' GLib-2.0.gir | gron | rg 'g_array_new_take_zero_terminated'
json.record[0]["function"][8]["@c:identifier"] = "g_array_new_take_zero_terminated";
json["function"][6]["@c:identifier"] = "g_array_new_take_zero_terminated";
arrowd commented 1 year ago

Bumped into exactly the same issue. GDC error message for reference:

./_build/generated/glib/ArrayG.d:324:16: error: glib.ArrayG.ArrayG.this at ../_build/generated/glib/ArrayG.d:324:9 conflicts with glib.ArrayG.ArrayG.this at ../_build/generated/glib/ArrayG.d:281:9
  324 |         public this(void*[] data, bool clear, size_t elementSize)
      |                ^

Any workarounds for this?

arrowd commented 1 year ago

@MikeWey Can you please look into this?

MikeWey commented 1 year ago

I've set the lookup file to not generate code for the zero terminated version, glib.Unicode needed a small fix in gir-to-d.

ptrcnull commented 1 year ago

any chance for a new release with this?

arrowd commented 1 year ago

Yes, it'd be great to have tags for both projects, so we can consume them downstream.

MikeWey commented 1 year ago

Tagged both projects. gir-to-d v0.23.1 and GlibD v2.4.2

arrowd commented 1 year ago

Many thanks, I have updated FreeBSD packages.