From b98c56fd5e86fa76eb55a98a2266a923f64f705c Mon Sep 17 00:00:00 2001 From: Brent Cook Date: Tue, 28 Feb 2023 01:51:41 -0600 Subject: stop exposing hidden defines in public opensslconf.h pull in hidden headers instead, patching drectly for Windows support --- crypto/CMakeLists.txt | 1 + crypto/Makefile.am | 3 +-- include/CMakeLists.txt | 4 +--- include/openssl/Makefile.am.tpl | 23 ++++++++++------------- include/openssl/opensslconf.h.in | 15 --------------- patches/crypto_namespace.h.patch | 13 +++++++++++++ patches/ssl_namespace.h.patch | 13 +++++++++++++ ssl/CMakeLists.txt | 3 ++- ssl/Makefile.am | 1 + 9 files changed, 42 insertions(+), 34 deletions(-) delete mode 100644 include/openssl/opensslconf.h.in create mode 100644 patches/crypto_namespace.h.patch create mode 100644 patches/ssl_namespace.h.patch diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index dc30a17..45d9786 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -1021,6 +1021,7 @@ target_include_directories(crypto_obj ecdh ecdsa evp + hidden hmac modes ocsp diff --git a/crypto/Makefile.am b/crypto/Makefile.am index 733dcbd..c09d266 100644 --- a/crypto/Makefile.am +++ b/crypto/Makefile.am @@ -1,7 +1,6 @@ include $(top_srcdir)/Makefile.am.common AM_CPPFLAGS += -DLIBRESSL_CRYPTO_INTERNAL - AM_CPPFLAGS += -I$(top_srcdir)/crypto/asn1 AM_CPPFLAGS += -I$(top_srcdir)/crypto/bio AM_CPPFLAGS += -I$(top_srcdir)/crypto/bn @@ -134,7 +133,7 @@ libcrypto_la_LIBADD = libcompat.la if !HAVE_EXPLICIT_BZERO libcrypto_la_LIBADD += libcompatnoopt.la endif -libcrypto_la_CPPFLAGS = $(AM_CPPFLAGS) +libcrypto_la_CPPFLAGS = -I$(top_srcdir)/crypto/hidden ${AM_CPPFLAGS} libcrypto_la_CPPFLAGS += -DLIBRESSL_INTERNAL libcrypto_la_CPPFLAGS += -DOPENSSL_NO_HW_PADLOCK if OPENSSL_NO_ASM diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index dafdee7..a08a781 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -7,8 +7,6 @@ if(ENABLE_LIBRESSL_INSTALL) PATTERN "Makefile*" EXCLUDE) endif(ENABLE_LIBRESSL_INSTALL) -file(READ openssl/opensslconf.h.in OPENSSLCONF) -file(WRITE openssl/opensslconf.h "${OPENSSLCONF}") if(HOST_AARCH64) file(READ arch/aarch64/opensslconf.h OPENSSLCONF) elseif(HOST_ARM) @@ -28,4 +26,4 @@ elseif(HOST_SPARC64) elseif(HOST_X86_64) file(READ arch/amd64/opensslconf.h OPENSSLCONF) endif() -file(APPEND openssl/opensslconf.h "${OPENSSLCONF}") +file(WRITE openssl/opensslconf.h "${OPENSSLCONF}") diff --git a/include/openssl/Makefile.am.tpl b/include/openssl/Makefile.am.tpl index 167183a..2f67d10 100644 --- a/include/openssl/Makefile.am.tpl +++ b/include/openssl/Makefile.am.tpl @@ -3,40 +3,37 @@ include $(top_srcdir)/Makefile.am.common if !ENABLE_LIBTLS_ONLY opensslincludedir=$(includedir)/openssl -noinst_HEADERS = opensslconf.h.in BUILT_SOURCES = opensslconf.h CLEANFILES = opensslconf.h -opensslconf.h: opensslconf.h.in Makefile +opensslconf.h: Makefile -echo "generating opensslconf.h ..." - -cp $(top_srcdir)/include/openssl/opensslconf.h.in opensslconf.h - -chmod u+w opensslconf.h if HOST_AARCH64 - -cat $(top_srcdir)/include/arch/aarch64/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/aarch64/opensslconf.h opensslconf.h endif if HOST_ARM - -cat $(top_srcdir)/include/arch/arm/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/arm/opensslconf.h opensslconf.h endif if HOST_I386 - -cat $(top_srcdir)/include/arch/i386/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/i386/opensslconf.h opensslconf.h endif if HOST_MIPS64 - -cat $(top_srcdir)/include/arch/mips64/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/mips64/opensslconf.h opensslconf.h endif if HOST_POWERPC - -cat $(top_srcdir)/include/arch/powerpc/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/powerpc/opensslconf.h opensslconf.h endif if HOST_POWERPC64 - -cat $(top_srcdir)/include/arch/powerpc64/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/powerpc64/opensslconf.h opensslconf.h endif if HOST_RISCV64 - -cat $(top_srcdir)/include/arch/riscv64/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/riscv64/opensslconf.h opensslconf.h endif if HOST_SPARC64 - -cat $(top_srcdir)/include/arch/sparc64/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/sparc64/opensslconf.h opensslconf.h endif if HOST_X86_64 - -cat $(top_srcdir)/include/arch/amd64/opensslconf.h >> opensslconf.h + -cp $(top_srcdir)/include/arch/amd64/opensslconf.h opensslconf.h endif opensslinclude_HEADERS = opensslconf.h diff --git a/include/openssl/opensslconf.h.in b/include/openssl/opensslconf.h.in deleted file mode 100644 index 8842f00..0000000 --- a/include/openssl/opensslconf.h.in +++ /dev/null @@ -1,15 +0,0 @@ -#if defined(_MSC_VER) && !defined(__clang__) && !defined(__attribute__) -#define __attribute__(a) -#endif - -#if defined(LIBRESSL_INTERNAL) && !defined(LIBRESSL_NAMESPACE) -# define LCRYPTO_UNUSED(x) -# define LCRYPTO_USED(x) -# define LCRYPTO_ALIAS1(pre, x) -# define LCRYPTO_ALIAS(x) - -# define LSSL_UNUSED(x) -# define LSSL_USED(x) -# define LSSL_ALIAS(x) -#endif /* LIBRESSL_INTERNAL && !LIBRESSL_NAMESPACE */ - diff --git a/patches/crypto_namespace.h.patch b/patches/crypto_namespace.h.patch new file mode 100644 index 0000000..2751524 --- /dev/null +++ b/patches/crypto_namespace.h.patch @@ -0,0 +1,13 @@ +--- crypto/hidden/crypto_namespace.h.orig 2023-02-28 00:41:43.212756628 -0600 ++++ crypto/hidden/crypto_namespace.h 2023-02-28 00:42:01.152756349 -0600 +@@ -18,6 +18,10 @@ + #ifndef _LIBCRYPTO_CRYPTO_NAMESPACE_H_ + #define _LIBCRYPTO_CRYPTO_NAMESPACE_H_ + ++#if defined(_MSC_VER) && !defined(__clang__) && !defined(__attribute__) ++#define __attribute__(a) ++#endif ++ + /* + * If marked as 'used', then internal calls use the name with prefix "_lcry_" + * and we alias that to the normal name *and* the name with prefix "_libre_"; diff --git a/patches/ssl_namespace.h.patch b/patches/ssl_namespace.h.patch new file mode 100644 index 0000000..649e862 --- /dev/null +++ b/patches/ssl_namespace.h.patch @@ -0,0 +1,13 @@ +--- ssl/hidden/ssl_namespace.h.orig 2023-02-28 00:42:20.928756042 -0600 ++++ ssl/hidden/ssl_namespace.h 2023-02-28 00:43:16.372755180 -0600 +@@ -18,6 +18,10 @@ + #ifndef _LIBSSL_SSL_NAMESPACE_H_ + #define _LIBSSL_SSL_NAMESPACE_H_ + ++#if defined(_MSC_VER) && !defined(__clang__) && !defined(__attribute__) ++#define __attribute__(a) ++#endif ++ + /* + * If marked as 'used', then internal calls use the name with prefix "_lssl_" + * and we alias that to the normal name. diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt index 173c3b5..f5d52f7 100644 --- a/ssl/CMakeLists.txt +++ b/ssl/CMakeLists.txt @@ -64,8 +64,9 @@ set( add_library(ssl_obj OBJECT ${SSL_SRC}) target_include_directories(ssl_obj PRIVATE - ../crypto/bio . + hidden + ../crypto/bio ../include/compat PUBLIC ../include) diff --git a/ssl/Makefile.am b/ssl/Makefile.am index a2155fb..d27e2af 100644 --- a/ssl/Makefile.am +++ b/ssl/Makefile.am @@ -31,6 +31,7 @@ remove_bs_objects: libssl.la -$(AR) dv $(abs_top_builddir)/ssl/.libs/libssl.a \ bs_ber.o bs_cbb.o bs_cbs.o +libssl_la_CPPFLAGS = -I$(top_srcdir)/ssl/hidden ${AM_CPPFLAGS} libssl_la_LDFLAGS = -version-info @LIBSSL_VERSION@ -no-undefined -export-symbols $(top_srcdir)/ssl/ssl.sym libssl_la_LIBADD = $(abs_top_builddir)/crypto/libcrypto.la $(PLATFORM_LDADD) libssl_la_LIBADD += libbs.la -- cgit v1.2.3-55-g6feb