diff --git a/CMakeLists.txt b/CMakeLists.txt index 41d37183..a71af007 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,4 @@ -cmake_minimum_required (VERSION 2.6) - - -# ==================================== -# project name and version -# ==================================== +cmake_minimum_required (VERSION 2.8.4) project (kcov) set (PROJECT_VERSION_MAJOR 35) @@ -12,10 +7,10 @@ set (PROJECT_VERSION_PATCH 0) set (PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") -if(POLICY CMP0042) +if (POLICY CMP0042) # MACOSX_RPATH is enabled by default. cmake_policy (SET CMP0042 NEW) -endif() +endif (POLICY CMP0042) if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set (CMAKE_BUILD_TYPE Release CACHE STRING @@ -32,20 +27,21 @@ add_definitions(-DPACKAGE_VERSION) # ==================================== list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -set (SPECIFY_RPATH OFF CACHE BOOL "Specify RPATH for installed executables") +option (SPECIFY_RPATH "Specify RPATH for installed executables" OFF) +mark_as_advanced (SPECIFY_RPATH) # ==================================== # default install paths for targets # ==================================== include (CPack.local.cmake OPTIONAL) -set (INSTALL_TARGETS_PATH RUNTIME DESTINATION bin - LIBRARY DESTINATION lib${LIB_SUFFIX} - ARCHIVE DESTINATION lib${LIB_SUFFIX}) -if (NOT MAN_DIR) - set (MAN_DIR share/man) -endif (NOT MAN_DIR) -set (INSTALL_MAN_PATH DESTINATION ${MAN_DIR}) +set (KCOV_INSTALL_BINDIR "bin" CACHE STRING "Install destination for user executables") +set (KCOV_INSTALL_DOCDIR "share/doc/kcov" CACHE STRING "Install destination for documentation") +set (KCOV_INSTALL_MANDIR "share/man" CACHE STRING "Install destination for man documentation") +mark_as_advanced (KCOV_INSTALL_BINDIR KCOV_INSTALL_DOCDIR KCOV_INSTALL_MANDIR) + +install (FILES ChangeLog COPYING COPYING.externals + DESTINATION "${KCOV_INSTALL_DOCDIR}") # ==================================== # build all diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 950a3498..af6a8316 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,3 +1 @@ -file (GLOB man_files_1 *.1) - -install (FILES ${man_files_1} ${INSTALL_MAN_PATH}/man1) +install (FILES kcov.1 DESTINATION "${KCOV_INSTALL_MANDIR}/man1" ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e01f533f..ffeb6a3d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,16 +1,3 @@ -cmake_minimum_required (VERSION 2.6) - -# ==================================== -# project name and version -# ==================================== -project (kcov) -list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake") - -if(POLICY CMP0042) - # MACOSX_RPATH is enabled by default. - cmake_policy (SET CMP0042 NEW) -endif() - find_package (Threads) find_package (Bfd) @@ -21,29 +8,59 @@ message(STATUS "Target architectures: ${CMAKE_TARGET_ARCHITECTURES}") find_package (ZLIB REQUIRED) find_package (CURL) +find_library (DL_LIBRARY NAMES dl) +if (DL_LIBRARY) + message (STATUS "Found DL: ${DL_LIBRARY}") +else (DL_LIBRARY) + message (FATAL_ERROR "Could NOT find DL") +endif (DL_LIBRARY) + +find_library (M_LIBRARY NAMES m) +if (M_LIBRARY) + message (STATUS "Found M: ${M_LIBRARY}") +else (M_LIBRARY) + message (FATAL_ERROR "Could NOT find M") +endif (M_LIBRARY) + set (KCOV kcov) # See http://eatmyrandom.blogspot.se/2010/06/automate-version-numbering-using-git.html -if( EXISTS "${CMAKE_SOURCE_DIR}/.git" ) - execute_process(COMMAND git --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/../.git describe --abbrev=4 HEAD - OUTPUT_VARIABLE POD_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) -else() - execute_process(COMMAND head -n 1 ${CMAKE_CURRENT_SOURCE_DIR}/../ChangeLog - COMMAND cut -d \( -f 2 - COMMAND cut -d \) -f 1 - OUTPUT_VARIABLE POD_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() +if (EXISTS "${CMAKE_SOURCE_DIR}/.git") + find_program (GIT_EXECUTABLE NAMES git) + if (GIT_EXECUTABLE) + message (STATUS "Found Git: ${GIT_EXECUTABLE}") + else (GIT_EXECUTABLE) + message (FATAL_ERROR "Could NOT find Git") + endif (GIT_EXECUTABLE) + + execute_process (COMMAND "${GIT_EXECUTABLE}" + "--git-dir=${CMAKE_SOURCE_DIR}/.git" + describe + --abbrev=4 + HEAD + OUTPUT_VARIABLE POD_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +else (EXISTS "${CMAKE_SOURCE_DIR}/.git") + execute_process (COMMAND head + -n 1 + "${CMAKE_SOURCE_DIR}/ChangeLog" + COMMAND cut -d \( -f 2 + COMMAND cut -d \) -f 1 + OUTPUT_VARIABLE POD_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif (EXISTS "${CMAKE_SOURCE_DIR}/.git") add_custom_command( - OUTPUT version.c - COMMAND ${CMAKE_COMMAND} -E echo "const char *kcov_version = \\\"${POD_VERSION}\\\"\;" - > version.c + OUTPUT version.c + COMMAND "${CMAKE_COMMAND}" + -E echo + "const char *kcov_version = \\\"${POD_VERSION}\\\"\;" + > version.c ) - set (SOLIB kcov_sowrapper) set (${SOLIB}_SRCS @@ -57,8 +74,8 @@ set (DISASSEMBLER_SRCS set (HAS_LIBBFD "0") -if("${CMAKE_TARGET_ARCHITECTURES}" STREQUAL "i386" OR "${CMAKE_TARGET_ARCHITECTURES}" STREQUAL "x86_64") - if(LIBBFD_FOUND) +if (CMAKE_TARGET_ARCHITECTURES STREQUAL "i386" OR CMAKE_TARGET_ARCHITECTURES STREQUAL "x86_64") + if (LIBBFD_FOUND) set (HAS_LIBBFD "1") set (DISASSEMBLER_SRCS parsers/bfd-disassembler.cc @@ -68,23 +85,23 @@ if("${CMAKE_TARGET_ARCHITECTURES}" STREQUAL "i386" OR "${CMAKE_TARGET_ARCHITECTU ${LIBBFD_BFD_LIBRARY} ${LIBBFD_IBERTY_LIBRARY} ) - endif() -endif() + endif (LIBBFD_FOUND) +endif (CMAKE_TARGET_ARCHITECTURES STREQUAL "i386" OR CMAKE_TARGET_ARCHITECTURES STREQUAL "x86_64") set (coveralls_SRCS writers/dummy-coveralls-writer.cc) if (CURL_FOUND) set (coveralls_SRCS writers/coveralls-writer.cc) -endif() +endif (CURL_FOUND) -if ("${KCOV_STATIC_BUILD}" STREQUAL "1") +if (KCOV_STATIC_BUILD STREQUAL "1") message(STATUS "Building a static binary (no coveralls support)") set (CURL_LIBRARIES "") # Coveralls doesn't work in a static setting set (coveralls_SRCS writers/dummy-coveralls-writer.cc) set (CMAKE_EXE_LINKER_FLAGS "-static") -endif() +endif (KCOV_STATIC_BUILD STREQUAL "1") set (ELF_SRCS dummy-solib-handler.cc @@ -94,7 +111,7 @@ set (MACHO_SRCS set (SOLIB_generated ) # Linux-specific sources -if (${CMAKE_SYSTEM_NAME} MATCHES Linux) +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") find_package (LibElf) find_package (Elfutils) set (ELF_SRCS @@ -111,7 +128,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES Linux) add_library (${SOLIB} SHARED ${${SOLIB}_SRCS}) set_target_properties(${SOLIB} PROPERTIES SUFFIX ".so") target_link_libraries(${SOLIB} dl) -else() +else (CMAKE_SYSTEM_NAME STREQUAL "Linux") find_library(LLDB_LIBRARY NAMES LLDB @@ -135,7 +152,7 @@ else() set (MACHO_SRCS engines/lldb-engine.cc ) -endif () +endif (CMAKE_SYSTEM_NAME STREQUAL "Linux") set (${KCOV}_SRCS capabilities.cc @@ -227,22 +244,16 @@ include_directories( ) if (LIBDW_FOUND) -include_directories( - ${LIBDW_INCLUDE_DIRS} - ) -endif() + include_directories(${LIBDW_INCLUDE_DIRS}) +endif (LIBDW_FOUND) if (LIBELF_FOUND) -include_directories( - ${LIBELF_INCLUDE_DIRS} - ) -endif() + include_directories(${LIBELF_INCLUDE_DIRS}) +endif (LIBELF_FOUND) if (CURL_FOUND) -include_directories( - ${CURL_INCLUDE_DIRS} - ) -endif() + include_directories(${CURL_INCLUDE_DIRS}) +endif (CURL_FOUND) add_library (bash_execve_redirector SHARED engines/bash-execve-redirector.c) set_target_properties(bash_execve_redirector PROPERTIES SUFFIX ".so") @@ -250,114 +261,139 @@ target_link_libraries(bash_execve_redirector dl) add_library (kcov_system_lib SHARED engines/system-mode-binary-lib.cc utils.cc system-mode/registration.cc) set_target_properties(kcov_system_lib PROPERTIES SUFFIX ".so") -target_link_libraries(kcov_system_lib dl ${ZLIB_LIBRARIES}) +target_link_libraries(kcov_system_lib + "${DL_LIBRARY}" + ${ZLIB_LIBRARIES} +) add_custom_command( - OUTPUT library.cc - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py lib${SOLIB}.so __library > library.cc - DEPENDS ${SOLIB} ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py - ) + OUTPUT library.cc + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" + lib${SOLIB}.so + __library + > library.cc + DEPENDS + ${SOLIB} + "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" +) add_custom_command( - OUTPUT bash-redirector-library.cc - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py $ bash_redirector_library > bash-redirector-library.cc - DEPENDS bash_execve_redirector ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py - ) + OUTPUT bash-redirector-library.cc + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" + $ + bash_redirector_library + > bash-redirector-library.cc + DEPENDS + bash_execve_redirector + "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" +) add_custom_command( - OUTPUT kcov-system-library.cc - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py $ kcov_system_library > kcov-system-library.cc - DEPENDS kcov_system_lib ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py - ) + OUTPUT kcov-system-library.cc + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" + $ + kcov_system_library + > kcov-system-library.cc + DEPENDS + kcov_system_lib + "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" +) add_custom_command( - OUTPUT python-helper.cc - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py ${CMAKE_CURRENT_SOURCE_DIR}/engines/python-helper.py python_helper > python-helper.cc - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/engines/python-helper.py ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py - ) + OUTPUT python-helper.cc + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" + "${CMAKE_CURRENT_SOURCE_DIR}/engines/python-helper.py" + python_helper + > python-helper.cc + DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/engines/python-helper.py" + "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" +) add_custom_command( - OUTPUT bash-helper.cc - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py - ${CMAKE_CURRENT_SOURCE_DIR}/engines/bash-helper.sh bash_helper - ${CMAKE_CURRENT_SOURCE_DIR}/engines/bash-helper-debug-trap.sh bash_helper_debug_trap - > bash-helper.cc - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/engines/bash-helper.sh - ${CMAKE_CURRENT_SOURCE_DIR}/engines/bash-helper-debug-trap.sh - ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py - ) + OUTPUT bash-helper.cc + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" + "${CMAKE_CURRENT_SOURCE_DIR}/engines/bash-helper.sh" + bash_helper + "${CMAKE_CURRENT_SOURCE_DIR}/engines/bash-helper-debug-trap.sh" + bash_helper_debug_trap + > bash-helper.cc + DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/engines/bash-helper.sh" + "${CMAKE_CURRENT_SOURCE_DIR}/engines/bash-helper-debug-trap.sh" + "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" +) add_custom_command( - OUTPUT html-data-files.cc - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py - ${CMAKE_CURRENT_SOURCE_DIR}/../data/bcov.css css_text - ${CMAKE_CURRENT_SOURCE_DIR}/../data/amber.png icon_amber - ${CMAKE_CURRENT_SOURCE_DIR}/../data/glass.png icon_glass - ${CMAKE_CURRENT_SOURCE_DIR}/../data/source-file.html source_file_text - ${CMAKE_CURRENT_SOURCE_DIR}/../data/index.html index_text - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/handlebars.js handlebars_text - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/kcov.js kcov_text - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.min.js jquery_text - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.tablesorter.min.js tablesorter_text - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.tablesorter.widgets.min.js tablesorter_widgets_text - ${CMAKE_CURRENT_SOURCE_DIR}/../data/tablesorter-theme.css tablesorter_theme_text - > html-data-files.cc - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/../data/bcov.css - ${CMAKE_CURRENT_SOURCE_DIR}/../data/amber.png - ${CMAKE_CURRENT_SOURCE_DIR}/../data/glass.png - ${CMAKE_CURRENT_SOURCE_DIR}/../data/source-file.html - ${CMAKE_CURRENT_SOURCE_DIR}/../data/index.html - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/handlebars.js - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/kcov.js - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.min.js - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.tablesorter.min.js - ${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.tablesorter.widgets.min.js - ${CMAKE_CURRENT_SOURCE_DIR}/../data/tablesorter-theme.css - ${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py - ) + OUTPUT html-data-files.cc + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/bcov.css" css_text + "${CMAKE_CURRENT_SOURCE_DIR}/../data/amber.png" icon_amber + "${CMAKE_CURRENT_SOURCE_DIR}/../data/glass.png" icon_glass + "${CMAKE_CURRENT_SOURCE_DIR}/../data/source-file.html" source_file_text + "${CMAKE_CURRENT_SOURCE_DIR}/../data/index.html" index_text + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/handlebars.js" handlebars_text + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/kcov.js" kcov_text + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.min.js" jquery_text + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.tablesorter.min.js" tablesorter_text + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.tablesorter.widgets.min.js" tablesorter_widgets_text + "${CMAKE_CURRENT_SOURCE_DIR}/../data/tablesorter-theme.css" tablesorter_theme_text + > html-data-files.cc + DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/../data/bcov.css" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/amber.png" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/glass.png" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/source-file.html" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/index.html" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/handlebars.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/kcov.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.min.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.tablesorter.min.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/js/jquery.tablesorter.widgets.min.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../data/tablesorter-theme.css" + "${CMAKE_CURRENT_SOURCE_DIR}/bin-to-c-source.py" +) # Reference: http://www.cmake.org/Wiki/CMake_RPATH_handling -if(SPECIFY_RPATH) +if (SPECIFY_RPATH) set (CMAKE_SKIP_BUILD_RPATH FALSE) set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # the RPATH to be used when installing, but only if it's not a system directory - LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) - IF("${isSystemDir}" STREQUAL "-1") - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") - ENDIF("${isSystemDir}" STREQUAL "-1") -endif(SPECIFY_RPATH) + list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" IS_SYSTEM_DIR) + if (IS_SYSTEM_DIR STREQUAL "-1") + set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") + endif (IS_SYSTEM_DIR STREQUAL "-1") +endif (SPECIFY_RPATH) if (LIBELF_FOUND) add_executable (${KCOV} ${${KCOV}_SRCS} ${SOLIB_generated} bash-redirector-library.cc python-helper.cc bash-helper.cc kcov-system-library.cc html-data-files.cc version.c) target_link_libraries(${KCOV} - ${LIBDW_LIBRARIES} - ${LIBELF_LIBRARIES} stdc++ + ${CMAKE_THREAD_LIBS_INIT} ${CURL_LIBRARIES} - m + "${DL_LIBRARY}" ${DISASSEMBLER_LIBRARIES} - ${ZLIB_LIBRARIES} - ${CMAKE_THREAD_LIBS_INIT} - dl + ${LIBDW_LIBRARIES} + ${LIBELF_LIBRARIES} ${LLDB_LIBRARY} + "${M_LIBRARY}" + ${ZLIB_LIBRARIES} ) - install (TARGETS ${KCOV} DESTINATION ${INSTALL_TARGETS_PATH}) -endif() + install (TARGETS ${KCOV} DESTINATION "${KCOV_INSTALL_BINDIR}") +endif (LIBELF_FOUND) -if (${CMAKE_SYSTEM_NAME} MATCHES Linux) +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") add_executable (kcov-system-daemon ${KCOV_SYSTEM_MODE_SRCS} version.c) target_link_libraries(kcov-system-daemon stdc++ - m - ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} - dl + "${DL_LIBRARY}" + "${M_LIBRARY}" + ${ZLIB_LIBRARIES} ) - install (TARGETS kcov-system-daemon DESTINATION ${INSTALL_TARGETS_PATH}) -endif() + install (TARGETS kcov-system-daemon DESTINATION "${KCOV_INSTALL_BINDIR}") +endif (CMAKE_SYSTEM_NAME STREQUAL "Linux") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 73d290b9..b6e5491a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,147 +1,189 @@ -cmake_minimum_required (VERSION 2.6) - +cmake_minimum_required (VERSION 2.8.4) project (kcov-tests) enable_language(ASM) +if (POLICY CMP0042) + # MACOSX_RPATH is enabled by default. + cmake_policy (SET CMP0042 NEW) +endif (POLICY CMP0042) + +if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set (CMAKE_BUILD_TYPE Debug CACHE STRING + "Choose the type of build, options are None Debug Release RelWithDebInfo MinSizeRel" + FORCE + ) + set_property (CACHE CMAKE_BUILD_TYPE PROPERTY + STRINGS None Debug Release RelWithDebInfo MinSizeRel + ) +endif (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + +set (CMAKE_THREAD_PREFER_PTHREAD ON) +find_package (Threads REQUIRED) + +find_package (ZLIB REQUIRED) + +find_library (DL_LIBRARY NAMES dl) +if (DL_LIBRARY) + message (STATUS "Found DL: ${DL_LIBRARY}") +else (DL_LIBRARY) + message (FATAL_ERROR "Could NOT find DL") +endif (DL_LIBRARY) + +find_library (M_LIBRARY NAMES m) +if (M_LIBRARY) + message (STATUS "Found M: ${M_LIBRARY}") +else (M_LIBRARY) + message (FATAL_ERROR "Could NOT find M") +endif (M_LIBRARY) + include_directories( - ${CMAKE_BINARY_DIR} - ../src/include + "${CMAKE_CURRENT_BINARY_DIR}" + ../src/include ) set (CMAKE_CXX_FLAGS "-std=c++0x -Wall -D_GLIBCXX_USE_NANOSLEEP -DKCOV_LIBRARY_PREFIX=${KCOV_LIBRARY_PREFIX}") add_custom_command (OUTPUT multi-fork-generated.c - COMMAND ${CMAKE_SOURCE_DIR}/multi-fork/generate-functions.py ${CMAKE_SOURCE_DIR}/multi-fork/code-template.c 1024 > ${CMAKE_BINARY_DIR}/multi-fork-generated.c - DEPENDS - ${CMAKE_SOURCE_DIR}/multi-fork/generate-functions.py + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/multi-fork/generate-functions.py" + "${CMAKE_CURRENT_SOURCE_DIR}/multi-fork/code-template.c" + 1024 + > "${CMAKE_CURRENT_BINARY_DIR}/multi-fork-generated.c" + DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/multi-fork/generate-functions.py" ) add_custom_target(multi-fork-generated ALL - DEPENDS multi-fork-generated.c + DEPENDS multi-fork-generated.c +) +set_property(SOURCE multi-fork/test-multi-fork.c APPEND PROPERTY + OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/multi-fork-generated.c" ) -set_property(SOURCE multi-fork/test-multi-fork.c APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/multi-fork-generated.c) set (main_tests_SRCS - main.cc - subdir/file.c - subdir2/file2.c + main.cc + subdir/file.c + subdir2/file2.c ) set (argv_dependent_SRCS - argv-dependent.c + argv-dependent.c ) set (fork_SRCS - fork/fork.c + fork/fork.c ) set (fork_no_wait_SRCS - fork/fork-no-wait.c + fork/fork-no-wait.c ) set (signals_SRCS - signals/test-signals.c + signals/test-signals.c ) set (multi_fork_SRCS - multi-fork/test-multi-fork.c + multi-fork/test-multi-fork.c ) set (recursive-ptrace_SRCS - recursive-ptrace/main.cc + recursive-ptrace/main.cc ) set (shared_library_test_SRCS - shared-library/main.c + shared-library/main.c ) set (test_popen_SRCS - popen/test-popen.c + popen/test-popen.c ) set (global_constructors_SRCS - global-constructors/test-global-ctors.cc + global-constructors/test-global-ctors.cc ) set (daemon_SRCS - daemon/test-daemon.cc + daemon/test-daemon.cc ) add_library(shared_library SHARED - shared-library/big-symbol.S - shared-library/solib.c -) - -set(CMAKE_BUILD_TYPE distribution) -set(CMAKE_C_FLAGS_DISTRIBUTION "-g") -set(CMAKE_CXX_FLAGS_DISTRIBUTION "-g") - - -find_library(shared_library_LIBRARY - NAMES shared_library - PATHS ${CMAKE_CURRENT_BINARY_DIR} + shared-library/big-symbol.S + shared-library/solib.c ) - add_executable(main-tests ${main_tests_SRCS}) add_executable(fork ${fork_SRCS}) add_executable(fork_no_wait ${fork_no_wait_SRCS}) add_executable(vfork fork/vfork.c) add_executable(signals ${signals_SRCS}) + add_executable(multi_fork ${multi_fork_SRCS}) +target_link_libraries(multi_fork "${M_LIBRARY}") + add_executable(shared_library_test ${shared_library_test_SRCS}) +target_link_libraries(shared_library_test shared_library) + add_executable(argv_dependent ${argv_dependent_SRCS}) add_executable(test_popen ${test_popen_SRCS}) + add_executable(global-constructors ${global_constructors_SRCS}) +target_link_libraries(global-constructors shared_library) + add_executable(test_daemon ${daemon_SRCS}) add_executable(multi_1 merge-tests/file.c merge-tests/main_1.c) add_executable(multi_2 merge-tests/file.c merge-tests/main_2.c) + add_executable(setpgid-kill setpgid-kill/setpgid-kill-main.cc ../src/utils.cc) +target_link_libraries(setpgid-kill ${ZLIB_LIBRARIES}) + add_executable(issue31 daemon/test-issue31.cc) +target_link_libraries(issue31 ${CMAKE_THREAD_LIBS_INIT}) + add_executable(dlopen dlopen/dlopen.cc dlopen/dlopen-main.cc) +target_link_libraries(dlopen "${DL_LIBRARY}") + add_executable(s short-file.c) add_executable(fork+exec fork/fork+exec.c) -add_executable(thread-test threads/thread-main.c) - -#if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") -# add_executable(sanitizer-coverage sanitizer-coverage.c) -# set_target_properties(sanitizer-coverage PROPERTIES COMPILE_FLAGS "-g -fsanitize=address -fsanitize-coverage=bb") -# set_target_properties(sanitizer-coverage PROPERTIES LINK_FLAGS "-fsanitize=address -fsanitize-coverage=bb") -#endif() - -add_executable(pie pie.c) -set_target_properties(pie PROPERTIES POISITION_INDEPENDENT_CODE True) - -add_executable(pie-test argv-dependent.c) -set_target_properties(pie-test PROPERTIES POISITION_INDEPENDENT_CODE True) - -target_link_libraries(dlopen dl) - -if (${CMAKE_SYSTEM_NAME} MATCHES Linux) - add_executable(recursive-ptrace ${recursive-ptrace_SRCS}) - add_custom_target (illegal-insn ALL - COMMAND ${CMAKE_C_COMPILER} -nostdlib ${CMAKE_CURRENT_SOURCE_DIR}/assembly/illegal-insn.S -o ${CMAKE_BINARY_DIR}/illegal-insn - ) - - add_custom_target (fork-32 ALL - COMMAND ${CMAKE_C_COMPILER} -g -m32 ${CMAKE_CURRENT_SOURCE_DIR}/fork/fork.c -o ${CMAKE_BINARY_DIR}/fork-32 - ) -endif() - -target_link_libraries(shared_library_test shared_library) -target_link_libraries(global-constructors shared_library) - -target_link_libraries(multi_fork - m) -target_link_libraries(setpgid-kill - z) -target_link_libraries(issue31 - pthread) -target_link_libraries(thread-test - pthread) +add_executable(thread-test threads/thread-main.c) +target_link_libraries(thread-test ${CMAKE_THREAD_LIBS_INIT}) + +#if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +# add_executable(sanitizer-coverage sanitizer-coverage.c) +# set_target_properties(sanitizer-coverage PROPERTIES COMPILE_FLAGS "-g -fsanitize=address -fsanitize-coverage=bb") +# set_target_properties(sanitizer-coverage PROPERTIES LINK_FLAGS "-fsanitize=address -fsanitize-coverage=bb") +#endif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + +add_executable (pie pie.c) +if (CMAKE_VERSION VERSION_LESS "2.8.9") + set_target_properties (pie PROPERTIES COMPILE_FLAGS -fPIE) +else (CMAKE_VERSION VERSION_LESS "2.8.9") + set_target_properties (pie PROPERTIES POSITION_INDEPENDENT_CODE ON) +endif (CMAKE_VERSION VERSION_LESS "2.8.9") + +add_executable (pie-test argv-dependent.c) +if (CMAKE_VERSION VERSION_LESS "2.8.9") + set_target_properties (pie-test PROPERTIES COMPILE_FLAGS -fPIE) +else (CMAKE_VERSION VERSION_LESS "2.8.9") + set_target_properties (pie-test PROPERTIES POSITION_INDEPENDENT_CODE ON) +endif (CMAKE_VERSION VERSION_LESS "2.8.9") + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + add_executable(recursive-ptrace ${recursive-ptrace_SRCS}) + add_custom_target (illegal-insn ALL + COMMAND "${CMAKE_C_COMPILER}" + -nostdlib + "${CMAKE_CURRENT_SOURCE_DIR}/assembly/illegal-insn.S" + -o "${CMAKE_CURRENT_BINARY_DIR}/illegal-insn" + ) + + add_custom_target (fork-32 ALL + COMMAND "${CMAKE_C_COMPILER}" -g -m32 + "${CMAKE_CURRENT_SOURCE_DIR}/fork/fork.c" + -o "${CMAKE_CURRENT_BINARY_DIR}/fork-32" + ) +endif (CMAKE_SYSTEM_NAME STREQUAL "Linux") add_custom_target(tests-stripped ALL - COMMAND strip -o tests-stripped main-tests + COMMAND "${CMAKE_STRIP}" -o tests-stripped main-tests DEPENDS main-tests) diff --git a/tests/unit-tests/CMakeLists.txt b/tests/unit-tests/CMakeLists.txt index 246425e5..979cc356 100644 --- a/tests/unit-tests/CMakeLists.txt +++ b/tests/unit-tests/CMakeLists.txt @@ -1,16 +1,38 @@ -cmake_minimum_required (VERSION 2.6) +cmake_minimum_required (VERSION 2.8.4) +project (kcov-unit-tests) +list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") + +if (POLICY CMP0042) + # MACOSX_RPATH is enabled by default. + cmake_policy (SET CMP0042 NEW) +endif (POLICY CMP0042) + +if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set (CMAKE_BUILD_TYPE Debug CACHE STRING + "Choose the type of build, options are None Debug Release RelWithDebInfo MinSizeRel" + FORCE + ) + set_property (CACHE CMAKE_BUILD_TYPE PROPERTY + STRINGS None Debug Release RelWithDebInfo MinSizeRel + ) +endif (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) -project (kcov-ut) -set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake) find_package (LibCRPCUT REQUIRED) find_package (LibElf REQUIRED) find_package (Elfutils REQUIRED) -# ==================================== -# project name and version -# ==================================== -project (unit-test) +set (CMAKE_THREAD_PREFER_PTHREAD ON) +find_package (Threads REQUIRED) + +find_package (ZLIB REQUIRED) + +find_library (DL_LIBRARY NAMES dl) +if (DL_LIBRARY) + message (STATUS "Found DL: ${DL_LIBRARY}") +else (DL_LIBRARY) + message (FATAL_ERROR "Could NOT find DL") +endif (DL_LIBRARY) + set (TGT ut) set (${TGT}_SRCS @@ -37,66 +59,68 @@ set (${TGT}_SRCS tests-system-mode.cc tests-utils.cc tests-writer.cc - ) -set (CMAKE_BUILD_TYPE debug) +) set (CMAKE_CXX_FLAGS "-std=c++1y -Wall -D_GLIBCXX_USE_NANOSLEEP") -add_custom_command( - OUTPUT html-data-files.cc - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../../src/bin-to-c-source.py - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/bcov.css css_text - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/amber.png icon_amber - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/glass.png icon_glass - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/source-file.html source_file_text - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/index.html index_text - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/handlebars.js handlebars_text - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/kcov.js kcov_text - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.min.js jquery_text - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.tablesorter.min.js tablesorter_text - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.tablesorter.widgets.min.js tablesorter_widgets_text - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/tablesorter-theme.css tablesorter_theme_text - > html-data-files.cc - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/bcov.css - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/amber.png - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/glass.png - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/source-file.html - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/index.html - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/handlebars.js - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/kcov.js - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.min.js - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.tablesorter.min.js - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.tablesorter.widgets.min.js - ${CMAKE_CURRENT_SOURCE_DIR}/../../data/tablesorter-theme.css - ${CMAKE_CURRENT_SOURCE_DIR}/../../src/bin-to-c-source.py - ) +add_custom_command(OUTPUT html-data-files.cc + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/../../src/bin-to-c-source.py" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/bcov.css" css_text + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/amber.png" icon_amber + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/glass.png" icon_glass + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/source-file.html" source_file_text + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/index.html" index_text + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/handlebars.js" handlebars_text + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/kcov.js" kcov_text + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.min.js" jquery_text + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.tablesorter.min.js" tablesorter_text + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.tablesorter.widgets.min.js" tablesorter_widgets_text + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/tablesorter-theme.css" tablesorter_theme_text + > html-data-files.cc + DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/bcov.css" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/amber.png" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/glass.png" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/source-file.html" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/index.html" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/handlebars.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/kcov.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.min.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.tablesorter.min.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/js/jquery.tablesorter.widgets.min.js" + "${CMAKE_CURRENT_SOURCE_DIR}/../../data/tablesorter-theme.css" + "${CMAKE_CURRENT_SOURCE_DIR}/../../src/bin-to-c-source.py" +) include_directories( - ../../src/include/ - trompeloeil/include - ${LIBCRPCUT_INCLUDE_DIRS} - ${LIBELF_INCLUDE_DIRS} - ${LIBDW_INCLUDE_DIRS} - ) + ../../src/include/ + trompeloeil/include + ${LIBCRPCUT_INCLUDE_DIRS} + ${LIBELF_INCLUDE_DIRS} + ${LIBDW_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIR} +) add_executable (${TGT} ${${TGT}_SRCS} html-data-files.cc) target_link_libraries(${TGT} - ${LIBCRPCUT_LIBRARIES} - ${LIBDW_LIBRARIES} - ${LIBELF_LIBRARIES} - dl - z - pthread) + ${CMAKE_THREAD_LIBS_INIT} + "${DL_LIBRARY}" + ${LIBCRPCUT_LIBRARIES} + ${LIBDW_LIBRARIES} + ${LIBELF_LIBRARIES} + ${ZLIB_LIBRARIES} +) add_executable (same-name-test - ../main.cc - ../subdir/file.c - ../subdir2/file.c + ../main.cc + ../subdir/file.c + ../subdir2/file.c ) - + add_executable (test-binary test-source.c second-source.c) -SET_TARGET_PROPERTIES(test-binary PROPERTIES COMPILE_FLAGS "-nostdinc") -SET_TARGET_PROPERTIES(test-binary PROPERTIES LINK_FLAGS "-nostdlib") +set_target_properties(test-binary PROPERTIES + COMPILE_FLAGS "-nostdinc" + LINK_FLAGS "-nostdlib" +) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index ce30b586..0fac4690 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,12 +1,11 @@ -cmake_minimum_required (VERSION 2.6) - +cmake_minimum_required (VERSION 2.8.4) project (kcov-tools) list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake") -if(POLICY CMP0042) - # MACOSX_RPATH is enabled by default. - cmake_policy (SET CMP0042 NEW) -endif() +if (POLICY CMP0042) + # MACOSX_RPATH is enabled by default. + cmake_policy (SET CMP0042 NEW) +endif (POLICY CMP0042) find_package (LibElf REQUIRED) find_package (Elfutils REQUIRED) @@ -14,6 +13,20 @@ find_package (PkgConfig REQUIRED) find_package (Threads) find_package (ZLIB REQUIRED) +find_library (DL_LIBRARY NAMES dl) +if (DL_LIBRARY) + message (STATUS "Found DL: ${DL_LIBRARY}") +else (DL_LIBRARY) + message (FATAL_ERROR "Could NOT find DL") +endif (DL_LIBRARY) + +find_library (M_LIBRARY NAMES m) +if (M_LIBRARY) + message (STATUS "Found M: ${M_LIBRARY}") +else (M_LIBRARY) + message (FATAL_ERROR "Could NOT find M") +endif (M_LIBRARY) + # ==================================== # project name and version # ==================================== @@ -21,51 +34,47 @@ set (LINE2ADDR line2addr) set (${LINE2ADDR}_SRCS ../src/capabilities.cc - ../src/configuration.cc - ../src/filter.cc - ../src/gcov.cc - ../src/parsers/dwarf.cc - ../src/parsers/elf-parser.cc - ../src/parsers/elf.cc - ../src/parsers/dummy-disassembler.cc - ../src/parser-manager.cc - ../src/utils.cc - line2addr.cc - ) + ../src/configuration.cc + ../src/filter.cc + ../src/gcov.cc + ../src/parsers/dwarf.cc + ../src/parsers/elf-parser.cc + ../src/parsers/elf.cc + ../src/parsers/dummy-disassembler.cc + ../src/parser-manager.cc + ../src/utils.cc + line2addr.cc +) set (CMAKE_CXX_FLAGS "-std=c++0x -g -Wall -D_GLIBCXX_USE_NANOSLEEP -DKCOV_LIBRARY_PREFIX=${KCOV_LIBRARY_PREFIX}") include_directories( - ../src/include/ - ${LIBELF_INCLUDE_DIRS} - ${LIBDW_INCLUDE_DIRS} - ${ZLIB_INCLUDE_DIR} + ../src/include/ + ${LIBELF_INCLUDE_DIRS} + ${LIBDW_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIR} ) # Reference: http://www.cmake.org/Wiki/CMake_RPATH_handling -if(SPECIFY_RPATH) - set (CMAKE_SKIP_BUILD_RPATH FALSE) - set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) - set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - # the RPATH to be used when installing, but only if it's not a system directory - LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) - IF("${isSystemDir}" STREQUAL "-1") - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") - ENDIF("${isSystemDir}" STREQUAL "-1") -endif(SPECIFY_RPATH) +if (SPECIFY_RPATH) + set (CMAKE_SKIP_BUILD_RPATH FALSE) + set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + # the RPATH to be used when installing, but only if it's not a system directory + list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" IS_SYSTEM_DIR) + if (IS_SYSTEM_DIR STREQUAL "-1") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") + endif (IS_SYSTEM_DIR STREQUAL "-1") +endif (SPECIFY_RPATH) add_executable (${LINE2ADDR} ${${LINE2ADDR}_SRCS}) target_link_libraries(${LINE2ADDR} - ${LIBDW_LIBRARIES} - ${LIBELF_LIBRARIES} - stdc++ - dl - ${CMAKE_THREAD_LIBS_INIT} - m - ${ZLIB_LIBRARIES}) - -file ( GLOB kcov-merge kcov-merge ) - -install (PROGRAMS ${kcov-merge} DESTINATION bin ) + "${DL_LIBRARY}" + ${LIBDW_LIBRARIES} + ${LIBELF_LIBRARIES} + "${M_LIBRARY}" + stdc++ + ${CMAKE_THREAD_LIBS_INIT} + ${ZLIB_LIBRARIES}) diff --git a/travis/Makefile b/travis/Makefile index ddef55af..95b15948 100644 --- a/travis/Makefile +++ b/travis/Makefile @@ -1,7 +1,7 @@ #!/usr/bin/make chroot=/tmp/32-bit-chroot -kcov_deps=libdw-dev libelf-dev elfutils libcurl4-openssl-dev python python3 cmake binutils-dev +kcov_deps=libdw-dev libelf-dev elfutils libcurl4-openssl-dev python python3 cmake binutils-dev git .PHONY: prepare_environment