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