|  | # components-build-system.sh | 
|  | # | 
|  | # Copyright The Mbed TLS Contributors | 
|  | # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later | 
|  |  | 
|  | # This file contains test components that are executed by all.sh | 
|  |  | 
|  | ################################################################ | 
|  | #### Build System Testing | 
|  | ################################################################ | 
|  |  | 
|  | component_test_make_shared () { | 
|  | msg "build/test: make shared" # ~ 40s | 
|  | make SHARED=1 TEST_CPP=1 all check | 
|  | ldd programs/util/strerror | grep libmbedcrypto | 
|  | $FRAMEWORK/tests/programs/dlopen_demo.sh | 
|  | } | 
|  |  | 
|  | component_test_cmake_shared () { | 
|  | msg "build/test: cmake shared" # ~ 2min | 
|  | cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On . | 
|  | make | 
|  | ldd programs/util/strerror | grep libmbedcrypto | 
|  | make test | 
|  | $FRAMEWORK/tests/programs/dlopen_demo.sh | 
|  | } | 
|  |  | 
|  | support_test_cmake_out_of_source () { | 
|  | distrib_id="" | 
|  | distrib_ver="" | 
|  | distrib_ver_minor="" | 
|  | distrib_ver_major="" | 
|  |  | 
|  | # Attempt to parse lsb-release to find out distribution and version. If not | 
|  | # found this should fail safe (test is supported). | 
|  | if [[ -f /etc/lsb-release ]]; then | 
|  |  | 
|  | while read -r lsb_line; do | 
|  | case "$lsb_line" in | 
|  | "DISTRIB_ID"*) distrib_id=${lsb_line/#DISTRIB_ID=};; | 
|  | "DISTRIB_RELEASE"*) distrib_ver=${lsb_line/#DISTRIB_RELEASE=};; | 
|  | esac | 
|  | done < /etc/lsb-release | 
|  |  | 
|  | distrib_ver_major="${distrib_ver%%.*}" | 
|  | distrib_ver="${distrib_ver#*.}" | 
|  | distrib_ver_minor="${distrib_ver%%.*}" | 
|  | fi | 
|  |  | 
|  | # Running the out of source CMake test on Ubuntu 16.04 using more than one | 
|  | # processor (as the CI does) can create a race condition whereby the build | 
|  | # fails to see a generated file, despite that file actually having been | 
|  | # generated. This problem appears to go away with 18.04 or newer, so make | 
|  | # the out of source tests unsupported on Ubuntu 16.04. | 
|  | [ "$distrib_id" != "Ubuntu" ] || [ "$distrib_ver_major" -gt 16 ] | 
|  | } | 
|  |  | 
|  | component_test_cmake_out_of_source () { | 
|  | # Remove existing generated files so that we use the ones cmake | 
|  | # generates | 
|  | make neat | 
|  |  | 
|  | msg "build: cmake 'out-of-source' build" | 
|  | MBEDTLS_ROOT_DIR="$PWD" | 
|  | mkdir "$OUT_OF_SOURCE_DIR" | 
|  | cd "$OUT_OF_SOURCE_DIR" | 
|  | # Note: Explicitly generate files as these are turned off in releases | 
|  | cmake -D CMAKE_BUILD_TYPE:String=Check -D GEN_FILES=ON -D TEST_CPP=1 "$MBEDTLS_ROOT_DIR" | 
|  | make | 
|  |  | 
|  | msg "test: cmake 'out-of-source' build" | 
|  | make test | 
|  | # Check that ssl-opt.sh can find the test programs. | 
|  | # Also ensure that there are no error messages such as | 
|  | # "No such file or directory", which would indicate that some required | 
|  | # file is missing (ssl-opt.sh tolerates the absence of some files so | 
|  | # may exit with status 0 but emit errors). | 
|  | ./tests/ssl-opt.sh -f 'Default' >ssl-opt.out 2>ssl-opt.err | 
|  | grep PASS ssl-opt.out | 
|  | cat ssl-opt.err >&2 | 
|  | # If ssl-opt.err is non-empty, record an error and keep going. | 
|  | [ ! -s ssl-opt.err ] | 
|  | rm ssl-opt.out ssl-opt.err | 
|  | cd "$MBEDTLS_ROOT_DIR" | 
|  | rm -rf "$OUT_OF_SOURCE_DIR" | 
|  | } | 
|  |  | 
|  | component_test_cmake_as_subdirectory () { | 
|  | # Remove existing generated files so that we use the ones CMake | 
|  | # generates | 
|  | make neat | 
|  |  | 
|  | msg "build: cmake 'as-subdirectory' build" | 
|  | cd programs/test/cmake_subproject | 
|  | # Note: Explicitly generate files as these are turned off in releases | 
|  | cmake -D GEN_FILES=ON . | 
|  | make | 
|  | ./cmake_subproject | 
|  | } | 
|  |  | 
|  | support_test_cmake_as_subdirectory () { | 
|  | support_test_cmake_out_of_source | 
|  | } | 
|  |  | 
|  | component_test_cmake_as_package () { | 
|  | # Remove existing generated files so that we use the ones CMake | 
|  | # generates | 
|  | make neat | 
|  |  | 
|  | msg "build: cmake 'as-package' build" | 
|  | root_dir="$(pwd)" | 
|  | cd programs/test/cmake_package | 
|  | build_variant_dir="$(pwd)" | 
|  | cmake . | 
|  | make | 
|  | ./cmake_package | 
|  | if [[ "$OSTYPE" == linux* ]]; then | 
|  | PKG_CONFIG_PATH="${build_variant_dir}/mbedtls/pkgconfig" \ | 
|  | ${root_dir}/framework/scripts/pkgconfig.sh \ | 
|  | mbedtls mbedx509 mbedcrypto | 
|  | # These are the EXPECTED package names. Renaming these could break | 
|  | # consumers of pkg-config, consider carefully. | 
|  | fi | 
|  | } | 
|  |  | 
|  | support_test_cmake_as_package () { | 
|  | support_test_cmake_out_of_source | 
|  | } | 
|  |  | 
|  | component_test_cmake_as_package_install () { | 
|  | # Remove existing generated files so that we use the ones CMake | 
|  | # generates | 
|  | make neat | 
|  |  | 
|  | msg "build: cmake 'as-installed-package' build" | 
|  | cd programs/test/cmake_package_install | 
|  | cmake . | 
|  | make | 
|  | ./cmake_package_install | 
|  | } | 
|  |  | 
|  | support_test_cmake_as_package_install () { | 
|  | support_test_cmake_out_of_source | 
|  | } | 
|  |  | 
|  | component_build_cmake_custom_config_file () { | 
|  | # Make a copy of config file to use for the in-tree test | 
|  | cp "$CONFIG_H" include/mbedtls_config_in_tree_copy.h | 
|  |  | 
|  | MBEDTLS_ROOT_DIR="$PWD" | 
|  | mkdir "$OUT_OF_SOURCE_DIR" | 
|  | cd "$OUT_OF_SOURCE_DIR" | 
|  |  | 
|  | # Build once to get the generated files (which need an intact config file) | 
|  | cmake "$MBEDTLS_ROOT_DIR" | 
|  | make | 
|  |  | 
|  | msg "build: cmake with -DMBEDTLS_CONFIG_FILE" | 
|  | scripts/config.py -w full_config.h full | 
|  | echo '#error "cmake -DMBEDTLS_CONFIG_FILE is not working."' > "$MBEDTLS_ROOT_DIR/$CONFIG_H" | 
|  | cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h "$MBEDTLS_ROOT_DIR" | 
|  | make | 
|  |  | 
|  | msg "build: cmake with -DMBEDTLS_CONFIG_FILE + -DMBEDTLS_USER_CONFIG_FILE" | 
|  | # In the user config, disable one feature (for simplicity, pick a feature | 
|  | # that nothing else depends on). | 
|  | echo '#undef MBEDTLS_NIST_KW_C' >user_config.h | 
|  |  | 
|  | cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h -DMBEDTLS_USER_CONFIG_FILE=user_config.h "$MBEDTLS_ROOT_DIR" | 
|  | make | 
|  | not programs/test/query_compile_time_config MBEDTLS_NIST_KW_C | 
|  |  | 
|  | rm -f user_config.h full_config.h | 
|  |  | 
|  | cd "$MBEDTLS_ROOT_DIR" | 
|  | rm -rf "$OUT_OF_SOURCE_DIR" | 
|  |  | 
|  | # Now repeat the test for an in-tree build: | 
|  |  | 
|  | # Restore config for the in-tree test | 
|  | mv include/mbedtls_config_in_tree_copy.h "$CONFIG_H" | 
|  |  | 
|  | # Build once to get the generated files (which need an intact config) | 
|  | cmake . | 
|  | make | 
|  |  | 
|  | msg "build: cmake (in-tree) with -DMBEDTLS_CONFIG_FILE" | 
|  | scripts/config.py -w full_config.h full | 
|  | echo '#error "cmake -DMBEDTLS_CONFIG_FILE is not working."' > "$MBEDTLS_ROOT_DIR/$CONFIG_H" | 
|  | cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h . | 
|  | make | 
|  |  | 
|  | msg "build: cmake (in-tree) with -DMBEDTLS_CONFIG_FILE + -DMBEDTLS_USER_CONFIG_FILE" | 
|  | # In the user config, disable one feature (for simplicity, pick a feature | 
|  | # that nothing else depends on). | 
|  | echo '#undef MBEDTLS_NIST_KW_C' >user_config.h | 
|  |  | 
|  | cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h -DMBEDTLS_USER_CONFIG_FILE=user_config.h . | 
|  | make | 
|  | not programs/test/query_compile_time_config MBEDTLS_NIST_KW_C | 
|  |  | 
|  | rm -f user_config.h full_config.h | 
|  | } | 
|  |  | 
|  | support_build_cmake_custom_config_file () { | 
|  | support_test_cmake_out_of_source | 
|  | } | 
|  |  | 
|  | component_build_cmake_programs_no_testing () { | 
|  | # Verify that the type of builds performed by oss-fuzz don't get accidentally broken | 
|  | msg "build: cmake with -DENABLE_PROGRAMS=ON and -DENABLE_TESTING=OFF" | 
|  | cmake -DENABLE_PROGRAMS=ON -DENABLE_TESTING=OFF . | 
|  | make | 
|  | } | 
|  |  | 
|  | support_build_cmake_programs_no_testing () { | 
|  | support_test_cmake_out_of_source | 
|  | } |