implementing tooltips for histograms (QWT), in progress
[sdk/tools/heaptrack.git] / CMakeLists.txt
index 5cdb6ee..73913f9 100644 (file)
@@ -1,19 +1,53 @@
-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(
@@ -39,27 +73,16 @@ if (NOT HAVE_LINUX_HEADERS)
     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)")
@@ -74,10 +97,8 @@ file(RELATIVE_PATH LIB_REL_PATH
     "${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)