Oh well, I forgot to CC the list on my previous e-mail.  No problem, I
committed a fix to this problem just now.  Can you try again and let me
know if it works as expected?

Thanks

On Wed, Feb 18, 2015 at 10:51 AM, Stefan Bidigaray <[email protected]>
wrote:

> So when CoreBase first came around ARC was at it's infancy and being able
> to seemingly go from CF to ObjC objects was a good idea.  All the
> "toll-free bridged" types have a construct similar to:
>
> #ifdef __OBJC__
> @class NSData;
> @class NSMutableData;
> typedef NSData* CFDataRef;
> typedef NSMutableData* CFMutableDataRef;
> #else
> typedef const struct __CFData * CFDataRef;
> typedef struct __CFData * CFMutableDataRef;
> #endif
>
> This is very handy, but after doing some research on ARC it requires
> explicit transferring control to C because ARC cannot keep up with what's
> going on in C structs.  See
> https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
> if you're interested in the details.
>
> The obvious compatibility solution here would be to get rid of those
> #ifdef's and always define CF types to be typedef struct ...
>
> I would appreciate if David C. could confirm that this is the correct
> solution before committing, though.
>
> On Tue, Feb 17, 2015 at 11:25 AM, Maxthon Chan <[email protected]> wrote:
>
>> I am getting a bit of trouble compiling code with CoreBase and ARC at the
>> same time. I am using latest trunk version of base and corebase on Ubuntu
>> 14.04 LTS with clang 3.5. Here is the log:
>>
>> $ make
>> This is gnustep-make 2.6.6. Type 'make print-gnustep-make-help' for help.
>> Making build-headers for framework CGIKit...
>>  Creating CGIKit.framework/Versions/H/Headers...
>>  Creating derived_src/.stamp...
>>  Creating CGIKit.framework/Versions/H/Resources...
>>  Updating Version/Current symlink...
>> Making all for framework CGIKit...
>>  Compiling file CGIApplication.m ...
>> In file included from CGIApplication.m:9:
>> In file included from ./CGIApplication.h:12:
>> In file included from ../CGIKit/CGIKitDefines.h:51:
>> In file included from
>> /usr/local/include/GNUstep/CoreFoundation/CoreFoundation.h:36:
>> In file included from
>> /usr/local/include/GNUstep/CoreFoundation/CFBundle.h:31:
>> In file included from
>> /usr/local/include/GNUstep/CoreFoundation/CFURL.h:34:
>> /usr/local/include/GNUstep/CoreFoundation/CFString.h:538:15: error: ARC
>> forbids Objective-C objects in struct
>>   CFStringRef theString;
>>               ^
>> In file included from CGIApplication.m:9:
>> In file included from ./CGIApplication.h:12:
>> In file included from ../CGIKit/CGIKitDefines.h:51:
>> In file included from
>> /usr/local/include/GNUstep/CoreFoundation/CoreFoundation.h:48:
>> In file included from
>> /usr/local/include/GNUstep/CoreFoundation/CFPropertyList.h:33:
>> In file included from
>> /usr/local/include/GNUstep/CoreFoundation/CFStream.h:33:
>> /usr/local/include/GNUstep/CoreFoundation/CFSocket.h:61:13: error: ARC
>> forbids Objective-C objects in struct
>>   CFDataRef address;
>>             ^
>> In file included from CGIApplication.m:9:
>> In file included from ./CGIApplication.h:12:
>> In file included from ../CGIKit/CGIKitDefines.h:51:
>> In file included from
>> /usr/local/include/GNUstep/CoreFoundation/CoreFoundation.h:60:
>> /usr/local/include/GNUstep/CoreFoundation/CFXMLNode.h:76:12: error: ARC
>> forbids Objective-C objects in struct
>>   CFURLRef systemID;
>>            ^
>> /usr/local/include/GNUstep/CoreFoundation/CFXMLNode.h:83:15: error: ARC
>> forbids Objective-C objects in struct
>>   CFStringRef attributeName;
>>               ^
>> /usr/local/include/GNUstep/CoreFoundation/CFXMLNode.h:98:12: error: ARC
>> forbids Objective-C objects in struct
>>   CFURLRef sourceURL;
>>            ^
>> /usr/local/include/GNUstep/CoreFoundation/CFXMLNode.h:111:19: error: ARC
>> forbids Objective-C objects in struct
>>   CFDictionaryRef attributes;
>>                   ^
>> /usr/local/include/GNUstep/CoreFoundation/CFXMLNode.h:119:15: error: ARC
>> forbids Objective-C objects in struct
>>   CFStringRef contentDescription;
>>               ^
>> /usr/local/include/GNUstep/CoreFoundation/CFXMLNode.h:126:15: error: ARC
>> forbids Objective-C objects in struct
>>   CFStringRef replacementText;
>>               ^
>> /usr/local/include/GNUstep/CoreFoundation/CFXMLNode.h:146:15: error: ARC
>> forbids Objective-C objects in struct
>>   CFStringRef dataString;
>>               ^
>> CGIApplication.m:30:65: error: expected method body
>> - (instancetype)_init __attribute__((objc_method_family(init)))
>> NS_REPLACES_RECEIVER
>>                                                                 ^
>> 10 errors generated.
>> make[2]: *** [obj/CGIKit.obj/CGIApplication.m.o] Error 1
>> make[1]: *** [internal-framework-run-compile-submake] Error 2
>> make: *** [CGIKit.all.framework.variables] Error 2
>>
>> And then I got this trying to check for “pesky typedefs":
>>
>> $ clang -E $(gnustep-config --objc-flags) -fobjc-arc -I. -I..
>> CGIApplication.m
>> // … lines removed …
>> # 268 "/usr/local/include/GNUstep/CoreFoundation/CFBase.h"
>> typedef CFTypeRef CFPropertyListRef;
>>
>>
>>
>>
>>
>> @class NSString;
>> @class NSMutableString;
>> typedef NSString * CFStringRef;
>> typedef NSMutableString * CFMutableStringRef;
>> # 294 "/usr/local/include/GNUstep/CoreFoundation/CFBase.h"
>> typedef const struct __CFAllocator * CFAllocatorRef;
>>
>> typedef void* (*CFAllocatorAllocateCallBack)(CFIndex allocSize,
>>   CFOptionFlags hint, void *info);
>> // … lines removed …
>>
>> The typedef here works “seemingly” well without ARC but it bites me in
>> the ass when ARC is used.
>>
>> Does this call for a change? How to do it?
>> _______________________________________________
>> Discuss-gnustep mailing list
>> [email protected]
>> https://lists.gnu.org/mailman/listinfo/discuss-gnustep
>>
>
>
_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to