[MacRuby-devel] are framework extern variables visible in Mac Ruby?
russell muetzelfeldt
russm-macruby-devel at slofith.org
Sat Apr 10 03:08:41 PDT 2010
> Hi Russell,
>
> Sorry for the late response.
no worries... :)
> OpenDirectory.framework ships with BridgeSupport annotations, so doing "framework 'OpenDirectory'" should merge all symbols into MacRuby. If some are missing, it's likely a bug in the BridgeSupport generator, that should be reported via http://bugreport.apple.com.
cool - shall do... I wasn't doing that until I had some evidence it wasn't just me missing something...
> Fortunately, we are working on a new BridgeSupport generator which might already fix this issue, but it's not ready yet for prime time. In the meantime I recommend to wrap the symbols/APIs you need inside an Objective-C class and call it from MacRuby.
I've ended up just running the relevant OpenDirectory headers through perl to generate an opendirectory/constants.rb that I pull into the other stuff I'm doing - pretty straightforward once I figured out where the strings I was after lived... in case anyone finds it useful, here's gen-constants.sh which pulls in both the enum constants and the extern NSString "constants" into a single ruby file...
#!/bin/sh
target_dir=$(dirname "$0")/../lib/opendirectory
target_file=${target_dir}/constants.rb
cat <<HEADER > $target_file
module OpenDirectory
module Constants
HEADER
# enum constants
curl 'http://www.opensource.apple.com/source/OpenDirectory/OpenDirectory-57/CFOpenDirectoryConstants.h?txt' | \
perl -ne 'next unless /^\s*kOD([A-Za-z]+)\s*=\s*(0x[0-9a-fA-F]+)/; print qq( $1 = $2\n)' >> $target_file
# string "constants"
curl 'http://www.opensource.apple.com/source/OpenDirectory/OpenDirectory-57/CFOpenDirectoryConstants.c?txt' | \
perl -ne 'next unless /^\s*CFStringRef\s+kOD([[:alpha:]]+)\s*=\s*CFSTR\((".*?")\)/; print qq( $1 = $2\n)' >> $target_file
cat <<FOOTER >> $target_file
end
end
FOOTER
More information about the MacRuby-devel
mailing list