Files
qt-creator/scripts/deployqtHelper_mac.sh
Eike Ziller d2e1590aec macOS: Do not deploy some plugins and their dependencies
macdeployqt deploys all plugins of a kind, like all tls or sql backends.
We only want the securetransport and sqlite ones from these, and
since Qt 6.3 now also builds the openssl backend, and the postgres backend
has a dependency on openssl that gets shipped, we end up with issues
(openssl backend being loaded which finds and loads openssl from postgres).

So clean these things up after macdeployqt.

Change-Id: Iccbe4c422a4cce3fd4da0af5f6e2595f85848ece
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2022-04-08 14:18:17 +00:00

193 lines
7.7 KiB
Bash
Executable File

#!/bin/bash
############################################################################
#
# Copyright (C) 2016 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
#
# 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.
#
############################################################################
[ $# -lt 5 ] && echo "Usage: $(basename $0) <app folder> <qt bin folder> <qt translations folder> <qt plugin folder> <qt quick 2 imports folder>" && exit 2
[ $(uname -s) != "Darwin" ] && echo "Run this script on Mac OS X" && exit 2;
app_path="$1"
resource_path="$app_path/Contents/Resources"
libexec_path="$app_path/Contents/Resources/libexec"
bin_src="$2"
translation_src="$3"
plugin_src="$4"
quick2_src="$5"
echo "Deploying Qt"
# 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
# collect designer plugins
designerDestDir="$app_path/Contents/PlugIns/designer"
if [ ! -d "$designerDestDir" ]; then
echo "- Copying designer plugins"
mkdir -p "$designerDestDir"
for plugin in "$plugin_src"/designer/*.dylib; do
cp "$plugin" "$designerDestDir"/ || exit 1
done
fi
# 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"
find "$assetimporterSrcDir" -iname "*.dylib" -maxdepth 1 -exec cp {} "$assetimporterDestDir"/ \;
fi
fi
# copy Qt Quick 2 imports
imports2Dir="$app_path/Contents/Imports/qtquick2"
if [ -d "$quick2_src" ]; then
if [ ! -d "$imports2Dir" ]; then
echo "- Copying Qt Quick 2 imports"
mkdir -p "$imports2Dir"
cp -R "$quick2_src"/ "$imports2Dir"/
find "$imports2Dir" -path "*.dylib.dSYM*" -delete
fi
fi
# copy qt creator qt.conf
if [ ! -f "$resource_path/qt.conf" ]; then
echo "- Copying qt.conf"
cp -f "$(dirname "${BASH_SOURCE[0]}")/../dist/installer/mac/qt.conf" "$resource_path/qt.conf" || exit 1
fi
# 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
# copy ios tools' qt.conf
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
fi
# copy qml2puppet's qt.conf
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
fi
# copy Qt translations
# check for known existing translation to avoid copying multiple times
if [ ! -f "$resource_path/translations/qt_de.qm" ]; then
echo "- Copying Qt translations"
cp "$translation_src"/*.qm "$resource_path/translations/" || exit 1
fi
# copy libclang if needed
if [ $LLVM_INSTALL_DIR ]; then
if [ "$LLVM_INSTALL_DIR"/lib/libclang.dylib -nt "$app_path/Contents/PlugIns"/libclang.dylib ]; then
echo "- Copying libclang"
mkdir -p "$app_path/Contents/Frameworks" || exit 1
# use recursive copy to make it copy symlinks as symlinks
mkdir -p "$libexec_path/clang/bin"
mkdir -p "$libexec_path/clang/lib"
cp -Rf "$LLVM_INSTALL_DIR"/lib/libclang.*dylib "$app_path/Contents/Frameworks/" || exit 1
cp -Rf "$LLVM_INSTALL_DIR"/lib/clang "$libexec_path/clang/lib/" || exit 1
cp -Rf "$LLVM_INSTALL_DIR"/lib/libclang-cpp.dylib "$libexec_path/clang/lib/" || exit 1
cp -Rf "$LLVM_INSTALL_DIR"/lib/ClazyPlugin.dylib "$libexec_path/clang/lib/" || exit 1
clangsource="$LLVM_INSTALL_DIR"/bin/clang
clanglinktarget="$(readlink "$clangsource")"
cp -Rf "$clangsource" "$libexec_path/clang/bin/" || exit 1
if [ $clanglinktarget ]; then
cp -Rf "$(dirname "$clangsource")/$clanglinktarget" "$libexec_path/clang/bin/$clanglinktarget" || exit 1
fi
clangdsource="$LLVM_INSTALL_DIR"/bin/clangd
cp -Rf "$clangdsource" "$libexec_path/clang/bin/" || exit 1
clangtidysource="$LLVM_INSTALL_DIR"/bin/clang-tidy
cp -Rf "$clangtidysource" "$libexec_path/clang/bin/" || exit 1
clazysource="$LLVM_INSTALL_DIR"/bin/clazy-standalone
cp -Rf "$clazysource" "$libexec_path/clang/bin/" || exit 1
install_name_tool -add_rpath "@executable_path/../lib" "$libexec_path/clang/bin/clazy-standalone" 2> /dev/null
install_name_tool -delete_rpath "/Users/qt/work/build/libclang/lib" "$libexec_path/clang/bin/clazy-standalone" 2> /dev/null
fi
clangbackendArgument="-executable=$libexec_path/clangbackend"
fi
#### macdeployqt
if [ ! -d "$app_path/Contents/Frameworks/QtCore.framework" ]; then
qml2puppetapp="$libexec_path/qmldesigner/qml2puppet"
if [ -f "$qml2puppetapp" ]; then
qml2puppetArgument="-executable=$qml2puppetapp"
fi
qbsapp="$app_path/Contents/MacOS/qbs"
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
echo "- Running macdeployqt ($bin_src/macdeployqt)"
"$bin_src/macdeployqt" "$app_path" \
"-executable=$app_path/Contents/MacOS/qtdiag" \
"-executable=$libexec_path/qtpromaker" \
"-executable=$libexec_path/sdktool" \
"-executable=$libexec_path/ios/iostool" \
"-executable=$libexec_path/buildoutputparser" \
"-executable=$libexec_path/cpaster" \
"${qbsArguments[@]}" \
"$qml2puppetArgument" \
"$clangbackendArgument" || exit 1
fi
# 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