From e039ca38c8d77f1e2f182123727c884aaf2d683d Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 24 Jul 2019 12:53:36 +0200 Subject: [PATCH] Move some macros from include/openssl/opensslconf.h.in, add OPENSSL_FUNC New header file, include/openssl/macros.h, which contains diverse useful macros that we use elsewhere. We also add the new macro OPENSSL_FUNC, which is an alias for __FUNC__, __FUNCTION__, __FUNCSIG or __func__, depending on what the compiler supports. In the worst case, it's an alias for the string "(unknown function)". Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/9452) --- include/openssl/macros.h | 142 +++++++++++++++++++++++++++++++ include/openssl/opensslconf.h.in | 117 +------------------------ 2 files changed, 144 insertions(+), 115 deletions(-) create mode 100644 include/openssl/macros.h diff --git a/include/openssl/macros.h b/include/openssl/macros.h new file mode 100644 index 0000000000..6b735b6b0b --- /dev/null +++ b/include/openssl/macros.h @@ -0,0 +1,142 @@ +/* + * Copyright 2019 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_MACROS_H +# define OPENSSL_MACROS_H + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +# define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . If this is + * undefined, the value of the macro OPENSSL_API_MIN above is the default. + * + * For any version number up until version 1.1.x, is expected to be + * the calculated version number 0xMNNFFPPSL. For version numbers 3.0.0 and + * on, is expected to be only the major version number (i.e. 3 for + * version 3.0.0). + */ +# ifndef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f; +# ifdef __GNUC__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# endif +# endif + +/* + * We convert the OPENSSL_API_COMPAT value to an API level. The API level + * is the major version number for 3.0.0 and on. For earlier versions, it + * uses this scheme, which is close enough for our purposes: + * + * 0.x.y 0 (0.9.8 was the last release in this series) + * 1.0.x 1 (1.0.2 was the last release in this series) + * 1.1.x 2 (1.1.1 was the last release in this series) + */ + +/* In case someone defined both */ +# if defined(OPENSSL_API_COMPAT) && defined(OPENSSL_API_LEVEL) +# error "Disallowed to define both OPENSSL_API_COMPAT and OPENSSL_API_LEVEL" +# endif + +# ifndef OPENSSL_API_COMPAT +# define OPENSSL_API_LEVEL OPENSSL_MIN_API +# else +# if (OPENSSL_API_COMPAT < 0x1000L) /* Major version numbers up to 16777215 */ +# define OPENSSL_API_LEVEL OPENSSL_API_COMPAT +# elif (OPENSSL_API_COMPAT & 0xF0000000L) == 0x00000000L +# define OPENSSL_API_LEVEL 0 +# elif (OPENSSL_API_COMPAT & 0xFFF00000L) == 0x10000000L +# define OPENSSL_API_LEVEL 1 +# elif (OPENSSL_API_COMPAT & 0xFFF00000L) == 0x10100000L +# define OPENSSL_API_LEVEL 2 +# else + /* Major number 3 to 15 */ +# define OPENSSL_API_LEVEL ((OPENSSL_API_COMPAT >> 28) & 0xF) +# endif +# endif + +/* + * Do not deprecate things to be deprecated in version 4.0 before the + * OpenSSL version number matches. + */ +# if OPENSSL_VERSION_MAJOR < 4 +# define DEPRECATEDIN_4(f) f; +# define OPENSSL_API_4 0 +# elif OPENSSL_API_LEVEL < 4 +# define DEPRECATEDIN_4(f) DECLARE_DEPRECATED(f) +# define OPENSSL_API_4 0 +# else +# define DEPRECATEDIN_4(f) +# define OPENSSL_API_4 1 +# endif + +# if OPENSSL_API_LEVEL < 3 +# define DEPRECATEDIN_3(f) DECLARE_DEPRECATED(f) +# define OPENSSL_API_3 0 +# else +# define DEPRECATEDIN_3(f) +# define OPENSSL_API_3 1 +# endif + +# if OPENSSL_API_LEVEL < 2 +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +# define OPENSSL_API_1_1_0 0 +# else +# define DEPRECATEDIN_1_1_0(f) +# define OPENSSL_API_1_1_0 1 +# endif + +# if OPENSSL_API_LEVEL < 1 +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +# define OPENSSL_API_1_0_0 0 +# else +# define DEPRECATEDIN_1_0_0(f) +# define OPENSSL_API_1_0_0 1 +# endif + +# if OPENSSL_API_LEVEL < 0 +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +# define OPENSSL_API_0_9_8 0 +# else +# define DEPRECATEDIN_0_9_8(f) +# define OPENSSL_API_0_9_8 1 +# endif + +# ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +# endif + +# ifndef OPENSSL_FUNC +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +# define OPENSSL_FUNC __func__ +# elif defined(__STDC__) && defined(PEDANTIC) +# define OPENSSL_FUNC "(PEDANTIC disallows function name)" +# elif defined(_MSC_VER) || (defined(__GNUC__) && __GNUC__ >= 2) +# define OPENSSL_FUNC __FUNCTION__ +# elif defined(__FUNCSIG__) +# define OPENSSL_FUNC __FUNCSIG__ +# else +# define OPENSSL_FUNC "(unknown function)" +# endif +# endif + +#endif /* OPENSSL_MACROS_H */ diff --git a/include/openssl/opensslconf.h.in b/include/openssl/opensslconf.h.in index b0d339ac9a..5673b5b963 100644 --- a/include/openssl/opensslconf.h.in +++ b/include/openssl/opensslconf.h.in @@ -47,121 +47,6 @@ extern "C" { ""; -} -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -# define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . If this is - * undefined, the value of the macro OPENSSL_API_MIN above is the default. - * - * For any version number up until version 1.1.x, is expected to be - * the calculated version number 0xMNNFFPPSL. For version numbers 3.0.0 and - * on, is expected to be only the major version number (i.e. 3 for - * version 3.0.0). - */ -# ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -# endif - -/* - * We convert the OPENSSL_API_COMPAT value to an API level. The API level - * is the major version number for 3.0.0 and on. For earlier versions, it - * uses this scheme, which is close enough for our purposes: - * - * 0.x.y 0 (0.9.8 was the last release in this series) - * 1.0.x 1 (1.0.2 was the last release in this series) - * 1.1.x 2 (1.1.1 was the last release in this series) - */ - -/* In case someone defined both */ -# if defined(OPENSSL_API_COMPAT) && defined(OPENSSL_API_LEVEL) -# error "Disallowed to define both OPENSSL_API_COMPAT and OPENSSL_API_LEVEL" -# endif - -# ifndef OPENSSL_API_COMPAT -# define OPENSSL_API_LEVEL OPENSSL_MIN_API -# else -# if (OPENSSL_API_COMPAT < 0x1000L) /* Major version numbers up to 16777215 */ -# define OPENSSL_API_LEVEL OPENSSL_API_COMPAT -# elif (OPENSSL_API_COMPAT & 0xF0000000L) == 0x00000000L -# define OPENSSL_API_LEVEL 0 -# elif (OPENSSL_API_COMPAT & 0xFFF00000L) == 0x10000000L -# define OPENSSL_API_LEVEL 1 -# elif (OPENSSL_API_COMPAT & 0xFFF00000L) == 0x10100000L -# define OPENSSL_API_LEVEL 2 -# else - /* Major number 3 to 15 */ -# define OPENSSL_API_LEVEL ((OPENSSL_API_COMPAT >> 28) & 0xF) -# endif -# endif - -/* - * Do not deprecate things to be deprecated in version 4.0 before the - * OpenSSL version number matches. - */ -# if OPENSSL_VERSION_MAJOR < 4 -# define DEPRECATEDIN_4(f) f; -# define OPENSSL_API_4 0 -# elif OPENSSL_API_LEVEL < 4 -# define DEPRECATEDIN_4(f) DECLARE_DEPRECATED(f) -# define OPENSSL_API_4 0 -# else -# define DEPRECATEDIN_4(f) -# define OPENSSL_API_4 1 -# endif - -# if OPENSSL_API_LEVEL < 3 -# define DEPRECATEDIN_3(f) DECLARE_DEPRECATED(f) -# define OPENSSL_API_3 0 -# else -# define DEPRECATEDIN_3(f) -# define OPENSSL_API_3 1 -# endif - -# if OPENSSL_API_LEVEL < 2 -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -# define OPENSSL_API_1_1_0 0 -# else -# define DEPRECATEDIN_1_1_0(f) -# define OPENSSL_API_1_1_0 1 -# endif - -# if OPENSSL_API_LEVEL < 1 -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -# define OPENSSL_API_1_0_0 0 -# else -# define DEPRECATEDIN_1_0_0(f) -# define OPENSSL_API_1_0_0 1 -# endif - -# if OPENSSL_API_LEVEL < 0 -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -# define OPENSSL_API_0_9_8 0 -# else -# define DEPRECATEDIN_0_9_8(f) -# define OPENSSL_API_0_9_8 1 -# endif - -# ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -# endif - /* Generate 80386 code? */ {- $config{processor} eq "386" ? "# define" : "# undef" -} I386_ONLY @@ -178,6 +63,8 @@ extern "C" { # define RC4_INT {- $config{rc4_int} -} +#include + # ifdef __cplusplus } # endif -- 2.25.1