> On Sep 30, 2019, at 7:53 AM, Timo <timomli...@gmail.com> wrote:
>
> On 29/09/19, at 23:40, John Ralls wrote:
>>
>>> On Sep 29, 2019, at 2:32 PM, John Ralls <jra...@ceridwen.us> wrote:
>>>
>>>
>>>
>>>> On Sep 29, 2019, at 12:25 PM, Timo <timomli...@gmail.com> wrote:
>>>>
>>>> On 29/09/19, at 00:26, John Ralls wrote:
>>>>>> On Sep 28, 2019, at 10:00 AM, Timo <timomli...@gmail.com> wrote:
>>>>>>
>>>>>> On 28/09/19, at 18:45, John Ralls wrote:
>>>>>>>> On Sep 28, 2019, at 9:30 AM, Timo <timomli...@gmail.com> wrote:
>>>>>>>>
>>>>>>>> On 28/09/19, at 16:17, John Ralls wrote:
>>>>>>>>>> On Sep 28, 2019, at 3:20 AM, Timo via gtk-osx-users-list
>>>>>>>>>> <gtk-osx-users-list@gnome.org> wrote:
>>>>>>>>>>
>>>>>>>>>> Hello, I followed the build instructions on the wiki and
>>>>>>>>>> everything's built correctly. However my application fails to run
>>>>>>>>>> with a warning about libpango-1.0.0.dylib not being found and then a
>>>>>>>>>> traceback. I can narrow it down to just doing a `from gi.repository
>>>>>>>>>> import Gtk`.
>>>>>>>>>>
>>>>>>>>>> bash-3.2$ python3
>>>>>>>>>> Python 3.6.8 (default, Sep 24 2019, 17:23:22)
>>>>>>>>>> [GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)] on
>>>>>>>>>> darwin
>>>>>>>>>> Type "help", "copyright", "credits" or "license" for more
>>>>>>>>>> information.
>>>>>>>>>>>>> from gi.repository import Gtk
>>>>>>>>>> ** (process:45468): WARNING **: 20:30:34.767: Failed to load
>>>>>>>>>> shared library 'libpango-1.0.0.dylib' referenced by the typelib:
>>>>>>>>>> dlopen(libpango-1.0.0.dylib, 9): image not found
>>>>>>>>>> Traceback (most recent call last):
>>>>>>>>>> File "<stdin>", line 1, in <module>
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 971, in
>>>>>>>>>> _find_and_load
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 955, in
>>>>>>>>>> _find_and_load_unlocked
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 656, in
>>>>>>>>>> _load_unlocked
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 626, in
>>>>>>>>>> _load_backward_compatible
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/site-packages/gi/importer.py",
>>>>>>>>>> line 145, in load_module
>>>>>>>>>> importlib.import_module('gi.repository.' + dep.split("-")[0])
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/importlib/__init__.py", line
>>>>>>>>>> 126, in import_module
>>>>>>>>>> return _bootstrap._gcd_import(name[level:], package, level)
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 994, in _gcd_import
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 971, in
>>>>>>>>>> _find_and_load
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 955, in
>>>>>>>>>> _find_and_load_unlocked
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 656, in
>>>>>>>>>> _load_unlocked
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 626, in
>>>>>>>>>> _load_backward_compatible
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/site-packages/gi/importer.py",
>>>>>>>>>> line 145, in load_module
>>>>>>>>>> importlib.import_module('gi.repository.' + dep.split("-")[0])
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/importlib/__init__.py", line
>>>>>>>>>> 126, in import_module
>>>>>>>>>> return _bootstrap._gcd_import(name[level:], package, level)
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 994, in _gcd_import
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 971, in
>>>>>>>>>> _find_and_load
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 955, in
>>>>>>>>>> _find_and_load_unlocked
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 656, in
>>>>>>>>>> _load_unlocked
>>>>>>>>>> File "<frozen importlib._bootstrap>", line 626, in
>>>>>>>>>> _load_backward_compatible
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/site-packages/gi/importer.py",
>>>>>>>>>> line 146, in load_module
>>>>>>>>>> dynamic_module = load_overrides(introspection_module)
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/site-packages/gi/overrides/__init__.py",
>>>>>>>>>> line 118, in load_overrides
>>>>>>>>>> override_mod = importlib.import_module(override_package_name)
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/importlib/__init__.py", line
>>>>>>>>>> 126, in import_module
>>>>>>>>>> return _bootstrap._gcd_import(name[level:], package, level)
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/site-packages/gi/overrides/Pango.py",
>>>>>>>>>> line 41, in <module>
>>>>>>>>>> FontDescription = override(FontDescription)
>>>>>>>>>> File
>>>>>>>>>> "/Users/gtk3/gtk/inst/lib/python3.6/site-packages/gi/overrides/__init__.py",
>>>>>>>>>> line 195, in override
>>>>>>>>>> assert g_type != TYPE_NONE
>>>>>>>>>> AssertionError
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Explicitly setting DYLD_FALLBACK_LIBRARY_PATH seems to fix the
>>>>>>>>>> problem:
>>>>>>>>>>
>>>>>>>>>> bash-3.2$ export
>>>>>>>>>> DYLD_FALLBACK_LIBRARY_PATH=/Users/gtk3/gtk/inst/lib
>>>>>>>>>> bash-3.2$ python3
>>>>>>>>>> Python 3.6.8 (default, Sep 24 2019, 17:23:22)
>>>>>>>>>> [GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)] on
>>>>>>>>>> darwin
>>>>>>>>>> Type "help", "copyright", "credits" or "license" for more
>>>>>>>>>> information.
>>>>>>>>>>>>> from gi.repository import Gtk
>>>>>>>>>> (.:45493): Gtk-WARNING **: 20:33:47.938: Locale not supported by
>>>>>>>>>> C library.
>>>>>>>>>> Using the fallback 'C' locale.
>>>>>>>>>> __main__:1: PyGIWarning: Gtk was imported without specifying a
>>>>>>>>>> version first. Use gi.require_version('Gtk', '3.0') before import to
>>>>>>>>>> ensure that the right version gets loaded.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> However the same problem happens when I bundle the application.
>>>>>>>>>> Again, only doing the GTK import in the myapp_launcher.py file gives
>>>>>>>>>> the same error (launcher file taken from gtk-mac-bundler example and
>>>>>>>>>> Gramps for the updated version).
>>>>>>>>>>
>>>>>>>>>> It already has `environ['DYLD_LIBRARY_PATH'] = bundle_lib`, but even
>>>>>>>>>> adding `environ['DYLD_FALLBACK_LIBRARY_PATH'] = bundle_lib` makes no
>>>>>>>>>> differences. Printing `bundle_lib` points to the lib dir inside the
>>>>>>>>>> bundle and printing `os.path.exists(bundle_lib,
>>>>>>>>>> 'libpango-1.0.0.dylib')` shows the file is actually there. So it's
>>>>>>>>>> not picking up the Python set env variable.
>>>>>>>>>>
>>>>>>>>>> It's only after I do `export
>>>>>>>>>> DYLD_FALLBACK_LIBRARY_PATH=/path/to/myapp_bundle.app/Contents/Resources/lib`
>>>>>>>>>> that the bundled app will run, but is of course only feasible to do
>>>>>>>>>> on my dev machine.
>>>>>>>>>>
>>>>>>>>>> Is it my environment that's tainted somehow? Did the build not
>>>>>>>>>> correctly pick up paths?
>>>>>>>>> It mostly has to do with meson and rpaths. The latest commit to
>>>>>>>>> gtk-mac-bundler,
>>>>>>>>> https://gitlab.gnome.org/GNOME/gtk-mac-bundler/commit/93edee7e2d0ec8230aaf5acb21452202b10cd678,
>>>>>>>>> was supposed to fix it, but meson's behavior has been something of a
>>>>>>>>> moving target.
>>>>>>>> I used the git clone method for installing gtk-mac-bundler, not the
>>>>>>>> 0.7.4 package in case that matters.
>>>>>>>>
>>>>>>>>> What are the installed names (use otool -L and look at the first
>>>>>>>>> line) of libpango-1.0.0.dylib in your installed prefix and in your
>>>>>>>>> bundle?
>>>>>>>> gtk/inst/lib/libpango-1.0.0.dylib:
>>>>>>>> /Users/gtk3/gtk/inst/lib/libpango-1.0.0.dylib (compatibility
>>>>>>>> version 4401.0.0, current version 4401.6.0)
>>>>>>>>
>>>>>>>> myapp.app/Contents/Resources/lib/libpango-1.0.0.dylib:
>>>>>>>> @executable_path/../Resources//lib/libpango-1.0.0.dylib
>>>>>>>> (compatibility version 4401.0.0, current version 4401.6.0)
>>>>>>>>
>>>>>>>> Looks like there's a double slash between Resources and lib. There are
>>>>>>>> some more lines starting with @executable_path for other libs in this
>>>>>>>> output, but slashes look correct:
>>>>>>>>
>>>>>>>> @executable_path/../Resources/lib/libglib-2.0.0.dylib
>>>>>>>> (compatibility version 6001.0.0, current version 6001.6.0)
>>>>>>>> @executable_path/../Resources/lib/libgobject-2.0.0.dylib
>>>>>>>> (compatibility version 6001.0.0, current version 6001.6.0)
>>>>>>>> @executable_path/../Resources/lib/libfribidi.0.dylib (compatibility
>>>>>>>> version 0.0.0, current version 0.0.0)
>>>>>>>> @executable_path/../Resources/lib/libharfbuzz.0.dylib
>>>>>>>> (compatibility version 20504.0.0, current version 20504.0.0)
>>>>>>>>
>>>>>>>>
>>>>>>>>> What version of meson did pip install for you?
>>>>>>>> bash-3.2$ python -m pip show meson
>>>>>>>> Name: meson
>>>>>>>> Version: 0.51.2
>>>>>>>> Summary: A high performance build system
>>>>>>>> Home-page: http://mesonbuild.com
>>>>>>>> Author: Jussi Pakkanen
>>>>>>>> Author-email: jpakk...@gmail.com
>>>>>>>> License: Apache License, Version 2.0
>>>>>>>> Location:
>>>>>>>> /Users/gtk3/.new_local/share/venv/etc-QjyTq6eG/lib/python3.6/site-packages
>>>>>>>> Requires:
>>>>>>>> Required-by:
>>>>>>> A double slash doesn't matter.
>>>>>>> Check the typelib with `strings
>>>>>>> path/to/bundle/Contents/Resources/lib/girepository-1.0/Pango-1.0.typelib
>>>>>>> | grep libpango`. It should also say
>>>>>>> @executable_path/../lib/libpango-1.0.0.dylib.
>>>>>> Hmm, it doesn't:
>>>>>>
>>>>>> $ strings
>>>>>> myapp.app/Contents/Resources/lib/girepository-1.0/Pango-1.0.typelib |
>>>>>> grep libpango
>>>>>> libpango-1.0.0.dylib
>>>>>>
>>>>>>> Since you're using a launcher script, is the actual executable (e.g.
>>>>>>> python) in bundle/Contents/MacOS?
>>>>>> There are two executables: myapp and python3.6
>>>>>>
>>>>>> To be clear, I'm not using the launcher shell script, but the compiled
>>>>>> python-launcher.c and gtk_launcher.py files.
>>>>> So the bundler didn't rerun gir-scanner and gir-compiler.
>>>>>
>>>>> Oh, crud. I bet you cloned gtk-mac-bundler from GitHub instead of
>>>>> gitlab.gnome.org, I see that I have been pushing only to the latter one.
>>>>> I just got GitHub up to date, so if that's where you got it pull and
>>>>> bundle again.
>>>>>
>>>> My bash history showed I cloned from GitLab, not GitHub. I did a `git
>>>> pull` and everything was already up to date. Just to be sure I removed
>>>> gtk-mac-bundler and did a fresh clone/make install, but the error remains.
>>>>
>>>> Can the error already happen earlier, during build perhaps? Since I
>>>> already have to set the DYLD_FALLBACK_LIBRARY_PATH for just running the
>>>> app without even bundling.
>>> At the base it's because meson wants to use @rpath, see
>>> https://github.com/mesonbuild/meson/issues/3574. This led to
>>> https://gitlab.gnome.org/GNOME/gobject-introspection/issues/222.
>>>
>>> Running in a jhbuild shell should get DYLD_LIBRARY_PATH set for you and
>>> that should get dlopen() to load the libraries/modules with basename-only
>>> paths in foo.typelib.
>>> For your bundle,
>>> https://gitlab.gnome.org/GNOME/gtk-mac-bundler/commit/93edee7e2d0ec8230aaf5acb21452202b10cd678
>>> is supposed to fix the paths in the Gir files to be
>>> @excutable_path/../Resources/lib/foo.dylib and then recompile the type
>>> libs. If you're sure you've got that commit and it's not working then we
>>> need to figure out why not.
>> Oh, one more puzzle-piece: You need to load the Gir files like this:
>>
>> <gir>
>> ${prefix}/share/gir-1.0/*.gir
>> </gir>
>>
>> in your bundle file and not load the typelibs explicitly. I neglected to
>> document that in the wiki, I'm doing so now.
>>
> We're a step closer. I added some print statements in that gtk-mac-bundler
> block of code to see if it really was being called and what it was doing.
> This showed that it was changing what's expected and fixed the paths. For
> example for Pango:
>
> transform file: /Users/gtk3/gtk/inst/share/gir-1.0/Pango-1.0.gir
> match line: shared-library="libpango-1.0.0.dylib"
> new line:
> shared-library="@executable_path/../Resources/lib/libpango-1.0.0.dylib"
> typelib:
> /path/to/.myapp.app/Contents/Resources/lib/girepository-1.0/Pango-1.0.typelib
>
> Checked the bundle file and I indeed have that <gir> block, but I also had
> the following line:
>
> <data>${prefix}/lib/girepository-1.0</data>
>
> You know better, but my guess is that it replaced the fixed files with the
> originals again. Removing this line fixed the initial error. I'm not sure
> where I got this from. I might have taken different parts from different
> projects.
>
> However another one pops up:
>
> objc[46154]: Class GNotificationCenterDelegate is implemented in both
> /Users/gtk3/gtk/inst/lib/libgio-2.0.0.dylib (0x10de41578) and
> /path/to/myapp.app/Contents/Resources/lib/libgio-2.0.0.dylib (0x10f23f578).
> One of the two will be used. Which one is undefined.
> Segmentation fault: 11
>
> This is in the normal shell, not jhbuild shell. I'm not sure where it gets
> that local lib path from, there are no environment variables set to point
> there.
The warning is harmless, it even appears in Apple's own code. The segfault, not
so much. It should have created a crash report in Console with a backtrace.
Regards,
John Ralls
_______________________________________________
gtk-osx-users-list mailing list
gtk-osx-users-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-osx-users-list