OpenSSLConfig.cmake.in 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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_REL, have CMake
  86. # out the parent directory.
  87. my $d = unixify($OpenSSL::safe::installdata::CMAKECONFIGDIR_REL);
  88. $OUT = '';
  89. $OUT .= 'get_filename_component(_ossl_prefix "${_ossl_prefix}" PATH)' . "\n"
  90. foreach (split '/', $d);
  91. -}
  92. if(_ossl_prefix STREQUAL "/")
  93. set(_ossl_prefix "")
  94. endif()
  95. {- output_off() unless $disabled{shared}; "" -}
  96. set(_ossl_use_static_libs True)
  97. {- output_on() unless $disabled{shared}; "" -}
  98. if(OPENSSL_USE_STATIC_LIBS)
  99. set(_ossl_use_static_libs True)
  100. elseif(DEFINED OPENSSL_USE_STATIC_LIBS)
  101. # We know OPENSSL_USE_STATIC_LIBS is defined and False
  102. if(_ossl_use_static_libs)
  103. # OPENSSL_USE_STATIC_LIBS is explicitly false, indicating that shared libraries are
  104. # required. However, _ossl_use_static_libs indicates that no shared libraries are
  105. # available. The best course of action is to simply return and leave it to CMake to
  106. # use another OpenSSL config.
  107. unset(_ossl_use_static_libs)
  108. unset(CMAKE_IMPORT_FILE_VERSION)
  109. return()
  110. endif()
  111. endif()
  112. # Version, copied from what find_package() gives, for compatibility with FindOpenSSL.cmake
  113. set(OPENSSL_VERSION "${OpenSSL_VERSION}")
  114. set(OPENSSL_VERSION_MAJOR "${OpenSSL_VERSION_MAJOR}")
  115. set(OPENSSL_VERSION_MINOR "${OpenSSL_VERSION_MINOR}")
  116. set(OPENSSL_VERSION_FIX "${OpenSSL_VERSION_PATCH}")
  117. set(OPENSSL_FOUND YES)
  118. # Directories and names
  119. set(OPENSSL_INCLUDE_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::INCLUDEDIR_REL, 1); -}")
  120. set(OPENSSL_LIBRARY_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::LIBDIR_REL, 1); -}")
  121. set(OPENSSL_ENGINES_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::ENGINESDIR_REL, 1); -}")
  122. set(OPENSSL_MODULES_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::MODULESDIR_REL, 1); -}")
  123. set(OPENSSL_RUNTIME_DIR "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::BINDIR_REL, 1); -}")
  124. {- output_off() if $disabled{uplink}; "" -}
  125. set(OPENSSL_APPLINK_SOURCE "${_ossl_prefix}/{- unixify($OpenSSL::safe::installdata::APPLINKDIR_REL, 1); -}/applink.c")
  126. {- output_on() if $disabled{uplink}; "" -}
  127. set(OPENSSL_PROGRAM "${OPENSSL_RUNTIME_DIR}/{- platform->bin('openssl') -}")
  128. # Set up the imported targets
  129. if(_ossl_use_static_libs)
  130. {- output_off() unless $no_static; "" -}
  131. # Static libraries are UNSUPPORTED in this configuration
  132. {- output_on() unless $no_static; output_off() if $no_static; "" -}
  133. add_library(OpenSSL::Crypto STATIC IMPORTED)
  134. add_library(OpenSSL::SSL STATIC IMPORTED)
  135. set(OPENSSL_LIBCRYPTO_STATIC "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libcrypto}->{static} -}")
  136. set(OPENSSL_LIBCRYPTO_DEPENDENCIES {- join(' ', @OpenSSL::safe::installdata::LDLIBS) -})
  137. set_target_properties(OpenSSL::Crypto PROPERTIES
  138. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  139. IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_STATIC})
  140. set_property(TARGET OpenSSL::Crypto
  141. PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  142. set(OPENSSL_LIBSSL_STATIC "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libssl}->{static} -}")
  143. set(OPENSSL_LIBSSL_DEPENDENCIES OpenSSL::Crypto)
  144. set_target_properties(OpenSSL::SSL PROPERTIES
  145. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  146. IMPORTED_LOCATION ${OPENSSL_LIBSSL_STATIC})
  147. set_property(TARGET OpenSSL::SSL
  148. PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBSSL_DEPENDENCIES})
  149. # Directories and names compatible with CMake's FindOpenSSL.cmake
  150. set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_STATIC})
  151. set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  152. set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_STATIC})
  153. set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES})
  154. set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES} ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  155. {- output_on(); "" -}
  156. else()
  157. {- output_off() unless $no_shared; "" -}
  158. # Shared libraries are UNSUPPORTED in this configuration
  159. {- output_on() unless $no_shared;
  160. output_off() if $no_shared; "" -}
  161. add_library(OpenSSL::Crypto SHARED IMPORTED)
  162. add_library(OpenSSL::SSL SHARED IMPORTED)
  163. {- output_off() unless $lib_info{libcrypto}->{shared_import}; "" -}
  164. set(OPENSSL_LIBCRYPTO_SHARED "${OPENSSL_RUNTIME_DIR}/{- $lib_info{libcrypto}->{shared} -}")
  165. set(OPENSSL_LIBCRYPTO_IMPORT "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libcrypto}->{shared_import} -}")
  166. set(OPENSSL_LIBCRYPTO_DEPENDENCIES {- join(' ', @LDLIBS) -})
  167. set_target_properties(OpenSSL::Crypto PROPERTIES
  168. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  169. IMPORTED_IMPLIB ${OPENSSL_LIBCRYPTO_IMPORT}
  170. IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_SHARED})
  171. set_property(TARGET OpenSSL::Crypto
  172. PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  173. set(OPENSSL_LIBSSL_SHARED "${OPENSSL_RUNTIME_DIR}/{- $lib_info{libssl}->{shared} -}")
  174. set(OPENSSL_LIBSSL_IMPORT "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libssl}->{shared_import} -}")
  175. set(OPENSSL_LIBSSL_DEPENDENCIES OpenSSL::Crypto {- join(' ', @LDLIBS) -})
  176. set_target_properties(OpenSSL::SSL PROPERTIES
  177. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  178. IMPORTED_IMPLIB ${OPENSSL_LIBSSL_IMPORT}
  179. IMPORTED_LOCATION ${OPENSSL_LIBSSL_SHARED})
  180. set_property(TARGET OpenSSL::SSL
  181. PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBSSL_DEPENDENCIES})
  182. # Directories and names compatible with CMake's FindOpenSSL.cmake
  183. set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_IMPORT})
  184. set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  185. set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_IMPORT})
  186. set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES})
  187. set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES} ${OPENSSL_LIBCRYPTO_DEPENDENCIES})
  188. {- output_on() unless $lib_info{libcrypto}->{shared_import};
  189. output_off() if $lib_info{libcrypto}->{shared_import}; "" -}
  190. # Dependencies are assumed to be implied in the shared libraries
  191. set(OPENSSL_LIBCRYPTO_SHARED "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libcrypto}->{shared} -}")
  192. set_target_properties(OpenSSL::Crypto PROPERTIES
  193. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  194. IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_SHARED})
  195. set(OPENSSL_LIBSSL_SHARED "${OPENSSL_LIBRARY_DIR}/{- $lib_info{libssl}->{shared} -}")
  196. set_target_properties(OpenSSL::SSL PROPERTIES
  197. IMPORTED_LINK_INTERFACE_LANGUAGES "C"
  198. IMPORTED_LOCATION ${OPENSSL_LIBSSL_SHARED})
  199. # Directories and names compatible with CMake's FindOpenSSL.cmake
  200. set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_SHARED})
  201. set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
  202. set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_SHARED})
  203. set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
  204. set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES})
  205. {- output_on() if $lib_info{libcrypto}->{shared_import}; "" -}
  206. {- output_on() if $no_shared; "" -}
  207. endif()
  208. set_target_properties(OpenSSL::Crypto PROPERTIES
  209. INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
  210. set_target_properties(OpenSSL::SSL PROPERTIES
  211. INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
  212. {- output_off() if $disabled{uplink}; "" -}
  213. add_library(OpenSSL::applink INTERFACE IMPORTED)
  214. set_property(TARGET OpenSSL::applink PROPERTY
  215. INTERFACE_SOURCES "${OPENSSL_APPLINK_SOURCE}")
  216. {- output_on() if $disabled{uplink}; "" -}
  217. unset(_ossl_prefix)
  218. unset(_ossl_use_static_libs)