aboutsummaryrefslogtreecommitdiffstats
path: root/.travis.yml
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2019-01-06 23:41:59 +0100
committerPeter Wu <peter@lekensteyn.nl>2019-01-12 21:56:47 +0000
commit5ed8360c21ccc5c26ca47eb59b175634415ae11f (patch)
treebac9f14e74ee191030b312eccfe78b07ea8844ff /.travis.yml
parentfd8ddbabab923f76daddf6225c61efd90c2255a6 (diff)
travis: initial Windows support with non-interactive Qt installer
The current preview release of Windows support on Travis lacks many packages (like Qt and Python 3) and is very much tied to git-bash (unlike AppVeyor which has a more native Windows experience). Several workarounds were necessary, such as reimplementing refreshenv, setting CMAKE_PROGRAM_PATH) and setting a supported language. See also https://travis-ci.community/t/feedback-from-windows-integration-for-a-cmake-qt-c-python-perl-project/1706 I wrote the Qt installer script originally for Qt 5.6, ported it to Qt 5.9.5 and finally updated it for 5.12, some comments could be outdated. Duration as measured for one x64 build: - 3m00s - restore cache (Qt and wireshark-libs) - 2m22s - choco install - 0m8s - pip install - 2m20s - cmake - 18m5s - build all - 0m20s - build test-programs - 5m34s - pytest -v - 2m46s - store cache (Qt and wireshark-libs) - (total duration about 36m) - (installing Qt 5.12.0 from scratch would add 7m) Cache size for extracted x64 build: wireshark-libs is 187M, Qt 604M. (179M and 516M for 32-bit respectively.) Change-Id: I9881ab6439e9ca99efad16a6c861862ab9d35252 Reviewed-on: https://code.wireshark.org/review/31454 Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Diffstat (limited to '.travis.yml')
-rw-r--r--.travis.yml63
1 files changed, 60 insertions, 3 deletions
diff --git a/.travis.yml b/.travis.yml
index 11abf4510b..ccbf00b4d9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -54,6 +54,30 @@ matrix:
- CXX=clang++
- CC=clang
- PCAP=OFF
+ - name: Windows (VS2017 x64)
+ # Set a supported language, otherwise the Windows worker will not start.
+ language: shell
+ os: windows
+ env:
+ - PLATFORM: x64
+ - WIRESHARK_BASE_DIR: C:/wireshark-libs
+ - QT5_BASE_DIR: C:/Qt/5.12.0/msvc2017_64
+ cache:
+ directories:
+ - $WIRESHARK_BASE_DIR
+ - C:/Qt
+ - name: Windows (VS2017 Win32)
+ # Set a supported language, otherwise the Windows worker will not start.
+ language: shell
+ os: windows
+ env:
+ - PLATFORM: Win32
+ - WIRESHARK_BASE_DIR: C:/wireshark-libs
+ - QT5_BASE_DIR: C:/Qt/5.12.0/msvc2017
+ cache:
+ directories:
+ - $WIRESHARK_BASE_DIR
+ - C:/Qt
before_install:
- echo $TRAVIS_OS_NAME
# macos
@@ -62,15 +86,48 @@ before_install:
# linux
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ./tools/debian-setup.sh --install-optional --install-test-deps -q; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y python3-pip; fi
+ # windows
+ - if [ "$TRAVIS_OS_NAME" == "windows" ]; then cinst -y --no-progress python3 winflexbison strawberryperl; fi
+ - |
+ if [ "$TRAVIS_OS_NAME" == "windows" ]; then
+ # Ensure Python and the Scripts folder is available in PATH.
+ # refreshenv does not seem to work in bash, so reload it manually.
+ # Entries in the Machine PATH might contain trailing slashes, drop those.
+ # Apply Process paths before Machine to ensure /bin appears before others (otherwise casher will break and stall).
+ export PATH="$(powershell -Command '("Process", "Machine" | % {
+ [Environment]::GetEnvironmentVariable("PATH", $_) -Split ";" -Replace "\\$", ""
+ } | Select -Unique | % { cygpath $_ }) -Join ":"')"
+ echo "PATH=$PATH"
+ # Workaround broken casher implementation that extracts absolute paths to the current working directory
+ # See https://github.com/travis-ci/casher/pull/38
+ for path in wireshark-libs Qt; do if [ -d "$path" ]; then echo "Restoring C:/$path"; mv "$path/"* "C:/$path"; fi; done
+ # Update checksums to avoid invalidating the cache (saves 2-3mins).
+ if [ -d Qt ]; then md5deep64 -o f -r "C:/wireshark-libs" "C:/Qt" | sort > ~/.casher/md5sums_before; fi
+ # Workaround to avoid using perl from git-bash $PATH which lacks modules such as Pod::Usage
+ export CMAKE_PROGRAM_PATH=C:/Strawberry/perl/bin
+ fi
+ - |
+ if [ "$TRAVIS_OS_NAME" == "windows" ] && [ ! -e "$QT5_BASE_DIR/bin/moc.exe" ]; then
+ curl -vLo ~/qt-unified-windows-x86-online.exe http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe
+ if ! ~/qt-unified-windows-x86-online.exe --verbose --script tools/qt-installer-windows.qs > ~/qt-installer-output.txt; then
+ cat ~/qt-installer-output.txt; exit 1
+ fi
+ du -sm "$QT5_BASE_DIR"
+ fi
# all platforms
- pip3 install pytest pytest-xdist
before_script:
- mkdir build
- cd build
- - cmake -GNinja -DENABLE_PCAP=${PCAP} ..
+ - if [ "$TRAVIS_OS_NAME" != "windows" ]; then cmake -GNinja -DENABLE_PCAP=${PCAP} ..; fi
+ - if [ "$TRAVIS_OS_NAME" == "windows" ]; then cmake -A $PLATFORM ..; fi
script:
- - ninja
- - ninja test-programs
+ # Enable parallelism for msbuild too (since CMake 3.12; ninja does not need it)
+ - export CMAKE_BUILD_PARALLEL_LEVEL=0
+ # Invoke ninja (Linux/macOS, --config is ignored) or msbuild (Windows)
+ - cmake --build . --config RelWithDebInfo
+ - cmake --build . --config RelWithDebInfo --target test-programs
- pytest -v
after_script:
- if [ -f run/tshark ]; then run/tshark --version; fi
+ - if [ -f run/RelWithDebInfo/tshark.exe ]; then run/RelWithDebInfo/tshark.exe --version; fi