-cmake_minimum_required(VERSION 2.8.9)
+if (CMAKE_VERSION VERSION_LESS "2.8.12")
+ cmake_minimum_required(VERSION 2.8.9)
+ set(HEAPTRACK_BUILD_GUI OFF)
+else()
+ cmake_minimum_required(VERSION 2.8.12)
+endif()
+
project(heaptrack)
+enable_testing()
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wpedantic")
+if(NOT CMAKE_BUILD_TYPE)
+ message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
+ set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
+endif()
+
+set(HEAPTRACK_VERSION_MAJOR 1)
+set(HEAPTRACK_VERSION_MINOR 1)
+set(HEAPTRACK_VERSION_PATCH 0)
+set(HEAPTRACK_LIB_VERSION 1.0.0)
+set(HEAPTRACK_LIB_SOVERSION 1)
+set(HEAPTRACK_FILE_FORMAT_VERSION 2)
-find_package(Boost 1.45.0 REQUIRED COMPONENTS iostreams program_options)
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+
+find_package(Libunwind REQUIRED)
+find_package(Boost 1.41.0 REQUIRED COMPONENTS iostreams program_options)
find_package(Threads REQUIRED)
+find_package(ZLIB REQUIRED)
+include(FeatureSummary)
-add_subdirectory(3rdparty)
+option(
+ HEAPTRACK_BUILD_GUI
+ "Disable this option to skip building the Qt5 / KF5 based GUI for heaptrack."
+ On
+)
-check_library_exists (${LIBUNWIND_LIBRARY} unw_backtrace "" HAVE_UNW_BACKTRACE)
-if (NOT HAVE_UNW_BACKTRACE)
- message(FATAL_ERROR "Your libunwind version is apparently too old and does not have the unw_backtrace function.")
+if(HEAPTRACK_BUILD_GUI)
+ find_package(Qt5 5.2.0 NO_MODULE OPTIONAL_COMPONENTS Widgets)
+ find_package(ECM 1.0.0 NO_MODULE)
+ if(Qt5_FOUND AND ECM_FOUND)
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
+ find_package(KF5 COMPONENTS CoreAddons I18n ItemModels ThreadWeaver ConfigWidgets KIO)
+ find_package(KChart "2.6.0")
+ set_package_properties(KChart PROPERTIES TYPE RECOMMENDED PURPOSE "Required for the heaptrack_gui executable. Get it from the kdiagram module.")
+ endif()
endif()
-check_library_exists (${LIBUNWIND_LIBRARY} _ULx86_64_set_cache_size "" HAVE_UNW_SET_CACHE_SIZE)
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wpedantic")
include (CheckCXXSourceCompiles)
check_cxx_source_compiles(
message(FATAL_ERROR "You are missing some Linux headers required to compile heaptrack.")
endif()
-add_subdirectory(tests)
-
-include_directories(
- ${CMAKE_CURRENT_BINARY_DIR}
- ${Boost_INCLUDE_DIRS}
- 3rdparty/
- ${LIBUNWIND_INCLUDE_DIR}
-)
-
-configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
-
-add_library(heaptrack_preload MODULE heaptrack_preload.cpp libheaptrack.cpp)
-target_link_libraries(heaptrack_preload LINK_PRIVATE ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} backtrace rt)
-add_library(heaptrack_inject MODULE heaptrack_inject.cpp libheaptrack.cpp)
-target_link_libraries(heaptrack_inject LINK_PRIVATE ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} backtrace rt)
-
-add_executable(heaptrack_interpret heaptrack_interpret.cpp)
-target_link_libraries(heaptrack_interpret backtrace)
+check_cxx_source_compiles(
+ "#include <future>
+ std::future<int> f;
+ int main() { return 0; }"
+ HAVE_FUTURE_SUPPORT)
-add_executable(heaptrack_print heaptrack_print.cpp)
-target_link_libraries(heaptrack_print ${Boost_LIBRARIES})
+# cfree() does not exist in glibc 2.26+.
+# See: https://bugs.kde.org/show_bug.cgi?id=383889
+include(CheckSymbolExists)
+check_symbol_exists(cfree malloc.h HAVE_CFREE)
set(BIN_INSTALL_DIR "bin")
set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
"${CMAKE_INSTALL_PREFIX}/${BIN_INSTALL_DIR}"
"${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/heaptrack")
-configure_file(heaptrack.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/heaptrack @ONLY)
+add_subdirectory(3rdparty)
+add_subdirectory(src)
+add_subdirectory(tests)
-install(TARGETS heaptrack_print RUNTIME DESTINATION ${BIN_INSTALL_DIR})
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/heaptrack DESTINATION ${BIN_INSTALL_DIR})
-install(TARGETS heaptrack_interpret RUNTIME DESTINATION ${LIBEXEC_INSTALL_DIR})
-install(TARGETS heaptrack_inject LIBRARY DESTINATION ${LIB_INSTALL_DIR}/heaptrack/)
-install(TARGETS heaptrack_preload LIBRARY DESTINATION ${LIB_INSTALL_DIR}/heaptrack/)
+feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)