#!/usr/bin/make -f

%:
	dh $@

override_dh_auto_build:
	@echo "** image license check disabled"

	phpab \
		--template debian/autoload.php.tpl \
		--output src/Symfony/autoload.php \
		src/Symfony/Bundle/FullStack.php
	mkdir --parents debian/packages_to_build debian/autoloaders
	# Walk through the parts of upstream's code that should be packaged into
	# separate Debian binary packages and write down a package-to-build info
	# file containing shell variables for each package.
	# Those files will be traverse later on in different targets of this
	# makefile (debian/rules). They solely exists to not repeat the extraction
	# of those variables in each of those target over and over again.
	# Then, build a class loader for the package, using the template in
	# debian/$deb_pkg_name.autoload.php.tpl if it exists (to load dependencies).
	set -e;\
	 for src_path in $$(find src/Symfony/ -mindepth 2 -maxdepth 4 -type d); do \
	  if [ -e $$src_path/composer.json ]; then \
	   pkg_path=$${src_path#src/Symfony/}; \
	   deb_pkg_name=php-$$(cat $$src_path/composer.json | jq -r '.name | tostring' | sed -r 's|/|-|'); \
	   if [ $$(grep -c -E -e "^Package: $$deb_pkg_name\$$" debian/control) -ne 1 ]; then \
	    echo "W: No Debian package '$$deb_pkg_name' defined in debian/control," 1>&2; \
	    echo "   therefor not considering Symfony $$pkg_path," 1>&2; \
	    continue; \
	   fi; \
	   echo "# This file contains some variables sourced" > debian/packages_to_build/$$deb_pkg_name; \
	   echo "# by various targets in debian/rules" >> debian/packages_to_build/$$deb_pkg_name; \
	   echo "deb_pkg_name='$$deb_pkg_name'" >> debian/packages_to_build/$$deb_pkg_name; \
	   echo "src_path='$$src_path'" >> debian/packages_to_build/$$deb_pkg_name; \
	   echo "pkg_path='$$pkg_path'" >> debian/packages_to_build/$$deb_pkg_name; \
	   echo "symfony $${deb_pkg_name#php-symfony-} Symfony/$$pkg_path/autoload.php" > debian/autoloaders/$$deb_pkg_name; \
	   if [ \( $$deb_pkg_name = php-symfony-mailer \) -o \
		\( $$deb_pkg_name = php-symfony-messenger \) -o \
		\( $$deb_pkg_name = php-symfony-notifier \) -o \
		\( $$deb_pkg_name = php-symfony-translation \) ] ; then \
	    phpab --output $$src_path/autoload.php \
		--blacklist '*\\tests\\*' \
		--blacklist '*\\bridge\\*' \
		--exclude 'src/Symfony/Component/Messenger/Tests/Exception/HandlerFailedExceptionTest.php' \
		--whitelist 'symfony\\*' \
		--template debian/$$deb_pkg_name.autoload.php.tpl \
		$$src_path; \
	   else \
	    phpab --output $$src_path/autoload.php \
		--blacklist '*\\tests\\*' \
		--blacklist 'symfony\\config\\*' \
		--exclude 'src/Symfony/Bridge/Doctrine/Tests/Fixtures/DoctrineLoaderEmbed.php' \
		--exclude 'src/Symfony/Bridge/Doctrine/Tests/Fixtures/DoctrineLoaderEntity.php' \
		--exclude 'src/Symfony/Bridge/Doctrine/Tests/Fixtures/EmbeddedIdentifierEntity.php' \
		--exclude 'src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/Fixtures/DoctrineWithEmbedded.php' \
		--exclude 'src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/Fixtures/proxy-implem.php' \
		--exclude 'src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/*' \
		--exclude 'src/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php' \
		--exclude 'src/Symfony/Component/Routing/Tests/Fixtures/AttributesFixtures/*' \
		--whitelist 'symfony\\*' \
		--tolerant \
		--template debian/$$deb_pkg_name.autoload.php.tpl \
		$$src_path; \
	   fi; \
	  fi; \
	 done

override_dh_auto_test:
	mkdir --parents vendor build
	cp -r src/Symfony build
	rm -r build/Symfony/Contracts
	cp debian/autoload_runtime.php vendor
	phpab	--output vendor/autoload.php \
		--whitelist '*\\tests\\*' \
		--tolerant \
		--template debian/autoload.php.tests.tpl \
		--blacklist 'symfony\\component\\dependencyinjection\\tests\\fixtures\\container\\projectservicecontainer' \
		--exclude 'build/Symfony/Bridge/Doctrine/Tests/Fixtures/DoctrineLoaderEmbed.php' \
		--exclude 'build/Symfony/Bridge/Doctrine/Tests/Fixtures/DoctrineLoaderEntity.php' \
		--exclude 'build/Symfony/Bridge/Doctrine/Tests/Fixtures/EmbeddedIdentifierEntity.php' \
		--exclude 'build/Symfony/Bridge/Doctrine/Tests/PropertyInfo/Fixtures/DoctrineWithEmbedded.php' \
		--exclude 'build/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/Fixtures/proxy-implem.php' \
		--exclude 'build/Symfony/Component/DependencyInjection/Tests/Fixtures/php/*' \
		--exclude 'build/Symfony/Component/Messenger/Tests/Exception/HandlerFailedExceptionTest.php' \
		--exclude 'build/Symfony/Component/PropertyInfo/Tests/Extractor/PhpStanExtractorTest.php' \
		--exclude 'build/Symfony/Component/Routing/Tests/Fixtures/AttributesFixtures/*' \
		build/Symfony
	ln -s /usr/share/php/AsyncAws build
	ln -s /usr/share/php/Cache build
	ln -s /usr/share/php/Composer build
	ln -s /usr/share/php/Cron build
	ln -s /usr/share/php/Doctrine build
	ln -s /usr/share/php/Egulias build
	ln -s /usr/share/php/GuzzleHttp build
	ln -s /usr/share/php/Http build
	ln -s /usr/share/php/League build
	ln -s /usr/share/php/Masterminds build
	ln -s /usr/share/php/Monolog build
	ln -s /usr/share/php/Nyholm build
	ln -s /usr/share/php/Pheanstalk build
	ln -s /usr/share/php/phpDocumentor build
	ln -s /usr/share/php/PHPStan build
	ln -s /usr/share/php/PHPUnit build
	ln -s /usr/share/php/Predis build
	ln -s /usr/share/php/ProxyManager build
	ln -s /usr/share/php/Psr build
	ln -s /usr/share/php/Symfony/Contracts build/Symfony
	ln -s /usr/share/php/Symfony/Component/Mercure build/Symfony/Component
	ln -s /usr/share/php/Symfony/Component/Security/Acl build/Symfony/Component/Security
	ln -s /usr/share/php/Symfony/Polyfill build/Symfony
	ln -s /usr/share/php/Twig build
	ln -s build/Symfony .
	# Drop never ending testsuite with PHPUnit 11
	rm -f build/Symfony/Component/HttpKernel/phpunit.xml.dist
	rm -f build/Symfony/Component/RateLimiter/phpunit.xml.dist
	# Actual tests suite
	components=$$(find build/Symfony -mindepth 3 -maxdepth 4 -type f -name phpunit.xml.dist -printf '%h\n') && \
	 echo "$$components" | parallel --gnu --keep-order '/bin/echo -e "\\nRunning {} tests"; SYMFONY_DEPRECATIONS_HELPER=weak php -d assert.exception=1 -d zend.assertions=1 /usr/bin/phpunit --include build --colors=always --exclude-group jwt --exclude-group network --exclude-group tty --exclude-group benchmark --exclude-group intl-data --exclude-group functional --exclude-group composer --exclude-group nophpunit11 {} || (/bin/echo -e "\\e[41mKO\\e[0m {}" && $$(exit 1));';

override_dh_phpcomposer:
	dh_phpcomposer --package=php-symfony --sourcedirectory=./
	# In debian/packages_to_build/ a file containing shell variables exists
	# for each package that should be build. Source one file after another
	# to make the shell variables available and run dh_phpcomposer for each
	# package.
	set -e;\
	 for package_info_file in $$(find debian/packages_to_build/ -mindepth 1 -maxdepth 1 -type f); do \
	  . $$package_info_file; \
	  dh_phpcomposer --package=$$deb_pkg_name --sourcedirectory=$$src_path; \
	 done

override_dh_install:
	dh_install --package=php-symfony
	# In debian/packages_to_build/ a file containing shell variables exists
	# for each package that should be build. Source one file after another
	# to make the shell variables available and run dh_install in order to
	# provide the PHP runtime code for each package.
	set -e; \
	 for package_info_file in $$(find debian/packages_to_build/ -mindepth 1 -maxdepth 1 -type f); do \
	  . $$package_info_file; \
	  dh_install --package=$$deb_pkg_name; \
	  dh_install --package=$$deb_pkg_name \
	      debian/autoloaders/$$deb_pkg_name usr/share/pkg-php-tools/autoloaders; \
	  if [ \( $$deb_pkg_name = php-symfony-mailer \) -o \
	       \( $$deb_pkg_name = php-symfony-messenger \) -o \
	       \( $$deb_pkg_name = php-symfony-notifier \) -o \
	       \( $$deb_pkg_name = php-symfony-translation \) ] ; then \
	   dh_install \
		-X.md \
		-Xcomposer.json \
		-XBridge \
		-XLICENSE \
		-Xphpunit.xml.dist \
		-XTests \
		--package=$$deb_pkg_name \
		$$src_path/* \
		usr/share/php/Symfony/$$pkg_path/; \
	  else \
	   dh_install \
		-X.git \
		-X.md \
		-Xcomposer.json \
		-XAssetMapper/Fixtures \
		-XLICENSE \
		-XResources/bin \
		-XResources/emoji \
		-XResources/meta \
		-Xphpunit.xml.dist \
		--package=$$deb_pkg_name \
		$$src_path/* \
		usr/share/php/Symfony/$$pkg_path/; \
	   find debian/$$deb_pkg_name -name bin -type d -print | xargs /bin/rm -rf; \
	   find debian/$$deb_pkg_name -name Tests -type d -print | xargs /bin/rm -rf; \
	   find debian/$$deb_pkg_name -name var -type d -print | xargs /bin/rm -rf; \
	  fi; \
	 done

execute_after_dh_installdocs:
	# In debian/packages_to_build/ a file containing shell variables exists
	# for each package that should be build. Source one file after another
	# to make the shell variables available and run dh_installdocs in order
	# to provide some basic documentation for each package.
	set -e; \
	 for package_info_file in $$(find debian/packages_to_build/ -mindepth 1 -maxdepth 1 -type f); do \
	  . $$package_info_file; \
	 done

execute_before_dh_installchangelogs:
	for i in $$(ls CHANGELOG-* -r); do cat $$i >> CHANGELOG && echo '' >> CHANGELOG; done

execute_after_dh_installchangelogs:
	# In debian/packages_to_build/ a file containing shell variables exists
	# for each package that should be build. Source one file after another
	# to make the shell variables available and run dh_installchangelogs in
	# order to provide upstream changelogs for each package.
	set -e; \
	 for package_info_file in $$(find debian/packages_to_build/ -mindepth 1 -maxdepth 1 -type f); do \
	  . $$package_info_file; \
	  if [ -f "$$src_path/CHANGELOG.md" ]; then \
	   dh_installchangelogs \
	    --package=$$deb_pkg_name \
	    $$src_path/CHANGELOG.md; \
	  elif [ -f "$$src_path/../CHANGELOG.md" ]; then \
	   dh_installchangelogs \
	    --package=$$deb_pkg_name \
	    $$src_path/../CHANGELOG.md; \
	  fi; \
	 done
