travis_config.sh 5.6 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
function bdist_wheel_cmd {
    # copied from multibuild's common_utils.sh
K
Kian-Meng, Ang 已提交
15
    # add osx deployment target so it doesn't default to 10.6
16
    local abs_wheelhouse=$1
A
Andrey Senyaev 已提交
17 18 19
    # install all required packages in pyproject.toml, because bdist_wheel does not do it
    python${PYTHON_VERSION} -m pip install toml && python${PYTHON_VERSION} -c 'import toml; c = toml.load("pyproject.toml"); print("\n".join(c["build-system"]["requires"]))' | python${PYTHON_VERSION} -m pip install -r /dev/stdin
    CI_BUILD=1 python${PYTHON_VERSION} setup.py bdist_wheel --py-limited-api=cp36 -v
20
    cp dist/*.whl $abs_wheelhouse
O
Olli-Pekka Heinisuo 已提交
21
    if [ -z "$IS_OSX" ]; then
22 23 24
      # this path can be changed in the latest manylinux image
      TOOLS_PATH=/opt/_internal/pipx/venvs/auditwheel
      /opt/python/cp39-cp39/bin/python -m venv $TOOLS_PATH
O
Olli-Pekka Heinisuo 已提交
25
      source $TOOLS_PATH/bin/activate
26
      python patch_auditwheel_whitelist.py
O
Olli-Pekka Heinisuo 已提交
27
      deactivate
O
Olli-Pekka Heinisuo 已提交
28
    fi
29
    if [ -n "$USE_CCACHE" -a -z "$BREW_BOOTSTRAP_MODE" ]; then ccache -s; fi
30 31
}

32 33
if [ -n "$IS_OSX" ]; then
  echo "    > OSX environment "
I
Ivan Pozdeev 已提交
34
  export MAKEFLAGS="-j$(sysctl -n hw.ncpu)"
35 36
else
  echo "    > Linux environment "
O
Olli-Pekka Heinisuo 已提交
37
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/Qt5.15.0/lib
I
Ivan Pozdeev 已提交
38
  export MAKEFLAGS="-j$(grep -E '^processor[[:space:]]*:' /proc/cpuinfo | wc -l)"
39 40
  CURRENT_ARCH=$(uname -m)
  if [[ $CURRENT_ARCH == 'aarch64' ]]; then
A
Andrey Senyaev 已提交
41 42 43 44
    # To avoid network issues with pypi.org on OpenCV CN machines
    export PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
    echo "Running for linux aarch64"
  fi
45
fi
O
Olli-Pekka Heinisuo 已提交
46

47 48 49
if [ -n "$IS_OSX" ]; then

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

51 52
    BREW_SLOW_BUILIDING_PACKAGES=$(printf '%s\n' \
        "cmake 15" \
53
        "ffmpeg 10" \
54
    )
O
Olli-Pekka Heinisuo 已提交
55

I
Ivan Pozdeev 已提交
56 57
    function generate_ffmpeg_formula {
        local FF="ffmpeg"
58
        local LFF="ffmpeg"
59
        local FF_FORMULA; FF_FORMULA=$(brew formula "${FF}")
I
Ivan Pozdeev 已提交
60
        local LFF_FORMULA; LFF_FORMULA="$(dirname "$FF_FORMULA")/${LFF}.rb"
O
Olli-Pekka Heinisuo 已提交
61

I
Ivan Pozdeev 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
        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);}
80
                if (/(^class )(Ffmpeg)(\s.*)/) {$_=$1."Opencv".$3."\n"; next;}
I
Ivan Pozdeev 已提交
81 82 83
                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 已提交
84
if (/^\s*depends_on "(x264|x265|xvid|frei0r|rubberband|libvidstab)"$/) {$_=""; next;}
O
Olli-Pekka Heinisuo 已提交
85
                if (/^\s*--enable-(gpl|libx264|libx265|libxvid|frei0r|librubberband|libvidstab)$/) {$_=""; next;}
I
Ivan Pozdeev 已提交
86 87 88 89 90 91 92 93 94 95 96
                ' <"$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 已提交
97

98 99
fi

O
Olli-Pekka Heinisuo 已提交
100 101
function pre_build {
  echo "Starting pre-build"
102
  set -e -o pipefail
O
Olli-Pekka Heinisuo 已提交
103

104 105 106 107
  if [ -n "$IS_OSX" ]; then
    brew install lapack
  fi

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

111 112
    local CACHE_STAGE;# (echo "$TRAVIS_BUILD_STAGE_NAME" | grep -qiF "final") || CACHE_STAGE=1
    CACHE_STAGE=
113
    export HOMEBREW_NO_AUTO_UPDATE=1
O
Olli-Pekka Heinisuo 已提交
114

115
    echo 'Installing FFmpeg'
116

117 118 119
    brew update
    generate_ffmpeg_formula
    brew_add_local_bottles
120
    brew install --build-bottle ffmpeg
121
    # It needs when we use not the latest ffmpeg formula
122
    brew link ffmpeg
O
Olli-Pekka Heinisuo 已提交
123

I
Ivan Pozdeev 已提交
124 125 126 127
    if [ -n "$CACHE_STAGE" ]; then
        brew_go_bootstrap_mode 0
        return 0
    fi
O
Olli-Pekka Heinisuo 已提交
128

129 130
    # Have to install macpython late to avoid conflict with Homebrew Python update
    before_install
O
Olli-Pekka Heinisuo 已提交
131

O
Olli-Pekka Heinisuo 已提交
132 133 134 135 136 137 138 139 140
  else
    echo "Running for linux"
  fi
}

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

A
Andrey Senyaev 已提交
142 143
    PYTHON=python$PYTHON_VERSION

A
Andrey Senyaev 已提交
144
    echo "Running for linux"
145

A
Andrey Senyaev 已提交
146 147
    if [ $PYTHON == "python3.6" ]; then
      $PYTHON -m pip install -U numpy==1.19.4
148
    fi
A
Andrey Senyaev 已提交
149 150 151 152 153
    cd /io/tests
    $PYTHON get_build_info.py

    cd /io/opencv
    export OPENCV_TEST_DATA_PATH=/io/opencv_extra/testdata
O
Olli-Pekka Heinisuo 已提交
154

155
    test_wheels
A
Andrey Senyaev 已提交
156
    pylint_test
157 158 159 160
}

function test_wheels {

A
Andrey Senyaev 已提交
161
    echo "Starting OpenCV tests..."
162 163

    #Test package
A
Andrey Senyaev 已提交
164
    $PYTHON modules/python/test/test.py -v --repo .
O
Olli-Pekka Heinisuo 已提交
165
}
166

A
Andrey Senyaev 已提交
167 168 169 170
function pylint_test {

    echo "Starting Pylint tests..."

A
Andrey Senyaev 已提交
171
    $PYTHON -m pip install pylint==2.12.2
172 173
    cd /io/tests
    $PYTHON -m pylint /io/opencv/samples/python/squares.py
A
Andrey Senyaev 已提交
174 175
}

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