CodeCommitsIssuesPull requestsActionsInsightsSecurity
452a24efbb642ccbceb4d5bb7c3256312b76e043

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

cmake/Modules/FindODBC.cmake

147lines · modecode

1# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2# file Copyright.txt or https://cmake.org/licensing for details.
3
4#.rst:
5# FindMySQL
6# -------
7#
8# Find ODBC Runtime
9#
10# This will define the following variables::
11#
12# ODBC_FOUND - True if the system has the libraries
13# ODBC_INCLUDE_DIRS - where to find the headers
14# ODBC_LIBRARIES - where to find the libraries
15# ODBC_DEFINITIONS - compile definitons
16#
17# Hints:
18# Set ``ODBC_ROOT_DIR`` to the root directory of an installation.
19#
20include(FindPackageHandleStandardArgs)
21
22find_package(PkgConfig QUIET)
23pkg_check_modules(PC_ODBC QUIET odbc)
24
25if(WIN32)
26 get_filename_component(kit_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot]" REALPATH)
27 get_filename_component(kit81_dir "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot81]" REALPATH)
28endif()
29
30find_path(ODBC_INCLUDE_DIR
31 NAMES sql.h
32 HINTS
33 ${ODBC_ROOT_DIR}/include
34 ${ODBC_ROOT_INCLUDE_DIRS}
35 PATHS
36 ${PC_ODBC_INCLUDE_DIRS}
37 /usr/include
38 /usr/local/include
39 /usr/local/odbc/include
40 /usr/local/iodbc/include
41 "C:/Program Files/ODBC/include"
42 "C:/Program Files/Microsoft SDKs/Windows/v7.0/include"
43 "C:/Program Files/Microsoft SDKs/Windows/v6.0a/include"
44 "C:/ODBC/include"
45 "${kit_dir}/Include/um"
46 "${kit81_dir}/Include/um"
47 PATH_SUFFIXES
48 odbc
49 iodbc
50 DOC "Specify the directory containing sql.h."
51)
52
53if(NOT ODBC_INCLUDE_DIR AND WIN32)
54 set(ODBC_INCLUDE_DIR "")
55else()
56 set(REQUIRED_INCLUDE_DIR ODBC_INCLUDE_DIR)
57endif()
58
59if(WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
60 set(WIN_ARCH x64)
61elseif(WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 4)
62 set(WIN_ARCH x86)
63endif()
64
65find_library(ODBC_LIBRARY
66 NAMES unixodbc iodbc odbc odbc32
67 HINTS
68 ${ODBC_ROOT_DIR}/lib
69 ${ODBC_ROOT_LIBRARY_DIRS}
70 PATHS
71 ${PC_ODBC_LIBRARY_DIRS}
72 /usr/lib
73 /usr/local/lib
74 /usr/local/odbc/lib
75 /usr/local/iodbc/lib
76 "C:/Program Files/ODBC/lib"
77 "C:/ODBC/lib/debug"
78 "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib"
79 "${kit81_dir}/Lib/winv6.3/um"
80 "${kit_dir}/Lib/win8/um"
81 PATH_SUFIXES
82 odbc
83 ${WIN_ARCH}
84 DOC "Specify the ODBC driver manager library here."
85)
86
87if(NOT ODBC_LIBRARY AND WIN32)
88 # List names of ODBC libraries on Windows
89 set(ODBC_LIBRARY odbc32.lib)
90endif()
91
92# List additional libraries required to use ODBC library
93if(WIN32 AND MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Intel")
94 set(_odbc_required_libs_names odbccp32;ws2_32)
95endif()
96foreach(_lib_name IN LISTS _odbc_required_libs_names)
97 find_library(_lib_path
98 NAMES ${_lib_name}
99 HINTS
100 ${ODBC_ROOT_DIR}/lib
101 ${ODBC_ROOT_LIBRARY_DIRS}
102 PATHS
103 ${PC_ODBC_LIBRARY_DIRS}
104 /usr/lib
105 /usr/local/lib
106 /usr/local/odbc/lib
107 /usr/local/iodbc/lib
108 "C:/Program Files/ODBC/lib"
109 "C:/ODBC/lib/debug"
110 "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib"
111 PATH_SUFFIXES
112 odbc
113 )
114 if (_lib_path)
115 list(APPEND _odbc_required_libs_paths ${_lib_path})
116 endif()
117 unset(_lib_path CACHE)
118endforeach()
119unset(_odbc_lib_paths)
120unset(_odbc_required_libs_names)
121
122
123find_package_handle_standard_args(ODBC
124 FOUND_VAR ODBC_FOUND
125 REQUIRED_VARS
126 ODBC_LIBRARY
127 ${REQUIRED_INCLUDE_DIR}
128 VERSION_VAR ODBC_VERSION
129)
130
131if(ODBC_FOUND)
132 set(ODBC_LIBRARIES ${ODBC_LIBRARY} ${_odbc_required_libs_paths})
133 set(ODBC_INCLUDE_DIRS ${ODBC_INCLUDE_DIR})
134 set(ODBC_DEFINITIONS ${PC_ODBC_CFLAGS_OTHER})
135endif()
136
137if(ODBC_FOUND AND NOT TARGET ODBC::ODBC)
138 add_library(ODBC::ODBC UNKNOWN IMPORTED)
139 set_target_properties(ODBC::ODBC PROPERTIES
140 IMPORTED_LOCATION "${ODBC_LIBRARY}"
141 INTERFACE_LINK_LIBRARIES "${_odbc_required_libs_paths}"
142 INTERFACE_COMPILE_OPTIONS "${PC_ODBC_CFLAGS_OTHER}"
143 INTERFACE_INCLUDE_DIRECTORIES "${ODBC_INCLUDE_DIR}"
144 )
145endif()
146
147mark_as_advanced(ODBC_LIBRARY ODBC_INCLUDE_DIR)