# remirepo/Fedora spec file for php-laminas-mvc-plugin-fileprg
#
# Copyright (c) 2016-2022 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    407ef6288f03f65132ec72629bc2675d303e7a3c
%global gh_short     %(c=%{gh_commit}; echo ${c:0:7})
%global gh_owner     laminas
%global gh_project   laminas-mvc-plugin-fileprg
%global zf_name      zend-mvc-plugin-fileprg
%global php_home     %{_datadir}/php
%global namespace    Laminas
%global library      Mvc
%global subproj      Plugin
%global subsubp      FilePrg
%if %{bootstrap}
%global with_tests   0%{?_with_tests:1}
%else
%global with_tests   0%{!?_without_tests:1}
%endif

Name:           php-%{gh_project}
Version:        1.5.0
Release:        1%{?dist}
Summary:        %{namespace} Framework %{library}/%{subproj}/%{subsubp} component

License:        BSD
URL:            https://github.com/%{gh_owner}/%{gh_project}
Source0:        %{gh_commit}/%{name}-%{version}-%{gh_short}.tgz
Source1:        makesrc.sh

BuildArch:      noarch
# Tests
%if %{with_tests}
BuildRequires:  php(language) >= 7.4
BuildRequires:  php-reflection
# From composer, "require-dev": {
#        "laminas/laminas-coding-standard": "~2.4.0",
#        "phpunit/phpunit": "^9.5.26",
#        "psalm/plugin-phpunit": "^0.18.0",
#        "vimeo/psalm": "^4.29.0"
# remirepo:1
%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8
BuildRequires: (php-autoloader(%{gh_owner}/laminas-filter)               >= 2.13.1 with php-autoloader(%{gh_owner}/laminas-filter)               < 3)
BuildRequires: (php-autoloader(%{gh_owner}/laminas-form)                 >= 3.1    with php-autoloader(%{gh_owner}/laminas-form)                 < 4)
BuildRequires: (php-autoloader(%{gh_owner}/laminas-inputfilter)          >= 2.13   with php-autoloader(%{gh_owner}/laminas-inputfilter)          < 3)
BuildRequires: (php-autoloader(%{gh_owner}/laminas-mvc)                  >= 3.3    with php-autoloader(%{gh_owner}/laminas-mvc)                  < 4)
BuildRequires: (php-autoloader(%{gh_owner}/laminas-session)              >= 2.12   with php-autoloader(%{gh_owner}/laminas-session)              < 3)
BuildRequires: (php-autoloader(%{gh_owner}/laminas-stdlib)               >= 3.6.2  with php-autoloader(%{gh_owner}/laminas-stdlib)               < 4)
BuildRequires: (php-autoloader(%{gh_owner}/laminas-validator)            >= 2.15.1 with php-autoloader(%{gh_owner}/laminas-validator)            < 3)
BuildRequires: (php-autoloader(%{gh_owner}/laminas-zendframework-bridge) >= 1.0    with php-autoloader(%{gh_owner}/laminas-zendframework-bridge) < 2)
# remirepo:10
%else
BuildRequires:  php-laminas-filter
BuildRequires:  php-laminas-form3
BuildRequires:  php-laminas-inputfilter
BuildRequires:  php-laminas-mvc
BuildRequires:  php-laminas-session
BuildRequires:  php-laminas-stdlib
BuildRequires:  php-laminas-validator
BuildRequires:  php-laminas-zendframework-bridge
%endif
%global phpunit %{_bindir}/phpunit9
BuildRequires:  phpunit9 >= 9.5.26
%endif
# Autoloader
BuildRequires:  php-fedora-autoloader-devel

# From composer, "require": {
#        "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0",
#        "laminas/laminas-filter": "^2.13.1",
#        "laminas/laminas-form": "^3.1",
#        "laminas/laminas-inputfilter": "^2.13",
#        "laminas/laminas-mvc": "^3.3",
#        "laminas/laminas-session": "^2.12",
#        "laminas/laminas-stdlib": "^3.6.2",
#        "laminas/laminas-validator": "^2.15.1"
Requires:       php(language) >= 7.4
# remirepo:1
%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8
Requires:      (php-autoloader(%{gh_owner}/laminas-filter)               >= 2.13.1 with php-autoloader(%{gh_owner}/laminas-filter)               < 3)
Requires:      (php-autoloader(%{gh_owner}/laminas-form)                 >= 3.1    with php-autoloader(%{gh_owner}/laminas-form)                 < 4)
Requires:      (php-autoloader(%{gh_owner}/laminas-inputfilter)          >= 2.13   with php-autoloader(%{gh_owner}/laminas-inputfilter)          < 3)
Requires:      (php-autoloader(%{gh_owner}/laminas-mvc)                  >= 3.3    with php-autoloader(%{gh_owner}/laminas-mvc)                  < 4)
Requires:      (php-autoloader(%{gh_owner}/laminas-session)              >= 2.12   with php-autoloader(%{gh_owner}/laminas-session)              < 3)
Requires:      (php-autoloader(%{gh_owner}/laminas-stdlib)               >= 3.6.2  with php-autoloader(%{gh_owner}/laminas-stdlib)               < 4)
Requires:      (php-autoloader(%{gh_owner}/laminas-validator)            >= 2.15.1 with php-autoloader(%{gh_owner}/laminas-validator)            < 3)
Requires:      (php-autoloader(%{gh_owner}/laminas-zendframework-bridge) >= 1.0    with php-autoloader(%{gh_owner}/laminas-zendframework-bridge) < 2)
# remirepo:10
%else
Requires:       php-laminas-filter
Requires:       php-laminas-form
Requires:       php-laminas-inputfilter
Requires:       php-laminas-mvc
Requires:       php-laminas-session
Requires:       php-laminas-stdlib
Requires:       php-laminas-validator
Requires:       php-laminas-zendframework-bridge
%endif
# Autoloader
Requires:       php-composer(fedora/autoloader)
# From phpcompatinfo report for version 1.1.0
Requires:       php-reflection

# Compatibily ensure by the bridge
Obsoletes:      php-zendframework-%{zf_name}              < 1.1.1
Provides:       php-zendframework-%{zf_name}              = %{version}
Provides:       php-composer(%{gh_owner}/%{gh_project})   = %{version}
Provides:       php-composer(zendframework/%{zf_name})    = %{version}
Provides:       php-autoloader(%{gh_owner}/%{gh_project}) = %{version}
Provides:       php-autoloader(zendframework/%{zf_name})  = %{version}


%description
Provides a Post-Redirect-Get controller plugin for laminas-mvc versions 3.0
and up, specifically for submissions that include file uploads.

If you want a generic PRG plugin without file upload support,
see laminas-mvc-plugin-prg.

Documentation: https://docs.laminas.dev/%{gh_project}/


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

mv LICENSE.md LICENSE


%build
: Generate autoloader
phpab --template fedora --output src/autoload.php src
cat << 'EOF' | tee -a src/autoload.php
\Fedora\Autoloader\Dependencies::required([
    '%{php_home}/%{namespace}/Filter/autoload.php',
    '%{php_home}/%{namespace}/Form3/autoload.php',
    '%{php_home}/%{namespace}/InputFilter/autoload.php',
    '%{php_home}/%{namespace}/Mvc/autoload.php',
    '%{php_home}/%{namespace}/Session/autoload.php',
    '%{php_home}/%{namespace}/Stdlib/autoload.php',
    '%{php_home}/%{namespace}/Validator/autoload.php',
]);
EOF

cat << 'EOF' | tee zf.php
<?php
require_once '%{php_home}/Fedora/Autoloader/autoload.php';
\Fedora\Autoloader\Dependencies::required([
    '%{php_home}/%{namespace}/ZendFrameworkBridge/autoload.php',
    dirname(dirname(dirname(dirname(__DIR__)))) . '/%{namespace}/%{library}/%{subproj}/%{subsubp}/autoload.php',
]);
EOF


%install
: Laminas library
mkdir -p   %{buildroot}%{php_home}/%{namespace}/%{library}/%{subproj}
cp -pr src %{buildroot}%{php_home}/%{namespace}/%{library}/%{subproj}/%{subsubp}
 
: Zend equiv
mkdir -p      %{buildroot}%{php_home}/Zend/%{library}/%{subproj}/%{subsubp}
cp -pr zf.php %{buildroot}%{php_home}/Zend/%{library}/%{subproj}/%{subsubp}/autoload.php


%check
%if %{with_tests}
mkdir vendor
cat << 'EOF' | tee vendor/autoload.php
<?php
require_once '%{buildroot}%{php_home}/%{namespace}/%{library}/%{subproj}/%{subsubp}/autoload.php';
\Fedora\Autoloader\Autoload::addPsr4('%{namespace}\\Filter\\File\\', dirname(__DIR__) . 'polyfill/Filter/File');
\Fedora\Autoloader\Autoload::addPsr4('%{namespace}\\Validator\\File\\', dirname(__DIR__) . 'polyfill/Validator/File');
\Fedora\Autoloader\Autoload::addPsr4('%{namespace}Test\\%{library}\\%{subproj}\\%{subsubp}\\', dirname(__DIR__) . '/test');
EOF

sed -e "s:__DIR__ . '/../vendor/laminas/laminas-filter/src:'/usr/share/php/Laminas/Filter:" \
    -e "s:__DIR__ . '/../vendor/laminas/laminas-validator/src:'/usr/share/php/Laminas/Validator:" \
    -i test/bootstrap.php

: check compat autoloader
php -r '
require "%{buildroot}%{php_home}/Zend/%{library}/%{subproj}/%{subsubp}/autoload.php";
exit (class_exists("\\Zend\\%{library}\\%{subproj}\\%{subsubp}\\Module") ? 0 : 1);
'

: upstream test suite
ret=0
for cmdarg in "php %{phpunit}" php80 php81 php82; do
  if which $cmdarg; then
    set $cmdarg
    $1 ${2:-%{_bindir}/phpunit9} \
       --filter '^((?!(testCorrectInputDataMerging)).)*$' \
       --verbose || ret=1
  fi
done
exit $ret
%else
: Test suite disabled
%endif


%files
# remirepo:1
%{!?_licensedir:%global license %%doc}
%license LICENSE
%doc *.md
%doc composer.json
%dir %{php_home}/Zend/%{library}/%{subproj}
     %{php_home}/Zend/%{library}/%{subproj}/%{subsubp}
%dir %{php_home}/%{namespace}/%{library}/%{subproj}
     %{php_home}/%{namespace}/%{library}/%{subproj}/%{subsubp}


%changelog
* Wed Dec  7 2022 Remi Collet <remi@remirepo.net> - 1.5.0-1
- update to 1.5.0 (no change)

* Mon Jul 25 2022 Remi Collet <remi@remirepo.net> - 1.4.0-1
- update to 1.4.0 (no change)

* Mon Jan 31 2022 Remi Collet <remi@remirepo.net> - 1.3.1-1
- update to 1.3.1 (no change)

* Thu Jan  6 2022 Remi Collet <remi@remirepo.net> - 1.3.0-1
- update to 1.3.0
- keep compatibility using laminas-zendframework-bridge
  as this is only used using compat autolader
- raise dependency on laminas-filter 2.13.1
- raise dependency on laminas-form 3.1
- raise dependency on laminas-inputfilter 2.13
- raise dependency on laminas-mvc 3.3
- raise dependency on laminas-session 2.12
- raise dependency on laminas-stdlib 3.6.2
- raise dependency on laminas-validator 2.15.1

* Tue Aug  3 2021 Remi Collet <remi@remirepo.net> - 1.2.0-2
- ignore 1 test with erratic result, fix FTBFS #1987837

* Wed Apr 14 2021 Remi Collet <remi@remirepo.net> - 1.2.0-1
- update to 1.2.0
- raise dependency on PHP 7.3
- raise dependency on laminas-stdlib 3.3
- switch to phpunit9

* Thu Jan 16 2020 Remi Collet <remi@remirepo.net> - 1.1.0-1
- switch to Laminas

* Thu May  3 2018 Remi Collet <remi@remirepo.net> - 1.1.0-1
- update to 1.1.0
- use range dependencies on F27+
- switch to phpunit6 or phpunit7
- raise dependency on zend-inputfilter 2.8.1
- raise dependency on zend-session 2.8.5

* Wed Dec 13 2017 Remi Collet <remi@remirepo.net> - 1.0.0-4
- switch from zend-loader to fedora/autoloader

* Wed Jun 29 2016 Remi Collet <remi@fedoraproject.org> - 1.0.0-1
- initial package