@@ -47,22 +47,6 @@ else()
4747 endif ()
4848endif ()
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 )
7660endif ()
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 )
85113else ()
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 )
97124else ()
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 ()
103136endif ()
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 ()
114152endif ()
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 "=========================================" )
173213endfunction ()
174214
175215if (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