File: FindHTSlib.cmake

package info (click to toggle)
metabat 2.18-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 972 kB
  • sloc: cpp: 10,869; sh: 422; python: 297; perl: 163; makefile: 19; ansic: 11
file content (145 lines) | stat: -rw-r--r-- 4,991 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# * Try to find htslib Once done, this will define
#
# htslib_FOUND - system has htslib htslib_INCLUDE_DIRS - the htslib include directories
# htslib_LIBRARIES - link these to use htslib
#
# This code was modified from
# https://github.com/genome/build-common/blob/master/cmake/FindHTSlib.cmake Source:
# https://github.com/luntergroup/octopus/blob/develop/build/cmake/modules/FindHTSlib.cmake

# A simple wrapper to make pkg-config searches a bit easier. Works the same as CMake's internal
# pkg_check_modules but is always quiet.
macro(libfind_pkg_check_modules)
  find_package(PkgConfig QUIET)
  if(PKG_CONFIG_FOUND)
    pkg_check_modules(${ARGN} QUIET)
  endif()
endmacro()

macro(libfind_package PREFIX)
  set(LIBFIND_PACKAGE_ARGS ${ARGN})
  if(${PREFIX}_FIND_QUIETLY)
    set(LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET)
  endif(${PREFIX}_FIND_QUIETLY)
  if(${PREFIX}_FIND_REQUIRED)
    set(LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED)
  endif(${PREFIX}_FIND_REQUIRED)
  find_package(${LIBFIND_PACKAGE_ARGS})
endmacro(libfind_package)

macro(libfind_process PREFIX)
  # Skip processing if already processed during this run
  if(NOT ${PREFIX}_FOUND)
    # Start with the assumption that the library was found
    set(${PREFIX}_FOUND TRUE)

    # Process all includes and set _FOUND to false if any are missing
    foreach(i ${${PREFIX}_PROCESS_INCLUDES})
      if(${i})
        set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}})
        mark_as_advanced(${i})
      else(${i})
        set(${PREFIX}_FOUND FALSE)
      endif(${i})
    endforeach(i)

    # Process all libraries and set _FOUND to false if any are missing
    foreach(i ${${PREFIX}_PROCESS_LIBS})
      if(${i})
        set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}})
        mark_as_advanced(${i})
      else(${i})
        set(${PREFIX}_FOUND FALSE)
      endif(${i})
    endforeach(i)

    # Print message and/or exit on fatal error
    if(${PREFIX}_FOUND)
      if(NOT ${PREFIX}_FIND_QUIETLY)
        message(STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}")
      endif(NOT ${PREFIX}_FIND_QUIETLY)
    else(${PREFIX}_FOUND)
      if(${PREFIX}_FIND_REQUIRED)
        foreach(i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS})
          message("${i}=${${i}}")
        endforeach(i)
        message(
          FATAL_ERROR
            "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, use ccmake to set the missing variables manually."
        )
      endif(${PREFIX}_FIND_REQUIRED)
    endif(${PREFIX}_FOUND)
  endif(NOT ${PREFIX}_FOUND)
endmacro(libfind_process)

set(HTSLIB_SEARCH_DIRS ${HTSLIB_SEARCH_DIRS} $ENV{HTSLIB_ROOT} ${HTSLIB_ROOT})

if(NOT HTSlib_NO_SYSTEM_PATHS)
  set(HTSLIB_SEARCH_DIRS ${HTSLIB_SEARCH_DIRS} /usr /usr/local)
endif()

set(_htslib_ver_path "htslib-${htslib_FIND_VERSION}")

# Use pkg-config to get hints about paths
libfind_pkg_check_modules(HTSLIB_PKGCONF htslib)

# Include dir
find_path(
  HTSlib_INCLUDE_DIR
  NAMES ${HTSLIB_ADDITIONAL_HEADERS} htslib/sam.h
  PATHS ${HTSLIB_SEARCH_DIRS} ${HTSLIB_PKGCONF_INCLUDE_DIRS}
  PATH_SUFFIXES include htslib/${_htslib_ver_path}
  NO_DEFAULT_PATH
)

if(HTSlib_USE_STATIC_LIBS)
  # Dependencies
  set(ZLIB_ROOT ${HTSLIB_ROOT})
  libfind_package(HTSlib ZLIB)
  set(BZip2_ROOT ${HTSLIB_ROOT})
  libfind_package(HTSlib BZip2)
  set(LibLZMA_ROOT ${HTSLIB_ROOT})
  libfind_package(HTSlib LibLZMA)
  set(CURL_ROOT ${HTSLIB_ROOT})
  libfind_package(HTSlib CURL)
  if(NOT APPLE)
    set(OpenSSL_ROOT ${HTSLIB_ROOT})
    libfind_package(HTSlib OpenSSL)
  endif()
  set(HTSlib_LIBRARY_names libhts.a)
else()
  set(HTSlib_LIBRARY_names libhts.so libhts.so.2 libhts.dylib libhts.2.dylib)
endif()

# Finally the library itself
find_library(
  HTSlib_LIBRARY
  NAMES ${HTSlib_LIBRARY_names}
  PATHS ${HTSlib_INCLUDE_DIR} ${HTSLIB_SEARCH_DIRS} ${HTSLIB_PKGCONF_LIBRARY_DIRS}
  NO_DEFAULT_PATH
  PATH_SUFFIXES lib lib64 lib/x86_64-linux-gnu ${_htslib_ver_path}
)

# Set the include dir variables and the libraries and let libfind_process do the rest. NOTE:
# Singular variables for this library, plural for libraries this lib depends on.
set(HTSlib_PROCESS_INCLUDES HTSlib_INCLUDE_DIR)
set(HTSlib_PROCESS_LIBS HTSlib_LIBRARY)

if(HTSlib_USE_STATIC_LIBS)
  set(HTSlib_PROCESS_INCLUDES ${HTSlib_PROCESS_INCLUDES} ZLIB_INCLUDE_DIR BZIP2_INCLUDE_DIR
                              LIBLZMA_INCLUDE_DIRS CURL_INCLUDE_DIRS
  )
  set(HTSlib_PROCESS_LIBS ${HTSlib_PROCESS_LIBS} ZLIB_LIBRARIES BZIP2_LIBRARIES LIBLZMA_LIBRARIES
                          CURL_LIBRARIES
  )
  if(NOT APPLE)
    set(HTSlib_PROCESS_INCLUDES ${HTSlib_PROCESS_INCLUDES} OPENSSL_INCLUDE_DIR)
    set(HTSlib_PROCESS_LIBS ${HTSlib_PROCESS_LIBS} OPENSSL_LIBRARIES)
  endif()
endif()

libfind_process(HTSlib)

message(STATUS "   HTSlib include dirs: ${HTSlib_INCLUDE_DIRS}")
message(STATUS "   HTSlib libraries: ${HTSlib_LIBRARIES}")
message(STATUS " HTSLIB FOUND: ${HTSlib_FOUND} ")