# remirepo/Fedora spec file for php-zendframework-zend-mvc
#
# Copyright (c) 2015-2017 Remi Collet
# License: CC-BY-SA
# http://creativecommons.org/licenses/by-sa/4.0/
#
# Please, preserve the changelog entries
#
%global bootstrap    0
%global gh_commit    236e7e1e3757e988fa06530c0a3f96a148858ae8
%global gh_short     %(c=%{gh_commit}; echo ${c:0:7})
%global gh_owner     zendframework
%global gh_project   zend-mvc
%global php_home     %{_datadir}/php
%global library      Mvc
%if %{bootstrap}
%global with_tests   0%{?_with_tests:1}
%else
%global with_tests   0%{!?_without_tests:1}
%endif

Name:           php-%{gh_owner}-%{gh_project}
Version:        3.1.1
Release:        1%{?dist}
Summary:        Zend Framework %{library} component

Group:          Development/Libraries
License:        BSD
URL:            https://zendframework.github.io/%{gh_project}/
Source0:        %{gh_commit}/%{name}-%{version}-%{gh_short}.tgz
Source1:        makesrc.sh

BuildArch:      noarch
# Tests
%if %{with_tests}
BuildRequires:  php(language) >= 5.6
BuildRequires:  php-reflection
BuildRequires:  php-intl
BuildRequires:  php-pcre
BuildRequires:  php-spl
BuildRequires:  php-composer(container-interop/container-interop) >= 1.2
BuildRequires:  php-composer(%{gh_owner}/zend-eventmanager)     >= 3.2
BuildRequires:  php-composer(%{gh_owner}/zend-http)             >= 2.7
BuildRequires:  php-composer(%{gh_owner}/zend-modulemanager)    >= 2.8
BuildRequires:  php-composer(%{gh_owner}/zend-router)           >= 3.0.2
BuildRequires:  php-composer(%{gh_owner}/zend-servicemanager)   >= 3.3
BuildRequires:  php-composer(%{gh_owner}/zend-stdlib)           >= 3.1
BuildRequires:  php-composer(%{gh_owner}/zend-view)             >= 2.9
# From composer, "require-dev": {
#        "http-interop/http-middleware": "^0.4.1",
#        "phpunit/phpunit": "^6.4.4 || ^5.7.14",
#        "zendframework/zend-coding-standard": "~1.0.0",
#        "zendframework/zend-json": "^2.6.1 || ^3.0",
#        "zendframework/zend-psr7bridge": "^1.0",
#        "zendframework/zend-stratigility": "^2.0.1"
BuildRequires:  php-composer(%{gh_owner}/zend-json)             >= 2.6.1
# ignore min version as we don't test stratigility 2.0.1"
BuildRequires:  php-composer(%{gh_owner}/zend-psr7bridge)       >= 0.2
# ignore min version (and skip test relying on it)
BuildRequires:  php-composer(%{gh_owner}/zend-stratigility)
%if 0%{?fedora} >= 26
%global phpunit %{_bindir}/phpunit6
%else
%global phpunit %{_bindir}/phpunit
%endif
BuildRequires:  %{phpunit}
# Autoloader
BuildRequires:  php-composer(%{gh_owner}/zend-loader)           >= 2.5
# For dependencies autoloader
BuildRequires:  php-zendframework-zend-loader                   >= 2.5.1-3
%endif

# From composer, "require": {
#        "container-interop/container-interop": "^1.2",
#        "php": "^5.6 || ^7.0",
#        "zendframework/zend-eventmanager": "^3.2",
#        "zendframework/zend-http": "^2.7",
#        "zendframework/zend-modulemanager": "^2.8",
#        "zendframework/zend-router": "^3.0.2",
#        "zendframework/zend-servicemanager": "^3.3",
#        "zendframework/zend-stdlib": "^3.1",
#        "zendframework/zend-view": "^2.9"
Requires:       php(language) >= 5.6
%if ! %{bootstrap}
Requires:       php-composer(container-interop/container-interop) >= 1.2
Requires:       php-composer(container-interop/container-interop) <  2
Requires:       php-composer(%{gh_owner}/zend-eventmanager)     >= 3.2
Requires:       php-composer(%{gh_owner}/zend-eventmanager)     <  4
Requires:       php-composer(%{gh_owner}/zend-http)             >= 2.7
Requires:       php-composer(%{gh_owner}/zend-http)             <  3
Requires:       php-composer(%{gh_owner}/zend-modulemanager)    >= 2.8
Requires:       php-composer(%{gh_owner}/zend-modulemanager)    <  3
Requires:       php-composer(%{gh_owner}/zend-router)           >= 3.0.2
Requires:       php-composer(%{gh_owner}/zend-router)           <  4
Requires:       php-composer(%{gh_owner}/zend-servicemanager)   >= 3.3
Requires:       php-composer(%{gh_owner}/zend-servicemanager)   <  4
Requires:       php-composer(%{gh_owner}/zend-stdlib)           >= 3.1
Requires:       php-composer(%{gh_owner}/zend-stdlib)           <  4
Requires:       php-composer(%{gh_owner}/zend-view)             >= 2.9
Requires:       php-composer(%{gh_owner}/zend-http)             <  3
# From composer, "suggest": {
#        "zendframework/zend-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable",
#        "zendframework/zend-log": "^2.9.1  To provide log functionality via LogFilterManager, LogFormatterManager, and LogProcessorManager",
#        "zendframework/zend-mvc-console": "zend-mvc-console provides the ability to expose zend-mvc as a console application",
#        "zendframework/zend-mvc-i18n": "zend-mvc-i18n provides integration with zend-i18n, including a translation bridge and translatable route segments",
#        "zendframework/zend-mvc-plugin-fileprg": "To provide Post/Redirect/Get functionality around forms that container file uploads",
#        "zendframework/zend-mvc-plugin-flashmessenger": "To provide flash messaging capabilities between requests",
#        "zendframework/zend-mvc-plugin-identity": "To access the authenticated identity (per zend-authentication) in controllers",
#        "zendframework/zend-mvc-plugin-prg": "To provide Post/Redirect/Get functionality within controllers",
#        "zendframework/zend-paginator": "^2.7 To provide pagination functionality via PaginatorPluginManager",
#        "zendframework/zend-psr7bridge": "(^0.2) To consume PSR-7 middleware within the MVC workflow",
#        "zendframework/zend-servicemanager-di": "zend-servicemanager-di provides utilities for integrating zend-di and zend-servicemanager in your zend-mvc application",
#        "zendframework/zend-stratigility": "zend-stratigility is required to use middleware pipes in the MiddlewareListener",
#        "http-interop/http-middleware": "^0.4.1 to be used together with zend-stratigility"
%if 0%{?fedora} >= 21
Suggests:       php-composer(%{gh_owner}/zend-json)
Suggests:       php-composer(%{gh_owner}/zend-log)
Suggests:       php-composer(%{gh_owner}/zend-mvc-console)
Suggests:       php-composer(%{gh_owner}/zend-mvc-i18n)
Suggests:       php-composer(%{gh_owner}/zend-mvc-plugin-fileprg)
Suggests:       php-composer(%{gh_owner}/zend-mvc-plugin-flashmessenger)
Suggests:       php-composer(%{gh_owner}/zend-mvc-plugin-identity)
Suggests:       php-composer(%{gh_owner}/zend-mvc-plugin-prg)
Suggests:       php-composer(%{gh_owner}/zend-paginator)
Suggests:       php-composer(%{gh_owner}/zend-psr7bridge)
Suggests:       php-composer(%{gh_owner}/zend-servicemanager-di)
Suggests:       php-composer(%{gh_owner}/zend-stratigility)
%endif
# Autoloader
Requires:       php-composer(%{gh_owner}/zend-loader)           >= 2.5
Requires:       php-zendframework-zend-loader                   >= 2.5.1-3
%endif
# From phpcompatinfo report for version 2.7.0
Requires:       php-reflection
Requires:       php-intl
Requires:       php-pcre
Requires:       php-spl

Obsoletes:      php-ZendFramework2-%{library} < 2.5
Provides:       php-ZendFramework2-%{library} = %{version}
Provides:       php-composer(%{gh_owner}/%{gh_project}) = %{version}


%description
Zend\Mvc is a brand new MVC implementation designed from the ground up
for Zend Framework 2, focusing on performance and flexibility.

The MVC layer is built on top of the following components:
* Zend\ServiceManager - Zend Framework provides a set of default service
  definitions set up at Zend\Mvc\Service. The ServiceManager creates and
  configures your application instance and workflow.
* Zend\EventManager - The MVC is event driven. This component is used
  everywhere from initial bootstrapping of the application, through returning
  response and request calls, to setting and retrieving routes and matched
  routes, as well as render views.
* Zend\Http - specifically the request and response objects, used within:
  Zend\Stdlib\DispatchableInterface. All “controllers” are simply dispatchable
  objects.

Documentation: https://zendframework.github.io/%{gh_project}/


%prep
%setup -q -n %{gh_project}-%{gh_commit}

mv LICENSE.md LICENSE

: Create dependency autoloader
cat << 'EOF' | tee autoload.php
<?php
require_once '%{php_home}/Interop/Container/autoload.php';
EOF



%build
# Empty build section, nothing required


%install
rm -rf %{buildroot}

mkdir -p   %{buildroot}%{php_home}/Zend/
cp -pr src %{buildroot}%{php_home}/Zend/%{library}

install -m644 autoload.php %{buildroot}%{php_home}/Zend/%{library}-autoload.php


%check
%if %{with_tests}
# Skip test relying on statigility 2.0.1
rm test/MiddlewareListenerTest.php

mkdir vendor
cat << 'EOF' | tee vendor/autoload.php
<?php
define('RPM_BUILDROOT', '%{buildroot}%{php_home}/Zend');

require_once '%{php_home}/Zend/Loader/AutoloaderFactory.php';
Zend\Loader\AutoloaderFactory::factory(array(
    'Zend\Loader\StandardAutoloader' => array(
        'namespaces' => array(
           'ZendTest\\%{library}' => dirname(__DIR__).'/test/',
           'Zend\\%{library}'     => '%{buildroot}%{php_home}/Zend/%{library}'
))));
require_once '%{php_home}/Zend/autoload.php';
require_once 'test/_autoload.php';
EOF

ret=0
for cmdarg in "php %{phpunit}" "php56 %{_bindir}/phpunit" php70 php71 php72; do
  if which $cmdarg; then
    set $cmdarg
    $1 ${2:-%{_bindir}/phpunit6} --verbose || ret=1
  fi
done
exit $ret
%else
: Test suite disabled
%endif


%files
%{!?_licensedir:%global license %%doc}
%license LICENSE
%doc *.md
%doc composer.json
%{php_home}/Zend/%{library}
%{php_home}/Zend/%{library}-autoload.php


%changelog
* Mon Nov 27 2017 Remi Collet <remi@remirepo.net> - 3.1.1-1
- Update to 3.1.1
- raise dependency on container-interop/container-interop 1.2
- raise dependency on zend-eventmanager 3.2
- raise dependency on zend-http 2.7
- raise dependency on zend-modulemanager 2.8
- raise dependency on zend-router 3.0.2
- raise dependency on zend-servicemanager 3.3
- raise dependency on zend-stdlib 3.1
- raise dependency on zend-view 2.9

* Tue May  2 2017 Remi Collet <remi@remirepo.net> - 3.1.0-1
- Update to 3.1.0
- use phpunit6

* Wed Dec 21 2016 Remi Collet <remi@fedoraproject.org> - 3.0.4-1
- update to 3.0.4

* Fri Sep  2 2016 Remi Collet <remi@fedoraproject.org> - 3.0.3-1
- update to 3.0.3

* Fri Jul  1 2016 Remi Collet <remi@fedoraproject.org> - 3.0.2-1
- update to 3.0.2

* Wed Jun 29 2016 Remi Collet <remi@fedoraproject.org> - 3.0.1-1
- update to 3.0.1 for ZendFramework 3
- raise dependency on PHP 5.6
- raise dependency on zend-eventmanager 3.0
- raise dependency on zend-stdlib 3.0
- raise dependency on zend-servicemanager 3.0.3
- add dependencies on zend-http, zend-modulemanager, zend-router, zend-view
- drop dependencies on zend-hydrator, zend-form, zend-psr7bridge
- add dependencies autoloader

* Tue Jun 14 2016 Remi Collet <remi@fedoraproject.org> - 2.7.10-1
- update to 2.7.10

* Wed Jun  1 2016 Remi Collet <remi@fedoraproject.org> - 2.7.8-1
- update to 2.7.8

* Wed Apr 13 2016 Remi Collet <remi@fedoraproject.org> - 2.7.7-1
- update to 2.7.7

* Thu Apr  7 2016 Remi Collet <remi@fedoraproject.org> - 2.7.6-1
- update to 2.7.6

* Wed Apr  6 2016 Remi Collet <remi@fedoraproject.org> - 2.7.5-1
- update to 2.7.5

* Mon Apr  4 2016 Remi Collet <remi@fedoraproject.org> - 2.7.4-1
- update to 2.7.4

* Wed Mar  9 2016 Remi Collet <remi@fedoraproject.org> - 2.7.3-1
- update to 2.7.3

* Thu Mar  3 2016 Remi Collet <remi@fedoraproject.org> - 2.7.1-1
- update to 2.7.1

* Wed Mar  2 2016 Remi Collet <remi@fedoraproject.org> - 2.7.0-1
- update to 2.7.0
- add dependency on zend-psr7bridge
- add dependency on container-interop
- raise dependency on zend-eventmanager >= 2.6.2
- raise dependency on zend-servicemanager >= 2.7.5
- raise dependency on zend-hydrator >= 1.1
- raise dependency on zend-form >= 2.7
- raise dependency on zend-stdlib >= 2.7.5

* Tue Feb 23 2016 Remi Collet <remi@fedoraproject.org> - 2.6.3-1
- update to 2.6.3

* Tue Feb 23 2016 Remi Collet <remi@fedoraproject.org> - 2.6.2-1
- update to 2.6.2

* Tue Feb 16 2016 Remi Collet <remi@fedoraproject.org> - 2.6.1-1
- update to 2.6.1
- raise dependency on zend-stdlib ^2.7.5

* Thu Jan 28 2016 Remi Collet <remi@fedoraproject.org> - 2.6.0-1
- update to 2.6.0
- raise dependencies on zend-form ^2.6 and zend-stdlib ^2.7
- add dependency on zend-hydrator ^1.0

* Thu Jan 28 2016 Remi Collet <remi@fedoraproject.org> - 2.6.0-0
- update to 2.6.0, bootstrap build

* Thu Sep 24 2015 Remi Collet <remi@fedoraproject.org> - 2.5.3-1
- version 2.5.3

* Tue Sep 15 2015 Remi Collet <remi@fedoraproject.org> - 2.5.2-1
- version 2.5.2

* Tue Aug  4 2015 Remi Collet <remi@fedoraproject.org> - 2.5.1-1
- initial package