tags 581934 + patch
thanks
On Mon, Aug 09, 2010 at 08:38:05AM +0200, Federico Giménez Nieto wrote:
> Yes, when all the required packages will be ready i'll try, probably
> with a little help from your side :), to fix any remaining issues.
I'm always glad to help (if I can), but keep in mind that this package
is the most mysterious one, to me at least.
> Then, should we suggest upstream to introduce the distro-specific
> soname or should we try to modify it by ourselves?
I'm afraid I don't understand the question. If upstream bumps the
SONAME, it isn't distro-specific in anyway, right? AFAICT, (in Debian
at least; I'm not aware of other practices) a distro-specific SONAME
for a library is introduced when
1) An ABI breaking Debian-specific patch has been added; which
- might be rejected by upstream (for whatever reason);
- might be a bugfix already present upstream, but
ABI-incompatible with the version in Debian (as is the case).
2) A new upstream release is ABI incompatible, but upstream forgot
to indicate that with the proper mechanism (this happens quite
often for ObjC libraries, unfortunately).
3) Upstream is providing a library, but it doesn't have any
interface versioning mechanism (as some of the Mozilla
libraries).
4) Something else I surely forget.
In all cases, a decent distro should attempt to track incompatible
library changes and act accordingly. This is both for the overall
distro health (dependent packages using the library must not fail
miserably at runtime) and for user/developer friendliness (some people
use Debian as a development platform, so any programs using the
a library the distro provides should continue to run flawlessly, or
otherwise be forced to be rebuilt/relinked against the new version --
this is actually the use case of gnustep-dl2).
So, you should make sure that upstream bumps the SONAME for next
release (0.13?), because there are ABI breaks all over the place
(affecting all public libraries). For the current transition, the
attached minimized patch seems to work for me, but don't forget to:
- Perform extensive runtime tests; most changes are not trivial.
- Rename the runtime library to libgnustep-dl-0d (debian/control);
and update dependencies (this implies passing through NEW).
- Amend debian/rules to cater for the package rename.
- Rename debian/libgnustep-dl-0.install as
debian/libgnustep-dl-0d.install and adjust the EOControl entry for
soname change.
In theory, it _might_ be possible to rework Richard's approach,
avoiding the ABI break. If I only understood 10% of gnustep-dl2's
code...
2010-08-11 Yavor Doganov
* EOControl/GNUmakefile (EOControl_INTERFACE_VERSION): Define
as Debian-specific due to the ABI break.
2010-04-09 Fred Kiefer
* EOInterface/EOPopUpAssociation.m:
* DBModeler/ModelerEntityEditor.m:
* DBModeler/ModelerTableEmbedibleEditor.m: Add missing includes.
2010-04-07 David Ayers
* EOInterface/EOPopUpAssociation.m: Add missing include.
Reported by: German Arias.
2010-03-15 Richard Frith-Macdonald
* EOControl/EONSAddOns.h:
* EOControl/EONSAddOns.m:
* EOControl/EOKeyValueCoding.m:
* EOControl/EOClassDescription.m:
Rewrite mechanism to try to ensure that our implementations are used
for KVC. New version should work with the objc runtime API.
--- gnustep-dl2-0.12.0.orig/EOControl/EOClassDescription.m
+++ gnustep-dl2-0.12.0/EOControl/EOClassDescription.m
@@ -739,17 +739,13 @@
@end
-
-...@implementation NSObject (EOClassDescriptionPrimitives)
-
-- (void)GDL2CDNSObjectICategoryID
-{
-}
+...@interface GDL2CDNSObject : NSObject
+...@end
+...@implementation GDL2CDNSObject
+ (void)load
{
- GDL2_ActivateCategory("NSObject",
-@selector(GDL2CDNSObjectICategoryID), YES);
+ GDL2_Activate([self class], YES);
}
// when you enable the NSDebugMLLogs here you will have a loop. dave
--- gnustep-dl2-0.12.0.orig/EOControl/EOKeyValueCoding.m
+++ gnustep-dl2-0.12.0/EOControl/EOKeyValueCoding.m
@@ -92,16 +92,13 @@
#define INITIALIZE if (!initialized) initialize();
-...@implementation NSObject (_EOKeyValueCodingCompatibility)
-
-- (void)GDL2KVCNSObjectICategoryID
-{
-}
+...@interface GDL2KVCNSObject : NSObject
+...@end
+...@implementation GDL2KVCNSObject
+ (void)load
{
- GDL2_ActivateCategory("NSObject",
- @selector(GDL2KVCNSObjectICategoryID), YES);
+ GDL2_Activate([self class], YES);
}
@@ -235,16 +232,13 @@
@end
-...@implementation NSArray (EOKeyValueCoding)
-
-- (void)GDL2KVCNSArrayICategoryID
-{
-}
+...@interface GDL2KVCNSArray : NSArray
+...@end
+...@implementation GDL2KVCNSArray
+ (void)load
{
- GDL2_ActivateCategory("NSArray",
- @selector(GDL2KVCNSArrayICategoryID), YES);
+ GDL2_Activate([self class], YES);
}
/**
@@ -543,16 +537,14 @@
@end
-...@implementation NSDictionary (EOKeyValueCoding)
+...@interface GDL2KVCNSDictionary : NSDictionary