Skip to content

Commit bd75251

Browse files
committed
add CMake's option for bindings
1 parent 876c6d7 commit bd75251

File tree

4 files changed

+87
-45
lines changed

4 files changed

+87
-45
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ add_subdirectory(fdbbackup)
171171
add_subdirectory(contrib)
172172
add_subdirectory(tests)
173173
add_subdirectory(flowbench EXCLUDE_FROM_ALL)
174-
if(WITH_PYTHON)
174+
if(WITH_PYTHON AND WITH_C_BINDING)
175175
add_subdirectory(bindings)
176176
endif()
177177
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
add_subdirectory(c)
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
@@ -352,7 +352,7 @@ function(package_bindingtester)
352352
COMMENT "Copy Flow tester for bindingtester")
353353

354354
set(generated_binding_files python/fdb/fdboptions.py)
355-
if(WITH_JAVA)
355+
if(WITH_JAVA_BINDING)
356356
if(NOT FDB_RELEASE)
357357
set(prerelease_string "-PRERELEASE")
358358
else()
@@ -369,7 +369,7 @@ function(package_bindingtester)
369369
set(generated_binding_files ${generated_binding_files} java/foundationdb-tests.jar)
370370
endif()
371371

372-
if(WITH_GO AND NOT OPEN_FOR_IDE)
372+
if(WITH_GO_BINDING AND NOT OPEN_FOR_IDE)
373373
add_dependencies(copy_binding_output_files fdb_go_tester fdb_go)
374374
add_custom_command(
375375
TARGET copy_binding_output_files

cmake/FDBComponents.cmake

Lines changed: 78 additions & 38 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,56 @@ 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

82-
find_package(Python3 COMPONENTS Interpreter)
83-
if (Python3_Interpreter_FOUND)
110+
option(BUILD_DOCUMENTATION "build documentation" ON)
111+
if (BUILD_DOCUMENTATION)
84112
set(WITH_DOCUMENTATION ON)
85113
else()
86114
set(WITH_DOCUMENTATION OFF)
@@ -90,27 +118,37 @@ endif()
90118
# GO
91119
################################################################################
92120

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)
121+
option(BUILD_GO_BINDING "build go binding" ON)
122+
if(NOT BUILD_GO_BINDING OR NOT BUILD_C_BINDING)
123+
set(WITH_GO_BINDING OFF)
97124
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)
125+
find_program(GO_EXECUTABLE go)
126+
# building the go binaries is currently not supported on Windows
127+
if(GO_EXECUTABLE AND NOT WIN32 AND WITH_C_BINDING)
128+
set(WITH_GO_BINDING ON)
129+
else()
130+
set(WITH_GO_BINDING OFF)
131+
endif()
132+
if (USE_SANITIZER)
133+
# Disable building go for sanitizers, since _stacktester doesn't link properly
134+
set(WITH_GO_BINDING OFF)
135+
endif()
103136
endif()
104137

105138
################################################################################
106139
# Ruby
107140
################################################################################
108141

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)
142+
option(BUILD_RUBY_BINDING "build ruby binding" ON)
143+
if(NOT BUILD_RUBY_BINDING OR NOT BUILD_C_BINDING)
144+
set(WITH_RUBY_BINDING OFF)
145+
else()
146+
find_program(GEM_EXECUTABLE gem)
147+
set(WITH_RUBY_BINDING OFF)
148+
if(GEM_EXECUTABLE AND WITH_C_BINDING)
149+
set(GEM_COMMAND ${RUBY_EXECUTABLE} ${GEM_EXECUTABLE})
150+
set(WITH_RUBY_BINDING ON)
151+
endif()
114152
endif()
115153

116154
################################################################################
@@ -160,20 +198,22 @@ function(print_components)
160198
message(STATUS "=========================================")
161199
message(STATUS " Components Build Overview ")
162200
message(STATUS "=========================================")
163-
message(STATUS "Build Java Bindings: ${WITH_JAVA}")
201+
message(STATUS "Build Bindings (depends on Python): ${WITH_PYTHON}")
202+
message(STATUS "Build C Bindings: ${WITH_C_BINDING}")
203+
message(STATUS "Build Python Bindings: ${WITH_JAVA_BINDING}")
204+
message(STATUS "Build Java Bindings: ${WITH_JAVA_BINDING}")
205+
message(STATUS "Build Go bindings: ${WITH_GO_BINDING}")
206+
message(STATUS "Build Ruby bindings: ${WITH_RUBY_BINDING}")
164207
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}")
168208
message(STATUS "Build Documentation (make html): ${WITH_DOCUMENTATION}")
169-
message(STATUS "Build Bindings (depends on Python): ${WITH_PYTHON}")
209+
message(STATUS "Build Python sdist (make package): ${WITH_PYTHON_BINDING}")
170210
message(STATUS "Configure CTest (depends on Python): ${WITH_PYTHON}")
171211
message(STATUS "Build with RocksDB: ${WITH_ROCKSDB_EXPERIMENTAL}")
172212
message(STATUS "=========================================")
173213
endfunction()
174214

175215
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)
216+
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)
177217
print_components()
178218
message(FATAL_ERROR "FORCE_ALL_COMPONENTS is set but not all dependencies could be found")
179219
endif()

0 commit comments

Comments
 (0)