mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 20:44:02 +08:00 
			
		
		
		
	travis: Split build scripts for different platforms
This commit also separates clang-format from the linux build, closing #2702.
This commit is contained in:
		
							parent
							
								
									74d4050924
								
							
						
					
					
						commit
						15a2388a33
					
				@ -1,59 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -x
 | 
			
		||||
 | 
			
		||||
if grep -nr '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .travis* dist/*.desktop \
 | 
			
		||||
                 dist/*.svg dist/*.xml; then
 | 
			
		||||
    echo Trailing whitespace found, aborting
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Only run clang-format on Linux because we don't have 4.0 on OS X images
 | 
			
		||||
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
 | 
			
		||||
    # Default clang-format points to default 3.5 version one
 | 
			
		||||
    CLANG_FORMAT=clang-format-3.9
 | 
			
		||||
    $CLANG_FORMAT --version
 | 
			
		||||
 | 
			
		||||
    if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then
 | 
			
		||||
        # Get list of every file modified in this pull request
 | 
			
		||||
        files_to_lint="$(git diff --name-only --diff-filter=ACMRTUXB $TRAVIS_COMMIT_RANGE | grep '^src/[^.]*[.]\(cpp\|h\)$' || true)"
 | 
			
		||||
    else
 | 
			
		||||
        # Check everything for branch pushes
 | 
			
		||||
        files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Turn off tracing for this because it's too verbose
 | 
			
		||||
    set +x
 | 
			
		||||
 | 
			
		||||
    for f in $files_to_lint; do
 | 
			
		||||
        d=$(diff -u "$f" <($CLANG_FORMAT "$f") || true)
 | 
			
		||||
        if ! [ -z "$d" ]; then
 | 
			
		||||
            echo "!!! $f not compliant to coding style, here is the fix:"
 | 
			
		||||
            echo "$d"
 | 
			
		||||
            fail=1
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    set -x
 | 
			
		||||
 | 
			
		||||
    if [ "$fail" = 1 ]; then
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
#if OS is linux or is not set
 | 
			
		||||
if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then
 | 
			
		||||
    docker run -v $(pwd):/citra ubuntu:16.04 /bin/bash /citra/.travis-build-docker.sh
 | 
			
		||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
			
		||||
    set -o pipefail
 | 
			
		||||
 | 
			
		||||
    export MACOSX_DEPLOYMENT_TARGET=10.9
 | 
			
		||||
    export Qt5_DIR=$(brew --prefix)/opt/qt5
 | 
			
		||||
 | 
			
		||||
    mkdir build && cd build
 | 
			
		||||
    cmake .. -DUSE_SYSTEM_CURL=ON -DCMAKE_OSX_ARCHITECTURES="x86_64;x86_64h" -DCMAKE_BUILD_TYPE=Release
 | 
			
		||||
    make -j4
 | 
			
		||||
 | 
			
		||||
    ctest -VV -C Release
 | 
			
		||||
fi
 | 
			
		||||
@ -1,12 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -x
 | 
			
		||||
 | 
			
		||||
#if OS is linux or is not set
 | 
			
		||||
if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then
 | 
			
		||||
    docker pull ubuntu:16.04
 | 
			
		||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
			
		||||
    brew update
 | 
			
		||||
    brew install qt5 sdl2 dylibbundler p7zip
 | 
			
		||||
fi
 | 
			
		||||
@ -1,139 +0,0 @@
 | 
			
		||||
GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
 | 
			
		||||
GITREV="`git show -s --format='%h'`"
 | 
			
		||||
mkdir -p artifacts
 | 
			
		||||
 | 
			
		||||
if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then
 | 
			
		||||
    REV_NAME="citra-linux-${GITDATE}-${GITREV}"
 | 
			
		||||
    ARCHIVE_NAME="${REV_NAME}.tar.xz"
 | 
			
		||||
    COMPRESSION_FLAGS="-cJvf"
 | 
			
		||||
    mkdir "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
    cp build/src/citra/citra "$REV_NAME"
 | 
			
		||||
    cp build/src/citra_qt/citra-qt "$REV_NAME"
 | 
			
		||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
 | 
			
		||||
    REV_NAME="citra-osx-${GITDATE}-${GITREV}"
 | 
			
		||||
    ARCHIVE_NAME="${REV_NAME}.tar.gz"
 | 
			
		||||
    COMPRESSION_FLAGS="-czvf"
 | 
			
		||||
    mkdir "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
    cp build/src/citra/citra "$REV_NAME"
 | 
			
		||||
    cp -r build/src/citra_qt/citra-qt.app "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
    # move qt libs into app bundle for deployment
 | 
			
		||||
    $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app"
 | 
			
		||||
 | 
			
		||||
    # move SDL2 libs into folder for deployment
 | 
			
		||||
    dylibbundler -b -x "${REV_NAME}/citra" -cd -d "${REV_NAME}/libs" -p "@executable_path/libs/"
 | 
			
		||||
 | 
			
		||||
    # Make the changes to make the citra-qt app standalone (i.e. not dependent on the current brew installation).
 | 
			
		||||
    # To do this, the absolute references to each and every QT framework must be re-written to point to the local frameworks
 | 
			
		||||
    # (in the Contents/Frameworks folder).
 | 
			
		||||
    # The "install_name_tool" is used to do so.
 | 
			
		||||
 | 
			
		||||
    # Coreutils is a hack to coerce Homebrew to point to the absolute Cellar path (symlink dereferenced). i.e:
 | 
			
		||||
    # ls -l /usr/local/opt/qt5:: /usr/local/opt/qt5 -> ../Cellar/qt5/5.6.1-1
 | 
			
		||||
    # grealpath ../Cellar/qt5/5.6.1-1:: /usr/local/Cellar/qt5/5.6.1-1
 | 
			
		||||
    brew install coreutils
 | 
			
		||||
 | 
			
		||||
    REV_NAME_ALT=$REV_NAME/
 | 
			
		||||
    # grealpath is located in coreutils, there is no "realpath" for OS X :(
 | 
			
		||||
    QT_BREWS_PATH=$(grealpath "$(brew --prefix qt5)")
 | 
			
		||||
    BREW_PATH=$(brew --prefix)
 | 
			
		||||
    QT_VERSION_NUM=5
 | 
			
		||||
 | 
			
		||||
    $BREW_PATH/opt/qt5/bin/macdeployqt "${REV_NAME_ALT}citra-qt.app" \
 | 
			
		||||
        -executable="${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt"
 | 
			
		||||
 | 
			
		||||
    # These are the files that macdeployqt packed into Contents/Frameworks/ - we don't want those, so we replace them.
 | 
			
		||||
    declare -a macos_libs=("QtCore" "QtWidgets" "QtGui" "QtOpenGL" "QtPrintSupport")
 | 
			
		||||
 | 
			
		||||
    for macos_lib in "${macos_libs[@]}"
 | 
			
		||||
    do
 | 
			
		||||
        SC_FRAMEWORK_PART=$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib
 | 
			
		||||
        # Replace macdeployqt versions of the Frameworks with our own (from /usr/local/opt/qt5/lib/)
 | 
			
		||||
        cp "$BREW_PATH/opt/qt5/lib/$SC_FRAMEWORK_PART" "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART"
 | 
			
		||||
 | 
			
		||||
        # Replace references within the embedded Framework files with "internal" versions.
 | 
			
		||||
        for macos_lib2 in "${macos_libs[@]}"
 | 
			
		||||
        do
 | 
			
		||||
            # Since brew references both the non-symlinked and symlink paths of QT5, it needs to be duplicated.
 | 
			
		||||
            # /usr/local/Cellar/qt5/5.6.1-1/lib and /usr/local/opt/qt5/lib both resolve to the same files.
 | 
			
		||||
            # So the two lines below are effectively duplicates when resolved as a path, but as strings, they aren't.
 | 
			
		||||
            RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2
 | 
			
		||||
            install_name_tool -change \
 | 
			
		||||
                $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \
 | 
			
		||||
                @executable_path/../Frameworks/$RM_FRAMEWORK_PART \
 | 
			
		||||
                "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART"
 | 
			
		||||
            install_name_tool -change \
 | 
			
		||||
                "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \
 | 
			
		||||
                @executable_path/../Frameworks/$RM_FRAMEWORK_PART \
 | 
			
		||||
                "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART"
 | 
			
		||||
        done
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # Handles `This application failed to start because it could not find or load the Qt platform plugin "cocoa"`
 | 
			
		||||
    # Which manifests itself as:
 | 
			
		||||
    # "Exception Type: EXC_CRASH (SIGABRT) | Exception Codes: 0x0000000000000000, 0x0000000000000000 | Exception Note: EXC_CORPSE_NOTIFY"
 | 
			
		||||
    # There may be more dylibs needed to be fixed...
 | 
			
		||||
    declare -a macos_plugins=("Plugins/platforms/libqcocoa.dylib")
 | 
			
		||||
 | 
			
		||||
    for macos_lib in "${macos_plugins[@]}"
 | 
			
		||||
    do
 | 
			
		||||
        install_name_tool -id @executable_path/../$macos_lib "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib"
 | 
			
		||||
        for macos_lib2 in "${macos_libs[@]}"
 | 
			
		||||
        do
 | 
			
		||||
            RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2
 | 
			
		||||
            install_name_tool -change \
 | 
			
		||||
                $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \
 | 
			
		||||
                @executable_path/../Frameworks/$RM_FRAMEWORK_PART \
 | 
			
		||||
                "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib"
 | 
			
		||||
            install_name_tool -change \
 | 
			
		||||
                "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \
 | 
			
		||||
                @executable_path/../Frameworks/$RM_FRAMEWORK_PART \
 | 
			
		||||
                "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib"
 | 
			
		||||
        done
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    for macos_lib in "${macos_libs[@]}"
 | 
			
		||||
    do
 | 
			
		||||
        # Debugging info for Travis-CI
 | 
			
		||||
        otool -L "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib"
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # Make the citra-qt.app application launch a debugging terminal.
 | 
			
		||||
    # Store away the actual binary
 | 
			
		||||
    mv ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt-bin
 | 
			
		||||
 | 
			
		||||
    cat > ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt <<EOL
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd "\`dirname "\$0"\`"
 | 
			
		||||
chmod +x citra-qt-bin
 | 
			
		||||
open citra-qt-bin --args "\$@"
 | 
			
		||||
EOL
 | 
			
		||||
    # Content that will serve as the launching script for citra (within the .app folder)
 | 
			
		||||
 | 
			
		||||
    # Make the launching script executable
 | 
			
		||||
    chmod +x ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt
 | 
			
		||||
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Copy documentation
 | 
			
		||||
cp license.txt "$REV_NAME"
 | 
			
		||||
cp README.md "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
# Find out what release we are building
 | 
			
		||||
if [ -z $TRAVIS_TAG ]; then
 | 
			
		||||
    RELEASE_NAME=head
 | 
			
		||||
else
 | 
			
		||||
    RELEASE_NAME=$(echo $TRAVIS_TAG | cut -d- -f1)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
mv "$REV_NAME" $RELEASE_NAME
 | 
			
		||||
 | 
			
		||||
7z a "$REV_NAME.7z" $RELEASE_NAME
 | 
			
		||||
 | 
			
		||||
# move the compiled archive into the artifacts directory to be uploaded by travis releases
 | 
			
		||||
mv "$ARCHIVE_NAME" artifacts/
 | 
			
		||||
mv "$REV_NAME.7z" artifacts/
 | 
			
		||||
							
								
								
									
										34
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								.travis.yml
									
									
									
									
									
								
							@ -2,24 +2,32 @@ language: cpp
 | 
			
		||||
matrix:
 | 
			
		||||
  include:
 | 
			
		||||
    - os: linux
 | 
			
		||||
      env: NAME="linux build"
 | 
			
		||||
      sudo: required
 | 
			
		||||
      dist: trusty
 | 
			
		||||
      services: docker
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - p7zip-full
 | 
			
		||||
      install: "./.travis/linux/deps.sh"
 | 
			
		||||
      script: "./.travis/linux/build.sh"
 | 
			
		||||
      after_success: "./.travis/linux/upload.sh"
 | 
			
		||||
    - os: osx
 | 
			
		||||
      env: NAME="macos build"
 | 
			
		||||
      sudo: false
 | 
			
		||||
      osx_image: xcode7.3
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
  - docker
 | 
			
		||||
 | 
			
		||||
addons:
 | 
			
		||||
  apt:
 | 
			
		||||
    packages:
 | 
			
		||||
      - clang-format-3.9
 | 
			
		||||
      - p7zip-full
 | 
			
		||||
 | 
			
		||||
install: "./.travis-deps.sh"
 | 
			
		||||
script: "./.travis-build.sh"
 | 
			
		||||
after_success: "./.travis-upload.sh"
 | 
			
		||||
      install: "./.travis/macos/deps.sh"
 | 
			
		||||
      script: "./.travis/macos/build.sh"
 | 
			
		||||
      after_success: "./.travis/macos/upload.sh"
 | 
			
		||||
    - os: linux
 | 
			
		||||
      env: NAME="clang-format"
 | 
			
		||||
      dist: trusty
 | 
			
		||||
      addons:
 | 
			
		||||
        apt:
 | 
			
		||||
          packages:
 | 
			
		||||
            - clang-format-3.9
 | 
			
		||||
      script: "./.travis/clang-format/script.sh"
 | 
			
		||||
 | 
			
		||||
deploy:
 | 
			
		||||
  provider: releases
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								.travis/clang-format/script.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								.travis/clang-format/script.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
#!/bin/bash -ex
 | 
			
		||||
 | 
			
		||||
if grep -nr '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .travis* dist/*.desktop \
 | 
			
		||||
                 dist/*.svg dist/*.xml; then
 | 
			
		||||
    echo Trailing whitespace found, aborting
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Default clang-format points to default 3.5 version one
 | 
			
		||||
CLANG_FORMAT=clang-format-3.9
 | 
			
		||||
$CLANG_FORMAT --version
 | 
			
		||||
 | 
			
		||||
if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then
 | 
			
		||||
    # Get list of every file modified in this pull request
 | 
			
		||||
    files_to_lint="$(git diff --name-only --diff-filter=ACMRTUXB $TRAVIS_COMMIT_RANGE | grep '^src/[^.]*[.]\(cpp\|h\)$' || true)"
 | 
			
		||||
else
 | 
			
		||||
    # Check everything for branch pushes
 | 
			
		||||
    files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Turn off tracing for this because it's too verbose
 | 
			
		||||
set +x
 | 
			
		||||
 | 
			
		||||
for f in $files_to_lint; do
 | 
			
		||||
    d=$(diff -u "$f" <($CLANG_FORMAT "$f") || true)
 | 
			
		||||
    if ! [ -z "$d" ]; then
 | 
			
		||||
        echo "!!! $f not compliant to coding style, here is the fix:"
 | 
			
		||||
        echo "$d"
 | 
			
		||||
        fail=1
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
set -x
 | 
			
		||||
 | 
			
		||||
if [ "$fail" = 1 ]; then
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										22
									
								
								.travis/common/post-upload.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								.travis/common/post-upload.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
#!/bin/bash -ex
 | 
			
		||||
 | 
			
		||||
# Copy documentation
 | 
			
		||||
cp license.txt "$REV_NAME"
 | 
			
		||||
cp README.md "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
# Find out what release we are building
 | 
			
		||||
if [ -z $TRAVIS_TAG ]; then
 | 
			
		||||
    RELEASE_NAME=head
 | 
			
		||||
else
 | 
			
		||||
    RELEASE_NAME=$(echo $TRAVIS_TAG | cut -d- -f1)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
mv "$REV_NAME" $RELEASE_NAME
 | 
			
		||||
 | 
			
		||||
7z a "$REV_NAME.7z" $RELEASE_NAME
 | 
			
		||||
 | 
			
		||||
# move the compiled archive into the artifacts directory to be uploaded by travis releases
 | 
			
		||||
mv "$ARCHIVE_NAME" artifacts/
 | 
			
		||||
mv "$REV_NAME.7z" artifacts/
 | 
			
		||||
							
								
								
									
										6
									
								
								.travis/common/pre-upload.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								.travis/common/pre-upload.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
#!/bin/bash -ex
 | 
			
		||||
 | 
			
		||||
GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
 | 
			
		||||
GITREV="`git show -s --format='%h'`"
 | 
			
		||||
 | 
			
		||||
mkdir -p artifacts
 | 
			
		||||
							
								
								
									
										3
									
								
								.travis/linux/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								.travis/linux/build.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/bash -ex
 | 
			
		||||
 | 
			
		||||
docker run -v $(pwd):/citra ubuntu:16.04 /bin/bash /citra/.travis/linux/docker.sh
 | 
			
		||||
							
								
								
									
										3
									
								
								.travis/linux/deps.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								.travis/linux/deps.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/sh -ex
 | 
			
		||||
 | 
			
		||||
docker pull ubuntu:16.04
 | 
			
		||||
							
								
								
									
										5
									
								
								.travis-build-docker.sh → .travis/linux/docker.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										5
									
								
								.travis-build-docker.sh → .travis/linux/docker.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@ -1,7 +1,4 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
set -x
 | 
			
		||||
#!/bin/bash -ex
 | 
			
		||||
 | 
			
		||||
cd /citra
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								.travis/linux/upload.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								.travis/linux/upload.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
#!/bin/bash -ex
 | 
			
		||||
 | 
			
		||||
. .travis/common/pre-upload.sh
 | 
			
		||||
 | 
			
		||||
REV_NAME="citra-linux-${GITDATE}-${GITREV}"
 | 
			
		||||
ARCHIVE_NAME="${REV_NAME}.tar.xz"
 | 
			
		||||
COMPRESSION_FLAGS="-cJvf"
 | 
			
		||||
 | 
			
		||||
mkdir "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
cp build/src/citra/citra "$REV_NAME"
 | 
			
		||||
cp build/src/citra_qt/citra-qt "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
. .travis/common/post-upload.sh
 | 
			
		||||
							
								
								
									
										12
									
								
								.travis/macos/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								.travis/macos/build.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
#!/bin/bash -ex
 | 
			
		||||
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
export MACOSX_DEPLOYMENT_TARGET=10.9
 | 
			
		||||
export Qt5_DIR=$(brew --prefix)/opt/qt5
 | 
			
		||||
 | 
			
		||||
mkdir build && cd build
 | 
			
		||||
cmake .. -DUSE_SYSTEM_CURL=ON -DCMAKE_OSX_ARCHITECTURES="x86_64;x86_64h" -DCMAKE_BUILD_TYPE=Release
 | 
			
		||||
make -j4
 | 
			
		||||
 | 
			
		||||
ctest -VV -C Release
 | 
			
		||||
							
								
								
									
										4
									
								
								.travis/macos/deps.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.travis/macos/deps.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
#!/bin/sh -ex
 | 
			
		||||
 | 
			
		||||
brew update
 | 
			
		||||
brew install qt5 sdl2 dylibbundler p7zip
 | 
			
		||||
							
								
								
									
										110
									
								
								.travis/macos/upload.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										110
									
								
								.travis/macos/upload.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,110 @@
 | 
			
		||||
#!/bin/bash -ex
 | 
			
		||||
 | 
			
		||||
. .travis/common/pre-upload.sh
 | 
			
		||||
 | 
			
		||||
REV_NAME="citra-osx-${GITDATE}-${GITREV}"
 | 
			
		||||
ARCHIVE_NAME="${REV_NAME}.tar.gz"
 | 
			
		||||
COMPRESSION_FLAGS="-czvf"
 | 
			
		||||
 | 
			
		||||
mkdir "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
cp build/src/citra/citra "$REV_NAME"
 | 
			
		||||
cp -r build/src/citra_qt/citra-qt.app "$REV_NAME"
 | 
			
		||||
 | 
			
		||||
# move qt libs into app bundle for deployment
 | 
			
		||||
$(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app"
 | 
			
		||||
 | 
			
		||||
# move SDL2 libs into folder for deployment
 | 
			
		||||
dylibbundler -b -x "${REV_NAME}/citra" -cd -d "${REV_NAME}/libs" -p "@executable_path/libs/"
 | 
			
		||||
 | 
			
		||||
# Make the changes to make the citra-qt app standalone (i.e. not dependent on the current brew installation).
 | 
			
		||||
# To do this, the absolute references to each and every QT framework must be re-written to point to the local frameworks
 | 
			
		||||
# (in the Contents/Frameworks folder).
 | 
			
		||||
# The "install_name_tool" is used to do so.
 | 
			
		||||
 | 
			
		||||
# Coreutils is a hack to coerce Homebrew to point to the absolute Cellar path (symlink dereferenced). i.e:
 | 
			
		||||
# ls -l /usr/local/opt/qt5:: /usr/local/opt/qt5 -> ../Cellar/qt5/5.6.1-1
 | 
			
		||||
# grealpath ../Cellar/qt5/5.6.1-1:: /usr/local/Cellar/qt5/5.6.1-1
 | 
			
		||||
brew install coreutils || brew upgrade coreutils || true
 | 
			
		||||
 | 
			
		||||
REV_NAME_ALT=$REV_NAME/
 | 
			
		||||
# grealpath is located in coreutils, there is no "realpath" for OS X :(
 | 
			
		||||
QT_BREWS_PATH=$(grealpath "$(brew --prefix qt5)")
 | 
			
		||||
BREW_PATH=$(brew --prefix)
 | 
			
		||||
QT_VERSION_NUM=5
 | 
			
		||||
 | 
			
		||||
$BREW_PATH/opt/qt5/bin/macdeployqt "${REV_NAME_ALT}citra-qt.app" \
 | 
			
		||||
    -executable="${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt"
 | 
			
		||||
 | 
			
		||||
# These are the files that macdeployqt packed into Contents/Frameworks/ - we don't want those, so we replace them.
 | 
			
		||||
declare -a macos_libs=("QtCore" "QtWidgets" "QtGui" "QtOpenGL" "QtPrintSupport")
 | 
			
		||||
 | 
			
		||||
for macos_lib in "${macos_libs[@]}"
 | 
			
		||||
do
 | 
			
		||||
    SC_FRAMEWORK_PART=$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib
 | 
			
		||||
    # Replace macdeployqt versions of the Frameworks with our own (from /usr/local/opt/qt5/lib/)
 | 
			
		||||
    cp "$BREW_PATH/opt/qt5/lib/$SC_FRAMEWORK_PART" "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART"
 | 
			
		||||
 | 
			
		||||
    # Replace references within the embedded Framework files with "internal" versions.
 | 
			
		||||
    for macos_lib2 in "${macos_libs[@]}"
 | 
			
		||||
    do
 | 
			
		||||
        # Since brew references both the non-symlinked and symlink paths of QT5, it needs to be duplicated.
 | 
			
		||||
        # /usr/local/Cellar/qt5/5.6.1-1/lib and /usr/local/opt/qt5/lib both resolve to the same files.
 | 
			
		||||
        # So the two lines below are effectively duplicates when resolved as a path, but as strings, they aren't.
 | 
			
		||||
        RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2
 | 
			
		||||
        install_name_tool -change \
 | 
			
		||||
            $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \
 | 
			
		||||
            @executable_path/../Frameworks/$RM_FRAMEWORK_PART \
 | 
			
		||||
            "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART"
 | 
			
		||||
        install_name_tool -change \
 | 
			
		||||
            "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \
 | 
			
		||||
            @executable_path/../Frameworks/$RM_FRAMEWORK_PART \
 | 
			
		||||
            "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART"
 | 
			
		||||
    done
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Handles `This application failed to start because it could not find or load the Qt platform plugin "cocoa"`
 | 
			
		||||
# Which manifests itself as:
 | 
			
		||||
# "Exception Type: EXC_CRASH (SIGABRT) | Exception Codes: 0x0000000000000000, 0x0000000000000000 | Exception Note: EXC_CORPSE_NOTIFY"
 | 
			
		||||
# There may be more dylibs needed to be fixed...
 | 
			
		||||
declare -a macos_plugins=("Plugins/platforms/libqcocoa.dylib")
 | 
			
		||||
 | 
			
		||||
for macos_lib in "${macos_plugins[@]}"
 | 
			
		||||
do
 | 
			
		||||
    install_name_tool -id @executable_path/../$macos_lib "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib"
 | 
			
		||||
    for macos_lib2 in "${macos_libs[@]}"
 | 
			
		||||
    do
 | 
			
		||||
        RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2
 | 
			
		||||
        install_name_tool -change \
 | 
			
		||||
            $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \
 | 
			
		||||
            @executable_path/../Frameworks/$RM_FRAMEWORK_PART \
 | 
			
		||||
            "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib"
 | 
			
		||||
        install_name_tool -change \
 | 
			
		||||
            "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \
 | 
			
		||||
            @executable_path/../Frameworks/$RM_FRAMEWORK_PART \
 | 
			
		||||
            "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib"
 | 
			
		||||
    done
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
for macos_lib in "${macos_libs[@]}"
 | 
			
		||||
do
 | 
			
		||||
    # Debugging info for Travis-CI
 | 
			
		||||
    otool -L "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Make the citra-qt.app application launch a debugging terminal.
 | 
			
		||||
# Store away the actual binary
 | 
			
		||||
mv ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt-bin
 | 
			
		||||
 | 
			
		||||
cat > ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt <<EOL
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd "\`dirname "\$0"\`"
 | 
			
		||||
chmod +x citra-qt-bin
 | 
			
		||||
open citra-qt-bin --args "\$@"
 | 
			
		||||
EOL
 | 
			
		||||
# Content that will serve as the launching script for citra (within the .app folder)
 | 
			
		||||
 | 
			
		||||
# Make the launching script executable
 | 
			
		||||
chmod +x ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt
 | 
			
		||||
 | 
			
		||||
. .travis/common/post-upload.sh
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user