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/ _______________________________________________ Bug-gnustep mailing list Bug-gnustep@gnu.org https://lists.gnu.org/mailman/listinfo/bug-gnustep