Based on a document written by Fulvio, a while ago, I finally spent time writing a make file that will automatically create an embedded version of Firebird that will run on MacOSX as a bundle. All you do is make a normal build of Firebird Classic and then use this make file to create the Firebird.app folder which is set up in a way that allows you to access a database via isql for example without the need for a full framework. The make file detailed below was written for Firebird 2.5.x
To make a Classic version of Firebird for MacOSX:
./configure
make
cd gen
make -B -f Makefile.install
Then you can use the following make file to create an embedded version.
FBE=../gen/firebird/Firebird.app
BINLOC=../gen/firebird/Firebird.app/Contents/MacOS/firebird/bin
LIBLOC=../gen/firebird/Firebird.app/Contents/MacOS/firebird
OLDPATH=/Library/Frameworks/Firebird.framework/Versions/A/Libraries
all:
-$(RM) -rf $(FBE) ../gen/firebird/Firebird.app
mkdir -p $(FBE)/Contents
mkdir -p $(FBE)/Contents/MacOS
mkdir -p $(FBE)/Contents/Resources
mkdir -p $(FBE)/Contents/Frameworks
mkdir -p $(FBE)/Contents/Plugins
mkdir -p $(FBE)/Contents/SharedSupport
mkdir -p $(FBE)/Contents/MacOS/firebird
mkdir -p $(FBE)/Contents/MacOS/firebird/bin
mkdir -p $(FBE)/Contents/MacOS/firebird/intl
cp ../builds/install/misc/firebird.conf.in $(FBE)/Contents/MacOS/firebird.edit
cp ../gen/firebird/firebird.msg $(FBE)/Contents/MacOS/firebird/firebird.msg
cp ../gen/firebird/lib/libfbembed.dylib $(FBE)/Contents/MacOS/firebird/libfbembed.dylib
cp ../gen/firebird/lib/libicudata.dylib $(FBE)/Contents/MacOS/firebird/libicudata.dylib
cp ../gen/firebird/lib/libicui18n.dylib $(FBE)/Contents/MacOS/firebird/libicui18n.dylib
cp ../gen/firebird/lib/libicuuc.dylib $(FBE)/Contents/MacOS/firebird/libicuuc.dylib
cp ../gen/firebird/security2.fdb $(FBE)/Contents/MacOS/firebird/security2.fdb
cp ../gen/firebird/bin/gbak $(FBE)/Contents/MacOS/firebird/bin/gbak
cp ../gen/firebird/bin/isql $(FBE)/Contents/MacOS/firebird/bin/isql
cp ../builds/install/misc/fbintl.conf $(FBE)/Contents/MacOS/firebird/intl/fbintl.conf
cp ../gen/firebird/intl/libfbintl.dylib $(FBE)/Contents/MacOS/firebird/intl/libfbintl.dylib
cp ../builds/install/arch-specific/darwin/embed.Info.plist $(FBE)/Contents/Info.plist
sed s'/#RootDirectory =/RootDirectory = .\/firebird/' <$(FBE)/Contents/MacOS/firebird.edit >$(FBE)/Contents/MacOS/firebird.conf
rm $(FBE)/Contents/MacOS/firebird.edit
install_name_tool -change /Library/Frameworks/Firebird.framework/Versions/A/Firebird \
../libfbembed.dylib $(BINLOC)/isql
install_name_tool -change /Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicuuc.dylib \
../libicuuc.dylib $(BINLOC)/isql
install_name_tool -change /Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicudata.dylib \
../libicudata.dylib $(BINLOC)/isql
install_name_tool -change /Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicui18n.dylib \
../libicui18n.dylib $(BINLOC)/isql
install_name_tool -change /Library/Frameworks/Firebird.framework/Versions/A/Firebird \
../libfbembed.dylib $(BINLOC)/gbak
install_name_tool -change /Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicuuc.dylib \
../libicuuc.dylib $(BINLOC)/gbak
install_name_tool -change /Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicudata.dylib \
../libicudata.dylib $(BINLOC)/gbak
install_name_tool -change /Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicui18n.dylib \
../libicui18n.dylib $(BINLOC)/gbak
install_name_tool -change $(OLDPATH)/libicuuc.dylib @loader_path/libicuuc.dylib \
$(LIBLOC)/libfbembed.dylib
install_name_tool -change $(OLDPATH)/libicudata.dylib @loader_path/libicudata.dylib \
$(LIBLOC)/libfbembed.dylib
install_name_tool -change $(OLDPATH)/libicui18n.dylib @loader_path/libicui18n.dylib \
$(LIBLOC)/libfbembed.dylib
install_name_tool -change $(OLDPATH)/libicudata.dylib @loader_path/libicudata.dylib \
$(LIBLOC)/libicuuc.dylib
install_name_tool -change $(OLDPATH)/libicuuc.dylib @loader_path/libicuuc.dylib \
$(LIBLOC)/libicui18n.dylib
install_name_tool -change $(OLDPATH)/libicudata.dylib @loader_path/libicudata.dylib \
$(LIBLOC)/libicui18n.dylib
You can now tar a copy of the Firebird.app directory (and underlying), place anywhere on your system,
and set the RootDirectory in firebird.conf, or set the FIREBIRD environment variable to the relevant location of the firebird directory in Firebird.app, and your application should run if placed in the same directory.
I am hoping that this will generate some comments/feedback, as it is still under test at the moment.
Would Mac users like this committed to SVN? Should we produce a dedicated MacOSX embedded build along with the others (32bit/64bit/lipo)?
Thursday, September 20, 2012
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment