Skip to content

Commit f5e7e3a

Browse files
committed
add CMake's option for bindings
1 parent 7e80989 commit f5e7e3a

File tree

4 files changed

+87
-44
lines changed

4 files changed

+87
-44
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ add_subdirectory(fdbbackup)
166166
add_subdirectory(contrib)
167167
add_subdirectory(tests)
168168
add_subdirectory(flowbench EXCLUDE_FROM_ALL)
169-
if(WITH_PYTHON)
169+
if(WITH_PYTHON AND WITH_C_BINDING)
170170
add_subdirectory(bindings)
171171
endif()
172172
if(WITH_DOCUMENTATION)

bindings/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ if(NOT OPEN_FOR_IDE)
33
# flow bindings currently doesn't support that
44
add_subdirectory(flow)
55
endif()
6-
add_subdirectory(python)
7-
if(WITH_JAVA)
6+
if(WITH_PYTHON_BINDING)
7+
add_subdirectory(python)
8+
endif()
9+
if(WITH_JAVA_BINDING)
810
add_subdirectory(java)
911
endif()
10-
if(WITH_GO AND NOT OPEN_FOR_IDE)
12+
if(WITH_GO_BINDING AND NOT OPEN_FOR_IDE)
1113
add_subdirectory(go)
1214
endif()
13-
if(WITH_RUBY)
15+
if(WITH_RUBY_BINDING)
1416
add_subdirectory(ruby)
1517
endif()
1618
if(NOT WIN32 AND NOT OPEN_FOR_IDE)

cmake/AddFdbTest.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ function(package_bindingtester)
330330
COMMENT "Copy Flow tester for bindingtester")
331331

332332
set(generated_binding_files python/fdb/fdboptions.py)
333-
if(WITH_JAVA)
333+
if(WITH_JAVA_BINDING)
334334
if(NOT FDB_RELEASE)
335335
set(prerelease_string "-PRERELEASE")
336336
else()
@@ -347,7 +347,7 @@ function(package_bindingtester)
347347
set(generated_binding_files ${generated_binding_files} java/foundationdb-tests.jar)
348348
endif()
349349

350-
if(WITH_GO AND NOT OPEN_FOR_IDE)
350+
if(WITH_GO_BINDING AND NOT OPEN_FOR_IDE)
351351
add_dependencies(copy_binding_output_files fdb_go_tester fdb_go)
352352
add_custom_command(
353353
TARGET copy_binding_output_files

cmake/FDBComponents.cmake

Lines changed: 78 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,6 @@ else()
4747
endif()
4848
endif()
4949

50-
################################################################################
51-
# Java Bindings
52-
################################################################################
53-
54-
set(WITH_JAVA OFF)
55-
find_package(JNI 1.8)
56-
find_package(Java 1.8 COMPONENTS Development)
57-
# leave FreeBSD JVM compat for later
58-
if(JNI_FOUND AND Java_FOUND AND Java_Development_FOUND AND NOT (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD"))
59-
set(WITH_JAVA ON)
60-
include(UseJava)
61-
enable_language(Java)
62-
else()
63-
set(WITH_JAVA OFF)
64-
endif()
65-
6650
################################################################################
6751
# Python Bindings
6852
################################################################################
@@ -75,12 +59,57 @@ else()
7559
set(WITH_PYTHON OFF)
7660
endif()
7761

62+
option(BUILD_PYTHON_BINDING "build python binding" ON)
63+
if(NOT BUILD_PYTHON_BINDING OR NOT WITH_PYTHON)
64+
set(WITH_PYTHON_BINDING OFF)
65+
else()
66+
if(WITH_PYTHON)
67+
set(WITH_PYTHON_BINDING ON)
68+
else()
69+
#message(FATAL_ERROR "Could not found a suitable python interpreter")
70+
set(WITH_PYTHON_BINDING OFF)
71+
endif()
72+
endif()
73+
74+
################################################################################
75+
# C Bindings
76+
################################################################################
77+
78+
option(BUILD_C_BINDING "build C binding" ON)
79+
if(BUILD_C_BINDING AND WITH_PYTHON)
80+
set(WITH_C_BINDING ON)
81+
else()
82+
set(WITH_C_BINDING OFF)
83+
endif()
84+
85+
################################################################################
86+
# Java Bindings
87+
################################################################################
88+
89+
option(BUILD_JAVA_BINDING "build java binding" ON)
90+
if(NOT BUILD_JAVA_BINDING OR NOT WITH_C_BINDING)
91+
set(WITH_JAVA_BINDING OFF)
92+
else()
93+
set(WITH_JAVA_BINDING OFF)
94+
find_package(JNI 1.8)
95+
find_package(Java 1.8 COMPONENTS Development)
96+
# leave FreeBSD JVM compat for later
97+
if(JNI_FOUND AND Java_FOUND AND Java_Development_FOUND AND NOT (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") AND WITH_C_BINDING)
98+
set(WITH_JAVA_BINDING ON)
99+
include(UseJava)
100+
enable_language(Java)
101+
else()
102+
set(WITH_JAVA_BINDING OFF)
103+
endif()
104+
endif()
105+
78106
################################################################################
79107
# Pip
80108
################################################################################
81109

110+
option(BUILD_DOCUMENTATION "build documentation" ON)
82111
find_package(Python3 COMPONENTS Interpreter)
83-
if (Python3_Interpreter_FOUND)
112+
if (WITH_PYTHON AND Python3_Interpreter_FOUND AND BUILD_DOCUMENTATION)
84113
set(WITH_DOCUMENTATION ON)
85114
else()
86115
set(WITH_DOCUMENTATION OFF)
@@ -90,27 +119,37 @@ endif()
90119
# GO
91120
################################################################################
92121

93-
find_program(GO_EXECUTABLE go)
94-
# building the go binaries is currently not supported on Windows
95-
if(GO_EXECUTABLE AND NOT WIN32)
96-
set(WITH_GO ON)
122+
option(BUILD_GO_BINDING "build go binding" ON)
123+
if(NOT BUILD_GO_BINDING OR NOT BUILD_C_BINDING)
124+
set(WITH_GO_BINDING OFF)
97125
else()
98-
set(WITH_GO OFF)
99-
endif()
100-
if (USE_SANITIZER)
101-
# Disable building go for sanitizers, since _stacktester doesn't link properly
102-
set(WITH_GO OFF)
126+
find_program(GO_EXECUTABLE go)
127+
# building the go binaries is currently not supported on Windows
128+
if(GO_EXECUTABLE AND NOT WIN32 AND WITH_C_BINDING)
129+
set(WITH_GO_BINDING ON)
130+
else()
131+
set(WITH_GO_BINDING OFF)
132+
endif()
133+
if (USE_SANITIZER)
134+
# Disable building go for sanitizers, since _stacktester doesn't link properly
135+
set(WITH_GO_BINDING OFF)
136+
endif()
103137
endif()
104138

105139
################################################################################
106140
# Ruby
107141
################################################################################
108142

109-
find_program(GEM_EXECUTABLE gem)
110-
set(WITH_RUBY OFF)
111-
if(GEM_EXECUTABLE)
112-
set(GEM_COMMAND ${RUBY_EXECUTABLE} ${GEM_EXECUTABLE})
113-
set(WITH_RUBY ON)
143+
option(BUILD_RUBY_BINDING "build ruby binding" ON)
144+
if(NOT BUILD_RUBY_BINDING OR NOT BUILD_C_BINDING)
145+
set(WITH_RUBY_BINDING OFF)
146+
else()
147+
find_program(GEM_EXECUTABLE gem)
148+
set(WITH_RUBY_BINDING OFF)
149+
if(GEM_EXECUTABLE AND WITH_C_BINDING)
150+
set(GEM_COMMAND ${RUBY_EXECUTABLE} ${GEM_EXECUTABLE})
151+
set(WITH_RUBY_BINDING ON)
152+
endif()
114153
endif()
115154

116155
################################################################################
@@ -160,20 +199,22 @@ function(print_components)
160199
message(STATUS "=========================================")
161200
message(STATUS " Components Build Overview ")
162201
message(STATUS "=========================================")
163-
message(STATUS "Build Java Bindings: ${WITH_JAVA}")
202+
message(STATUS "Build Bindings (depends on Python): ${WITH_PYTHON}")
203+
message(STATUS "Build C Bindings: ${WITH_C_BINDING}")
204+
message(STATUS "Build Python Bindings: ${WITH_PYTHON_BINDING}")
205+
message(STATUS "Build Java Bindings: ${WITH_JAVA_BINDING}")
206+
message(STATUS "Build Go bindings: ${WITH_GO_BINDING}")
207+
message(STATUS "Build Ruby bindings: ${WITH_RUBY_BINDING}")
164208
message(STATUS "Build with TLS support: ${WITH_TLS}")
165-
message(STATUS "Build Go bindings: ${WITH_GO}")
166-
message(STATUS "Build Ruby bindings: ${WITH_RUBY}")
167-
message(STATUS "Build Python sdist (make package): ${WITH_PYTHON}")
168209
message(STATUS "Build Documentation (make html): ${WITH_DOCUMENTATION}")
169-
message(STATUS "Build Bindings (depends on Python): ${WITH_PYTHON}")
210+
message(STATUS "Build Python sdist (make package): ${WITH_PYTHON_BINDING}")
170211
message(STATUS "Configure CTest (depends on Python): ${WITH_PYTHON}")
171212
message(STATUS "Build with RocksDB: ${WITH_ROCKSDB_EXPERIMENTAL}")
172213
message(STATUS "=========================================")
173214
endfunction()
174215

175216
if(FORCE_ALL_COMPONENTS)
176-
if(NOT WITH_JAVA OR NOT WITH_TLS OR NOT WITH_GO OR NOT WITH_RUBY OR NOT WITH_PYTHON OR NOT WITH_DOCUMENTATION)
217+
if(NOT WITH_C_BINDING OR NOT WITH_JAVA_BINDING OR NOT WITH_TLS OR NOT WITH_GO_BINDING OR NOT WITH_RUBY_BINDING OR NOT WITH_PYTHON_BINDING OR NOT WITH_DOCUMENTATION)
177218
print_components()
178219
message(FATAL_ERROR "FORCE_ALL_COMPONENTS is set but not all dependencies could be found")
179220
endif()

0 commit comments

Comments
 (0)