summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2015-07-13 10:34:50 -0700
committerGuy Harris <guy@alum.mit.edu>2015-07-13 17:35:15 +0000
commit9f03aa131e851447f6c3a89b6e57ff560df0afe2 (patch)
tree74146781896611d07c324649513c8aef1ce112d8
parent7b9b3d469375c9d3ac1b5f7280ca64413b4811bf (diff)
downloadwireshark-9f03aa131e851447f6c3a89b6e57ff560df0afe2.tar.gz
On OS X, add an rpath for the Qt frameworks, and remove it in the app bundle.
Qt 5.5 and later have @rpath-based install names for the frameworks, which means that, if they're not installed in some frameworks directory searched by default (such as /Library/Frameworks) - which is the default case with the Qt installer - they won't be found by default. Add the directory in which the frameworks exist as an rpath in the Wireshark binary, so that they'll be found, and then remove it from the Wireshark binary in the app bundle, as the directory in which the frameworks exist on the machine on which Wireshark was built is irrelevant to the machines on which it's being deployed - the frameworks are included in the bundle, and we already add an rpath to find them there. Change-Id: I54e033743e7b17eab26976064dcd7cd000f97c78 Reviewed-on: https://code.wireshark.org/review/9625 Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac22
-rwxr-xr-xpackaging/macosx/osx-app.sh21
3 files changed, 43 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am
index 3f09133c2c..d130c43062 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -372,7 +372,7 @@ if HAVE_GTK
wireshark_gtk_LDFLAGS = -export-dynamic
endif
if HAVE_Qt
-wireshark_LDFLAGS = -export-dynamic
+wireshark_LDFLAGS = -export-dynamic @Qt_LDFLAGS@
endif
endif
diff --git a/configure.ac b/configure.ac
index 86558eeaba..7b7a8b72fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1625,7 +1625,7 @@ if test "x$enable_wireshark" = "xyes"; then
fi
if test "x$with_qt" != "xno"; then
#
- # Qt was specified; Make sure we have a C++ compiler.
+ # Qt was specified; make sure we have a C++ compiler.
#
if test -z "$CXX"; then
AC_MSG_ERROR(Need a working C++ compiler to build Wireshark with Qt)
@@ -1663,6 +1663,26 @@ if test "x$enable_wireshark" = "xyes"; then
AC_SUBST(MOC)
AC_WIRESHARK_QT_TOOL_CHECK(RCC, rcc, "$qt_version")
AC_SUBST(RCC)
+
+ #
+ # On Darwin, find where the Qt frameworks are
+ # located, and add that to the rpath, just in
+ # case this is Qt 5.5 or later and the frameworks
+ # have an install name that begins with @rpath
+ # and aren't installed in a frameworks directory
+ # that's searched by default.
+ #
+ case "$host_os" in
+ darwin*)
+ if test $qt_version -le 4
+ then
+ Qt_LDFLAGS="-Wl,-rpath,"`$PKG_CONFIG --libs QtCore | sed -e 's/-F//' -e 's/ -framework.*//'`
+ else
+ Qt_LDFLAGS="-Wl,-rpath,"`$PKG_CONFIG --libs Qt${qt_version}Core | sed -e 's/-F//' -e 's/ -framework.*//'`
+ fi
+ ;;
+ esac
+ AC_SUBST(Qt_LDFLAGS)
],
[
case "$with_qt" in
diff --git a/packaging/macosx/osx-app.sh b/packaging/macosx/osx-app.sh
index 6fcd043ec2..c58a24b6b5 100755
--- a/packaging/macosx/osx-app.sh
+++ b/packaging/macosx/osx-app.sh
@@ -178,6 +178,21 @@ elif [ ! -d "$bundle" ] ; then
exit 1
fi
+if [ "$ui_toolkit" = "qt" ] ; then
+ for i in 5 ""
+ do
+ qt_frameworks_dir=`pkg-config --libs Qt${i}Core | sed -e 's/-F//' -e 's/ -framework.*//'`
+ if [ ! -z "$qt_frameworks_dir" ] ; then
+ # found it
+ break;
+ fi
+ done
+ if [ -z "$qt_frameworks_dir" ] ; then
+ echo "Can't find the Qt frameworks directory" >&2
+ exit 1
+ fi
+fi
+
# Package paths
pkgexec="$bundle/Contents/MacOS"
pkgres="$bundle/Contents/Resources"
@@ -468,6 +483,12 @@ fi
if [ "$ui_toolkit" = "qt" ] ; then
macdeployqt "$bundle" -verbose=3 || exit 1
+
+ #
+ # The build process added to the Wireshark binary an rpath entry
+ # pointing to the directory containing the Qt frameworks; remove
+ # that entry from the Wireshark binary in the package.
+ /usr/bin/install_name_tool -delete_rpath "$qt_frameworks_dir" $pkgbin/Wireshark
fi
# NOTE: we must rpathify *all* files, *including* plugins for GTK+ etc.,