From Fedora Project Wiki
No edit summary
Line 24: Line 24:
Other channels must be installed at RPM build time and at at RPM installation time.
Other channels must be installed at RPM build time and at at RPM installation time.


FPC notes : we already have 4 extras channels in repository (phing, phpdb, symfony and phpunit). A new one (ezc) is on the road. This Guidelines update proposal "try" to avoid change for already approved packages.
'''FPC notes''' : we already have 4 extras channels in repository (phing, phpdb, symfony and phpunit). A new one (ezc) is on the road. This Guidelines update proposal "try" to avoid change for already approved packages.


==== Naming scheme ====
==== Naming scheme ====
Line 34: Line 34:




FPC notes : PECL/PEAR package from standard channel also follow naming scheme for packages from another channel :)
'''FPC notes''' : PECL/PEAR package from standard channel also follow naming scheme for packages from another channel :)




Line 54: Line 54:
BuildRequires: php-channel(channelname)
BuildRequires: php-channel(channelname)
BuildRequires: php-pear(PEAR)
BuildRequires: php-pear(PEAR)
Requires: php-pear(PEAR)
Requires(post): %{__pear}
Requires(post): %{__pear}
Requires(postun): %{__pear}
Requires(postun): %{__pear}
Line 60: Line 61:
</pre>
</pre>


=== PEAR Packages  ===


FPC notes : Requires: php-pear(PEAR) should be removed as some package doesn't requires PEAR at runtime (only at install time, for registering)
== Macros and scriptlets ==


=== CHANNEL package ===




For non default channel extension, pear command requires the channel, so %postun scriplet must specify it
For non default channel extension, pear command requires the channel, so %postun scriplet must specify it
<pre>
%post
if [ $1 -eq  1 ] ; then
  %{__pear} channel-add %{pear_xmldir}/%{name}.xml > /dev/null || :
else
  %{__pear} channel-update %{pear_xmldir}/%{name}.xml > /dev/null ||:
fi
%postun
if [ $1 -eq 0 ] ; then
  %{__pear} channel-delete %{channelname} > /dev/null || :
fi
</pre>
'''FPC notes''' : I recommend to use %{name} for XML file rather than channel or extension name to avoid possible conflicts
=== PEAR Modules ===
...
These defintions for the .spec should be of interest:
<pre>
BuildRequires:    php-pear >= 1:1.4.9-1.2
Provides:        php-pear(PackageName) = %{version}
Requires:        php-common >= 4.3, php-pear(PEAR)
Requires(post):  %{_bindir}/pear
Requires(postun): %{_bindir}/pear
</pre>
'''FPC notes''' : i change php to php-common (to avoid httpd dependency)
...
And here are some recommended scriptlets for properly registering and unregistering the module, for standard channel:
<pre>
%post
%{_bindir}/pear install --nodeps --soft --force --register-only %{pear_xmldir}/%{name}.xml >/dev/null ||:
%postun
if [ "$1" -eq "0" ] ; then
%{_bindir}/pear uninstall --nodeps --ignore-errors --register-only Foo_Bar >/dev/null ||:
fi
</pre>
For non standard channel;
<pre>
<pre>
%post
%{_bindir}/pear install --nodeps --soft --force --register-only %{pear_xmldir}/%{name}.xml >/dev/null ||:
%postun
if [ "$1" -eq "0" ] ; then
if [ "$1" -eq "0" ] ; then
%{_bindir}/pear uninstall --nodeps --ignore-errors --register-only Foo_Channel/Foo_Bar >/dev/null ||:
%{_bindir}/pear uninstall --nodeps --ignore-errors --register-only Foo_channel/Foo_Bar >/dev/null ||:
fi
fi
</pre>
</pre>




TODO:
'''FPC notes''' : I also recommend to use %{name} for XML file rather than extension name to avoid possible conflicts (we can only use this for non standard channel ank keep using extension name for standard one)
* How to package a channel (to be able to BuildRequires and Requires it), see php-channel-phpunit (devel) as a working sample.
 
* should virtual provide use channel (ex : <code>Provides: php-pear(ChannelName/PackageName) = %{version</code>})
 
 


=== Packages with Optional Requires ===
=== Packages with Optional Requires ===

Revision as of 11:50, 25 January 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 .

PHP Guidelines Changes

Packages with Channels

Different kinds of packages

To be add

  • CHANNEL : a package which register a channel which provides extensions from another repository
  • Other package providing php extension not handled by pear/pecl mechanisms

3 channels are defined on installation of php-pear

  • pear.php.net (alias pear) : the default channel for PHP Extension and Application Repository
  • pecl.php.net (alias pecl) : the default channel for PHP Extension Community Library
  • __uri : Pseudo-channel for static packages

Other channels must be installed at RPM build time and at at RPM installation time.

FPC notes : we already have 4 extras channels in repository (phing, phpdb, symfony and phpunit). A new one (ezc) is on the road. This Guidelines update proposal "try" to avoid change for already approved packages.

Naming scheme

  • PECL packages from standard pecl channel should be named php-pecl-PECLPackageName-%{version}-%{release}.%{arch}.rpm.
  • PEAR packages from standard pear channel should be named php-pear-PEARPackageName-%{version}-%{release}.noarch.rpm.
  • CHANNEL packages should be named php-channel-ChannelAlias-%{version}-%{release}.noarch.rpm
  • Packages from another channel should be named php-ChannelAlias-PackageName-%{version}-%{release}.noarch.rpm.


FPC notes : PECL/PEAR package from standard channel also follow naming scheme for packages from another channel :)


CHANNEL Packages

A CHANNEL package 'MUST have :

Requires: php-pear(PEAR)
Requires(post): %{__pear}
Requires(postun): %{__pear}
Provides: php-channel(channelname)

PEAR Packages from non standard repository

A PEAR package MUST have:

BuildRequires: php-channel(channelname)
BuildRequires: php-pear(PEAR)
Requires: php-pear(PEAR)
Requires(post): %{__pear}
Requires(postun): %{__pear}
Requires: php-channel(channelname)
Provides:     php-pear(channelname/foo) = %{version}


Macros and scriptlets

CHANNEL package

For non default channel extension, pear command requires the channel, so %postun scriplet must specify it

%post
if [ $1 -eq  1 ] ; then
   %{__pear} channel-add %{pear_xmldir}/%{name}.xml > /dev/null || :
else
   %{__pear} channel-update %{pear_xmldir}/%{name}.xml > /dev/null ||:
fi


%postun
if [ $1 -eq 0 ] ; then
   %{__pear} channel-delete %{channelname} > /dev/null || :
fi

FPC notes : I recommend to use %{name} for XML file rather than channel or extension name to avoid possible conflicts


PEAR Modules

...

These defintions for the .spec should be of interest:

BuildRequires:    php-pear >= 1:1.4.9-1.2
Provides:         php-pear(PackageName) = %{version}
Requires:         php-common >= 4.3, php-pear(PEAR)
Requires(post):   %{_bindir}/pear
Requires(postun): %{_bindir}/pear

FPC notes : i change php to php-common (to avoid httpd dependency)

...

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

%post
%{_bindir}/pear install --nodeps --soft --force --register-only %{pear_xmldir}/%{name}.xml >/dev/null ||:

%postun
if [ "$1" -eq "0" ] ; then
%{_bindir}/pear uninstall --nodeps --ignore-errors --register-only Foo_Bar >/dev/null ||:
fi

For non standard channel;

%post
%{_bindir}/pear install --nodeps --soft --force --register-only %{pear_xmldir}/%{name}.xml >/dev/null ||:

%postun
if [ "$1" -eq "0" ] ; then
%{_bindir}/pear uninstall --nodeps --ignore-errors --register-only Foo_channel/Foo_Bar >/dev/null ||:
fi


FPC notes : I also recommend to use %{name} for XML file rather than extension name to avoid possible conflicts (we can only use this for non standard channel ank keep using extension name for standard one)



Packages with Optional Requires

TODO: Some PEAR packages such as Auth have many other PEAR packages that are optional Requires. We need to discuss how to handle splitting up large packages such as this.

Other Items

No additional items required.