mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
3.9 KiB
Bash
84 lines
3.9 KiB
Bash
2 years ago
|
#!/bin/bash
|
||
|
|
||
|
# XCode will error during it's dependency graph construction (which happens before the build
|
||
|
# stage starts and any target "Run Script" phases are triggered)
|
||
|
#
|
||
|
# In order to avoid this error we need to build the framework before actually getting to the
|
||
|
# build stage so XCode is able to build the dependency graph
|
||
|
#
|
||
|
# XCode's Pre-action scripts don't output anything into XCode so the only way to emit a useful
|
||
|
# error is to return a success status and have the project detect and log the error itself then
|
||
|
# log it, stopping the build at that point
|
||
|
#
|
||
|
# The other step to get this to work properly is to ensure the framework in "Link Binary with
|
||
|
# Libraries" isn't using a relative directory, unfortunately there doesn't seem to be a good
|
||
|
# way to do this directly so we need to modify the '.pbxproj' file directly, updating the
|
||
|
# framework entry to have the following (on a single line):
|
||
|
# {
|
||
|
# isa = PBXFileReference;
|
||
|
# explicitFileType = wrapper.xcframework;
|
||
|
# includeInIndex = 0;
|
||
|
# path = "{FRAMEWORK NAME GOES HERE}";
|
||
|
# sourceTree = BUILD_DIR;
|
||
|
# };
|
||
|
|
||
|
# Need to set the path or we won't find cmake
|
||
|
PATH=${PATH}:/usr/local/bin:/opt/homebrew/bin:/sbin/md5
|
||
|
|
||
|
# Direct the output to a log file
|
||
|
exec > "${TARGET_BUILD_DIR}/libsession_util_output.log" 2>&1
|
||
|
|
||
|
# Remove any old build errors
|
||
|
rm -rf "${TARGET_BUILD_DIR}/libsession_util_error.log"
|
||
|
|
||
|
# First ensure cmake is installed (store the error in a log and exit with a success status - xcode will output the error)
|
||
|
if ! which cmake > /dev/null; then
|
||
|
echo "error: cmake is required to build, please install (can install via homebrew with 'brew install cmake')." > "${TARGET_BUILD_DIR}/error.log"
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
# Generate a hash of the libSession-util source files and check if they differ from the last hash
|
||
|
NEW_SOURCE_HASH=$(find "${SRCROOT}/LibSession-Util/src" -type f -exec md5 {} + | awk '{print $NF}' | sort | md5 | awk '{print $NF}')
|
||
|
NEW_HEADER_HASH=$(find "${SRCROOT}/LibSession-Util/include" -type f -exec md5 {} + | awk '{print $NF}' | sort | md5 | awk '{print $NF}')
|
||
|
|
||
|
if [ -f "${TARGET_BUILD_DIR}/libsession_util_source_hash.log" ]; then
|
||
|
read -r OLD_SOURCE_HASH < "${TARGET_BUILD_DIR}/libsession_util_source_hash.log"
|
||
|
fi
|
||
|
|
||
|
if [ -f "${TARGET_BUILD_DIR}/libsession_util_header_hash.log" ]; then
|
||
|
read -r OLD_HEADER_HASH < "${TARGET_BUILD_DIR}/libsession_util_header_hash.log"
|
||
|
fi
|
||
|
|
||
|
if [ -f "${TARGET_BUILD_DIR}/libsession_util_archs.log" ]; then
|
||
|
read -r OLD_ARCHS < "${TARGET_BUILD_DIR}/libsession_util_archs.log"
|
||
|
fi
|
||
|
|
||
|
# Start the libSession-util build if it doesn't already exists
|
||
|
if [ "${NEW_SOURCE_HASH}" != "${OLD_SOURCE_HASH}" ] || [ "${NEW_HEADER_HASH}" != "${OLD_HEADER_HASH}" ] || [ "${ARCHS[*]}" != "${OLD_ARCHS}" ] || [ ! -d "${TARGET_BUILD_DIR}/libsession-util.xcframework" ]; then
|
||
|
echo "info: Build is not up-to-date - creating new build"
|
||
|
echo ""
|
||
|
|
||
|
# Remove any existing build files (just to be safe)
|
||
|
rm -rf "${TARGET_BUILD_DIR}/libsession-util.a"
|
||
|
rm -rf "${TARGET_BUILD_DIR}/libsession-util.xcframework"
|
||
|
rm -rf "${BUILD_DIR}/libsession-util.xcframework"
|
||
|
|
||
|
# Trigger the new build
|
||
|
cd "${SRCROOT}/LibSession-Util"
|
||
|
result=$(./utils/ios.sh "libsession-util" false)
|
||
|
|
||
|
if [ $? -ne 0 ]; then
|
||
|
echo "error: Failed to build libsession-util (See details in '${TARGET_BUILD_DIR}/pre-action-output.log')." > "${TARGET_BUILD_DIR}/error.log"
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
# Save the updated source hash to disk to prevent rebuilds when there were no changes
|
||
|
echo "${NEW_SOURCE_HASH}" > "${TARGET_BUILD_DIR}/libsession_util_source_hash.log"
|
||
|
echo "${NEW_HEADER_HASH}" > "${TARGET_BUILD_DIR}/libsession_util_header_hash.log"
|
||
|
echo "${ARCHS[*]}" > "${TARGET_BUILD_DIR}/libsession_util_archs.log"
|
||
|
fi
|
||
|
|
||
|
# Move the target-specific libSession-util build to the parent build directory (so XCode can have a reference to a single build)
|
||
|
rm -rf "${BUILD_DIR}/libsession-util.xcframework"
|
||
|
cp -r "${TARGET_BUILD_DIR}/libsession-util.xcframework" "${BUILD_DIR}/libsession-util.xcframework"
|