Maybe coverage working?
This commit is contained in:
parent
ec407dd27d
commit
77395b3739
14
.travis.yml
14
.travis.yml
@ -2,8 +2,15 @@ language: cpp
|
|||||||
compiler:
|
compiler:
|
||||||
- gcc
|
- gcc
|
||||||
- clang
|
- clang
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- if [TRAVIS_MCSERVER_BUILD_TYPE == "COVERAGE"] then sudo pip install cpp_coveralls fi
|
||||||
|
|
||||||
# Build MCServer
|
# Build MCServer
|
||||||
script: cmake . -DBUILD_TOOLS=1 -DSELF_TEST=1 && make -j 2 && cd MCServer/ && (echo stop | $MCSERVER_PATH)
|
script: CIbuild.sh
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- uploadCoverage.sh
|
||||||
|
|
||||||
env:
|
env:
|
||||||
- TRAVIS_MCSERVER_BUILD_TYPE=RELEASE MCSERVER_PATH=./MCServer
|
- TRAVIS_MCSERVER_BUILD_TYPE=RELEASE MCSERVER_PATH=./MCServer
|
||||||
@ -11,6 +18,11 @@ env:
|
|||||||
- TRAVIS_MCSERVER_BUILD_TYPE=RELEASE TRAVIS_MCSERVER_FORCE32=1 MCSERVER_PATH=./MCServer
|
- TRAVIS_MCSERVER_BUILD_TYPE=RELEASE TRAVIS_MCSERVER_FORCE32=1 MCSERVER_PATH=./MCServer
|
||||||
- TRAVIS_MCSERVER_BUILD_TYPE=DEBUG TRAVIS_MCSERVER_FORCE32=1 MCSERVER_PATH=./MCServer_debug
|
- TRAVIS_MCSERVER_BUILD_TYPE=DEBUG TRAVIS_MCSERVER_FORCE32=1 MCSERVER_PATH=./MCServer_debug
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- compiler: gcc
|
||||||
|
env: TRAVIS_MCSERVER_BUILD_TYPE=COVERAGE MCSERVER_PATH=./MCServer_debug
|
||||||
|
|
||||||
# Notification Settings
|
# Notification Settings
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
|
6
CIbuild.sh
Normal file
6
CIbuild.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cmake . -DBUILD_TOOLS=1 -DSELF_TEST=1;
|
||||||
|
make -j 2;
|
||||||
|
cd MCServer/;
|
||||||
|
echo stop | gcov $MCSERVER_PATH;
|
@ -14,6 +14,10 @@ if(DEFINED ENV{TRAVIS_MCSERVER_FORCE32})
|
|||||||
set(FORCE32 $ENV{TRAVIS_MCSERVER_FORCE32})
|
set(FORCE32 $ENV{TRAVIS_MCSERVER_FORCE32})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED ENV{TRAVIS_BUILD_WITH_COVERAGE})
|
||||||
|
set(BUILD_WITH_COVERAGE $ENV{TRAVIS_BUILD_WITH_COVERAGE})
|
||||||
|
endif()
|
||||||
|
|
||||||
# This has to be done before any flags have been set up.
|
# This has to be done before any flags have been set up.
|
||||||
if(${BUILD_TOOLS})
|
if(${BUILD_TOOLS})
|
||||||
add_subdirectory(Tools/MCADefrag/)
|
add_subdirectory(Tools/MCADefrag/)
|
||||||
|
@ -1,32 +1,41 @@
|
|||||||
macro (add_flags_lnk FLAGS)
|
macro (add_flags_lnk FLAGS)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAGS}")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAGS}")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${FLAGS}")
|
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${FLAGS}")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${FLAGS}")
|
set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS_COVERAGE} ${FLAGS}")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${FLAGS}")
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${FLAGS}")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} ${FLAGS}")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${FLAGS}")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} ${FLAGS}")
|
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} ${FLAGS}")
|
||||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${FLAGS}")
|
set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_COVERAGE} ${FLAGS}")
|
||||||
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} ${FLAGS}")
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} ${FLAGS}")
|
||||||
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} ${FLAGS}")
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${FLAGS}")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} ${FLAGS}")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS_COVERAGE "${CMAKE_MODULE_LINKER_FLAGS_COVERAGE} ${FLAGS}")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} ${FLAGS}")
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
macro(add_flags_cxx FLAGS)
|
macro(add_flags_cxx FLAGS)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAGS}")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAGS}")
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${FLAGS}")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${FLAGS}")
|
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} ${FLAGS}")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${FLAGS}")
|
set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_COVERAGE} ${FLAGS}")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${FLAGS}")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${FLAGS}")
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
macro(set_flags)
|
macro(set_flags)
|
||||||
# Add the preprocessor macros used for distinguishing between debug and release builds (CMake does this automatically for MSVC):
|
# Add the preprocessor macros used for distinguishing between debug and release builds (CMake does this automatically for MSVC):
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/lib/cmake-coverage/")
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
|
include(CodeCoverage)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
|
||||||
|
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -D_DEBUG")
|
||||||
|
set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_COVERAGE} -D_DEBUG")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
@ -42,9 +51,10 @@ macro(set_flags)
|
|||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
#on os x clang adds pthread for us but we need to add it for gcc
|
#on os x clang adds pthread for us but we need to add it for gcc
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11")
|
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -std=c++11")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11")
|
||||||
add_flags_cxx("-stdlib=libc++")
|
add_flags_cxx("-stdlib=libc++")
|
||||||
add_flags_lnk("-stdlib=libc++")
|
add_flags_lnk("-stdlib=libc++")
|
||||||
else()
|
else()
|
||||||
@ -57,6 +67,7 @@ macro(set_flags)
|
|||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11")
|
||||||
|
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -std=c++11")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -97,10 +108,12 @@ macro(set_lib_flags)
|
|||||||
string(REPLACE "/W3" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
string(REPLACE "/W3" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
string(REPLACE "/W3" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
|
string(REPLACE "/W3" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
|
||||||
else()
|
else()
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -w")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -w")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -w")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -w")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -w")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -w")
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -w")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -w")
|
||||||
|
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -w")
|
||||||
|
set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_COVERAGE} -w")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# On Unix we use two dynamic loading libraries dl and ltdl.
|
# On Unix we use two dynamic loading libraries dl and ltdl.
|
||||||
@ -128,7 +141,7 @@ macro(enable_profile)
|
|||||||
|
|
||||||
# Declare the profiling configurations:
|
# Declare the profiling configurations:
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUGPROFILE
|
SET(CMAKE_CXX_FLAGS_DEBUGPROFILE
|
||||||
"${CMAKE_CXX_FLAGS_DEBUG} ${PCXX_ROFILING}"
|
"${CMAKE_CXX_FLAGS_DEBUG} ${CXX_PROFILING}"
|
||||||
CACHE STRING "Flags used by the C++ compiler during profile builds."
|
CACHE STRING "Flags used by the C++ compiler during profile builds."
|
||||||
FORCE )
|
FORCE )
|
||||||
SET(CMAKE_C_FLAGS_DEBUGPROFILE
|
SET(CMAKE_C_FLAGS_DEBUGPROFILE
|
||||||
@ -171,7 +184,7 @@ macro(enable_profile)
|
|||||||
CMAKE_EXE_LINKER_FLAGS_RELEASEPROFILE
|
CMAKE_EXE_LINKER_FLAGS_RELEASEPROFILE
|
||||||
CMAKE_SHARED_LINKER_FLAGS_RELEASEPROFILE )
|
CMAKE_SHARED_LINKER_FLAGS_RELEASEPROFILE )
|
||||||
# The configuration types need to be set after their respective c/cxx/linker flags and before the project directive
|
# The configuration types need to be set after their respective c/cxx/linker flags and before the project directive
|
||||||
set(CMAKE_CONFIGURATION_TYPES "Debug;Release;DebugProfile;ReleaseProfile" CACHE STRING "" FORCE)
|
set(CMAKE_CONFIGURATION_TYPES "Debug;Release;DebugProfile;ReleaseProfile;Coverage" CACHE STRING "" FORCE)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
macro(set_exe_flags)
|
macro(set_exe_flags)
|
||||||
@ -180,10 +193,12 @@ macro(set_exe_flags)
|
|||||||
# We do not do that for MSVC since MSVC produces an awful lot of warnings for its own STL headers;
|
# We do not do that for MSVC since MSVC produces an awful lot of warnings for its own STL headers;
|
||||||
# the important warnings are turned on using #pragma in Globals.h
|
# the important warnings are turned on using #pragma in Globals.h
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
string(REPLACE "-w" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
|
string(REPLACE "-w" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
string(REPLACE "-w" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
|
string(REPLACE "-w" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
|
||||||
string(REPLACE "-w" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
string(REPLACE "-w" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
string(REPLACE "-w" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
|
string(REPLACE "-w" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
|
||||||
|
string(REPLACE "-w" "" CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE}")
|
||||||
|
string(REPLACE "-w" "" CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_COVERAGE}")
|
||||||
add_flags_cxx("-Wall -Wextra -Wno-unused-parameter -Wno-error=switch")
|
add_flags_cxx("-Wall -Wextra -Wno-unused-parameter -Wno-error=switch")
|
||||||
|
|
||||||
# we support non-IEEE 754 fpus so can make no guarentees about error
|
# we support non-IEEE 754 fpus so can make no guarentees about error
|
||||||
|
160
lib/cmake-coverage/CodeCoverage.cmake
Normal file
160
lib/cmake-coverage/CodeCoverage.cmake
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
#
|
||||||
|
# 2012-01-31, Lars Bilke
|
||||||
|
# - Enable Code Coverage
|
||||||
|
#
|
||||||
|
# 2013-09-17, Joakim Söderberg
|
||||||
|
# - Added support for Clang.
|
||||||
|
# - Some additional usage instructions.
|
||||||
|
#
|
||||||
|
# USAGE:
|
||||||
|
# 1. Copy this file into your cmake modules path.
|
||||||
|
#
|
||||||
|
# 2. Add the following line to your CMakeLists.txt:
|
||||||
|
# INCLUDE(CodeCoverage)
|
||||||
|
#
|
||||||
|
# 3. Set compiler flags to turn off optimization and enable coverage:
|
||||||
|
# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
|
||||||
|
# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
|
||||||
|
#
|
||||||
|
# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target
|
||||||
|
# which runs your test executable and produces a lcov code coverage report:
|
||||||
|
# Example:
|
||||||
|
# SETUP_TARGET_FOR_COVERAGE(
|
||||||
|
# my_coverage_target # Name for custom target.
|
||||||
|
# test_driver # Name of the test driver executable that runs the tests.
|
||||||
|
# # NOTE! This should always have a ZERO as exit code
|
||||||
|
# # otherwise the coverage generation will not complete.
|
||||||
|
# coverage # Name of output directory.
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# 4. Build a Debug build:
|
||||||
|
# cmake -DCMAKE_BUILD_TYPE=Debug ..
|
||||||
|
# make
|
||||||
|
# make my_coverage_target
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
# Check prereqs
|
||||||
|
FIND_PROGRAM( GCOV_PATH gcov )
|
||||||
|
FIND_PROGRAM( LCOV_PATH lcov )
|
||||||
|
FIND_PROGRAM( GENHTML_PATH genhtml )
|
||||||
|
FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests)
|
||||||
|
|
||||||
|
IF(NOT GCOV_PATH)
|
||||||
|
MESSAGE(FATAL_ERROR "gcov not found! Aborting...")
|
||||||
|
ENDIF() # NOT GCOV_PATH
|
||||||
|
|
||||||
|
IF(NOT CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
# Clang version 3.0.0 and greater now supports gcov as well.
|
||||||
|
MESSAGE(WARNING "Compiler is not GNU gcc! Clang Version 3.0.0 and greater supports gcov as well, but older versions don't.")
|
||||||
|
|
||||||
|
IF(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF() # NOT CMAKE_COMPILER_IS_GNUCXX
|
||||||
|
|
||||||
|
SET(CMAKE_CXX_FLAGS_COVERAGE
|
||||||
|
"-g -O0 --coverage -fprofile-arcs -ftest-coverage"
|
||||||
|
CACHE STRING "Flags used by the C++ compiler during coverage builds."
|
||||||
|
FORCE )
|
||||||
|
SET(CMAKE_C_FLAGS_COVERAGE
|
||||||
|
"-g -O0 --coverage -fprofile-arcs -ftest-coverage"
|
||||||
|
CACHE STRING "Flags used by the C compiler during coverage builds."
|
||||||
|
FORCE )
|
||||||
|
SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE
|
||||||
|
""
|
||||||
|
CACHE STRING "Flags used for linking binaries during coverage builds."
|
||||||
|
FORCE )
|
||||||
|
SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
|
||||||
|
""
|
||||||
|
CACHE STRING "Flags used by the shared libraries linker during coverage builds."
|
||||||
|
FORCE )
|
||||||
|
MARK_AS_ADVANCED(
|
||||||
|
CMAKE_CXX_FLAGS_COVERAGE
|
||||||
|
CMAKE_C_FLAGS_COVERAGE
|
||||||
|
CMAKE_EXE_LINKER_FLAGS_COVERAGE
|
||||||
|
CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
|
||||||
|
|
||||||
|
IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage"))
|
||||||
|
MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" )
|
||||||
|
ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
|
||||||
|
|
||||||
|
|
||||||
|
# Param _targetname The name of new the custom make target
|
||||||
|
# Param _testrunner The name of the target which runs the tests.
|
||||||
|
# MUST return ZERO always, even on errors.
|
||||||
|
# If not, no coverage report will be created!
|
||||||
|
# Param _outputname lcov output is generated as _outputname.info
|
||||||
|
# HTML report is generated in _outputname/index.html
|
||||||
|
# Optional fourth parameter is passed as arguments to _testrunner
|
||||||
|
# Pass them in list form, e.g.: "-j;2" for -j 2
|
||||||
|
FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname)
|
||||||
|
|
||||||
|
IF(NOT LCOV_PATH)
|
||||||
|
MESSAGE(FATAL_ERROR "lcov not found! Aborting...")
|
||||||
|
ENDIF() # NOT LCOV_PATH
|
||||||
|
|
||||||
|
IF(NOT GENHTML_PATH)
|
||||||
|
MESSAGE(FATAL_ERROR "genhtml not found! Aborting...")
|
||||||
|
ENDIF() # NOT GENHTML_PATH
|
||||||
|
|
||||||
|
# Setup target
|
||||||
|
ADD_CUSTOM_TARGET(${_targetname}
|
||||||
|
|
||||||
|
# Cleanup lcov
|
||||||
|
${LCOV_PATH} --directory . --zerocounters
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
COMMAND ${_testrunner} ${ARGV3}
|
||||||
|
|
||||||
|
# Capturing lcov counters and generating report
|
||||||
|
COMMAND ${LCOV_PATH} --directory . --capture --output-file ${_outputname}.info
|
||||||
|
COMMAND ${LCOV_PATH} --remove ${_outputname}.info 'tests/*' '/usr/*' --output-file ${_outputname}.info.cleaned
|
||||||
|
COMMAND ${GENHTML_PATH} -o ${_outputname} ${_outputname}.info.cleaned
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E remove ${_outputname}.info ${_outputname}.info.cleaned
|
||||||
|
|
||||||
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Show info where to find the report
|
||||||
|
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
|
||||||
|
COMMAND ;
|
||||||
|
COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report."
|
||||||
|
)
|
||||||
|
|
||||||
|
ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE
|
||||||
|
|
||||||
|
# Param _targetname The name of new the custom make target
|
||||||
|
# Param _testrunner The name of the target which runs the tests
|
||||||
|
# Param _outputname cobertura output is generated as _outputname.xml
|
||||||
|
# Optional fourth parameter is passed as arguments to _testrunner
|
||||||
|
# Pass them in list form, e.g.: "-j;2" for -j 2
|
||||||
|
FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname)
|
||||||
|
|
||||||
|
IF(NOT PYTHON_EXECUTABLE)
|
||||||
|
MESSAGE(FATAL_ERROR "Python not found! Aborting...")
|
||||||
|
ENDIF() # NOT PYTHON_EXECUTABLE
|
||||||
|
|
||||||
|
IF(NOT GCOVR_PATH)
|
||||||
|
MESSAGE(FATAL_ERROR "gcovr not found! Aborting...")
|
||||||
|
ENDIF() # NOT GCOVR_PATH
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(${_targetname}
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
${_testrunner} ${ARGV3}
|
||||||
|
|
||||||
|
# Running gcovr
|
||||||
|
COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml
|
||||||
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
COMMENT "Running gcovr to produce Cobertura code coverage report."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Show info where to find the report
|
||||||
|
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
|
||||||
|
COMMAND ;
|
||||||
|
COMMENT "Cobertura code coverage report saved in ${_outputname}.xml."
|
||||||
|
)
|
||||||
|
|
||||||
|
ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA
|
23
lib/cmake-coverage/LICENSE
Normal file
23
lib/cmake-coverage/LICENSE
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person or organization
|
||||||
|
obtaining a copy of the software and accompanying documentation covered by
|
||||||
|
this license (the "Software") to use, reproduce, display, distribute,
|
||||||
|
execute, and transmit the Software, and to prepare derivative works of the
|
||||||
|
Software, and to permit third-parties to whom the Software is furnished to
|
||||||
|
do so, all subject to the following:
|
||||||
|
|
||||||
|
The copyright notices in the Software and this entire statement, including
|
||||||
|
the above license grant, this restriction and the following disclaimer,
|
||||||
|
must be included in all copies of the Software, in whole or in part, and
|
||||||
|
all derivative works of the Software, unless such copies or derivative
|
||||||
|
works are solely in the form of machine-executable object code generated by
|
||||||
|
a source language processor.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||||
|
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||||
|
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
15
tests/ChunkBuffer/Coordinates.cpp
Normal file
15
tests/ChunkBuffer/Coordinates.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
#include "TestGlobals.h"
|
||||||
|
#include "ChunkBuffer.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
cChunkBuffer buffer;
|
||||||
|
buffer.SetBlock(0,0,0, 0xAB);
|
||||||
|
assert(buffer.GetBlock(0,0,0) == 0xAB);
|
||||||
|
buffer.SetMeta(0,16,0, 0xC);
|
||||||
|
assert(buffer.GetMeta(0,16,0) == 0xC);
|
||||||
|
return 0;
|
||||||
|
}
|
136
tests/TestGlobals.h
Normal file
136
tests/TestGlobals.h
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstdarg>
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
|
||||||
|
// Compiler-dependent stuff:
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
// MSVC produces warning C4481 on the override keyword usage, so disable the warning altogether
|
||||||
|
#pragma warning(disable:4481)
|
||||||
|
|
||||||
|
// Disable some warnings that we don't care about:
|
||||||
|
#pragma warning(disable:4100) // Unreferenced formal parameter
|
||||||
|
|
||||||
|
// Useful warnings from warning level 4:
|
||||||
|
#pragma warning(3 : 4127) // Conditional expression is constant
|
||||||
|
#pragma warning(3 : 4189) // Local variable is initialized but not referenced
|
||||||
|
#pragma warning(3 : 4245) // Conversion from 'type1' to 'type2', signed/unsigned mismatch
|
||||||
|
#pragma warning(3 : 4310) // Cast truncates constant value
|
||||||
|
#pragma warning(3 : 4389) // Signed/unsigned mismatch
|
||||||
|
#pragma warning(3 : 4505) // Unreferenced local function has been removed
|
||||||
|
#pragma warning(3 : 4701) // Potentially unitialized local variable used
|
||||||
|
#pragma warning(3 : 4702) // Unreachable code
|
||||||
|
#pragma warning(3 : 4706) // Assignment within conditional expression
|
||||||
|
|
||||||
|
// Disabling this warning, because we know what we're doing when we're doing this:
|
||||||
|
#pragma warning(disable: 4355) // 'this' used in initializer list
|
||||||
|
|
||||||
|
// Disabled because it's useless:
|
||||||
|
#pragma warning(disable: 4512) // 'class': assignment operator could not be generated - reported for each class that has a reference-type member
|
||||||
|
|
||||||
|
// 2014_01_06 xoft: Disabled this warning because MSVC is stupid and reports it in obviously wrong places
|
||||||
|
// #pragma warning(3 : 4244) // Conversion from 'type1' to 'type2', possible loss of data
|
||||||
|
|
||||||
|
#define OBSOLETE __declspec(deprecated)
|
||||||
|
|
||||||
|
// No alignment needed in MSVC
|
||||||
|
#define ALIGN_8
|
||||||
|
#define ALIGN_16
|
||||||
|
|
||||||
|
#define FORMATSTRING(formatIndex, va_argsIndex)
|
||||||
|
|
||||||
|
// MSVC has its own custom version of zu format
|
||||||
|
#define SIZE_T_FMT "%Iu"
|
||||||
|
#define SIZE_T_FMT_PRECISION(x) "%" #x "Iu"
|
||||||
|
#define SIZE_T_FMT_HEX "%Ix"
|
||||||
|
|
||||||
|
#define NORETURN __declspec(noreturn)
|
||||||
|
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
|
||||||
|
// TODO: Can GCC explicitly mark classes as abstract (no instances can be created)?
|
||||||
|
#define abstract
|
||||||
|
|
||||||
|
// override is part of c++11
|
||||||
|
#if __cplusplus < 201103L
|
||||||
|
#define override
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define OBSOLETE __attribute__((deprecated))
|
||||||
|
|
||||||
|
#define ALIGN_8 __attribute__((aligned(8)))
|
||||||
|
#define ALIGN_16 __attribute__((aligned(16)))
|
||||||
|
|
||||||
|
// Some portability macros :)
|
||||||
|
#define stricmp strcasecmp
|
||||||
|
|
||||||
|
#define FORMATSTRING(formatIndex, va_argsIndex) __attribute__((format (printf, formatIndex, va_argsIndex)))
|
||||||
|
|
||||||
|
#define SIZE_T_FMT "%zu"
|
||||||
|
#define SIZE_T_FMT_PRECISION(x) "%" #x "zu"
|
||||||
|
#define SIZE_T_FMT_HEX "%zx"
|
||||||
|
|
||||||
|
#define NORETURN __attribute((__noreturn__))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error "You are using an unsupported compiler, you might need to #define some stuff here for your compiler"
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Copy and uncomment this into another #elif section based on your compiler identification
|
||||||
|
|
||||||
|
// Explicitly mark classes as abstract (no instances can be created)
|
||||||
|
#define abstract
|
||||||
|
|
||||||
|
// Mark virtual methods as overriding (forcing them to have a virtual function of the same signature in the base class)
|
||||||
|
#define override
|
||||||
|
|
||||||
|
// Mark functions as obsolete, so that their usage results in a compile-time warning
|
||||||
|
#define OBSOLETE
|
||||||
|
|
||||||
|
// Mark types / variables for alignment. Do the platforms need it?
|
||||||
|
#define ALIGN_8
|
||||||
|
#define ALIGN_16
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Integral types with predefined sizes:
|
||||||
|
typedef long long Int64;
|
||||||
|
typedef int Int32;
|
||||||
|
typedef short Int16;
|
||||||
|
|
||||||
|
typedef unsigned long long UInt64;
|
||||||
|
typedef unsigned int UInt32;
|
||||||
|
typedef unsigned short UInt16;
|
||||||
|
|
||||||
|
typedef unsigned char Byte;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define ASSERT(x) assert(x)
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef TOLUA_TEMPLATE_BIND
|
||||||
|
#define TOLUA_TEMPLATE_BIND(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// A macro that is used to mark unused function parameters, to avoid pedantic warnings in gcc
|
||||||
|
#define UNUSED(X) (void)(X)
|
||||||
|
|
||||||
|
// Logging functions
|
||||||
|
void LOGERROR(const char* a_Format, ...) FORMATSTRING(1,2);
|
||||||
|
|
||||||
|
void LOGERROR(const char* a_Format, ...)
|
||||||
|
{
|
||||||
|
va_list argList;
|
||||||
|
va_start(argList, a_Format);
|
||||||
|
vprintf(a_Format, argList);
|
||||||
|
va_end(argList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
5
uploadCoverage.sh
Normal file
5
uploadCoverage.sh
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [TRAVIS_MCSERVER_BUILD_TYPE == "COVERAGE"] then
|
||||||
|
coveralls --exclude lib --exclude tests
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user