From 08aaa2155c33e2ff9bf78dbf5063799457bd2e92 Mon Sep 17 00:00:00 2001 From: Raphael Boucherie <raphael.boucherie@inria.fr> Date: Wed, 3 May 2017 09:59:16 +0200 Subject: [PATCH] added findhqr for cmake --- CMakeLists.txt | 11 +++- FindLIBHQR.cmake | 35 +++++++++++ cmake_modules/GenPkgConfig.cmake | 104 +++++++++++++++++++++++++++++++ lib/pkgconfig/libhqr.pc.in | 13 ++++ testings/CMakeLists.txt | 8 ++- 5 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 FindLIBHQR.cmake create mode 100644 cmake_modules/GenPkgConfig.cmake create mode 100644 lib/pkgconfig/libhqr.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 47de9e2..13dafb7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,8 @@ ### cmake_minimum_required (VERSION 3.0) project (LIBHQR C) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules") +include(GenPkgConfig) # The current version number set (LIBHQR_VERSION_MAJOR 0) @@ -48,8 +50,13 @@ add_subdirectory(testings) install(FILES include/libhqr.h - include/libhqr_dbg.h - DESTINATION include ) + include/libhqr_common.h + # include/libhqr_dbg.h + DESTINATION include/libhqr ) + +install(TARGETS hqr DESTINATION lib) + +generate_pkgconfig_file() #-- Add a custom target to generate tags add_custom_target (tags diff --git a/FindLIBHQR.cmake b/FindLIBHQR.cmake new file mode 100644 index 0000000..912d71d --- /dev/null +++ b/FindLIBHQR.cmake @@ -0,0 +1,35 @@ +# - Try to find LibHQR +# Once done this will define +# LIBHQR_FOUND - System has LibHQR +# LIBHQR_INCLUDE_DIRS - The LibHQR include directories +# LIBHQR_LIBRARIES - The libraries needed to use LibHQR +# LIBHQR_DEFINITIONS - Compiler switches required for using LIBHQR + +find_package(PkgConfig) +pkg_check_modules(PC_LIBHQR QUIET libhqr) +set(LIBHQR_DEFINITIONS ${PC_LIBHQR_CFLAGS_OTHER}) + +find_path( + LIBHQR_INCLUDE_DIR + libhqr.h + HINTS ${PC_LIBHQR_INCLUDEDIR} + ${PC_LIBHQR_INCLUDE_DIRS} + ) + +find_library( + LIBHQR_LIBRARY + NAMES hqr + HINTS ${PC_LIBHQR_LIBDIR} ${PC_LIBHQR_LIBRARY_DIRS} + ) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments +# and set LIBHQR_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args( + LIBHQR DEFAULT_MSG LIBHQR_LIBRARY LIBHQR_INCLUDE_DIR) + +mark_as_advanced(LIBHQR_INCLUDE_DIR LIBHQR_LIBRARY ) + +set(LIBHQR_LIBRARIES ${LIBHQR_LIBRARY} ) +set(LIBHQR_INCLUDE_DIRS ${LIBHQR_INCLUDE_DIR} ) diff --git a/cmake_modules/GenPkgConfig.cmake b/cmake_modules/GenPkgConfig.cmake new file mode 100644 index 0000000..ecb7163 --- /dev/null +++ b/cmake_modules/GenPkgConfig.cmake @@ -0,0 +1,104 @@ +### +# +# @copyright (c) 2009-2014 The University of Tennessee and The University +# of Tennessee Research Foundation. +# All rights reserved. +# @copyright (c) 2012-2017 Inria. All rights reserved. +# @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved. +# +### +# +# @file GenPkgConfig.cmake +# +# @project MORSE +# MORSE is a software package provided by: +# Inria Bordeaux - Sud-Ouest, +# Univ. of Tennessee, +# King Abdullah Univesity of Science and Technology +# Univ. of California Berkeley, +# Univ. of Colorado Denver. +# +# @version 0.9.1 +# @author Cedric Castagnede +# @author Emmanuel Agullo +# @author Mathieu Faverge +# @author Florent Pruvost +# @date 10-11-2014 +# +### + +### +# +# CONVERT_LIBSTYLE_TO_PKGCONFIG: convert a libraries list to follow the pkg-config style +# used in CLEAN_LIB_LIST +# +### +MACRO(CONVERT_LIBSTYLE_TO_PKGCONFIG _liblist) + set(${_liblist}_CPY "${${_liblist}}") + set(${_liblist} "") + foreach(_dep ${${_liblist}_CPY}) + if (${_dep} MATCHES "^/") + get_filename_component(dep_libname ${_dep} NAME) + get_filename_component(dep_libdir ${_dep} DIRECTORY) + STRING(REPLACE "lib" "" dep_libname "${dep_libname}") + STRING(REPLACE ".so" "" dep_libname "${dep_libname}") + STRING(REPLACE ".a" "" dep_libname "${dep_libname}") + STRING(REPLACE ".dylib" "" dep_libname "${dep_libname}") + STRING(REPLACE ".dll" "" dep_libname "${dep_libname}") + list(APPEND ${_liblist} -L${dep_libdir} -l${dep_libname}) + elseif(NOT ${_dep} MATCHES "^-") + list(APPEND ${_liblist} "-l${_dep}") + else() + list(APPEND ${_liblist} ${_dep}) + endif() + endforeach() +ENDMACRO(CONVERT_LIBSTYLE_TO_PKGCONFIG) + +### +# +# CLEAN_LIB_LIST: clean libraries lists to follow the pkg-config style +# used in GENERATE_PKGCONFIG_FILE +# +### +MACRO(CLEAN_LIB_LIST _package) + list(REMOVE_DUPLICATES ${_package}_PKGCONFIG_LIBS) + list(REMOVE_DUPLICATES ${_package}_PKGCONFIG_LIBS_PRIVATE) + list(REMOVE_DUPLICATES ${_package}_PKGCONFIG_REQUIRED) + list(REMOVE_DUPLICATES ${_package}_PKGCONFIG_REQUIRED_PRIVATE) + CONVERT_LIBSTYLE_TO_PKGCONFIG(${_package}_PKGCONFIG_LIBS) + CONVERT_LIBSTYLE_TO_PKGCONFIG(${_package}_PKGCONFIG_LIBS_PRIVATE) + STRING(REPLACE ";" " " ${_package}_PKGCONFIG_LIBS "${${_package}_PKGCONFIG_LIBS}") + STRING(REPLACE ";" " " ${_package}_PKGCONFIG_LIBS_PRIVATE "${${_package}_PKGCONFIG_LIBS_PRIVATE}") + STRING(REPLACE ";" " " ${_package}_PKGCONFIG_REQUIRED "${${_package}_PKGCONFIG_REQUIRED}") + STRING(REPLACE ";" " " ${_package}_PKGCONFIG_REQUIRED_PRIVATE "${${_package}_PKGCONFIG_REQUIRED_PRIVATE}") +ENDMACRO(CLEAN_LIB_LIST) + +### +# +# GENERATE_PKGCONFIG_FILE: generate files libhqr.pc +# +### +MACRO(GENERATE_PKGCONFIG_FILE) + + SET(LIBHQR_PKGCONFIG_LIBS "-lhqr") + SET(LIBHQR_PKGCONFIG_LIBS_PRIVATE "-lm") + SET(LIBHQR_PKGCONFIG_REQUIRED "") + SET(LIBHQR_PKGCONFIG_REQUIRED_PRIVATE "") + + CLEAN_LIB_LIST(LIBHQR) + + SET(_output_libhqr_file "${CMAKE_BINARY_DIR}/libhqr.pc") + CONFIGURE_FILE( + "${CMAKE_CURRENT_SOURCE_DIR}/lib/pkgconfig/libhqr.pc.in" + "${_output_libhqr_file}" + @ONLY + ) + INSTALL( + FILES ${_output_libhqr_file} + DESTINATION lib/pkgconfig + ) +ENDMACRO(GENERATE_PKGCONFIG_FILE) + +## +## @end file GenPkgConfig.cmake +## diff --git a/lib/pkgconfig/libhqr.pc.in b/lib/pkgconfig/libhqr.pc.in new file mode 100644 index 0000000..051384e --- /dev/null +++ b/lib/pkgconfig/libhqr.pc.in @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${exec_prefix}/include/libhqr + +Name: libhqr +Description: Build and Visualize Tree of Hierachical QR Factorization +Version: @LIBHQR_VERSION_MAJOR@.@LIBHQR_VERSION_MINOR@.@LIBHQR_VERSION_MICRO@ +Cflags: -I${includedir} +Libs: -L${libdir} @LIBHQR_PKGCONFIG_LIBS@ +Libs.private: @LIBHQR_PKGCONFIG_LIBS_PRIVATE@ +Requires: @LIBHQR_PKGCONFIG_REQUIRED@ +Requires.private: @LIBHQR_PKGCONFIG_REQUIRED_PRIVATE@ diff --git a/testings/CMakeLists.txt b/testings/CMakeLists.txt index 88d0224..1a184db 100644 --- a/testings/CMakeLists.txt +++ b/testings/CMakeLists.txt @@ -25,7 +25,11 @@ foreach (_file ${TESTINGS}) ${_file} common.c) target_link_libraries(${_name_we} hqr) - install(TARGETS ${_name_we} RUNTIME DESTINATION examples ) - install(FILES ${_file} DESTINATION examples ) + install( + TARGETS ${_name_we} + RUNTIME DESTINATION lib/libhqr/examples ) + install( + FILES ${_file} + DESTINATION lib/libhqr/examples ) endforeach() -- GitLab