[Scons-dev] [PATCH] scons soname on OpenBSD
Gary Oberbrunner
garyo at oberbrunner.com
Fri Sep 6 22:04:07 EDT 2013
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 <stsp at 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 at scons.org
> http://two.pairlist.net/mailman/listinfo/scons-dev
>
--
Gary
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://two.pairlist.net/pipermail/scons-dev/attachments/20130906/d1ac9154/attachment.htm>
More information about the Scons-dev
mailing list