I don't have any problem with this conceptually. The sys.platform.startswith() would be better as a function perhaps (is_openbsd() or maybe just is_bsd()). Is this also true for freebsd for instance? And a more flexible way of handling the multi-part version numbers would be welcome, perhaps as a separate patch.
If you can submit this as a mercurial patch, ideally with a testcase (SCons uses TDD), we should be able to work it in. (As I look at it, it's clear that Tool/__init__.py is not the right place for this logic anyway. But that's a separate issue. Better to capture the correct behavior now and refactor it later when redoing Tools.) On Thu, Sep 5, 2013 at 11:40 AM, Stefan Sperling <s...@openbsd.org> wrote: > Hi, > > as discussed on IRC today, and on the OpenBSD ports list at > http://marc.info/?l=openbsd-ports&m=137831857808220&w=2, > soname support in scons 2.3.0 is interfering a little bit with > OpenBSD's way of handling shared libraries. > > The patch below (against the rel_2.3.0 branch) does the minimum > necessary to prevent that. Is it acceptable? > > I was thinking that instead of making behaviour conditional on the host > platform, a generic switch could be used to toggle generation of a soname, > and the same for creation of symlinks. Though perhaps that would be > overkill or conflict with scons goals, I don't know. > Anyway, the below works for me. > > One additional issue is that OpenBSD uses an x.y shared library version > numbering scheme, which scons does not support. This can be worked around > by renaming shared libraries after the build. > I'm not sure how much needs to be done to fix this. There is a comment in > the VersionShLibLinkNames() function that some adjustments would need to > be made. Are there plans to support such versioning schemes in a future > release of scons? > > Thanks. > > Suggested log message: > > [[[ > OpenBSD-specific fixes for shared library handling. > > Don't put a SONAME into shared lbraries, and don't create symlinks > between .so files. OpenBSD uses a different approach to shared library > handling, and in particular setting a SONAME that doesn't match the .so > file name can confuse automated checks performed by its ports framework. > See http://marc.info/?l=openbsd-ports&m=137831857808220&w=2 > ]]] > > diff -r 05db74dca43c src/engine/SCons/Tool/__init__.py > --- a/src/engine/SCons/Tool/__init__.py Sun Mar 03 19:34:10 2013 -0500 > +++ b/src/engine/SCons/Tool/__init__.py Thu Sep 05 16:26:07 2013 +0200 > @@ -257,6 +257,10 @@ > print "VersionShLibLinkNames: linkname = ",linkname > linknames.append(linkname) > elif platform == 'posix': > + if sys.platform.startswith('openbsd'): > + # OpenBSD uses x.y shared library versioning numbering > convention > + # and doesn't use symlinks to backwards-compatible libraries > + return [] > # For libfoo.so.x.y.z, linknames libfoo.so libfoo.so.x.y > libfoo.so.x > suffix_re = re.escape(shlib_suffix + '.' + version) > # First linkname has no version number > @@ -302,13 +306,17 @@ > if version: > # set the shared library link flags > if platform == 'posix': > - suffix_re = re.escape(shlib_suffix + '.' + version) > - (major, age, revision) = version.split(".") > - # soname will have only the major version number in it > - soname = re.sub(suffix_re, shlib_suffix, libname) + '.' + > major > - shlink_flags += [ '-Wl,-Bsymbolic', '-Wl,-soname=%s' % soname > ] > - if Verbose: > - print " soname ",soname,", shlink_flags ",shlink_flags > + shlink_flags += [ '-Wl,-Bsymbolic' ] > + if sys.platform.startswith('openbsd'): > + pass # OpenBSD doesn't usually use SONAME for libraries > + else: > + suffix_re = re.escape(shlib_suffix + '.' + version) > + (major, age, revision) = version.split(".") > + # soname will have only the major version number in it > + soname = re.sub(suffix_re, shlib_suffix, libname) + '.' + > major > + shlink_flags += [ '-Wl,-soname=%s' % soname ] > + if Verbose: > + print " soname ",soname,", shlink_flags ",shlink_flags > elif platform == 'cygwin': > shlink_flags += [ '-Wl,-Bsymbolic', > '-Wl,--out-implib,${TARGET.base}.a' ] > _______________________________________________ > Scons-dev mailing list > Scons-dev@scons.org > http://two.pairlist.net/mailman/listinfo/scons-dev > -- Gary
_______________________________________________ Scons-dev mailing list Scons-dev@scons.org http://two.pairlist.net/mailman/listinfo/scons-dev