summaryrefslogtreecommitdiffstats
path: root/src/libs/ifwtools/resources/copylibsintobundle.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/ifwtools/resources/copylibsintobundle.sh')
-rw-r--r--src/libs/ifwtools/resources/copylibsintobundle.sh189
1 files changed, 189 insertions, 0 deletions
diff --git a/src/libs/ifwtools/resources/copylibsintobundle.sh b/src/libs/ifwtools/resources/copylibsintobundle.sh
new file mode 100644
index 000000000..1ad5da4db
--- /dev/null
+++ b/src/libs/ifwtools/resources/copylibsintobundle.sh
@@ -0,0 +1,189 @@
+#!/bin/sh
+#############################################################################
+##
+## Copyright (C) 2017 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the Qt Installer Framework.
+##
+## $QT_BEGIN_LICENSE:GPL-EXCEPT$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 as published by the Free Software
+## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+# this script puts all libs directly needed by the bundle into it
+
+QTDIR=""
+IS_DEBUG=0
+HAVE_CORE=0
+HAVE_SVG=0
+HAVE_PHONON=0
+HAVE_SCRIPT=0
+HAVE_SQL=0
+HAVE_WEBKIT=0
+
+function handleFile()
+{
+ local FILE=$1
+ local BUNDLE=$2
+
+ # all dynamic libs directly needed by the bundle, which are not in /System/Library or in /usr/lib (which are system default libs, which we don't want)
+ local LIBS=`xcrun otool -L $FILE | grep -v 'executable_path' | grep -v '/System/Library' | grep -v '/usr/lib' | grep '/' | sed -ne 's,^ *\(.*\) (.*,\1,p'`
+
+ local lib
+ for lib in $LIBS; do
+ local NAME=`basename $lib`
+
+ if echo $NAME | grep 'QtCore' >/dev/null; then
+ HAVE_CORE=1
+ QTDIR=`echo $lib | sed -ne 's,^\(.*\)/lib/[^/]*QtCore.*$,\1,p'`
+ if echo $NAME | grep 'debug' >/dev/null; then
+ IS_DEBUG=1
+ fi
+ elif echo $NAME | grep 'QtSvg' >/dev/null; then
+ HAVE_SVG=1
+ elif echo $NAME | grep 'phonon' >/dev/null; then
+ HAVE_PHONON=1
+ elif echo $NAME | grep 'QtScript' >/dev/null; then
+ HAVE_SCRIPT=1
+ elif echo $NAME | grep 'QtSql' >/dev/null; then
+ HAVE_SQL=1
+ elif echo $NAME | grep 'QtWebKit' >/dev/null; then
+ HAVE_WEBKIT=1
+ fi
+
+ if [ `basename $FILE` != $NAME ]; then
+
+ # this part handles libraries which are macOS frameworks
+ if echo $lib | grep '\.framework' >/dev/null; then
+ local FRAMEWORKPATH=`echo $lib | sed -ne 's,\(.*\.framework\).*,\1,p'`
+ local FRAMEWORKNAME=`basename $FRAMEWORKPATH`
+ local NEWFRAMEWORKPATH=`echo $lib | sed -ne "s,.*\($FRAMEWORKNAME\),\1,p"`
+
+ # Qt installed via the precompled binaries...
+ if [ $FRAMEWORKPATH = $FRAMEWORKNAME ]; then
+ FRAMEWORKPATH="/Library/Frameworks/$FRAMEWORKNAME"
+ if [ ! -e "$FRAMEWORKPATH" ]; then
+ echo "Framework $FRAMEWORKNAME not found."
+ exit 1
+ fi
+ fi
+
+ if [ ! -e "$BUNDLE/Contents/Frameworks/$NEWFRAMEWORKPATH" ]; then
+ echo Embedding framework $FRAMEWORKNAME
+
+
+ # copy the framework into the bundle
+ cp -R $FRAMEWORKPATH $BUNDLE/Contents/Frameworks
+ # remove debug libs we've copied
+ find $BUNDLE/Contents/Frameworks/$FRAMEWORKNAME -regex '.*_debug\(\.dSYM\)*' | xargs rm -rf
+
+ handleFile "$BUNDLE/Contents/Frameworks/$NEWFRAMEWORKPATH" "$BUNDLE"
+ fi
+ # and inform the dynamic linker about this
+ xcrun install_name_tool -change $lib @executable_path/../Frameworks/$NEWFRAMEWORKPATH $FILE
+
+
+ # this part handles 'normal' dynamic libraries (.dylib)
+ else
+ if [ ! -e "$BUNDLE/Contents/Frameworks/$NAME" ]; then
+ echo Embedding library $NAME
+
+ # Qt installed via the precompled binaries...
+ if [ $lib = $NAME ]; then
+ lib="/Library/Frameworks/$NAME"
+ if [ ! -e "$lib" ]; then
+ lib="/usr/lib/$NAME"
+ fi
+ if [ ! -e "$lib" ]; then
+ echo "Library $NAME not found."
+ exit 1
+ fi
+ fi
+
+ # copy the lib into the bundle
+ cp $lib $BUNDLE/Contents/Frameworks
+ handleFile "$BUNDLE/Contents/Frameworks/$NAME" "$BUNDLE"
+ fi
+
+ # and inform the dynamic linker about this
+ xcrun install_name_tool -change $lib @executable_path/../Frameworks/$NAME $FILE
+ fi
+
+ fi
+ done
+}
+
+function handleQtPlugins()
+{
+ local PLUGINPATH=$QTDIR/plugins
+
+ # QTDIR was not found, then we're using /Developer/Applications/Qt
+ if [ "$PLUGINPATH" = "/plugins" ]; then
+ PLUGINPATH="/Developer/Applications/Qt/plugins"
+ fi
+
+ CLASS=$1
+ EXECUTABLE=$2
+ BUNDLE=$3
+ mkdir -p $BUNDLE/Contents/plugins/$CLASS
+ echo Add $CLASS plugins
+ for plugin in `ls $PLUGINPATH/$CLASS/*`; do
+ plugin=`basename $plugin`
+ if echo $plugin | grep 'debug' >/dev/null; then
+ #if [ $IS_DEBUG -eq 1 ]; then
+ cp "$PLUGINPATH/$CLASS/$plugin" $BUNDLE/Contents/plugins/$CLASS
+ xcrun install_name_tool -change $plugin @executable_path/../plugins/$CLASS/$plugin $EXECUTABLE
+ handleFile $BUNDLE/Contents/plugins/$CLASS/$plugin $BUNDLE
+ #fi
+ else
+ #if [ $IS_DEBUG -eq 0 ]; then
+ cp "$PLUGINPATH/$CLASS/$plugin" $BUNDLE/Contents/plugins/$CLASS
+ xcrun install_name_tool -change $plugin @executable_path/../plugins/$CLASS/$plugin $EXECUTABLE
+ handleFile $BUNDLE/Contents/plugins/$CLASS/$plugin $BUNDLE
+ #fi
+ fi
+ done
+}
+
+# the app bundle we're working with
+BUNDLE=$1
+# the executable inside of the bundle
+EXECUTABLE=$BUNDLE/Contents/MacOS/`xargs < $BUNDLE/Contents/Info.plist | sed -ne 's,.*<key>CFBundleExecutable</key> <string>\([^<]*\)</string>.*,\1,p'`
+
+mkdir -p $BUNDLE/Contents/Frameworks
+
+handleFile $EXECUTABLE $BUNDLE
+
+if [ $HAVE_CORE -eq 1 ]; then
+ handleQtPlugins "imageformats" "$EXECUTABLE" "$BUNDLE"
+fi
+if [ $HAVE_SVG -eq 1 ]; then
+ handleQtPlugins "iconengines" "$EXECUTABLE" "$BUNDLE"
+fi
+if [ $HAVE_PHONON -eq 1 ]; then
+ handleQtPlugins "phonon_backend" "$EXECUTABLE" "$BUNDLE"
+fi
+if [ $HAVE_SQL -eq 1 ]; then
+ handleQtPlugins "sqldrivers" "$EXECUTABLE" "$BUNDLE"
+fi
+if [ $HAVE_WEBKIT -eq 1 ]; then
+ handleQtPlugins "codecs" "$EXECUTABLE" "$BUNDLE"
+fi