MDEV-20392: Skip ABI check if 'diff' is not found
Not all environments have 'diff' installed. Most notably CentOS 8 does not have diff out-of-the-box. Thus users running 'cmake .' and 'make' would fail to build MariaDB, and they would think the error was in ABI incompatibilities due to the error message emitted by CMake when in reality simply 'diff' was missing. This fixes it and makes the developer experience better by simply skipping the diffing if 'diff' is not found. ## Proof Running in a clean CentOS 8 container. ### Before ``` $ cmake . ... -- Looking for cpuid.h -- Looking for cpuid.h - found -- Looking for x86intrin.h -- Looking for x86intrin.h - found -- Looking for event.h -- Looking for event.h - not found -- Configuring done -- Generating done -- Build files have been written to: /build $ make Scanning dependencies of target abi_check CMake Error at cmake/do_abi_check.cmake:82 (MESSAGE): ABI check found difference between /build/include/mysql/plugin_audit.h.pp and /build/abi_check.out make[2]: *** [CMakeFiles/abi_check.dir/build.make:57: CMakeFiles/abi_check] Error 1 make[1]: *** [CMakeFiles/Makefile2:168: CMakeFiles/abi_check.dir/all] Error 2 make: *** [Makefile:163: all] Error 2 $ yum install -y diffutils ... Installed: diffutils-3.6-6.el8.x86_64 Complete! $ make [ 0%] Built target abi_check Scanning dependencies of target INFO_BIN [ 0%] Built target INFO_BIN Scanning dependencies of target INFO_SRC [ 0%] Built target INFO_SRC Scanning dependencies of target wsrep_api_v26 [ 0%] Building C object wsrep-lib/wsrep-API/CMakeFiles/wsrep_api_v26.dir/v26/wsrep_dummy.c.o [ 0%] Building C object wsrep-lib/wsrep-API/CMakeFiles/wsrep_api_v26.dir/v26/wsrep_gtid.c.o [ 0%] Building C object wsrep-lib/wsrep-API/CMakeFiles/wsrep_api_v26.dir/v26/wsrep_loader.c.o [ 0%] Building C object wsrep-lib/wsrep-API/CMakeFiles/wsrep_api_v26.dir/v26/wsrep_uuid.c.o [ 0%] Linking C static library libwsrep_api_v26.a [ 0%] Built target wsrep_api_v26 ``` ### After ``` $ make Command 'diff' not found. ABI check for /build/server/include/mysql/plugin_audit.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/plugin_ftparser.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/psi/psi_abi_v1.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/psi/psi_abi_v2.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/client_plugin.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/plugin_auth.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/plugin_password_validation.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/plugin_encryption.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/plugin_data_type.h skipped. Command 'diff' not found. ABI check for /build/server/include/mysql/plugin_function.h skipped. [ 0%] Built target abi_check [ 0%] Built target INFO_SRC [ 0%] Built target INFO_BIN [ 0%] Built target wsrep_api_v26 [ 0%] Building CXX object wsrep-lib/src/CMakeFiles/wsrep-lib.dir/server_state.cpp.o ``` If diff is installed, those warnings are simply not shown. Builds pass without the need to install 'diff'.
Showing
Please register or sign in to comment