File mbedtls.spec of Package mbedtls

%define realname mbedtls
%define realver  3.4.1
%define srcext   tar.gz

%bcond_without ninja

%define crypto_so_ver 14
%define tls_so_ver    19
%define x509_so_ver    5

# turn off the generation of debuginfo rpm  (RH9) ??
%global debug_package %{nil}

# Common info
Name:          %{realname}
Version:       %{realver}
Release:       wiz%{?extraver:0.}1%{?dist}
License:       Apache-2.0
Group:         Productivity/Networking/Security
URL:           https://www.trustedfirmware.org/projects/mbed-tls/
Summary:       Implementation of Secure Sockets Layer (SSL) protocol

# Build-time parameters
BuildRequires: cmake >= 3.5.1
%if %{with ninja}
BuildRequires: ninja
%endif
BuildRequires: python3%{?suse_version:-base}
BuildRoot:     %{_tmppath}/%{name}-root
Source:        https://codeload.github.com/Mbed-TLS/mbedtls/%{srcext}/refs/tags/v%{realver}#/%{realname}-%{realver}%{?extraver}.%{srcext}

%description
Mbed TLS is a C library that implements cryptographic primitives, X.509
certificate manipulation and the SSL/TLS and DTLS protocols. Its small code
footprint makes it suitable for embedded systems.

%package -n libmbedcrypto%{crypto_so_ver}
Group:         System/Libraries
Summary:       Mbed TLS crypto API
# Install-time parameters
Provides:      libmbedcrypto = %{version}-%{release}

%description -n libmbedcrypto%{crypto_so_ver}
Mbed TLS is a C library that implements cryptographic primitives, X.509
certificate manipulation and the SSL/TLS and DTLS protocols. Its small code
footprint makes it suitable for embedded systems.

This library provides the crypto API.

%package -n libmbedtls%{tls_so_ver}
Group:         System/Libraries
Summary:       Mbed TLS API
# Install-time parameters
Provides:      libmbedtls = %{version}-%{release}

%description -n libmbedtls%{tls_so_ver}
Mbed TLS is a C library that implements cryptographic primitives, X.509
certificate manipulation and the SSL/TLS and DTLS protocols. Its small code
footprint makes it suitable for embedded systems.

This library provides the TLS API.

%package -n libmbedx509-%{x509_so_ver}
Group:         System/Libraries
Summary:       Mbed TLS X.509 API
# Install-time parameters
Provides:      libmbedx509 = %{version}-%{release}

%description -n libmbedx509-%{x509_so_ver}
Mbed TLS is a C library that implements cryptographic primitives, X.509
certificate manipulation and the SSL/TLS and DTLS protocols. Its small code
footprint makes it suitable for embedded systems.

This library provides the X.509 API.

%package devel
Group:         Development/Languages/C and C++
Summary:       Development files for %{name}
Requires:      libmbedcrypto%{crypto_so_ver} = %{version}-%{release}
Requires:      libmbedtls%{tls_so_ver} = %{version}-%{release}
Requires:      libmbedx509-%{x509_so_ver} = %{version}-%{release}
Provides:      libmbedtls-devel = %{version}-%{release}
Provides:      libmbedcrypto%{crypto_so_ver}-devel = %{version}-%{release}
Provides:      libmbedtls%{tls_so_ver}-devel = %{version}-%{release}
Provides:      libmbedx509-%{x509_so_ver}-devel = %{version}-%{release}
Provides:      libmbedcrypto-devel = %{version}-%{release}
Provides:      libmbedx509-devel = %{version}-%{release}
Obsoletes:     libmbedtls-devel < %{version}-%{release}

%description devel
Development files for %{name}

# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{version}

%build
_CFLAGS='%{optflags} %{?gcc_lto} -DMBEDTLS_THREADING_PTHREAD -DMBEDTLS_THREADING_C'
_LDFLAGS='-Wl,--as-needed -Wl,--strip-all -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro %{?gcc_lto}'
_CMAKE_ARGS=(
 -DCMAKE_INSTALL_PREFIX=%{_prefix}
 -DCMAKE_BUILD_TYPE=Release
 -DCMAKE_C_FLAGS_RELEASE="$_CFLAGS"
 -DCMAKE_EXE_LINKER_FLAGS_RELEASE="$_LDFLAGS"
 -DCMAKE_MODULE_LINKER_FLAGS_RELEASE="$_LDFLAGS"
 -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="$_LDFLAGS"
 -DCMAKE_VERBOSE_MAKEFILE=YES
)
cmake -S . -B build \
%if %{with ninja}
 -G Ninja \
%endif
 "${_CMAKE_ARGS[@]}" \
 \
 -DLIB_INSTALL_DIR=%{_lib} \
 -DENABLE_TESTING=OFF \
 -DUSE_STATIC_MBEDTLS_LIBRARY=OFF \
 -DUSE_SHARED_MBEDTLS_LIBRARY=ON \
 -DMBEDTLS_FATAL_WARNINGS=ON
%if %{with ninja}
ninja -v -C build %{?_smp_mflags}
%else
%{__make} -C build %{?_smp_mflags}
%endif

%install
%if %{with ninja}
DESTDIR=%{buildroot} ninja -v -C build install
%else
%{__make} -C build install DESTDIR=%{buildroot}
%endif

%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}

%files
%defattr(-,root,root)
%license LICENSE
%doc ChangeLog README.md
%{_bindir}/*

%files -n libmbedcrypto%{crypto_so_ver}
%defattr(-,root,root)
%{_libdir}/libmbedcrypto.so.%{crypto_so_ver}*
%{_libdir}/libmbedcrypto.so.%{version}

%files -n libmbedtls%{tls_so_ver}
%defattr(-,root,root)
%{_libdir}/libmbedtls.so.%{tls_so_ver}*
%{_libdir}/libmbedtls.so.%{version}

%files -n libmbedx509-%{x509_so_ver}
%defattr(-,root,root)
%{_libdir}/libmbedx509.so.%{x509_so_ver}*
%{_libdir}/libmbedx509.so.%{version}

# Development stuff
%files devel
%defattr(-,root,root)
%{_includedir}/%{realname}/
%{_includedir}/psa/
%{_libdir}/*.so
%dir %{_libdir}/cmake/MbedTLS
%dir %{_libdir}/cmake
%{_libdir}/cmake/MbedTLS/*.cmake

%post   -n libmbedcrypto%{crypto_so_ver} -p /sbin/ldconfig
%postun -n libmbedcrypto%{crypto_so_ver} -p /sbin/ldconfig

%post   -n libmbedtls%{tls_so_ver} -p /sbin/ldconfig
%postun -n libmbedtls%{tls_so_ver} -p /sbin/ldconfig

%post   -n libmbedx509-%{x509_so_ver} -p /sbin/ldconfig
%postun -n libmbedx509-%{x509_so_ver} -p /sbin/ldconfig

%changelog
openSUSE Build Service is sponsored by