2012-01-24 13:59:07 +01:00
|
|
|
#!/bin/bash
|
2016-01-15 14:52:30 +01:00
|
|
|
|
|
|
|
# Copyright (C) 2016 The Qt Company Ltd.
|
2022-08-19 15:59:36 +02:00
|
|
|
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
|
2016-01-15 14:52:30 +01:00
|
|
|
|
2020-11-04 11:57:11 +01:00
|
|
|
[ $# -lt 5 ] && echo "Usage: $(basename $0) <app folder> <qt bin folder> <qt translations folder> <qt plugin folder> <qt quick 2 imports folder>" && exit 2
|
2012-11-27 15:04:48 +01:00
|
|
|
[ $(uname -s) != "Darwin" ] && echo "Run this script on Mac OS X" && exit 2;
|
|
|
|
|
2016-09-02 11:29:54 +02:00
|
|
|
app_path="$1"
|
2017-03-30 11:08:06 +02:00
|
|
|
resource_path="$app_path/Contents/Resources"
|
2019-10-28 16:06:00 +01:00
|
|
|
libexec_path="$app_path/Contents/Resources/libexec"
|
2016-09-02 14:36:12 +02:00
|
|
|
bin_src="$2"
|
|
|
|
translation_src="$3"
|
|
|
|
plugin_src="$4"
|
2020-11-10 13:01:13 +01:00
|
|
|
quick2_src="$5"
|
2016-09-02 11:29:54 +02:00
|
|
|
|
2014-10-27 08:53:10 +01:00
|
|
|
echo "Deploying Qt"
|
|
|
|
|
2016-09-02 14:36:12 +02:00
|
|
|
# copy qtdiag
|
|
|
|
echo "- Copying qtdiag"
|
|
|
|
cp "$bin_src/qtdiag" "$app_path/Contents/MacOS/" || exit 1
|
|
|
|
# fix rpath if qtdiag was from binary Qt package
|
|
|
|
( xcrun install_name_tool -delete_rpath "@loader_path/../lib" "$app_path/Contents/MacOS/qtdiag" &&
|
|
|
|
xcrun install_name_tool -add_rpath "@loader_path/../Frameworks" "$app_path/Contents/MacOS/qtdiag" ) || true
|
|
|
|
|
|
|
|
|
2012-12-10 11:40:12 +01:00
|
|
|
# collect designer plugins
|
2016-09-02 11:29:54 +02:00
|
|
|
designerDestDir="$app_path/Contents/PlugIns/designer"
|
2014-10-27 08:53:10 +01:00
|
|
|
if [ ! -d "$designerDestDir" ]; then
|
|
|
|
echo "- Copying designer plugins"
|
|
|
|
mkdir -p "$designerDestDir"
|
2016-09-02 11:29:54 +02:00
|
|
|
for plugin in "$plugin_src"/designer/*.dylib; do
|
2014-10-27 08:53:10 +01:00
|
|
|
cp "$plugin" "$designerDestDir"/ || exit 1
|
|
|
|
done
|
|
|
|
fi
|
2012-12-10 11:40:12 +01:00
|
|
|
|
2019-10-25 18:35:50 +02:00
|
|
|
# collect 3d assetimporter plugins
|
|
|
|
assetimporterDestDir="$app_path/Contents/PlugIns/assetimporters"
|
|
|
|
assetimporterSrcDir="$plugin_src/assetimporters"
|
|
|
|
if [ -d "$assetimporterSrcDir" ]; then
|
|
|
|
if [ ! -d "$assetimporterDestDir" ]; then
|
|
|
|
echo "- Copying 3d assetimporter plugins"
|
|
|
|
mkdir -p "$assetimporterDestDir"
|
2020-10-27 15:08:09 +01:00
|
|
|
find "$assetimporterSrcDir" -iname "*.dylib" -maxdepth 1 -exec cp {} "$assetimporterDestDir"/ \;
|
2019-10-25 18:35:50 +02:00
|
|
|
fi
|
2019-10-29 06:52:28 +01:00
|
|
|
fi
|
2019-10-25 18:35:50 +02:00
|
|
|
|
2013-04-22 16:39:26 +02:00
|
|
|
# copy Qt Quick 2 imports
|
2016-09-02 11:29:54 +02:00
|
|
|
imports2Dir="$app_path/Contents/Imports/qtquick2"
|
|
|
|
if [ -d "$quick2_src" ]; then
|
2014-10-27 08:53:10 +01:00
|
|
|
if [ ! -d "$imports2Dir" ]; then
|
|
|
|
echo "- Copying Qt Quick 2 imports"
|
|
|
|
mkdir -p "$imports2Dir"
|
2016-09-02 11:29:54 +02:00
|
|
|
cp -R "$quick2_src"/ "$imports2Dir"/
|
2019-10-30 11:11:34 +01:00
|
|
|
find "$imports2Dir" -path "*.dylib.dSYM*" -delete
|
2014-10-27 08:53:10 +01:00
|
|
|
fi
|
2013-04-22 16:39:26 +02:00
|
|
|
fi
|
|
|
|
|
2013-09-26 15:08:37 +02:00
|
|
|
# copy qt creator qt.conf
|
2017-03-30 11:08:06 +02:00
|
|
|
if [ ! -f "$resource_path/qt.conf" ]; then
|
2014-10-27 08:53:10 +01:00
|
|
|
echo "- Copying qt.conf"
|
2017-03-30 11:08:06 +02:00
|
|
|
cp -f "$(dirname "${BASH_SOURCE[0]}")/../dist/installer/mac/qt.conf" "$resource_path/qt.conf" || exit 1
|
2014-10-27 08:53:10 +01:00
|
|
|
fi
|
2012-11-27 15:04:48 +01:00
|
|
|
|
2019-10-28 16:06:00 +01:00
|
|
|
# copy libexec tools' qt.conf
|
|
|
|
if [ ! -f "$libexec_path/qt.conf" ]; then
|
|
|
|
echo "- Copying libexec/qt.conf"
|
|
|
|
cp -f "$(dirname "${BASH_SOURCE[0]}")/../dist/installer/mac/libexec_qt.conf" "$libexec_path/qt.conf" || exit 1
|
|
|
|
fi
|
|
|
|
|
2013-10-02 16:09:23 +02:00
|
|
|
# copy ios tools' qt.conf
|
2019-10-28 16:06:00 +01:00
|
|
|
if [ ! -f "$libexec_path/ios/qt.conf" ]; then
|
|
|
|
echo "- Copying libexec/ios/qt.conf"
|
|
|
|
cp -f "$(dirname "${BASH_SOURCE[0]}")/../dist/installer/mac/ios_qt.conf" "$libexec_path/ios/qt.conf" || exit 1
|
2014-10-27 08:53:10 +01:00
|
|
|
fi
|
2013-10-02 16:09:23 +02:00
|
|
|
|
2015-10-19 12:34:24 +02:00
|
|
|
# copy qml2puppet's qt.conf
|
2019-10-28 16:06:00 +01:00
|
|
|
if [ ! -f "$libexec_path/qmldesigner/qt.conf" ]; then
|
|
|
|
echo "- Copying libexec/qmldesigner/qt.conf"
|
|
|
|
cp -f "$(dirname "${BASH_SOURCE[0]}")/../dist/installer/mac/qmldesigner_qt.conf" "$libexec_path/qmldesigner/qt.conf" || exit 1
|
2015-10-19 12:34:24 +02:00
|
|
|
fi
|
|
|
|
|
2012-11-27 15:04:48 +01:00
|
|
|
# copy Qt translations
|
2014-10-27 08:53:10 +01:00
|
|
|
# check for known existing translation to avoid copying multiple times
|
2017-03-30 11:08:06 +02:00
|
|
|
if [ ! -f "$resource_path/translations/qt_de.qm" ]; then
|
2014-10-27 08:53:10 +01:00
|
|
|
echo "- Copying Qt translations"
|
2017-03-30 11:08:06 +02:00
|
|
|
cp "$translation_src"/*.qm "$resource_path/translations/" || exit 1
|
2014-10-27 08:53:10 +01:00
|
|
|
fi
|
2014-01-30 18:20:45 +01:00
|
|
|
|
2022-05-24 13:35:00 +02:00
|
|
|
# copy clang if needed
|
2014-01-30 18:20:45 +01:00
|
|
|
if [ $LLVM_INSTALL_DIR ]; then
|
2022-06-21 13:34:04 +02:00
|
|
|
if [ "$LLVM_INSTALL_DIR"/bin/clangd -nt "$libexec_path"/clang/bin/clangd ]; then
|
2022-05-24 13:35:00 +02:00
|
|
|
echo "- Copying clang"
|
2016-09-02 11:29:54 +02:00
|
|
|
mkdir -p "$app_path/Contents/Frameworks" || exit 1
|
2015-06-18 18:17:27 +02:00
|
|
|
# use recursive copy to make it copy symlinks as symlinks
|
2019-10-28 16:06:00 +01:00
|
|
|
mkdir -p "$libexec_path/clang/bin"
|
|
|
|
mkdir -p "$libexec_path/clang/lib"
|
|
|
|
cp -Rf "$LLVM_INSTALL_DIR"/lib/clang "$libexec_path/clang/lib/" || exit 1
|
2020-07-14 16:58:24 +02:00
|
|
|
cp -Rf "$LLVM_INSTALL_DIR"/lib/ClazyPlugin.dylib "$libexec_path/clang/lib/" || exit 1
|
2019-08-02 08:33:23 +02:00
|
|
|
clangdsource="$LLVM_INSTALL_DIR"/bin/clangd
|
2019-10-28 16:06:00 +01:00
|
|
|
cp -Rf "$clangdsource" "$libexec_path/clang/bin/" || exit 1
|
2019-08-02 08:36:32 +02:00
|
|
|
clangtidysource="$LLVM_INSTALL_DIR"/bin/clang-tidy
|
2019-10-28 16:06:00 +01:00
|
|
|
cp -Rf "$clangtidysource" "$libexec_path/clang/bin/" || exit 1
|
2022-06-27 15:26:03 +02:00
|
|
|
clangformatsource="$LLVM_INSTALL_DIR"/bin/clang-format
|
|
|
|
cp -Rf "$clangformatsource" "$libexec_path/clang/bin/" || exit 1
|
2019-10-08 09:12:52 +02:00
|
|
|
clazysource="$LLVM_INSTALL_DIR"/bin/clazy-standalone
|
2019-10-28 16:06:00 +01:00
|
|
|
cp -Rf "$clazysource" "$libexec_path/clang/bin/" || exit 1
|
2021-12-13 11:53:47 +01:00
|
|
|
install_name_tool -add_rpath "@executable_path/../lib" "$libexec_path/clang/bin/clazy-standalone" 2> /dev/null
|
2021-09-13 10:58:11 +02:00
|
|
|
install_name_tool -delete_rpath "/Users/qt/work/build/libclang/lib" "$libexec_path/clang/bin/clazy-standalone" 2> /dev/null
|
2014-02-04 16:14:51 +01:00
|
|
|
fi
|
2019-10-28 16:06:00 +01:00
|
|
|
clangbackendArgument="-executable=$libexec_path/clangbackend"
|
2014-01-30 18:20:45 +01:00
|
|
|
fi
|
|
|
|
|
2014-10-27 08:53:10 +01:00
|
|
|
#### macdeployqt
|
|
|
|
|
2016-09-02 11:29:54 +02:00
|
|
|
if [ ! -d "$app_path/Contents/Frameworks/QtCore.framework" ]; then
|
2014-10-27 08:53:10 +01:00
|
|
|
|
2019-10-28 16:06:00 +01:00
|
|
|
qml2puppetapp="$libexec_path/qmldesigner/qml2puppet"
|
2014-10-28 17:34:36 +01:00
|
|
|
if [ -f "$qml2puppetapp" ]; then
|
|
|
|
qml2puppetArgument="-executable=$qml2puppetapp"
|
|
|
|
fi
|
|
|
|
|
2016-09-02 11:29:54 +02:00
|
|
|
qbsapp="$app_path/Contents/MacOS/qbs"
|
2019-10-30 11:11:34 +01:00
|
|
|
if [ -f "$qbsapp" ]; then
|
|
|
|
qbsArguments=("-executable=$qbsapp" \
|
|
|
|
"-executable=$qbsapp-config" \
|
|
|
|
"-executable=$qbsapp-config-ui" \
|
|
|
|
"-executable=$qbsapp-setup-android" \
|
|
|
|
"-executable=$qbsapp-setup-qt" \
|
|
|
|
"-executable=$qbsapp-setup-toolchains" \
|
|
|
|
"-executable=$qbsapp-create-project" \
|
|
|
|
"-executable=$libexec_path/qbs_processlauncher")
|
|
|
|
fi
|
2015-05-17 17:07:47 -07:00
|
|
|
|
2017-04-06 18:48:32 -07:00
|
|
|
echo "- Running macdeployqt ($bin_src/macdeployqt)"
|
2014-10-28 17:34:36 +01:00
|
|
|
|
2017-04-06 18:48:32 -07:00
|
|
|
"$bin_src/macdeployqt" "$app_path" \
|
2017-03-30 10:54:04 +02:00
|
|
|
"-executable=$app_path/Contents/MacOS/qtdiag" \
|
2019-10-28 16:06:00 +01:00
|
|
|
"-executable=$libexec_path/qtpromaker" \
|
|
|
|
"-executable=$libexec_path/sdktool" \
|
|
|
|
"-executable=$libexec_path/ios/iostool" \
|
|
|
|
"-executable=$libexec_path/buildoutputparser" \
|
|
|
|
"-executable=$libexec_path/cpaster" \
|
2019-10-30 11:11:34 +01:00
|
|
|
"${qbsArguments[@]}" \
|
2017-03-30 11:49:19 +02:00
|
|
|
"$qml2puppetArgument" \
|
2021-06-24 15:26:36 +02:00
|
|
|
"$clangbackendArgument" || exit 1
|
2014-10-27 08:53:10 +01:00
|
|
|
|
2014-10-28 17:34:36 +01:00
|
|
|
fi
|
2022-04-07 14:34:51 +02:00
|
|
|
|
|
|
|
# clean up after macdeployqt
|
|
|
|
# it deploys some plugins (and libs for these) that interfere with what we want
|
|
|
|
echo "Cleaning up after macdeployqt..."
|
|
|
|
toRemove=(\
|
|
|
|
"Contents/PlugIns/tls/libqopensslbackend.dylib" \
|
|
|
|
"Contents/PlugIns/sqldrivers/libqsqlpsql.dylib" \
|
|
|
|
"Contents/PlugIns/sqldrivers/libqsqlodbc.dylib" \
|
|
|
|
"Contents/Frameworks/libpq.*dylib" \
|
|
|
|
"Contents/Frameworks/libssl.*dylib" \
|
|
|
|
"Contents/Frameworks/libcrypto.*dylib" \
|
|
|
|
)
|
|
|
|
for f in "${toRemove[@]}"; do
|
|
|
|
echo "- removing \"$app_path/$f\""
|
|
|
|
rm "$app_path"/$f 2> /dev/null; done
|
|
|
|
exit 0
|