| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- # Copyright (c) 2023-present The Bitcoin Core developers
- # Distributed under the MIT software license, see the accompanying
- # file COPYING or https://opensource.org/license/mit/.
- #[=======================================================================[
- FindBerkeleyDB
- --------------
- Finds the Berkeley DB headers and library.
- Imported Targets
- ^^^^^^^^^^^^^^^^
- This module provides imported target ``BerkeleyDB::BerkeleyDB``, if
- Berkeley DB has been found.
- Result Variables
- ^^^^^^^^^^^^^^^^
- This module defines the following variables:
- ``BerkeleyDB_FOUND``
- "True" if Berkeley DB found.
- ``BerkeleyDB_VERSION``
- The MAJOR.MINOR version of Berkeley DB found.
- #]=======================================================================]
- set(_BerkeleyDB_homebrew_prefix)
- if(CMAKE_HOST_APPLE)
- find_program(HOMEBREW_EXECUTABLE brew)
- if(HOMEBREW_EXECUTABLE)
- # The Homebrew package manager installs the berkeley-db* packages as
- # "keg-only", which means they are not symlinked into the default prefix.
- # To find such a package, the find_path() and find_library() commands
- # need additional path hints that are computed by Homebrew itself.
- execute_process(
- COMMAND ${HOMEBREW_EXECUTABLE} --prefix [email protected]
- OUTPUT_VARIABLE _BerkeleyDB_homebrew_prefix
- ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- endif()
- endif()
- find_path(
- BerkeleyDB_INCLUDE_DIR
- NAMES db_cxx.h
- HINTS ${_BerkeleyDB_homebrew_prefix}/include
- PATH_SUFFIXES
- 4.8
- 48
- db4.8
- 4
- db4
- 5.3
- db5.3
- 5
- db5
- )
- mark_as_advanced(BerkeleyDB_INCLUDE_DIR)
- unset(_BerkeleyDB_homebrew_prefix)
- if(NOT BerkeleyDB_LIBRARY)
- if(VCPKG_TARGET_TRIPLET)
- # The vcpkg package manager installs the berkeleydb package with the same name
- # of release and debug libraries. Therefore, the default search paths set by
- # vcpkg's toolchain file cannot be used to search libraries as the debug one
- # will always be found.
- set(CMAKE_FIND_USE_CMAKE_PATH FALSE)
- endif()
- get_filename_component(
- _BerkeleyDB_lib_hint "${BerkeleyDB_INCLUDE_DIR}" DIRECTORY
- )
- find_library(
- BerkeleyDB_LIBRARY_RELEASE
- NAMES db_cxx-4.8
- db4_cxx
- db48
- db_cxx-5.3
- db_cxx-5
- db_cxx
- libdb48
- NAMES_PER_DIR
- HINTS ${_BerkeleyDB_lib_hint}
- PATH_SUFFIXES lib
- )
- mark_as_advanced(BerkeleyDB_LIBRARY_RELEASE)
- find_library(
- BerkeleyDB_LIBRARY_DEBUG
- NAMES db_cxx-4.8
- db4_cxx
- db48
- db_cxx-5.3
- db_cxx-5
- db_cxx
- libdb48
- NAMES_PER_DIR
- HINTS ${_BerkeleyDB_lib_hint}
- PATH_SUFFIXES debug/lib
- )
- mark_as_advanced(BerkeleyDB_LIBRARY_DEBUG)
- unset(_BerkeleyDB_lib_hint)
- unset(CMAKE_FIND_USE_CMAKE_PATH)
- include(SelectLibraryConfigurations)
- select_library_configurations(BerkeleyDB)
- # The select_library_configurations() command sets BerkeleyDB_FOUND, but we
- # want the one from the find_package_handle_standard_args() command below.
- unset(BerkeleyDB_FOUND)
- endif()
- if(BerkeleyDB_INCLUDE_DIR)
- file(STRINGS "${BerkeleyDB_INCLUDE_DIR}/db.h" _BerkeleyDB_version_strings
- REGEX "^#define[\t ]+DB_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+.*"
- )
- string(REGEX
- REPLACE ".*#define[\t ]+DB_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1"
- _BerkeleyDB_version_major "${_BerkeleyDB_version_strings}"
- )
- string(REGEX
- REPLACE ".*#define[\t ]+DB_VERSION_MINOR[ \t]+([0-9]+).*" "\\1"
- _BerkeleyDB_version_minor "${_BerkeleyDB_version_strings}"
- )
- string(REGEX
- REPLACE ".*#define[\t ]+DB_VERSION_PATCH[ \t]+([0-9]+).*" "\\1"
- _BerkeleyDB_version_patch "${_BerkeleyDB_version_strings}"
- )
- unset(_BerkeleyDB_version_strings)
- # The MAJOR.MINOR.PATCH version will be logged in the following find_package_handle_standard_args() command.
- set(_BerkeleyDB_full_version
- ${_BerkeleyDB_version_major}.${_BerkeleyDB_version_minor}.${_BerkeleyDB_version_patch}
- )
- set(BerkeleyDB_VERSION
- ${_BerkeleyDB_version_major}.${_BerkeleyDB_version_minor}
- )
- unset(_BerkeleyDB_version_major)
- unset(_BerkeleyDB_version_minor)
- unset(_BerkeleyDB_version_patch)
- endif()
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(
- BerkeleyDB
- REQUIRED_VARS BerkeleyDB_LIBRARY BerkeleyDB_INCLUDE_DIR
- VERSION_VAR _BerkeleyDB_full_version
- )
- unset(_BerkeleyDB_full_version)
- if(BerkeleyDB_FOUND AND NOT TARGET BerkeleyDB::BerkeleyDB)
- add_library(BerkeleyDB::BerkeleyDB UNKNOWN IMPORTED)
- set_target_properties(
- BerkeleyDB::BerkeleyDB PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
- "${BerkeleyDB_INCLUDE_DIR}"
- )
- if(BerkeleyDB_LIBRARY_RELEASE)
- set_property(
- TARGET BerkeleyDB::BerkeleyDB
- APPEND
- PROPERTY IMPORTED_CONFIGURATIONS RELEASE
- )
- set_target_properties(
- BerkeleyDB::BerkeleyDB PROPERTIES IMPORTED_LOCATION_RELEASE
- "${BerkeleyDB_LIBRARY_RELEASE}"
- )
- endif()
- if(BerkeleyDB_LIBRARY_DEBUG)
- set_property(
- TARGET BerkeleyDB::BerkeleyDB
- APPEND
- PROPERTY IMPORTED_CONFIGURATIONS DEBUG
- )
- set_target_properties(
- BerkeleyDB::BerkeleyDB PROPERTIES IMPORTED_LOCATION_DEBUG
- "${BerkeleyDB_LIBRARY_DEBUG}"
- )
- endif()
- endif()
|