summaryrefslogtreecommitdiffstats
path: root/vendor/openssl/src/version.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:47:55 +0000
commit2aadc03ef15cb5ca5cc2af8a7c08e070742f0ac4 (patch)
tree033cc839730fda84ff08db877037977be94e5e3a /vendor/openssl/src/version.rs
parentInitial commit. (diff)
downloadcargo-2aadc03ef15cb5ca5cc2af8a7c08e070742f0ac4.tar.xz
cargo-2aadc03ef15cb5ca5cc2af8a7c08e070742f0ac4.zip
Adding upstream version 0.70.1+ds1.upstream/0.70.1+ds1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/openssl/src/version.rs')
-rw-r--r--vendor/openssl/src/version.rs135
1 files changed, 135 insertions, 0 deletions
diff --git a/vendor/openssl/src/version.rs b/vendor/openssl/src/version.rs
new file mode 100644
index 0000000..f1a324c
--- /dev/null
+++ b/vendor/openssl/src/version.rs
@@ -0,0 +1,135 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+//! Build and version information.
+
+use cfg_if::cfg_if;
+use openssl_macros::corresponds;
+use std::ffi::CStr;
+
+cfg_if! {
+ if #[cfg(any(ossl110, libressl271))] {
+ use ffi::{
+ OPENSSL_VERSION, OPENSSL_CFLAGS, OPENSSL_BUILT_ON, OPENSSL_PLATFORM, OPENSSL_DIR,
+ OpenSSL_version_num, OpenSSL_version,
+ };
+ } else {
+ use ffi::{
+ SSLEAY_VERSION as OPENSSL_VERSION, SSLEAY_CFLAGS as OPENSSL_CFLAGS,
+ SSLEAY_BUILT_ON as OPENSSL_BUILT_ON, SSLEAY_PLATFORM as OPENSSL_PLATFORM,
+ SSLEAY_DIR as OPENSSL_DIR, SSLeay as OpenSSL_version_num,
+ SSLeay_version as OpenSSL_version,
+ };
+ }
+}
+
+/// OPENSSL_VERSION_NUMBER is a numeric release version identifier:
+///
+/// `MNNFFPPS: major minor fix patch status`
+///
+/// The status nibble has one of the values 0 for development, 1 to e for betas 1 to 14, and f for release.
+///
+/// for example
+///
+/// `0x000906000 == 0.9.6 dev`
+/// `0x000906023 == 0.9.6b beta 3`
+/// `0x00090605f == 0.9.6e release`
+#[corresponds(OpenSSL_version_num)]
+pub fn number() -> i64 {
+ unsafe { OpenSSL_version_num() as i64 }
+}
+
+/// The text variant of the version number and the release date. For example, "OpenSSL 0.9.5a 1 Apr 2000".
+#[corresponds(OpenSSL_version)]
+pub fn version() -> &'static str {
+ unsafe {
+ CStr::from_ptr(OpenSSL_version(OPENSSL_VERSION))
+ .to_str()
+ .unwrap()
+ }
+}
+
+/// The compiler flags set for the compilation process in the form "compiler: ..." if available or
+/// "compiler: information not available" otherwise.
+#[corresponds(OpenSSL_version)]
+pub fn c_flags() -> &'static str {
+ unsafe {
+ CStr::from_ptr(OpenSSL_version(OPENSSL_CFLAGS))
+ .to_str()
+ .unwrap()
+ }
+}
+
+/// The date of the build process in the form "built on: ..." if available or "built on: date not available" otherwise.
+#[corresponds(OpenSSL_version)]
+pub fn built_on() -> &'static str {
+ unsafe {
+ CStr::from_ptr(OpenSSL_version(OPENSSL_BUILT_ON))
+ .to_str()
+ .unwrap()
+ }
+}
+
+/// The "Configure" target of the library build in the form "platform: ..." if available or "platform: information not available" otherwise.
+#[corresponds(OpenSSL_version)]
+pub fn platform() -> &'static str {
+ unsafe {
+ CStr::from_ptr(OpenSSL_version(OPENSSL_PLATFORM))
+ .to_str()
+ .unwrap()
+ }
+}
+
+/// The "OPENSSLDIR" setting of the library build in the form "OPENSSLDIR: "..."" if available or "OPENSSLDIR: N/A" otherwise.
+#[corresponds(OpenSSL_version)]
+pub fn dir() -> &'static str {
+ unsafe {
+ CStr::from_ptr(OpenSSL_version(OPENSSL_DIR))
+ .to_str()
+ .unwrap()
+ }
+}
+
+/// This test ensures that we do not segfault when calling the functions of this module
+/// and that the strings respect a reasonable format.
+#[test]
+fn test_versions() {
+ println!("Number: '{}'", number());
+ println!("Version: '{}'", version());
+ println!("C flags: '{}'", c_flags());
+ println!("Built on: '{}'", built_on());
+ println!("Platform: '{}'", platform());
+ println!("Dir: '{}'", dir());
+
+ #[cfg(not(any(libressl, boringssl)))]
+ fn expected_name() -> &'static str {
+ "OpenSSL"
+ }
+ #[cfg(libressl)]
+ fn expected_name() -> &'static str {
+ "LibreSSL"
+ }
+ #[cfg(boringssl)]
+ fn expected_name() -> &'static str {
+ "BoringSSL"
+ }
+
+ assert!(number() > 0);
+ assert!(version().starts_with(expected_name()));
+ assert!(c_flags().starts_with("compiler:"));
+ // some distributions patch out dates out of openssl so that the builds are reproducible
+ if !built_on().is_empty() {
+ assert!(built_on().starts_with("built on:"));
+ }
+ assert!(dir().starts_with("OPENSSLDIR:"));
+}