File ixpdimm_sw.spec of Package ixpdimm_sw
#
# spec file for package ixpdimm_sw
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2016 Intel Corporation
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# allow building with SLE12-compatible package-names
%bcond_with short-invm-dnames
%define product_base_name ixpdimm
%define product_name %{product_base_name}_sw
%define api_release 01
%define apibase %{product_base_name}
%define apiname lib%{apibase}%{api_release}
%define corelibname lib%{product_base_name}-core%{api_release}
%define cliname %{product_base_name}-cli
%define clilibname lib%{cliname}%{api_release}
%define monitorname %{product_base_name}-monitor
%define cimplugin lib%{product_base_name}-cim
%define srcname %{product_name}-%{version}
%if %{with short-invm-dnames}
%define dname %{product_base_name}-devel
%define altdname %{product_name}-devel
%else
%define dname %{product_name}-devel
%define altdname %{product_base_name}-devel
%endif
%define min_i18n 1.0.0.1020
%define min_cim 1.0.0.1051
%define min_cli 1.0.0.1104
#define _unpackaged_files_terminate_build 0
Name: %{product_name}
Version: 01.00.00.2287
Release: 0
Summary: API for development of IXPDIMM management utilities
License: BSD-3-Clause
Group: System/Daemons
Url: https://01.org/ixpdimm-sw
Source: https://github.com/01org/%{product_name}/archive/v%{version}.tar.gz
Source1: ixpdimm_sw.rpmlintrc
ExclusiveArch: x86_64
BuildRequires: distribution-release
BuildRequires: gcc-c++
BuildRequires: libctemplate-devel
BuildRequires: libnuma-devel
BuildRequires: python
BuildRequires: sblim-cmpi-devel
BuildRequires: pkgconfig(libkmod)
BuildRequires: pkgconfig(libndctl)
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(sqlite3)
%if %{without short-invm-dnames}
BuildRequires: libinvm-cim-devel >= %{min_cim}
BuildRequires: libinvm-cli-devel >= %{min_cli}
BuildRequires: libinvm-i18n-devel >= %{min_i18n}
%else
BuildRequires: invm-cim-devel >= %{min_cim}
BuildRequires: invm-cli-devel >= %{min_cli}
BuildRequires: invm-i18n-devel >= %{min_i18n}
%endif
%description
An application program interface (API) for configuring and managing
%{product_name}, including basic inventory, capacity provisioning,
health monitoring, and troubleshooting.
%package -n %{apiname}
Summary: API for development of %{product_name} management utilities
Group: System/Libraries
Requires: %{apibase}-data
Requires: libinvm-cim1 >= %{min_cim}
Requires: libinvm-cli1 >= %{min_cli}
Requires: libinvm-i18n1 >= %{min_i18n}
Requires: libndctl6 >= 54
%description -n %{apiname}
An application program interface (API) for configuring and managing
%{product_name}, including basic inventory, capacity provisioning,
health monitoring, and troubleshooting.
%package -n %{apibase}-data
Summary: Data files for %{apibase}
Group: System/Libraries
%description -n %{apibase}-data
An application program interface (API) for configuring and managing
%{product_name}, including basic inventory, capacity provisioning,
health monitoring, and troubleshooting.
%package -n %{dname}
Summary: Development files for %{name}
Group: Development/Libraries/C and C++
Requires: %{apiname} = %{version}-%{release}
Requires: %{clilibname} = %{version}-%{release}
Requires: %{corelibname} = %{version}-%{release}
Obsoletes: %{altdname} < %{version}-%{release}
Provides: %{altdname} = %{version}-%{release}
%description -n %{dname}
This package contains header files for
developing applications that use %{name}.
%package -n %{corelibname}
Summary: Core library for %{name}
Group: System/Libraries
%description -n %{corelibname}
The package contains the core library that support
other %{product_name} products.
%package -n %{cimplugin}
Summary: CIM provider for %{name}
Group: System/Management
Requires: pywbem
Requires(post): pywbem
Requires(pre): pywbem
# CIM plugin accessed by dlopen(3)!
%description -n %{cimplugin}
%{cimplugin} is a common information model (CIM) provider that exposes
%{product_name} as standard CIM objects in order to plug-in to various
common information model object managers (CIMOMS).
%package -n %{monitorname}
Summary: Daemon for monitoring the status of %{product_name}
Group: System/Monitoring
BuildRequires: systemd-rpm-macros
%{?systemd_requires}
Requires: %{cimplugin} = %{version}-%{release}
%description -n %{monitorname}
A daemon for monitoring the health and status of %{product_name}
%package -n %{cliname}
Summary: CLI for managment of %{product_name}
Group: System/Management
Requires: %{clilibname} = %{version}-%{release}
%description -n %{cliname}
A command line interface (CLI) application for configuring and
managing %{product_name}, including commands for basic inventory,
capacity provisioning, health monitoring, and troubleshooting.
%package -n %{clilibname}
Summary: CLI for managment of %{product_name}
Group: System/Libraries
%description -n %{clilibname}
A command line interface (CLI) application for configuring and
managing %{product_name}, including commands for basic inventory,
capacity provisioning, health monitoring, and troubleshooting.
%prep
%setup -q -n %{srcname}
perl -pi -e 's{^(.*SCHEMA_GEN_ABS.*)$}{# $1}' src/common/makefile
perl -pi -e 's{(\$\(LIBS\) -o \$\@)}{\$(LDFLAGS) $1}' src/cli/makefile
perl -pi -e 's{(\$\(LIBS\) -o \$\@)}{\$(LDFLAGS) $1}' src/monitor/makefile
# temporary fix for bsc#1073784 (introduced by SUSE packaging-guidelines)
perl -pi -e 'print "#define SFY( x) #x\n#define STRINGIFY(x) SFY(x)\n"
if s{("\.so",) 4}{$1 buffer_len}; s{"\.so"}{".so." STRINGIFY(__VERSION_MAJOR__)}g' \
src/common/os/lnx_os.c
%build
make BUILDNUM=%{version} RELEASE=1 \
DATADIR=%{_datadir} LINUX_PRODUCT_NAME=%{product_name} \
CFLAGS_EXTERNAL="%{?optflags}" CPPFLAGS_EXTERNAL="%{?optflags}"
%install
make BUILDNUM=%{version} RELEASE=1 \
RPM_ROOT=%{buildroot} LIB_DIR=%{_libdir} INCLUDE_DIR=%{_includedir} \
BIN_DIR=%{_bindir} DATADIR=%{_datadir} UNIT_DIR=%{_unitdir} \
LINUX_PRODUCT_NAME=%{product_name} SYSCONF_DIR=%{_sysconfdir} \
MANPAGE_DIR=%{_mandir} \
install
mkdir -p %{buildroot}%{_prefix}/sbin
ln -sf service %{buildroot}%{_sbindir}/rc%{monitorname}
rm %{buildroot}%{_libdir}/cmpi/libixpdimm-cim.so{,.%{api_release}}
mv %{buildroot}%{_libdir}/cmpi/libixpdimm-cim.so{.*,}
%pre -n %{monitorname}
%service_add_pre ixpdimm-monitor.service
%post -n %{apiname} -p /sbin/ldconfig
%post -n %{corelibname} -p /sbin/ldconfig
%post -n %{clilibname} -p /sbin/ldconfig
%post -n %{cimplugin}
if [ -x %{_sbindir}/cimserver ]
then
cimserver --status &> /dev/null
if [ $? -eq 0 ]
then
CIMMOF=cimmof
else
for repo in %{_localstatedir}/lib/Pegasus %{_localstatedir}/lib/pegasus %{_prefix}/local%{_localstatedir}/lib/pegasus %{_localstatedir}/local/lib/pegasus %{_localstatedir}/opt/tog-pegasus /opt/ibm/icc/cimom
do
if [ -d $repo/repository ]
then
CIMMOF="cimmofl -R $repo"
fi
done
fi
for ns in interop root/interop root/PG_Interop;
do
$CIMMOF -E -n$ns %{_datadir}/%{product_name}/Pegasus/mof/pegasus_register.mof &> /dev/null
if [ $? -eq 0 ]
then
$CIMMOF -uc -n$ns %{_datadir}/%{product_name}/Pegasus/mof/pegasus_register.mof &> /dev/null
$CIMMOF -uc -n$ns %{_datadir}/%{product_name}/Pegasus/mof/profile_registration.mof &> /dev/null
break
fi
done
$CIMMOF -aE -uc -n root/intelwbem %{_datadir}/%{product_name}/Pegasus/mof/intelwbem.mof &> /dev/null
fi
if [ -x %{_sbindir}/sfcbd ]
then
RESTART=0
systemctl is-active sblim-sfcb.service &> /dev/null
if [ $? -eq 0 ]
then
RESTART=1
systemctl stop sblim-sfcb.service &> /dev/null
fi
sfcbstage -n root/intelwbem -r %{_datadir}/%{product_name}/sfcb/INTEL_NVDIMM.reg %{_datadir}/%{product_name}/sfcb/sfcb_intelwbem.mof
sfcbrepos -f
if [[ $RESTART -gt 0 ]]
then
systemctl start sblim-sfcb.service &> /dev/null
fi
fi
%post -n %{monitorname}
%service_add_post ixpdimm-monitor.service
%postun -n %{apiname} -p /sbin/ldconfig
%postun -n %{corelibname} -p /sbin/ldconfig
%postun -n %{clilibname} -p /sbin/ldconfig
%pre -n %{cimplugin}
# If upgrading, deregister old version
if [ "$1" -gt 1 ]; then
RESTART=0
if [ -x %{_sbindir}/cimserver ]
then
cimserver --status &> /dev/null
if [ $? -gt 0 ]
then
RESTART=1
cimserver enableHttpConnection=false enableHttpsConnection=false enableRemotePrivilegedUserAccess=false slp=false &> /dev/null
fi
cimprovider -d -m intelwbemprovider &> /dev/null
cimprovider -r -m intelwbemprovider &> /dev/null
mofcomp -v -r -n root/intelwbem %{_datadir}/%{product_name}/Pegasus/mof/intelwbem.mof &> /dev/null
mofcomp -v -r -n root/intelwbem %{_datadir}/%{product_name}/Pegasus/mof/profile_registration.mof &> /dev/null
if [[ $RESTART -gt 0 ]]
then
cimserver -s &> /dev/null
fi
fi
fi
%preun -n %{cimplugin}
RESTART=0
if [ -x %{_sbindir}/cimserver ]
then
cimserver --status &> /dev/null
if [ $? -gt 0 ]
then
RESTART=1
cimserver enableHttpConnection=false enableHttpsConnection=false enableRemotePrivilegedUserAccess=false slp=false &> /dev/null
fi
cimprovider -d -m intelwbemprovider &> /dev/null
cimprovider -r -m intelwbemprovider &> /dev/null
mofcomp -r -n root/intelwbem %{_datadir}/%{product_name}/Pegasus/mof/intelwbem.mof &> /dev/null
mofcomp -v -r -n root/intelwbem %{_datadir}/%{product_name}/Pegasus/mof/profile_registration.mof &> /dev/null
if [[ $RESTART -gt 0 ]]
then
cimserver -s &> /dev/null
fi
fi
if [ -x %{_sbindir}/sfcbd ]
then
RESTART=0
systemctl is-active sblim-sfcb.service &> /dev/null
if [ $? -eq 0 ]
then
RESTART=1
systemctl stop sblim-sfcb.service &> /dev/null
fi
sfcbunstage -n root/intelwbem -r INTEL_NVDIMM.reg sfcb_intelwbem.mof
sfcbrepos -f
if [[ $RESTART -gt 0 ]]
then
systemctl start sblim-sfcb.service &> /dev/null
fi
fi
%preun -n %{monitorname}
%service_del_preun ixpdimm-monitor.service
%postun -n %{monitorname}
%service_del_postun ixpdimm-monitor.service
%files -n %{apiname}
%defattr(-,root,root)
%{_libdir}/libixpdimm.so.*
%doc LICENSE
%files -n %{apibase}-data
%defattr(640,root,root)
%dir %{_datadir}/%{product_name}
%{_datadir}/%{product_name}/*.pem*
%{_datadir}/%{product_name}/*.dat*
%files -n %{dname}
%defattr(-,root,root)
%{_libdir}/libixpdimm.so
%{_libdir}/libixpdimm-core.so
%{_libdir}/libixpdimm-cli.so
%attr(644,root,root) %{_includedir}/nvm_types.h
%attr(644,root,root) %{_includedir}/nvm_management.h
%doc LICENSE
%files -n %{corelibname}
%defattr(-,root,root)
%{_libdir}/libixpdimm-core.so.*
%doc LICENSE
%files -n %{cimplugin}
%defattr(-,root,root)
%dir %{_libdir}/cmpi/
%{_libdir}/cmpi/libixpdimm-cim.so*
%dir %{_datadir}/%{product_name}/Pegasus
%dir %{_datadir}/%{product_name}/Pegasus/mof
%dir %{_datadir}/%{product_name}/sfcb
%attr(644,root,root) %{_datadir}/%{product_name}/sfcb/*.reg
%attr(644,root,root) %{_datadir}/%{product_name}/sfcb/*.mof
%attr(644,root,root) %{_datadir}/%{product_name}/Pegasus/mof/*.mof
%attr(644,root,root) %config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{product_name}-%{_arch}.conf
%doc LICENSE
%files -n %{monitorname}
%defattr(-,root,root)
%{_bindir}/ixpdimm-monitor
%{_sbindir}/rcixpdimm-monitor
%{_unitdir}/ixpdimm-monitor.service
%doc LICENSE
%attr(644,root,root) %{_mandir}/man8/ixpdimm-monitor*
%files -n %{cliname}
%defattr(-,root,root)
%{_bindir}/ixpdimm-cli
%doc LICENSE
%attr(644,root,root) %{_mandir}/man8/ixpdimm-cli*
%files -n %{clilibname}
%defattr(-,root,root)
%{_libdir}/libixpdimm-cli.so.*
%changelog