From 56d31ae1901be8d68293e9ff5c2a006341ecb9f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ekstr=C3=B6m?= Date: Sun, 21 Jul 2019 21:14:47 +0300 Subject: travis: rework scripts to re-enable macOS * Adds a script to clone and build FFmpeg as well as to configure and build mpv itself. Currently only used for macOS and contain hard-coded macOS specific options. * Still works with the Linux containers. * Moves our language back to "c" from "generic" * Defines our Linux distribution as "bionic" to get the latest Ubuntu base distribution to be the runner for our containers. * Adds the homebrew add-on for macOS package installation for dependencies. Installs everything required but FFmpeg, as we want to have our own FFmpeg snapshots. --- .travis.yml | 52 ++++++++++++++++++++++++++++++++++++++++++---------- ci/build-macos.sh | 26 ++++++++++++++++++++++++++ ci/get_ffmpeg.sh | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 10 deletions(-) create mode 100755 ci/build-macos.sh create mode 100755 ci/get_ffmpeg.sh diff --git a/.travis.yml b/.travis.yml index d494ab832c..b3b34c50a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,34 @@ -language: generic +language: c -os: - - linux +matrix: + include: + - os: osx + osx_image: xcode10.2 + compiler: clang + - os: osx + osx_image: xcode10.1 + compiler: clang + - os: osx + osx_image: xcode9.2 + compiler: clang + - os: linux + compiler: gcc + env: CONTAINER=registry.cirno.systems/kiwi/containers/mpv-ci:stable-deps CI_SCRIPT=ci/build-tumbleweed.sh + - os: linux + compiler: clang + env: CONTAINER=registry.cirno.systems/kiwi/containers/mpv-ci:stable-deps CI_SCRIPT=ci/build-tumbleweed.sh + - os: linux + env: CONTAINER=registry.cirno.systems/kiwi/containers/mpv-ci-mingw64:i686 CI_SCRIPT=ci/build-mingw64.sh TARGET=i686-w64-mingw32 + - os: linux + env: CONTAINER=registry.cirno.systems/kiwi/containers/mpv-ci-mingw64:x86_64 CI_SCRIPT=ci/build-mingw64.sh TARGET=x86_64-w64-mingw32 +dist: bionic services: - docker sudo: required env: - matrix: - - CONTAINER=registry.cirno.systems/kiwi/containers/mpv-ci:stable-deps CI_SCRIPT=ci/build-tumbleweed.sh CC=gcc - - CONTAINER=registry.cirno.systems/kiwi/containers/mpv-ci:stable-deps CI_SCRIPT=ci/build-tumbleweed.sh CC=clang - - CONTAINER=registry.cirno.systems/kiwi/containers/mpv-ci-mingw64:i686 CI_SCRIPT=ci/build-mingw64.sh TARGET=i686-w64-mingw32 - - CONTAINER=registry.cirno.systems/kiwi/containers/mpv-ci-mingw64:x86_64 CI_SCRIPT=ci/build-mingw64.sh TARGET=x86_64-w64-mingw32 global: # Coverity token - secure: "H21mSRlMhk4BKS0xHZvCFGJxteCP0hRVUxTuNfM2Z9HBsyutuLEYMtViLO86VtM+Tqla3xXPzUdS4ozLwI72Ax/5ZUDXACROj73yW6QhFB5D6rLut12+FjqC7M33Qv2hl0xwgNBmR5dsm1ToP37+Wn+ecJQNvN8fkTXF+HVzOEw=" @@ -28,10 +43,14 @@ branches: - /release\/.*$/ before_install: - - docker pull $CONTAINER + - if [ "$TRAVIS_COMPILER" = "clang" ]; then export CXX="clang++"; fi + - if [ "$TRAVIS_COMPILER" = "gcc" ]; then export CXX="g++"; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then docker pull $CONTAINER; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then "$TRAVIS_BUILD_DIR/ci/get_ffmpeg.sh"; fi script: - ./bootstrap.py - - docker run --env CC --env TARGET -v $TRAVIS_BUILD_DIR:/build $CONTAINER /bin/sh -c "cd /build && $CI_SCRIPT" + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then docker run --env CC --env TARGET -v $TRAVIS_BUILD_DIR:/build $CONTAINER /bin/sh -c "cd /build && $CI_SCRIPT"; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then ./ci/build-macos.sh; fi after_failure: cat ./build/config.log after_script: TOOLS/travis-rebuild-website @@ -52,3 +71,16 @@ addons: build_command_prepend: "./bootstrap.py && ./waf configure" build_command: "./waf build" branch_pattern: coverity_scan + homebrew: + packages: + - autoconf + - automake + - freetype + - fribidi + - libass + - libtool + - little-cms2 + - luajit + - nasm + - pkg-config + update: true diff --git a/ci/build-macos.sh b/ci/build-macos.sh new file mode 100755 index 0000000000..4984e3ba81 --- /dev/null +++ b/ci/build-macos.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -e + +FFMPEG_SYSROOT="${HOME}/deps/sysroot" +MPV_INSTALL_PREFIX="${HOME}/out/mpv" +MPV_VARIANT="${TRAVIS_OS_NAME}" + +if [[ -d "./build/${MPV_VARIANT}" ]] ; then + rm -rf "./build/${MPV_VARIANT}" +fi + +if [[ ! -e "./waf" ]] ; then + python3 ./bootstrap.py +fi + +PKG_CONFIG_PATH="${FFMPEG_SYSROOT}/lib/pkgconfig/" CC="${CC}" CXX="${CXX}" python3 \ + ./waf configure \ + --variant="${MPV_VARIANT}" \ + --prefix="${MPV_INSTALL_PREFIX}" \ + --enable-{gl,iconv,lcms2,libass,libass-osd,libmpv-shared,lua,jpeg,plain-gl,zlib} \ + --enable-{apple-remote,cocoa,coreaudio,gl-cocoa,macos-cocoa-cb,macos-touchbar,videotoolbox-gl} + +python3 ./waf build --variant="${MPV_VARIANT}" -j4 + +python3 ./waf install --variant="${MPV_VARIANT}" diff --git a/ci/get_ffmpeg.sh b/ci/get_ffmpeg.sh new file mode 100755 index 0000000000..ef575701d9 --- /dev/null +++ b/ci/get_ffmpeg.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +set -e + +FFMPEG_SRC_DIR="${HOME}/deps/src/ffmpeg" +FFMPEG_BUILD_DIR="${FFMPEG_SRC_DIR}/${TRAVIS_OS_NAME}" +FFMPEG_SYSROOT="${HOME}/deps/sysroot" +FFMPEG_HASH="18928e2bb4568cbe5e9061c3e6b63559392af3d2" + +# Get the sauce if not around +if [[ ! -d "${FFMPEG_SRC_DIR}" ]] ; then + git clone "https://git.videolan.org/git/ffmpeg.git" "${FFMPEG_SRC_DIR}" +fi + +# pop into FFmpeg's source dir and clean up & check out our wanted revision +pushd "${FFMPEG_SRC_DIR}" +git reset --hard HEAD && git clean -dfx +git checkout "${FFMPEG_HASH}" +popd + +# If a build dir of the same type is around, clean it up +if [[ -d "${FFMPEG_BUILD_DIR}" ]] ; then + rm -rf "${FFMPEG_BUILD_DIR}" +fi + +# Create and move into the build dir, configure and build! +mkdir -p "${FFMPEG_BUILD_DIR}" && pushd "${FFMPEG_BUILD_DIR}" + +PKG_CONFIG_PATH="${FFMPEG_SYSROOT}/lib/pkgconfig/" ../configure \ + --disable-{autodetect,stripping} \ + --cc="${CC}" \ + --cxx="${CXX}" \ + --prefix="${FFMPEG_SYSROOT}" \ + --enable-{zlib,securetransport,videotoolbox} + +make -j4 && make install && popd + +exit 0 -- cgit v1.2.3