2 // this file contains declarations, initializations, and macros for
3 // all symbols that use Mac OS Frameworks. We dynamically load these
4 // libraries at runtime since it's cumbersome to lug around 100mb of
5 // libraries on the build machines (which usually don't run Mac OS X).
7 static const mach_header* CarbonHandle = NULL;
8 static const mach_header* AGLHandle = NULL;
9 static const mach_header* SCHandle = NULL;
11 static void* load_weak(char* symbol) {
12 if (CarbonHandle == NULL) CarbonHandle = NSAddImage("/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon", NSADDIMAGE_OPTION_NONE);
13 if (AGLHandle == NULL) AGLHandle = NSAddImage("/System/Library/Frameworks/AGL.framework/Versions/A/AGL", NSADDIMAGE_OPTION_NONE);
14 if (SCHandle == NULL) SCHandle = NSAddImage("/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration", NSADDIMAGE_OPTION_NONE);
15 void* ret = NSAddressOfSymbol(NSLookupSymbolInImage(CarbonHandle, symbol, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW));
16 if (ret == NULL) ret = NSAddressOfSymbol(NSLookupSymbolInImage(AGLHandle, symbol, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW));
17 if (ret == NULL) ret = NSAddressOfSymbol(NSLookupSymbolInImage(SCHandle, symbol, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW));
18 printf("linking symbol %s to address %x\n", symbol, ret);
23 #define declare_weak(symbol) typeof(symbol) *symbol##_weak = NULL
25 declare_weak(AEGetNthPtr);
26 #define AEGetNthPtr (*AEGetNthPtr_weak)
27 declare_weak(CFArrayGetCount);
28 #define CFArrayGetCount (*CFArrayGetCount_weak)
29 declare_weak(CFArrayGetTypeID);
30 #define CFArrayGetTypeID (*CFArrayGetTypeID_weak)
31 declare_weak(CFArrayGetValueAtIndex);
32 #define CFArrayGetValueAtIndex (*CFArrayGetValueAtIndex_weak)
33 declare_weak(CFDictionaryGetValue);
34 #define CFDictionaryGetValue (*CFDictionaryGetValue_weak)
35 declare_weak(CFGetTypeID);
36 #define CFGetTypeID (*CFGetTypeID_weak)
37 declare_weak(CFNumberGetTypeID);
38 #define CFNumberGetTypeID (*CFNumberGetTypeID_weak)
39 declare_weak(CFNumberGetValue);
40 #define CFNumberGetValue (*CFNumberGetValue_weak)
41 declare_weak(CFRelease);
42 #define CFRelease (*CFRelease_weak)
43 declare_weak(CFStringCompare);
44 #define CFStringCompare (*CFStringCompare_weak)
45 declare_weak(CFStringCreateWithCString);
46 #define CFStringCreateWithCString (*CFStringCreateWithCString_weak)
47 declare_weak(CFStringCreateWithCharacters);
48 #define CFStringCreateWithCharacters (*CFStringCreateWithCharacters_weak)
49 declare_weak(CFStringGetCharacters);
50 #define CFStringGetCharacters (*CFStringGetCharacters_weak)
51 declare_weak(CFStringGetLength);
52 #define CFStringGetLength (*CFStringGetLength_weak)
53 declare_weak(CFStringGetTypeID);
54 #define CFStringGetTypeID (*CFStringGetTypeID_weak)
55 declare_weak(CFURLCopyScheme);
56 #define CFURLCopyScheme (*CFURLCopyScheme_weak)
57 declare_weak(CFURLCreateWithString);
58 #define CFURLCreateWithString (*CFURLCreateWithString_weak)
59 declare_weak(CGDisplayPixelsHigh);
60 #define CGDisplayPixelsHigh (*CGDisplayPixelsHigh_weak)
61 declare_weak(CGDisplayPixelsWide);
62 #define CGDisplayPixelsWide (*CGDisplayPixelsWide_weak)
63 declare_weak(CallNextEventHandler);
64 #define CallNextEventHandler (*CallNextEventHandler_weak)
65 declare_weak(CollapseWindow);
66 #define CollapseWindow (*CollapseWindow_weak)
67 declare_weak(ConstrainWindowToScreen);
68 #define ConstrainWindowToScreen (*ConstrainWindowToScreen_weak)
69 declare_weak(CreateEvent);
70 #define CreateEvent (*CreateEvent_weak)
71 declare_weak(CreateNewWindow);
72 #define CreateNewWindow (*CreateNewWindow_weak)
73 declare_weak(DisposeEventHandlerUPP);
74 #define DisposeEventHandlerUPP (*DisposeEventHandlerUPP_weak)
75 declare_weak(DisposeNavEventUPP);
76 #define DisposeNavEventUPP (*DisposeNavEventUPP_weak)
77 declare_weak(DisposeWindow);
78 #define DisposeWindow (*DisposeWindow_weak)
79 declare_weak(ExitToShell);
80 #define ExitToShell (*ExitToShell_weak)
81 declare_weak(FSRefMakePath);
82 #define FSRefMakePath (*FSRefMakePath_weak)
83 declare_weak(FrontWindow);
84 #define FrontWindow (*FrontWindow_weak)
85 declare_weak(Gestalt);
86 #define Gestalt (*Gestalt_weak)
87 declare_weak(GetApplicationEventTarget);
88 #define GetApplicationEventTarget (*GetApplicationEventTarget_weak)
89 declare_weak(GetCurrentProcess);
90 #define GetCurrentProcess (*GetCurrentProcess_weak)
91 declare_weak(GetCurrentScrap);
92 #define GetCurrentScrap (*GetCurrentScrap_weak)
93 declare_weak(GetEventClass);
94 #define GetEventClass (*GetEventClass_weak)
95 declare_weak(GetEventKind);
96 #define GetEventKind (*GetEventKind_weak)
97 declare_weak(GetEventParameter);
98 #define GetEventParameter (*GetEventParameter_weak)
99 declare_weak(GetMainEventQueue);
100 #define GetMainEventQueue (*GetMainEventQueue_weak)
101 declare_weak(GetScrapFlavorData);
102 #define GetScrapFlavorData (*GetScrapFlavorData_weak)
103 declare_weak(GetScrapFlavorSize);
104 #define GetScrapFlavorSize (*GetScrapFlavorSize_weak)
105 declare_weak(GetWindowBounds);
106 #define GetWindowBounds (*GetWindowBounds_weak)
107 declare_weak(GetWindowEventTarget);
108 #define GetWindowEventTarget (*GetWindowEventTarget_weak)
109 declare_weak(GetWindowPort);
110 #define GetWindowPort (*GetWindowPort_weak)
111 declare_weak(HideWindow);
112 #define HideWindow (*HideWindow_weak)
113 declare_weak(InstallEventHandler);
114 #define InstallEventHandler (*InstallEventHandler_weak)
115 declare_weak(IsWindowCollapsed);
116 #define IsWindowCollapsed (*IsWindowCollapsed_weak)
117 declare_weak(LSOpenCFURLRef);
118 #define LSOpenCFURLRef (*LSOpenCFURLRef_weak)
119 declare_weak(NavCreateGetFileDialog);
120 #define NavCreateGetFileDialog (*NavCreateGetFileDialog_weak)
121 declare_weak(NavCreatePutFileDialog);
122 #define NavCreatePutFileDialog (*NavCreatePutFileDialog_weak)
123 declare_weak(NavDialogDispose);
124 #define NavDialogDispose (*NavDialogDispose_weak)
125 declare_weak(NavDialogGetReply);
126 #define NavDialogGetReply (*NavDialogGetReply_weak)
127 declare_weak(NavDialogGetUserAction);
128 #define NavDialogGetUserAction (*NavDialogGetUserAction_weak)
129 declare_weak(NavDialogRun);
130 #define NavDialogRun (*NavDialogRun_weak)
131 declare_weak(NavDisposeReply);
132 #define NavDisposeReply (*NavDisposeReply_weak)
133 declare_weak(NavGetDefaultDialogCreationOptions);
134 #define NavGetDefaultDialogCreationOptions (*NavGetDefaultDialogCreationOptions_weak)
135 declare_weak(NewEventHandlerUPP);
136 #define NewEventHandlerUPP (*NewEventHandlerUPP_weak)
137 declare_weak(NewNavEventUPP);
138 #define NewNavEventUPP (*NewNavEventUPP_weak)
139 declare_weak(PostEventToQueue);
140 #define PostEventToQueue (*PostEventToQueue_weak)
141 declare_weak(PutScrapFlavor);
142 #define PutScrapFlavor (*PutScrapFlavor_weak)
143 declare_weak(QuitApplicationEventLoop);
144 #define QuitApplicationEventLoop (*QuitApplicationEventLoop_weak)
145 declare_weak(ReleaseEvent);
146 #define ReleaseEvent (*ReleaseEvent_weak)
147 declare_weak(RunApplicationEventLoop);
148 #define RunApplicationEventLoop (*RunApplicationEventLoop_weak)
149 declare_weak(SCDynamicStoreCopyProxies);
150 #define SCDynamicStoreCopyProxies (*SCDynamicStoreCopyProxies_weak)
151 declare_weak(SelectWindow);
152 #define SelectWindow (*SelectWindow_weak)
153 declare_weak(SendBehind);
154 #define SendBehind (*SendBehind_weak)
155 declare_weak(SetEventParameter);
156 #define SetEventParameter (*SetEventParameter_weak)
157 declare_weak(SetThemeCursor);
158 #define SetThemeCursor (*SetThemeCursor_weak)
159 declare_weak(SetWindowBounds);
160 #define SetWindowBounds (*SetWindowBounds_weak)
161 declare_weak(SetWindowResizeLimits);
162 #define SetWindowResizeLimits (*SetWindowResizeLimits_weak)
163 declare_weak(SetWindowTitleWithCFString);
164 #define SetWindowTitleWithCFString (*SetWindowTitleWithCFString_weak)
165 declare_weak(ShowWindow);
166 #define ShowWindow (*ShowWindow_weak)
167 declare_weak(ZoomWindowIdeal);
168 #define ZoomWindowIdeal (*ZoomWindowIdeal_weak)
169 declare_weak(__CFStringMakeConstantString);
170 #define __CFStringMakeConstantString (*__CFStringMakeConstantString_weak)
171 declare_weak(aglChoosePixelFormat);
172 #define aglChoosePixelFormat (*aglChoosePixelFormat_weak)
173 declare_weak(aglCreateContext);
174 #define aglCreateContext (*aglCreateContext_weak)
175 declare_weak(aglDestroyContext);
176 #define aglDestroyContext (*aglDestroyContext_weak)
177 declare_weak(aglSetCurrentContext);
178 #define aglSetCurrentContext (*aglSetCurrentContext_weak)
179 declare_weak(aglSetDrawable);
180 #define aglSetDrawable (*aglSetDrawable_weak)
181 declare_weak(aglSurfaceTexture);
182 #define aglSurfaceTexture (*aglSurfaceTexture_weak)
183 declare_weak(aglUpdateContext);
184 #define aglUpdateContext (*aglUpdateContext_weak)
185 const CFAllocatorRef *kCFAllocatorDefault_weak;
186 #define kCFAllocatorDefault (*kCFAllocatorDefault_weak)
187 declare_weak(CPSEnableForegroundOperation);
188 #define CPSEnableForegroundOperation (*CPSEnableForegroundOperation_weak)
189 declare_weak(CPSSetFrontProcess);
190 #define CPSSetFrontProcess (*CPSSetFrontProcess_weak)
192 static void load_weak_symbols() {
193 AEGetNthPtr_weak = (typeof(AEGetNthPtr_weak))load_weak("_AEGetNthPtr");
194 CFArrayGetCount_weak = (typeof(CFArrayGetCount_weak))load_weak("_CFArrayGetCount");
195 CFArrayGetTypeID_weak = (typeof(CFArrayGetTypeID_weak))load_weak("_CFArrayGetTypeID");
196 CFArrayGetValueAtIndex_weak = (typeof(CFArrayGetValueAtIndex_weak))load_weak("_CFArrayGetValueAtIndex");
197 CFDictionaryGetValue_weak = (typeof(CFDictionaryGetValue_weak))load_weak("_CFDictionaryGetValue");
198 CFGetTypeID_weak = (typeof(CFGetTypeID_weak))load_weak("_CFGetTypeID");
199 CFNumberGetTypeID_weak = (typeof(CFNumberGetTypeID_weak))load_weak("_CFNumberGetTypeID");
200 CFNumberGetValue_weak = (typeof(CFNumberGetValue_weak))load_weak("_CFNumberGetValue");
201 CFRelease_weak = (typeof(CFRelease_weak))load_weak("_CFRelease");
202 CFStringCompare_weak = (typeof(CFStringCompare_weak))load_weak("_CFStringCompare");
203 CFStringCreateWithCString_weak = (typeof(CFStringCreateWithCString_weak))load_weak("_CFStringCreateWithCString");
204 CFStringCreateWithCharacters_weak = (typeof(CFStringCreateWithCharacters_weak))load_weak("_CFStringCreateWithCharacters");
205 CFStringGetCharacters_weak = (typeof(CFStringGetCharacters_weak))load_weak("_CFStringGetCharacters");
206 CFStringGetLength_weak = (typeof(CFStringGetLength_weak))load_weak("_CFStringGetLength");
207 CFStringGetTypeID_weak = (typeof(CFStringGetTypeID_weak))load_weak("_CFStringGetTypeID");
208 CFURLCopyScheme_weak = (typeof(CFURLCopyScheme_weak))load_weak("_CFURLCopyScheme");
209 CFURLCreateWithString_weak = (typeof(CFURLCreateWithString_weak))load_weak("_CFURLCreateWithString");
210 CGDisplayPixelsHigh_weak = (typeof(CGDisplayPixelsHigh_weak))load_weak("_CGDisplayPixelsHigh");
211 CGDisplayPixelsWide_weak = (typeof(CGDisplayPixelsWide_weak))load_weak("_CGDisplayPixelsWide");
212 CallNextEventHandler_weak = (typeof(CallNextEventHandler_weak))load_weak("_CallNextEventHandler");
213 CollapseWindow_weak = (typeof(CollapseWindow_weak))load_weak("_CollapseWindow");
214 ConstrainWindowToScreen_weak = (typeof(ConstrainWindowToScreen_weak))load_weak("_ConstrainWindowToScreen");
215 CreateEvent_weak = (typeof(CreateEvent_weak))load_weak("_CreateEvent");
216 CreateNewWindow_weak = (typeof(CreateNewWindow_weak))load_weak("_CreateNewWindow");
217 DisposeEventHandlerUPP_weak = (typeof(DisposeEventHandlerUPP_weak))load_weak("_DisposeEventHandlerUPP");
218 DisposeNavEventUPP_weak = (typeof(DisposeNavEventUPP_weak))load_weak("_DisposeNavEventUPP");
219 DisposeWindow_weak = (typeof(DisposeWindow_weak))load_weak("_DisposeWindow");
220 ExitToShell_weak = (typeof(ExitToShell_weak))load_weak("_ExitToShell");
221 FSRefMakePath_weak = (typeof(FSRefMakePath_weak))load_weak("_FSRefMakePath");
222 FrontWindow_weak = (typeof(FrontWindow_weak))load_weak("_FrontWindow");
223 Gestalt_weak = (typeof(Gestalt_weak))load_weak("_Gestalt");
224 GetApplicationEventTarget_weak = (typeof(GetApplicationEventTarget_weak))load_weak("_GetApplicationEventTarget");
225 GetCurrentProcess_weak = (typeof(GetCurrentProcess_weak))load_weak("_GetCurrentProcess");
226 GetCurrentScrap_weak = (typeof(GetCurrentScrap_weak))load_weak("_GetCurrentScrap");
227 GetEventClass_weak = (typeof(GetEventClass_weak))load_weak("_GetEventClass");
228 GetEventKind_weak = (typeof(GetEventKind_weak))load_weak("_GetEventKind");
229 GetEventParameter_weak = (typeof(GetEventParameter_weak))load_weak("_GetEventParameter");
230 GetMainEventQueue_weak = (typeof(GetMainEventQueue_weak))load_weak("_GetMainEventQueue");
231 GetScrapFlavorData_weak = (typeof(GetScrapFlavorData_weak))load_weak("_GetScrapFlavorData");
232 GetScrapFlavorSize_weak = (typeof(GetScrapFlavorSize_weak))load_weak("_GetScrapFlavorSize");
233 GetWindowBounds_weak = (typeof(GetWindowBounds_weak))load_weak("_GetWindowBounds");
234 GetWindowEventTarget_weak = (typeof(GetWindowEventTarget_weak))load_weak("_GetWindowEventTarget");
235 GetWindowPort_weak = (typeof(GetWindowPort_weak))load_weak("_GetWindowPort");
236 HideWindow_weak = (typeof(HideWindow_weak))load_weak("_HideWindow");
237 InstallEventHandler_weak = (typeof(InstallEventHandler_weak))load_weak("_InstallEventHandler");
238 IsWindowCollapsed_weak = (typeof(IsWindowCollapsed_weak))load_weak("_IsWindowCollapsed");
239 LSOpenCFURLRef_weak = (typeof(LSOpenCFURLRef_weak))load_weak("_LSOpenCFURLRef");
240 NavCreateGetFileDialog_weak = (typeof(NavCreateGetFileDialog_weak))load_weak("_NavCreateGetFileDialog");
241 NavCreatePutFileDialog_weak = (typeof(NavCreatePutFileDialog_weak))load_weak("_NavCreatePutFileDialog");
242 NavDialogDispose_weak = (typeof(NavDialogDispose_weak))load_weak("_NavDialogDispose");
243 NavDialogGetReply_weak = (typeof(NavDialogGetReply_weak))load_weak("_NavDialogGetReply");
244 NavDialogGetUserAction_weak = (typeof(NavDialogGetUserAction_weak))load_weak("_NavDialogGetUserAction");
245 NavDialogRun_weak = (typeof(NavDialogRun_weak))load_weak("_NavDialogRun");
246 NavDisposeReply_weak = (typeof(NavDisposeReply_weak))load_weak("_NavDisposeReply");
247 NavGetDefaultDialogCreationOptions_weak = (typeof(NavGetDefaultDialogCreationOptions_weak))load_weak("_NavGetDefaultDialogCreationOptions");
248 NewEventHandlerUPP_weak = (typeof(NewEventHandlerUPP_weak))load_weak("_NewEventHandlerUPP");
249 NewNavEventUPP_weak = (typeof(NewNavEventUPP_weak))load_weak("_NewNavEventUPP");
250 PostEventToQueue_weak = (typeof(PostEventToQueue_weak))load_weak("_PostEventToQueue");
251 PutScrapFlavor_weak = (typeof(PutScrapFlavor_weak))load_weak("_PutScrapFlavor");
252 QuitApplicationEventLoop_weak = (typeof(QuitApplicationEventLoop_weak))load_weak("_QuitApplicationEventLoop");
253 ReleaseEvent_weak = (typeof(ReleaseEvent_weak))load_weak("_ReleaseEvent");
254 RunApplicationEventLoop_weak = (typeof(RunApplicationEventLoop_weak))load_weak("_RunApplicationEventLoop");
255 SCDynamicStoreCopyProxies_weak = (typeof(SCDynamicStoreCopyProxies_weak))load_weak("_SCDynamicStoreCopyProxies");
256 SelectWindow_weak = (typeof(SelectWindow_weak))load_weak("_SelectWindow");
257 SendBehind_weak = (typeof(SendBehind_weak))load_weak("_SendBehind");
258 SetEventParameter_weak = (typeof(SetEventParameter_weak))load_weak("_SetEventParameter");
259 SetThemeCursor_weak = (typeof(SetThemeCursor_weak))load_weak("_SetThemeCursor");
260 SetWindowBounds_weak = (typeof(SetWindowBounds_weak))load_weak("_SetWindowBounds");
261 SetWindowResizeLimits_weak = (typeof(SetWindowResizeLimits_weak))load_weak("_SetWindowResizeLimits");
262 SetWindowTitleWithCFString_weak = (typeof(SetWindowTitleWithCFString_weak))load_weak("_SetWindowTitleWithCFString");
263 ShowWindow_weak = (typeof(ShowWindow_weak))load_weak("_ShowWindow");
264 ZoomWindowIdeal_weak = (typeof(ZoomWindowIdeal_weak))load_weak("_ZoomWindowIdeal");
265 __CFStringMakeConstantString_weak = (typeof(__CFStringMakeConstantString_weak))load_weak("___CFStringMakeConstantString");
266 aglChoosePixelFormat_weak = (typeof(aglChoosePixelFormat_weak))load_weak("_aglChoosePixelFormat");
267 aglCreateContext_weak = (typeof(aglCreateContext_weak))load_weak("_aglCreateContext");
268 aglDestroyContext_weak = (typeof(aglDestroyContext_weak))load_weak("_aglDestroyContext");
269 aglSetCurrentContext_weak = (typeof(aglSetCurrentContext_weak))load_weak("_aglSetCurrentContext");
270 aglSetDrawable_weak = (typeof(aglSetDrawable_weak))load_weak("_aglSetDrawable");
271 aglSurfaceTexture_weak = (typeof(aglSurfaceTexture_weak))load_weak("_aglSurfaceTexture");
272 aglUpdateContext_weak = (typeof(aglUpdateContext_weak))load_weak("_aglUpdateContext");
273 kCFAllocatorDefault_weak = (typeof(kCFAllocatorDefault_weak))load_weak("_kCFAllocatorDefault");
274 CPSEnableForegroundOperation_weak = (typeof(CPSEnableForegroundOperation_weak))load_weak("_CPSEnableForegroundOperation");
275 CPSSetFrontProcess_weak = (typeof(CPSSetFrontProcess_weak))load_weak("_CPSSetFrontProcess");