hugopl / tijolo

Simple and fast keyboard focused IDE written in Crystal and GTK.
MIT License
143 stars 8 forks source link

Unused shared libraries #18

Closed micwoj92 closed 6 days ago

micwoj92 commented 1 week ago

Describe the bug Hello, this "issue" affects. tijolo and tijolo-git packages. It is overlinking of libraries.

To Reproduce Steps to reproduce the behavior:

  1. Build package.
  2. Run namcap on package.
  3. Get warnings about unused libraries.
    $ namcap tijolo-git-0.8.1+13+g8b14d81-1-x86_64.pkg.tar.zst 
    tijolo-git W: ELF file ('usr/bin/tijolo') lacks FULL RELRO, check LDFLAGS.
    tijolo-git W: ELF file ('usr/bin/tijolo') lacks GNU_PROPERTY_X86_FEATURE_1_SHSTK.
    tijolo-git W: Unused shared library '/usr/lib/libharfbuzz.so.0' by file ('usr/bin/tijolo')
    tijolo-git W: Unused shared library '/usr/lib/libpangocairo-1.0.so.0' by file ('usr/bin/tijolo')
    tijolo-git W: Unused shared library '/usr/lib/libpango-1.0.so.0' by file ('usr/bin/tijolo')
    tijolo-git W: Unused shared library '/usr/lib/libgdk_pixbuf-2.0.so.0' by file ('usr/bin/tijolo')
    tijolo-git W: Unused shared library '/usr/lib/libcairo-gobject.so.2' by file ('usr/bin/tijolo')
    tijolo-git W: Unused shared library '/usr/lib/libcairo.so.2' by file ('usr/bin/tijolo')
    tijolo-git W: Unused shared library '/usr/lib/libvulkan.so.1' by file ('usr/bin/tijolo')
    tijolo-git W: Unused shared library '/usr/lib/libgraphene-1.0.so.0' by file ('usr/bin/tijolo')
    tijolo-git W: Unused shared library '/usr/lib/libm.so.6' by file ('usr/bin/tijolo')

Expected behavior No unused libraries

Screenshots N/A

Environment (please complete the following information):

Additional context This is not really issue of this program.

I tried playing around with linker flags, but wasn't able to find resolution to it. I am not sure, it might be just limitation of crystal that it doesn't do it "proper way". In this case, feel free to close this issue.

hugopl commented 1 week ago

I think it's an issue of the Crystal compiler, but at the same time these libraries are used by other libraries that tijolo links directly, like gtk4, gsk and gdk.

there is a way to test this, remove the pkg-config from lib LibPango declaration in lib/gi-crystal/src/auto/pango/lib_pango.cr, recompile and check using ldd -r if pango shows up there, I think it does. Excuse me to not do this myself is because I'm o phone right now 😁

hugopl commented 1 week ago
$ libtree bin/tijolo 
bin/tijolo 
β”œβ”€β”€ libvte-2.91-gtk4.so.0 [default path]
β”‚   β”œβ”€β”€ libcairo.so.2 [default path]
β”‚   β”‚   β”œβ”€β”€ libpixman-1.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libxcb-shm.so.0 [default path]
β”‚   β”‚   β”‚   └── libxcb.so.1 [default path]
β”‚   β”‚   β”‚       β”œβ”€β”€ libXau.so.6 [default path]
β”‚   β”‚   β”‚       └── libXdmcp.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libxcb-render.so.0 [default path]
β”‚   β”‚   β”‚   └── libxcb.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libxcb.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libXrender.so.1 [default path]
β”‚   β”‚   β”‚   └── libX11.so.6 [default path]
β”‚   β”‚   β”‚       └── libxcb.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libXext.so.6 [default path]
β”‚   β”‚   β”‚   └── libX11.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libX11.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libfreetype.so.6 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libz.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libbrotlidec.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   └── libbrotlicommon.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libharfbuzz.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libgraphite2.so.3 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   └── libpcre2-8.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   └── libfreetype.so.6 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libpng16.so.16 [default path]
β”‚   β”‚   β”‚   β”‚   └── libz.so.1 [default path]
β”‚   β”‚   β”‚   └── libbz2.so.1.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libfontconfig.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libfreetype.so.6 [default path]
β”‚   β”‚   β”‚   └── libexpat.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libpng16.so.16 [default path]
β”‚   β”‚   └── libz.so.1 [default path]
β”‚   β”œβ”€β”€ libpangocairo-1.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libpango-1.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libharfbuzz.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libthai.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   └── libdatrie.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libfribidi.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libmount.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   └── libblkid.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libz.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libgmodule-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   └── libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   └── libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚       └── libffi.so.8 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”‚   └── libglib-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libfontconfig.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libharfbuzz.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libcairo.so.2 [default path]
β”‚   β”‚   └── libpangoft2-1.0.so.0 [default path]
β”‚   β”‚       β”œβ”€β”€ libpango-1.0.so.0 [default path]
β”‚   β”‚       β”œβ”€β”€ libfreetype.so.6 [default path]
β”‚   β”‚       β”œβ”€β”€ libfontconfig.so.1 [default path]
β”‚   β”‚       β”œβ”€β”€ libharfbuzz.so.0 [default path]
β”‚   β”‚       β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   β”‚       β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”‚       └── libglib-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libgtk-4.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libgmodule-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libXinerama.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libX11.so.6 [default path]
β”‚   β”‚   β”‚   └── libXext.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libXrandr.so.2 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libXext.so.6 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libX11.so.6 [default path]
β”‚   β”‚   β”‚   └── libXrender.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libXfixes.so.3 [default path]
β”‚   β”‚   β”‚   └── libX11.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libXdamage.so.1 [default path]
β”‚   β”‚   β”‚   └── libX11.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libXcursor.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libXrender.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libX11.so.6 [default path]
β”‚   β”‚   β”‚   └── libXfixes.so.3 [default path]
β”‚   β”‚   β”œβ”€β”€ libXext.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libwayland-egl.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libwayland-client.so.0 [default path]
β”‚   β”‚   β”‚   └── libffi.so.8 [default path]
β”‚   β”‚   β”œβ”€β”€ libxkbcommon.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libjpeg.so.8 [default path]
β”‚   β”‚   β”œβ”€β”€ libtiff.so.6 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libzstd.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libz.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libjpeg.so.8 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libjbig.so.2.1 [default path]
β”‚   β”‚   β”‚   └── liblzma.so.5 [default path]
β”‚   β”‚   β”œβ”€β”€ libpng16.so.16 [default path]
β”‚   β”‚   β”œβ”€β”€ libvulkan.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libtracker-sparql-3.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libxml2.so.2 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libz.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libicuuc.so.75 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   └── libicudata.so.75 [default path]
β”‚   β”‚   β”‚   β”‚   └── liblzma.so.5 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libjson-glib-1.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   └── libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgmodule-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libsqlite3.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”‚   └── libgio-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libcloudproviders.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”‚   └── libgio-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libpangoft2-1.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libX11.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libXi.so.6 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libX11.so.6 [default path]
β”‚   β”‚   β”‚   └── libXext.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libgraphene-1.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   └── libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libcairo-script-interpreter.so.2 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libcairo.so.2 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libfreetype.so.6 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libfontconfig.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libz.so.1 [default path]
β”‚   β”‚   β”‚   └── liblzo2.so.2 [default path]
β”‚   β”‚   β”œβ”€β”€ libepoxy.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libgdk_pixbuf-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libtiff.so.6 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libjpeg.so.8 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libpng16.so.16 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgmodule-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”‚   └── libglib-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libfontconfig.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libcairo-gobject.so.2 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libcairo.so.2 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”‚   └── libglib-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libfribidi.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libcairo.so.2 [default path]
β”‚   β”‚   β”œβ”€β”€ libharfbuzz.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libpango-1.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libpangocairo-1.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”‚   └── libglib-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libsystemd.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libcap.so.2 [default path]
β”‚   β”‚   β”œβ”€β”€ libzstd.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ liblzma.so.5 [default path]
β”‚   β”‚   β”œβ”€β”€ liblz4.so.1 [default path]
β”‚   β”‚   └── libgcrypt.so.20 [default path]
β”‚   β”‚       └── libgpg-error.so.0 [default path]
β”‚   β”œβ”€β”€ liblz4.so.1 [default path]
β”‚   β”œβ”€β”€ libpcre2-8.so.0 [default path]
β”‚   β”œβ”€β”€ libicuuc.so.75 [default path]
β”‚   β”œβ”€β”€ libgnutls.so.30 [default path]
β”‚   β”‚   β”œβ”€β”€ libp11-kit.so.0 [default path]
β”‚   β”‚   β”‚   └── libffi.so.8 [default path]
β”‚   β”‚   β”œβ”€β”€ libgmp.so.10 [default path]
β”‚   β”‚   β”œβ”€β”€ libhogweed.so.6 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libnettle.so.8 [default path]
β”‚   β”‚   β”‚   └── libgmp.so.10 [default path]
β”‚   β”‚   β”œβ”€β”€ libnettle.so.8 [default path]
β”‚   β”‚   β”œβ”€β”€ libtasn1.so.6 [default path]
β”‚   β”‚   β”œβ”€β”€ libunistring.so.5 [default path]
β”‚   β”‚   └── libidn2.so.0 [default path]
β”‚   β”‚       └── libunistring.so.5 [default path]
β”‚   β”œβ”€β”€ libfribidi.so.0 [default path]
β”‚   β”œβ”€β”€ libcairo-gobject.so.2 [default path]
β”‚   β”œβ”€β”€ libpango-1.0.so.0 [default path]
β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   └── libgio-2.0.so.0 [default path]
β”œβ”€β”€ libevent_pthreads-2.1.so.7 [default path]
β”‚   └── libevent_core-2.1.so.7 [default path]
β”œβ”€β”€ libgc.so.1 [default path]
β”œβ”€β”€ libevent-2.1.so.7 [default path]
β”œβ”€β”€ libpcre2-8.so.0 [default path]
β”œβ”€β”€ libadwaita-1.so.0 [default path]
β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libappstream.so.5 [default path]
β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libstemmer.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libzstd.so.1 [default path]
β”‚   β”‚   β”œβ”€β”€ libsystemd.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libyaml-0.so.2 [default path]
β”‚   β”‚   β”œβ”€β”€ libxml2.so.2 [default path]
β”‚   β”‚   β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libxmlb.so.2 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libstemmer.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libzstd.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ liblzma.so.5 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   β”‚   β”‚   └── libgobject-2.0.so.0 [default path]
β”‚   β”‚   β”œβ”€β”€ libcurl.so.4 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libnghttp3.so.9 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libz.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libbrotlidec.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libzstd.so.1 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libgssapi_krb5.so.2 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libkrb5.so.3 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libk5crypto.so.3 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libkrb5support.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libkeyutils.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   └── libresolv.so.2 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libresolv.so.2 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   └── libkeyutils.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libresolv.so.2 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libkeyutils.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libkrb5support.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”‚   └── libcom_err.so.2 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libresolv.so.2 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libkeyutils.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libkrb5support.so.0 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libcom_err.so.2 [default path]
β”‚   β”‚   β”‚   β”‚   └── libk5crypto.so.3 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libcrypto.so.3 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libssl.so.3 [default path]
β”‚   β”‚   β”‚   β”‚   └── libcrypto.so.3 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libpsl.so.5 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libunistring.so.5 [default path]
β”‚   β”‚   β”‚   β”‚   └── libidn2.so.0 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libssh2.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libz.so.1 [default path]
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ libcrypto.so.3 [default path]
β”‚   β”‚   β”‚   β”‚   └── libssl.so.3 [default path]
β”‚   β”‚   β”‚   β”œβ”€β”€ libidn2.so.0 [default path]
β”‚   β”‚   β”‚   └── libnghttp2.so.14 [default path]
β”‚   β”‚   └── libgobject-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libgraphene-1.0.so.0 [default path]
β”‚   β”œβ”€β”€ libpango-1.0.so.0 [default path]
β”‚   β”œβ”€β”€ libgtk-4.so.1 [default path]
β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   └── libfribidi.so.0 [default path]
β”œβ”€β”€ libgtksourceview-5.so.0 [default path]
β”‚   β”œβ”€β”€ libpcre2-8.so.0 [default path]
β”‚   β”œβ”€β”€ libfontconfig.so.1 [default path]
β”‚   β”œβ”€β”€ libpangoft2-1.0.so.0 [default path]
β”‚   β”œβ”€β”€ libxml2.so.2 [default path]
β”‚   β”œβ”€β”€ libcairo.so.2 [default path]
β”‚   β”œβ”€β”€ libgdk_pixbuf-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libpango-1.0.so.0 [default path]
β”‚   β”œβ”€β”€ libpangocairo-1.0.so.0 [default path]
β”‚   β”œβ”€β”€ libgtk-4.so.1 [default path]
β”‚   β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”‚   β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”‚   └── libfribidi.so.0 [default path]
β”œβ”€β”€ libgio-2.0.so.0 [default path]
β”œβ”€β”€ libgobject-2.0.so.0 [default path]
β”œβ”€β”€ libgraphene-1.0.so.0 [default path]
β”œβ”€β”€ libvulkan.so.1 [default path]
β”œβ”€β”€ libglib-2.0.so.0 [default path]
β”œβ”€β”€ libcairo.so.2 [default path]
β”œβ”€β”€ libcairo-gobject.so.2 [default path]
β”œβ”€β”€ libgdk_pixbuf-2.0.so.0 [default path]
β”œβ”€β”€ libpango-1.0.so.0 [default path]
β”œβ”€β”€ libpangocairo-1.0.so.0 [default path]
β”œβ”€β”€ libgtk-4.so.1 [default path]
└── libharfbuzz.so.0 [default path]

So, the libraries are needed anyway, I don't know what would be the side effect of this overlinking, do you?

micwoj92 commented 1 week ago

Here is mail from Debian mailing list discussing this issue in depth https://lists.debian.org/debian-devel-announce/2005/11/msg00016.html

there is a way to test this, remove the pkg-config from lib LibPango declaration in lib/gi-crystal/src/auto/pango/lib_pango.cr, recompile and check using ldd -r if pango shows up there, I think it does. Me excuse to not do this myself is because I'm o phone right now 😁

I tried this and for me it shows same as before (I am using -u, so this only shows unused dependencies, this is same check that namcap is using):

$ ldd -r -u bin/tijolo 
Unused direct dependencies:
    /usr/lib/libharfbuzz.so.0
    /usr/lib/libpangocairo-1.0.so.0
    /usr/lib/libpango-1.0.so.0
    /usr/lib/libgdk_pixbuf-2.0.so.0
    /usr/lib/libcairo-gobject.so.2
    /usr/lib/libcairo.so.2
    /usr/lib/libvulkan.so.1
    /usr/lib/libgraphene-1.0.so.0
    /usr/lib/libm.so.6
hugopl commented 1 week ago

~I think it's valid to file a bug report on https://github.com/crystal-lang/crystal with a minimal example, since there's nothing that can be done to fix this here.~

hugopl commented 1 week ago

The issue isn't in Crystal compiler, but in GTK4 pkgconfig files.

I editted the GTK pkg-config file here changing:

Requires: pango >=  1.50.0, pangocairo >=  1.50.0, gdk-pixbuf-2.0 >=  2.30.0, cairo >=  1.14.0, cairo-gobject >=  1.14.0,  vulkan, gio-2.0 >=  2.76.0
#Requires: pango >=  1.50.0, pangocairo >=  1.50.0, gdk-pixbuf-2.0 >=  2.30.0, cairo >=  1.14.0, cairo-gobject >=  1.14.0,  vulkan, graphene-gobject-1.0 >=  1.10.0, gio-2.0 >=  2.76.0
L

Result, application links correctly, but now graphene isn't show as an unused direct linked library.

micwoj92 commented 1 week ago

I don't think that editing system .pc files is right way to do this. I guess then this should be reported to upstream GNOME.

hugopl commented 6 days ago

Yes sure, the edit was just a way for me to test where the issue was located, nothing more.

micwoj92 commented 6 days ago
diff --git a/Makefile b/Makefile
index dd7b6e4..a97abce 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ PREFIX ?= /usr
 CR_FLAGS ?= -Dpreview_mt -Dstrict_multi_assign -Duse_pcre2 -Dpreview_overload_order

 all: .WAIT configure
-   shards build --release -Dpreview_mt $(CR_FLAGS) -s
+   shards build --release -Dpreview_mt $(CR_FLAGS) -s --link-flags='-Wl,--as-needed'

 configure:
    shards install
hugopl commented 6 days ago

Nice, could you create a PR with this?

hugopl commented 4 days ago

For future reference: https://wiki.gentoo.org/wiki/Project:Quality_Assurance/As-needed#:~:text=Introduction-,What%20is%20%2D%2Das%2Dneeded%3F,final%20executable%20or%20another%20library.