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