Help needed with gobject-introspection

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

Help needed with gobject-introspection

cygwin-apps mailing list
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.

Can anyone help?

Thanks.

Ken

babl.cygport (1K) Download Attachment
0.1.74-cygwin.patch (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

cygwin-apps mailing list
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.

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.  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.

Ken
Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

Jon TURNEY
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.
Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

cygwin-apps mailing list


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.

Ken
Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

Jon TURNEY
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,


Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

cygwin-apps mailing list
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
Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

Jon TURNEY
On 21/05/2020 18:07, Ken Brown via Cygwin-apps wrote:

> 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 

Yeah, this looks extremely plausible, there seem to be no GObject
derived types in babl's interface.

It might be possible to work around this by patching in a dummy GObject
derived type which does nothing.

I'll have to see if I can find my notes about how I debugged this before.

>>>>> 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.

So, it's correct that it runs this command indirectly via the pickle,
because it needs to interpose itself to do some PATH manipulation to add
the DLL, because this target has the 'babl-html-dump' tool, which is
linked with the DLL, in it's input (indirectly).

>>> 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.

So, yeah, this is a meson bug, which I will work on (if this command
ends up in the build.ninja, it's executed by ninja with 'sh -c', but if
it ends up in a pickle, it's executed by meson with execve())

(Ofc, everything behaves differently if we are building on Windows, and
CreateProcess() is used in both places, so allowing shell control
operators here is not very portable)
Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

cygwin-apps mailing list
On 5/24/2020 11:56 AM, Jon Turney wrote:

> On 21/05/2020 18:07, Ken Brown via Cygwin-apps wrote:
>> 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 
>
>
> Yeah, this looks extremely plausible, there seem to be no GObject derived types
> in babl's interface.
>
> It might be possible to work around this by patching in a dummy GObject derived
> type which does nothing.
>
> I'll have to see if I can find my notes about how I debugged this before.
>
>>>>>> 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.
>
> So, it's correct that it runs this command indirectly via the pickle, because it
> needs to interpose itself to do some PATH manipulation to add the DLL, because
> this target has the 'babl-html-dump' tool, which is linked with the DLL, in it's
> input (indirectly).
>
>>>> 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.
>
> So, yeah, this is a meson bug, which I will work on (if this command ends up in
> the build.ninja, it's executed by ninja with 'sh -c', but if it ends up in a
> pickle, it's executed by meson with execve())

Yes, that does seem like a meson bug.  But is it also a babl bug to some extent?
  When babl puts '&&' in a command argument, it's assuming that the command will
be executed by 'sh -c'.

I have very little experience with meson.  Have you ever seen this issue in
other projects that use meson?

> (Ofc, everything behaves differently if we are building on Windows, and
> CreateProcess() is used in both places, so allowing shell control operators here
> is not very portable)
Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

cygwin-apps mailing list
On 5/24/2020 12:45 PM, Ken Brown via Cygwin-apps wrote:

> On 5/24/2020 11:56 AM, Jon Turney wrote:
>> On 21/05/2020 18:07, Ken Brown via Cygwin-apps wrote:
>>> 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 
>>
>>
>>
>> Yeah, this looks extremely plausible, there seem to be no GObject derived
>> types in babl's interface.
>>
>> It might be possible to work around this by patching in a dummy GObject
>> derived type which does nothing.
>>
>> I'll have to see if I can find my notes about how I debugged this before.
>>
>>>>>>> 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.
>>
>> So, it's correct that it runs this command indirectly via the pickle, because
>> it needs to interpose itself to do some PATH manipulation to add the DLL,
>> because this target has the 'babl-html-dump' tool, which is linked with the
>> DLL, in it's input (indirectly).
>>
>>>>> 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.
>>
>> So, yeah, this is a meson bug, which I will work on (if this command ends up
>> in the build.ninja, it's executed by ninja with 'sh -c', but if it ends up in
>> a pickle, it's executed by meson with execve())
>
> Yes, that does seem like a meson bug.  But is it also a babl bug to some extent?
>   When babl puts '&&' in a command argument, it's assuming that the command will
> be executed by 'sh -c'.
>
> I have very little experience with meson.  Have you ever seen this issue in
> other projects that use meson?

I just noticed this, at https://mesonbuild.com/Custom-build-targets.html :

   Meson only permits you to specify one command to run. This is
   by design as writing shell pipelines into build definition
   files leads to code that is very hard to maintain. If your
   compilation requires multiple steps you need to write a wrapper
   script that does all the necessary work.

We're not talking about a shell pipeline here, but it's similar.  So I'm
thinking this really is a babl bug.

Ken
Reply | Threaded
Open this post in threaded view
|

Re: Help needed with gobject-introspection

cygwin-apps mailing list
On 5/24/2020 1:00 PM, Ken Brown via Cygwin-apps wrote:

> On 5/24/2020 12:45 PM, Ken Brown via Cygwin-apps wrote:
>> On 5/24/2020 11:56 AM, Jon Turney wrote:
>>> On 21/05/2020 18:07, Ken Brown via Cygwin-apps wrote:
>>>> 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 
>>>
>>>
>>>
>>>
>>> Yeah, this looks extremely plausible, there seem to be no GObject derived
>>> types in babl's interface.
>>>
>>> It might be possible to work around this by patching in a dummy GObject
>>> derived type which does nothing.
>>>
>>> I'll have to see if I can find my notes about how I debugged this before.
>>>
>>>>>>>> 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.
>>>
>>> So, it's correct that it runs this command indirectly via the pickle, because
>>> it needs to interpose itself to do some PATH manipulation to add the DLL,
>>> because this target has the 'babl-html-dump' tool, which is linked with the
>>> DLL, in it's input (indirectly).
>>>
>>>>>> 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.
>>>
>>> So, yeah, this is a meson bug, which I will work on (if this command ends up
>>> in the build.ninja, it's executed by ninja with 'sh -c', but if it ends up in
>>> a pickle, it's executed by meson with execve())
>>
>> Yes, that does seem like a meson bug.  But is it also a babl bug to some
>> extent?   When babl puts '&&' in a command argument, it's assuming that the
>> command will be executed by 'sh -c'.
>>
>> I have very little experience with meson.  Have you ever seen this issue in
>> other projects that use meson?
>
> I just noticed this, at https://mesonbuild.com/Custom-build-targets.html :
>
>    Meson only permits you to specify one command to run. This is
>    by design as writing shell pipelines into build definition
>    files leads to code that is very hard to maintain. If your
>    compilation requires multiple steps you need to write a wrapper
>    script that does all the necessary work.
>
> We're not talking about a shell pipeline here, but it's similar.  So I'm
> thinking this really is a babl bug.
Regardless of whose bug it is, I've got a simple but ugly workaround (attached),
now that you've explained to me what's going on.

Ken

0.1.74-docs.patch (1K) Download Attachment