OpenSSLConfig.cmake.in 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. # Generated by OpenSSL
  2. {-
  3. use lib catdir($config{sourcedir}, 'Configurations');
  4. use platform;
  5. use Data::Dumper;
  6. our %lib_info = (
  7. map { my %x = ();
  8. my $lib_static = platform->staticlib($_);
  9. my $lib_shared =
  10. (platform->can("sharedlib_simple")
  11. ? platform->sharedlib_simple($_)
  12. : undef)
  13. // platform->sharedlib($_);
  14. $x{static} = $lib_static if $lib_static;
  15. $x{shared} = $lib_shared if $lib_shared;
  16. if (platform->can("sharedlib_import")) {
  17. my $lib_shared_import = platform->sharedlib_import($_);
  18. $x{shared_import} = $lib_shared_import if $lib_shared_import;
  19. }
  20. %x ? ( $_ => \%x ) : () }
  21. grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
  22. @{$unified_info{libraries}}
  23. );
  24. our $no_static = !$disabled{shared} && !$lib_info{libcrypto}->{static};
  25. our $no_shared = $disabled{shared};
  26. # Unixifying of paths, because that's what CMake understands.
  27. # This assumes that the given path is absolute.
  28. sub unixify {
  29. use File::Spec;
  30. use File::Spec::Unix;
  31. my $path = shift;
  32. my $no_file = shift;
  33. (my $volume, $directories, $file) = File::Spec->splitpath($path, $no_file // ());
  34. $directories = File::Spec::Unix->catdir(File::Spec->splitdir($directories));
  35. # We know that $volume is ignored by File::Spec::Unix, so we handle it specially
  36. # according to the conventions of the platform.
  37. $volume =~ s|^(.*?):$|/$1| if $^O eq "vms"; # On VMS, DEV: -> /DEV
  38. return $volume . File::Spec::Unix->catpath('', $directories, $no_file ? () : $file);
  39. }
  40. ""
  41. -}
  42. # Commands may need to know the format version.
  43. set(CMAKE_IMPORT_FILE_VERSION 1)
  44. # Avoid duplicate find_package()
  45. set(_ossl_expected_targets OpenSSL::Crypto OpenSSL::SSL
  46. {- output_off() if $disabled{uplink}; "" -}OpenSSL::applink{- output_on() if $disabled{uplink}; "" -})
  47. set(_ossl_defined_targets)
  48. set(_ossl_undefined_targets)
  49. foreach(t IN LISTS _ossl_expected_targets)
  50. if(TARGET "${t}")
  51. LIST(APPEND _ossl_defined_targets "${t}")
  52. else()
  53. LIST(APPEND _ossl_undefined_targets "${t}")
  54. endif()
  55. endforeach()
  56. message(DEBUG "_ossl_expected_targets = ${_ossl_expected_targets}")
  57. message(DEBUG "_ossl_defined_targets = ${_ossl_defined_targets}")
  58. message(DEBUG "_ossl_undefined_targets = ${_ossl_undefined_targets}")
  59. if(NOT _ossl_undefined_targets)
  60. # All targets are defined, we're good, just undo everything and return
  61. unset(_ossl_expected_targets)
  62. unset(_ossl_defined_targets)
  63. unset(_ossl_undefined_targets)
  64. unset(CMAKE_IMPORT_FILE_VERSION)
  65. return()
  66. endif()
  67. if(_ossl_defined_targets)
  68. # We have a mix of defined and undefined targets. This is hard to reconcile,
  69. # and probably the result of another config, or FindOpenSSL.cmake having been
  70. # called, or whatever. Therefore, the best course of action is to quit with a
  71. # hard error.
  72. message(FATAL_ERROR "Some targets defined, others not:\nNot defined: ${_ossl_undefined_targets}\nDefined: ${_ossl_defined_targets}")
  73. endif()
  74. unset(_ossl_expected_targets)
  75. unset(_ossl_defined_targets)
  76. unset(_ossl_undefined_targets)
  77. {-
  78. # It can be argued that 'cmake_path' would be the better choice here. However,
  79. # cmake_path is relatively new, while get_filename_component has been around
  80. # since before CMake 3.0
  81. -}
  82. # Set up the import path, so all other import paths are made relative this file
  83. get_filename_component(_ossl_prefix "${CMAKE_CURRENT_LIST_FILE}" PATH)
  84. {-
  85. # For each component in $OpenSSL::safe::installdata::CMAKECONFIGDIR[0] relative to
  86. # $OpenSSL::safe::installdata::PREFIX[0], have CMake figure out the parent directory.
  87. my $d = join('/', unixify(catdir($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0],
  88. $OpenSSL::safe::installdata::CMAKECONFIGDIR_REL_LIBDIR[0]), 1));
  89. $OUT = '';
  90. if ($d ne '.') {
  91. $OUT .= 'get_filename_component(_ossl_prefix "${_ossl_prefix}" PATH)' . "\n"
  92. foreach (split '/', $d);
  93. }
  94. -}
  95. if(_ossl_prefix STREQUAL "/")
  96. set(_ossl_prefix "")
  97. endif()
  98. {- output_off() unless $disabled{shared}; "" -}
  99. set(_ossl_use_static_libs True)
  100. {- output_on() unless $disabled{shared}; "" -}
  101. if(OPENSSL_USE_STATIC_LIBS)
  102. set(_ossl_use_static_libs True)
  103. elseif(DEFINED OPENSSL_USE_STATIC_LIBS)
  104. # We know OPENSSL_USE_STATIC_LIBS is defined and False
  105. if(_ossl_use_static_libs)
  106. # OPENSSL_USE_STATIC_LIBS is explicitly false, indicating that shared libraries are
  107. # required. However, _ossl_use_static_libs indicates that no shared libraries are
  108. # available. The best course of action is to simply return and leave it to CMake to
  109. # use another OpenSSL config.
  110. unset(_ossl_use_static_libs)
  111. unset(CMAKE_IMPORT_FILE_VERSION)
  112. return()
  113. endif()
  114. endif()
  115. # Version, copied from what find_package() gives, for compatibility with FindOpenSSL.cmake
  116. set(OPENSSL_VERSION "${OpenSSL_VERSION}")
  117. set(OPENSSL_VERSION_MAJOR "${OpenSSL_VERSION_MAJOR}")
  118. set(OPENSSL_VERSION_MINOR "${OpenSSL_VERSION_MINOR}")
  119. set(OPENSSL_VERSION_FIX "${OpenSSL_VERSION_PATCH}")
  120. set(OPENSSL_FOUND YES)
  121. # Directories and names
  122. set(OPENSSL_LIBRARY_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0], 1); -}")
  123. set(OPENSSL_INCLUDE_DIR{- $OUT = '';
  124. $OUT .= ' "${_ossl_prefix}/' . $_ . '"'
  125. foreach (@OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX); -})
  126. set(OPENSSL_ENGINES_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0], 1); -}/{- unixify($OpenSSL::safe::installdata::ENGINESDIR_REL_LIBDIR[0], 1); -}")
  127. set(OPENSSL_MODULES_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL_PREFIX[0], 1); -}/{- unixify($OpenSSL::safe::installdata::MODULESDIR_REL_LIBDIR[0], 1); -}")
  128. set(OPENSSL_RUNTIME_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::BINDIR_REL_PREFIX[0], 1); -}")
  129. {- output_off() if $disabled{uplink}; "" -}
  130. set(OPENSSL_APPLINK_SOURCE "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::APPLINKDIR_REL_PREFIX[0], 1); -}/applink.c")
  131. {- output_on() if $disabled{uplink}; "" -}
  132. set(OPENSSL_PROGRAM "${OPENSSL_RUNTIME_DIR}/{- platform->bin('openssl') -}")
  133. # Set up the imported targets
  134. if(_ossl_use_static_libs)
  135. {- output_off() unless $no_static; "" -}
  136. # Static libraries are UNSUPPORTED in this configuration
  137. {- output_on() unless $no_static; output_off() if $no_static; "" -}
  138. add_library(OpenSSL::Crypto STATIC IMPORTED)
  139. add_library(OpenSSL::SSL STATIC IMPORTED)
  140. set(OPENSSL_LIBCRYPTO_STATIC "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libcrypto}->{static} -}")
  141. set(OPENSSL_LIBCRYPTO_DEPENDENCIES {- join(' ', @OpenSSL::safe::installdata::LDLIBS) -})
  142. set_target_properties(OpenSSL::Crypto PROPERTIES
  143. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  144. IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_STATIC})
  145. set_property(TARGET OpenSSL::Crypto
  146. PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  147. set(OPENSSL_LIBSSL_STATIC "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libssl}->{static} -}")
  148. set(OPENSSL_LIBSSL_DEPENDENCIES OpenSSL::Crypto)
  149. set_target_properties(OpenSSL::SSL PROPERTIES
  150. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  151. IMPORTED_LOCATION ${OPENSSL_LIBSSL_STATIC})
  152. set_property(TARGET OpenSSL::SSL
  153. PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBSSL_DEPENDENCIES})
  154. # Directories and names compatible with CMake's FindOpenSSL.cmake
  155. set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_STATIC})
  156. set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  157. set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_STATIC})
  158. set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES})
  159. set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES} ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  160. {- output_on(); "" -}
  161. else()
  162. {- output_off() unless $no_shared; "" -}
  163. # Shared libraries are UNSUPPORTED in this configuration
  164. {- output_on() unless $no_shared;
  165. output_off() if $no_shared; "" -}
  166. add_library(OpenSSL::Crypto SHARED IMPORTED)
  167. add_library(OpenSSL::SSL SHARED IMPORTED)
  168. {- output_off() unless $lib_info{libcrypto}->{shared_import}; "" -}
  169. set(OPENSSL_LIBCRYPTO_SHARED "${OPENSSL_RUNTIME_DIR}/{- $lib_info{libcrypto}->{shared} -}")
  170. set(OPENSSL_LIBCRYPTO_IMPORT "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libcrypto}->{shared_import} -}")
  171. set(OPENSSL_LIBCRYPTO_DEPENDENCIES {- join(' ', @LDLIBS) -})
  172. set_target_properties(OpenSSL::Crypto PROPERTIES
  173. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  174. IMPORTED_IMPLIB ${OPENSSL_LIBCRYPTO_IMPORT}
  175. IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_SHARED})
  176. set_property(TARGET OpenSSL::Crypto
  177. PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  178. set(OPENSSL_LIBSSL_SHARED "${OPENSSL_RUNTIME_DIR}/{- $lib_info{libssl}->{shared} -}")
  179. set(OPENSSL_LIBSSL_IMPORT "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libssl}->{shared_import} -}")
  180. set(OPENSSL_LIBSSL_DEPENDENCIES OpenSSL::Crypto {- join(' ', @LDLIBS) -})
  181. set_target_properties(OpenSSL::SSL PROPERTIES
  182. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  183. IMPORTED_IMPLIB ${OPENSSL_LIBSSL_IMPORT}
  184. IMPORTED_LOCATION ${OPENSSL_LIBSSL_SHARED})
  185. set_property(TARGET OpenSSL::SSL
  186. PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBSSL_DEPENDENCIES})
  187. # Directories and names compatible with CMake's FindOpenSSL.cmake
  188. set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_IMPORT})
  189. set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  190. set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_IMPORT})
  191. set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES})
  192. set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES} ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  193. {- output_on() unless $lib_info{libcrypto}->{shared_import};
  194. output_off() if $lib_info{libcrypto}->{shared_import}; "" -}
  195. # Dependencies are assumed to be implied in the shared libraries
  196. set(OPENSSL_LIBCRYPTO_SHARED "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libcrypto}->{shared} -}")
  197. set_target_properties(OpenSSL::Crypto PROPERTIES
  198. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  199. IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_SHARED})
  200. set(OPENSSL_LIBSSL_SHARED "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libssl}->{shared} -}")
  201. set_target_properties(OpenSSL::SSL PROPERTIES
  202. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  203. IMPORTED_LOCATION ${OPENSSL_LIBSSL_SHARED})
  204. # Directories and names compatible with CMake's FindOpenSSL.cmake
  205. set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_SHARED})
  206. set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
  207. set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_SHARED})
  208. set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
  209. set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES})
  210. {- output_on() if $lib_info{libcrypto}->{shared_import}; "" -}
  211. {- output_on() if $no_shared; "" -}
  212. endif()
  213. set_target_properties(OpenSSL::Crypto PROPERTIES
  214. INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
  215. set_target_properties(OpenSSL::SSL PROPERTIES
  216. INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
  217. {- output_off() if $disabled{uplink}; "" -}
  218. add_library(OpenSSL::applink INTERFACE IMPORTED)
  219. set_property(TARGET OpenSSL::applink PROPERTY
  220. INTERFACE_SOURCES "${OPENSSL_APPLINK_SOURCE}")
  221. {- output_on() if $disabled{uplink}; "" -}
  222. unset(_ossl_prefix)
  223. unset(_ossl_use_static_libs)