diff --git a/CMakeLists.txt b/CMakeLists.txt index 6debe35d1..479487f39 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,14 @@ else() project("mbed TLS" C) endif() +# Determine if mbed TLS is being built as a subproject using add_subdirectory() +if(NOT DEFINED MBEDTLS_AS_SUBPROJECT) + set(MBEDTLS_AS_SUBPROJECT ON) + if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + set(MBEDTLS_AS_SUBPROJECT OFF) + endif() +endif() + # Set the project root directory. set(MBEDTLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) @@ -52,6 +60,8 @@ else() option(GEN_FILES "Generate the auto-generated files as needed" ON) endif() +option(DISABLE_PACKAGE_CONFIG_AND_INSTALL "Disable package configuration, target export and installation" ${MBEDTLS_AS_SUBPROJECT}) + string(REGEX MATCH "Clang" CMAKE_COMPILER_IS_CLANG "${CMAKE_C_COMPILER_ID}") string(REGEX MATCH "GNU" CMAKE_COMPILER_IS_GNU "${CMAKE_C_COMPILER_ID}") string(REGEX MATCH "IAR" CMAKE_COMPILER_IS_IAR "${CMAKE_C_COMPILER_ID}") @@ -325,36 +335,38 @@ if(ENABLE_TESTING) endif() endif() -configure_package_config_file( - "cmake/MbedTLSConfig.cmake.in" - "cmake/MbedTLSConfig.cmake" - INSTALL_DESTINATION "cmake") +if(NOT DISABLE_PACKAGE_CONFIG_AND_INSTALL) + configure_package_config_file( + "cmake/MbedTLSConfig.cmake.in" + "cmake/MbedTLSConfig.cmake" + INSTALL_DESTINATION "cmake") -write_basic_package_version_file( - "cmake/MbedTLSConfigVersion.cmake" - COMPATIBILITY SameMajorVersion - VERSION 3.1.0) + write_basic_package_version_file( + "cmake/MbedTLSConfigVersion.cmake" + COMPATIBILITY SameMajorVersion + VERSION 3.1.0) -install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/MbedTLSConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/MbedTLSConfigVersion.cmake" - DESTINATION "cmake") + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/MbedTLSConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/MbedTLSConfigVersion.cmake" + DESTINATION "cmake") -export( - EXPORT MbedTLSTargets - NAMESPACE MbedTLS:: - FILE "cmake/MbedTLSTargets.cmake") + export( + EXPORT MbedTLSTargets + NAMESPACE MbedTLS:: + FILE "cmake/MbedTLSTargets.cmake") -install( - EXPORT MbedTLSTargets - NAMESPACE MbedTLS:: - DESTINATION "cmake" - FILE "MbedTLSTargets.cmake") + install( + EXPORT MbedTLSTargets + NAMESPACE MbedTLS:: + DESTINATION "cmake" + FILE "MbedTLSTargets.cmake") -if(CMAKE_VERSION VERSION_GREATER 3.15 OR CMAKE_VERSION VERSION_EQUAL 3.15) - # Do not export the package by default - cmake_policy(SET CMP0090 NEW) + if(CMAKE_VERSION VERSION_GREATER 3.15 OR CMAKE_VERSION VERSION_EQUAL 3.15) + # Do not export the package by default + cmake_policy(SET CMP0090 NEW) - # Make this package visible to the system - export(PACKAGE MbedTLS) + # Make this package visible to the system + export(PACKAGE MbedTLS) + endif() endif() diff --git a/library/.gitignore b/library/.gitignore index f6619d273..cf2ddac3a 100644 --- a/library/.gitignore +++ b/library/.gitignore @@ -7,4 +7,3 @@ libmbed* /error.c /version_features.c /ssl_debug_helpers_generated.c -/ssl_debug_helpers_generated.h diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 07599f5d1..1884db937 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -147,7 +147,6 @@ if(GEN_FILES) add_custom_command( OUTPUT - ${CMAKE_CURRENT_BINARY_DIR}/ssl_debug_helpers_generated.h ${CMAKE_CURRENT_BINARY_DIR}/ssl_debug_helpers_generated.c COMMAND ${MBEDTLS_PYTHON_EXECUTABLE} @@ -162,7 +161,6 @@ else() link_to_source(error.c) link_to_source(version_features.c) link_to_source(ssl_debug_helpers_generated.c) - link_to_source(ssl_debug_helpers_generated.h) endif() if(CMAKE_COMPILER_IS_GNUCC) diff --git a/library/Makefile b/library/Makefile index 5c23aebfe..0b5a43a55 100644 --- a/library/Makefile +++ b/library/Makefile @@ -290,7 +290,7 @@ libmbedcrypto.dll: $(OBJS_CRYPTO) .PHONY: generated_files GENERATED_FILES = \ error.c version_features.c \ - ssl_debug_helpers_generated.c ssl_debug_helpers_generated.h + ssl_debug_helpers_generated.c generated_files: $(GENERATED_FILES) error.c: ../scripts/generate_errors.pl @@ -300,10 +300,9 @@ error.c: echo " Gen $@" $(PERL) ../scripts/generate_errors.pl -ssl_debug_helpers_generated.c: | ssl_debug_helpers_generated.h -ssl_debug_helpers_generated.h: ../scripts/generate_ssl_debug_helpers.py -ssl_debug_helpers_generated.h: $(filter-out %config%,$(wildcard ../include/mbedtls/*.h)) -ssl_debug_helpers_generated.h: +ssl_debug_helpers_generated.c: ../scripts/generate_ssl_debug_helpers.py +ssl_debug_helpers_generated.c: $(filter-out %config%,$(wildcard ../include/mbedtls/*.h)) +ssl_debug_helpers_generated.c: echo " Gen $@" $(PYTHON) ../scripts/generate_ssl_debug_helpers.py --mbedtls-root .. . diff --git a/library/ssl_debug_helpers.h b/library/ssl_debug_helpers.h new file mode 100644 index 000000000..2fc416351 --- /dev/null +++ b/library/ssl_debug_helpers.h @@ -0,0 +1,44 @@ +/** + * \file ssl_debug_helpers.h + * + * \brief Automatically generated helper functions for debugging + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBEDTLS_SSL_DEBUG_HELPERS_H +#define MBEDTLS_SSL_DEBUG_HELPERS_H + +#include "common.h" + +#if defined(MBEDTLS_DEBUG_C) + +#include "mbedtls/ssl.h" +#include "ssl_misc.h" + + +const char *mbedtls_ssl_states_str( mbedtls_ssl_states in ); + +const char *mbedtls_tls_prf_types_str( mbedtls_tls_prf_types in ); + +const char *mbedtls_ssl_key_export_type_str( mbedtls_ssl_key_export_type in ); + + + +#endif /* MBEDTLS_DEBUG_C */ + +#endif /* SSL_DEBUG_HELPERS_H */ diff --git a/library/ssl_tls13_client.c b/library/ssl_tls13_client.c index 31d7dafdb..dcf1ff896 100644 --- a/library/ssl_tls13_client.c +++ b/library/ssl_tls13_client.c @@ -34,7 +34,7 @@ #include "ssl_misc.h" #include "ecdh_misc.h" #include "ssl_tls13_keys.h" -#include "ssl_debug_helpers_generated.h" +#include "ssl_debug_helpers.h" /* Write extensions */ diff --git a/library/ssl_tls13_server.c b/library/ssl_tls13_server.c index faace4a0e..5e74083dd 100644 --- a/library/ssl_tls13_server.c +++ b/library/ssl_tls13_server.c @@ -26,7 +26,7 @@ #include "mbedtls/debug.h" #include "ssl_misc.h" -#include "ssl_debug_helpers_generated.h" +#include "ssl_debug_helpers.h" int mbedtls_ssl_tls13_handshake_server_step( mbedtls_ssl_context *ssl ) { diff --git a/scripts/generate_ssl_debug_helpers.py b/scripts/generate_ssl_debug_helpers.py index 19fac656c..c1487260d 100755 --- a/scripts/generate_ssl_debug_helpers.py +++ b/scripts/generate_ssl_debug_helpers.py @@ -232,46 +232,43 @@ class EnumDefinition: body = body.format(translation_table='\n'.join(translation_table), name=self._name, prototype=self._prototype) - prototype = 'const char *{name}_str( {prototype} in );\n' - prototype = prototype.format(name=self._name, - prototype=self._prototype) - return body, prototype + return body OUTPUT_C_TEMPLATE = '''\ /* Automatically generated by generate_ssl_debug_helpers.py. DO NOT EDIT. */ -#include "common.h" - -#if defined(MBEDTLS_DEBUG_C) - -#include "ssl_debug_helpers_generated.h" - -{functions} - -#endif /* MBEDTLS_DEBUG_C */ -/* End of automatically generated file. */ - -''' - -OUTPUT_H_TEMPLATE = '''\ -/* Automatically generated by generate_ssl_debug_helpers.py. DO NOT EDIT. */ -#ifndef MBEDTLS_SSL_DEBUG_HELPERS_H -#define MBEDTLS_SSL_DEBUG_HELPERS_H +/** + * \file ssl_debug_helpers_generated.c + * + * \brief Automatically generated helper functions for debugging + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #include "common.h" #if defined(MBEDTLS_DEBUG_C) -#include "mbedtls/ssl.h" -#include "ssl_misc.h" +#include "ssl_debug_helpers.h" {functions} #endif /* MBEDTLS_DEBUG_C */ - -#endif /* SSL_DEBUG_HELPERS_H */ - /* End of automatically generated file. */ ''' @@ -286,23 +283,17 @@ def generate_ssl_debug_helpers(output_directory, mbedtls_root): source_code = remove_c_comments(f.read()) definitions = dict() - prototypes = dict() for start, instance in preprocess_c_source_code(source_code, EnumDefinition): if start in definitions: continue if isinstance(instance, EnumDefinition): - definition, prototype = instance.generate_tranlation_function() + definition = instance.generate_tranlation_function() else: definition = instance - prototype = instance definitions[start] = definition - prototypes[start] = prototype function_definitions = [str(v) for _, v in sorted(definitions.items())] - function_prototypes = [str(v) for _, v in sorted(prototypes.items())] if output_directory == sys.stdout: - sys.stdout.write(OUTPUT_H_TEMPLATE.format( - functions='\n'.join(function_prototypes))) sys.stdout.write(OUTPUT_C_TEMPLATE.format( functions='\n'.join(function_definitions))) else: @@ -310,10 +301,6 @@ def generate_ssl_debug_helpers(output_directory, mbedtls_root): f.write(OUTPUT_C_TEMPLATE.format( functions='\n'.join(function_definitions))) - with open(os.path.join(output_directory, 'ssl_debug_helpers_generated.h'), 'w') as f: - f.write(OUTPUT_H_TEMPLATE.format( - functions='\n'.join(function_prototypes))) - def main(): """ diff --git a/tests/scripts/check-generated-files.sh b/tests/scripts/check-generated-files.sh index b35da3d68..994fd243b 100755 --- a/tests/scripts/check-generated-files.sh +++ b/tests/scripts/check-generated-files.sh @@ -118,7 +118,7 @@ check() check scripts/generate_errors.pl library/error.c check scripts/generate_query_config.pl programs/test/query_config.c check scripts/generate_features.pl library/version_features.c -check scripts/generate_ssl_debug_helpers.py library/ssl_debug_helpers_generated.h library/ssl_debug_helpers_generated.c +check scripts/generate_ssl_debug_helpers.py library/ssl_debug_helpers_generated.c # generate_visualc_files enumerates source files (library/*.c). It doesn't # care about their content, but the files must exist. So it must run after # the step that creates or updates these files.