view deploy/osx/paths.sh @ 1866:65d244ee39f9

Experimentally add a rule to re-run Repoint if the project or lock file is newer than the .repoint.point file. This sort of thing isn't sufficient for all uses of Repoint because some of the initial qmake project file info is brought in by Repoint, so it has to be run before qmake as well. Also it's not clear yet how it will interact with archived builds (i.e. source releases) -- to be tested.
author Chris Cannam
date Tue, 19 Jun 2018 15:03:24 +0100
parents 2d48532a074b
children
line wrap: on
line source
#!/bin/bash

set -e

app="$1"
if [ -z "$app" ]; then
	echo "Usage: $0 <appname>"
	echo "Provide appname without the .app extension, please"
	exit 2
fi

set -u

frameworks="QtCore QtNetwork QtGui QtXml QtSvg QtWidgets QtPrintSupport QtDBus"

echo
echo "I expect you to have already copied these frameworks from the Qt installation to"
echo "$app.app/Contents/Frameworks -- expect errors to follow if they're missing:"
echo "$frameworks"
echo

echo "Fixing up loader paths in binaries..."

for fwk in $frameworks; do
    install_name_tool -id $fwk "$app.app/Contents/Frameworks/$fwk"
done

find "$app.app" -name \*.dylib -print | while read x; do
    install_name_tool -id "`basename \"$x\"`" "$x"
done

for fwk in $frameworks; do
    find "$app.app" -type f -print | while read x; do
	if [ -x "$x" ]; then
            current=$(otool -L "$x" | grep "$fwk" | grep amework | grep -v ':$' | awk '{ print $1; }')
            [ -z "$current" ] && continue
            echo "$x has $current"
            relative=$(echo "$x" | sed -e "s,$app.app/Contents/,," \
				       -e 's,[^/]*/,../,g' \
				       -e 's,/[^/]*$,/Frameworks/'"$fwk"',' )
            echo "replacing with relative path $relative"
            install_name_tool -change "$current" "@loader_path/$relative" "$x"
	fi
    done
done

find "$app.app" -type f -print | while read x; do
    if [ -x "$x" ]; then
	qtdep=$(otool -L "$x" | grep Qt | grep amework | grep -v ':$' | grep -v '@loader_path' | awk '{ print $1; }')
	if [ -n "$qtdep" ]; then
	    echo
	    echo "ERROR: File $x depends on Qt framework(s) not apparently present in the bundle:"
	    echo $qtdep
	    exit 1
	fi
    fi
done

echo "Done: be sure to run the app and see that it works!"