Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable Qt framework in CI and refactoring of CI configuration #160

Merged
merged 6 commits into from
Aug 17, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
language: cpp
os:
- osx
- linux
sudo: required
dist: trusty
Expand All @@ -12,15 +11,16 @@ env:
- GMOCK_VER=1.7.0
- GMOCK_PATH=/usr/src/gmock #1.6.0 from ubuntu trusty repo
matrix:
exclude:
- os: osx
env: GMOCK_PATH=/usr/src/gmock
- os: osx
compiler: gcc #does anyone on osx use it?
include:
- os: linux
compiler: gcc
env: GMOCK_VER=1.8.0 VALGRIND_TESTS=ON
- os: osx
compiler: clang
env: GMOCK_VER=1.8.0 QT_DIR=/usr/local/Cellar/qt5/5.8.0_1
- os: osx
compiler: clang
env: GMOCK_VER=1.7.0 QT_DIR=/usr/local/Cellar/qt5/5.8.0_1

addons:
apt:
Expand All @@ -35,9 +35,10 @@ addons:
- google-mock
- ninja-build
- valgrind
- qtbase5-dev

before_install:
- if [[ "${TRAVIS_OS_NAME}" = "osx" ]]; then brew update && brew install ninja; fi
- if [[ "${TRAVIS_OS_NAME}" = "osx" ]]; then brew update && brew install ninja qt5; fi

script: ./travis.sh

Expand Down
42 changes: 30 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ cmake_minimum_required(VERSION 3.1)

project(Cucumber-Cpp)

set(CUKE_USE_STATIC_BOOST ${WIN32} CACHE BOOL "Statically link Boost (except boost::test)")
set(CUKE_USE_STATIC_GTEST ON CACHE BOOL "Statically link Google Test")

set(CUKE_DISABLE_BOOST_TEST OFF CACHE BOOL "Disable boost:test")
set(CUKE_DISABLE_GTEST OFF CACHE BOOL "Disable Google Test framework")
set(CUKE_DISABLE_UNIT_TESTS OFF CACHE BOOL "Disable unit tests")
set(CUKE_DISABLE_E2E_TESTS OFF CACHE BOOL "Disable end-to-end tests")
set(CUKE_ENABLE_EXAMPLES OFF CACHE BOOL "Enable the examples")
option(CUKE_USE_STATIC_BOOST "Statically link Boost (except boost::test)" ${WIN32})
option(CUKE_USE_STATIC_GTEST "Statically link Google Test" ON)
option(CUKE_DISABLE_BOOST_TEST "Disable boost:test" OFF)
option(CUKE_DISABLE_GTEST "Disable Google Test framework" OFF)
option(CUKE_DISABLE_UNIT_TESTS "Disable unit tests" OFF)
option(CUKE_DISABLE_E2E_TESTS "Disable end-to-end tests" OFF)
option(CUKE_ENABLE_EXAMPLES "Enable the examples" OFF)
option(CUKE_DISABLE_QT "Disable using Qt framework" OFF)
option(VALGRIND_TESTS "Run tests within Valgrind" OFF)
set(GMOCK_SRC_DIR "" CACHE STRING "Google Mock framework sources path (otherwise downloaded)")
set(GMOCK_VER "1.7.0" CACHE STRING "Google Mock framework version to be used")
option(VALGRIND_TESTS "Run tests within Valgrind" OFF)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules)

Expand Down Expand Up @@ -112,6 +112,27 @@ if(NOT CUKE_DISABLE_GTEST)
endif()
endif()

#
# Qt
#

if(NOT CUKE_DISABLE_QT)
find_package(Qt5Core)
find_package(Qt5Widgets)
find_package(Qt5Test)

if(${Qt5Core_FOUND} AND ${Qt5Widgets_FOUND} AND ${Qt5Test_FOUND})
message(STATUS "Found Qt version: ${Qt5Core_VERSION_STRING}")
set(QT_LIBRARIES Qt5::Core Qt5::Widgets Qt5::Test)
else()
find_package(Qt4 COMPONENTS QtCore QtGui QtTest)
if(QT4_FOUND)
set(QT_LIBRARIES Qt4::QtCore Qt4::QtGui Qt4::QtTest)
include(${QT_USE_FILE})
endif()
endif()
endif()

#
# Valgrind
#
Expand Down Expand Up @@ -163,11 +184,8 @@ endif()
#

set(CUKE_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)

include_directories(${CUKE_INCLUDE_DIR})

set(CUKE_LIBRARIES cucumber-cpp ${CUKE_EXTRA_LIBRARIES})

add_subdirectory(src)

#
Expand Down
5 changes: 5 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
### New Features

* Listen on localhost by default to avoid firewall warnings ([#158](https://github.com/cucumber/cucumber-cpp/pull/158) Nik Reiman)
* Enable Qt framework in CI and refactoring of CI configuration ([#160](https://github.com/cucumber/cucumber-cpp/pull/160) Kamil Strzempowicz & Giel van Schijndel)

### Bugfixes

* Allow running all GTest cases without filter separation ([#144](https://github.com/cucumber/cucumber-cpp/pull/144) Giel van Schijndel)
* Fix QNX build by depending on standard C++ instead of specific implementation ([#156](https://github.com/cucumber/cucumber-cpp/issues/156) Giel van Schijndel)
* Ensure CMake 3.1+ is available, 2.8.12 wasn't enough for quite a while ([#152](https://github.com/cucumber/cucumber-cpp/pull/152) Giel van Schijndel)


## [0.4](https://github.com/cucumber/cucumber-cpp/compare/v0.3.1...v0.4) (31 March 2017)

### New Features
Expand All @@ -27,6 +29,8 @@
* Fixed `defs.hpp` deprecation warning on MSVC ([#124](https://github.com/cucumber/cucumber-cpp/pull/124) Antoine Allard)
* Fixed parallel build ([#135](https://github.com/cucumber/cucumber-cpp/pull/135) Giel van Schijndel)
* Fixed memory leaks and better memory management ([#134](https://github.com/cucumber/cucumber-cpp/pull/134) Giel van Schijndel)
* Got rid of clang warning - fix for issue #119 ([#138](https://github.com/cucumber/cucumber-cpp/pull/138) Kamil Strzempowicz, [f933ad1](https://github.com/paoloambrosio/cucumber-cpp/commit/f933ad1983cf15cc0573532f98b5457bc1ba2a18) Paolo Ambrosio)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, seems @paoloambrosio forgot to add this, thanks for catching it. In general we don't attribute the maintainer that merged it nor the merge commit though (but leave it as is for now, I'll fix it up in the merge commit.



## [0.3.1](https://github.com/cucumber/cucumber-cpp/compare/v0.3...v0.3.1) (11 April 2016)

Expand All @@ -41,6 +45,7 @@

None


## [0.3](https://github.com/cucumber/cucumber-cpp/compare/v0.2...v0.3) (22 December 2013)

### New Features
Expand Down
43 changes: 18 additions & 25 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,62 +2,55 @@ version: "{branch}-ci-{build}"
os: Visual Studio 2015

environment:
RUBY_VERSION: 200
matrix:
- build: mingw
platform: x86
MINGW_ARCH: i686
MSYSTEM: MINGW32
- MINGW_ARCH: i686
MINGW_ROOT: C:\msys64\mingw32
BOOST_ROOT: C:\msys64\mingw32
BOOST_LIBRARYDIR: C:\msys64\mingw32\lib
BOOST_INCLUDEDIR: C:\msys64\mingw32\include\boost
CMAKE_GENERATOR: 'MSYS Makefiles'
- build: mingw
platform: x64
MINGW_ARCH: x86_64
MSYSTEM: MINGW64
QT_DIR: C:\Qt\5.8\mingw53_32
- MINGW_ARCH: x86_64
MINGW_ROOT: C:\msys64\mingw64
BOOST_ROOT: C:\msys64\mingw64
BOOST_LIBRARYDIR: C:\msys64\mingw64\lib
BOOST_INCLUDEDIR: C:\msys64\mingw64\include\boost
CMAKE_GENERATOR: 'MSYS Makefiles'
- build: msvc
platform: x86
- MSVC_ARCH: x86
BOOST_ROOT: C:\Libraries\boost_1_59_0
BOOST_LIBRARYDIR: C:\Libraries\boost_1_59_0\lib32-msvc-14.0
BOOST_INCLUDEDIR: C:\Libraries\boost_1_59_0\boost
CMAKE_GENERATOR: 'NMake Makefiles'
- build: msvc
platform: x64
QT_DIR: C:\Qt\5.8\msvc2015
- MSVC_ARCH: x64
BOOST_ROOT: C:\Libraries\boost_1_59_0
BOOST_INCLUDEDIR: C:\Libraries\boost_1_59_0\boost
BOOST_LIBRARYDIR: C:\Libraries\boost_1_59_0\lib64-msvc-14.0
CMAKE_GENERATOR: 'NMake Makefiles'
QT_DIR: C:\Qt\5.8\msvc2015_64

install:
- git submodule init
- git submodule update
- set PATH=C:\Ruby%RUBY_VERSION%\bin;%BOOST_LIBRARYDIR%;%PATH%
- set PATH=C:\Ruby200\bin;%BOOST_LIBRARYDIR%;%PATH%
- gem install bundle
- bundle install
- bundle env
- if "%build%"=="mingw" set PATH=%MINGW_ROOT%\bin;C:\msys64\usr\bin\;%PATH%
- if "%build%"=="mingw" bash -lc "pacman --needed --noconfirm -S mingw-w64-%MINGW_ARCH%-boost
- if defined MINGW_ROOT set PATH=%MINGW_ROOT%\bin;C:\msys64\usr\bin\;%PATH%
- if defined MINGW_ARCH bash -lc "pacman --needed --noconfirm -S mingw-w64-%MINGW_ARCH%-boost"
- if defined MSVC_ARCH call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" %MSVC_ARCH%

build_script:
- cmd: if "%build%"=="msvc" call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" %PLATFORM%
- cmd: cmake -E make_directory build
- cmd: cmake -E chdir build cmake -G "%CMAKE_GENERATOR%" -DCUKE_ENABLE_EXAMPLES=ON -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_INCLUDEDIR="%BOOST_INCLUDEDIR%" -DBOOST_LIBRARYDIR="%BOOST_LIBRARYDIR%" ..
- cmd: cmake --build build
- cmake -E make_directory build
- cmake -E chdir build cmake -G "%CMAKE_GENERATOR%" -DCUKE_ENABLE_EXAMPLES=ON -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_INCLUDEDIR="%BOOST_INCLUDEDIR%" -DBOOST_LIBRARYDIR="%BOOST_LIBRARYDIR%" -DCMAKE_PREFIX_PATH="%QT_DIR%" ..
- cmake --build build

test_script:
- cmd: set CTEST_OUTPUT_ON_FAILURE=ON
- cmd: cmake --build build --target test
- cmd: cmake --build build --target features
- set CTEST_OUTPUT_ON_FAILURE=ON
- cmake --build build --target test
- cmake --build build --target features

after_test:
- cmd: for /r %%v in (TEST-*.xml) do curl -s -F "file=@%%v;filename=%%~nxv" https://ci.appveyor.com/api/testresults/junit/%APPVEYOR_JOB_ID%
- for /r %%v in (TEST-*.xml) do curl -s -F "file=@%%v;filename=%%~nxv" https://ci.appveyor.com/api/testresults/junit/%APPVEYOR_JOB_ID%

notifications:
- provider: Email
Expand Down
4 changes: 1 addition & 3 deletions examples/Calc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
project(Calc)

include_directories(${CUKE_INCLUDE_DIRS} src)

add_library(Calc src/Calculator)
target_include_directories(Calc PUBLIC src)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For future reference: I would have preferred for this cleanup to happen in a separate PR, or at least a separate commit. Generally I prefer every change in one commit to work towards accomplishing one goal (which would be fixing the build for this one).


if(GMOCK_FOUND)
add_executable(GTestCalculatorSteps features/step_definitions/GTestCalculatorSteps)
target_link_libraries(GTestCalculatorSteps Calc ${CUKE_LIBRARIES} ${CUKE_GTEST_LIBRARIES})
endif()

if(Boost_UNIT_TEST_FRAMEWORK_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(BoostCalculatorSteps features/step_definitions/BoostCalculatorSteps)
target_link_libraries(BoostCalculatorSteps Calc ${CUKE_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
endif()
37 changes: 7 additions & 30 deletions examples/CalcQt/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,40 +1,17 @@
project(CalcQt)

set(CALCQT_HEADERS src/CalculatorWidget.h)
set(CALCQT_SOURCES src/CalcQt.cpp src/CalculatorWidget.cpp)
include_directories(${CUKE_INCLUDE_DIRS} src)

find_package(Qt5Core QUIET)
find_package(Qt5Widgets QUIET)
find_package(Qt5Test QUIET)

if(${Qt5Core_FOUND} AND ${Qt5Widgets_FOUND} AND ${Qt5Test_FOUND})
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(QT_LIBRARIES Qt5::Core Qt5::Widgets Qt5::Test)

add_library(libcalcqt src/CalculatorWidget.cpp ${CALCQT_HEADERS})
if(QT_LIBRARIES)
add_library(libcalcqt src/CalculatorWidget.cpp src/CalculatorWidget.h)
set_target_properties(libcalcqt PROPERTIES AUTOMOC ON)
target_include_directories(libcalcqt PUBLIC src)
target_link_libraries(libcalcqt ${QT_LIBRARIES})
add_executable(calcqt ${CALCQT_SOURCES})

add_executable(calcqt src/CalcQt.cpp)
target_link_libraries(calcqt libcalcqt ${QT_LIBRARIES})
else()
find_package(Qt4 COMPONENTS QtCore QtGui QtTest)
if(QT4_FOUND)
include(${QT_USE_FILE})
qt4_wrap_cpp(CALCQT_HEADERS_MOC ${CALCQT_HEADERS})
add_library(libcalcqt src/CalculatorWidget ${CALCQT_HEADERS_MOC})

add_executable(calcqt ${CALCQT_SOURCES} ${CALCQT_HEADERS_MOC})
target_link_libraries(calcqt ${QT_LIBRARIES})
endif()
endif()

if(QT_LIBRARIES)
if(Boost_UNIT_TEST_FRAMEWORK_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(BoostCalculatorQtSteps features/step_definitions/BoostCalculatorQtSteps)
target_link_libraries(BoostCalculatorQtSteps libcalcqt ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} ${CUKE_LIBRARIES} ${QT_LIBRARIES})
target_link_libraries(BoostCalculatorQtSteps libcalcqt ${CUKE_LIBRARIES} ${QT_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
endif()
if(GTEST_FOUND)
add_executable(GTestCalculatorQtSteps features/step_definitions/GTestCalculatorQtSteps)
Expand Down
2 changes: 0 additions & 2 deletions examples/FeatureShowcase/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
project(FeatureShowcase)

include_directories(${CUKE_INCLUDE_DIRS})

if(GMOCK_FOUND)
function(add_cucumber_executable)
add_executable(FeatureShowcaseSteps ${ARGV})
Expand Down
2 changes: 2 additions & 0 deletions travis.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/bin/sh
set -e #break script on non-zero exitcode from any command
set -x #display command being executed

gem install bundler
bundle install

Expand All @@ -11,6 +12,7 @@ cmake -E make_directory build
cmake -E chdir build cmake \
-G Ninja \
-DCUKE_ENABLE_EXAMPLES=on \
${QT_DIR:+"-DCMAKE_PREFIX_PATH=${QT_DIR}"} \
${VALGRIND_TESTS:+"-DVALGRIND_TESTS=${VALGRIND_TESTS}"} \
${GMOCK_PATH:-"-DGMOCK_VER=${GMOCK_VER}"} \
${GMOCK_PATH:+"-DGMOCK_SRC_DIR=${GMOCK_PATH}"} \
Expand Down