diff options
| author | Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> | 2020-11-04 07:59:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-03 22:59:02 -0800 |
| commit | 63dccf771d0bf84f8a1e111c8b53a4057d4c0a18 (patch) | |
| tree | f0e840ea56fc2959d27dced9df9dda4202ef1c99 /ports/openssl/unix | |
| parent | c4c020828aa1b743707876ffaeb0dccf091e96f5 (diff) | |
| download | vcpkg-63dccf771d0bf84f8a1e111c8b53a4057d4c0a18.tar.gz vcpkg-63dccf771d0bf84f8a1e111c8b53a4057d4c0a18.zip | |
[OpenSSL] refactor openssl ports. (#14308)
Diffstat (limited to 'ports/openssl/unix')
| -rw-r--r-- | ports/openssl/unix/CMakeLists.txt | 183 | ||||
| -rw-r--r-- | ports/openssl/unix/ConfigureIncludeQuotesFix.patch | 13 | ||||
| -rw-r--r-- | ports/openssl/unix/EmbedSymbolsInStaticLibsZ7.patch | 25 | ||||
| -rw-r--r-- | ports/openssl/unix/STRINGIFYPatch.patch | 23 | ||||
| -rw-r--r-- | ports/openssl/unix/portfile.cmake | 47 | ||||
| -rw-r--r-- | ports/openssl/unix/remove-deps.cmake | 7 | ||||
| -rw-r--r-- | ports/openssl/unix/vcpkg-cmake-wrapper.cmake | 18 |
7 files changed, 316 insertions, 0 deletions
diff --git a/ports/openssl/unix/CMakeLists.txt b/ports/openssl/unix/CMakeLists.txt new file mode 100644 index 000000000..7e09222c9 --- /dev/null +++ b/ports/openssl/unix/CMakeLists.txt @@ -0,0 +1,183 @@ +cmake_minimum_required(VERSION 3.9)
+project(openssl C)
+
+if(NOT SOURCE_PATH)
+ message(FATAL_ERROR "Requires SOURCE_PATH")
+endif()
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Android" OR CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+ set(PLATFORM linux-x86_64)
+ else()
+ set(PLATFORM linux-generic32)
+ endif()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64")
+ set(PLATFORM ios64-xcrun)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm")
+ set(PLATFORM ios-xcrun)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" OR
+ VCPKG_TARGET_ARCHITECTURE MATCHES "x64")
+ set(PLATFORM iossimulator-xcrun)
+ else()
+ message(FATAL_ERROR "Unknown iOS target architecture: ${VCPKG_TARGET_ARCHITECTURE}")
+ endif()
+ # disable that makes linkage error (e.g. require stderr usage)
+ list(APPEND DISABLES no-stdio no-ui no-asm)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ set(PLATFORM darwin64-x86_64-cc)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(PLATFORM BSD-generic64)
+elseif(MINGW)
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+ set(PLATFORM mingw64)
+ else()
+ set(PLATFORM mingw)
+ endif()
+else()
+ message(FATAL_ERROR "Unknown platform")
+endif()
+
+get_filename_component(COMPILER_ROOT "${CMAKE_C_COMPILER}" DIRECTORY)
+
+message("CMAKE_C_COMPILER=${CMAKE_C_COMPILER}")
+message("COMPILER_ROOT=${COMPILER_ROOT}")
+message("CMAKE_SYSROOT=${CMAKE_SYSROOT}")
+message("CMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}")
+message("CMAKE_C_FLAGS=${CMAKE_C_FLAGS}")
+message("CMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}")
+message("CMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}")
+message("CMAKE_INCLUDE_SYSTEM_FLAG_C=${CMAKE_INCLUDE_SYSTEM_FLAG_C}")
+
+set(CFLAGS "${CMAKE_C_FLAGS}")
+if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ set(CFLAGS "-Wno-error=unused-command-line-argument ${CMAKE_C_FLAGS}")
+endif()
+if(CMAKE_C_COMPILER_TARGET AND CMAKE_C_COMPILE_OPTIONS_TARGET)
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_TARGET}${CMAKE_C_COMPILER_TARGET}")
+endif()
+if(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN AND CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN)
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN}")
+endif()
+if(CMAKE_SYSROOT AND CMAKE_C_COMPILE_OPTIONS_SYSROOT)
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}")
+elseif(CMAKE_OSX_SYSROOT AND CMAKE_C_COMPILE_OPTIONS_SYSROOT)
+ set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_SYSROOT}${CMAKE_OSX_SYSROOT}")
+endif()
+
+string(REGEX REPLACE "^ " "" CFLAGS "${CFLAGS}")
+
+if(CMAKE_HOST_WIN32)
+ file(TO_NATIVE_PATH ENV_PATH "${COMPILER_ROOT};$ENV{PATH}")
+else()
+ file(TO_NATIVE_PATH ENV_PATH "${COMPILER_ROOT}:$ENV{PATH}")
+endif()
+set(ENV{ANDROID_DEV} "${CMAKE_SYSROOT}/usr")
+set(ENV{CC} "${CMAKE_C_COMPILER}")
+
+message("ENV{ANDROID_DEV}=$ENV{ANDROID_DEV}")
+
+get_filename_component(SOURCE_PATH_NAME "${SOURCE_PATH}" NAME)
+set(BUILDDIR "${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_PATH_NAME}")
+
+if(NOT EXISTS "${BUILDDIR}")
+ file(COPY ${SOURCE_PATH} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+endif()
+
+get_filename_component(MSYS_BIN_DIR "${MAKE}" DIRECTORY)
+
+if(BUILD_SHARED_LIBS)
+ set(SHARED shared)
+ file(STRINGS "${BUILDDIR}/include/openssl/opensslv.h" SHLIB_VERSION
+ REGEX "^#[\t ]*define[\t ]+SHLIB_VERSION_NUMBER[\t ]+\".*\".*")
+ string(REGEX REPLACE "^.*SHLIB_VERSION_NUMBER[\t ]+\"([^\"]*)\".*$" "\\1"
+ SHLIB_VERSION "${SHLIB_VERSION}")
+ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
+ set(LIB_EXT dylib)
+ set(LIB_EXTS ${SHLIB_VERSION}.${LIB_EXT})
+ elseif(MINGW)
+ string(REPLACE "." "_" SHLIB_VERSION "${SHLIB_VERSION}")
+ set(BIN_EXT dll)
+ set(LIB_EXT dll.a)
+ else()
+ set(LIB_EXT so)
+ set(LIB_EXTS ${LIB_EXT}.${SHLIB_VERSION})
+ endif()
+ list(APPEND BIN_EXTS ${BIN_EXT})
+ list(APPEND LIB_EXTS ${LIB_EXT})
+else()
+ set(SHARED no-shared)
+ set(LIB_EXTS a)
+endif()
+foreach(lib ssl crypto)
+ foreach(ext ${LIB_EXTS})
+ list(APPEND INSTALL_LIBS "${BUILDDIR}/lib${lib}.${ext}")
+ endforeach()
+ foreach(ext ${BIN_EXTS})
+ # This might be wrong for targets which don't follow this naming scheme, but I'm not aware of any
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+ list(APPEND INSTALL_BINS "${BUILDDIR}/lib${lib}-${SHLIB_VERSION}-x64.${ext}")
+ else()
+ list(APPEND INSTALL_BINS "${BUILDDIR}/lib${lib}-${SHLIB_VERSION}.${ext}")
+ endif()
+ endforeach()
+endforeach()
+
+if(CMAKE_HOST_WIN32)
+ set(ENV_COMMAND set)
+ set(PATH_VAR ";%PATH%")
+else()
+ set(ENV_COMMAND export)
+ set(PATH_VAR ":$ENV{PATH}")
+endif()
+
+
+
+add_custom_command(
+ OUTPUT "${BUILDDIR}/Makefile"
+ COMMAND ${ENV_COMMAND} CC=${CMAKE_C_COMPILER}
+ COMMAND ${ENV_COMMAND} AR=${CMAKE_AR}
+ COMMAND ${ENV_COMMAND} LD=${CMAKE_LINKER}
+ COMMAND ${ENV_COMMAND} RANLIB=${CMAKE_RANLIB}
+ COMMAND ${ENV_COMMAND} MAKE=${MAKE}
+ COMMAND ${ENV_COMMAND} MAKEDEPPROG=${CMAKE_C_COMPILER}
+ COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}"
+ COMMAND "${PERL}" Configure
+ ${SHARED}
+ enable-static-engine
+ no-zlib
+ no-ssl2
+ no-idea
+ no-bf
+ no-cast
+ no-seed
+ no-md2
+ no-tests
+ ${DISABLES}
+ ${PLATFORM}
+ "--prefix=${CMAKE_INSTALL_PREFIX}"
+ "--openssldir=/etc/ssl"
+ ${CFLAGS}
+ COMMAND "${CMAKE_COMMAND}" "-DDIR=${BUILDDIR}" -P "${CMAKE_CURRENT_LIST_DIR}/remove-deps.cmake"
+ VERBATIM
+ WORKING_DIRECTORY "${BUILDDIR}"
+)
+
+add_custom_target(build_libs ALL
+ COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}"
+ COMMAND "${CMAKE_COMMAND}" -E touch "${BUILDDIR}/krb5.h"
+ COMMAND "${MAKE}" build_libs
+ VERBATIM
+ WORKING_DIRECTORY "${BUILDDIR}"
+ DEPENDS "${BUILDDIR}/Makefile"
+ BYPRODUCTS ${INSTALL_LIBS}
+)
+
+install(
+ FILES ${INSTALL_LIBS}
+ DESTINATION lib
+)
+install(
+ FILES ${INSTALL_BINS}
+ DESTINATION bin
+)
\ No newline at end of file diff --git a/ports/openssl/unix/ConfigureIncludeQuotesFix.patch b/ports/openssl/unix/ConfigureIncludeQuotesFix.patch new file mode 100644 index 000000000..09494f565 --- /dev/null +++ b/ports/openssl/unix/ConfigureIncludeQuotesFix.patch @@ -0,0 +1,13 @@ +diff --git a/Configure b/Configure +index c98107a..77ad9d3 100644 +--- a/Configure ++++ b/Configure +@@ -972,7 +972,7 @@ PROCESS_ARGS: + } + elsif (/^--with-zlib-include=(.*)$/) + { +- $withargs{"zlib-include"}="-I$1"; ++ $withargs{"zlib-include"}="-I\"$1\""; + } + elsif (/^--with-fipsdir=(.*)$/) + { diff --git a/ports/openssl/unix/EmbedSymbolsInStaticLibsZ7.patch b/ports/openssl/unix/EmbedSymbolsInStaticLibsZ7.patch new file mode 100644 index 000000000..1a8de2c4b --- /dev/null +++ b/ports/openssl/unix/EmbedSymbolsInStaticLibsZ7.patch @@ -0,0 +1,25 @@ +diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl +index dba96cb..5722f6e 100644 +--- a/util/pl/VC-32.pl ++++ b/util/pl/VC-32.pl +@@ -154,9 +154,17 @@ else + $cflags=$opt_cflags.$base_cflags; + } + +-# generate symbols.pdb unconditionally +-$app_cflag.=" /Zi /Fd\$(TMP_D)/app"; +-$lib_cflag.=" /Zi /Fd\$(TMP_D)/lib"; ++# generate symbols.pdb when building dlls and embed symbols when building static libs ++if ($shlib) ++ { ++ $app_cflag.=" /Zi /Fd\$(TMP_D)/app.pdb"; ++ $lib_cflag.=" /Zi /Fd\$(TMP_D)/lib.pdb"; ++ } ++else ++ { ++ $app_cflag.=" /Z7"; ++ $lib_cflag.=" /Z7"; ++ } + $lflags.=" /debug"; + + $obj='.obj'; diff --git a/ports/openssl/unix/STRINGIFYPatch.patch b/ports/openssl/unix/STRINGIFYPatch.patch new file mode 100644 index 000000000..dd8f9c297 --- /dev/null +++ b/ports/openssl/unix/STRINGIFYPatch.patch @@ -0,0 +1,23 @@ +diff --git a/crypto/cversion.c b/crypto/cversion.c +index bfff699..17b7912 100644 +--- a/crypto/cversion.c ++++ b/crypto/cversion.c +@@ -56,6 +56,9 @@ + * [including the GNU Public Licence.] + */ + ++#define STRINGIFY2(x) #x ++#define STRINGIFY(x) STRINGIFY2(x) ++ + #include "cryptlib.h" + + #ifndef NO_WINDOWS_BRAINDEATH +@@ -79,7 +82,7 @@ const char *SSLeay_version(int t) + } + if (t == SSLEAY_CFLAGS) { + #ifdef CFLAGS +- return (CFLAGS); ++ return STRINGIFY(CFLAGS); + #else + return ("compiler: information not available"); + #endif diff --git a/ports/openssl/unix/portfile.cmake b/ports/openssl/unix/portfile.cmake new file mode 100644 index 000000000..00f503f95 --- /dev/null +++ b/ports/openssl/unix/portfile.cmake @@ -0,0 +1,47 @@ +if (NOT VCPKG_TARGET_IS_MINGW) + vcpkg_fail_port_install(MESSAGE "${PORT} is only for openssl on Unix-like systems" ON_TARGET "UWP" "Windows") +endif() + +vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH MASTER_COPY_SOURCE_PATH + ARCHIVE "${ARCHIVE}" + REF ${OPENSSL_VERSION} +) + +if(CMAKE_HOST_WIN32) + vcpkg_acquire_msys(MSYS_ROOT PACKAGES make perl) + set(MAKE ${MSYS_ROOT}/usr/bin/make.exe) + set(PERL ${MSYS_ROOT}/usr/bin/perl.exe) +else() + find_program(MAKE make) + if(NOT MAKE) + message(FATAL_ERROR "Could not find make. Please install it through your package manager.") + endif() +endif() + +vcpkg_configure_cmake( + SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR} + PREFER_NINJA + OPTIONS + -DSOURCE_PATH=${MASTER_COPY_SOURCE_PATH} + -DPERL=${PERL} + -DMAKE=${MAKE} + OPTIONS_RELEASE + -DINSTALL_HEADERS=ON +) + +vcpkg_install_cmake() + +file(GLOB HEADERS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*/include/openssl/*.h) +set(RESOLVED_HEADERS) +foreach(HEADER ${HEADERS}) + get_filename_component(X "${HEADER}" REALPATH) + list(APPEND RESOLVED_HEADERS "${X}") +endforeach() + +file(INSTALL ${RESOLVED_HEADERS} DESTINATION ${CURRENT_PACKAGES_DIR}/include/openssl) +file(INSTALL ${MASTER_COPY_SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl) +endif() diff --git a/ports/openssl/unix/remove-deps.cmake b/ports/openssl/unix/remove-deps.cmake new file mode 100644 index 000000000..a57c70fe9 --- /dev/null +++ b/ports/openssl/unix/remove-deps.cmake @@ -0,0 +1,7 @@ +file(GLOB_RECURSE MAKEFILES ${DIR}/*/Makefile)
+foreach(MAKEFILE ${MAKEFILES})
+ message("removing deps from ${MAKEFILE}")
+ file(READ "${MAKEFILE}" _contents)
+ string(REGEX REPLACE "\n# DO NOT DELETE THIS LINE.*" "" _contents "${_contents}")
+ file(WRITE "${MAKEFILE}" "${_contents}")
+endforeach()
diff --git a/ports/openssl/unix/vcpkg-cmake-wrapper.cmake b/ports/openssl/unix/vcpkg-cmake-wrapper.cmake new file mode 100644 index 000000000..43e84cb02 --- /dev/null +++ b/ports/openssl/unix/vcpkg-cmake-wrapper.cmake @@ -0,0 +1,18 @@ +_find_package(${ARGS})
+if(OPENSSL_FOUND)
+ find_library(OPENSSL_DL_LIBRARY NAMES dl)
+ if(OPENSSL_DL_LIBRARY)
+ list(APPEND OPENSSL_LIBRARIES "dl")
+ if(TARGET OpenSSL::Crypto)
+ set_property(TARGET OpenSSL::Crypto APPEND PROPERTY INTERFACE_LINK_LIBRARIES "dl")
+ endif()
+ endif()
+ find_package(Threads REQUIRED)
+ list(APPEND OPENSSL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+ if(TARGET OpenSSL::Crypto)
+ set_property(TARGET OpenSSL::Crypto APPEND PROPERTY INTERFACE_LINK_LIBRARIES "Threads::Threads")
+ endif()
+ if(TARGET OpenSSL::SSL)
+ set_property(TARGET OpenSSL::SSL APPEND PROPERTY INTERFACE_LINK_LIBRARIES "Threads::Threads")
+ endif()
+endif()
|
