On 02/12/23 21:37, Michael Grimm wrote:
Hi,

I am following the git repository for ports and using poudriere to compile 
those.

Today I stumbled over:

        20231125:
          AFFECTS: users of lang/php81
          AUTHOR: b...@freebsd.org

          The default version of PHP has been switched from 8.1 to 8.2.
        […]


I had had the following definition for default php version in my poudriere 
make.conf:
        DEFAULT_VERSIONS+= php=81 […]


Now, I *removed* 'php=81' from DEFAULT_VERSIONS and ended up with the following 
errors from poudriere:
        Warning: (local/wpm): Error: local/wpm depends on nonexistent origin 
'lang/php8.2-extensions';
                                Please contact maintainer of the port to fix 
this.
        Warning: (mail/roundcube@php8.2): Error: Invalid FLAVOR 'php8.2' for 
mail/roundcube
        Error: Fatal errors encountered gathering ports metadata

Understandable to me because all relevant ports are named as 'php82'...


I do have that local port local/wpm defined as follows:
        […]
        RUN_DEPENDS+= php${ 
}-extensions>0:${PORTSDIR}/lang/php${PHP_DEFAULT}-extensions
        RUN_DEPENDS+= 
roundcube-php${PHP_DEFAULT}>0:${PORTSDIR}/mail/roundcube@php${PHP_DEFAULT}
        […]


Adding 'DEFAULT_VERSIONS+= php=82 […]' to my poudriere make.conf resolves this 
issue.


It looks like $PHP_DEFAULT in port definition without 'DEFAULT_VERSIONS+= 
php=82' in make.conf translates to an erroneous 'php8.2' and runs into errors.

Whereas the explicit definition of 'DEFAULT_VERSIONS+= php=82' in make.conf is 
resulting in a $PHP_DEFAULT translating to 'php82' which successfully compiles 
those ports without complaints.


I really don't understand what I am doing wrong. And I would appreciate if 
someone could explain it to me.



AFAIK to depend on php components younshould leverage USES=php, and define the actual required modules in USE_PHP.

If your port only works with some PHP versions you should list the unsupported ones in IGNORE_WITH_PHP.

Depending on php-extensions is not really good practice, since what is actually installed by it depends on options. It really is just a convenience metaport for final users.

Anyway PHP_DEFAULT is defined in the framework Makefiles, so to use that variable you need to put it after ".include <bsd.port.pre.mk>". But I don't think that's the best strategy, you'd be better off leveraging USES=php and flavorizing your port, using PHP_VER.

Not many live examples in the ports tree, but maybe you can find some inspiration in some of these Makefiles:

databases/pear-DoctrineDBAL/Makefile
devel/php-composer/Makefile

Hope this information helps.

--
Guido Falsi <m...@madpilot.net>


Reply via email to