Merge pull request #1641 from ctrlaltca/pr_1600

CMake: Add "test" target
This commit is contained in:
ctrlaltca 2015-10-09 18:53:01 +02:00
commit 0c67cb6cb3
8 changed files with 115 additions and 17 deletions

View file

@ -232,3 +232,10 @@ if(WITH_ORACLE)
add_subdirectory(oracle) add_subdirectory(oracle)
SET(CPACK_INSTALL_CMAKE_PROJECTS "release/oracle.app;oracle;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS}) SET(CPACK_INSTALL_CMAKE_PROJECTS "release/oracle.app;oracle;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
endif() endif()
# Compile tests (default off)
option(TEST "build tests" OFF)
if(TEST)
include(CTest)
add_subdirectory(tests)
endif()

View file

@ -59,17 +59,28 @@ To compile:
cd build cd build
cmake .. cmake ..
make make
You can then run
make install make install
to get a cockatrice installation inside the `release` folder, or:
make package
to create a system-specific installation package.
The following flags can be passed to `cmake`: The following flags can be passed to `cmake`:
- `-DWITH_SERVER=1` Build the server. - `-DWITH_SERVER=1` Whether to build the server (default 0 = no).
- `-DWITH_CLIENT=0` Do not build the client. - `-DWITH_CLIENT=0` Whether to build the client (default 1 = yes).
- `-DWITH_ORACLE=0` Do not build oracle. - `-DWITH_ORACLE=0` Whether to build oracle (default 1 = yes).
- `-DPORTABLE=1` Build portable versions of client & oracle. - `-DPORTABLE=1` Build portable versions of client & oracle (default 0 = no).
- `-DWITH_QT4=1` Force compilation to use Qt4 instead of Qt5. - `-DWITH_QT4=1` Force compilation to use Qt4 instead of Qt5 (default 0 = no).
- `-DCMAKE_BUILD_TYPE=Debug` Compile in debug mode. Enables extra logging output, debug symbols, and much more verbose compiler warnings. - `-DCMAKE_BUILD_TYPE=Debug` Compile in debug mode. Enables extra logging output, debug symbols, and much more verbose compiler warnings (default `Release`).
- `-DUPDATE_TRANSLATIONS=1` Configure `make` to update the translation .ts files for new strings in the source code. Note: Running `make clean` will remove the .ts files. - `-DUPDATE_TRANSLATIONS=1` Configure `make` to update the translation .ts files for new strings in the source code. Note: Running `make clean` will remove the .ts files (default 0 = no).
- `-DTEST=1` Enable regression tests (default 0 = no). Note: needs googletest, will be downloaded on the fly if unavailable. To run tests: ```make test```.
#### Building servatrice Docker container #### Building servatrice Docker container
`docker build -t servatrice .`<br> `docker build -t servatrice .`<br>

View file

@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.2)
project(gtest-download LANGUAGES NONE)
include(ExternalProject)
ExternalProject_Add(googletest
URL https://googletest.googlecode.com/files/gtest-1.7.0.zip
URL_HASH SHA1=f85f6d2481e2c6c4a18539e391aa4ea8ab0394af
SOURCE_DIR "${CMAKE_BINARY_DIR}/gtest-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/gtest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)

View file

@ -340,4 +340,4 @@ endif()
option(PORTABLE "portable build" OFF) option(PORTABLE "portable build" OFF)
IF(PORTABLE) IF(PORTABLE)
add_definitions(-DPORTABLE_BUILD) add_definitions(-DPORTABLE_BUILD)
endif() endif()

38
tests/CMakeLists.txt Normal file
View file

@ -0,0 +1,38 @@
enable_testing()
add_test(NAME dummy_test COMMAND dummy_test)
# Find GTest
add_executable(dummy_test dummy_test.cpp)
find_package(GTest)
if(NOT GTEST_FOUND)
IF(NOT EXISTS "${CMAKE_BINARY_DIR}/gtest-build")
message(STATUS "Downloading googletest")
configure_file("${CMAKE_SOURCE_DIR}/cmake/gtest-CMakeLists.txt.in" "${CMAKE_BINARY_DIR}/gtest-download/CMakeLists.txt")
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/gtest-download )
execute_process(COMMAND ${CMAKE_COMMAND} --build .
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/gtest-download )
ELSE()
message(STATUS "GoogleTest directory exists")
ENDIF()
# Add gtest directly to our build
add_subdirectory(${CMAKE_BINARY_DIR}/gtest-src
${CMAKE_BINARY_DIR}/gtest-build
EXCLUDE_FROM_ALL )
# Add the gtest include directory, since gtest
# doesn't add that dependency to its gtest target
target_include_directories(gtest INTERFACE
"${CMAKE_BINARY_DIR}/gtest-src/include" )
SET(GTEST_INCLUDE_DIRS "${CMAKE_BINARY_DIR}/gtest-src/include")
SET(GTEST_BOTH_LIBRARIES gtest)
add_dependencies(dummy_test gtest)
endif()
include_directories(${GTEST_INCLUDE_DIRS})
target_link_libraries(dummy_test ${GTEST_BOTH_LIBRARIES})

16
tests/dummy_test.cpp Normal file
View file

@ -0,0 +1,16 @@
#include "gtest/gtest.h"
namespace {
class FooTest : public ::testing::Test {
};
TEST(DummyTest, Works) {
ASSERT_EQ(1, 1) << "One is not equal to one";
}
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

View file

@ -9,13 +9,14 @@ if [[ $TRAVIS_OS_NAME == "osx" && $QT4 == 0 ]]; then
prefix="-DCMAKE_PREFIX_PATH=`echo /usr/local/Cellar/qt5/5.*/`" prefix="-DCMAKE_PREFIX_PATH=`echo /usr/local/Cellar/qt5/5.*/`"
fi fi
if [[ $TRAVIS_OS_NAME == "linux" && $QT4 == 0 ]]; then if [[ $TRAVIS_OS_NAME == "linux" && $QT4 == 0 ]]; then
prefix="-DCMAKE_PREFIX_PATH=/opt/qt52/lib/cmake/" prefix="-DCMAKE_PREFIX_PATH=`echo /opt/qt5*/lib/cmake/`"
fi fi
cmake .. -DWITH_SERVER=1 -DCMAKE_BUILD_TYPE=$BUILDTYPE -DWITH_QT4=$QT4 $prefix
if [[ $BUILDTYPE == "Debug" ]]; then if [[ $BUILDTYPE == "Debug" ]]; then
cmake .. -DWITH_SERVER=1 -DTEST=1 -DCMAKE_BUILD_TYPE=$BUILDTYPE -DWITH_QT4=$QT4 $prefix
make -j2 make -j2
make test
else else
cmake .. -DWITH_SERVER=1 -DCMAKE_BUILD_TYPE=$BUILDTYPE -DWITH_QT4=$QT4 $prefix
make package -j2 make package -j2
fi fi

View file

@ -7,15 +7,25 @@ if [[ $TRAVIS_OS_NAME == "osx" ]] ; then
else else
brew install qt5 protobuf libgcrypt > /dev/null brew install qt5 protobuf libgcrypt > /dev/null
fi fi
brew unlink cmake
brew upgrade cmake
else else
sudo add-apt-repository -y ppa:george-edison55/precise-backports
if (( QT4 )); then if (( QT4 )); then
sudo apt-get update -qq sudo apt-get update -qq
sudo apt-get install -y qtmobility-dev libprotobuf-dev protobuf-compiler libqt4-dev sudo apt-get install -y qtmobility-dev libqt4-dev
else else
sudo add-apt-repository -y ppa:beineri/opt-qt521 sudo add-apt-repository -y ppa:beineri/opt-qt541
sudo add-apt-repository -y ppa:kalakris/cmake
sudo apt-get update -qq sudo apt-get update -qq
sudo apt-get install -y libprotobuf-dev protobuf-compiler cmake libsqlite3-dev\ sudo apt-get install -y libsqlite3-dev\
qt52base qt52webkit qt52tools qt52svg qt52multimedia qt54base qt54webkit qt54tools qt54svg qt54multimedia
fi fi
sudo apt-get install -y cmake cmake-data libgtest-dev libprotobuf-dev protobuf-compiler
sudo mkdir /usr/src/gtest/build
cd /usr/src/gtest/build
sudo cmake .. -DBUILD_SHARED_LIBS=1
sudo make -j2
sudo ln -s /usr/src/gtest/build/libgtest.so /usr/lib/libgtest.so
sudo ln -s /usr/src/gtest/build/libgtest_main.so /usr/lib/libgtest_main.so
cd -
fi fi