From 85f1aebe701fc4278e04dbef8bd7ccc4922a42c0 Mon Sep 17 00:00:00 2001 From: N00byKing Date: Sun, 21 Jan 2018 15:01:27 +0100 Subject: [PATCH] Add frozen dependencies linux build --- .travis.yml | 10 +++++++ .travis/linux-frozen/build.sh | 4 +++ .travis/linux-frozen/docker.sh | 32 +++++++++++++++++++++ .travis/linux-frozen/install_package.py | 38 +++++++++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 .travis/linux-frozen/build.sh create mode 100644 .travis/linux-frozen/docker.sh create mode 100644 .travis/linux-frozen/install_package.py diff --git a/.travis.yml b/.travis.yml index 4f2b17465e..c8f1efa3ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,16 @@ 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 + before_install: + - chmod +x ./.travis/linux-frozen/build.sh + - chmod +x ./.travis/linux-frozen/docker.sh + - chmod +x ./.travis/linux-frozen/install_package.py + script: "./.travis/linux-frozen/build.sh" - os: osx env: NAME="macos build" sudo: false diff --git a/.travis/linux-frozen/build.sh b/.travis/linux-frozen/build.sh new file mode 100644 index 0000000000..c7ca502981 --- /dev/null +++ b/.travis/linux-frozen/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash -ex + +docker pull ubuntu:18.04 +docker run -v $(pwd):/yuzu ubuntu:18.04 /bin/bash -ex /yuzu/.travis/linux-frozen/docker.sh diff --git a/.travis/linux-frozen/docker.sh b/.travis/linux-frozen/docker.sh new file mode 100644 index 0000000000..cecb3b804b --- /dev/null +++ b/.travis/linux-frozen/docker.sh @@ -0,0 +1,32 @@ +#!/bin/bash -ex + +cd /yuzu + +apt-get update +apt-get install -y build-essential wget git python-launchpadlib libssl-dev + +# 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.4+dfsg1-2ubuntu2 xenial \ + qtbase5-dev 5.9.3+dfsg-0ubuntu1 bionic \ + libharfbuzz0b 1.7.2-1 bionic \ + libqt5opengl5-dev 5.9.3+dfsg-0ubuntu1 bionic \ + libfontconfig1 2.12.6-0ubuntu1 bionic \ + libfreetype6 2.8-0.2ubuntu2 bionic \ + libicu-le-hb0 1.0.3+git161113-4 bionic \ + libdouble-conversion1 2.0.1-4ubuntu1 bionic \ + qtchooser 64-ga1b6736-5 bionic \ + libicu60 60.2-1ubuntu1 bionic + +# Get a recent version of CMake +wget https://cmake.org/files/v3.9/cmake-3.9.0-Linux-x86_64.sh +echo y | sh cmake-3.9.0-Linux-x86_64.sh --prefix=cmake +export PATH=/yuzu/cmake/cmake-3.9.0-Linux-x86_64/bin:$PATH + +mkdir build && cd build +cmake .. -DYUZU_BUILD_UNICORN=ON -DCMAKE_BUILD_TYPE=Release +make -j4 + +ctest -VV -C Release diff --git a/.travis/linux-frozen/install_package.py b/.travis/linux-frozen/install_package.py new file mode 100644 index 0000000000..bdf3337169 --- /dev/null +++ b/.travis/linux-frozen/install_package.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import sys, re, subprocess +from launchpadlib.launchpad import Launchpad + +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_link = 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'] + deb_name = pkg[0] + '_' + pkg[1] + '_amd64.deb' + 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 ' + deb_file + ' | grep -oP "^ Depends\: \K.*$"']) + 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 ' + 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'] + deb_file_list)