travis_config.sh 5.0 KB
Newer Older
1
#!/bin/bash
2 3 4 5
#Customize multibuild logic that is run after entering docker.
#Sourced by docker_build_wrap.sh and docker_test_wrap.sh .
#Runs in Docker, so only the vars passed to `docker run' exist.
#See multibuild/README.rst
6
echo "===  Loading config.sh  === "
7

8 9 10 11 12
# To see build progress
function build_wheel {
    build_bdist_wheel $@
}

13 14 15 16
function bdist_wheel_cmd {
    # copied from multibuild's common_utils.sh
    # add osx deployment target so it doesnt default to 10.6
    local abs_wheelhouse=$1
O
Olli-Pekka Heinisuo 已提交
17
    CI_BUILD=1 pip wheel --wheel-dir="$PWD/dist" . $BDIST_PARAMS
18
    cp dist/*.whl $abs_wheelhouse
O
Olli-Pekka Heinisuo 已提交
19 20 21
    if [ -z "$IS_OSX" ]; then
      /opt/python/cp37-cp37m/bin/python patch_auditwheel_whitelist.py
    fi
22
    if [ -n "$USE_CCACHE" -a -z "$BREW_BOOTSTRAP_MODE" ]; then ccache -s; fi
23 24
}

25 26
if [ -n "$IS_OSX" ]; then
  echo "    > OSX environment "
I
Ivan Pozdeev 已提交
27
  export MAKEFLAGS="-j$(sysctl -n hw.ncpu)"
28 29
else
  echo "    > Linux environment "
O
Olli-Pekka Heinisuo 已提交
30
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/Qt5.15.0/lib
I
Ivan Pozdeev 已提交
31
  export MAKEFLAGS="-j$(grep -E '^processor[[:space:]]*:' /proc/cpuinfo | wc -l)"
32
fi
O
Olli-Pekka Heinisuo 已提交
33

34 35 36
if [ -n "$IS_OSX" ]; then

    source travis_osx_brew_cache.sh
O
Olli-Pekka Heinisuo 已提交
37

38 39
    BREW_SLOW_BUILIDING_PACKAGES=$(printf '%s\n' \
        "cmake 15" \
I
Ivan Pozdeev 已提交
40
        "ffmpeg_opencv 10" \
41
    )
O
Olli-Pekka Heinisuo 已提交
42

I
Ivan Pozdeev 已提交
43 44 45 46 47
    function generate_ffmpeg_formula {
        local FF="ffmpeg"
        local LFF="ffmpeg_opencv"
        local FF_FORMULA; FF_FORMULA=$(brew formula "$FF")
        local LFF_FORMULA; LFF_FORMULA="$(dirname "$FF_FORMULA")/${LFF}.rb"
O
Olli-Pekka Heinisuo 已提交
48

I
Ivan Pozdeev 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
        local REGENERATE
        if [ -f "$LFF_FORMULA" ]; then
            local UPSTREAM_VERSION VERSION
            _brew_parse_package_info "$FF" " " UPSTREAM_VERSION _ _
            _brew_parse_package_info "$LFF" " " VERSION _ _   || REGENERATE=1
            #`rebuild` clause is ignored on `brew bottle` and deleted
            # from newly-generated formula on `brew bottle --merge` for some reason
            # so can't compare rebuild numbers
            if [ "$UPSTREAM_VERSION" != "$VERSION" ]; then
                REGENERATE=1
            fi
        else
            REGENERATE=1
        fi
        if [ -n "$REGENERATE" ]; then
            echo "Regenerating custom ffmpeg formula"
            # Bottle block syntax: https://docs.brew.sh/Bottles#bottle-dsl-domain-specific-language
            perl -wpe 'BEGIN {our ($found_blank, $bottle_block);}
                if (/(^class )(Ffmpeg)(\s.*)/) {$_=$1.$2."Opencv".$3."\n"; next;}
                if (!$found_blank && /^$/) {$_.="conflicts_with \"ffmpeg\"\n\n"; $found_blank=1; next;}
                if (!$bottle_block && /^\s*bottle do$/) { $bottle_block=1; next; }
                if ($bottle_block) { if (/^\s*end\s*$/) { $bottle_block=0} elsif (/^\s*sha256\s/) {$_=""} next; }
O
Olli-Pekka Heinisuo 已提交
71
if (/^\s*depends_on "(x264|x265|xvid|frei0r|rubberband|libvidstab)"$/) {$_=""; next;}
O
Olli-Pekka Heinisuo 已提交
72
                if (/^\s*--enable-(gpl|libx264|libx265|libxvid|frei0r|librubberband|libvidstab)$/) {$_=""; next;}
I
Ivan Pozdeev 已提交
73 74 75 76 77 78 79 80 81 82 83
                ' <"$FF_FORMULA" >"$LFF_FORMULA"
            diff -u "$FF_FORMULA" "$LFF_FORMULA" || test $? -le 1

            (   cd "$(dirname "$LFF_FORMULA")"
                # This is the official way to add a formula
                # https://docs.brew.sh/Formula-Cookbook#commit
                git add "$(basename "$LFF_FORMULA")"
                git commit -m "add/update custom ffmpeg ${VERSION}"
            )
        fi
    }
O
Olli-Pekka Heinisuo 已提交
84

85 86
fi

O
Olli-Pekka Heinisuo 已提交
87 88
function pre_build {
  echo "Starting pre-build"
89
  set -e -o pipefail
O
Olli-Pekka Heinisuo 已提交
90 91

  if [ -n "$IS_OSX" ]; then
92
    echo "Running for OSX"
O
Olli-Pekka Heinisuo 已提交
93

I
Ivan Pozdeev 已提交
94
    local CACHE_STAGE; (echo "$TRAVIS_BUILD_STAGE_NAME" | grep -qiF "final") || CACHE_STAGE=1
O
Olli-Pekka Heinisuo 已提交
95

I
Ivan Pozdeev 已提交
96 97
    #after the cache stage, all bottles and Homebrew metadata should be already cached locally
    if [ -n "$CACHE_STAGE" ]; then
O
Olli-Pekka Heinisuo 已提交
98
        brew update
99
        generate_ffmpeg_formula
I
Ivan Pozdeev 已提交
100 101
        brew_add_local_bottles
    fi
102

O
Olli-Pekka Heinisuo 已提交
103
    echo 'Installing qt5'
I
Ivan Pozdeev 已提交
104
    if [ -n "$CACHE_STAGE" ]; then
O
Olli-Pekka Heinisuo 已提交
105
        brew_install_and_cache_within_time_limit qt5 || { [ $? -gt 1 ] && return 2 || return 0; }
I
Ivan Pozdeev 已提交
106
    else
O
Olli-Pekka Heinisuo 已提交
107 108
        brew install qt5
        export PATH="/usr/local/opt/qt/bin:$PATH"
I
Ivan Pozdeev 已提交
109
    fi
110

111
    echo 'Installing FFmpeg'
112

I
Ivan Pozdeev 已提交
113 114 115
    if [ -n "$CACHE_STAGE" ]; then
        brew_install_and_cache_within_time_limit ffmpeg_opencv || { [ $? -gt 1 ] && return 2 || return 0; }
    else
O
Olli-Pekka Heinisuo 已提交
116
        brew unlink python@2
O
Olli-Pekka Heinisuo 已提交
117
        brew install -vd ffmpeg_opencv
I
Ivan Pozdeev 已提交
118 119 120 121 122 123
    fi

    if [ -n "$CACHE_STAGE" ]; then
        brew_go_bootstrap_mode 0
        return 0
    fi
O
Olli-Pekka Heinisuo 已提交
124

125 126
    # Have to install macpython late to avoid conflict with Homebrew Python update
    before_install
O
Olli-Pekka Heinisuo 已提交
127

O
Olli-Pekka Heinisuo 已提交
128 129 130 131 132 133 134 135 136
  else
    echo "Running for linux"
  fi
}

function run_tests {
    # Runs tests on installed distribution from an empty directory
    echo "Run tests..."
    echo $PWD
137 138

    if [ -n "$IS_OSX" ]; then
139
      echo "Running for OS X"
140 141 142 143 144
      cd ../tests/
    else
      echo "Running for linux"
      cd /io/tests/
    fi
O
Olli-Pekka Heinisuo 已提交
145

146 147 148 149 150 151 152 153 154 155
    test_wheels
}

function test_wheels {
    PYTHON=python$PYTHON_VERSION

    echo "Starting tests..."

    #Test package
    $PYTHON -m unittest test
O
Olli-Pekka Heinisuo 已提交
156
}
157 158

export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
O
Olli-Pekka Heinisuo 已提交
159
set -x