mirror of
https://github.com/gosticks/SwiftGit2.git
synced 2025-10-16 11:55:34 +00:00
Copy scripts from objective-git
This commit is contained in:
parent
26efaf67c3
commit
ec4a6cbce7
18
script/LICENSE.md
Normal file
18
script/LICENSE.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
**Copyright (c) 2013 Justin Spahr-Summers**
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
82
script/README.md
Normal file
82
script/README.md
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# objc-build-scripts
|
||||||
|
|
||||||
|
This project is a collection of scripts created with two goals:
|
||||||
|
|
||||||
|
1. To standardize how Objective-C projects are bootstrapped after cloning
|
||||||
|
1. To easily build Objective-C projects on continuous integration servers
|
||||||
|
|
||||||
|
## Scripts
|
||||||
|
|
||||||
|
Right now, there are two important scripts: [`bootstrap`](#bootstrap) and
|
||||||
|
[`cibuild`](#cibuild). Both are Bash scripts, to maximize compatibility and
|
||||||
|
eliminate pesky system configuration issues (like setting up a working Ruby
|
||||||
|
environment).
|
||||||
|
|
||||||
|
The structure of the scripts on disk is meant to follow that of a typical Ruby
|
||||||
|
project:
|
||||||
|
|
||||||
|
```
|
||||||
|
script/
|
||||||
|
bootstrap
|
||||||
|
cibuild
|
||||||
|
```
|
||||||
|
|
||||||
|
### bootstrap
|
||||||
|
|
||||||
|
This script is responsible for bootstrapping (initializing) your project after
|
||||||
|
it's been checked out. Here, you should install or clone any dependencies that
|
||||||
|
are required for a working build and development environment.
|
||||||
|
|
||||||
|
By default, the script will verify that [xctool][] is installed, then initialize
|
||||||
|
and update submodules recursively. If any submodules contain `script/bootstrap`,
|
||||||
|
that will be run as well.
|
||||||
|
|
||||||
|
To check that other tools are installed, you can set the `REQUIRED_TOOLS`
|
||||||
|
environment variable before running `script/bootstrap`, or edit it within the
|
||||||
|
script directly. Note that no installation is performed automatically, though
|
||||||
|
this can always be added within your specific project.
|
||||||
|
|
||||||
|
### cibuild
|
||||||
|
|
||||||
|
This script is responsible for building the project, as you would want it built
|
||||||
|
for continuous integration. This is preferable to putting the logic on the CI
|
||||||
|
server itself, since it ensures that any changes are versioned along with the
|
||||||
|
source.
|
||||||
|
|
||||||
|
By default, the script will run [`bootstrap`](#bootstrap), look for any Xcode
|
||||||
|
workspace or project in the working directory, then build all targets/schemes
|
||||||
|
(as found by `xcodebuild -list`) using [xctool][].
|
||||||
|
|
||||||
|
You can also specify the schemes to build by passing them into the script:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
script/cibuild ReactiveCocoa-Mac ReactiveCocoa-iOS
|
||||||
|
```
|
||||||
|
|
||||||
|
As with the `bootstrap` script, there are several environment variables that can
|
||||||
|
be used to customize behavior. They can be set on the command line before
|
||||||
|
invoking the script, or the defaults changed within the script directly.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
To add the scripts to your project, read the contents of this repository into
|
||||||
|
a `script` folder:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git remote add objc-build-scripts https://github.com/jspahrsummers/objc-build-scripts.git
|
||||||
|
$ git fetch objc-build-scripts
|
||||||
|
$ git read-tree --prefix=script/ -u objc-build-scripts/master
|
||||||
|
```
|
||||||
|
|
||||||
|
Then commit the changes, to incorporate the scripts into your own repository's
|
||||||
|
history. You can also freely tweak the scripts for your specific project's
|
||||||
|
needs.
|
||||||
|
|
||||||
|
To merge in upstream changes later:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git fetch -p objc-build-scripts
|
||||||
|
$ git merge --ff --squash -Xsubtree=script objc-build-scripts/master
|
||||||
|
```
|
||||||
|
|
||||||
|
[xctool]: https://github.com/facebook/xctool
|
||||||
123
script/bootstrap
Executable file
123
script/bootstrap
Executable file
@ -0,0 +1,123 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export SCRIPT_DIR=$(dirname "$0")
|
||||||
|
|
||||||
|
##
|
||||||
|
## Configuration Variables
|
||||||
|
##
|
||||||
|
|
||||||
|
config ()
|
||||||
|
{
|
||||||
|
# A whitespace-separated list of executables that must be present and locatable.
|
||||||
|
: ${REQUIRED_TOOLS="xctool cmake"}
|
||||||
|
|
||||||
|
export REQUIRED_TOOLS
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
## Bootstrap Process
|
||||||
|
##
|
||||||
|
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
config
|
||||||
|
|
||||||
|
if [ -n "$REQUIRED_TOOLS" ]
|
||||||
|
then
|
||||||
|
echo "*** Checking dependencies..."
|
||||||
|
check_deps
|
||||||
|
fi
|
||||||
|
|
||||||
|
local submodules=$(git submodule status)
|
||||||
|
local result=$?
|
||||||
|
|
||||||
|
if [ "$result" -ne "0" ]
|
||||||
|
then
|
||||||
|
exit $result
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$submodules" ]
|
||||||
|
then
|
||||||
|
echo "*** Updating submodules..."
|
||||||
|
update_submodules
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_deps ()
|
||||||
|
{
|
||||||
|
for tool in $REQUIRED_TOOLS
|
||||||
|
do
|
||||||
|
which -s "$tool"
|
||||||
|
if [ "$?" -ne "0" ]
|
||||||
|
then
|
||||||
|
echo "*** Error: $tool not found. Please install it and bootstrap again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Ensure that we have libgit2's dependencies installed.
|
||||||
|
installed=`brew list`
|
||||||
|
libs="libssh2 libtool autoconf automake"
|
||||||
|
|
||||||
|
for lib in $libs
|
||||||
|
do
|
||||||
|
# Skip packages that are already installed.
|
||||||
|
echo "$installed" | grep -q "$lib" && code=$? || code=$?
|
||||||
|
|
||||||
|
if [ "$code" -eq "0" ]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
elif [ "$code" -ne "1" ]
|
||||||
|
then
|
||||||
|
exit $code
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*** Installing $lib with Homebrew..."
|
||||||
|
brew install "$lib"
|
||||||
|
done
|
||||||
|
|
||||||
|
brew_prefix=`brew --prefix`
|
||||||
|
expected_prefix=/usr/local
|
||||||
|
|
||||||
|
if [ "$brew_prefix" != "$expected_prefix" ]
|
||||||
|
then
|
||||||
|
echo "*** Adding soft links into $expected_prefix..."
|
||||||
|
|
||||||
|
products=(lib/libssh2.a include/libssh2.h include/libssh2_sftp.h include/libssh2_publickey.h)
|
||||||
|
|
||||||
|
for product in "${products[@]}"
|
||||||
|
do
|
||||||
|
destination="$expected_prefix/$product"
|
||||||
|
if [ -e "$destination" ]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo mkdir -p "$(dirname "$destination")"
|
||||||
|
sudo ln -s "$brew_prefix/$product" "$destination"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
bootstrap_submodule ()
|
||||||
|
{
|
||||||
|
local bootstrap="script/bootstrap"
|
||||||
|
|
||||||
|
if [ -e "$bootstrap" ]
|
||||||
|
then
|
||||||
|
echo "*** Bootstrapping $name..."
|
||||||
|
"$bootstrap" >/dev/null
|
||||||
|
else
|
||||||
|
update_submodules
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
update_submodules ()
|
||||||
|
{
|
||||||
|
git submodule sync --quiet && git submodule update --init && git submodule foreach --quiet bootstrap_submodule
|
||||||
|
}
|
||||||
|
|
||||||
|
export -f bootstrap_submodule
|
||||||
|
export -f update_submodules
|
||||||
|
|
||||||
|
main
|
||||||
150
script/cibuild
Executable file
150
script/cibuild
Executable file
@ -0,0 +1,150 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export SCRIPT_DIR=$(dirname "$0")
|
||||||
|
|
||||||
|
##
|
||||||
|
## Configuration Variables
|
||||||
|
##
|
||||||
|
|
||||||
|
SCHEMES="$@"
|
||||||
|
|
||||||
|
config ()
|
||||||
|
{
|
||||||
|
# The workspace to build.
|
||||||
|
#
|
||||||
|
# If not set and no workspace is found, the -workspace flag will not be passed
|
||||||
|
# to `xctool`.
|
||||||
|
#
|
||||||
|
# Only one of `XCWORKSPACE` and `XCODEPROJ` needs to be set. The former will
|
||||||
|
# take precedence.
|
||||||
|
: ${XCWORKSPACE=$(find_pattern "*.xcworkspace")}
|
||||||
|
|
||||||
|
# The project to build.
|
||||||
|
#
|
||||||
|
# If not set and no project is found, the -project flag will not be passed
|
||||||
|
# to `xctool`.
|
||||||
|
#
|
||||||
|
# Only one of `XCWORKSPACE` and `XCODEPROJ` needs to be set. The former will
|
||||||
|
# take precedence.
|
||||||
|
: ${XCODEPROJ=$(find_pattern "*.xcodeproj")}
|
||||||
|
|
||||||
|
# A bootstrap script to run before building.
|
||||||
|
#
|
||||||
|
# If this file does not exist, it is not considered an error.
|
||||||
|
: ${BOOTSTRAP="$SCRIPT_DIR/bootstrap"}
|
||||||
|
|
||||||
|
# Extra options to pass to xctool.
|
||||||
|
: ${XCTOOL_OPTIONS="RUN_CLANG_STATIC_ANALYZER=NO"}
|
||||||
|
|
||||||
|
# A whitespace-separated list of default schemes to build.
|
||||||
|
#
|
||||||
|
# Individual names can be quoted to avoid word splitting.
|
||||||
|
: ${SCHEMES:=$(xcodebuild -list -project "$XCODEPROJ" 2>/dev/null | awk -f "$SCRIPT_DIR/schemes.awk")}
|
||||||
|
|
||||||
|
export XCWORKSPACE
|
||||||
|
export XCODEPROJ
|
||||||
|
export BOOTSTRAP
|
||||||
|
export XCTOOL_OPTIONS
|
||||||
|
export SCHEMES
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
## Build Process
|
||||||
|
##
|
||||||
|
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
config
|
||||||
|
|
||||||
|
if [ -f "$BOOTSTRAP" ]
|
||||||
|
then
|
||||||
|
echo "*** Bootstrapping..."
|
||||||
|
"$BOOTSTRAP" || exit $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*** The following schemes will be built:"
|
||||||
|
echo "$SCHEMES" | xargs -n 1 echo " "
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "$SCHEMES" | xargs -n 1 | (
|
||||||
|
local status=0
|
||||||
|
|
||||||
|
while read scheme
|
||||||
|
do
|
||||||
|
build_scheme "$scheme" || status=1
|
||||||
|
done
|
||||||
|
|
||||||
|
exit $status
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
find_pattern ()
|
||||||
|
{
|
||||||
|
ls -d $1 2>/dev/null | head -n 1
|
||||||
|
}
|
||||||
|
|
||||||
|
run_xctool ()
|
||||||
|
{
|
||||||
|
if [ -n "$XCWORKSPACE" ]
|
||||||
|
then
|
||||||
|
xctool -workspace "$XCWORKSPACE" $XCTOOL_OPTIONS "$@" 2>&1
|
||||||
|
elif [ -n "$XCODEPROJ" ]
|
||||||
|
then
|
||||||
|
xctool -project "$XCODEPROJ" $XCTOOL_OPTIONS "$@" 2>&1
|
||||||
|
else
|
||||||
|
echo "*** No workspace or project file found."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_build ()
|
||||||
|
{
|
||||||
|
awk -f "$SCRIPT_DIR/xctool.awk" 2>&1 >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
build_scheme ()
|
||||||
|
{
|
||||||
|
local scheme=$1
|
||||||
|
|
||||||
|
echo "*** Building and testing $scheme..."
|
||||||
|
echo
|
||||||
|
|
||||||
|
local sdkflag=
|
||||||
|
local action=test
|
||||||
|
|
||||||
|
# Determine whether we can run unit tests for this target.
|
||||||
|
run_xctool -scheme "$scheme" run-tests | parse_build
|
||||||
|
|
||||||
|
local awkstatus=$?
|
||||||
|
|
||||||
|
if [ "$awkstatus" -eq "1" ]
|
||||||
|
then
|
||||||
|
# SDK not found, try for iphonesimulator.
|
||||||
|
sdkflag="-sdk iphonesimulator"
|
||||||
|
|
||||||
|
# Determine whether the unit tests will run with iphonesimulator
|
||||||
|
run_xctool $sdkflag -scheme "$scheme" run-tests | parse_build
|
||||||
|
|
||||||
|
awkstatus=$?
|
||||||
|
|
||||||
|
if [ "$awkstatus" -ne "0" ]
|
||||||
|
then
|
||||||
|
# Unit tests will not run on iphonesimulator.
|
||||||
|
sdkflag=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$awkstatus" -ne "0" ]
|
||||||
|
then
|
||||||
|
# Unit tests aren't supported.
|
||||||
|
action=build
|
||||||
|
fi
|
||||||
|
|
||||||
|
run_xctool $sdkflag -scheme "$scheme" $action
|
||||||
|
}
|
||||||
|
|
||||||
|
export -f build_scheme
|
||||||
|
export -f run_xctool
|
||||||
|
export -f parse_build
|
||||||
|
|
||||||
|
main
|
||||||
95
script/ios_build_functions.sh
Executable file
95
script/ios_build_functions.sh
Executable file
@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SCRIPT_DIR=$(dirname "$0")
|
||||||
|
source "${SCRIPT_DIR}/xcode_functions.sh"
|
||||||
|
|
||||||
|
function setup_build_environment ()
|
||||||
|
{
|
||||||
|
# augment path to help it find cmake installed in /usr/local/bin,
|
||||||
|
# e.g. via brew. Xcode's Run Script phase doesn't seem to honor
|
||||||
|
# ~/.MacOSX/environment.plist
|
||||||
|
PATH="/usr/local/bin:/opt/boxen/homebrew/bin:$PATH"
|
||||||
|
|
||||||
|
pushd "$SCRIPT_DIR/.." > /dev/null
|
||||||
|
ROOT_PATH="$PWD"
|
||||||
|
popd > /dev/null
|
||||||
|
|
||||||
|
CLANG="/usr/bin/xcrun clang"
|
||||||
|
CC="${CLANG}"
|
||||||
|
CPP="${CLANG} -E"
|
||||||
|
|
||||||
|
# We need to clear this so that cmake doesn't have a conniption
|
||||||
|
MACOSX_DEPLOYMENT_TARGET=""
|
||||||
|
|
||||||
|
XCODE_MAJOR_VERSION=$(xcode_major_version)
|
||||||
|
|
||||||
|
CAN_BUILD_64BIT="0"
|
||||||
|
|
||||||
|
# If IPHONEOS_DEPLOYMENT_TARGET has not been specified
|
||||||
|
# setup reasonable defaults to allow running of a build script
|
||||||
|
# directly (ie not from an Xcode proj)
|
||||||
|
if [ -z "${IPHONEOS_DEPLOYMENT_TARGET}" ]
|
||||||
|
then
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET="6.0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determine if we can be building 64-bit binaries
|
||||||
|
if [ "${XCODE_MAJOR_VERSION}" -ge "5" ] && [ $(echo ${IPHONEOS_DEPLOYMENT_TARGET} '>=' 6.0 | bc -l) == "1" ]
|
||||||
|
then
|
||||||
|
CAN_BUILD_64BIT="1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ARCHS="i386 armv7 armv7s"
|
||||||
|
if [ "${CAN_BUILD_64BIT}" -eq "1" ]
|
||||||
|
then
|
||||||
|
# For some stupid reason cmake needs simulator
|
||||||
|
# builds to be first
|
||||||
|
ARCHS="x86_64 ${ARCHS} arm64"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_all_archs ()
|
||||||
|
{
|
||||||
|
setup_build_environment
|
||||||
|
|
||||||
|
local setup=$1
|
||||||
|
local build_arch=$2
|
||||||
|
local finish_build=$3
|
||||||
|
|
||||||
|
# run the prepare function
|
||||||
|
eval $setup
|
||||||
|
|
||||||
|
echo "Building for ${ARCHS}"
|
||||||
|
|
||||||
|
for ARCH in ${ARCHS}
|
||||||
|
do
|
||||||
|
if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ]
|
||||||
|
then
|
||||||
|
PLATFORM="iphonesimulator"
|
||||||
|
else
|
||||||
|
PLATFORM="iphoneos"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SDKVERSION=$(ios_sdk_version)
|
||||||
|
|
||||||
|
if [ "${ARCH}" == "arm64" ]
|
||||||
|
then
|
||||||
|
HOST="aarch64-apple-darwin"
|
||||||
|
else
|
||||||
|
HOST="${ARCH}-apple-darwin"
|
||||||
|
fi
|
||||||
|
|
||||||
|
SDKNAME="${PLATFORM}${SDKVERSION}"
|
||||||
|
SDKROOT="$(ios_sdk_path ${SDKNAME})"
|
||||||
|
|
||||||
|
echo "Building ${LIBRARY_NAME} for ${SDKNAME} ${ARCH}"
|
||||||
|
echo "Please stand by..."
|
||||||
|
|
||||||
|
# run the per arch build command
|
||||||
|
eval $build_arch
|
||||||
|
done
|
||||||
|
|
||||||
|
# finish the build (usually lipo)
|
||||||
|
eval $finish_build
|
||||||
|
}
|
||||||
|
|
||||||
10
script/schemes.awk
Normal file
10
script/schemes.awk
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
BEGIN {
|
||||||
|
FS = "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/Schemes:/ {
|
||||||
|
while (getline && $0 != "") {
|
||||||
|
sub(/^ +/, "");
|
||||||
|
print "'" $0 "'";
|
||||||
|
}
|
||||||
|
}
|
||||||
12
script/targets.awk
Normal file
12
script/targets.awk
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
BEGIN {
|
||||||
|
FS = "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/Targets:/ {
|
||||||
|
while (getline && $0 != "") {
|
||||||
|
if ($0 ~ /Tests/) continue;
|
||||||
|
|
||||||
|
sub(/^ +/, "");
|
||||||
|
print "'" $0 "'";
|
||||||
|
}
|
||||||
|
}
|
||||||
34
script/update_libgit2
Executable file
34
script/update_libgit2
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# augment path to help it find cmake installed in /usr/local/bin,
|
||||||
|
# e.g. via brew. Xcode's Run Script phase doesn't seem to honor
|
||||||
|
# ~/.MacOSX/environment.plist
|
||||||
|
PATH="/usr/local/bin:$PATH"
|
||||||
|
|
||||||
|
if [ "External/libgit2.a" -nt "External/libgit2" ]
|
||||||
|
then
|
||||||
|
echo "No update needed."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "External/libgit2"
|
||||||
|
|
||||||
|
if [ -d "build" ]; then
|
||||||
|
rm -rf "build"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
|
||||||
|
cmake -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_CLAR:BOOL=OFF -DTHREADSAFE:BOOL=ON ..
|
||||||
|
cmake --build .
|
||||||
|
|
||||||
|
product="libgit2.a"
|
||||||
|
install_path="../../${product}"
|
||||||
|
if [ "${product}" -nt "${install_path}" ]; then
|
||||||
|
cp -v "${product}" "${install_path}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "libgit2 has been updated."
|
||||||
78
script/update_libgit2_ios
Executable file
78
script/update_libgit2_ios
Executable file
@ -0,0 +1,78 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# source the common build functions
|
||||||
|
SCRIPT_DIR=$(dirname "$0")
|
||||||
|
source "${SCRIPT_DIR}/ios_build_functions.sh"
|
||||||
|
|
||||||
|
function setup ()
|
||||||
|
{
|
||||||
|
if [ "${ROOT_PATH}/External/libgit2-ios/libgit2-ios.a" -nt "${ROOT_PATH}/External/libgit2" ]
|
||||||
|
then
|
||||||
|
echo "No update needed."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIBRARY_NAME="libgit2"
|
||||||
|
LIB_PATH="${ROOT_PATH}/External/libgit2-ios"
|
||||||
|
rm -rf "${LIB_PATH}"
|
||||||
|
|
||||||
|
pushd "${ROOT_PATH}/External/libgit2" > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_libgit2 ()
|
||||||
|
{
|
||||||
|
rm -rf "build"
|
||||||
|
mkdir "build"
|
||||||
|
|
||||||
|
pushd "build" > /dev/null
|
||||||
|
|
||||||
|
# LOL Cmake
|
||||||
|
if [ "${ARCH}" != "i386" ] && [ "${ARCH}" != "x86_64" ]
|
||||||
|
then
|
||||||
|
SYS_ROOT="-DCMAKE_OSX_SYSROOT=${SDKROOT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install the each built arch somewhere sane
|
||||||
|
INSTALL_PREFIX="${LIB_PATH}/${SDKNAME}-${ARCH}.sdk"
|
||||||
|
|
||||||
|
mkdir -p "${INSTALL_PREFIX}"
|
||||||
|
|
||||||
|
LOG="${INSTALL_PREFIX}/build-libgit2.log"
|
||||||
|
echo "$LOG"
|
||||||
|
|
||||||
|
cmake -DCMAKE_C_COMPILER=clang \
|
||||||
|
-DCMAKE_C_COMPILER_WORKS:BOOL=ON \
|
||||||
|
-DBUILD_SHARED_LIBS:BOOL=OFF \
|
||||||
|
-DOPENSSL_INCLUDE_DIR:PATH=../../External/ios-openssl/include/ \
|
||||||
|
-DCMAKE_LIBRARY_PATH:PATH=../../External/libssh2-ios/lib/ \
|
||||||
|
-DCMAKE_INCLUDE_PATH:PATH=../../External/libssh2-ios/include/libssh2/ \
|
||||||
|
-DOPENSSL_SSL_LIBRARY:FILEPATH=../../External/ios-openssl/lib/libssl.a \
|
||||||
|
-DCMAKE_LIBRARY_PATH:PATH="${SDKROOT}/usr/lib/" \
|
||||||
|
-DOPENSSL_CRYPTO_LIBRARY:FILEPATH=../../External/ios-openssl/lib/libcrypto.a \
|
||||||
|
-DCMAKE_INSTALL_PREFIX:PATH="${INSTALL_PREFIX}/" \
|
||||||
|
-DBUILD_CLAR:BOOL=OFF \
|
||||||
|
-DTHREADSAFE:BOOL=ON \
|
||||||
|
"${SYS_ROOT}" \
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES:STRING="${ARCH}" \
|
||||||
|
.. >> "${LOG}" 2>&1
|
||||||
|
cmake --build . --target install >> "${LOG}" 2>&1
|
||||||
|
|
||||||
|
# push the built library into the list
|
||||||
|
BUILT_LIB_PATHS+=("${INSTALL_PREFIX}/lib/libgit2.a")
|
||||||
|
popd > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
function fat_binary ()
|
||||||
|
{
|
||||||
|
echo "Building fat binary..."
|
||||||
|
|
||||||
|
lipo -create "${BUILT_LIB_PATHS[@]}" -output "${ROOT_PATH}/External/libgit2-ios/libgit2-ios.a"
|
||||||
|
|
||||||
|
echo "Building done."
|
||||||
|
|
||||||
|
popd > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
build_all_archs setup build_libgit2 fat_binary
|
||||||
55
script/update_libssh2_ios
Executable file
55
script/update_libssh2_ios
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# source the common build functions
|
||||||
|
SCRIPT_DIR=$(dirname "$0")
|
||||||
|
source "${SCRIPT_DIR}/ios_build_functions.sh"
|
||||||
|
|
||||||
|
function setup ()
|
||||||
|
{
|
||||||
|
if [ -f "${ROOT_PATH}/External/libssh2-ios/lib/libssh2-ios.a" ]
|
||||||
|
then
|
||||||
|
echo "No update needed."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
LIBRARY_NAME="libssh2"
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_ssh2 ()
|
||||||
|
{
|
||||||
|
mkdir -p "${ROOT_PATH}/External/libssh2-ios/lib" "${ROOT_PATH}/External/libssh2-ios/lib" "${ROOT_PATH}/External/libssh2-ios/src"
|
||||||
|
|
||||||
|
rm -rf "${ROOT_PATH}/External/libssh2-ios/src/libssh2"
|
||||||
|
cp -R "${ROOT_PATH}/External/libssh2" "${ROOT_PATH}/External/libssh2-ios/src/"
|
||||||
|
pushd "${ROOT_PATH}/External/libssh2-ios/src/libssh2" > /dev/null
|
||||||
|
|
||||||
|
export CFLAGS="-arch ${ARCH} -pipe -no-cpp-precomp -isysroot ${SDKROOT} -miphoneos-version-min=${IPHONEOS_DEPLOYMENT_TARGET}"
|
||||||
|
export CPPFLAGS="-arch ${ARCH} -pipe -no-cpp-precomp -isysroot ${SDKROOT} -miphoneos-version-min=${IPHONEOS_DEPLOYMENT_TARGET}"
|
||||||
|
|
||||||
|
mkdir -p "${ROOT_PATH}/External/libssh2-ios/bin/${SDKNAME}-${ARCH}.sdk"
|
||||||
|
LOG="${ROOT_PATH}/External/libssh2-ios/bin/${SDKNAME}-${ARCH}.sdk/build-libssh2.log"
|
||||||
|
|
||||||
|
echo "${LOG}"
|
||||||
|
|
||||||
|
./buildconf >> "${LOG}" 2>&1
|
||||||
|
./configure --host=${HOST} --prefix="${ROOT_PATH}/External/libssh2-ios/bin/${SDKNAME}-${ARCH}.sdk" --with-openssl --with-libssl-prefix="${ROOT_PATH}/External/ios-openssl" --disable-shared --enable-static >> "${LOG}" 2>&1
|
||||||
|
make >> "${LOG}" 2>&1
|
||||||
|
make install >> "${LOG}" 2>&1
|
||||||
|
popd > /dev/null
|
||||||
|
|
||||||
|
BUILT_LIBS+=("${ROOT_PATH}/External/libssh2-ios/bin/${SDKNAME}-${ARCH}.sdk/lib/libssh2.a")
|
||||||
|
}
|
||||||
|
|
||||||
|
function fat_binary ()
|
||||||
|
{
|
||||||
|
echo "Building fat binary..."
|
||||||
|
|
||||||
|
lipo -create "${BUILT_LIBS[@]}" -output "${ROOT_PATH}/External/libssh2-ios/lib/libssh2-ios.a"
|
||||||
|
mkdir -p "${ROOT_PATH}/External/libssh2-ios/include/libssh2"
|
||||||
|
cp -R "${ROOT_PATH}/External/libssh2-ios/bin/iphonesimulator${SDKVERSION}-i386.sdk/include/libssh2.h" "${ROOT_PATH}/External/libssh2-ios/include/libssh2/"
|
||||||
|
|
||||||
|
echo "Building done."
|
||||||
|
}
|
||||||
|
|
||||||
|
build_all_archs setup build_ssh2 fat_binary
|
||||||
75
script/update_libssl_ios
Executable file
75
script/update_libssl_ios
Executable file
@ -0,0 +1,75 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# source the common build functions
|
||||||
|
SCRIPT_DIR=$(dirname "$0")
|
||||||
|
source "${SCRIPT_DIR}/ios_build_functions.sh"
|
||||||
|
|
||||||
|
function setup ()
|
||||||
|
{
|
||||||
|
if [ -f "${ROOT_PATH}/External/ios-openssl/lib/libssl.a" ] && [ -f "${ROOT_PATH}/External/ios-openssl/lib/libcrypto.a" ] && [ -d "${ROOT_PATH}/External/ios-openssl/include" ]
|
||||||
|
then
|
||||||
|
echo "No update needed."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIBRARY_NAME="OpenSSL"
|
||||||
|
|
||||||
|
rm -rf "${ROOT_PATH}/External/ios-openssl/include" "External/ios-openssl/lib"
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanup ()
|
||||||
|
{
|
||||||
|
rm -rf "/tmp/openssl"
|
||||||
|
rm -rf "/tmp/openssl-*.log"
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_ssl ()
|
||||||
|
{
|
||||||
|
rm -rf "/tmp/openssl"
|
||||||
|
cp -r "${ROOT_PATH}/External/openssl" "/tmp/"
|
||||||
|
pushd "/tmp/openssl" > /dev/null
|
||||||
|
|
||||||
|
LOG="/tmp/openssl-${ARCH}.log"
|
||||||
|
|
||||||
|
if [ "${ARCH}" == "arm64" ] || [ "${ARCH}" == "x86_64" ]
|
||||||
|
then
|
||||||
|
HOST="BSD-generic64"
|
||||||
|
CONFIG="no-gost no-asm enable-ec_nistp_64_gcc_128"
|
||||||
|
else
|
||||||
|
HOST="BSD-generic32"
|
||||||
|
CONFIG="no-gost no-asm"
|
||||||
|
perl -i -pe 's|static volatile sig_atomic_t intr_signal|static volatile int intr_signal|' crypto/ui/ui_openssl.c
|
||||||
|
fi
|
||||||
|
echo "$LOG"
|
||||||
|
|
||||||
|
./Configure ${HOST} ${CONFIG} --openssldir="/tmp/openssl-${ARCH}" >> "${LOG}" 2>&1
|
||||||
|
perl -i -pe "s|^CC= gcc|CC= ${CLANG} -miphoneos-version-min=${IPHONEOS_DEPLOYMENT_TARGET} -arch ${ARCH} |g" Makefile >> "${LOG}" 2>&1
|
||||||
|
perl -i -pe "s|^CFLAG= (.*)|CFLAG= -isysroot ${SDKROOT} \$1|g" Makefile >> "${LOG}" 2>&1
|
||||||
|
make >> "${LOG}" 2>&1
|
||||||
|
|
||||||
|
make install_sw >> "${LOG}" 2>&1
|
||||||
|
popd > /dev/null
|
||||||
|
rm -rf "/tmp/openssl"
|
||||||
|
|
||||||
|
BUILT_CRYPTO_PATHS+=("/tmp/openssl-${ARCH}/lib/libcrypto.a")
|
||||||
|
BUILT_SSL_PATHS+=("/tmp/openssl-${ARCH}/lib/libssl.a")
|
||||||
|
}
|
||||||
|
|
||||||
|
function fat_binary ()
|
||||||
|
{
|
||||||
|
echo "Building fat binary..."
|
||||||
|
|
||||||
|
mkdir -p "${ROOT_PATH}/External/ios-openssl/include"
|
||||||
|
cp -r /tmp/openssl-i386/include/openssl "${ROOT_PATH}/External/ios-openssl/include/"
|
||||||
|
|
||||||
|
mkdir -p "${ROOT_PATH}/External/ios-openssl/lib"
|
||||||
|
|
||||||
|
lipo -create "${BUILT_CRYPTO_PATHS[@]}" -output "${ROOT_PATH}/External/ios-openssl/lib/libcrypto.a"
|
||||||
|
lipo -create "${BUILT_SSL_PATHS[@]}" -output "${ROOT_PATH}/External/ios-openssl/lib/libssl.a"
|
||||||
|
|
||||||
|
echo "Building done."
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup
|
||||||
|
build_all_archs setup build_ssl fat_binary
|
||||||
|
cleanup
|
||||||
30
script/xcode_functions.sh
Executable file
30
script/xcode_functions.sh
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Returns the version # of xcodebuild
|
||||||
|
# eg. (4.6.3, 5.0, 5.0.1)
|
||||||
|
function xcode_version ()
|
||||||
|
{
|
||||||
|
/usr/bin/xcodebuild -version 2> /dev/null | head -n 1 | awk '{ print $2 }'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Returns the major version of xcodebuild
|
||||||
|
# eg. (4, 5, 6)
|
||||||
|
function xcode_major_version ()
|
||||||
|
{
|
||||||
|
xcode_version | awk -F '.' '{ print $1 }'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Returns the latest iOS SDK version available
|
||||||
|
# via xcodebuild
|
||||||
|
function ios_sdk_version ()
|
||||||
|
{
|
||||||
|
# This relies on the fact that the latest iPhone SDK
|
||||||
|
# is the last thing listed before the Xcode version.
|
||||||
|
/usr/bin/xcodebuild -version -sdk 2> /dev/null | grep SDKVersion | tail -n 1 | awk '{ print $2 }'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Returns the path to the specified iOS SDK name
|
||||||
|
function ios_sdk_path ()
|
||||||
|
{
|
||||||
|
/usr/bin/xcodebuild -version -sdk 2> /dev/null | grep -i $1 | grep 'Path:' | awk '{ print $2 }'
|
||||||
|
}
|
||||||
35
script/xcodebuild.awk
Normal file
35
script/xcodebuild.awk
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Exit statuses:
|
||||||
|
#
|
||||||
|
# 0 - No errors found.
|
||||||
|
# 1 - Build or test failure. Errors will be logged automatically.
|
||||||
|
# 2 - Untestable target. Retry with the "build" action.
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
status = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
print;
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/is not valid for Testing/ {
|
||||||
|
exit 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/[0-9]+: (error|warning):/ {
|
||||||
|
errors = errors $0 "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/(TEST|BUILD) FAILED/ {
|
||||||
|
status = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
END {
|
||||||
|
if (length(errors) > 0) {
|
||||||
|
print "\n*** All errors:\n" errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
fflush(stdout);
|
||||||
|
exit status;
|
||||||
|
}
|
||||||
25
script/xctool.awk
Normal file
25
script/xctool.awk
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Exit statuses:
|
||||||
|
#
|
||||||
|
# 0 - No errors found.
|
||||||
|
# 1 - Wrong SDK. Retry with SDK `iphonesimulator`.
|
||||||
|
# 2 - Missing target.
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
status = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
print;
|
||||||
|
}
|
||||||
|
|
||||||
|
/Testing with the '(.+)' SDK is not yet supported/ {
|
||||||
|
status = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/does not contain a target named/ {
|
||||||
|
status = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
END {
|
||||||
|
exit status;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user