[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug #42778] Frameworks with different SONAME cannot coexist
From: |
Yavor Doganov |
Subject: |
[bug #42778] Frameworks with different SONAME cannot coexist |
Date: |
Thu, 24 Jul 2014 12:25:43 +0000 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 |
Follow-up Comment #2, bug #42778 (project gnustep):
Proposed patch attached. It makes the existence of two framework versions (in
fact, multiple framework versions) possible. It doesn't delete the installed
framework prior to the installation of the new one and symlinks are created
directly to the versioned directory instead of the Current symlink. Also,
since Resources are version-specific (or at least they may be) it is not
correct to create a Resources symlink pointing to Current. Headers are also
version-specific but as there can only be one .so symlink only one set of
headers can be used at any time (the "Current" headers, so this behavior is
retained).
Tested with RSSKit/0.3, then RSSKit/0.4 installed on top of it with
INTERFACE_VERSION set to 1, then RSSKit/0.4 with VERSION bumped to 0.4.1
(simulating a new release which is ABI-compatible with 0.4). It appears to
work:
$ ls -l /tmp/foo/usr/lib/
общо 28
drwxr-xr-x 3 yavor yavor 4096 юли 24 14:44 GNUstep
lrwxrwxrwx 1 yavor yavor 67 юли 24 15:02 libRSSKit.so ->
./GNUstep/Frameworks/RSSKit.framework/Versions/Current/libRSSKit.so
lrwxrwxrwx 1 yavor yavor 63 юли 24 14:44 libRSSKit.so.0 ->
./GNUstep/Frameworks/RSSKit.framework/Versions/0/libRSSKit.so.0
lrwxrwxrwx 1 yavor yavor 65 юли 24 14:44 libRSSKit.so.0.3 ->
./GNUstep/Frameworks/RSSKit.framework/Versions/0/libRSSKit.so.0.3
lrwxrwxrwx 1 yavor yavor 65 юли 24 14:47 libRSSKit.so.0.4 ->
./GNUstep/Frameworks/RSSKit.framework/Versions/1/libRSSKit.so.0.4
lrwxrwxrwx 1 yavor yavor 67 юли 24 15:02 libRSSKit.so.0.4.1 ->
./GNUstep/Frameworks/RSSKit.framework/Versions/1/libRSSKit.so.0.4.1
lrwxrwxrwx 1 yavor yavor 63 юли 24 15:02 libRSSKit.so.1 ->
./GNUstep/Frameworks/RSSKit.framework/Versions/1/libRSSKit.so.1
$ ls -l /tmp/foo/usr/lib/GNUstep/Frameworks/RSSKit.framework/
общо 4
lrwxrwxrwx 1 yavor yavor 24 юли 24 14:46 Headers ->
Versions/Current/Headers
lrwxrwxrwx 1 yavor yavor 31 юли 24 14:47 libRSSKit.so ->
./Versions/Current/libRSSKit.so
lrwxrwxrwx 1 yavor yavor 25 юли 24 14:47 RSSKit ->
./Versions/Current/RSSKit
drwxr-xr-x 4 yavor yavor 4096 юли 24 14:46 Versions
$ ls -l /tmp/foo/usr/lib/GNUstep/Frameworks/RSSKit.framework/Versions/
общо 8
drwxr-xr-x 4 yavor yavor 4096 юли 24 14:43 0
drwxr-xr-x 4 yavor yavor 4096 юли 24 15:00 1
lrwxrwxrwx 1 yavor yavor 1 юли 24 14:46 Current -> 1
Installing in the USER domain is OK too:
$ ls -l ~/GNUstep/Library/Libraries/
общо 8
lrwxrwxrwx 1 yavor yavor 60 юли 24 15:00 libRSSKit.so ->
../Frameworks/RSSKit.framework/Versions/Current/libRSSKit.so
lrwxrwxrwx 1 yavor yavor 56 юли 24 14:44 libRSSKit.so.0 ->
../Frameworks/RSSKit.framework/Versions/0/libRSSKit.so.0
lrwxrwxrwx 1 yavor yavor 58 юли 24 14:44 libRSSKit.so.0.3 ->
../Frameworks/RSSKit.framework/Versions/0/libRSSKit.so.0.3
lrwxrwxrwx 1 yavor yavor 58 юли 24 14:47 libRSSKit.so.0.4 ->
../Frameworks/RSSKit.framework/Versions/1/libRSSKit.so.0.4
lrwxrwxrwx 1 yavor yavor 60 юли 24 15:00 libRSSKit.so.0.4.1 ->
../Frameworks/RSSKit.framework/Versions/1/libRSSKit.so.0.4.1
lrwxrwxrwx 1 yavor yavor 56 юли 24 15:00 libRSSKit.so.1 ->
../Frameworks/RSSKit.framework/Versions/1/libRSSKit.so.1
$ ls -l ~/GNUstep/Library/Frameworks/RSSKit.framework/
общо 4
lrwxrwxrwx 1 yavor yavor 24 юли 24 14:46 Headers ->
Versions/Current/Headers
lrwxrwxrwx 1 yavor yavor 31 юли 24 14:47 libRSSKit.so ->
./Versions/Current/libRSSKit.so
lrwxrwxrwx 1 yavor yavor 25 юли 24 14:47 RSSKit ->
./Versions/Current/RSSKit
drwxr-xr-x 4 yavor yavor 4096 юли 24 14:46 Versions
$ ls -l ~/GNUstep/Library/Frameworks/RSSKit.framework/Versions/
общо 8
drwxr-xr-x 4 yavor yavor 4096 юли 24 14:43 0
drwxr-xr-x 4 yavor yavor 4096 юли 24 15:00 1
lrwxrwxrwx 1 yavor yavor 1 юли 24 14:46 Current -> 1
$ ls -l ~/GNUstep/Library/Frameworks/RSSKit.framework/Versions/0/
общо 256
drwxr-xr-x 2 yavor yavor 4096 юли 24 14:43 Headers
lrwxrwxrwx 1 yavor yavor 14 юли 24 14:43 libRSSKit.so ->
libRSSKit.so.0
lrwxrwxrwx 1 yavor yavor 16 юли 24 14:43 libRSSKit.so.0 ->
libRSSKit.so.0.3
-rwxr-xr-x 1 yavor yavor 246948 юли 24 14:43 libRSSKit.so.0.3
drwxr-xr-x 2 yavor yavor 4096 юли 24 14:43 Resources
lrwxrwxrwx 1 yavor yavor 12 юли 24 14:43 RSSKit -> libRSSKit.so
$ ls -l ~/GNUstep/Library/Frameworks/RSSKit.framework/Versions/1/
общо 504
drwxr-xr-x 2 yavor yavor 4096 юли 24 14:46 Headers
lrwxrwxrwx 1 yavor yavor 14 юли 24 15:00 libRSSKit.so ->
libRSSKit.so.1
-rwxr-xr-x 1 yavor yavor 249584 юли 24 14:47 libRSSKit.so.0.4
-rwxr-xr-x 1 yavor yavor 249584 юли 24 15:00 libRSSKit.so.0.4.1
lrwxrwxrwx 1 yavor yavor 18 юли 24 15:00 libRSSKit.so.1 ->
libRSSKit.so.0.4.1
drwxr-xr-x 2 yavor yavor 4096 юли 24 14:47 Resources
lrwxrwxrwx 1 yavor yavor 12 юли 24 15:00 RSSKit -> libRSSKit.so
I also checked that projects that have an internal framework (whether intended
to be public or not) and set ADDITIONAL_LIB_DIRS to something like
"-L../../Foo.framework/Versions/Current" continue to build/link without
problems.
As this is one of the most sensitive areas in GNUstep Make, I guess this
change should be tested very well (with as many layouts as possible) before it
is installed.
(file #31767)
_______________________________________________________
Additional Item Attachment:
File name: versioned-frameworks.patch Size:3 KB
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?42778>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/