bug-gnustep
[Top][All Lists]
Advanced

[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/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]