Help needed with gobject-introspection

Ken Brown kbrown@cornell.edu
Thu May 21 17:07:52 GMT 2020


On 5/21/2020 11:48 AM, Jon Turney wrote:
> On 21/05/2020 16:13, Ken Brown via Cygwin-apps wrote:
>>
>>
>> On 5/21/2020 9:24 AM, Jon Turney wrote:
>>> On 20/05/2020 15:50, Ken Brown via Cygwin-apps wrote:
>>>> On 5/19/2020 7:04 PM, Ken Brown via Cygwin-apps wrote:
>>>>> I would like to adopt gimp and related packages.  At the moment I'm having 
>>>>> trouble with babl, which is needed for gegl0.4, which is needed for gimp. 
>>>>> The problem involves gobject-introspection.
>>>>>
>>>>> If I disable introspection, the build works fine.  This would be OK, since 
>>>>> babl has been built without introspection for several years. But then the 
>>>>> gegl0.4 build complains about the missing babl introspection files, so I 
>>>>> would have to disable introspection there too, which hasn't been done in 
>>>>> the past.
>>>>>
>>>>> So my preference is to figure out what the problem is and get the babl 
>>>>> build working with introspection.  I'm attaching my cygport file and patch.
>>>>>
>>>>> Here's the failing command...
>>>>>
>>>>> /usr/bin/g-ir-scanner -I/usr/include/gobject-introspection-1.0 
>>>>> -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -D_REENTRANT 
>>>>> --no-libtool --namespace=Babl --nsversion=0.1 --warn-all --output 
>>>>> babl/Babl-0.1.gir --c-include=babl.h 
>>>>> '--identifier-filter-cmd=/usr/bin/python3 
>>>>> /tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/babl/identfilter.py' 
>>>>> -DBABL_IS_BEING_COMPILED 
>>>>> -I/tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/babl 
>>>>> -I/tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/babl 
>>>>> -I./. -I../. -I./babl/base/. -I../babl/base/. 
>>>>> --filelist=/tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/babl/4170c83@@babl-0.1@sha/Babl_0.1_gir_filelist 
>>>>> --cflags-begin -fno-unsafe-math-optimizations -Wdeclaration-after-statement 
>>>>> -Winit-self -Wmissing-declarations -Wmissing-prototypes 
>>>>> -Wold-style-definition -Wpointer-arith -mmmx -msse -mfpmath=sse -I./. 
>>>>> -I../. -I./babl/base/. -I../babl/base/. --cflags-end --library babl-0.1 
>>>>> -L/tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/babl 
>>>>> --extra-library=m --extra-library=dl --extra-library=lcms2
>>>>>
>>>>> ...and the error message:
>>>>>
>>>>> g-ir-scanner: link: gcc -o 
>>>>> /tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/tmp-introspectCwCaUc/Babl-0.1.exe 
>>>>> -ggdb -O2 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 
>>>>> -fstack-protector-strong --param=ssp-buffer-size=4 
>>>>> -fdebug-prefix-map=/tmp/cygbabl/babl-0.1.74-1.x86_64/build=/usr/src/debug/babl-0.1.74-1 
>>>>> -fdebug-prefix-map=/tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74=/usr/src/debug/babl-0.1.74-1 
>>>>> /tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/tmp-introspectCwCaUc/Babl-0.1.o 
>>>>> -L. -lbabl-0.1 -lm -ldl -llcms2 
>>>>> -L/tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/babl 
>>>>> -Wl,-rpath,/tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/babl 
>>>>> -lgio-2.0 -lgobject-2.0 -Wl,--export-all-symbols -lgmodule-2.0 -lglib-2.0 
>>>>> -lintl
>>>>> ERROR: can't resolve libraries to shared libraries: babl-0.1
>>>>>
>>>>> I don't understand the error message, because the command line contains
>>>>>
>>>>> -L/tmp/cygbabl/babl-0.1.74-1.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/babl
>>>>>
>>>>> and that directory contains libbabl-0.1.dll.a and cygbabl-0.1-0.dll. I even 
>>>>> tried adding that directory to my PATH to make sure the right 
>>>>> cygbabl-0.1-0.dll would be found, but that didn't help.
>>>
>>> This might possibly be related to the problem described in the comment for:
>>>
>>> https://github.com/mesonbuild/meson/pull/2880/commits/8a27c08b05e4537d5061d30ddd8aad9dc52cf1c4 
>>>
>>>
>>>> By the way, in case you're wondering why I disabled the building of docs, 
>>>> it's because I was getting a build failure there too.  I don't know if this 
>>>> is related to the introspection failure.  The failing command there is
>>>>
>>>> /usr/bin/meson --internal exe --unpickle 
>>>> /tmp/cygbabl/babl-0.1.74-2.x86_64/src/babl-0.1.74/x86_64-pc-cygwin/meson-private/meson_exe_env_7bf39b99114d34540b83d26a5d8f097e05882836.dat 
>>>>
>>>> cp: target 'docs/index.html.tmp' is not a directory
>>>>
>>>> I don't know why it's not showing me the actual cp command that fails. 
>>>
>>> I believe it's is an infelicity in meson that it doesn't echo the actual 
>>> failing command here.
>>>
>>> Noted here: https://github.com/mesonbuild/meson/pull/3716#issuecomment-395746838
>>>
>>>> The corresponding information in docs/meson.build is
>>>>
>>>> Reference_html = custom_target('Reference.html',
>>>>    input : [
>>>>      'Reference-static.html',
>>>>      'toc',
>>>>      index_html_tmp,
>>>>    ],
>>>>    output: [ 'Reference.html', ],
>>>>    command: [
>>>>      env_bin,
>>>>      'cp', '@INPUT0@', '@OUTPUT@',
>>>>      '&&', xml_insert, '@OUTPUT@', 'TOC', '@INPUT1@',
>>>>      '&&', xml_insert, '@OUTPUT@', 'BablBase', '@INPUT2@',
>>>>    ],
>>>>    build_by_default: true,
>>>> )
>>>>
>>>> There are several such custom targets in the file, and for all except this 
>>>> one, I see the actual cp command in the log.  This is the only one for which 
>>>> meson generates a 'meson --unpickle' command instead of a cp command.
>>>
>>> Yeah, I wasn't expecting it to use this method of executing the command line 
>>> (storing it in a pickle and then using a python wrapper to execute it) to be 
>>> used except on Windows, so I'll have to take a more detailed look at why 
>>> that's happening.
>>
>> Thanks.  FWIW, the recipe for building docs/Reference.html translates to
>>
>>    /usr/bin/env \
>>       cp ../docs/Reference-static.html docs/Reference.html \
>>        && ../docs/tools/xml_insert.sh docs/Reference.html TOC ../docs/toc \
>>        && ../docs/tools/xml_insert.sh \
>>           docs/Reference.html BablBase docs/index.html.tmp
>>
>> This succeeds when run manually in the build directory.  So something must 
>> have gone wrong in the pickling/unpickling process.
> 
> 
> patching /usr/lib/python3.6/site-packages/mesonbuild/scripts/meson_exe.py 
> something like this might shed some light:
> 
> --- meson_exe.py.bak    2020-05-21 15:01:19.187046500 +0100
> +++ meson_exe.py        2020-05-21 15:09:29.485915300 +0100
> @@ -57,6 +57,8 @@
>                   ['Z:' + p for p in exe.extra_paths] + 
> child_env.get('WINEPATH', '').split(';')
>               )
> 
> +    print(cmd_args)
> +
>       p = subprocess.Popen(cmd_args, env=child_env, cwd=exe.workdir,
>                            close_fds=False,
>                            stdout=subprocess.PIPE,

OK, now the log shows

cp: target 'docs/index.html.tmp' is not a directory
['/usr/bin/env', 'cp', '../docs/Reference-static.html', 'docs/Reference.html', 
'&&', 
'/home/kbrown/src/cygpackages/babl/babl-0.1.74-1.x86_64/src/babl-0.1.74/docs/tools/xml_insert.sh', 
'docs/Reference.html', 'TOC', '../docs/toc', '&&', 
'/home/kbrown/src/cygpackages/babl/babl-0.1.74-1.x86_64/src/babl-0.1.74/docs/tools/xml_insert.sh', 
'docs/Reference.html', 'BablBase', 'docs/index.html.tmp']

This does indeed shed some light.  If I remove all the commas but leave the 
single quotes, the command fails with the same error message as before:

cp: target 'docs/index.html.tmp' is not a directory

If I also remove the single quotes, the command succeeds.  I think the problem 
is the quotes around the double ampersands, so they are treated as arguments to 
the cp command instead of being interpreted by the shell executing the command.

Ken


More information about the Cygwin-apps mailing list