summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--macosx/tclMacOSXBundle.c22
2 files changed, 26 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e67637a..913521e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-07-20 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXBundle.c: dynamically acquire address for
+ CFBundleOpenBundleResourceMap symbol, since it is only present in
+ full CoreFoundation on Mac OS X and not in CFLite on pure Darwin.
+
2004-07-19 Jeff Hobbs <jeffh@ActiveState.com>
* unix/Makefile.in, unix/tcl.m4: move (C|LD)FLAGS after their
diff --git a/macosx/tclMacOSXBundle.c b/macosx/tclMacOSXBundle.c
index 5018aa8..8d50494 100644
--- a/macosx/tclMacOSXBundle.c
+++ b/macosx/tclMacOSXBundle.c
@@ -52,6 +52,7 @@
*/
#include <CoreFoundation/CoreFoundation.h>
+#include <mach-o/dyld.h>
#include "tcl.h"
/*
@@ -167,8 +168,25 @@ Tcl_MacOSXOpenVersionedBundleResources(
if (bundleRef) {
if (hasResourceFile) {
- short refNum;
- refNum = CFBundleOpenBundleResourceMap(bundleRef);
+ /* Dynamically acquire address for CFBundleOpenBundleResourceMap
+ * symbol, since it is only present in full CoreFoundation
+ * on Mac OS X and not in CFLite on pure Darwin. */
+ static int initialized = FALSE;
+ static short (*openresourcemap)(CFBundleRef) = NULL;
+ if(!initialized) {
+ NSSymbol nsSymbol = NULL;
+ if(NSIsSymbolNameDefinedWithHint("_CFBundleOpenBundleResourceMap", "CoreFoundation")) {
+ nsSymbol = NSLookupAndBindSymbolWithHint("_CFBundleOpenBundleResourceMap", "CoreFoundation");
+ if(nsSymbol) {
+ openresourcemap = NSAddressOfSymbol(nsSymbol);
+ }
+ }
+ initialized = TRUE;
+ }
+ if (openresourcemap) {
+ short refNum;
+ refNum = openresourcemap(bundleRef);
+ }
}
libURL = CFBundleCopyResourceURL(bundleRef,