darling icon indicating copy to clipboard operation
darling copied to clipboard

darling-stub-gen sometimes generates weird filenames.

Open JCWasmx86 opened this issue 4 years ago • 0 comments

I used this code to generate stubs for all frameworks (BTW should I make a PR with all frameworks you don't have?):

cd /System/Library/Frameworks; rm -rf ~/darling; mkdir ~/darling; for i in *; do echo "${i%.*}"; darling-stub-gen `pwd`/$i/Versions/Current/"${i%.*}" ~/darling/"${i%.*}" >>~/darling/status; done

For AppKit, I get following error:

Traceback (most recent call last):
  File "/Users/groot/bin/darling-stub-gen", line 238, in <module>
    class_header = open(header_dir + class_name + ".h", "w")
OSError: [Errno 63] File name too long: '/Users/groot/darling/AppKit/include/AppKit/NSScrollingBehaviorZombie\n{\n}\n\n+ (id)zombieListDescription;\n+ (id)zombieList;\n- (id)description;\n@property(retain) NSArray *backtrace;\n@property(copy) NSString *originalClassName;\n- (id)forwardingTargetForSelector:(SEL)arg1;\n\n@end\n\n__attribute__((visibility("hidden")))\n@interface NSScrollingBehavior.h'

And for Foundation this one:

Traceback (most recent call last):
  File "/Users/groot/bin/darling-stub-gen", line 238, in <module>
    class_header = open(header_dir + class_name + ".h", "w")
OSError: [Errno 63] File name too long: '/Users/groot/darling/Foundation/include/Foundation/NSProxy <NSObject>\n{\n    Class isa;\n}\n\n+ (id)description;\n+ (CDUnknownFunctionPointerType)methodForSelector:(SEL)arg1;\n+ (CDUnknownFunctionPointerType)instanceMethodForSelector:(SEL)arg1;\n+ (BOOL)instancesRespondToSelector:(SEL)arg1;\n+ (BOOL)conformsToProtocol:(id)arg1;\n+ (BOOL)isKindOfClass:(Class)arg1;\n+ (BOOL)isMemberOfClass:(Class)arg1;\n+ (BOOL)isSubclassOfClass:(Class)arg1;\n+ (BOOL)isProxy;\n+ (BOOL)isFault;\n+ (id)performSelector:(SEL)arg1 withObject:(id)arg2 withObject:(id)arg3;\n+ (id)performSelector:(SEL)arg1 withObject:(id)arg2;\n+ (id)performSelector:(SEL)arg1;\n+ (unsigned long long)hash;\n+ (BOOL)isEqual:(id)arg1;\n+ (id)_copyDescription;\n+ (id)debugDescription;\n+ (struct _NSZone *)zone;\n+ (BOOL)retainWeakReference;\n+ (BOOL)allowsWeakReference;\n+ (BOOL)_isDeallocating;\n+ (BOOL)_tryRetain;\n+ (void)finalize;\n+ (void)dealloc;\n+ (id)init;\n+ (void)doesNotRecognizeSelector:(SEL)arg1;\n+ (void)forwardInvocation:(id)arg1;\n+ (id)methodSignatureForSelector:(SEL)arg1;\n+ (id)instanceMethodSignatureForSelector:(SEL)arg1;\n+ (id)forwardingTargetForSelector:(SEL)arg1;\n+ (BOOL)isAncestorOfObject:(id)arg1;\n+ (BOOL)respondsToSelector:(SEL)arg1;\n+ (id)mutableCopyWithZone:(struct _NSZone *)arg1;\n+ (id)mutableCopy;\n+ (id)copyWithZone:(struct _NSZone *)arg1;\n+ (id)copy;\n+ (unsigned long long)retainCount;\n+ (id)autorelease;\n+ (oneway void)release;\n+ (id)retain;\n+ (id)self;\n+ (Class)superclass;\n+ (Class)class;\n+ (id)alloc;\n+ (id)allocWithZone:(struct _NSZone *)arg1;\n+ (void)initialize;\n- (BOOL)isNSValue__;\n- (BOOL)isNSTimeZone__;\n- (BOOL)isNSString__;\n- (BOOL)isNSSet__;\n- (BOOL)isNSOrderedSet__;\n- (BOOL)isNSNumber__;\n- (BOOL)isNSDictionary__;\n- (BOOL)isNSDate__;\n- (BOOL)isNSData__;\n- (BOOL)isNSCFConstantString__;\n- (BOOL)isNSArray__;\n- (BOOL)isNSObject__;\n- (BOOL)respondsToSelector:(SEL)arg1;\n- (BOOL)conformsToProtocol:(id)arg1;\n- (BOOL)isMemberOfClass:(Class)arg1;\n- (BOOL)isKindOfClass:(Class)arg1;\n- (BOOL)isProxy;\n- (BOOL)isFault;\n- (id)performSelector:(SEL)arg1 withObject:(id)arg2 withObject:(id)arg3;\n- (id)performSelector:(SEL)arg1 withObject:(id)arg2;\n- (id)performSelector:(SEL)arg1;\n@property(readonly) unsigned long long hash;\n- (BOOL)isEqual:(id)arg1;\n- (id)_copyDescription;\n@property(readonly, copy) NSString *debugDescription;\n@property(readonly, copy) NSString *description;\n- (BOOL)_allowsDirectEncoding;\n- (struct _NSZone *)zone;\n- (void)finalize;\n- (void)dealloc;\n- (BOOL)retainWeakReference;\n- (BOOL)allowsWeakReference;\n- (BOOL)_tryRetain;\n- (BOOL)_isDeallocating;\n- (id)autorelease;\n- (oneway void)release;\n- (unsigned long long)retainCount;\n- (id)retain;\n- (void)doesNotRecognizeSelector:(SEL)arg1;\n- (id)methodSignatureForSelector:(SEL)arg1;\n- (void)forwardInvocation:(id)arg1;\n- (id)forwardingTargetForSelector:(SEL)arg1;\n- (id)self;\n@property(readonly) Class superclass;\n- (Class)class;\n- (BOOL)_conformsToProtocolNamed:(const char *)arg1;\n- (struct objc_method_description *)methodDescriptionForSelector:(SEL)arg1;\n\n@end\n\n@interface NSRandomSpecifier.h'

And if I go to ~/darling where all stubs are, and run find ., I get several filenames that are weird:

./CoreFoundation/src/__NSMessageBuilder
{
    Class isa;
    id _target;
    id *_addr;
}

+ (void)initialize;
- (id)methodSignatureForSelector:(SEL)arg1;
- (void)forwardInvocation:(id)arg1;
- (void)finalize;

@end

@interface NSInvocation.m
./CoreFoundation/src/__NSGenericDeallocHandler
{
    Class isa;
    CDUnknownBlockType _block;
}

+ (void)initialize;
- (void)finalize;
- (void)release;
- (unsigned long long)retainCount;
- (id)retain;

@end

@interface NSSet.m
./CoreFoundation/src/_NSZombie_
{
    Class isa;
}

+ (void)initialize;

@end

__attribute__((visibility("hidden")))
@interface __NSAtom
{
    Class isa;
}

+ (void)initialize;

@end

__attribute__((visibility("hidden")))
@interface __NSCFType.m
./CoreFoundation/include/CoreFoundation/_NSZombie_
{
    Class isa;
}

+ (void)initialize;

@end

__attribute__((visibility("hidden")))
@interface __NSAtom
{
    Class isa;
}

+ (void)initialize;

@end

__attribute__((visibility("hidden")))
@interface __NSCFType.h
./CoreFoundation/include/CoreFoundation/__NSMessageBuilder
{
    Class isa;
    id _target;
    id *_addr;
}

+ (void)initialize;
- (id)methodSignatureForSelector:(SEL)arg1;
- (void)forwardInvocation:(id)arg1;
- (void)finalize;

@end

@interface NSInvocation.h
./CoreFoundation/include/CoreFoundation/__NSGenericDeallocHandler
{
    Class isa;
    CDUnknownBlockType _block;
}

+ (void)initialize;
- (void)finalize;
- (void)release;
- (unsigned long long)retainCount;
- (id)retain;

@end

@interface NSSet.h

As you can see, it just fails with CoreFoundation. The filename is the code that probably should be in the file.

As darling-stub-gen doesn't have a version, here the output of shasum: 81ef03584f918c8a338d38efca554dda708f5d1a

class-dump --version: class-dump 3.5 (64 bit) (Debug version compiled May 25 2019 19:18:06) compiled May 25 2019 19:18:06

Those seem to be the newest version.

BTW: These are the frameworks, that aren't in darling:

Frameworks
  1. AdSupport
  2. AppleScriptKit
  3. AppleScriptObjC
  4. AudioVideoBridging
  5. AuthenticationServices
  6. AutomaticAssessmentConfiguration
  7. Automator
  8. BackgroundTasks
  9. BusinessChat
  10. CalendarStore
  11. CallKit
  12. CloudKit
  13. Collaboration
  14. Combine
  15. ContactsUI
  16. CoreAudioKit
  17. CoreBluetooth
  18. CoreDisplay
  19. CoreHaptics
  20. CoreMIDIServer
  21. CoreML
  22. CoreMotion
  23. CoreSpotlight
  24. CoreTelephony
  25. CryptoKit
  26. DVDPlayback
  27. DeviceCheck
  28. DiscRecording
  29. DiscRecordingUI
  30. DriverKit
  31. ExecutionPolicy
  32. ExternalAccessory
  33. FWAUserLib
  34. FileProvider
  35. FileProviderUI
  36. FinderSync
  37. GLUT
  38. GameKit
  39. GameplayKit
  40. HIDDriverKit
  41. Hypervisor
  42. ICADevices
  43. IMServicePlugIn
  44. IOBluetoothUI
  45. IOUSBHost
  46. IdentityLookup
  47. ImageCaptureCore
  48. InstallerPlugins
  49. InstantMessage
  50. Intents
  51. JavaFrameEmbedding
  52. LatentSemanticMapping
  53. LinkPresentation
  54. MediaAccessibility
  55. MediaLibrary
  56. MediaPlayer
  57. MediaToolbox
  58. Message
  59. MetalPerformanceShaders
  60. MetricKit
  61. MorphunAssetsUpdater
  62. NaturalLanguage
  63. NetworkExtension
  64. NetworkingDriverKit
  65. NotificationCenter
  66. OSAKit
  67. OSLog
  68. PCIDriverKit
  69. PDFKit
  70. PencilKit
  71. Photos
  72. PhotosUI
  73. PreferencePanes
  74. PushKit
  75. QuickLookThumbnailing
  76. RealityKit
  77. SafariServices
  78. SceneKit
  79. Social
  80. SoundAnalysis
  81. Speech
  82. SpriteKit
  83. SwiftUI
  84. System
  85. SystemExtensions
  86. TWAIN
  87. Tcl
  88. Tk
  89. USBDriverKit
  90. VideoDecodeAcceleration
  91. VideoSubscriberAccount
  92. Vision
  93. iTunesLibrary
  94. vecLib
  95. vmnet (Generated with for i in *; do [ ! -d ~/.darling/System/Library/Frameworks/$i.framework ] && echo $i; done, so some may be redundant/not useful for darling/implemented in Swift/...)

JCWasmx86 avatar Aug 21 '21 08:08 JCWasmx86