#!/bin/bash ABORT="\033[31mAbort:\033[00m" SUCCESS="\033[32mSuccess:\033[00m" INFO="\033[33mInfo:\033[00m" MY_PATH=`dirname "$0"` cd $MY_PATH echo -e $INFO "Creating app bundle for MacOSX." BUNDLE_NAME="@MACOSX_BUNDLE_NAME@" APP_NAME="@MACOSX_BINARY_NAME@" DYNLIB_PATHS=(@MACOSX_DYNAMIC_LIBRARIES@) if [ "$1" = "trial" ] then echo -e $INFO "Trial bundle" BUNDLE_NAME="${BUNDLE_NAME}_Trial" APP_NAME="${APP_NAME}_trial" echo $BUNDLE_NAME echo $APP_NAME fi VERSION_STRING=$(git describe --long) VERSION_STRING="${VERSION_STRING//-/_}" VERSION_STRING="${VERSION_STRING//./_}" VERSION_STRING="${VERSION_STRING%_*}" PACKAGE_DIR=${BUNDLE_NAME}_${VERSION_STRING} QT_DIR="@MACOSX_QT_DIR@" QT_FRAMEWORK_PATHS=(/Users/ebsi/Documents/Qt/5.6/clang_64/lib/QtDBus.framework/Versions/5/QtDBus @MACOSX_QT_FRAMEWORKS@) if [ ! -x "$APP_NAME" ] then echo -e $ABORT "Executable $APP_NAME does not exist." exit 1 fi if [ ! -e "bundle_info.plist" ] then echo -e $ABORT "bundle_info.plist does not exist." exit 1 fi if [ -d "$PACKAGE_DIR" ] then echo -e $INFO "Removing old package." rm -rf $PACKAGE_DIR rm ${PACKAGE_DIR}.dmg fi BUNDLE_PATH=$PACKAGE_DIR/$BUNDLE_NAME.app BIN_DIR=$BUNDLE_PATH/Contents/MacOS DYNLIB_DIR=$BUNDLE_PATH/Contents/lib PLUGIN_DIR=$BUNDLE_PATH/Contents/PlugIns FRAMEWORK_DIR=$BUNDLE_PATH/Contents/Frameworks RES_DIR=$BUNDLE_PATH/Contents/Resources APP_PATH=$BIN_DIR/$APP_NAME echo -e $INFO "Creating bundle folders." mkdir -p $BIN_DIR mkdir -p $DYNLIB_DIR mkdir -p $PLUGIN_DIR mkdir -p $FRAMEWORK_DIR mkdir -p $RES_DIR echo -e $INFO "Copying top level contents." mkdir -p $PACKAGE_DIR/plugins/visual_studio/ cp -r ../../../ide_plugins/vs/coati_plugin_vs.vsix $PACKAGE_DIR/plugins/visual_studio/ cp -R ../../../ide_plugins/sublime_text $PACKAGE_DIR/plugins/sublime_text/ cp -R ../../../ide_plugins/vim $PACKAGE_DIR/plugins/vim/ cp ../data/gui/installer/EULA.rtf $PACKAGE_DIR/EULA.rtf ln -s /Applications $PACKAGE_DIR/Applications echo -e $INFO "Copying bundle contents." cp $APP_NAME $APP_PATH if [ "$1" = "trial" ] then cp bundle_info_trial.plist $BUNDLE_PATH/Contents/Info.plist else cp bundle_info.plist $BUNDLE_PATH/Contents/Info.plist fi mkdir -p $RES_DIR/data mkdir -p $RES_DIR/data/projects cp -R ../data/color_schemes $RES_DIR/data/color_schemes cp -R ../data/fonts $RES_DIR/data/fonts cp -R ../data/gui $RES_DIR/data/gui cp -R ../data/java $RES_DIR/data/java cp -R ../data/projects/tictactoe $RES_DIR/data/projects/tictactoe cp -R ../data/projects/tutorial $RES_DIR/data/projects/tutorial cp -R ../data/projects/javaparser $RES_DIR/data/projects/javaparser if [ ! "$1" = "trial" ] then rm $RES_DIR/data/projects/tictactoe/tictactoe.coatidb rm $RES_DIR/data/projects/tutorial/tutorial.coatidb fi mkdir -p $RES_DIR/user mkdir -p $RES_DIR/user/log cp ../user/window_settings.ini $RES_DIR/user/window_settings.ini cp ../user/ApplicationSettings_for_package.xml $RES_DIR/user/ApplicationSettings.xml echo -e $INFO "Copying dynamic libraries." for LIB_PATH in ${DYNLIB_PATHS[@]} do LIB_NAME=$(basename $LIB_PATH) cp $LIB_PATH $DYNLIB_DIR/$LIB_NAME install_name_tool -change $LIB_NAME @executable_path/../lib/$LIB_NAME $APP_PATH install_name_tool -change @rpath/$LIB_NAME @executable_path/../lib/$LIB_NAME $APP_PATH echo "lib" $LIB_PATH $LIB_NAME done # echo -e $INFO "Fixing lib dependencies" # install_name_tool -change libboost_system.dylib @executable_path/../lib/libboost_system.dylib $DYNLIB_DIR/libboost_filesystem.dylib # otool -L $DYNLIB_DIR/libboost_filesystem.dylib echo -e $INFO "Copying Plugins" mkdir -p $PLUGIN_DIR/platforms mkdir -p $PLUGIN_DIR/imageformats cp $QT_DIR/plugins/platforms/libqcocoa.dylib $PLUGIN_DIR/platforms/libqcocoa.dylib cp $QT_DIR/plugins/imageformats/libqgif.dylib $PLUGIN_DIR/imageformats/libqgif.dylib echo -e $INFO "Copying frameworks." for FRAMEWORK_BIN_PATH in ${QT_FRAMEWORK_PATHS[@]} do FRAMEWORK_PATH=$(echo $FRAMEWORK_BIN_PATH | grep -o "\S*.framework") FRAMEWORK_NAME=$(echo $FRAMEWORK_BIN_PATH | grep -o "\w*.framework") cp -R $FRAMEWORK_PATH $FRAMEWORK_DIR/$FRAMEWORK_NAME FRAMEWORK_SUB_PATH=$(echo $FRAMEWORK_BIN_PATH | grep -o "\w*.framework\S*") install_name_tool -id @executable_path/../Frameworks/$FRAMEWORK_SUB_PATH $FRAMEWORK_DIR/$FRAMEWORK_SUB_PATH install_name_tool -change @rpath/$FRAMEWORK_SUB_PATH @executable_path/../Frameworks/$FRAMEWORK_SUB_PATH $APP_PATH echo "framework" $FRAMEWORK_BIN_PATH $FRAMEWORK_PATH done # http://qt-project.org/doc/qt-4.8/deployment-mac.html echo -e $INFO "Fixing framework dependencies" install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore $FRAMEWORK_DIR/QtGui.framework/Versions/5/QtGui install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore $FRAMEWORK_DIR/QtWidgets.framework/Versions/5/QtWidgets install_name_tool -change @rpath/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui $FRAMEWORK_DIR/QtWidgets.framework/Versions/5/QtWidgets install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore $FRAMEWORK_DIR/QtPrintSupport.framework/Versions/5/QtPrintSupport install_name_tool -change @rpath/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui $FRAMEWORK_DIR/QtPrintSupport.framework/Versions/5/QtPrintSupport install_name_tool -change @rpath/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets $FRAMEWORK_DIR/QtPrintSupport.framework/Versions/5/QtPrintSupport install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore $PLUGIN_DIR/platforms/libqcocoa.dylib install_name_tool -change @rpath/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui $PLUGIN_DIR/platforms/libqcocoa.dylib install_name_tool -change @rpath/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets $PLUGIN_DIR/platforms/libqcocoa.dylib install_name_tool -change @rpath/QtPrintSupport.framework/Versions/5/QtPrintSupport @executable_path/../Frameworks/QtPrintSupport.framework/Versions/5/QtPrintSupport $PLUGIN_DIR/platforms/libqcocoa.dylib install_name_tool -change @rpath/QtDBus.framework/Versions/5/QtDBus @executable_path/../Frameworks/QtDBus.framework/Versions/5/QtDBus $PLUGIN_DIR/platforms/libqcocoa.dylib install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore $PLUGIN_DIR/imageformats/libqgif.dylib install_name_tool -change @rpath/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui $PLUGIN_DIR/imageformats/libqgif.dylib install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore $FRAMEWORK_DIR/QtDBus.framework/Versions/5/QtDBus install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore $FRAMEWORK_DIR/QtNetwork.framework/Versions/5/QtNetwork install_name_tool -change @rpath/QtDBus.framework/Versions/5/QtDBus @executable_path/../Frameworks/QtDBus.framework/Versions/5/QtDBus $FRAMEWORK_DIR/QtNetwork.framework/Versions/5/QtNetwork otool -L $FRAMEWORK_DIR/QtCore.framework/Versions/5/QtCore otool -L $FRAMEWORK_DIR/QtGui.framework/Versions/5/QtGui otool -L $FRAMEWORK_DIR/QtWidgets.framework/Versions/5/QtWidgets otool -L $FRAMEWORK_DIR/QtPrintSupport.framework/Versions/5/QtPrintSupport otool -L $FRAMEWORK_DIR/QtDBus.framework/Versions/5/QtDBus otool -L $FRAMEWORK_DIR/QtNetwork.framework/Versions/5/QtNetwork otool -L $PLUGIN_DIR/platforms/libqcocoa.dylib otool -L $PLUGIN_DIR/imageformats/libqgif.dylib echo -e $INFO "App dependencies" otool -L $APP_PATH echo -e $INFO "Create icon" ICON=../data/gui/icon/logo_1024_1024.png ICON_SET=$RES_DIR/icon.iconset mkdir -p $ICON_SET convert $ICON -resize 16x16 $ICON_SET/icon_16x16.png convert $ICON -resize 32x32 $ICON_SET/icon_16x16@2x.png convert $ICON -resize 32x32 $ICON_SET/icon_32x32.png convert $ICON -resize 64x64 $ICON_SET/icon_32x32@2x.png convert $ICON -resize 128x128 $ICON_SET/icon_128x128.png convert $ICON -resize 256x256 $ICON_SET/icon_128x128@2x.png convert $ICON -resize 256x256 $ICON_SET/icon_256x256.png convert $ICON -resize 512x512 $ICON_SET/icon_256x256@2x.png convert $ICON -resize 512x512 $ICON_SET/icon_512x512.png convert $ICON -resize 1024x1024 $ICON_SET/icon_512x512@2x.png iconutil -c icns -o $RES_DIR/icon.icns $ICON_SET echo -e $INFO "Create project icon" ICON=../data/gui/icon/project_256_256.png ICON_SET=$RES_DIR/project.iconset mkdir -p $ICON_SET convert $ICON -resize 16x16 $ICON_SET/icon_16x16.png convert $ICON -resize 32x32 $ICON_SET/icon_16x16@2x.png convert $ICON -resize 32x32 $ICON_SET/icon_32x32.png convert $ICON -resize 64x64 $ICON_SET/icon_32x32@2x.png convert $ICON -resize 64x64 $ICON_SET/icon_64x64.png convert $ICON -resize 128x128 $ICON_SET/icon_64x64@2x.png convert $ICON -resize 128x128 $ICON_SET/icon_128x128.png convert $ICON -resize 256x256 $ICON_SET/icon_128x128@2x.png convert $ICON -resize 256x256 $ICON_SET/icon_256x256.png convert $ICON -resize 512x512 $ICON_SET/icon_256x256@2x.png convert $ICON -resize 512x512 $ICON_SET/icon_512x512.png convert $ICON -resize 1024x1024 $ICON_SET/icon_512x512@2x.png iconutil -c icns -o $RES_DIR/project.icns $ICON_SET echo -e $INFO "Obfuscate binary" # upx -1 $APP_PATH upx --best $APP_PATH echo -e $INFO "create DMG" hdiutil create ${PACKAGE_DIR}.dmg -volname ${PACKAGE_DIR} -srcfolder ${PACKAGE_DIR} echo -e $SUCCESS "Installed bundle successfully!"