Compare commits

...

1 Commits

Author SHA1 Message Date
N00byKing
8a2266f788 Add Linux build with frozen dependencies 2018-07-26 18:16:28 +02:00
4 changed files with 85 additions and 0 deletions

View File

@@ -20,6 +20,12 @@ matrix:
install: "./.travis/linux/deps.sh"
script: "./.travis/linux/build.sh"
after_success: "./.travis/linux/upload.sh"
- os: linux
env: NAME="linux build (frozen versions of dependencies)"
sudo: required
dist: trusty
services: docker
script: "./.travis/linux-frozen/build.sh"
- os: osx
env: NAME="macos build"
sudo: false

5
.travis/linux-frozen/build.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash -ex
mkdir -p "$HOME/.ccache"
docker pull ubuntu:18.04
docker run -v $(pwd):/yuzu -v "$HOME/.ccache":/root/.ccache ubuntu:18.04 /bin/bash -ex /yuzu/.travis/linux-frozen/docker.sh

22
.travis/linux-frozen/docker.sh Executable file
View File

@@ -0,0 +1,22 @@
#!/bin/bash -ex
cd /yuzu
apt-get update
apt-get install -y build-essential wget git python-launchpadlib ccache
# Install specific versions of packages with their dependencies
# The apt repositories remove older versions regularly, so we can't use
# apt-get and have to pull the packages directly from the archives.
/yuzu/.travis/linux-frozen/install_package.py \
libsdl2-dev 2.0.7+dfsg1-3ubuntu1 bionic \
qtbase5-dev 5.9.3+dfsg-0ubuntu2 bionic \
libqt5opengl5-dev 5.9.3+dfsg-0ubuntu2 bionic \
libicu57 57.1-6ubuntu0.2 bionic \
cmake 3.10.2-1ubuntu2 bionic
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++
make -j4
ctest -VV -C Release

View File

@@ -0,0 +1,52 @@
#!/usr/bin/python
import sys
import re
import subprocess
from launchpadlib.launchpad import Launchpad
if sys.version_info[0] > 2:
xrange = range
cachedir = '/.launchpadlib/cache/'
launchpad = Launchpad.login_anonymously(
'grab build info', 'production', cachedir, version='devel')
processed_packages = []
deb_file_list = []
def get_url(pkg, distro):
build_ref = launchpad.archives.getByReference(reference='ubuntu').getPublishedBinaries(
binary_name=pkg[0], distro_arch_series='https://api.launchpad.net/devel/ubuntu/' + distro + '/amd64', version=pkg[1], exact_match=True, order_by_date=True).entries[0]
build_link = build_ref['build_link']
deb_name = '{}_{}_{}.deb'.format(pkg[0], pkg[1], 'amd64' if build_ref['architecture_specific'] else 'all')
deb_link = build_link + '/+files/' + deb_name
return [deb_link, deb_name]
def list_dependencies(deb_file):
t = subprocess.check_output(
['bash', '-c', '(dpkg -I {} | grep -oP "^ Depends\: \K.*$") || true'.format(deb_file)])
deps = [i.strip() for i in t.split(',')]
equals_re = re.compile(r'^(.*) \(= (.*)\)$')
return [equals_re.sub(r'\1=\2', i).split('=') for i in filter(equals_re.match, deps)]
def get_package(pkg, distro):
if pkg in processed_packages:
return
print('Getting {}...'.format(pkg[0]))
url = get_url(pkg, distro)
subprocess.check_call(['wget', '--quiet', url[0], '-O', url[1]])
for dep in list_dependencies(url[1]):
get_package(dep, distro)
processed_packages.append(pkg)
deb_file_list.append('./' + url[1])
for i in xrange(1, len(sys.argv), 3):
get_package([sys.argv[i], sys.argv[i + 1]], sys.argv[i + 2])
subprocess.check_call(
['apt-get', 'install', '-y', '--force-yes'] + deb_file_list)