diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b0d7109..5b621b38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,13 +65,17 @@ set(PIP_DLL_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE STRING "") # Options option(ICU "ICU support for convert codepages" OFF) option(STD_IOSTREAM "Building with std iostream operators support" OFF) -option(INTROSPECTION "Build with introspection" OFF) option(TESTS "Build tests" OFF) option(TESTS_RUN "Run tests before install step" OFF) option(COVERAGE "Build project with coverage info" OFF) -function(pip_feature_flag NAME) +# pip_feature_flag(NAME DESCRIPTION DEFAULT [DEPENDENCY...]) +# DEFAULT is ON/OFF, DEPENDENCY is a name of another feature flag this one requires. +function(pip_feature_flag NAME DESCRIPTION DEFAULT) + if(NOT DEFAULT MATCHES "^(ON|OFF|TRUE|FALSE)$") + message(FATAL_ERROR "pip_feature_flag: invalid default '${DEFAULT}' for ${NAME}") + endif() set(_deps ${ARGN}) - option(${NAME} "Feature flag" ON) + option(${NAME} "${DESCRIPTION}" ${DEFAULT}) list(APPEND PIP_FEATURE_FLAGS "${NAME}") set(PIP_FEATURE_FLAGS "${PIP_FEATURE_FLAGS}" PARENT_SCOPE) set(PIP_FEATURE_DEPS_${NAME} "${_deps}" PARENT_SCOPE) @@ -96,23 +100,23 @@ macro(pip_resolve_feature_flags) endmacro() # Base flags (no dependencies) -pip_feature_flag(PIP_HAS_FILESYSTEM) -pip_feature_flag(PIP_HAS_THREADS) -pip_feature_flag(PIP_HAS_SOCKET) -pip_feature_flag(PIP_HAS_FFT) -pip_feature_flag(PIP_HAS_SERIAL) -pip_feature_flag(PIP_BUILD_IO_UTILS) +pip_feature_flag(PIP_HAS_FILESYSTEM "Filesystem support" ON) +pip_feature_flag(PIP_HAS_THREADS "Threads (std::thread) support" ON) +pip_feature_flag(PIP_HAS_SOCKET "Sockets support" ON) +pip_feature_flag(PIP_HAS_FFT "FFT support" ON) +pip_feature_flag(PIP_HAS_SERIAL "Serial port (libusb) support" ON) +pip_feature_flag(PIP_BUILD_IO_UTILS "Build io_utils module" ON) # Dependent flags -pip_feature_flag(PIP_HAS_DYNLIB PIP_HAS_FILESYSTEM) -pip_feature_flag(PIP_HAS_PROCESS PIP_HAS_THREADS) -pip_feature_flag(INTROSPECTION PIP_HAS_THREADS PIP_HAS_SOCKET) -pip_feature_flag(PIP_BUILD_CONSOLE PIP_HAS_THREADS) -pip_feature_flag(PIP_BUILD_FFTW PIP_HAS_FFT) -pip_feature_flag(PIP_BUILD_HTTP_CLIENT PIP_HAS_THREADS) -pip_feature_flag(PIP_BUILD_HTTP_SERVER PIP_HAS_THREADS PIP_HAS_SOCKET) -pip_feature_flag(PIP_BUILD_MQTT_CLIENT PIP_HAS_THREADS PIP_HAS_SOCKET) -pip_feature_flag(PIP_BUILD_CLIENT_SERVER PIP_HAS_THREADS PIP_HAS_SOCKET PIP_BUILD_IO_UTILS) -pip_feature_flag(PIP_BUILD_CLOUD PIP_HAS_THREADS PIP_HAS_SOCKET PIP_BUILD_IO_UTILS) +pip_feature_flag(PIP_HAS_DYNLIB "Dynamic library loading (dlopen) support" ON PIP_HAS_FILESYSTEM) +pip_feature_flag(PIP_HAS_PROCESS "Process spawning support" ON PIP_HAS_THREADS) +pip_feature_flag(INTROSPECTION "Build with introspection" OFF PIP_HAS_THREADS PIP_HAS_SOCKET) +pip_feature_flag(PIP_BUILD_CONSOLE "Build console module" ON PIP_HAS_THREADS) +pip_feature_flag(PIP_BUILD_FFTW "Build fftw module" ON PIP_HAS_FFT) +pip_feature_flag(PIP_BUILD_HTTP_CLIENT "Build http_client module" ON PIP_HAS_THREADS) +pip_feature_flag(PIP_BUILD_HTTP_SERVER "Build http_server module" ON PIP_HAS_THREADS PIP_HAS_SOCKET) +pip_feature_flag(PIP_BUILD_MQTT_CLIENT "Build mqtt_client module" ON PIP_HAS_THREADS PIP_HAS_SOCKET) +pip_feature_flag(PIP_BUILD_CLIENT_SERVER "Build client_server module" ON PIP_HAS_THREADS PIP_HAS_SOCKET PIP_BUILD_IO_UTILS) +pip_feature_flag(PIP_BUILD_CLOUD "Build cloud module" ON PIP_HAS_THREADS PIP_HAS_SOCKET PIP_BUILD_IO_UTILS) option(PIP_FFTW_F "Support fftw module for float" ON) option(PIP_FFTW_L "Support fftw module for long double" ON) option(PIP_FFTW_Q "Support fftw module for quad double" OFF) @@ -145,7 +149,10 @@ set(PIP_SRC_MODULES "console;crypt;compress;usb;fftw;opencl;io_utils;client_serv foreach(_m ${PIP_SRC_MODULES}) set(PIP_MSG_${_m} "no") string(TOUPPER "${_m}" _mu) - option(PIP_BUILD_${_mu} "Build \"${_m}\" module" ON) + list(FIND PIP_FEATURE_FLAGS "PIP_BUILD_${_mu}" _ff_idx) + if(_ff_idx EQUAL -1) + option(PIP_BUILD_${_mu} "Build \"${_m}\" module" ON) + endif() endforeach() macro(pip_module NAME LIBS LABEL INCLUDES SOURCES MSG)