Ensure the Mac Appbundle builds correctly both with and without code signing.

Correct current versions of Python/Qt while we're passing.
This commit is contained in:
Atira Odhner 2017-02-16 11:25:32 +00:00 committed by Dave Page
parent 9ad1316990
commit e3041f1113
8 changed files with 108 additions and 69 deletions

2
.gitignore vendored
View File

@ -19,6 +19,8 @@ _build
build-* build-*
pgadmin4.log pgadmin4.log
pkg/win32/installer.iss pkg/win32/installer.iss
pkg/mac/codesign.conf
pkg/mac/framework.conf
runtime/.qmake.cache runtime/.qmake.cache
runtime/.qmake.stash runtime/.qmake.stash
runtime/Makefile runtime/Makefile

6
README
View File

@ -239,6 +239,12 @@ On a Mac, build an application bundle in a disk image (DMG file) with:
(pgadmin4) $ make appbundle (pgadmin4) $ make appbundle
Configure the framework.conf to match the QT and Python versions the app is
being built with:
$ cp $PGADMIN4_SRC/pkg/mac/framework.conf.in $PGADMIN4_SRC/pkg/mac/framework.conf
$ vi $PGADMIN4_SRC/pkg/mac/framework.conf
If you have an Apple code signing certificate, both the app bundle and disk If you have an Apple code signing certificate, both the app bundle and disk
image can be automatically signed by configuring signing: image can be automatically signed by configuring signing:

View File

@ -8,6 +8,14 @@ export BUILDROOT=$WD/../../mac-build
export DISTROOT=$WD/../../dist export DISTROOT=$WD/../../dist
export VIRTUALENV=venv export VIRTUALENV=venv
if [ ! -f $SOURCEDIR/pkg/mac/framework.conf ]; then
echo
echo "Error: pkg/mac/framework.conf not found!"
echo "Copy pkg/mac/framework.conf.in to pkg/mac/framework.conf and edit as required for the current system."
echo
exit 1
fi
if [ "x$PYTHON_HOME" == "x" ]; then if [ "x$PYTHON_HOME" == "x" ]; then
echo "PYTHON_HOME not set. Setting it to default" echo "PYTHON_HOME not set. Setting it to default"
export PYTHON_HOME=/System/Library/Frameworks/Python.framework/Versions/2.7 export PYTHON_HOME=/System/Library/Frameworks/Python.framework/Versions/2.7
@ -24,7 +32,7 @@ else
exit 1 exit 1
fi fi
if [ "$PYTHON_VERSION" -gt "35" -a "$PYTHON_VERSION" -lt "26" ]; then if [ "$PYTHON_VERSION" -gt "36" -a "$PYTHON_VERSION" -lt "26" ]; then
echo "Python version not supported" echo "Python version not supported"
exit 1 exit 1
fi fi
@ -41,7 +49,7 @@ fi
if [ "x$QTDIR" == "x" ]; then if [ "x$QTDIR" == "x" ]; then
echo "QTDIR not set. Setting it to default" echo "QTDIR not set. Setting it to default"
export QTDIR=~/Qt/5.7/clang_64 export QTDIR=~/Qt/5.8/clang_64
fi fi
export QMAKE=$QTDIR/bin/qmake export QMAKE=$QTDIR/bin/qmake
if ! $QMAKE --version > /dev/null 2>&1; then if ! $QMAKE --version > /dev/null 2>&1; then
@ -175,9 +183,14 @@ _complete_bundle() {
find . -name *.pyc | xargs rm -f find . -name *.pyc | xargs rm -f
} }
_framework_config() {
cd $SOURCEDIR/pkg/mac
./framework-config.sh "$BUILDROOT/$APP_BUNDLE_NAME" || { echo "framework-config.sh failed"; exit 1; }
}
_codesign_bundle() { _codesign_bundle() {
cd $SOURCEDIR/pkg/mac cd $SOURCEDIR/pkg/mac
if [ ! -f codesign.conf ]; then if [ ! -f codesign.conf ]; then
echo echo
echo "******************************************************************" echo "******************************************************************"
@ -188,7 +201,7 @@ _codesign_bundle() {
return return
fi fi
./codesign-bundle.sh "$BUILDROOT/$APP_BUNDLE_NAME" || { echo codesign-bundle.sh failed; exit 1; } ./codesign-bundle.sh "$BUILDROOT/$APP_BUNDLE_NAME" || { echo codesign-bundle.sh failed; exit 1; }
} }
_create_dmg() { _create_dmg() {
@ -219,6 +232,7 @@ _cleanup
_build_runtime || { echo Runtime build failed; exit 1; } _build_runtime || { echo Runtime build failed; exit 1; }
_build_doc _build_doc
_complete_bundle _complete_bundle
_framework_config
_codesign_bundle _codesign_bundle
_create_dmg _create_dmg
_codesign_dmg _codesign_dmg

View File

@ -10,61 +10,6 @@ fi
# Get the config # Get the config
source codesign.conf source codesign.conf
SCRIPT_DIR=`pwd`
echo Reorganising the framework structure
# Create "Current" and "Current/Resources" inside each of the framework dirs
MYDIR=`pwd`
find "${BUNDLE}/Contents/Frameworks"/*framework -type d -name "Versions" | while read -r myVar; do
cd "${myVar}"
# Create framework 'Current' soft link
VERSION_NUMBER=`ls -1`
ln -s $VERSION_NUMBER Current
# Create "Resources" subdirectory
if [ ! -d Current/Resources ]; then
mkdir Current/Resources
fi
cd "${MYDIR}"
done
# Stuff for Qt framework files only
find "${BUNDLE}/Contents/Frameworks" -type d -name "Qt*framework" | while read -r myVar; do
cd "${myVar}"
# Create soft link to the framework binary
ln -s Versions/Current/Qt*
# Create soft link to the framework Resources dir
ln -s Versions/Current/Resources
# Create the Info.plist files
MYNAME=`ls -1 Qt*`
sed 's/__SHORT_VERSION__/${QT_SHORT_VERSION}/' "${SCRIPT_DIR}/Info.plist-template_Qt5" | sed 's/__FULL_VERSION__/${QT_FULL_VERSION}/' | sed "s/__FRAMEWORK_NAME__/${MYNAME}/" > "Resources/Info.plist"
cd "${MYDIR}"
done
# Same thing, but specific to the Python framework dir
find "${BUNDLE}/Contents/Frameworks" -type d -name "P*framework" | while read -r myVar; do
cd "${myVar}"
# Create soft link to the framework binary
ln -s Versions/Current/Py*
# Create soft link to the framework Resources dir
ln -s Versions/Current/Resources
# Create the Info.plist file
MYNAME=`ls -1 Py*`
sed 's/__SHORT_VERSION__/${PYTHON_SHORT_VERSION}/' "${SCRIPT_DIR}/Info.plist-template_Python" | sed 's/__FULL_VERSION__/${PYTHON_FULL_VERSION}/' | sed "s/__FRAMEWORK_NAME__/${MYNAME}/" > "Resources/Info.plist"
cd "${MYDIR}"
done
# Sign the .app # Sign the .app
echo Signing ${BUNDLE} echo Signing ${BUNDLE}
codesign --sign "${DEVELOPER_ID}" --verbose --deep --force "${BUNDLE}" codesign --sign "${DEVELOPER_ID}" --verbose --deep --force "${BUNDLE}"

View File

@ -2,13 +2,3 @@
# codesign.conf, and edit the value below to reflect your developer ID # codesign.conf, and edit the value below to reflect your developer ID
DEVELOPER_ID="Developer ID Application: My Name (12345ABCD)" DEVELOPER_ID="Developer ID Application: My Name (12345ABCD)"
# Edit the settings below if different versions of Python/Qt are used
PYTHON_SHORT_VERSION=2.7
PYTHON_FULL_VERSION=2.7.0
QT_SHORT_VERSION=5.5
QT_FULL_VERSION=5.5.1

View File

@ -121,6 +121,7 @@ function CompleteSingleApp() {
if echo $lib | grep Python > /dev/null ; then if echo $lib | grep Python > /dev/null ; then
fw_relpath="$fw_relpath/$pyfw_path" fw_relpath="$fw_relpath/$pyfw_path"
fi fi
chmod +w $todo_obj
echo "Rewriting library $lib to @loader_path/$fw_relpath/$lib_bn in $todo_obj" echo "Rewriting library $lib to @loader_path/$fw_relpath/$lib_bn in $todo_obj"
echo install_name_tool -change "$lib" "@loader_path/$fw_relpath/$lib_bn" "$todo_obj" echo install_name_tool -change "$lib" "@loader_path/$fw_relpath/$lib_bn" "$todo_obj"
install_name_tool -change \ install_name_tool -change \

71
pkg/mac/framework-config.sh Executable file
View File

@ -0,0 +1,71 @@
#!/bin/sh
BUNDLE="$1"
if ! test -d "${BUNDLE}" ; then
echo "${BUNDLE} is no bundle!" >&2
exit 1
fi
# Get the config
source framework.conf
SCRIPT_DIR=`pwd`
echo Reorganising the framework structure
# Create "Current" and "Current/Resources" inside each of the framework dirs
MYDIR=`pwd`
find "${BUNDLE}/Contents/Frameworks"/*framework -type d -name "Versions" | while read -r framework_dir; do
cd "${framework_dir}"
# Create framework 'Current' soft link
VERSION_NUMBER=`ls -1`
ln -s $VERSION_NUMBER Current || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create "Resources" subdirectory
if [ ! -d Current/Resources ]; then
mkdir Current/Resources
fi
cd "${MYDIR}"
done
# Stuff for Qt framework files only
find "${BUNDLE}/Contents/Frameworks" -type d -name "Qt*framework" | while read -r framework_dir; do
cd "${framework_dir}"
# Create soft link to the framework binary
ln -s Versions/Current/Qt* || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create soft link to the framework Resources dir
ln -s Versions/Current/Resources || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create the Info.plist files
MYNAME=`ls -1 Qt*`
if [ -f Resources/Info.plist ]; then
chmod +w Resources/Info.plist
fi
sed 's/__SHORT_VERSION__/${QT_SHORT_VERSION}/' "${SCRIPT_DIR}/Info.plist-template_Qt5" | sed 's/__FULL_VERSION__/${QT_FULL_VERSION}/' | sed "s/__FRAMEWORK_NAME__/${MYNAME}/" > "Resources/Info.plist" || { echo "sed replacement in framework-config.sh failed"; exit 1; }
cd "${MYDIR}"
done
# Same thing, but specific to the Python framework dir
find "${BUNDLE}/Contents/Frameworks" -type d -name "P*framework" | while read -r framework_dir; do
cd "${framework_dir}"
# Create soft link to the framework binary
ln -s Versions/Current/Py* || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create soft link to the framework Resources dir
ln -s Versions/Current/Resources || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create the Info.plist file
MYNAME=`ls -1 Py*`
sed 's/__SHORT_VERSION__/${PYTHON_SHORT_VERSION}/' "${SCRIPT_DIR}/Info.plist-template_Python" | sed 's/__FULL_VERSION__/${PYTHON_FULL_VERSION}/' | sed "s/__FRAMEWORK_NAME__/${MYNAME}/" > "Resources/Info.plist" || { echo "sed replacement in framework-config.sh failed"; exit 1; }
cd "${MYDIR}"
done
echo ${BUNDLE} framework config finished

10
pkg/mac/framework.conf.in Normal file
View File

@ -0,0 +1,10 @@
# copy this file to framework.conf, and edit the values below to reflect your environment
# (versions of Python/Qt used)
PYTHON_SHORT_VERSION=2.7
PYTHON_FULL_VERSION=2.7.10
QT_SHORT_VERSION=5.8
QT_FULL_VERSION=5.8.0