From Fedora Project Wiki
Line 116: Line 116:
</pre>
</pre>


= Change proposal (just add a comment) =
= Change proposal (just a additional comment) =


Conditions around the post/postun scriplets can be removed if the extension requires php >= 5.2.0, where ''pecl_install'' always defined. So it is only mandatory for EPEL packages.
Conditions around the post/postun scriplets can be removed if the extension requires php >= 5.2.0, where ''pecl_install'' always defined. So it is only mandatory for EPEL packages.

Revision as of 16:56, 14 July 2009

[[TableOfContents(3)]

Proposed Changes to PHP Guidelines

Synopsis

This page describes items that need to be changed in the PHP Guidelines or other items that need to be reviewed or ratified by the Fedora Packaging Comittee and FESCo .


Actual Guidelines

File Placement

Non-PEAR PHP extensions should put their Class files in /usr/share/php.


Change proposal

File Placement

Non-PEAR PHP extensions should put their Shared Class files in a subfolder of /usr/share/php.


Actual Guidelines

Requires and Provides

PECL Packages

A PECL package MUST have:

BuildRequires: php-devel, php-pear
Requires(post): %{__pecl}
Requires(postun): %{__pecl}

%if %{?php_zend_api}0
Requires:     php(zend-abi) = %{php_zend_api}
Requires:     php(api) = %{php_core_api}
%else
Requires:     php-api = %{php_apiver}
%endif

Provides:     php-pecl(foo) = %{version}


Change proposal

Requires and Provides

C extensions (PECL and others)

Each C extension instantiate a zend_module_entry with the ZEND_MODULE_API_NO constant. PHP check that the value for the extension is egal to the value for PHP (standard ABI check).

A C extension MUST have:

BuildRequires: php-devel
%if %{?php_zend_api}0
Requires:     php(zend-abi) = %{php_zend_api}
Requires:     php(api) = %{php_core_api}
%else
Requires:     php-api = %{php_apiver}
%endif

Condition around Requires could be removed if the extension requires php >= 5.2.0, where php_zend_api always defined. (so it is mandatory for EPEL package)

PECL Packages

PECL extension MUST have ABI check (see previous)

A PECL package MUST also have:

BuildRequires: php-pear
Requires(post): %{__pecl}
Requires(postun): %{__pecl}

Provides:     php-pecl(foo) = %{version}


Actual Guidelines

Macros and scriptlets

PECL Modules

The php-pear package in Fedora Core 5 and above (version 1:1.4.9-1.2) provides several useful macros:

  • %{pecl_phpdir}
  • %{pecl_docdir}
  • %{pecl_testdir}
  • %{pecl_datadir}
  • %{pecl_xmldir}

You may need to define a few additional macros to extract some information from PHP. It is recommended that you use the following:

%global php_apiver  %((echo 0; php -i 2>/dev/null | sed -n 's/^PHP API => //p') | tail -1)
%{!?__pecl:     %{expand: %%global __pecl     %{_bindir}/pecl}}
%{!?php_extdir: %{expand: %%global php_extdir %(php-config --extension-dir)}}

And here are some recommended scriptlets for properly registering and unregistering the module:

%if 0%{?pecl_install:1}
%post
%{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || :
%endif


%if 0%{?pecl_uninstall:1}
%postun
if [ $1 -eq 0 ]  ; then
%{pecl_uninstall} %{pecl_name} >/dev/null || :
fi
%endif

Change proposal (just a additional comment)

Conditions around the post/postun scriplets can be removed if the extension requires php >= 5.2.0, where pecl_install always defined. So it is only mandatory for EPEL packages.