Skip to content
Bitcoin Roots

v29.4-roots.2 · Commit 1: [PATCH 01/21] build: port platform and dependency support

cmake/module/FindLevelDB.cmake

Before: /dev/null · After: cmake/module/FindLevelDB.cmake

File metadata
new file mode 100644
index 0000000000000000000000000000000000000000..9360f1e14acd3e45e16223febd347ddd75bb7ee0

Download original patch · Release notes

Diff rows 1–117 of 117. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. Before is on the left; after is on the right. Unified view fits narrow screens more easily.

cmake/module/FindLevelDB.cmake ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (c) 2025-present The Bitcoin Roots developers
2
+ # Distributed under the MIT software license, see the accompanying
3
+ # file COPYING or https://opensource.org/license/mit/.
4
+
5
+ include(CheckSourceCompiles)
6
+ include(CMakePushCheckState)
7
+
8
+ message(CHECK_START "Looking for system LevelDB")
9
+
10
+ find_path(LevelDB_INCLUDE_DIR
11
+ NAMES leveldb/filter_policy.h
12
+ DOC "Path to LevelDB include directory (ie, the directory ABOVE leveldb/db.h)"
13
+ )
14
+ mark_as_advanced(LevelDB_INCLUDE_DIR)
15
+
16
+ find_path(LevelDB_MemEnv_INCLUDE_DIR
17
+ NAMES memenv.h
18
+ HINTS "${LevelDB_INCLUDE_DIR}/leveldb/helpers"
19
+ DOC "Path to include directory for MemEnv LevelDB helper (ie, the directory with memenv.h)"
20
+ )
21
+ mark_as_advanced(LevelDB_MemEnv_INCLUDE_DIR)
22
+
23
+ function(_try_leveldb_compile libs cachevar)
24
+ cmake_push_check_state(RESET)
25
+ list(APPEND CMAKE_REQUIRED_INCLUDES "${LevelDB_INCLUDE_DIR}")
26
+ list(APPEND CMAKE_REQUIRED_INCLUDES "${LevelDB_MemEnv_INCLUDE_DIR}")
27
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "${libs}")
28
+ set(CMAKE_REQUIRED_QUIET 1)
29
+ check_source_compiles(
30
+ CXX
31
+ [[
32
+ #include <leveldb/env.h>
33
+ #include <memenv.h>
34
+
35
+ int main() {
36
+ leveldb::Env *myenv = leveldb::NewMemEnv(leveldb::Env::Default());
37
+ delete myenv;
38
+ }
39
+ ]]
40
+ "${cachevar}"
41
+ )
42
+ cmake_pop_check_state()
43
+ endfunction()
44
+
45
+ function(find_leveldb_libs release_type suffixes _LevelDB_lib_hint)
46
+ find_library("LevelDB_LIBRARY_${release_type}"
47
+ NAMES leveldb
48
+ HINTS "${_LevelDB_lib_hint}"
49
+ PATH_SUFFIXES "${suffixes}"
50
+ )
51
+ mark_as_advanced("LevelDB_LIBRARY_${release_type}")
52
+
53
+ _try_leveldb_compile("${LevelDB_LIBRARY_${release_type}}" "LevelDB_memenv_works_without_helper_lib_${release_type}")
54
+ if(LevelDB_memenv_works_without_helper_lib_${release_type})
55
+ set("LevelDB_MemEnv_LIBRARY_${release_type}" "" CACHE STRING "")
56
+ set(LevelDB_MemEnv_FOUND ON CACHE INTERNAL "")
57
+ else()
58
+ find_library("LevelDB_MemEnv_LIBRARY_${release_type}"
59
+ NAMES memenv
60
+ HINTS "${_LevelDB_lib_hint}"
61
+ PATH_SUFFIXES "${suffixes}"
62
+ )
63
+
64
+ set(libs ${LevelDB_LIBRARY_${release_type}} ${LevelDB_MemEnv_LIBRARY_${release_type}})
65
+ _try_leveldb_compile("${libs}" "LevelDB_memenv_works_with_helper_lib_${release_type}")
66
+ if(NOT LevelDB_memenv_works_with_helper_lib_${release_type})
67
+ set(LevelDB_MemEnv_FOUND OFF CACHE INTERNAL "")
68
+ endif()
69
+ endif()
70
+ mark_as_advanced("LevelDB_MemEnv_LIBRARY_${release_type}")
71
+ endfunction()
72
+
73
+ get_filename_component(_LevelDB_lib_hint "${LevelDB_INCLUDE_DIR}" DIRECTORY)
74
+
75
+ find_leveldb_libs(RELEASE lib "${_LevelDB_lib_hint}")
76
+ find_leveldb_libs(DEBUG debug/lib "${_LevelDB_lib_hint}")
77
+
78
+ unset(_LevelDB_lib_hint)
79
+
80
+ include(SelectLibraryConfigurations)
81
+ select_library_configurations(LevelDB)
82
+ select_library_configurations(LevelDB_MemEnv)
83
+
84
+ include(FindPackageHandleStandardArgs)
85
+ find_package_handle_standard_args(LevelDB
86
+ REQUIRED_VARS LevelDB_LIBRARY LevelDB_INCLUDE_DIR LevelDB_MemEnv_INCLUDE_DIR LevelDB_MemEnv_FOUND
87
+ )
88
+
89
+ if(LevelDB_FOUND)
90
+ message(CHECK_PASS "found")
91
+ if(NOT TARGET leveldb)
92
+ add_library(leveldb UNKNOWN IMPORTED)
93
+ set_target_properties(leveldb PROPERTIES
94
+ INTERFACE_INCLUDE_DIRECTORIES "${LevelDB_INCLUDE_DIR};${LevelDB_MemEnv_INCLUDE_DIR}"
95
+ )
96
+ if(LevelDB_LIBRARY_RELEASE)
97
+ set_property(TARGET leveldb APPEND PROPERTY
98
+ IMPORTED_CONFIGURATIONS RELEASE
99
+ )
100
+ set_target_properties(leveldb PROPERTIES
101
+ IMPORTED_LOCATION_RELEASE "${LevelDB_LIBRARY_RELEASE}"
102
+ IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE "${LevelDB_MemEnv_LIBRARY_RELEASE}"
103
+ )
104
+ endif()
105
+ if(LevelDB_LIBRARY_DEBUG)
106
+ set_property(TARGET leveldb APPEND PROPERTY
107
+ IMPORTED_CONFIGURATIONS DEBUG
108
+ )
109
+ set_target_properties(leveldb PROPERTIES
110
+ IMPORTED_LOCATION_DEBUG "${LevelDB_LIBRARY_DEBUG}"
111
+ IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "${LevelDB_MemEnv_LIBRARY_DEBUG}"
112
+ )
113
+ endif()
114
+ endif()
115
+ else()
116
+ message(CHECK_FAIL "not found")
117
+ endif()