Skip to content

Commit 8bea56a

Browse files
Merge pull request #81 from HerbertKoelman/142-setup-travis-ci
Setup Travis-CI
2 parents eade7bd + 8453906 commit 8bea56a

File tree

10 files changed

+251
-92
lines changed

10 files changed

+251
-92
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ compile_commands.json
7272
CTestTestfile.cmake
7373

7474
# layout
75+
.scannerwork
7576
doxyfile
7677
*.tar
7778
sonar-project.properties

.travis.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# autho: Herbert Koelman
2+
# created on: 1/6/2019
3+
os: linux
4+
5+
# use Ubuntu Xenial (version 16)
6+
# This comes with cmake 3.11 which is required to build GoogleTest
7+
dist: xenial
8+
language: cpp
9+
compiler: gcc
10+
11+
env:
12+
CODECOV_TOKEN="73b7985a-7b2d-40fa-a025-65906959f9c2"
13+
14+
# Run travis on these branches only...
15+
branches:
16+
only:
17+
- master
18+
- develop
19+
20+
addons:
21+
sonarcloud:
22+
organization: "herbertkoelman-github"
23+
24+
apt:
25+
packages:
26+
- doxygen
27+
- graphviz
28+
29+
matrix:
30+
include:
31+
- name: coverage jobs
32+
env:
33+
BUILD_DIRECTORY=cmake-gcov-build
34+
CMAKE_COMMAND_LINE_ARGS="-DGCOV=yes"
35+
MAKE_TARGETS="all test"
36+
- name: sonar code quality checks
37+
env:
38+
BUILD_DIRECTORY=cmake-sonar-build
39+
CMAKE_COMMAND_LINE_ARGS="-DSONAR=yes"
40+
MAKE_TARGETS="all test code-quality"
41+
- name: default
42+
env:
43+
BUILD_DIRECTORY=cmake-default-build
44+
CMAKE_COMMAND_LINE_ARGS="-DCMAKE_BUILD_TYPE=Release"
45+
MAKE_TARGETS="all doxygen package"
46+
47+
script:
48+
- mkdir $BUILD_DIRECTORY && cd $BUILD_DIRECTORY && cmake $CMAKE_COMMAND_LINE_ARGS .. && make $MAKE_TARGETS
49+
50+
after_success:
51+
# create gcov files
52+
- find ./CMakeFiles/ -type f -name "*.gcno" -exec gcov {} -m \;
53+
# upload data to codecav
54+
- bash <(curl -s https://codecov.io/bash)

CMakeLists.txt

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,24 @@ project(
1010
DESCRIPTION "Simple C++ wrapper to pthread functions (${GIT_LOG})")
1111

1212
option(BUILD_TESTS "enable/disable tests (default is enabled)" ON)
13-
set(CMAKE_CXX_STANDARD 11)
13+
option(GCOV "Activate GCOV options")
1414

15-
configure_file(src/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/src/config.h)
15+
if ( GCOV )
16+
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
17+
message(STATUS "Setting GCOV compiler options")
18+
add_compile_options(--coverage)
19+
else()
20+
message(SEND_ERROR "The GCOV option is only supported when using GNU...")
21+
endif()
22+
endif()
23+
24+
find_package(GTestExt PATHS cmake)
1625

17-
# this works because we've extended CMAKE_MODULE_PATH
18-
# uncomment if you have a conanfile.txt and run 'conan install ...' include(conan_paths)
19-
#find_package(Git CONFIG)
20-
#find_package(Conan)
26+
# This part MUST be executed before the loading of the CMake package
27+
set(SONAR_PROPERTIES_FILE ${CMAKE_CURRENT_BINARY_DIR}/sonar-project.properties)
28+
message(STATUS "Generating SONAR properties file ${SONAR_PROPERTIES_FILE}")
29+
configure_file(${CMAKE_CURRENT_LIST_DIR}/sonar-project.properties.in ${SONAR_PROPERTIES_FILE})
30+
find_package(SonarCloud PATHS cmake)
2131

2232
# main targets --------------------------------------------------
2333
#
@@ -35,6 +45,8 @@ else()
3545
endif()
3646
endif()
3747

48+
configure_file(src/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/src/config.h)
49+
3850
# project's public headers
3951
include_directories(include src)
4052

@@ -48,6 +60,9 @@ set(PTHREAD_SOURCE_CODE
4860
src/thread.cpp
4961
src/mutex.cpp
5062
)
63+
64+
set(CMAKE_CXX_STANDARD 11)
65+
5166
add_library(cpp-pthread-static STATIC ${PTHREAD_SOURCE_CODE})
5267
target_link_libraries(cpp-pthread-static pthread)
5368
set_target_properties(cpp-pthread-static PROPERTIES OUTPUT_NAME cpp-pthread)
@@ -60,23 +75,21 @@ set_target_properties(cpp-pthread-shared PROPERTIES OUTPUT_NAME cpp-pthread)
6075
# Testing -------------------------------------------------------
6176
#
6277

63-
# Load and compile GTest
64-
# Aliases: GTest::GTest, GTest::gtest_main, GMock::GMock
65-
find_package(GTest PATHS cmake)
66-
if (GTest_FOUND)
78+
if (GTestExt_FOUND AND BUILD_TESTS)
6779
enable_testing()
80+
message(STATUS "Adding project's unit tests (in ./tests)...")
6881
add_subdirectory(tests)
6982
endif()
7083

7184
# doxygen -------------------------------------------------------
7285
#
7386
find_package(Doxygen REQUIRED dot OPTIONAL_COMPONENTS mscgen dia)
7487
if (Doxygen_FOUND)
75-
# set(DOXYGEN_OUTPUT_DIRECTORY doxygen)
76-
# set(DOXYGEN_GENERATE_MAN YES)
77-
# set(DOXYGEN_GENERATE_HTML YES)
88+
89+
set(DOXYGEN_PROJECT_NUMBER ${CPP_PTHREAD_VERSION})
7890
set(DOXYGEN_EXAMPLE_PATH tests)
79-
set(DOXYGEN_PROJECT_BRIEF "Simple C++ wrapper to pthread functions.")
91+
set(DOXYGEN_EXTRACT_ALL yes)
92+
set(DOXYGEN_PROJECT_BRIEF ${PROJECT_DESCRIPTION})
8093
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md")
8194
doxygen_add_docs(doxygen README.md src include COMMENT "generate on-line documentation")
8295

@@ -86,7 +99,7 @@ endif()
8699
#
87100
install( TARGETS cpp-pthread-static cpp-pthread-shared DESTINATION lib )
88101
install( DIRECTORY include DESTINATION include COMPONENT Devel)
89-
# install( DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc)
102+
install( DIRECTORY ${PROJECT_BINARY_DIR}/html/ DESTINATION doc/cpp-pthread COMPONENT Documentation)
90103

91104
# CPACK ---------------------------------------------------------
92105
#
@@ -99,7 +112,3 @@ set(CPACK_PACKAGE_VENDOR "Urbix Software")
99112
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
100113

101114
include(CPack)
102-
103-
# misc ------------------------------------------------------------
104-
#
105-
find_program(RM rm)

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
### What it does
22

3+
[![Build Status](https://travis-ci.com/HerbertKoelman/cpp-pthread.svg?branch=master)](https://travis-ci.com/HerbertKoelman/cpp-pthread)
4+
35
Some C/C++ compilers are not implementing all of C++11 and above standard, it's often lacking the concurrency features that the standard brings. These compilers will at some point be updated. I was therefore looking for a way to reduce the effort of switching from a specific implementation to the C++11 standard one.
46

57
This projetc is the resulting code.

cmake/GTestConfig.cmake

Lines changed: 0 additions & 46 deletions
This file was deleted.

cmake/GTestExtConfig.cmake

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
set(BUILD_TESTS True CACHE BOOL "if set, then GoogleTest is download and built.")
2+
3+
if (BUILD_TESTS)
4+
message(STATUS "Download and build Google Test (GTest)...")
5+
6+
set(__GTEST_DOWNLOAD ${CMAKE_BINARY_DIR}/googletest-download)
7+
file(MAKE_DIRECTORY ${__GTEST_DOWNLOAD})
8+
if (EXISTS ${__GTEST_DOWNLOAD})
9+
10+
option(INSTALL_GMOCK "Install Googletest's GMock?" OFF)
11+
option(INSTALL_GTEST "Install Googletest's GTest?" OFF)
12+
13+
message(STATUS "Generating GoogleTest CMakeLists.txt")
14+
configure_file(${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in ${__GTEST_DOWNLOAD}/CMakeLists.txt)
15+
16+
message(STATUS "Setup build for GoogleTest")
17+
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
18+
WORKING_DIRECTORY "${__GTEST_DOWNLOAD}" )
19+
20+
message(STATUS "Building GoogleTest")
21+
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
22+
WORKING_DIRECTORY "${__GTEST_DOWNLOAD}" )
23+
24+
# Prevent GoogleTest from overriding our compiler/linker options
25+
# when building with Visual Studio
26+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
27+
28+
# Add googletest directly to our build. This adds
29+
# the following targets: gtest, gtest_main, gmock
30+
# and gmock_main
31+
add_subdirectory("${CMAKE_BINARY_DIR}/googletest-src"
32+
"${CMAKE_BINARY_DIR}/googletest-build")
33+
34+
# The gtest/gmock targets carry header search path
35+
# dependencies automatically when using CMake 2.8.11 or
36+
# later. Otherwise we have to add them here ourselves.
37+
if(CMAKE_VERSION VERSION_LESS 2.8.11)
38+
message(STATUS "GoogleTest include directory ${gtest_SOURCE_DIR}/include ${gmock_SOURCE_DIR}/include)")
39+
include_directories("${gtest_SOURCE_DIR}/include"
40+
"${gmock_SOURCE_DIR}/include")
41+
endif()
42+
43+
add_library(GTest::GTest ALIAS gtest)
44+
add_library(GTest::gtest_main ALIAS gtest_main)
45+
46+
add_library(GMock::GMock ALIAS gmock)
47+
add_library(GMock::gmock_main ALIAS gmock_main)
48+
49+
message(STATUS "Defined GoogleTest aliases: GTest::GTest, GTest::gtest_main, GMock::GMock")
50+
51+
else()
52+
message(STATUS "Failed to create GoogleTest download directory. Make sure you have Internet access or use -DBUILD_TESTS=off")
53+
endif()
54+
else()
55+
message(STATUS "Disabled unit testing (BUILD_TESTS is ${BUILD_TESTS})")
56+
endif()

cmake/SonarCloudConfig.cmake

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
message(STATUS "Loading SonarCloud module found here: ${CMAKE_CURRENT_LIST_DIR}")
2+
3+
option(SONAR "Generate sonar setup" ) # default is OFF
4+
5+
set(SONAR_CLOUD_HOME https://sonarcloud.io CACHE STRING "Sonar cloud home URL(default is https://sonarcloud.io)")
6+
set(SONAR_PROJECT_KEY ${PROJECT_NAME} CACHE STRING "Sonar project key property (default is ${PROJECT_NAME})")
7+
set(SONAR_ORGANIZATION CACHE STRING "Organization (default is empty)")
8+
set(SONAR_ACCESS_TOKEN CACHE STRING "Access/login token (default is empty)")
9+
10+
set(SONAR_WRAPPER_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/bw-output CACHE STRING "Sonar C/C++ wrapper output directory (default is bw-output)")
11+
12+
set(SONAR_PROPERTIES_FILE ${SONAR_PROPERTIES_FILE} CACHE STRING "If file exists, it will used as is (default is empty)")
13+
14+
if ( SONAR )
15+
16+
find_program(SONAR_SCANNER sonar-scanner)
17+
18+
if ( SONAR_SCANNER )
19+
20+
if(NOT EXISTS ${SONAR_PROPERTIES_FILE} )
21+
message(STATUS "Generating SONAR properties file (${CMAKE_CURRENT_BINARY_DIR}/sonar-project.properties)")
22+
configure_file(${CMAKE_CURRENT_LIST_DIR}/sonar-project.properties.in sonar-project.properties)
23+
set(SONAR_PROPERTIES_FILE ./sonar-project.properties)
24+
else()
25+
message(STATUS "Sonar scanner property file was provided (${SONAR_PROPERTIES_FILE})")
26+
endif()
27+
28+
add_custom_target( code-quality
29+
COMMAND ${SONAR_SCANNER} -Dproject.settings=${SONAR_PROPERTIES_FILE}
30+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
31+
COMMENT "run ${SONAR_SCANNER} -Dproject.settings=${SONAR_PROPERTIES_FILE} "
32+
)
33+
message(STATUS "Added custom target [code-quality]...")
34+
35+
find_program(SONAR_BUILD_WRAPPER build-wrapper-linux-x86-64)
36+
if ( SONAR_BUILD_WRAPPER )
37+
add_custom_target( build-wrapper
38+
COMMAND ${SONAR_BUILD_WRAPPER} --out-dir ${SONAR_WRAPPER_OUTPUT_DIR} make clean all
39+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
40+
COMMENT "run SONAR's ${SONAR_BUILD_WRAPPER}"
41+
)
42+
message(STATUS "Added custom target [build-wrapper]...")
43+
add_dependencies(code-quality build-wrapper)
44+
endif()
45+
46+
find_program(SONAR_GCOV gcov)
47+
if(SONAR_GCOV)
48+
add_custom_target( sonar-gcov-report
49+
COMMAND find ./CMakeFiles/ -type f -name "*.gcno" -exec ${SONAR_GCOV} {} -m \; > /dev/null 2>&1
50+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
51+
COMMENT "Built sonar GCOV report (${SONAR_GCOV})"
52+
VERBATIM
53+
)
54+
message(STATUS "Added custom target [sonar-gcov-report]...")
55+
add_dependencies(code-quality sonar-gcov-report)
56+
endif()
57+
58+
else()
59+
message(SEND_ERROR "Failed to find the program [sonar_scanner], make sure sonar tools are installed.")
60+
endif()
61+
62+
#else()
63+
# message(WARNING "SONAR cloud build is turned off, use -DSONAR=yes to turn in ON")
64+
endif()
65+

cmake/sonar-project.properties.in

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Project Configuration @PROJECT_NAME@ version @PROJECT_VERSION@
2+
sonar.verbose=false
3+
sonar.projectBaseDir=@CMAKE_SOURCE_DIR@
4+
sonar.projectKey=@SONAR_PROJECT_KEY@
5+
sonar.organization=@SONAR_ORGANIZATION@
6+
sonar.links.homepage=@SONAR_PROJECT_HOME@
7+
sonar.host.url=@SONAR_CLOUD_HOME@
8+
sonar.login=@SONAR_ACCESS_TOKEN@
9+
sonar.cfamily.build-wrapper-output=@SONAR_WRAPPER_OUTPUT_DIR@
10+
sonar.projectName=@PROJECT_NAME@
11+
sonar.projectVersion=@PROJECT_VERSION@
12+
sonar.sources=src,include

0 commit comments

Comments
 (0)