While looking at one update recently i've seen one upstream disabling
the soname on OpenBSD because of specialtopics.html; they just
wanted to be nice I guess, but this reminded me of this section of
the faqs.  Is it still the case to advise people to actively drop
the soname?

A quick and totally unscientific test shows the majority of the
libraries I have in /usr/local/lib have soname defined.  Plus, we
have machinery for most build tool to do the right thing(tm).

I did something around the lines of to bulk check the soname:

        $ cd /usr/local/lib
        $ for i in *.so*; do if ! objdump -x $i | grep -iq soname; \
                then echo $i; fi; done | wc -l
             133
        $ ls *.so* | wc -l
             879

(this also picks up stuff that isn't a shared library; but it's an
indication of the trend I guess.)

gkoehler@ also noted that some tools link stuff with "cc -o mybin
subdir/libfun.so.0.0" (instead of "-Lsubdir -lfun") and if
subdir/libfun.so.0.0 hasn't a valid soname then the linker will put
the DT_NEEDED as "subdir/libfun.so.0.0" and when mybin uses DT_RPATH
to look in subdir/ it'll fail bacuse subdir/subdir/libfoo.so.0.0
doesn't exists.

My initial idea was to propose to drop the section but I think it
is still useful to warn against a wrong soname.

Thoughts?


Index: specialtopics.html
===================================================================
RCS file: /home/cvs/www/faq/ports/specialtopics.html,v
retrieving revision 1.89
diff -u -p -r1.89 specialtopics.html
--- specialtopics.html  14 Oct 2022 18:07:42 -0000      1.89
+++ specialtopics.html  4 Nov 2022 10:00:00 -0000
@@ -149,16 +149,11 @@ those libraries set to version 0.0, clea
 and when you regenerate the PLIST you should see that it starts to
 use the version numbers.
 
-<h3>Avoid DT_SONAME hardcoding</h3>
+<h3>Check DT_SONAME</h3>
 
 Some ports use the <code>-soname</code> flag of
 <a href="https://man.openbsd.org/ld";>ld(1)</a> to override the library
 specification in the DT_SONAME field.
-Setting DT_SONAME is not a bug itself but is usually not desirable on
-OpenBSD where <a href="https://man.openbsd.org/ld.so";>ld.so(1)</a> is smart and
-the ports tree takes care of library versioning.
-Moreover, a wrong soname can result in unusable binaries that depend on this
-library; either always or after some updates to the port containing the 
library.
 To check if the DT_SONAME field is set, run the following command:
 
 <pre class="cmdbox">
@@ -166,12 +161,13 @@ $ <b>objdump -x /path/to/libfoo.so.0.0 |
   SONAME      libfoo.so.0.0
 </pre>
 
-As a general rule, <em>setting soname explicitly should be patched out</em>.
-The only exception is a situation when the right soname is recorded
-<em>and</em> it's hard to patch soname-related code out <em>and</em>
-upstream won't accept such a patch.
-In that case the soname should fully match the file name (see the example
-above).
+If it doesn't match the file name and version fully it can result
+in unusable binaries that depend on this library; either always or
+after some updates to the port containing the library.
+
+<p>
+The port should ensure the correct soname is used, or patch it out
+should fixing it become too difficult.
 
 <h3>Try putting all user visible libraries into /usr/local/lib</h3>
 

Reply via email to