view CMakeLists.txt @ 76:8136057988bc

Fixes to automatic report generating system. A lot of new unittests.
author Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
date Sat, 16 Feb 2013 15:32:20 +0100
parents c9447697609f
children a827f3687c4a
line wrap: on
line source

PROJECT(DeDupe)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.4)

#INCLUDE(PrecompiledHeader.cmake)

OPTION(COVERAGE "Enable code coverage analysis" OFF)

IF(COVERAGE)
  SET(COVERAGE_FLAGS "--coverage")
ENDIF()

SET(ALL_TESTS)

MACRO(NEW_TEST file)
  STRING(REPLACE "/" "_" TARGET ${file})
  ADD_EXECUTABLE(${TARGET} ${file}.cpp ${TEST_SOURCES})
  ADD_TEST(${TARGET} ${TARGET})
  TARGET_LINK_LIBRARIES(${TARGET} ${QT_LIBRARIES} ${Boost_LIBRARIES}
  ${COVERAGE_FLAGS})

  ADD_CUSTOM_COMMAND(OUTPUT "BUILD_${TARGET}"
					     COMMAND "${CMAKE_COMMAND}"
                                       --build ${CMAKE_BINARY_DIR}
					     --target ${TARGET}
					     COMMENT "Building test ${TARGET}"
  )
  SET(BUILD_ALL_TESTS ${BUILD_ALL_TESTS} BUILD_${TARGET})

  SET(ALL_TESTS ${ALL_TESTS} RUN_${TARGET})
  ADD_CUSTOM_TARGET(RUN_${TARGET} ${CMAKE_BINARY_DIR}/${TARGET} --log_level=nothing --report_level=no
 				  DEPENDS zero_counters_test_with_base
  BUILD_${TARGET}
					     COMMENT "Running test ${TARGET}"

)

ENDMACRO()

SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake_Modules/")

SET(USE_HEADERS_FOR_BOOST_TEST OFF)

SET(Boost_USE_MULTITHREADED ON)
SET(Boost_USE_STATIC_RUNTIME OFF)
IF(USE_HEADERS_FOR_BOOST_TEST)
  SET(Boost_USE_STATIC_LIBS OFF)
  FIND_PACKAGE(Boost COMPONENTS filesystem system)
  ADD_DEFINITIONS( "-DBOOSTTEST_HEADER_INCLUDE" )
ELSE()
  SET(Boost_USE_STATIC_LIBS ON)
  FIND_PACKAGE(Boost COMPONENTS filesystem system test_exec_monitor)
ENDIF()
IF (Boost_FOUND)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
    ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()


FIND_PACKAGE(Qt4 COMPONENTS QtOpenGL QtXml QtSql REQUIRED)

FIND_PACKAGE(Sqlite3 REQUIRED)

INCLUDE(${QT_USE_FILE})
ADD_DEFINITIONS(${QT_DEFINITIONS})

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})


SET(CLASS_SOURCES
	BitArray.cpp
	BitDecoder.cpp
	ConfigurationProcessing.cpp
	DataController.cpp
	EditDistance.cpp
	Exception/IOException.cpp
	Exception/NoSuchValueException.cpp
	Exception/ValueExistsException.cpp
	Exception/InvalidDataException.cpp
	Exception/SQLException.cpp
	Exception/PermissionException.cpp
	FastBitDecoder.cpp
	FileDBLink.cpp
	HuffmanSet.cpp
	HuffmanString.cpp
	MemoryDBLink.cpp
	SqliteDBLink.cpp
)

SET(CLASS_HEADERS
	BitArray.hpp
	BitDecoder.hpp
	ConfigurationProcessing.hpp
	DataController.hpp
	EditDistance.hpp
	Exception/IOException.hpp
	FastBitDecoder.hpp
	FileDBLink.hpp
	MemoryDBLink.hpp
	RBTree.hpp
	SqliteDBLink.hpp
	UniqueString.hpp
)

SET(MOC_HEADERS
	DataController.hpp
)

# Returns the moc_xxx.cpp files in the foo_MOC_SRCS variable
QT4_WRAP_CPP(MOC_SOURCES ${MOC_HEADERS})

SET(SOURCES
	${CLASS_HEADERS}
	${CLASS_SOURCES}
	${MOC_SOURCES}
)

SET(TEST_SOURCES
	${CLASS_SOURCES}
	${MOC_SOURCES}
	TestDatabase.cpp
	TestFramework.cpp
)



ADD_DEFINITIONS("-Wall -Werror")

#Quiet clang, ccache combination
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
   ADD_DEFINITIONS("-Qunused-arguments")
ENDIF()

#Quiet some warnings in headers
ADD_DEFINITIONS("-Wno-self-assign")
ADD_DEFINITIONS("-Wno-unused-function")
ADD_DEFINITIONS("-Wno-unused-variable")

#Optimization level
#ADD_DEFINITIONS("-O3")
ADD_DEFINITIONS("-g2 -fno-inline")

ADD_DEFINITIONS(${COVERAGE_FLAGS})
SET(CMAKE_EXE_LINKER_FLAGS "${COVERAGE_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}")

ADD_EXECUTABLE(DeDupe Apps/DeDupe.cpp ${SOURCES} ${MOC_SOURCES})
TARGET_LINK_LIBRARIES(
	DeDupe
	${QT_LIBRARIES}
	${SQLITE3_LIBRARIES}
	${Boost_LIBRARIES}
)

ADD_EXECUTABLE(
	updateDeDupe
	Apps/updateDeDupe.cpp
	${SOURCES} ${MOC_SOURCES}
)
TARGET_LINK_LIBRARIES(
	updateDeDupe
	${QT_LIBRARIES}
	${SQLITE3_LIBRARIES}
	${Boost_LIBRARIES}
)

ENABLE_TESTING()
NEW_TEST(Exception/TestIOException)
NEW_TEST(Exception/TestInvalidDataException)
NEW_TEST(Exception/TestSQLException)
NEW_TEST(Exception/TestNoSuchValueException)
NEW_TEST(Exception/TestValueExistsException)
NEW_TEST(Exception/TestPermissionException)
NEW_TEST(TestBitArray)
NEW_TEST(TestSQLGenerator)
NEW_TEST(TestFileDBLink)
NEW_TEST(TestBitDecoder)
NEW_TEST(TestDBCache)
NEW_TEST(TestEditDistance)
NEW_TEST(TestFastBitDecoder)
NEW_TEST(TestHuffmanString)
NEW_TEST(TestRBTree)
NEW_TEST(TestMemoryDBLink)
NEW_TEST(TestSqliteDBLink)


#ADD_PRECOMPILED_HEADER(TestEditDistance TestFramework.hpp)

ADD_CUSTOM_COMMAND(OUTPUT build_tests COMMAND "${CMAKE_COMMAND}"
--build ${CMAKE_BINARY_DIR} --target all)

ADD_CUSTOM_TARGET(zero_counters_test_with_base
	lcov -q -z -d ${CMAKE_CURRENT_BINARY_DIR}
	DEPENDS ${BUILD_ALL_TESTS}
)

ADD_CUSTOM_COMMAND(OUTPUT test_with_base COMMAND
true
DEPENDS zero_counters_test_with_base ${ALL_TESTS}
					  COMMENT "All test have run"
)

ADD_CUSTOM_COMMAND(OUTPUT coverage_base_raw.info
					  COMMAND lcov --no-external
					  --capture --initial
					  --directory ${CMAKE_CURRENT_BINARY_DIR}
					  --base-directory ${CMAKE_CURRENT_SOURCE_DIR}
					  --output-file coverage_base_raw.info
)

ADD_CUSTOM_COMMAND(OUTPUT coverage_test.info
					  COMMAND lcov -q --no-external --capture
					  --directory ${CMAKE_CURRENT_BINARY_DIR}
					  --base-directory ${CMAKE_CURRENT_SOURCE_DIR}
					  --output-file
					  coverage_test.info
					  DEPENDS test_with_base
)

ADD_CUSTOM_COMMAND(OUTPUT coverage.preprocessed2
					  COMMAND lcov -q -r
					  coverage_test.info 'moc_*'
					  --output-file coverage.preprocessed2
					  DEPENDS coverage_test.info
					  COMMENT "Removing \"moc_\"-files" 
)


ADD_CUSTOM_COMMAND(OUTPUT coverage.preprocessed
					  COMMAND lcov -q -r
					  coverage.preprocessed2 'Test*'
					  --output-file coverage.preprocessed
					  DEPENDS
					  coverage.preprocessed2
					  COMMENT "Removing \"Test\"-files"
)


ADD_CUSTOM_TARGET(coverage_presentation genhtml -q
				    ${CMAKE_CURRENT_BINARY_DIR}/coverage.preprocessed
				    --output-directory
				    ${CMAKE_CURRENT_BINARY_DIR}/coverage_presentation 
				    DEPENDS
				    ${CMAKE_CURRENT_BINARY_DIR}/coverage.preprocessed
)

ADD_CUSTOM_TARGET(coverage_base
				    DEPENDS
				     ${CMAKE_CURRENT_BINARY_DIR}/coverage_base.info
)