diff --git a/cmake/FindOTF2.cmake b/cmake/FindOTF2.cmake index 15f075ad4d5a2353d08dcabf732231d02eaf5a6d..8089bf8097305bc4df698ccc39816a25c7c00676 100644 --- a/cmake/FindOTF2.cmake +++ b/cmake/FindOTF2.cmake @@ -1,56 +1,75 @@ # -# Find the OTF2 libraries and include dir +# Find the OTF2 library # - # OTF2_INCLUDE_DIR - Directories to include to use OTF2 -# OTF2_LIBRARY - Files to link against to use OTF2 -# OTF2_FOUND - When false, don't try to use OTF2 -# -# OTF2_DIR can be used to make it simpler to find the various include -# directories and compiled libraries when OTF2 was not installed in the -# usual/well-known directories (e.g. because you made an in tree-source -# compilation or because you installed it in an "unusual" directory). -# Just set OTF2_DIR it to your specific installation directory -# -FIND_LIBRARY(OTF2_LIBRARY otf2 - PATHS - /usr/lib - /usr/local/lib - ${OTF2_DIR}/lib -) +# OTF2_LIBRARY_PATH - Files to link against to use OTF2 +# OTF2_CONFIG - Path to otf2-config + + +find_program(OTF2_CONFIG otf2-config REQUIRED) +find_program(OTF2_PRINT otf2-print REQUIRED) -IF(OTF2_LIBRARY) - GET_FILENAME_COMPONENT(OTF2_GUESSED_INCLUDE_DIR_tmp "${OTF2_LIBRARY}" PATH) - STRING(REGEX REPLACE "lib$" "include" OTF2_GUESSED_INCLUDE_DIR "${OTF2_GUESSED_INCLUDE_DIR_tmp}") -ENDIF(OTF2_LIBRARY) - -FIND_PATH( OTF2_INCLUDE_DIR otf2/otf2.h - PATHS - ${OTF2_GUESSED_INCLUDE_DIR} - ${OTF2_DIR}/include - /usr/include - /usr/local/include - ${CMAKE_SOURCE_DIR}/externals/otf2/include/ +IF(NOT OTF2_CONFIG OR NOT EXISTS ${OTF2_CONFIG}) + MESSAGE(STATUS "Cannot find otf2-config") + SET(OTF2_VERSION ${OTF2_REQUIRED_VERSION}) +ELSE() + message(STATUS "OTF2 installation found. (using ${OTF2_CONFIG})") + + execute_process(COMMAND ${OTF2_CONFIG} "--cppflags" OUTPUT_VARIABLE OTF2_INCLUDE_DIR) + STRING(REPLACE "\n" "" OTF2_INCLUDE_DIR ${OTF2_INCLUDE_DIR}) + STRING(REPLACE "-I" "" OTF2_INCLUDE_DIR ${OTF2_INCLUDE_DIR}) + + execute_process(COMMAND ${OTF2_CONFIG} "--ldflags" OUTPUT_VARIABLE _LINK_LD_ARGS) + STRING( REPLACE " " ";" _LINK_LD_ARGS ${_LINK_LD_ARGS} ) + FOREACH( _ARG ${_LINK_LD_ARGS} ) + IF(${_ARG} MATCHES "^-L") + STRING(REGEX REPLACE "^-L" "" _ARG ${_ARG}) + STRING(STRIP "${_ARG}" _ARG) + SET(OTF2_LINK_DIRS ${OTF2_LINK_DIRS} ${_ARG}) + ENDIF(${_ARG} MATCHES "^-L") + ENDFOREACH(_ARG) + + execute_process(COMMAND ${OTF2_CONFIG} "--libs" OUTPUT_VARIABLE _LINK_LD_ARGS) + STRING( REPLACE " " ";" _LINK_LD_ARGS ${_LINK_LD_ARGS} ) + FOREACH( _ARG ${_LINK_LD_ARGS} ) + IF(${_ARG} MATCHES "^-l") + STRING(REGEX REPLACE "^-l" "" _ARG "${_ARG}") + STRING(STRIP "${_ARG}" _ARG) + FIND_LIBRARY(_OTF2_LIB_FROM_ARG NAMES ${_ARG} + HINTS ${OTF2_LINK_DIRS} NO_DEFAULT_PATH + ) + IF(${_ARG} STREQUAL "otf2" OR ${_ARG} STREQUAL "open-trace-format2") + SET(OTF2_LIBRARY ${_OTF2_LIB_FROM_ARG}) + ELSE() + IF(_OTF2_LIB_FROM_ARG) + LIST(APPEND OTF2_LIBRARIES ${_OTF2_LIB_FROM_ARG}) + ENDIF(_OTF2_LIB_FROM_ARG) + ENDIF() + UNSET(_OTF2_LIB_FROM_ARG CACHE) + ENDIF(${_ARG} MATCHES "^-l") + ENDFOREACH(_ARG) + + + execute_process(COMMAND ${OTF2_CONFIG} "--version" OUTPUT_VARIABLE OTF2_VERSION) + STRING( REPLACE "otf2-config: version " "" OTF2_VERSION ${OTF2_VERSION} ) + STRING( REPLACE "\n" "" OTF2_VERSION ${OTF2_VERSION} ) + STRING( REPLACE "." ";" _VERSION ${OTF2_VERSION} ) + LIST( GET _VERSION 0 OTF2_MAJOR_VERSION) + LIST( GET _VERSION 1 OTF2_MINOR_VERSION) +ENDIF() + +include (FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OTF2 + FOUND_VAR OTF2_FOUND + REQUIRED_VARS OTF2_CONFIG OTF2_LIBRARY OTF2_INCLUDE_DIR + VERSION_VAR OTF2_VERSION ) -IF( OTF2_INCLUDE_DIR ) - IF( OTF2_LIBRARY ) - SET( OTF2_FOUND "YES" ) - MARK_AS_ADVANCED( OTF2_DIR ) - MARK_AS_ADVANCED( OTF2_INCLUDE_DIR ) - MARK_AS_ADVANCED( OTF2_LIBRARY ) - ENDIF( OTF2_LIBRARY ) -ENDIF( OTF2_INCLUDE_DIR ) - -IF( NOT OTF2_FOUND ) - MESSAGE("OTF2 installation was not found. Please provide OTF2_DIR:") - MESSAGE(" - through the GUI when working with ccmake, ") - MESSAGE(" - as a command line argument when working with cmake e.g. ") - MESSAGE(" cmake .. -DOTF2_DIR:PATH=/usr/local/otf ") - MESSAGE("Note: the following message is triggered by cmake on the first ") - MESSAGE(" undefined necessary PATH variable (e.g. OTF2_INCLUDE_DIR).") - MESSAGE(" Providing OTF2_DIR (as above described) is probably the") - MESSAGE(" simplest solution unless you have a really customized/odd") - MESSAGE(" OTF2 installation...") - SET(OTF2_DIR "" CACHE PATH "Root of OTF2 install tree." ) -ENDIF( NOT OTF2_FOUND ) +if(NOT OTF2_FOUND) + unset(OTF2_CONFIG) + unset(OTF2_CONFIG CACHE) + unset(OTF2_LINK_DIRS) + unset(OTF2_LIBRARIES) +endif() + +mark_as_advanced(OTF2_LIBRARY) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 57dc7831954b8048240735c0fa8a536cb27f00d8..2bc3da7d589b65968aa67811c8c1433fe0ffdb39 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -413,10 +413,6 @@ include_directories( ${QTCOLORPICKERDIR} ) -if(VITE_ENABLE_OTF2) - link_directories(${OTF2_LIBRARY_DIR}) -endif() - #resource if(WIN32) set(VITE_RES