# remirepo/Fedora spec file for php-phpstan-phpdoc-parser
#
# Copyright (c) 2023-2024 Remi Collet
# License: CC-BY-SA-4.0
# http://creativecommons.org/licenses/by-sa/4.0/
#
# Please, preserve the changelog entries
#

%bcond_without       tests

%global gh_commit    fcaefacf2d5c417e928405b71b400d4ce10daaf4
%global gh_short     %(c=%{gh_commit}; echo ${c:0:7})
%global gh_owner     phpstan
%global gh_project   phpdoc-parser
%global php_home     %{_datadir}/php
%global namespace    PHPStan
%global library      PhpDocParser
%global major        %nil

Name:           php-%{gh_owner}-%{gh_project}%{major}
Version:        1.29.1
Release:        1%{?dist}
Summary:        PHPDoc parser with support for nullable, intersection and generic types

License:        MIT
URL:            https://github.com/%{gh_owner}/%{gh_project}
# git snapshot to retrieve test suite
Source0:        %{gh_commit}/%{name}-%{version}-%{gh_short}.tgz
Source1:        makesrc.sh

BuildArch:      noarch
# Tests
%if %{with tests}
BuildRequires:  php(language) >= 7.2
BuildRequires:  php-json
BuildRequires:  php-pcre
# From composer, "require-dev": {
# "doctrine/annotations": "^2.0",
# "nikic/php-parser": "^4.15",
# "php-parallel-lint/php-parallel-lint": "^1.2",
# "phpstan/extension-installer": "^1.0",
# "phpstan/phpstan": "^1.5",
# "phpstan/phpstan-phpunit": "^1.1",
# "phpstan/phpstan-strict-rules": "^1.0",
# "phpunit/phpunit": "^9.5",
# "symfony/process": "^5.2"
%global phpunit %{_bindir}/phpunit9
BuildRequires:  phpunit9 >= 9.5
%endif
# remirepo:1
%if 0%{?fedora} >= 27 || 0%{?rhel} >= 8
BuildRequires: (php-composer(nikic/php-parser)     >= 4.15  with php-composer(nikic/php-parser)     < 5)
# remirepo:3
%else
BuildRequires:  php-nikic-php-parser4              >= 4.15
%endif
# Autoloader
BuildRequires:  php-fedora-autoloader-devel

# From composer, "require": {
# "php": "^7.2 || ^8.0"
Requires:       php(language) >= 7.2
# Autoloader
Requires:       php-composer(fedora/autoloader)
# From phpcompatinfo report for version 2.4.2
Requires:       php-json
Requires:       php-pcre

Provides:       php-composer(%{gh_owner}/%{gh_project})   = %{version}


%description
Next generation phpDoc parser with support for intersection types and generics.


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


%build
phpab --template fedora --output src/autoload.php src


%install
: library
mkdir -p   %{buildroot}%{php_home}/%{namespace}/
cp -pr src %{buildroot}%{php_home}/%{namespace}/%{library}%{major}


%check
%if %{with tests}
mkdir vendor
cat << 'EOF' | tee vendor/autoload.php
<?php
// to avoid v5 from PHPUnit
require_once '%{php_home}/PhpParser4/autoload.php';
require_once '%{buildroot}%{php_home}/%{namespace}/%{library}%{major}/autoload.php';
\Fedora\Autoloader\Autoload::addPsr4('%{namespace}\\%{library}\\', dirname(__DIR__) . '/tests/%{namespace}');
EOF

: ignore tests using symfony/process and abnfgen
rm tests/PHPStan/Parser/FuzzyTest.php
sed -e 's:exec://exec:' -i tests/bootstrap.php

: upstream test suite
# use auto_prepend_file to ensure we use new version (not old one pulled by PHPUnit)
# ignore test using doctrine/annotations
ret=0
for cmdarg in "php %{phpunit}" php81 php82 php83; do
  if which $cmdarg; then
    set $cmdarg
    $1 -d auto_prepend_file=vendor/autoload.php \
      ${2:-%{_bindir}/phpunit9} \
        -d memory_limit=1G \
        --filter '^((?!(testDoctrine)).)*$' \
        --no-coverage \
        --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}/%{namespace}
     %{php_home}/%{namespace}/%{library}%{major}


%changelog
* Fri May 31 2024 Remi Collet <remi@remirepo.net> - 1.29.1-1
- update to 1.29.1

* Mon May 13 2024 Remi Collet <remi@remirepo.net> - 1.29.0-1
- update to 1.29.0

* Thu Apr  4 2024 Remi Collet <remi@remirepo.net> - 1.28.0-1
- update to 1.28.0

* Thu Mar 21 2024 Remi Collet <remi@remirepo.net> - 1.27.0-1
- update to 1.27.0

* Mon Feb 26 2024 Remi Collet <remi@remirepo.net> - 1.26.0-1
- update to 1.26.0

* Fri Jan  5 2024 Remi Collet <remi@remirepo.net> - 1.25.0-1
- update to 1.25.0

* Mon Dec 18 2023 Remi Collet <remi@remirepo.net> - 1.24.5-1
- update to 1.24.5

* Mon Nov 27 2023 Remi Collet <remi@remirepo.net> - 1.24.4-1
- update to 1.24.4

* Mon Nov 20 2023 Remi Collet <remi@remirepo.net> - 1.24.3-1
- update to 1.24.3

* Wed Sep 27 2023 Remi Collet <remi@remirepo.net> - 1.24.2-1
- update to 1.24.2

* Tue Sep 19 2023 Remi Collet <remi@remirepo.net> - 1.24.1-1
- update to 1.24.1

* Fri Sep  8 2023 Remi Collet <remi@remirepo.net> - 1.24.0-1
- update to 1.24.0

* Fri Aug  4 2023 Remi Collet <remi@remirepo.net> - 1.23.1-1
- update to 1.23.1

* Mon Jul 24 2023 Remi Collet <remi@remirepo.net> - 1.23.0-1
- update to 1.23.0

* Mon Jul  3 2023 Remi Collet <remi@remirepo.net> - 1.22.1-1
- update to 1.22.1

* Fri Jun  2 2023 Remi Collet <remi@remirepo.net> - 1.22.0-1
- update to 1.22.0

* Tue May 30 2023 Remi Collet <remi@remirepo.net> - 1.21.3-1
- update to 1.21.3

* Wed May 17 2023 Remi Collet <remi@remirepo.net> - 1.21.0-1
- update to 1.21.0

* Wed May  3 2023 Remi Collet <remi@remirepo.net> - 1.20.4-1
- update to 1.20.4

* Tue Apr 25 2023 Remi Collet <remi@remirepo.net> - 1.20.3-1
- update to 1.20.3

* Tue Apr 25 2023 Remi Collet <remi@remirepo.net> - 1.20.2-1
- update to 1.20.2

* Sun Apr 23 2023 Remi Collet <remi@remirepo.net> - 1.20.1-1
- update to 1.20.1

* Thu Apr 20 2023 Remi Collet <remi@remirepo.net> - 1.20.0-1
- update to 1.20.0

* Wed Apr 19 2023 Remi Collet <remi@remirepo.net> - 1.19.1-1
- update to 1.19.1

* Fri Apr  7 2023 Remi Collet <remi@remirepo.net> - 1.18.1-1
- update to 1.18.1

* Thu Apr  6 2023 Remi Collet <remi@remirepo.net> - 1.18.0-1
- update to 1.18.0

* Tue Apr  4 2023 Remi Collet <remi@remirepo.net> - 1.17.1-1
- update to 1.17.1

* Mon Mar 20 2023 Remi Collet <remi@remirepo.net> - 1.16.1-1
- initial package