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

Since you're using a launcher script, is the actual executable (e.g. python) in 
bundle/Contents/MacOS?

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

Reply via email to