If CODE_SIGN_IDENTITY is set use it to sign the app bundle and the
[metze/wireshark/wip.git] / packaging / macosx / osx-app.sh
index 78b81d49148e7a753f3ee0e895a6dc1c8c0ba781..dc55bef916d63987333f9a37745603043a69ee78 100755 (executable)
 #              https://gnunet.org/svn/GNUnet/contrib/OSX/build_app
 #
 # NB:
-# When packaging Wireshark for OS X, configure should be run with the
-# "--enable-osxapp" option which sets the correct paths for support
-# files inside the app bundle.
+# This originally came from Inkscape; Inkscape's configure script has an
+# "--enable-osxapp", which causes some of Inkscape's installation data
+# files to have OS X-ish paths under Contents/Resources of the package
+# or under /Library/Application Support.  We don't have such an option;
+# we just put them in "bin", "etc", "lib", and "share" directories
+# under Contents/Resources, rather than in the "bin", "etc", "lib",
+# and "share" directories under the installation directory.
 #
 
 # Defaults
@@ -39,24 +43,31 @@ plist="./Info.plist"
 util_dir="./Utilities"
 cli_dir="$util_dir/Command Line"
 chmodbpf_dir="$util_dir/ChmodBPF"
+exclude_prefixes="/System/|/Library/|/usr/lib/|/usr/X11/|/opt/X11/|@rpath|@executable_path"
+
+
+# "qt" or "gtk"
+ui_toolkit="gtk"
+# Name of the Wireshark executable
+wireshark_bin_name="wireshark"
 
 binary_list="
        capinfos
        dftest
        dumpcap
        editcap
-       idl2wrs
        mergecap
        randpkt
        rawshark
        text2pcap
        tshark
-       wireshark
 "
 
-# Location for libraries (MacPorts defaults to /opt/local)
+# Location for libraries (macosx-setup.sh defaults to whatever the
+# various support libraries use as their standard installation location,
+# which is /usr/local)
 if [ -z $LIBPREFIX ]; then
-       LIBPREFIX="/opt/local"
+       LIBPREFIX="/usr/local"
 fi
 
 
@@ -68,7 +79,7 @@ echo -e "
 Create an app bundle for OS X
 
 USAGE
-       $0 [-s] [-l /path/to/libraries] -bp /path/to/wireshark/binaries -p /path/to/Info.plist
+       $0 [-s] [-l /path/to/libraries] [-qt] -bp /path/to/wireshark/binaries -p /path/to/Info.plist
 
 OPTIONS
        -h,--help
@@ -76,18 +87,23 @@ OPTIONS
        -s
                strip the libraries and executables from debugging symbols
        -l,--libraries
-               specify the path to the librairies Wireshark depends on
-               (typically /sw or /opt/local)
+               specify the path to the libraries Wireshark depends on
+               (typically /sw or /opt/local).  By default it is
+               /usr/local.
        -bp,--binary-path
                specify the path to the Wireshark binaries. By default it
-               is in $binary_path
+               is /tmp/inst/bin.
        -p,--plist
                specify the path to Info.plist. Info.plist can be found
                in the base directory of the source code once configure
-               has been run
+               has been run.
+       -sdkroot
+               specify the root of the SDK to use
+       -qt,--qt-flavor
+               use the Qt flavor
 
 EXAMPLE
-       $0 -s -l /opt/local -bp ../../Build/bin -p Info.plist
+       $0 -s -l /opt/local -bp ../../Build/bin -p Info.plist -sdkroot /Developer/SDKs/MacOSX10.5.sdk
 "
 }
 
@@ -108,9 +124,16 @@ do
                -p|--plist)
                        plist="$2"
                        shift 1 ;;
+               -qt|--qt-flavor)
+                       ui_toolkit="qt"
+                       wireshark_bin_name="wireshark-qt"
+                       ;;
                -h|--help)
                        help
                        exit 0 ;;
+               -sdkroot)
+                       sdkroot="$2"
+                       shift 1 ;;
                *)
                        echo "Invalid command line option: $1"
                        exit 2 ;;
@@ -122,11 +145,11 @@ echo -e "\nCREATE WIRESHARK APP BUNDLE\n"
 
 # Safety tests
 if [ ! -e "$LIBPREFIX" ]; then
-       echo "Cannot find the directory containing the libraires: $LIBPREFIX" >&2
+       echo "Cannot find the directory containing the libraries: $LIBPREFIX" >&2
        exit 1
 fi
 
-for binary in wireshark $binary_list ; do
+for binary in $wireshark_bin_name $binary_list ; do
        if [ ! -x "$binary_path/$binary" ]; then
                echo "Couldn't find $binary (or it's not executable)" >&2
                exit 1
@@ -154,6 +177,13 @@ else
        EXTRALIBS=""
 fi
 
+# Set the SDK root, if an SDK was specified.
+# (-sdk is only supported by the xcodebuild in the version of the
+# developer tools that came with Snow Leopard and later versions)
+if [ ! -z "$sdkroot" ]
+then
+       XCODEFLAGS="$XCODEFLAGS SDKROOT=$sdkroot"
+fi
 
 # Package always has the same name. Version information is stored in
 # the Info.plist file which is filled in by the configure script.
@@ -179,64 +209,80 @@ resdir=`pwd`
 #----------------------------------------------------------
 pkgexec="$package/Contents/MacOS"
 pkgres="$package/Contents/Resources"
-pkgbin="$pkgres/bin"
-pkglib="$pkgres/lib"
+pkgbin="$pkgexec"
+if [ "$ui_toolkit" = "gtk" ] ; then
+       pkgbin="$pkgres/bin"
+fi
+# Should pkglib be Contents/Frameworks instead?
+#pkglib="$pkgres/lib"
+pkglib="$package/Contents/Frameworks"
+pkgqtplugin="$package/Contents/PlugIns"
 pkgplugin="$pkglib/wireshark/plugins"
 pkgpython="$pkglib/wireshark/python"
 
 mkdir -p "$pkgexec"
 mkdir -p "$pkgbin"
+mkdir -p "$pkgqtplugin"
 mkdir -p "$pkgplugin"
 mkdir -p "$pkgpython"
 
 mkdir -p "$cli_dir"
 
+if [ "$ui_toolkit" = "qt" ] ; then
+       cp "$binary_path/$wireshark_bin_name" "$pkgexec/Wireshark"
+else
 # Build and add the launcher
 #----------------------------------------------------------
-(
-       # Build fails if CC happens to be set (to anything other than CompileC)
-       unset CC
+       (
+               # Build fails if CC happens to be set (to anything other than CompileC)
+               unset CC
 
-       cd "$resdir/ScriptExec"
-       echo -e "Building launcher...\n"
-       xcodebuild $XCODEFLAGS clean build
-)
-cp "$resdir/$SCRIPTEXECDIR/ScriptExec" "$pkgexec/Wireshark"
+               cd "$resdir/ScriptExec"
+               echo -e "Building launcher...\n"
+               xcodebuild $XCODEFLAGS clean build
+       )
+       cp "$resdir/$SCRIPTEXECDIR/ScriptExec" "$pkgexec/Wireshark"
 
+fi
 
 # Copy all files into the bundle
 #----------------------------------------------------------
 echo -e "\nFilling app bundle and utility directory...\n"
 
 # Wireshark executables
-for binary in $binary_list ; do
-       # Copy the binary to its destination
-       dest_path="$pkgbin/$binary-bin"
-       cp -v "$binary_path/$binary" "$dest_path"
-       # TODO Add a "$verbose" variable and command line switch, which sets wether these commands are verbose or not
-
-       case $binary in
-       wireshark)
-               cp -v utility-launcher "$cli_dir/$binary"
-               ;;
-       *)
-               ln -sv ./wireshark "$pkgbin/$binary"
-               ln -sv ./wireshark "$cli_dir/$binary"
-               ;;
-       esac
-done
+if [ "$ui_toolkit" = "gtk" ] ; then
+       cp -v utility-launcher "$cli_dir/$binary"
+       for binary in $binary_list wireshark ; do
+               # Copy the binary to its destination
+               dest_path="$pkgbin/$binary-bin"
+               cp -v "$binary_path/$binary" "$dest_path"
+               # TODO Add a "$verbose" variable and command line switch, which sets wether these commands are verbose or not
+
+               if [ "$binary" != "wireshark" ] ; then
+                       ln -sv ./wireshark "$pkgbin/$binary"
+                       ln -sv ./wireshark "$cli_dir/$binary"
+               fi
+       done
+elif [ "$ui_toolkit" = "qt" ] ; then
+       for binary in $binary_list ; do
+               # Copy the binary to its destination
+               cp -v "$binary_path/$binary" "$pkgexec"
+       done
+fi
 
 # ChmodBPF
 mkdir -p "$chmodbpf_dir"
 cp -v ChmodBPF/* "$chmodbpf_dir"
+chmod -R g-w "$chmodbpf_dir"
 
 # The rest of the Wireshark installation (we handled bin above)
 rsync -av \
        --exclude bin/ \
-       --exclude lib/wireshark/plugins/ \
-       --exclude lib/wireshark/python/ \
+       --exclude lib/ \
        "$binary_path/.."/* "$pkgres"
 
+rsync -av $binary_path/../lib/*.dylib "$pkglib/"
+
 # Remove the version number from the plugin path
 find "$binary_path/../lib/wireshark/plugins" -type f \
        -exec cp -fv "{}" "$pkgplugin/" \;
@@ -248,65 +294,135 @@ find "$binary_path/../lib/wireshark/python" -type f \
 cp "$plist" "$package/Contents/Info.plist"
 
 # Icons and the rest of the script framework
-rsync -av --exclude ".svn" "$resdir"/Resources/* "$package"/Contents/Resources/
+res_list="
+       Wireshark.icns
+       Wiresharkdoc.icns
+"
+
+if [ "$ui_toolkit" = "gtk" ] ; then
+       res_list="
+               $res_list
+               bin
+               etc
+               openDoc
+               script
+               MenuBar.nib
+               ProgressWindow.nib
+               themes
+       "
+fi
+
+for rl_entry in $res_list ; do
+       rsync -av "$resdir"/Resources/$rl_entry "$package"/Contents/Resources/
+done
 
 # PkgInfo must match bundle type and creator code from Info.plist
 echo "APPLWshk" > $package/Contents/PkgInfo
 
-# Pull in extra requirements for Pango and GTK
-pkgetc="$package/Contents/Resources/etc"
-mkdir -p $pkgetc/pango
-cp $LIBPREFIX/etc/pango/pangox.aliases $pkgetc/pango/
-# Need to adjust path and quote in case of spaces in path.
-sed -e "s,$LIBPREFIX,\"\${CWD},g" -e 's,\.so ,.so" ,g' $LIBPREFIX/etc/pango/pango.modules > $pkgetc/pango/pango.modules
-cat > $pkgetc/pango/pangorc <<END_PANGO
+if [ "$ui_toolkit" = "gtk" ] ; then
+
+       # Pull in extra requirements for Pango and GTK
+       pkgetc="$package/Contents/Resources/etc"
+       mkdir -p $pkgetc/pango
+       cp $LIBPREFIX/etc/pango/pangox.aliases $pkgetc/pango/
+       # Need to adjust path and quote in case of spaces in path.
+       sed -e "s,$LIBPREFIX,\"\${CWD},g" -e 's,\.so ,.so" ,g' $LIBPREFIX/etc/pango/pango.modules > $pkgetc/pango/pango.modules
+       cat > $pkgetc/pango/pangorc <<END_PANGO
 [Pango]
 ModuleFiles=\${HOME}/.wireshark-etc/pango.modules
 [PangoX]
 AliasFiles=\${HOME}/.wireshark-etc/pangox.aliases
 END_PANGO
 
-# We use a modified fonts.conf file so only need the dtd
-mkdir -p $pkgetc/fonts
-cp $LIBPREFIX/etc/fonts/fonts.dtd $pkgetc/fonts/
-cp -r $LIBPREFIX/etc/fonts/conf.avail $pkgetc/fonts/
-cp -r $LIBPREFIX/etc/fonts/conf.d $pkgetc/fonts/
-
-mkdir -p $pkgetc/gtk-2.0
-sed -e "s,$LIBPREFIX,\${CWD},g" $LIBPREFIX/etc/gtk-2.0/gdk-pixbuf.loaders > $pkgetc/gtk-2.0/gdk-pixbuf.loaders
-sed -e "s,$LIBPREFIX,\${CWD},g" $LIBPREFIX/etc/gtk-2.0/gtk.immodules > $pkgetc/gtk-2.0/gtk.immodules
-
-pango_version=`pkg-config --variable=pango_module_version pango`
-mkdir -p $pkglib/pango/$pango_version/modules
-cp $LIBPREFIX/lib/pango/$pango_version/modules/*.so $pkglib/pango/$pango_version/modules/
-
-gtk_version=`pkg-config --variable=gtk_binary_version gtk+-2.0`
-mkdir -p $pkglib/gtk-2.0/$gtk_version/{engines,immodules,loaders}
-cp -r $LIBPREFIX/lib/gtk-2.0/$gtk_version/* $pkglib/gtk-2.0/$gtk_version/
-
-gdk_pixbuf_version=`pkg-config --variable=gdk_pixbuf_binary_version gdk-pixbuf-2.0`
-if [ ! -z $gdk_pixbuf_version ]; then
-       mkdir -p $pkglib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders
-       cp -r $LIBPREFIX/lib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders/* $pkglib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders
-fi
+       # We use a modified fonts.conf file so only need the dtd
+       mkdir -p $pkgetc/fonts
+       cp $LIBPREFIX/etc/fonts/fonts.dtd $pkgetc/fonts/
+       cp -r $LIBPREFIX/etc/fonts/conf.avail $pkgetc/fonts/
+       cp -r $LIBPREFIX/etc/fonts/conf.d $pkgetc/fonts/
+
+       mkdir -p $pkgetc/gtk-2.0
+       #
+       # In newer versions of GTK+, the gdk-pixbuf library was split off from
+       # GTK+, and the gdk-pixbuf.loaders file moved, so we check for its
+       # existence here.
+       #
+       # The file is ultimately copied to the user's home directory, with
+       # the pathnames adjusted to refer to the installed package, so we
+       # always put it in the same location in the installed package,
+       # regardless of where it lives in the machine on which it's built.
+       #
+       if [ -e $LIBPREFIX/etc/gtk-2.0/gdk-pixbuf.loaders ]
+       then
+               sed -e "s,$LIBPREFIX,\${CWD},g" $LIBPREFIX/etc/gtk-2.0/gdk-pixbuf.loaders > $pkgetc/gtk-2.0/gdk-pixbuf.loaders
+       fi
+       sed -e "s,$LIBPREFIX,\${CWD},g" $LIBPREFIX/etc/gtk-2.0/gtk.immodules > $pkgetc/gtk-2.0/gtk.immodules
+
+       pango_version=`pkg-config --variable=pango_module_version pango`
+       mkdir -p $pkglib/pango/$pango_version/modules
+       cp $LIBPREFIX/lib/pango/$pango_version/modules/*.so $pkglib/pango/$pango_version/modules/
+
+       gtk_version=`pkg-config --variable=gtk_binary_version gtk+-2.0`
+       mkdir -p $pkglib/gtk-2.0/$gtk_version/{engines,immodules,loaders}
+       cp -r $LIBPREFIX/lib/gtk-2.0/$gtk_version/* $pkglib/gtk-2.0/$gtk_version/
+
+       gdk_pixbuf_version=`pkg-config --variable=gdk_pixbuf_binary_version gdk-pixbuf-2.0`
+       if [ ! -z $gdk_pixbuf_version ]; then
+               mkdir -p $pkglib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders
+               #
+               # As per the above, check whether we have a loaders.cache file
+               # in $LIBPREFIX/lib/gdk-pixbuf-2.0/$gdk_pixbuf_version, as
+               # that's where the output of gdk-pixbuf-query-loaders gets
+               # put if gdk-pixbuf and GTK+ are separated.
+               #
+               # The file is ultimately copied to the user's home directory,
+               # with the pathnames adjusted to refer to the installed package,
+               # so we always put it in the same location in the installed
+               # package, regardless of where it lives in the machine on which
+               # it's built.
+               #
+               if [ -e $LIBPREFIX/lib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders.cache ]
+               then
+                       sed -e "s,$LIBPREFIX,\${CWD},g" $LIBPREFIX/lib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders.cache > $pkgetc/gtk-2.0/gdk-pixbuf.loaders
+               fi
+               cp -r $LIBPREFIX/lib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders/* $pkglib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders
+       fi
+fi # GTK+ / Qt
 
-# Find out libs we need from fink, darwinports, or from a custom install
+# Find out libs we need from Fink, MacPorts, or from a custom install
 # (i.e. $LIBPREFIX), then loop until no changes.
 a=1
 nfiles=0
 endl=true
 lib_dep_search_list="
-       $pkglib/gtk-2.0/$gtk_version/loaders/*
-       $pkglib/gtk-2.0/$gtk_version/immodules/*
-       $pkglib/gtk-2.0/$gtk_version/engines/*.so
-       $pkglib/pango/$pango_version/modules/*
-       $pkglib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders/*
-       $package/Contents/Resources/lib/*
+       $pkglib/*
        $pkgbin/*-bin
        "
+if [ "$ui_toolkit" = "gtk" ] ; then
+       lib_dep_search_list="
+               $lib_dep_search_list
+               $pkglib/gtk-2.0/$gtk_version/loaders/*
+               $pkglib/gtk-2.0/$gtk_version/immodules/*
+               $pkglib/gtk-2.0/$gtk_version/engines/*.so
+               $pkglib/pango/$pango_version/modules/*
+               $pkglib/gdk-pixbuf-2.0/$gdk_pixbuf_version/loaders/*
+               "
+elif [ "$ui_toolkit" = "qt" ] ; then
+       lib_dep_search_list="
+               $pkgexec/Wireshark
+               $lib_dep_search_list
+               "
+fi
+
 while $endl; do
        echo -e "Looking for dependencies. Round" $a
-       libs="`otool -L $lib_dep_search_list 2>/dev/null | fgrep compatibility | cut -d\( -f1 | grep $LIBPREFIX | sort | uniq`"
+       libs="`\
+               otool -L $lib_dep_search_list 2>/dev/null \
+               | fgrep compatibility \
+               | cut -d\( -f1 \
+               | egrep -v "$exclude_prefixes" \
+               | sort \
+               | uniq \
+               `"
        cp -vn $libs "$pkglib"
        let "a+=1"
        nnfiles=`ls "$pkglib" | wc -l`
@@ -322,56 +438,151 @@ for libfile in $EXTRALIBS
 do
        cp -f $libfile "$pkglib"
 done
+chmod 755 "$pkglib"/*.dylib
 
 # Strip libraries and executables if requested
 #----------------------------------------------------------
 if [ "$strip" = "true" ]; then
        echo -e "\nStripping debugging symbols...\n"
-       chmod +w "$pkglib"/*.dylib
        strip -x "$pkglib"/*.dylib
        strip -ur "$binpath"
 fi
 
-# NOTE: This works for all the dylibs but causes GTK to crash at startup.
-#                              Instead we leave them with their original install_names and set
-#                              DYLD_LIBRARY_PATH within the app bundle before running Wireshark.
-#
-# fixlib () {
-#              # Fix a given executable or library to be relocatable
-#              if [ ! -d "$1" ]; then
-#                      echo $1
-#                      libs="`otool -L $1 | fgrep compatibility | cut -d\( -f1`"
-#                      for lib in $libs; do
-#                              echo "  $lib"
-#                              base=`echo $lib | awk -F/ '{print $NF}'`
-#                              first=`echo $lib | cut -d/ -f1-3`
-#                              to=@executable_path/../lib/$base
-#                              if [ $first != /usr/lib -a $first != /usr/X11R6 ]; then
-#                                      /usr/bin/install_name_tool -change $lib $to $1
-#                                      if [ "`echo $lib | fgrep libcrypto`" = "" ]; then
-#                                              /usr/bin/install_name_tool -id $to ../lib/$base
-#                                              for ll in $libs; do
-#                                                      base=`echo $ll | awk -F/ '{print $NF}'`
-#                                                      first=`echo $ll | cut -d/ -f1-3`
-#                                                      to=@executable_path/../lib/$base
-#                                                      if [ $first != /usr/lib -a $first != /usr/X11R6 -a "`echo $ll | fgrep libcrypto`" = "" ]; then
-#                                                              /usr/bin/install_name_tool -change $ll $to ../lib/$base
-#                                                      fi
-#                                              done
-#                                      fi
-#                              fi
-#                      done
-#              fi
-# }
+# NOTE: we must rpathify *all* files, *including* plugins for GTK+ etc.,
+#      to keep GTK+ from crashing at startup.
 #
-# Fix package deps
-#(cd "$package/Contents/MacOS/bin"
-# for file in *; do
-#               fixlib "$file"
-# done
-# cd ../lib
-# for file in *; do
-#               fixlib "$file"
-# done)
+rpathify_file () {
+       # Fix a given executable, library, or plugin to be relocatable
+       if [ ! -d "$1" ]; then
+               #
+               # OK, what type of file is this?
+               #
+               filetype=`otool -hv "$1" | sed -n '4p' | awk '{print $5}'`
+               case "$filetype" in
+
+               EXECUTE|DYLIB|BUNDLE)
+                       #
+                       # Executable, library, or plugin.  (Plugins
+                       # can be either DYLIB or BUNDLE; shared
+                       # libraries are DYLIB.)
+                       #
+                       # For DYLIB and BUNDLE, fix the shared
+                       # library identification.
+                       #
+                       if [[ "$filetype" = "DYLIB" || "$filetype" = "BUNDLE" ]]; then
+                               echo "Changing shared library identification of $1"
+                               base=`echo $1 | awk -F/ '{print $NF}'`
+                               #
+                               # The library will end up in a directory in
+                               # the rpath; this is what we should change its
+                               # ID to.
+                               #
+                               to=@rpath/$base
+                               /usr/bin/install_name_tool -id $to $1
+                       fi
+
+                       #
+                       # Get the list of dynamic libraries on which this
+                       # file depends, and select only the libraries that
+                       # are in $LIBPREFIX, as those are the only ones
+                       # that we'll be shipping in the app bundle; the
+                       # other libraries are system-supplied or supplied
+                       # as part of X11, will be expected to be on the
+                       # system on which the bundle will be installed,
+                       # and should be referred to by their full pathnames.
+                       #
+                       libs="`\
+                               otool -L $1 \
+                               | fgrep compatibility \
+                               | cut -d\( -f1 \
+                               | egrep -v "$exclude_prefixes" \
+                               | sort \
+                               | uniq \
+                               `"
+
+                       for lib in $libs; do
+                               #
+                               # Get the file name of the library.
+                               #
+                               base=`echo $lib | awk -F/ '{print $NF}'`
+                               #
+                               # The library will end up in a directory in
+                               # the rpath; this is what we should change its
+                               # file name to.
+                               #
+                               to=@rpath/$base
+                               #
+                               # Change the reference to that library.
+                               #
+                               echo "Changing reference to $lib to $to in $1"
+                               /usr/bin/install_name_tool -change $lib $to $1
+                       done
+                       ;;
+               esac
+       fi
+}
+
+rpathify_dir () {
+       #
+       # Make sure we *have* that directory
+       #
+       if [ -d "$1" ]; then
+               (cd "$1"
+               #
+               # Make sure we *have* files to fix
+               #
+               files=`ls $2 2>/dev/null`
+               if [ ! -z "$files" ]; then
+                       for file in $files; do
+                               rpathify_file "$file" "`pwd`"
+                       done
+               fi
+               )
+       fi
+}
+
+rpathify_files () {
+       #
+       # Fix package deps
+       #
+       rpathify_dir "$pkglib" "*.dylib"
+       if [ "$ui_toolkit" = "gtk" ] ; then
+               rpathify_dir "$pkglib/gtk-2.0/$gtk_version/loaders" "*.so"
+               rpathify_dir "$pkglib/gtk-2.0/$gtk_version/engines" "*.so"
+               rpathify_dir "$pkglib/gtk-2.0/$gtk_version/immodules" "*.so"
+               rpathify_dir "$pkglib/gtk-2.0/$gtk_version/printbackends" "*.so"
+               rpathify_dir "$pkglib/gnome-vfs-2.0/modules" "*.so"
+               rpathify_dir "$pkglib/gdk-pixbuf-2.0/$gtk_version/loaders" "*.so"
+               rpathify_dir "$pkglib/pango/$pango_version/modules" "*.so"
+       fi
+       rpathify_dir "$pkgbin" "*"
+}
+
+if [ "$ui_toolkit" = "qt" ] ; then
+       macdeployqt "$package" -verbose=2
+fi
+
+PATHLENGTH=`echo $LIBPREFIX | wc -c`
+if [ "$PATHLENGTH" -ge "6" ]; then
+       # If the LIBPREFIX path is long enough to allow 
+       # path rewriting, then do this.
+       # 6 is the length of @rpath, which replaces LIBPREFIX.
+       rpathify_files
+else
+       echo "Could not rewrite dylib paths for bundled libraries.  This requires" >&2
+       echo "the support libraries to be installed in a PREFIX of at least 6 characters in length." >&2
+       echo "" >&2
+       echo "The package will still work if the following line is uncommented in" >&2
+       echo "Wireshark.app/Contents/Resources/bin/{various scripts}:" >&2
+       echo '        export DYLD_LIBRARY_PATH="$TOP/lib"' >&2
+       exit 1
+
+fi
+
+if [ -n "$CODE_SIGN_IDENTITY" ] ; then
+       echo -e "Signing $package"
+       codesign --sign "$CODE_SIGN_IDENTITY" --verbose "$package" || exit 1
+       codesign --verify --verbose "$package" || exit 1
+fi
 
 exit 0