diff --git a/cmake_export_symbol.cmake b/cmake_export_symbol.cmake index 7dde938..2928c6b 100644 --- a/cmake_export_symbol.cmake +++ b/cmake_export_symbol.cmake @@ -4,6 +4,9 @@ macro(export_symbol TARGET FILENAME) if(WIN32) string(REPLACE ".sym" ".def" DEF_FILENAME ${FILENAME}) + file(WRITE ${DEF_FILENAME} "EXPORTS\n") + file(READ ${FILENAME} SYMBOLS) + file(APPEND ${DEF_FILENAME} "${SYMBOLS}") target_sources(${TARGET} PRIVATE ${DEF_FILENAME}) elseif(APPLE) diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index dd0e569..45765d4 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -648,46 +648,70 @@ endif() if(CMAKE_HOST_WIN32) set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_win.c) + set(CRYPTO_UNEXPORT ${CRYPTO_UNEXPORT} BIO_s_log) set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl_win.c) endif() if(CMAKE_HOST_WIN32) set(CRYPTO_SRC ${CRYPTO_SRC} compat/posix_win.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} gettimeofday) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_perror) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_fopen) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_fgets) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_open) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_rename) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_connect) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_close) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_read) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_write) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_getsockopt) + set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_setsockopt) + set(EXTRA_EXPORT ${EXTRA_EXPORT} sleep) endif() if(NOT HAVE_ASPRINTF) set(CRYPTO_SRC ${CRYPTO_SRC} compat/bsd-asprintf.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} asprintf) + set(EXTRA_EXPORT ${EXTRA_EXPORT} vasprintf) endif() if(NOT HAVE_INET_PTON) set(CRYPTO_SRC ${CRYPTO_SRC} compat/inet_pton.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} inet_pton) endif() if(NOT HAVE_REALLOCARRAY) set(CRYPTO_SRC ${CRYPTO_SRC} compat/reallocarray.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} reallocarray) endif() if(NOT HAVE_STRCASECMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strcasecmp.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} strcasecmp) endif() if(NOT HAVE_STRLCAT) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strlcat.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} strlcat) endif() if(NOT HAVE_STRLCPY) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strlcpy.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} strlcpy) endif() if(NOT HAVE_STRNDUP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strndup.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} strndup) if(NOT HAVE_STRNLEN) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strnlen.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} strnlen) endif() endif() if(NOT HAVE_TIMEGM) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timegm.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} timegm) endif() if(NOT HAVE_EXPLICIT_BZERO) @@ -697,10 +721,13 @@ if(NOT HAVE_EXPLICIT_BZERO) set(CRYPTO_SRC ${CRYPTO_SRC} compat/explicit_bzero.c) set_source_files_properties(compat/explicit_bzero.c PROPERTIES COMPILE_FLAGS -O0) endif() + set(EXTRA_EXPORT ${EXTRA_EXPORT} explicit_bzero) endif() if(NOT HAVE_ARC4RANDOM_BUF) set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random) + set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random_buf) if(NOT HAVE_GETENTROPY) if(CMAKE_HOST_WIN32) @@ -720,19 +747,23 @@ if(NOT HAVE_ARC4RANDOM_BUF) elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_solaris.c) endif() + set(EXTRA_EXPORT ${EXTRA_EXPORT} getentropy) endif() endif() if(NOT HAVE_ARC4RANDOM_UNIFORM) set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random_uniform.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random_uniform) endif() if(NOT HAVE_TIMINGSAFE_BCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_bcmp.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} timingsafe_bcmp) endif() if(NOT HAVE_TIMINGSAFE_MEMCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_memcmp.c) + set(EXTRA_EXPORT ${EXTRA_EXPORT} timingsafe_memcmp) endif() if(NOT ENABLE_ASM) @@ -749,13 +780,22 @@ else() add_definitions(-DOPENSSLDIR=\"${CMAKE_INSTALL_PREFIX}/etc/ssl\") endif() +file(READ ${CMAKE_CURRENT_SOURCE_DIR}/crypto.sym SYMS) +foreach(SYM IN LISTS CRYPTO_UNEXPORT) + string(REPLACE "${SYM}\n" "" SYMS ${SYMS}) +endforeach() +file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/crypto_p.sym ${SYMS}) +list(SORT EXTRA_EXPORT) +foreach(SYM IN LISTS EXTRA_EXPORT) + file(APPEND ${CMAKE_CURRENT_SOURCE_DIR}/crypto_p.sym "${SYM}\n") +endforeach() + add_library(crypto-objects OBJECT ${CRYPTO_SRC}) if (BUILD_SHARED) add_library(crypto STATIC $) add_library(crypto-shared SHARED $) + export_symbol(crypto-shared ${CMAKE_CURRENT_SOURCE_DIR}/crypto_p.sym) if (WIN32) - target_sources(crypto-shared PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/crypto.def) target_link_libraries(crypto-shared Ws2_32.lib) set(CRYPTO_POSTFIX -${CRYPTO_MAJOR_VERSION}) endif()