@@ -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,57 @@ 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
110+ option (BUILD_DOCUMENTATION "build documentation" ON )
82111find_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 )
85114else ()
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 )
97125else ()
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 ()
103137endif ()
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 ()
114153endif ()
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 "=========================================" )
173214endfunction ()
174215
175216if (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