File libkolab.spec of Package libkolab-old

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

%{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)}

# Filter out private python and php libs. Does not work on EPEL5,
# therefor we use it conditionally
%{?filter_setup:
%filter_provides_in %{python_sitearch}/.*\.so$
%filter_provides_in %{php_extdir}/.*\.so$
%filter_setup
}

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

Version:        2.0
Release:        0.1.dev20150112.gitf0f953aa%{?dist}
Summary:        Kolab Object Handling Library

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

# From 2881447555eb7965f557158c88ae2aa18e936971
Source0:        http://git.kolab.org/%{name}/snapshot/libkolab-%{version}.tar.gz

Patch1:         0001-Fix-dangling-pointers.patch
Patch2:         0001-Fix-use-after-free-bug.patch

BuildRequires:  cmake
%if 0%{?rhel} > 7 || 0%{?fedora} >= 20
BuildRequires:  kdepimlibs-devel >= 4.11
%else
# Note: available within kolabsys.com infrastructure only, as being (essentially) a
# fork of various kde 4.9 libraries that depend on kde*, and that have no place in el6.
BuildRequires:  libcalendaring-devel >= 4.9.1
%endif
BuildRequires:  libcurl-devel
BuildRequires:  libkolabxml-devel >= 1.0
BuildRequires:  make
BuildRequires:  php >= 5.3
BuildRequires:  php-devel >= 5.3

%if 0%{?plesk}
BuildRequires:  plesk-php56-devel
BuildRequires:  plesk-php70-devel
BuildRequires:  plesk-php71-devel
BuildRequires:  plesk-php72-devel
BuildRequires:  plesk-php73-devel
BuildRequires:  plesk-php74-devel
%endif

BuildRequires:  python-devel
%if 0%{?suse_version}
BuildRequires:  qt-devel
%else
BuildRequires:  qt4-devel
%endif
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}
%if 0%{?rhel} > 7 || 0%{?fedora} >= 20
BuildRequires:  kdepimlibs-devel >= 4.11
%if 0%{?fedora} >= 21
# Fedora 21 has qca2 and qca, qca2 has been renamed to qca
BuildRequires: qca
%endif
%else
# Note: available within kolabsys.com infrastructure only, as being (essentially) a
# fork of various kde 4.9 libraries that depend on kde*, and that have no place in el6.
BuildRequires:  libcalendaring-devel >= 4.9.1
%endif
Requires:       libkolabxml-devel >= 1.0
Requires:       php-devel
Requires:       pkgconfig
Requires:       python-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}
%package -n plesk-php56-kolab
Summary:        libkolab bindings for Plesk's PHP 5.6
Group:          System Environment/Libraries
Provides:       php-bindings(libkolab) = %{version}-%{release}
Requires:       libkolab%{?_isa} = %{version}
Requires:       plesk-php56

%description -n plesk-php56-kolab
libkolab bindings for Plesk's PHP 5.6

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

%description -n plesk-php70-kolab
libkolab bindings for Plesk's PHP 7.0

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

%description -n plesk-php71-kolab
libkolab bindings for Plesk's PHP 7.1

%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

%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
%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

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

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

%if 0%{?plesk}
cp -a libkolab-%{version} libkolab-%{version}-5.6

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

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

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

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

%if 0%{?with_php7}
pushd %{name}-%{version}
sed -i "s/-php/-php7/g" cmake/modules/SWIGUtils.cmake
popd
%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
%if 0%{?with_at}
    -DBUILD_TOOLS:BOOL=OFF \
%endif
    -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} < 20
    -DUSE_LIBCALENDARING=ON \
%endif
    -DPHP_BINDINGS=ON \
    -DPHP_INSTALL_DIR=%{php_extdir} \
    -DPYTHON_BINDINGS=ON \
    -DPYTHON_INSTALL_DIR=%{python_sitearch} \
    ..
make
popd
popd

%if 0%{?plesk}
for version in 5.6 7.0 7.1 7.2 7.3 7.4; do
    pushd %{name}-%{version}-${version}
    rm -rf build
    mkdir -p build
    pushd build
    %cmake \
%if 0%{?with_at}
        -DBUILD_TOOLS:BOOL=OFF \
%endif
        -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} \
%if 0%{?rhel} < 8 && 0%{?fedora} < 20
        -DUSE_LIBCALENDARING=ON \
%endif
        -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}/%{_datadir}/%{php}
mv %{buildroot}/%{php_extdir}/*.php %{buildroot}/%{_datadir}/%{php}/.

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

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

%if 0%{?plesk}
for version in 5.6 7.0 7.1 7.2 7.3 7.4; do
    pushd %{name}-%{version}-${version}
    pushd build
    make install DESTDIR=%{buildroot} INSTALL='install -p'
    popd

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

    mv \
        %{buildroot}/opt/plesk/php/${version}/lib64/php/modules/*.php \
        %{buildroot}/opt/plesk/php/${version}/share/php/.

    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=kolabicalendar.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

touch %{buildroot}/%{python_sitearch}/kolab/__init__.py

%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
%{_datadir}/%{php}/kolabcalendaring.php
%{php_extdir}/kolabcalendaring.so
%{_datadir}/%{php}/kolabicalendar.php
%{php_extdir}/kolabicalendar.so
%{_datadir}/%{php}/kolabobject.php
%{php_extdir}/kolabobject.so
%{_datadir}/%{php}/kolabshared.php
%{php_extdir}/kolabshared.so
%{_datadir}/%{php}/dummy.php
%{php_extdir}/dummy.so

%if 0%{?plesk}
%files -n plesk-php56-kolab
%defattr(-,root,root,-)
/opt/plesk/php/5.6/lib64/php/modules/*.so
/opt/plesk/php/5.6/share/php/*.php
/opt/plesk/php/5.6/etc/php.d/*.ini
/opt/plesk/php/5.6/etc/php-fpm.d/*.ini

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

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

%files -n plesk-php72-kolab
%defattr(-,root,root,-)
/opt/plesk/php/7.2/lib64/php/modules/*.so
/opt/plesk/php/7.2/share/php/*.php
/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/share/php/*.php
/opt/plesk/php/7.3/etc/php.d/*.ini
/opt/plesk/php/7.3/etc/php-fpm.d/*.ini

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

%files -n python-kolab
%dir %{python_sitearch}/kolab/
%{python_sitearch}/kolab/__init__.py*
%{python_sitearch}/kolab/_calendaring.so
%{python_sitearch}/kolab/calendaring.py*
%{python_sitearch}/kolab/_icalendar.so
%{python_sitearch}/kolab/icalendar.py*
%{python_sitearch}/kolab/_kolabobject.so*
%{python_sitearch}/kolab/kolabobject.py*
%{python_sitearch}/kolab/_shared.so*
%{python_sitearch}/kolab/shared.py*

%changelog
* 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