Changeset - 36b188563094
[Not reviewed]
v1.0 default
0 1 2
Roeland Merks - 15 years ago 2010-12-01 14:34:34
roeland.merks@cwi.nl
Corrected some problems with software deployment on MacOSX.

--
user: Roeland Merks <roeland.merks@cwi.nl>
branch 'default'
added doc/mac-deploy-howto.txt
added src/perl/deploymodel.pl
changed src/VirtualLeaf.pro
3 files changed with 113 insertions and 20 deletions:
0 comments (0 inline, 0 general)
doc/mac-deploy-howto.txt
Show inline comments
 
new file 100644
 
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!
 

	
src/VirtualLeaf.pro
Show inline comments
 
@@ -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
src/perl/deploymodel.pl
Show inline comments
 
new file 100644
 
#!/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 <http://www.gnu.org/licenses/>.
 
#
 
#  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
 
    <deps>;
 

	
 
    while (<deps>) {
 
	# 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
0 comments (0 inline, 0 general)