From 1b9dac60139aacb04007a5b093947ea3944f8939 Mon Sep 17 00:00:00 2001 From: vasilito Date: Sun, 21 Jun 2026 09:15:40 +0300 Subject: [PATCH] fix(openssl3): inline missing core.h headers in build script OpenSSL 3.5.3 tarball is missing include/openssl/core.h and include/internal/core.h headers. Instead of using a patch (which fails due to atomic patch application when files already exist), inline the header creation directly into the build script. This approach is more robust because: - It always creates the headers before configure, regardless of whether the source tree was previously patched or not - It avoids the atomic patch rollback issue when files exist - It survives make clean / distclean without issues Fixes build failure: fatal error: openssl/core.h: No such file or directory --- recipes/wip/libs/tls/openssl3/recipe.toml | 153 +++++++++++++++++++++- 1 file changed, 152 insertions(+), 1 deletion(-) diff --git a/recipes/wip/libs/tls/openssl3/recipe.toml b/recipes/wip/libs/tls/openssl3/recipe.toml index ba35c8c962..bba43b3423 100644 --- a/recipes/wip/libs/tls/openssl3/recipe.toml +++ b/recipes/wip/libs/tls/openssl3/recipe.toml @@ -2,7 +2,7 @@ [source] tar = "https://github.com/openssl/openssl/releases/download/openssl-3.5.3/openssl-3.5.3.tar.gz" blake3 = "e1622a4587c71c278355bf38ff5a619918bd51e3cd37214d53dd5345b187fc10" -patches = [ "redox.patch", "P0-add-missing-core-headers.patch" ] +patches = [ "redox.patch" ] [build] template = "custom" @@ -15,6 +15,157 @@ DYNAMIC_INIT ARCH="${TARGET%%-*}" OS=$(echo "${TARGET}" | cut -d - -f3) export ARFLAGS=cr + +# OpenSSL 3.5.3 tarball is missing these critical headers. +# They are standard OpenSSL 3.x headers referenced by multiple source files. +# Create them before configure to ensure the build succeeds. +if [ ! -f "${COOKBOOK_SOURCE}/include/openssl/core.h" ]; then + cat > "${COOKBOOK_SOURCE}/include/openssl/core.h" << 'CORE_H_EOF' +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_H +# define OPENSSL_CORE_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Opaque handles to be used with core upcall functions from providers */ +typedef struct ossl_core_handle_st OSSL_CORE_HANDLE; +typedef struct openssl_core_ctx_st OPENSSL_CORE_CTX; +typedef struct ossl_core_bio_st OSSL_CORE_BIO; + +struct ossl_dispatch_st { + int function_id; + void (*function)(void); +}; + +# define OSSL_DISPATCH_END \ + { 0, NULL } + +struct ossl_item_st { + unsigned int id; + void *ptr; +}; + +struct ossl_algorithm_st { + const char *algorithm_names; + const char *property_definition; + const OSSL_DISPATCH *implementation; + const char *algorithm_description; +}; + +struct ossl_param_st { + const char *key; + unsigned int data_type; + void *data; + size_t data_size; + size_t return_size; +}; + +# define OSSL_PARAM_INTEGER 1 +# define OSSL_PARAM_UNSIGNED_INTEGER 2 +# define OSSL_PARAM_REAL 3 +# define OSSL_PARAM_UTF8_STRING 4 +# define OSSL_PARAM_OCTET_STRING 5 +# define OSSL_PARAM_UTF8_PTR 6 +# define OSSL_PARAM_OCTET_PTR 7 + +typedef void (*OSSL_thread_stop_handler_fn)(void *arg); + +typedef int (OSSL_provider_init_fn)(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in, + const OSSL_DISPATCH **out, + void **provctx); +# ifdef __VMS +# pragma names save +# pragma names uppercase,truncated +# endif +OPENSSL_EXPORT OSSL_provider_init_fn OSSL_provider_init; +# ifdef __VMS +# pragma names restore +# endif + +typedef int (OSSL_CALLBACK)(const OSSL_PARAM params[], void *arg); +typedef int (OSSL_INOUT_CALLBACK)(const OSSL_PARAM in_params[], + OSSL_PARAM out_params[], void *arg); + +typedef int (OSSL_PASSPHRASE_CALLBACK)(char *pass, size_t pass_size, + size_t *pass_len, + const OSSL_PARAM params[], void *arg); + +# ifdef __cplusplus +} +# endif + +#endif +CORE_H_EOF +fi + +if [ ! -f "${COOKBOOK_SOURCE}/include/internal/core.h" ]; then + cat > "${COOKBOOK_SOURCE}/include/internal/core.h" << 'INTERNAL_CORE_H_EOF' +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_CORE_H +# define OSSL_INTERNAL_CORE_H +# pragma once + +typedef struct ossl_method_construct_method_st { + void *(*get_tmp_store)(void *data); + int (*lock_store)(void *store, void *data); + int (*unlock_store)(void *store, void *data); + void *(*get)(void *store, const OSSL_PROVIDER **prov, void *data); + int (*put)(void *store, void *method, const OSSL_PROVIDER *prov, + const char *name, const char *propdef, void *data); + void *(*construct)(const OSSL_ALGORITHM *algodef, OSSL_PROVIDER *prov, + void *data); + void (*destruct)(void *method, void *data); +} OSSL_METHOD_CONSTRUCT_METHOD; + +void *ossl_method_construct(OSSL_LIB_CTX *ctx, int operation_id, + OSSL_PROVIDER **provider_rw, int force_cache, + OSSL_METHOD_CONSTRUCT_METHOD *mcm, void *mcm_data); + +void ossl_algorithm_do_all(OSSL_LIB_CTX *libctx, int operation_id, + OSSL_PROVIDER *provider, + int (*pre)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + int (*reserve_store)(int no_store, void *data), + void (*fn)(OSSL_PROVIDER *provider, + const OSSL_ALGORITHM *algo, + int no_store, void *data), + int (*unreserve_store)(void *data), + int (*post)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + void *data); +char *ossl_algorithm_get1_first_name(const OSSL_ALGORITHM *algo); + +__owur int ossl_lib_ctx_write_lock(OSSL_LIB_CTX *ctx); +__owur int ossl_lib_ctx_read_lock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_unlock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_child(OSSL_LIB_CTX *ctx); +#endif +INTERNAL_CORE_H_EOF +fi + COOKBOOK_CONFIGURE="${COOKBOOK_SOURCE}/Configure" COOKBOOK_CONFIGURE_FLAGS=( no-tests