210 lines
5.8 KiB
CMake
210 lines
5.8 KiB
CMake
|
# Project
|
||
|
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
|
||
|
project(rapidcsv VERSION 1.0 LANGUAGES CXX)
|
||
|
set (CMAKE_CXX_STANDARD 11)
|
||
|
if(MSVC)
|
||
|
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||
|
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||
|
else()
|
||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||
|
endif()
|
||
|
else()
|
||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra -Wpedantic -Wshadow -Wpointer-arith \
|
||
|
-Wcast-qual -Wno-missing-braces -Wswitch-default -Wcast-align \
|
||
|
-Wunreachable-code -Wundef -Wuninitialized -Wold-style-cast")
|
||
|
endif()
|
||
|
|
||
|
# Build type
|
||
|
set(DEFAULT_BUILD_TYPE "Release")
|
||
|
if((EXISTS "${CMAKE_SOURCE_DIR}/.svn") OR (EXISTS "${CMAKE_SOURCE_DIR}/.git"))
|
||
|
set(DEFAULT_BUILD_TYPE "Debug")
|
||
|
endif()
|
||
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||
|
message(STATUS "Using build type '${DEFAULT_BUILD_TYPE}' (default).")
|
||
|
set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}")
|
||
|
else()
|
||
|
message(STATUS "Using build type '${CMAKE_BUILD_TYPE}'.")
|
||
|
endif()
|
||
|
|
||
|
# Library
|
||
|
add_library(rapidcsv INTERFACE)
|
||
|
target_include_directories(rapidcsv INTERFACE src)
|
||
|
|
||
|
# Ccache
|
||
|
find_program(CCACHE_PROGRAM ccache)
|
||
|
if(CCACHE_PROGRAM)
|
||
|
message(STATUS "Found ccache")
|
||
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
|
||
|
endif()
|
||
|
|
||
|
# Tests
|
||
|
option(RAPIDCSV_BUILD_TESTS "Build tests" OFF)
|
||
|
message(STATUS "Build tests: ${RAPIDCSV_BUILD_TESTS}")
|
||
|
if(RAPIDCSV_BUILD_TESTS)
|
||
|
|
||
|
# Test init
|
||
|
include(CTest)
|
||
|
enable_testing()
|
||
|
|
||
|
# Enable codecvt tests if supported
|
||
|
if (CMAKE_CXX_STANDARD VERSION_LESS "17")
|
||
|
include(CheckIncludeFileCXX)
|
||
|
check_include_file_cxx(codecvt HAS_CODECVT)
|
||
|
if(HAS_CODECVT)
|
||
|
target_compile_definitions(rapidcsv INTERFACE HAS_CODECVT)
|
||
|
endif()
|
||
|
else()
|
||
|
message(STATUS "Skip check for C++ include codecvt - C++${CMAKE_CXX_STANDARD}")
|
||
|
endif()
|
||
|
|
||
|
# Test macro add_perf_test
|
||
|
macro(add_perf_test testname)
|
||
|
if(CMAKE_BUILD_TYPE MATCHES "Release")
|
||
|
FILE(GLOB sources tests/${testname}*.cpp)
|
||
|
add_executable(${testname} ${sources})
|
||
|
add_test(NAME ${testname} COMMAND "${PROJECT_BINARY_DIR}/${testname}")
|
||
|
target_link_libraries(${testname} PUBLIC rapidcsv)
|
||
|
endif()
|
||
|
endmacro(add_perf_test)
|
||
|
|
||
|
# Test macro add_unit_test
|
||
|
macro(add_unit_test testname)
|
||
|
if(CMAKE_BUILD_TYPE MATCHES "Debug")
|
||
|
FILE(GLOB sources tests/${testname}*.cpp)
|
||
|
add_executable(${testname} ${sources})
|
||
|
add_test(NAME ${testname} COMMAND "${PROJECT_BINARY_DIR}/${testname}")
|
||
|
target_link_libraries(${testname} PUBLIC rapidcsv)
|
||
|
endif()
|
||
|
endmacro(add_unit_test)
|
||
|
|
||
|
# Unit tests
|
||
|
add_unit_test(test001)
|
||
|
add_unit_test(test002)
|
||
|
add_unit_test(test003)
|
||
|
add_unit_test(test004)
|
||
|
add_unit_test(test005)
|
||
|
add_unit_test(test006)
|
||
|
add_unit_test(test007)
|
||
|
add_unit_test(test008)
|
||
|
add_unit_test(test009)
|
||
|
add_unit_test(test010)
|
||
|
add_unit_test(test011)
|
||
|
add_unit_test(test012)
|
||
|
add_unit_test(test013)
|
||
|
add_unit_test(test014)
|
||
|
add_unit_test(test015)
|
||
|
add_unit_test(test016)
|
||
|
add_unit_test(test017)
|
||
|
add_unit_test(test018)
|
||
|
add_unit_test(test019)
|
||
|
add_unit_test(test020)
|
||
|
add_unit_test(test021)
|
||
|
add_unit_test(test022)
|
||
|
add_unit_test(test023)
|
||
|
add_unit_test(test024)
|
||
|
add_unit_test(test025)
|
||
|
add_unit_test(test026)
|
||
|
add_unit_test(test027)
|
||
|
add_unit_test(test028)
|
||
|
add_unit_test(test029)
|
||
|
add_unit_test(test030)
|
||
|
add_unit_test(test031)
|
||
|
add_unit_test(test032)
|
||
|
add_unit_test(test033)
|
||
|
add_unit_test(test034)
|
||
|
add_unit_test(test035)
|
||
|
add_unit_test(test036)
|
||
|
add_unit_test(test037)
|
||
|
add_unit_test(test038)
|
||
|
add_unit_test(test039)
|
||
|
add_unit_test(test040)
|
||
|
add_unit_test(test041)
|
||
|
add_unit_test(test042)
|
||
|
add_unit_test(test043)
|
||
|
add_unit_test(test044)
|
||
|
add_unit_test(test045)
|
||
|
add_unit_test(test046)
|
||
|
add_unit_test(test047)
|
||
|
add_unit_test(test048)
|
||
|
add_unit_test(test049)
|
||
|
add_unit_test(test050)
|
||
|
add_unit_test(test051)
|
||
|
add_unit_test(test052)
|
||
|
add_unit_test(test053)
|
||
|
add_unit_test(test054)
|
||
|
add_unit_test(test055)
|
||
|
add_unit_test(test056)
|
||
|
if(HAS_CODECVT)
|
||
|
add_unit_test(test057)
|
||
|
add_unit_test(test058)
|
||
|
add_unit_test(test059)
|
||
|
add_unit_test(test060)
|
||
|
endif()
|
||
|
add_unit_test(test061)
|
||
|
add_unit_test(test062)
|
||
|
add_unit_test(test063)
|
||
|
add_unit_test(test064)
|
||
|
add_unit_test(test065)
|
||
|
add_unit_test(test066)
|
||
|
add_unit_test(test067)
|
||
|
add_unit_test(test068)
|
||
|
add_unit_test(test069)
|
||
|
add_unit_test(test070)
|
||
|
add_unit_test(test071)
|
||
|
add_unit_test(test072)
|
||
|
add_unit_test(test073)
|
||
|
add_unit_test(test074)
|
||
|
add_unit_test(test075)
|
||
|
add_unit_test(test076)
|
||
|
add_unit_test(test077)
|
||
|
add_unit_test(test078)
|
||
|
add_unit_test(test079)
|
||
|
add_unit_test(test080)
|
||
|
add_unit_test(test081)
|
||
|
add_unit_test(test082)
|
||
|
add_unit_test(test083)
|
||
|
add_unit_test(test084)
|
||
|
if(HAS_CODECVT)
|
||
|
add_unit_test(test085)
|
||
|
endif()
|
||
|
add_unit_test(test086)
|
||
|
|
||
|
# perf tests
|
||
|
add_perf_test(ptest001)
|
||
|
add_perf_test(ptest002)
|
||
|
|
||
|
# Examples
|
||
|
# Test macro add_example
|
||
|
macro(add_example testname)
|
||
|
if(CMAKE_BUILD_TYPE MATCHES "Debug")
|
||
|
add_executable(${testname} examples/${testname}.cpp)
|
||
|
target_link_libraries(${testname} PUBLIC rapidcsv)
|
||
|
endif()
|
||
|
endmacro(add_example)
|
||
|
|
||
|
add_example(ex001 examples/ex001.cpp)
|
||
|
add_example(ex002 examples/ex002.cpp)
|
||
|
add_example(ex003 examples/ex003.cpp)
|
||
|
add_example(ex004 examples/ex004.cpp)
|
||
|
add_example(ex005 examples/ex005.cpp)
|
||
|
add_example(ex006 examples/ex006.cpp)
|
||
|
add_example(ex007 examples/ex007.cpp)
|
||
|
add_example(ex008 examples/ex008.cpp)
|
||
|
add_example(ex009 examples/ex009.cpp)
|
||
|
|
||
|
endif()
|
||
|
|
||
|
# Install / Uninstall targets for standalone rapidcsv build
|
||
|
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
||
|
message(STATUS "Install/uninstall targets enabled.")
|
||
|
|
||
|
# Install
|
||
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/rapidcsv.h DESTINATION include)
|
||
|
|
||
|
# Uninstall
|
||
|
add_custom_target(uninstall COMMAND "${CMAKE_COMMAND}" -E remove "${CMAKE_INSTALL_PREFIX}/include/rapidcsv.h"
|
||
|
)
|
||
|
else()
|
||
|
message(STATUS "Install/uninstall targets disabled.")
|
||
|
endif()
|