|
3 | 3 | # |
4 | 4 | # LIBSSH_FOUND - system has LibSSH |
5 | 5 | # LIBSSH_INCLUDE_DIRS - the LibSSH include directory |
6 | | -# LIBSSH_LIBRARY_DIR - the LibSSH library directory |
7 | 6 | # LIBSSH_LIBRARIES - link these to use LibSSH |
| 7 | +# LIBSSH_VERSION - |
8 | 8 | # |
9 | | -# Copyright (c) 2009 Andreas Schneider <asn@cryptomilk.org> |
| 9 | +# Author Michal Vasko <mvasko@cesnet.cz> |
| 10 | +# Copyright (c) 2020 CESNET, z.s.p.o. |
10 | 11 | # |
11 | 12 | # Redistribution and use in source and binary forms, with or without |
12 | 13 | # modification, are permitted provided that the following conditions |
|
31 | 32 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
32 | 33 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
33 | 34 | # |
| 35 | +include(FindPackageHandleStandardArgs) |
34 | 36 |
|
35 | | -if(LIBSSH_LIBRARY_DIR AND LIBSSH_LIBRARIES AND LIBSSH_INCLUDE_DIRS) |
36 | | - # in cache already |
37 | | - set(LIBSSH_FOUND TRUE) |
| 37 | +if(LIBSSH_LIBRARIES AND LIBSSH_INCLUDE_DIRS) |
| 38 | + # in cache already |
| 39 | + set(LIBSSH_FOUND TRUE) |
38 | 40 | else() |
39 | | - |
40 | | - find_path(LIBSSH_INCLUDE_DIR |
41 | | - NAMES |
42 | | - libssh/libssh.h |
43 | | - PATHS |
44 | | - /usr/include |
45 | | - /usr/local/include |
46 | | - /opt/local/include |
47 | | - /sw/include |
48 | | - ${CMAKE_INCLUDE_PATH} |
49 | | - ${CMAKE_INSTALL_PREFIX}/include |
50 | | - ) |
51 | | - |
52 | | - find_library(LIBSSH_LIBRARY |
53 | | - NAMES |
54 | | - ssh.so |
55 | | - libssh.so |
56 | | - libssh.dylib |
57 | | - PATHS |
58 | | - /usr/lib |
59 | | - /usr/local/lib |
60 | | - /opt/local/lib |
61 | | - /sw/lib |
62 | | - ${CMAKE_LIBRARY_PATH} |
63 | | - ${CMAKE_INSTALL_PREFIX}/lib |
64 | | - ) |
65 | | - |
66 | | - if(LIBSSH_INCLUDE_DIR AND LIBSSH_LIBRARY) |
67 | | - set(SSH_FOUND TRUE) |
68 | | - endif() |
69 | | - |
70 | | - set(LIBSSH_INCLUDE_DIRS ${LIBSSH_INCLUDE_DIR}) |
71 | | - set(LIBSSH_LIBRARIES ${LIBSSH_LIBRARY}) |
72 | | - |
73 | | - if (SSH_FOUND) |
74 | | - string(REPLACE "libssh.so" "" |
75 | | - LIBSSH_LIBRARY_DIR |
76 | | - ${LIBSSH_LIBRARY} |
77 | | - ) |
78 | | - string(REPLACE "libssh.dylib" "" |
79 | | - LIBSSH_LIBRARY_DIR |
80 | | - ${LIBSSH_LIBRARY_DIR} |
| 41 | + find_path(LIBSSH_INCLUDE_DIR |
| 42 | + NAMES |
| 43 | + libssh/libssh.h |
| 44 | + PATHS |
| 45 | + /usr/include |
| 46 | + /usr/local/include |
| 47 | + /opt/local/include |
| 48 | + /sw/include |
| 49 | + ${CMAKE_INCLUDE_PATH} |
| 50 | + ${CMAKE_INSTALL_PREFIX}/include |
81 | 51 | ) |
82 | | - string(REPLACE "ssh.so" "" |
83 | | - LIBSSH_LIBRARY_DIR |
84 | | - ${LIBSSH_LIBRARY_DIR} |
| 52 | + |
| 53 | + find_library(LIBSSH_LIBRARY |
| 54 | + NAMES |
| 55 | + ssh.so |
| 56 | + libssh.so |
| 57 | + libssh.dylib |
| 58 | + PATHS |
| 59 | + /usr/lib |
| 60 | + /usr/local/lib |
| 61 | + /opt/local/lib |
| 62 | + /sw/lib |
| 63 | + ${CMAKE_LIBRARY_PATH} |
| 64 | + ${CMAKE_INSTALL_PREFIX}/lib |
85 | 65 | ) |
86 | 66 |
|
87 | | - if (LibSSH_FIND_VERSION) |
88 | | - file(STRINGS ${LIBSSH_INCLUDE_DIR}/libssh/libssh.h LIBSSH_VERSION_MAJOR |
89 | | - REGEX "#define[ ]+LIBSSH_VERSION_MAJOR[ ]+[0-9]+") |
90 | | - # Older versions of libssh like libssh-0.2 have LIBSSH_VERSION but not LIBSSH_VERSION_MAJOR |
91 | | - if (LIBSSH_VERSION_MAJOR) |
92 | | - string(REGEX MATCH "[0-9]+" LIBSSH_VERSION_MAJOR ${LIBSSH_VERSION_MAJOR}) |
93 | | - file(STRINGS ${LIBSSH_INCLUDE_DIR}/libssh/libssh.h LIBSSH_VERSION_MINOR |
94 | | - REGEX "#define[ ]+LIBSSH_VERSION_MINOR[ ]+[0-9]+") |
95 | | - string(REGEX MATCH "[0-9]+" LIBSSH_VERSION_MINOR ${LIBSSH_VERSION_MINOR}) |
96 | | - file(STRINGS ${LIBSSH_INCLUDE_DIR}/libssh/libssh.h LIBSSH_VERSION_PATCH |
97 | | - REGEX "#define[ ]+LIBSSH_VERSION_MICRO[ ]+[0-9]+") |
98 | | - string(REGEX MATCH "[0-9]+" LIBSSH_VERSION_PATCH ${LIBSSH_VERSION_PATCH}) |
| 67 | + if(LIBSSH_INCLUDE_DIR AND LIBSSH_LIBRARY) |
| 68 | + # learn libssh version |
| 69 | + if(EXISTS ${LIBSSH_INCLUDE_DIR}/libssh/libssh_version.h) |
| 70 | + set(LIBSSH_HEADER_PATH ${LIBSSH_INCLUDE_DIR}/libssh/libssh_version.h) |
| 71 | + else() |
| 72 | + set(LIBSSH_HEADER_PATH ${LIBSSH_INCLUDE_DIR}/libssh/libssh.h) |
| 73 | + endif() |
| 74 | + file(STRINGS ${LIBSSH_HEADER_PATH} LIBSSH_VERSION_MAJOR |
| 75 | + REGEX "#define[ ]+LIBSSH_VERSION_MAJOR[ ]+[0-9]+") |
| 76 | + if(NOT LIBSSH_VERSION_MAJOR) |
| 77 | + message(STATUS "LIBSSH_VERSION_MAJOR not found, assuming libssh is too old and cannot be used!") |
| 78 | + set(LIBSSH_INCLUDE_DIR "LIBSSH_INCLUDE_DIR-NOTFOUND") |
| 79 | + set(LIBSSH_LIBRARY "LIBSSH_LIBRARY-NOTFOUND") |
| 80 | + else() |
| 81 | + string(REGEX MATCH "[0-9]+" LIBSSH_VERSION_MAJOR ${LIBSSH_VERSION_MAJOR}) |
| 82 | + file(STRINGS ${LIBSSH_HEADER_PATH} LIBSSH_VERSION_MINOR |
| 83 | + REGEX "#define[ ]+LIBSSH_VERSION_MINOR[ ]+[0-9]+") |
| 84 | + string(REGEX MATCH "[0-9]+" LIBSSH_VERSION_MINOR ${LIBSSH_VERSION_MINOR}) |
| 85 | + file(STRINGS ${LIBSSH_HEADER_PATH} LIBSSH_VERSION_PATCH |
| 86 | + REGEX "#define[ ]+LIBSSH_VERSION_MICRO[ ]+[0-9]+") |
| 87 | + string(REGEX MATCH "[0-9]+" LIBSSH_VERSION_PATCH ${LIBSSH_VERSION_PATCH}) |
99 | 88 |
|
100 | | - set(LibSSH_VERSION ${LIBSSH_VERSION_MAJOR}.${LIBSSH_VERSION_MINOR}.${LIBSSH_VERSION_PATCH}) |
| 89 | + set(LIBSSH_VERSION ${LIBSSH_VERSION_MAJOR}.${LIBSSH_VERSION_MINOR}.${LIBSSH_VERSION_PATCH}) |
101 | 90 |
|
102 | | - include(FindPackageVersionCheck) |
103 | | - find_package_version_check(LibSSH DEFAULT_MSG) |
104 | | - else() |
105 | | - message(STATUS "LIBSSH_VERSION_MAJOR not found in ${LIBSSH_INCLUDE_DIR}/libssh/libssh.h, assuming libssh is too old") |
106 | | - set(LIBSSH_FOUND FALSE) |
107 | | - endif() |
| 91 | + if(LIBSSH_VERSION VERSION_LESS 0.8.0) |
| 92 | + # libssh_threads also needs to be linked for these versions |
| 93 | + string(REPLACE "libssh.so" "" |
| 94 | + LIBSSH_THREADS_LIBRARY |
| 95 | + ${LIBSSH_LIBRARY} |
| 96 | + ) |
| 97 | + string(REPLACE "libssh.dylib" "" |
| 98 | + LIBSSH_THREADS_LIBRARY |
| 99 | + ${LIBSSH_THREADS_LIBRARY} |
| 100 | + ) |
| 101 | + string(REPLACE "ssh.so" "" |
| 102 | + LIBSSH_THREADS_LIBRARY |
| 103 | + ${LIBSSH_THREADS_LIBRARY} |
| 104 | + ) |
| 105 | + endif() |
| 106 | + endif() |
108 | 107 | endif() |
109 | | - endif() |
110 | | - |
111 | | - # If the version is too old, but libs and includes are set, |
112 | | - # find_package_handle_standard_args will set LIBSSH_FOUND to TRUE again, |
113 | | - # so we need this if() here. |
114 | | - if(LIBSSH_FOUND) |
115 | | - include(FindPackageHandleStandardArgs) |
116 | | - find_package_handle_standard_args(LibSSH DEFAULT_MSG LIBSSH_LIBRARY_DIR LIBSSH_INCLUDE_DIRS) |
117 | | - endif() |
118 | 108 |
|
119 | | - # show the LIBSSH_INCLUDE_DIRS, LIBSSH_LIBRARIES, and LIBSSH_LIBRARY_DIR variables only in the advanced view |
120 | | - mark_as_advanced(LIBSSH_INCLUDE_DIRS LIBSSH_LIBRARY_DIR LIBSSH_LIBRARIES) |
| 109 | + set(LIBSSH_INCLUDE_DIRS ${LIBSSH_INCLUDE_DIR}) |
| 110 | + set(LIBSSH_LIBRARIES ${LIBSSH_LIBRARY} ${LIBSSH_THREADS_LIBRARY}) |
| 111 | + mark_as_advanced(LIBSSH_INCLUDE_DIRS LIBSSH_LIBRARIES) |
121 | 112 |
|
| 113 | + find_package_handle_standard_args(LibSSH FOUND_VAR LIBSSH_FOUND |
| 114 | + REQUIRED_VARS LIBSSH_INCLUDE_DIRS LIBSSH_LIBRARIES |
| 115 | + VERSION_VAR LIBSSH_VERSION) |
122 | 116 | endif() |
123 | 117 |
|
0 commit comments