Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit 9b61313

Browse files
author
livecodeali
committed
[[ Browser ]] Ensure libbrowser functionality isn't dead stripped
1 parent b32cd42 commit 9b61313

File tree

5 files changed

+159
-72
lines changed

5 files changed

+159
-72
lines changed

docs/notes/bugfix-16436.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Define MC_BROWSER_DLLEXPORT(_DEF) in libbrowser.h identically to MC_DLLEXPORT(_DEF) in foundation.h

libbrowser/include/libbrowser.h

Lines changed: 83 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,28 @@ class MCBrowserFactory : public MCBrowserRefCounted
115115
//
116116
// SYMBOL EXPORTS
117117
//
118+
119+
/* MC_BROWSER_DLLEXPORT should be applied to declarations.
120+
* MC_BROWSER_DLLEXPORT_DEF should be applied to definitions. These MUST
121+
* be applied to functions for which there is a binding in browser.lcb
122+
* to avoid the symbols being dead stripped. */
118123
#ifdef _WIN32
124+
/* On Windows, declaring something as having "dllexport" storage
125+
* modifies the naming of the corresponding symbol, so the export
126+
* attribute must be attached to declarations (and possibly to the
127+
* definition *as well* if no separate declaration appears) */
119128
# ifdef _MSC_VER
120-
# define MC_DLLEXPORT __declspec(dllexport)
129+
# define MC_BROWSER_DLLEXPORT __declspec(dllexport)
121130
# else
122-
# define MC_DLLEXPORT __attribute__((dllexport))
131+
# define MC_BROWSER_DLLEXPORT __attribute__((dllexport))
123132
# endif
133+
# define MC_BROWSER_DLLEXPORT_DEF MC_BROWSER_DLLEXPORT
124134
#else
125-
# define MC_DLLEXPORT __attribute__((__visibility__("default")))
135+
/* On non-Windows platforms, the external visibility of a symbol is
136+
* simply a property of its definition (i.e. whether or not it should
137+
* appear in the list of exported symbols). */
138+
# define MC_BROWSER_DLLEXPORT
139+
# define MC_BROWSER_DLLEXPORT_DEF __attribute__((__visibility__("default"), __used__))
126140
#endif
127141

128142
////////////////////////////////////////////////////////////////////////////////
@@ -131,24 +145,24 @@ class MCBrowserFactory : public MCBrowserRefCounted
131145
extern "C"
132146
{
133147

134-
MC_DLLEXPORT bool MCBrowserLibraryInitialize();
135-
MC_DLLEXPORT void MCBrowserLibraryFinalize();
148+
MC_BROWSER_DLLEXPORT bool MCBrowserLibraryInitialize();
149+
MC_BROWSER_DLLEXPORT void MCBrowserLibraryFinalize();
136150

137151
typedef bool (*MCBrowserAllocator)(size_t p_size, void *&r_mem);
138152
typedef void (*MCBrowserDeallocator)(void *p_mem);
139153
typedef bool (*MCBrowserReallocator)(void *p_mem, size_t p_new_size, void *&r_new_mem);
140154
typedef bool (*MCBrowserWaitFunction)(void);
141155
typedef void (*MCBrowserBreakWaitFunction)(void);
142156

143-
MC_DLLEXPORT void MCBrowserLibrarySetAllocator(MCBrowserAllocator p_alloc);
144-
MC_DLLEXPORT void MCBrowserLibrarySetDeallocator(MCBrowserDeallocator p_dealloc);
145-
MC_DLLEXPORT void MCBrowserLibrarySetReallocator(MCBrowserReallocator p_realloc);
146-
MC_DLLEXPORT void MCBrowserLibrarySetWaitFunction(MCBrowserWaitFunction p_wait);
147-
MC_DLLEXPORT void MCBrowserLibrarySetBreakWaitFunction(MCBrowserBreakWaitFunction p_breakwait);
157+
MC_BROWSER_DLLEXPORT void MCBrowserLibrarySetAllocator(MCBrowserAllocator p_alloc);
158+
MC_BROWSER_DLLEXPORT void MCBrowserLibrarySetDeallocator(MCBrowserDeallocator p_dealloc);
159+
MC_BROWSER_DLLEXPORT void MCBrowserLibrarySetReallocator(MCBrowserReallocator p_realloc);
160+
MC_BROWSER_DLLEXPORT void MCBrowserLibrarySetWaitFunction(MCBrowserWaitFunction p_wait);
161+
MC_BROWSER_DLLEXPORT void MCBrowserLibrarySetBreakWaitFunction(MCBrowserBreakWaitFunction p_breakwait);
148162

149163
typedef void (*MCBrowserRunloopCallback)(void *p_context);
150164

151-
MC_DLLEXPORT bool MCBrowserLibraryGetRunloopCallback(MCBrowserRunloopCallback &r_callback, void *&r_context);
165+
MC_BROWSER_DLLEXPORT bool MCBrowserLibraryGetRunloopCallback(MCBrowserRunloopCallback &r_callback, void *&r_context);
152166

153167
//////////
154168

@@ -166,84 +180,84 @@ enum MCBrowserValueType
166180
kMCBrowserValueTypeDictionary,
167181
};
168182

169-
MC_DLLEXPORT bool MCBrowserListCreate(MCBrowserListRef &r_browser, uint32_t p_size = 0);
170-
MC_DLLEXPORT MCBrowserListRef MCBrowserListRetain(MCBrowserListRef p_list);
171-
MC_DLLEXPORT void MCBrowserListRelease(MCBrowserListRef p_list);
183+
MC_BROWSER_DLLEXPORT bool MCBrowserListCreate(MCBrowserListRef &r_browser, uint32_t p_size = 0);
184+
MC_BROWSER_DLLEXPORT MCBrowserListRef MCBrowserListRetain(MCBrowserListRef p_list);
185+
MC_BROWSER_DLLEXPORT void MCBrowserListRelease(MCBrowserListRef p_list);
172186

173-
MC_DLLEXPORT bool MCBrowserListGetSize(MCBrowserListRef p_list, uint32_t &r_size);
174-
MC_DLLEXPORT bool MCBrowserListGetType(MCBrowserListRef p_list, uint32_t p_index, MCBrowserValueType &r_type);
187+
MC_BROWSER_DLLEXPORT bool MCBrowserListGetSize(MCBrowserListRef p_list, uint32_t &r_size);
188+
MC_BROWSER_DLLEXPORT bool MCBrowserListGetType(MCBrowserListRef p_list, uint32_t p_index, MCBrowserValueType &r_type);
175189

176-
MC_DLLEXPORT bool MCBrowserListSetBoolean(MCBrowserListRef p_list, uint32_t p_index, bool p_value);
177-
MC_DLLEXPORT bool MCBrowserListSetInteger(MCBrowserListRef p_list, uint32_t p_index, int32_t p_value);
178-
MC_DLLEXPORT bool MCBrowserListSetDouble(MCBrowserListRef p_list, uint32_t p_index, double p_value);
179-
MC_DLLEXPORT bool MCBrowserListSetUTF8String(MCBrowserListRef p_list, uint32_t p_index, const char *p_value);
180-
MC_DLLEXPORT bool MCBrowserListSetList(MCBrowserListRef p_list, uint32_t p_index, MCBrowserListRef p_value);
181-
MC_DLLEXPORT bool MCBrowserListSetDictionary(MCBrowserListRef p_list, uint32_t p_index, MCBrowserDictionaryRef p_value);
190+
MC_BROWSER_DLLEXPORT bool MCBrowserListSetBoolean(MCBrowserListRef p_list, uint32_t p_index, bool p_value);
191+
MC_BROWSER_DLLEXPORT bool MCBrowserListSetInteger(MCBrowserListRef p_list, uint32_t p_index, int32_t p_value);
192+
MC_BROWSER_DLLEXPORT bool MCBrowserListSetDouble(MCBrowserListRef p_list, uint32_t p_index, double p_value);
193+
MC_BROWSER_DLLEXPORT bool MCBrowserListSetUTF8String(MCBrowserListRef p_list, uint32_t p_index, const char *p_value);
194+
MC_BROWSER_DLLEXPORT bool MCBrowserListSetList(MCBrowserListRef p_list, uint32_t p_index, MCBrowserListRef p_value);
195+
MC_BROWSER_DLLEXPORT bool MCBrowserListSetDictionary(MCBrowserListRef p_list, uint32_t p_index, MCBrowserDictionaryRef p_value);
182196

183-
MC_DLLEXPORT bool MCBrowserListAppendBoolean(MCBrowserListRef p_list, bool p_value);
184-
MC_DLLEXPORT bool MCBrowserListAppendInteger(MCBrowserListRef p_list, int32_t p_value);
185-
MC_DLLEXPORT bool MCBrowserListAppendDouble(MCBrowserListRef p_list, double p_value);
186-
MC_DLLEXPORT bool MCBrowserListAppendUTF8String(MCBrowserListRef p_list, const char *p_value);
187-
MC_DLLEXPORT bool MCBrowserListAppendList(MCBrowserListRef p_list, MCBrowserListRef p_value);
188-
MC_DLLEXPORT bool MCBrowserListAppendDictionary(MCBrowserListRef p_list, MCBrowserDictionaryRef p_value);
197+
MC_BROWSER_DLLEXPORT bool MCBrowserListAppendBoolean(MCBrowserListRef p_list, bool p_value);
198+
MC_BROWSER_DLLEXPORT bool MCBrowserListAppendInteger(MCBrowserListRef p_list, int32_t p_value);
199+
MC_BROWSER_DLLEXPORT bool MCBrowserListAppendDouble(MCBrowserListRef p_list, double p_value);
200+
MC_BROWSER_DLLEXPORT bool MCBrowserListAppendUTF8String(MCBrowserListRef p_list, const char *p_value);
201+
MC_BROWSER_DLLEXPORT bool MCBrowserListAppendList(MCBrowserListRef p_list, MCBrowserListRef p_value);
202+
MC_BROWSER_DLLEXPORT bool MCBrowserListAppendDictionary(MCBrowserListRef p_list, MCBrowserDictionaryRef p_value);
189203

190-
MC_DLLEXPORT bool MCBrowserListGetBoolean(MCBrowserListRef p_list, uint32_t p_index, bool &r_value);
191-
MC_DLLEXPORT bool MCBrowserListGetInteger(MCBrowserListRef p_list, uint32_t p_index, int32_t &r_value);
192-
MC_DLLEXPORT bool MCBrowserListGetDouble(MCBrowserListRef p_list, uint32_t p_index, double &r_value);
193-
MC_DLLEXPORT bool MCBrowserListGetUTF8String(MCBrowserListRef p_list, uint32_t p_index, char *&r_value);
194-
MC_DLLEXPORT bool MCBrowserListGetList(MCBrowserListRef p_list, uint32_t p_index, MCBrowserListRef &r_value);
195-
MC_DLLEXPORT bool MCBrowserListGetDictionary(MCBrowserListRef p_list, uint32_t p_index, MCBrowserDictionaryRef &r_value);
204+
MC_BROWSER_DLLEXPORT bool MCBrowserListGetBoolean(MCBrowserListRef p_list, uint32_t p_index, bool &r_value);
205+
MC_BROWSER_DLLEXPORT bool MCBrowserListGetInteger(MCBrowserListRef p_list, uint32_t p_index, int32_t &r_value);
206+
MC_BROWSER_DLLEXPORT bool MCBrowserListGetDouble(MCBrowserListRef p_list, uint32_t p_index, double &r_value);
207+
MC_BROWSER_DLLEXPORT bool MCBrowserListGetUTF8String(MCBrowserListRef p_list, uint32_t p_index, char *&r_value);
208+
MC_BROWSER_DLLEXPORT bool MCBrowserListGetList(MCBrowserListRef p_list, uint32_t p_index, MCBrowserListRef &r_value);
209+
MC_BROWSER_DLLEXPORT bool MCBrowserListGetDictionary(MCBrowserListRef p_list, uint32_t p_index, MCBrowserDictionaryRef &r_value);
196210

197211
//////////
198212

199-
MC_DLLEXPORT bool MCBrowserDictionaryCreate(MCBrowserDictionaryRef &r_dict, uint32_t p_size = 0);
200-
MC_DLLEXPORT MCBrowserDictionaryRef MCBrowserDictionaryRetain(MCBrowserDictionaryRef p_dict);
201-
MC_DLLEXPORT void MCBrowserDictionaryRelease(MCBrowserDictionaryRef p_dict);
213+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryCreate(MCBrowserDictionaryRef &r_dict, uint32_t p_size = 0);
214+
MC_BROWSER_DLLEXPORT MCBrowserDictionaryRef MCBrowserDictionaryRetain(MCBrowserDictionaryRef p_dict);
215+
MC_BROWSER_DLLEXPORT void MCBrowserDictionaryRelease(MCBrowserDictionaryRef p_dict);
202216

203-
MC_DLLEXPORT bool MCBrowserDictionaryGetType(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserValueType &r_type);
204-
MC_DLLEXPORT bool MCBrowserDictionaryGetKeys(MCBrowserDictionaryRef p_dict, char **&r_keys, uint32_t &r_count);
217+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetType(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserValueType &r_type);
218+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetKeys(MCBrowserDictionaryRef p_dict, char **&r_keys, uint32_t &r_count);
205219

206220
/* WORKAROUND - Can't currently dereference a Pointer-to-CString at the moment so need to provide key accessor functions */
207-
MC_DLLEXPORT bool MCBrowserDictionaryGetKeyCount(MCBrowserDictionaryRef p_dict, uint32_t &r_count);
208-
MC_DLLEXPORT bool MCBrowserDictionaryGetKey(MCBrowserDictionaryRef p_dict, uint32_t p_index, char *&r_key);
209-
210-
MC_DLLEXPORT bool MCBrowserDictionarySetBoolean(MCBrowserDictionaryRef p_dict, const char *p_key, bool p_value);
211-
MC_DLLEXPORT bool MCBrowserDictionarySetInteger(MCBrowserDictionaryRef p_dict, const char *p_key, int32_t p_value);
212-
MC_DLLEXPORT bool MCBrowserDictionarySetDouble(MCBrowserDictionaryRef p_dict, const char *p_key, double p_value);
213-
MC_DLLEXPORT bool MCBrowserDictionarySetUTF8String(MCBrowserDictionaryRef p_dict, const char *p_key, const char *p_value);
214-
MC_DLLEXPORT bool MCBrowserDictionarySetList(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserListRef p_value);
215-
MC_DLLEXPORT bool MCBrowserDictionarySetDictionary(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserDictionaryRef p_value);
221+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetKeyCount(MCBrowserDictionaryRef p_dict, uint32_t &r_count);
222+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetKey(MCBrowserDictionaryRef p_dict, uint32_t p_index, char *&r_key);
223+
224+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionarySetBoolean(MCBrowserDictionaryRef p_dict, const char *p_key, bool p_value);
225+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionarySetInteger(MCBrowserDictionaryRef p_dict, const char *p_key, int32_t p_value);
226+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionarySetDouble(MCBrowserDictionaryRef p_dict, const char *p_key, double p_value);
227+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionarySetUTF8String(MCBrowserDictionaryRef p_dict, const char *p_key, const char *p_value);
228+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionarySetList(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserListRef p_value);
229+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionarySetDictionary(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserDictionaryRef p_value);
216230

217-
MC_DLLEXPORT bool MCBrowserDictionaryGetBoolean(MCBrowserDictionaryRef p_dict, const char *p_key, bool &r_value);
218-
MC_DLLEXPORT bool MCBrowserDictionaryGetInteger(MCBrowserDictionaryRef p_dict, const char *p_key, int32_t &r_value);
219-
MC_DLLEXPORT bool MCBrowserDictionaryGetDouble(MCBrowserDictionaryRef p_dict, const char *p_key, double &r_value);
220-
MC_DLLEXPORT bool MCBrowserDictionaryGetUTF8String(MCBrowserDictionaryRef p_dict, const char *p_key, char *&r_value);
221-
MC_DLLEXPORT bool MCBrowserDictionaryGetList(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserListRef &r_value);
222-
MC_DLLEXPORT bool MCBrowserDictionaryGetDictionary(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserDictionaryRef &r_value);
231+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetBoolean(MCBrowserDictionaryRef p_dict, const char *p_key, bool &r_value);
232+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetInteger(MCBrowserDictionaryRef p_dict, const char *p_key, int32_t &r_value);
233+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetDouble(MCBrowserDictionaryRef p_dict, const char *p_key, double &r_value);
234+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetUTF8String(MCBrowserDictionaryRef p_dict, const char *p_key, char *&r_value);
235+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetList(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserListRef &r_value);
236+
MC_BROWSER_DLLEXPORT bool MCBrowserDictionaryGetDictionary(MCBrowserDictionaryRef p_dict, const char *p_key, MCBrowserDictionaryRef &r_value);
223237

224238
//////////
225239

226240
typedef class MCBrowser *MCBrowserRef;
227241
typedef class MCBrowserFactory *MCBrowserFactoryRef;
228242

229-
MC_DLLEXPORT bool MCBrowserFactoryGet(const char *p_factory_id, MCBrowserFactoryRef &r_factory);
230-
MC_DLLEXPORT bool MCBrowserFactoryCreateBrowser(MCBrowserFactoryRef p_factory, void *p_display, void *p_parent_view, MCBrowserRef &r_browser);
243+
MC_BROWSER_DLLEXPORT bool MCBrowserFactoryGet(const char *p_factory_id, MCBrowserFactoryRef &r_factory);
244+
MC_BROWSER_DLLEXPORT bool MCBrowserFactoryCreateBrowser(MCBrowserFactoryRef p_factory, void *p_display, void *p_parent_view, MCBrowserRef &r_browser);
231245

232-
MC_DLLEXPORT MCBrowserRef MCBrowserRetain(MCBrowserRef p_browser);
233-
MC_DLLEXPORT void MCBrowserRelease(MCBrowserRef p_browser);
246+
MC_BROWSER_DLLEXPORT MCBrowserRef MCBrowserRetain(MCBrowserRef p_browser);
247+
MC_BROWSER_DLLEXPORT void MCBrowserRelease(MCBrowserRef p_browser);
234248

235-
MC_DLLEXPORT void *MCBrowserGetNativeLayer(MCBrowserRef p_browser);
249+
MC_BROWSER_DLLEXPORT void *MCBrowserGetNativeLayer(MCBrowserRef p_browser);
236250

237-
MC_DLLEXPORT bool MCBrowserGetBoolProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, bool &r_value);
238-
MC_DLLEXPORT bool MCBrowserSetBoolProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, bool p_value);
251+
MC_BROWSER_DLLEXPORT bool MCBrowserGetBoolProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, bool &r_value);
252+
MC_BROWSER_DLLEXPORT bool MCBrowserSetBoolProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, bool p_value);
239253

240-
MC_DLLEXPORT bool MCBrowserGetStringProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, char *&r_utf8_string);
241-
MC_DLLEXPORT bool MCBrowserSetStringProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, const char *p_utf8_string);
254+
MC_BROWSER_DLLEXPORT bool MCBrowserGetStringProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, char *&r_utf8_string);
255+
MC_BROWSER_DLLEXPORT bool MCBrowserSetStringProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, const char *p_utf8_string);
242256

243-
MC_DLLEXPORT bool MCBrowserGoBack(MCBrowserRef p_browser);
244-
MC_DLLEXPORT bool MCBrowserGoForward(MCBrowserRef p_browser);
245-
MC_DLLEXPORT bool MCBrowserGoToURL(MCBrowserRef p_browser, const char *p_url);
246-
MC_DLLEXPORT bool MCBrowserEvaluateJavaScript(MCBrowserRef p_browser, const char *p_script, char *&r_result);
257+
MC_BROWSER_DLLEXPORT bool MCBrowserGoBack(MCBrowserRef p_browser);
258+
MC_BROWSER_DLLEXPORT bool MCBrowserGoForward(MCBrowserRef p_browser);
259+
MC_BROWSER_DLLEXPORT bool MCBrowserGoToURL(MCBrowserRef p_browser, const char *p_url);
260+
MC_BROWSER_DLLEXPORT bool MCBrowserEvaluateJavaScript(MCBrowserRef p_browser, const char *p_script, char *&r_result);
247261

248262
enum MCBrowserRequestType
249263
{
@@ -261,8 +275,8 @@ enum MCBrowserRequestState
261275
typedef void (*MCBrowserRequestCallback)(void *p_context, MCBrowserRef p_browser, MCBrowserRequestType p_type, MCBrowserRequestState p_state, bool p_in_frame, const char *p_url, const char *p_error);
262276
typedef void (*MCBrowserJavaScriptCallback)(void *p_context, MCBrowserRef p_browser, const char *p_handler, MCBrowserListRef p_params);
263277

264-
MC_DLLEXPORT bool MCBrowserSetRequestHandler(MCBrowserRef p_browser, MCBrowserRequestCallback p_callback, void *p_context);
265-
MC_DLLEXPORT bool MCBrowserSetJavaScriptHandler(MCBrowserRef p_browser, MCBrowserJavaScriptCallback p_callback, void *p_context);
278+
MC_BROWSER_DLLEXPORT bool MCBrowserSetRequestHandler(MCBrowserRef p_browser, MCBrowserRequestCallback p_callback, void *p_context);
279+
MC_BROWSER_DLLEXPORT bool MCBrowserSetJavaScriptHandler(MCBrowserRef p_browser, MCBrowserJavaScriptCallback p_callback, void *p_context);
266280

267281
}
268282

0 commit comments

Comments
 (0)