# HG changeset patch # User Roeland Merks # Date 2010-12-01 14:34:34 # Node ID 36b1885630942d1d6e4245c411b073c238717830 # Parent 7c51085c079716045aee20fb707151b7e3273346 Corrected some problems with software deployment on MacOSX. -- user: Roeland Merks branch 'default' added doc/mac-deploy-howto.txt added src/perl/deploymodel.pl changed src/VirtualLeaf.pro diff --git a/doc/mac-deploy-howto.txt b/doc/mac-deploy-howto.txt new file mode 100644 --- /dev/null +++ b/doc/mac-deploy-howto.txt @@ -0,0 +1,17 @@ +RM - 01 dec 2010 + +Deploying VirtualLeaf for Mac +1. Build the package: cd src; export QMAKESPEC=macx-g++; make; +2. Run "deploymodel.pl" as follows: +> cd ../bin; perl ../src/perl/deploymodel.pl VirtualLeaf +3. Run "macdeployqt" as follows +> macdeployqt VirtualLeaf.app +4. Build the installer using PackageMaker: +- cd ../src; open VirtualLeaf-install-macosx.pmdoc +- Under "Contents->VirtualLeaf, click on VirtualLeaf +- Choose tab "Components" +- Deselect "Allow relocation" +- Click "Build" + +... I know it's quite a hassle, but if you follow these steps carefully the package and model plugins should work on a Mac without Qt installed... Good luck! + diff --git a/src/VirtualLeaf.pro b/src/VirtualLeaf.pro --- a/src/VirtualLeaf.pro +++ b/src/VirtualLeaf.pro @@ -198,26 +198,9 @@ contains( GRAPHICS, x11 ) { # MACOSX packaging macx { ICON = leaficon.icns -QMAKE_POST_LINK = "\ - #install_name_tool -change libqwt.5.dylib $$QWTDIR/lib/libqwt.dylib $${TARGET}.app/Contents/MacOS/$${TARGET}; \ - cp leaficon.icns $${DESTDIR}/$${TARGET}.app; \ - cp ../doc/gpl3.txt $${DESTDIR}/$${TARGET}.app/Contents/MacOS/. ; \ - mkdir $${DESTDIR}/$${TARGET}.app/Contents/Frameworks; \ - cp -R /Library/Frameworks/QtCore.framework $${DESTDIR}/$${TARGET}.app/Contents/Frameworks; \ - cp -R /Library/Frameworks/QtGui.framework $${DESTDIR}/$${TARGET}.app/Contents/Frameworks; \ - cp -R /Library/Frameworks/Qt3Support.framework $${DESTDIR}/$${TARGET}.app/Contents/Frameworks; \ - #cp /usr/local/qwt/lib/libqwt.dylib $${DESTDIR}/$${TARGET}.app/Contents/Frameworks; \ - #install_name_tool -id @executable_path/../Frameworks/libqwt.dylib $${DESTDIR}/$${TARGET}.app/Contents/Frameworks/libqwt.dylib; \ - install_name_tool -change /usr/local/qwt/lib/libqwt.dylib @executable_path/../Frameworks/libqwt.dylib $${DESTDIR}/$${TARGET}.app/Contents/MacOS/$${TARGET};\ - install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Versions/Current/QtCore $${DESTDIR}/$${TARGET}.app/Contents/Frameworks/QtCore.framework/Versions/4.0/QtCore; \ - install_name_tool -id @executable_path/../Frameworks/QtGui.framework/Versions/Current/QtGui $${DESTDIR}/$${TARGET}.app/Contents/Frameworks/QtGui.framework/Versions/4.0/QtGui; \ - install_name_tool -id @executable_path/../Frameworks/Qt3Support.framework/Versions/Current/Qt3Support $${DESTDIR}/$${TARGET}.app/Contents/Frameworks/Qt3Support.framework/Versions/4.0/Qt3Support; \ - install_name_tool -change Frameworks/QtCore.framework/Versions/Current/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore $${DESTDIR}/$${TARGET}.app/Contents/MacOS/$${TARGET}; \ - install_name_tool -change Frameworks/QtGui.framework/Versions/Current/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/4.0/QtGui $${DESTDIR}/$${TARGET}.app/Contents/MacOS/$${TARGET}; \ - install_name_tool -change Frameworks/Qt3Support.framework/Versions/Current/Qt3Support @executable_path/../Frameworks/Qt3Support.framework/Versions/4.0/Qt3Support $${DESTDIR}/$${TARGET}.app/Contents/MacOS/$${TARGET}; \ - install_name_tool -change Frameworks/QtCore.framework/Versions/Current/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore $${DESTDIR}/$${TARGET}.app/Contents/Frameworks/Qt3Support.framework/Versions/4.0/Qt3Support; \ - install_name_tool -change Frameworks/QtGui.framework/Versions/Current/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/4.0/QtGui $${DESTDIR}/$${TARGET}.app/Contents/Frameworks/Qt3Support.framework/Versions/4.0/Qt3Support; \ - install_name_tool -change Frameworks/QtCore.framework/Versions/Current/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4.0/QtCore $${DESTDIR}/$${TARGET}.app/Contents/Frameworks/Qt3Support.framework/Versions/4.0/Qt3Support; " +QMAKE_POST_LINK = "cp leaficon.icns $${DESTDIR}/$${TARGET}.app; \ + cp ../doc/gpl3.txt $${DESTDIR}/$${TARGET}.app/Contents/MacOS/.;" } +# cd $${BINDIR}; perl ../src/perl/deployapp.pl $${TARGET};" # finis diff --git a/src/perl/deploymodel.pl b/src/perl/deploymodel.pl new file mode 100644 --- /dev/null +++ b/src/perl/deploymodel.pl @@ -0,0 +1,93 @@ +#!/usr/bin/perl + +# +# $Id$ +# +# This file is part of the Virtual Leaf. +# +# The Virtual Leaf is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# The Virtual Leaf is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with the Virtual Leaf. If not, see . +# +# Copyright 2010 Roeland Merks. +# +# + +# get dependencies for executable +sub get_frameworks { + my $exec = shift; + my @frameworks = (); + my $fw; +# print "get_frameworks says: exec = $exec\n"; + open deps, "otool -L $exec |"; + # omit first line + ; + + while () { + # look for lines with ".framework", that do not start with / or @. + if (/\.framework/ && !/^[ \t]*\// && !/^[ \t]*\@/) { + chomp; + @line = split; + $f = $line[0]; + # get framework directory name + @line = split(/\//,$f); + for $d (@line) { + if ($d =~ /\.framework/) { + $fw = $d; +# print "get_framework finds framework $d\n"; + last; + } + } + if (defined($fw)) { +# print "get_frameworks pushes $fw on stack\n"; + push @frameworks, $fw; + } + } + } + @frameworks; +} + +$app = $ARGV[0]; +$appdir = $app.".app"; +if ($appdir =~ /\.app\.app/) { + $appdir = $ARGV[0]; +} +$exec = $appdir."/Contents/MacOS/$app"; + +@frameworks = get_frameworks( $exec ); + +# do the same for additional libs not in a framework depending on frameworks (e.g. libqwt...) +#@additionallibs = ( "libqwt.dylib" ); +$modeldir = "models"; +@models = (); +opendir (MODELS, "$modeldir") or die "Could not open directory, $!"; +while ($file = readdir MODELS) { + + + if ($file =~ /^.*\.dylib/) { + print "$file\n"; + push @models, $file; + } +} +closedir MODELS; + +for $model (@models) { + print "Doing model: $model\n"; + my @frameworks_of_model = get_frameworks ( "$modeldir/$model" ); + for $fwfw (@frameworks_of_model) { + # print "$fwfw\n"; + $liblib = $fwfw; $liblib =~ s/\.framework//g; + system "install_name_tool -change $fwfw/Versions/4/$liblib \@executable_path/../Frameworks/$fwfw/Versions/4/$liblib $modeldir/$model"; + } +} + +# finis