mirror of
				https://github.com/pgadmin-org/pgadmin4.git
				synced 2025-02-25 18:55:31 -06:00 
			
		
		
		
	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:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -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
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								README
									
									
									
									
									
								
							@@ -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:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
@@ -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}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
									
								
							
							
						
						
									
										71
									
								
								pkg/mac/framework-config.sh
									
									
									
									
									
										Executable 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
									
								
							
							
						
						
									
										10
									
								
								pkg/mac/framework.conf.in
									
									
									
									
									
										Normal 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user