File libkolab.spec of Package libkolab

# Needed for opensuse build system
%if 0%{?opensuse_bs}
#!BuildIgnore:  fedora-logos-httpd
#!BuildIgnore:  httpd
%endif

# The cmake macro changed to build out of source by default, which breaks our own out of source build, so disable that.
%define __cmake_in_source_build 1

%{expand: %(if [ `php-config --vernum` -gt 70000 ]; then echo %%global with_php7 1; else echo %%global with_php7 0; fi)}

%if 0%{?suse_version}
%global php php5
%{!?php_inidir: %global php_inidir %{_sysconfdir}/php5/conf.d/}
%{!?php_extdir: %global php_extdir %{_libdir}/php5/extensions}
%else
%global php php
%{!?php_inidir: %global php_inidir %{_sysconfdir}/php.d/}
%{!?php_extdir: %global php_extdir %{_libdir}/php/modules}
%endif
%{!?php_apiver: %global php_apiver  %((echo 0; php -i 2>/dev/null | sed -n 's/^PHP API => //p') | tail -1)}


%if 0%{?rhel} > 8
%global with_python 0
%else
%global with_python 1
%endif
%global with_python3 1

%{?filter_setup:
%filter_provides_in %{python2_sitearch}/.*\.so$
%filter_provides_in %{python3_sitearch}/.*\.so$
%filter_provides_in %{php_extdir}/.*\.so$
%filter_setup
}

%if 0%{?suse_version}
Name:           libkolab2
%else
Name:           libkolab
%endif

Version:        3.2.0
Release:        1%{?dist}
Summary:        Kolab Object Handling Library

License:        LGPLv3+
URL:            http://git.kolab.org/libkolab

# From 2881447555eb7965f557158c88ae2aa18e936971
Source0:        libkolab-%{version}.tar.gz

BuildRequires:  cmake
BuildRequires:  kf5-kcalendarcore-devel
BuildRequires:  kf5-kmime-devel
%if 0%{?suse_version}
BuildRequires:  qt-devel
%else
BuildRequires:  qt5-qtbase-devel
%endif
BuildRequires:  libcurl-devel
BuildRequires:  libkolabxml-devel >= 1.2
BuildRequires:  make
BuildRequires:  php >= 5.3
BuildRequires:  php-devel >= 5.3
BuildRequires:  swig >= 4.1

%if 0%{?plesk}
%if 0%{?rhel} < 9
BuildRequires:  plesk-php72-devel
BuildRequires:  plesk-php73-devel
%endif
BuildRequires:  plesk-php74-devel
BuildRequires:  plesk-php80-devel
BuildRequires:  plesk-php81-devel
BuildRequires:  plesk-php82-devel
%endif

BuildRequires:  python3-devel
Provides:       libkolab%{?_isa} = %{version}

%description
The libkolab library is an advanced library to  handle Kolab objects.

%if 0%{?suse_version}
%package -n libkolab-devel
%else
%package devel
%endif
Summary:        Kolab library development headers
Requires:       libkolab%{?_isa} = %{version}
BuildRequires:  kf5-kcalendarcore-devel
BuildRequires:  kf5-kmime-devel
%if 0%{?fedora} >= 21
# Fedora 21 has qca2 and qca, qca2 has been renamed to qca
BuildRequires: qca
%endif
Requires:       libkolabxml-devel >= 1.0
Requires:       php-devel
Requires:       pkgconfig
Requires:       python3-devel

%if 0%{?suse_version}
%description -n libkolab-devel
%else
%description devel
%endif
Development headers for the Kolab object libraries.

%package -n php-kolab
Summary:        PHP Bindings for libkolab
Group:          System Environment/Libraries
Provides:       php-bindings(libkolab) = %{version}-%{release}
Requires:       libkolab%{?_isa} = %{version}
%if 0%{?rhel} > 5 || 0%{?fedora} > 15
Requires:       php(zend-abi) = %{php_zend_api}
Requires:       php(api) = %{php_core_api}
%else
Requires:       php-api = %{php_apiver}
%endif
%if 0%{?suse_version}
Obsoletes:      php-%{name} < %{version}
Provides:       php-%{name} = %{version}
%endif

%description -n php-kolab
PHP Bindings for libkolab

%if 0%{?plesk}
%if 0%{?rhel} < 9
%package -n plesk-php72-kolab
Summary:        libkolab bindings for Plesk's PHP 7.2
Group:          System Environment/Libraries
Provides:       php-bindings(libkolab) = %{version}-%{release}
Requires:       libkolab%{?_isa} = %{version}
Requires:       plesk-php72

%description -n plesk-php72-kolab
libkolab bindings for Plesk's PHP 7.2

%package -n plesk-php73-kolab
Summary:        libkolab bindings for Plesk's PHP 7.3
Group:          System Environment/Libraries
Provides:       php-bindings(libkolab) = %{version}-%{release}
Requires:       libkolab%{?_isa} = %{version}
Requires:       plesk-php73

%description -n plesk-php73-kolab
libkolab bindings for Plesk's PHP 7.3

%endif
%package -n plesk-php74-kolab
Summary:        libkolab bindings for Plesk's PHP 7.4
Group:          System Environment/Libraries
Provides:       php-bindings(libkolab) = %{version}-%{release}
Requires:       libkolab%{?_isa} = %{version}
Requires:       plesk-php74

%description -n plesk-php74-kolab
libkolab bindings for Plesk's PHP 7.4

%package -n plesk-php80-kolab
Summary:        libkolab bindings for Plesk's PHP 8.0
Group:          System Environment/Libraries
Provides:       php-bindings(libkolab) = %{version}-%{release}
Requires:       libkolab%{?_isa} = %{version}
Requires:       plesk-php80

%description -n plesk-php80-kolab
libkolab bindings for Plesk's PHP 8.0

%package -n plesk-php81-kolab
Summary:        libkolab bindings for Plesk's PHP 8.1
Group:          System Environment/Libraries
Provides:       php-bindings(libkolab) = %{version}-%{release}
Requires:       libkolab%{?_isa} = %{version}
Requires:       plesk-php81

%description -n plesk-php81-kolab
libkolab bindings for Plesk's PHP 8.1

%package -n plesk-php82-kolab
Summary:        libkolab bindings for Plesk's PHP 8.2
Group:          System Environment/Libraries
Provides:       php-bindings(libkolab) = %{version}-%{release}
Requires:       libkolab%{?_isa} = %{version}
Requires:       plesk-php82

%description -n plesk-php82-kolab
libkolab bindings for Plesk's PHP 8.2

%endif

%package -n python-kolab
Summary:        Python bindings for libkolab
Group:          System Environment/Libraries
Requires:       libkolab%{?_isa} = %{version}
Requires:       python-kolabformat >= 1.0.0
%if 0%{?suse_version}
Obsoletes:      python-%{name} < %{version}
Provides:       python-%{name} = %{version}
%endif

%description -n python-kolab
Python bindings for libkolab

%package -n python3-kolab
Summary:        Python bindings for libkolab
Group:          System Environment/Libraries
Requires:       libkolab%{?_isa} = %{version}
Requires:       python3-kolabformat >= 1.0.0
%if 0%{?suse_version}
Obsoletes:      python3-%{name} < %{version}
Provides:       python3-%{name} = %{version}
%endif

%description -n python3-kolab
Python bindings for libkolab

%prep
%setup -q -c -n libkolab-%{version}

pushd %{name}-%{version}
#%patch1 -p1
popd

%if 0%{?plesk}
%if 0%{?rhel} < 9
cp -a libkolab-%{version} libkolab-%{version}-7.2
sed -i "s/-php/-php7/g" libkolab-%{version}-7.2/cmake/modules/SWIGUtils.cmake

cp -a libkolab-%{version} libkolab-%{version}-7.3
sed -i "s/-php/-php7/g" libkolab-%{version}-7.3/cmake/modules/SWIGUtils.cmake

%endif
cp -a libkolab-%{version} libkolab-%{version}-7.4
sed -i "s/-php/-php7/g" libkolab-%{version}-7.4/cmake/modules/SWIGUtils.cmake

cp -a libkolab-%{version} libkolab-%{version}-8.0
sed -i "s/-php/-php7/g" libkolab-%{version}-8.0/cmake/modules/SWIGUtils.cmake

cp -a libkolab-%{version} libkolab-%{version}-8.1
sed -i "s/-php/-php7/g" libkolab-%{version}-8.1/cmake/modules/SWIGUtils.cmake

cp -a libkolab-%{version} libkolab-%{version}-8.2
sed -i "s/-php/-php7/g" libkolab-%{version}-8.2/cmake/modules/SWIGUtils.cmake
%endif

%if 0%{?with_php7}
pushd %{name}-%{version}
sed -i "s/-php/-php7/g" cmake/modules/SWIGUtils.cmake
popd
%endif

%if 0%{?with_python}
cp -a libkolab-%{version} libkolab-%{version}-python2
%endif

%if 0%{?with_python3}
cp -a libkolab-%{version} libkolab-%{version}-python3
%endif

%build
pushd %{name}-%{version}
rm -rf build
mkdir -p build
pushd build
%if 0%{?suse_version}
CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ;
CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ;
FFLAGS="${FFLAGS:-%optflags%{?_fmoddir: -I%_fmoddir}}" ; export FFLAGS ;
FCFLAGS="${FCFLAGS:-%optflags%{?_fmoddir: -I%_fmoddir}}" ; export FCFLAGS ;
%{?__global_ldflags:LDFLAGS="${LDFLAGS:-%__global_ldflags}" ; export LDFLAGS ;}
cmake \
    -DCMAKE_C_FLAGS_RELEASE:STRING="-DNDEBUG" \
    -DCMAKE_CXX_FLAGS_RELEASE:STRING="-DNDEBUG" \
    -DCMAKE_Fortran_FLAGS_RELEASE:STRING="-DNDEBUG" \
    -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
    -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \
    -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \
    -DLIB_INSTALL_DIR:PATH=%{_libdir} \
    -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \
    -DSHARE_INSTALL_PREFIX:PATH=%{_datadir} \
%if "%{?_lib}" == "lib64"
    %{?_cmake_lib_suffix64} \
%endif
    -DBUILD_SHARED_LIBS:BOOL=ON \
%else
%cmake \
%endif
    -DCMAKE_C_FLAGS:STRING="-DNDEBUG -DQT_NO_DEBUG" \
    -DBoost_NO_BOOST_CMAKE=TRUE \
    -Wno-fatal-errors -Wno-errors \
    -DINCLUDE_INSTALL_DIR=%{_includedir} \
    -DPHP_BINDINGS=ON \
    -DPHP_INSTALL_DIR=%{php_extdir} \
    ..
make
popd
popd

%if 0%{with_python}
    pushd %{name}-%{version}-python2
    rm -rf build
    mkdir -p build
    pushd build
    %cmake \
        -DCMAKE_C_FLAGS:STRING="-DNDEBUG -DQT_NO_DEBUG" \
        -DBoost_NO_BOOST_CMAKE=TRUE \
        -Wno-fatal-errors -Wno-errors \
        -DINCLUDE_INSTALL_DIR=%{_includedir} \
%if 0%{?rhel} >= 8 || 0%{?fedora}
        -DQT5_BUILD=ON \
%endif
        -DINCLUDE_INSTALL_DIR=%{_includedir} \
        -DPYTHON_BINDINGS=ON \
        -DPYTHON_INSTALL_DIR=%{python2_sitearch} \
        ..
    make
    popd
    popd
%endif

%if 0%{with_python3}
    pushd %{name}-%{version}-python3
    rm -rf build
    mkdir -p build
    pushd build
    %cmake \
        -DCMAKE_C_FLAGS:STRING="-DNDEBUG -DQT_NO_DEBUG" \
        -DBoost_NO_BOOST_CMAKE=TRUE \
        -Wno-fatal-errors -Wno-errors \
        -DINCLUDE_INSTALL_DIR=%{_includedir} \
%if 0%{?rhel} >= 8 || 0%{?fedora}
        -DQT5_BUILD=ON \
%endif
        -DINCLUDE_INSTALL_DIR=%{_includedir} \
        -DPYTHON_BINDINGS=ON \
        -DPYTHON_INSTALL_DIR=%{python3_sitearch} \
        ..
    make
    popd
    popd
%endif


%if 0%{?plesk}
%if 0%{?rhel} < 9
for version in 7.2 7.3 7.4 8.0 8.1 8.2; do
%else
for version in 7.4 8.0 8.1 8.2; do
%endif
    pushd %{name}-%{version}-${version}
    rm -rf build
    mkdir -p build
    pushd build
    %cmake \
        -DCMAKE_C_FLAGS:STRING="-DNDEBUG -DQT_NO_DEBUG" \
        -DBoost_NO_BOOST_CMAKE=TRUE \
        -Wno-fatal-errors -Wno-errors \
        -DINCLUDE_INSTALL_DIR=%{_includedir} \
%if 0%{?rhel} >= 8 || 0%{?fedora}
        -DQT5_BUILD=ON \
%endif
        -DINCLUDE_INSTALL_DIR=%{_includedir} \
        -DPHP_BINDINGS=ON \
        -DPHP_INCLUDE_DIR=/opt/plesk/php/${version}/include/php/ \
        -DPHP_EXECUTABLE=/opt/plesk/php/${version}/bin/php \
        -DPHP_INSTALL_DIR=/opt/plesk/php/${version}/lib64/php/modules/ \
        ..
    make
    popd
    popd
done
%endif


%install
rm -rf %{buildroot}
pushd %{name}-%{version}/build
make install DESTDIR=%{buildroot}
popd

mkdir -p %{buildroot}/%{php_inidir}
cat >%{buildroot}/%{php_inidir}/kolab.ini <<EOF
; Kolab libraries
extension=kolabobject.so
extension=kolabshared.so
extension=kolabcalendaring.so
EOF

# Workaround for #2050
cat >%{buildroot}/%{php_inidir}/kolabdummy.ini <<EOF
; Kolab libraries
extension=dummy.so
EOF

%if 0%{?plesk}
%if 0%{?rhel} < 9
for version in 7.2 7.3 7.4 8.0 8.1 8.2; do
%else
for version in 7.4 8.0 8.1 8.2; do
%endif
    pushd %{name}-%{version}-${version}
    pushd build
    make install DESTDIR=%{buildroot} INSTALL='install -p'
    popd

    mkdir -p \
        %{buildroot}/opt/plesk/php/${version}/etc/php.d/ \
        %{buildroot}/opt/plesk/php/${version}/etc/php-fpm.d/

    echo "extension=kolabobject.so" > %{buildroot}/opt/plesk/php/${version}/etc/php.d/kolab.ini
    echo "extension=kolabshared.so" >> %{buildroot}/opt/plesk/php/${version}/etc/php.d/kolab.ini
    echo "extension=kolabcalendaring.so" >> %{buildroot}/opt/plesk/php/${version}/etc/php.d/kolab.ini
    echo "extension=dummy.so" >> %{buildroot}/opt/plesk/php/${version}/etc/php.d/kolabdummy.ini

    cp %{buildroot}/opt/plesk/php/${version}/etc/php.d/kolab.ini \
        %{buildroot}/opt/plesk/php/${version}/etc/php-fpm.d/

    cp %{buildroot}/opt/plesk/php/${version}/etc/php.d/kolabdummy.ini \
        %{buildroot}/opt/plesk/php/${version}/etc/php-fpm.d/

    popd
done
%endif

%if 0%{?with_python}
pushd %{name}-%{version}-python2
pushd build
make install DESTDIR=%{buildroot} INSTALL='install -p'
popd
touch %{buildroot}/%{python2_sitearch}/kolab/__init__.py
popd
%endif


%if 0%{?with_python3}
pushd %{name}-%{version}-python3
pushd build
make install DESTDIR=%{buildroot} INSTALL='install -p'
popd
touch %{buildroot}/%{python3_sitearch}/kolab/__init__.py
popd
%endif

%check
pushd %{name}-%{version}/build/tests
./benchmarktest || :
./calendaringtest || :
./formattest || :
./freebusytest || :
./icalendartest || :
./kcalconversiontest || :
./upgradetest || :
popd

%clean
rm -rf %{buildroot}

%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig

%files
%{_libdir}/libkolab.so.?
%{_libdir}/libkolab.so.?.?

%if 0%{?suse_version}
%files -n libkolab-devel
%else
%files devel
%endif
%{_libdir}/libkolab.so
%{_libdir}/cmake/Libkolab
%{_includedir}/kolab

%files -n php-kolab
%config(noreplace) %{php_inidir}/kolab.ini
%config(noreplace) %{php_inidir}/kolabdummy.ini
%{php_extdir}/kolabcalendaring.so
%{php_extdir}/kolabobject.so
%{php_extdir}/kolabshared.so
%{php_extdir}/dummy.so

%if 0%{?plesk}
%if 0%{?rhel} < 9
%files -n plesk-php72-kolab
%defattr(-,root,root,-)
/opt/plesk/php/7.2/lib64/php/modules/*.so
/opt/plesk/php/7.2/etc/php.d/*.ini
/opt/plesk/php/7.2/etc/php-fpm.d/*.ini

%files -n plesk-php73-kolab
%defattr(-,root,root,-)
/opt/plesk/php/7.3/lib64/php/modules/*.so
/opt/plesk/php/7.3/etc/php.d/*.ini
/opt/plesk/php/7.3/etc/php-fpm.d/*.ini

%endif
%files -n plesk-php74-kolab
%defattr(-,root,root,-)
/opt/plesk/php/7.4/lib64/php/modules/*.so
/opt/plesk/php/7.4/etc/php.d/*.ini
/opt/plesk/php/7.4/etc/php-fpm.d/*.ini

%files -n plesk-php80-kolab
%defattr(-,root,root,-)
/opt/plesk/php/8.0/lib64/php/modules/*.so
/opt/plesk/php/8.0/etc/php.d/*.ini
/opt/plesk/php/8.0/etc/php-fpm.d/*.ini

%files -n plesk-php81-kolab
%defattr(-,root,root,-)
/opt/plesk/php/8.1/lib64/php/modules/*.so
/opt/plesk/php/8.1/etc/php.d/*.ini
/opt/plesk/php/8.1/etc/php-fpm.d/*.ini

%files -n plesk-php82-kolab
%defattr(-,root,root,-)
/opt/plesk/php/8.2/lib64/php/modules/*.so
/opt/plesk/php/8.2/etc/php.d/*.ini
/opt/plesk/php/8.2/etc/php-fpm.d/*.ini

%endif

%if 0%{?with_python} > 0
%files -n python-kolab
%dir %{python2_sitearch}/kolab/
%{python2_sitearch}/kolab/__init__.py*
%{python2_sitearch}/kolab/_calendaring.so
%{python2_sitearch}/kolab/calendaring.py*
%{python2_sitearch}/kolab/_kolabobject.so*
%{python2_sitearch}/kolab/kolabobject.py*
%{python2_sitearch}/kolab/_shared.so*
%{python2_sitearch}/kolab/shared.py*
%endif

%if 0%{?with_python3}
%files -n python3-kolab
%dir %{python3_sitearch}/kolab/
%{python3_sitearch}/kolab/__init__.py*
%{python3_sitearch}/kolab/_calendaring.so
%{python3_sitearch}/kolab/calendaring.py*
%{python3_sitearch}/kolab/_kolabobject.so*
%{python3_sitearch}/kolab/kolabobject.py*
%{python3_sitearch}/kolab/_shared.so*
%{python3_sitearch}/kolab/shared.py*
%{python3_sitearch}/kolab/__pycache__/
%endif

%changelog
* Fri Aug 12 2022 Christian Mollekopf <mollekopf@apheleia-it.ch> - 3.0.2-1
- New upstream release

* Tue Jan 04 2022 Christian Mollekopf <mollekopf@kolabsys.com> - 3.0.1-1
- New upstream release

* Mon Feb 09 2015 Timotheus Pokorra <tp@tbits.net>
- master is going towards 0.7

* Mon Jan 12 2015 Christoph Wickert <wickert@kolabsys.com> - 0.6-0.1.dev20150112.gitf0f953aa
- Add dummy plugin to workaround httpd reload issue (#2050)

* Mon Oct 14 2013 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.5.0-1
- New upstream release

* Thu May 23 2013 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.5-0.2
- GIT snapshot

* Thu Apr 11 2013 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.4.2-1
- New upstream version

* Wed Jan  9 2013 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.4.1-1
- Update version to 0.4.1

* Tue Nov 20 2012 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.4-0.1
- New upstream release
- Correct php.d/kolab.ini

* Wed Aug 15 2012 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.3.1-3
- Fix build (patch1)
- Merge back with Fedora,
- Rebuilt for boost (Christoph Wickert, 0.3-10)

* Wed Aug  8 2012 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.3.1-1
- New upstream version 0.3.1
- Correct locations and naming of PHP bindings modules

* Thu Aug  2 2012 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.3-9
- New snapshot
- Ship PHP and Python bindings
- Conditionally build with libcalendaring
- Execute tests
- Correct installation directory for headers

* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.3-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild

* Tue Jun 26 2012 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.3-5
- Fix some review issues (#833853)
- Rebuild after some packaging fixes (4)

* Sat Jun  9 2012 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.3-3
- Check in latest snapshot

* Sat May 12 2012 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.3-1
- Snapshot version after buildsystem changes

* Wed May  2 2012 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 0.2.0-1
- First package