[ 
https://issues.apache.org/jira/browse/XERCESC-2176?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17073671#comment-17073671
 ] 

Roger Leigh commented on XERCESC-2176:
--------------------------------------

The CMake logic we have is buggy, and should only be applied to shared 
libraries, not static.  That aspect should be trivial to change.

The root cause of the problem is that we're trying to match the GNU libtool 
versioning *exactly* for strict compatibility, and while CMake itself can 
handle library VERSION and SONAME properties perfectly on all supported 
platforms, the semantics and library names differ which would make the CMake 
build of Xerces-C not be directly substitutable for the Autotools build.  
libtool is pretty terrible, and it's SOVERSION versioning support is 
nonsensical.  Like many projects using libtool, Xerces-C is using libtool's 
"-release" option to avoid the worst brokenness:

{noformat}
(libxerces_c_la_LDFLAGS = -release @INTERFACE_VERSION_D@)
{noformat}

which is a shorthand for "encode the release version into the library name as a 
suffix", because the real SONAME versioning is so woeful.  The behaviour 
difference is this:

- libtool produces libxerces-c-3.2.so and a libxerces.so symlink.  And also 
libxerces-c.so.3 symlink (both useless and nonsensical since we never actually 
set a SOVERSION)
- CMake (with VERSION property) produces libxerces-c.so.3.2 and a libxerces.so 
symlink

What we're doing right now is making CMake generate "libxerces-c-3.2" as the 
library name.  But that makes CMake skip symlink generation because we've 
avoided using any of the versioning options.  So we're creating the symlink 
manually.  We don't bother with the libxerces-c.so.3 because it doesn't serve 
any useful or meaningful purpose in the absence of proper SOVERSION usage.


> Incorrect symbolic links created for Linux static library and MacOS static 
> and shared libraries
> -----------------------------------------------------------------------------------------------
>
>                 Key: XERCESC-2176
>                 URL: https://issues.apache.org/jira/browse/XERCESC-2176
>             Project: Xerces-C++
>          Issue Type: Bug
>          Components: Build
>    Affects Versions: 3.2.0, 3.2.1, 3.2.2
>         Environment: Linux, MacOS
>            Reporter: Brent Davis
>            Assignee: Roger Leigh
>            Priority: Minor
>             Fix For: 3.2.3
>
>
> We build Xerces-C++ for both the Linux and MacOS platforms, with both static 
> and shared libraries.  There are arguably some dubiously named symbolic links 
> created by src/CMakeLists.txt.  The symlinks are always named 
> 'libxerces-c.so' regardless or library type, or use of the .dylib extension 
> on MacOS.
> ||Platform||Library Type||Symbolic Link||Comment||
> |{color:#de350b}Linux{color}|{color:#de350b}static{color}|{color:#de350b}libxerces-c.so
>  -> libxerces-c-3.2.a{color}|{color:#de350b}symbolic link should either be 
> libxerces-c.a or not created{color}|
> |{color:#00875a} 
> {color}|{color:#00875a}shared{color}|{color:#00875a}libxerces-c.so -> 
> libxerces-c-3.2.so{color}|{color:#00875a}good{color}|
> |{color:#de350b}MacOS{color}|{color:#de350b}static{color}|{color:#de350b}libxerces-c.so
>  -> libxerces-c-3.2.a{color}|{color:#de350b}symbolic link should either be 
> libxerces-c.a or not created{color}|
> |{color:#de350b} 
> {color}|{color:#de350b}shared{color}|{color:#de350b}libxerces-c.so -> 
> libxerces-c-3.2.dylib{color}|{color:#de350b}symbolic link should best be 
> named libxerces-c.dylib{color}|
> Curiously, the Microsoft _vcpkg_ folks just recently ran into the Linux 
> static library portion of this issue and elected to not create the symlink in 
> that case.  See [[xerces-c] produces strange files in 
> installed/x64-linux/lib|[https://github.com/microsoft/vcpkg/issues/7490]].
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscr...@xerces.apache.org
For additional commands, e-mail: c-dev-h...@xerces.apache.org

Reply via email to