Fwd: Filtering question

Paul Howarth paul at city-fan.org
Thu Jun 21 14:04:44 UTC 2012


On 06/21/2012 10:18 AM, Alec Leamas wrote:
> I raised this issue on rpmfusion-devel. However, I think it's general
> enough to seek advice also here on fedora-devel. since it's really about
> how to understand the filtering guidelines.
>
> Hi!
>
> I'm reviewing a package 2300  which at a glance seems to need filtering:
> it both Requires: and Provides: it's internal plugin libraries, many of
> which with generic names likely to clash with other packages symbols.
>
> But when I look at the guidelines at
> http://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering, they
>
> seem to be contradictory:
>   - One one hand, a package "Must not export RPM dependency information
> which is not global in nature..." e. g., plugins.
>   - On the other, a package which have binaries in PATH and/or system
> libraries must not use filtering; this applies also to sub-packages.

The filtering page on the wiki is rather out of date as it pre-dates rpm 
4.9 (F-15 onwards), which includes a native filtering mechanism and 
doesn't require that the internal dependency generator be turned off, 
and is therefore safe to use on packages containing binaries.

> 2300 is, at present, a package with binaries in $PATH (can't use
> filtering) providing and requiring it's own plugins (must be filtered).
> What should we do?
>
> Split into two independent packages built from same source?
>
> Thoughts?

Adding the following lines seems to achieve what you're looking for:

# Avoid provides/requires from private libraries
%global privlibs             Complete
%global privlibs %{privlibs}|CompleteGui
%global privlibs %{privlibs}|Drawing
%global privlibs %{privlibs}|DrawingGui
%global privlibs %{privlibs}|Fem
%global privlibs %{privlibs}|FemGui
%global privlibs %{privlibs}|FreeCAD
%global privlibs %{privlibs}|FreeCADGui
%global privlibs %{privlibs}|Image
%global privlibs %{privlibs}|ImageGui
%global privlibs %{privlibs}|ImportGui
%global privlibs %{privlibs}|Inspection
%global privlibs %{privlibs}|InspectionGui
%global privlibs %{privlibs}|Mesh
%global privlibs %{privlibs}|MeshGui
%global privlibs %{privlibs}|MeshPart
%global privlibs %{privlibs}|MeshPartGui
%global privlibs %{privlibs}|Part
%global privlibs %{privlibs}|PartDesign
%global privlibs %{privlibs}|PartDesignGui
%global privlibs %{privlibs}|PartGui
%global privlibs %{privlibs}|Points
%global privlibs %{privlibs}|PointsGui
%global privlibs %{privlibs}|QtUnitGui
%global privlibs %{privlibs}|Raytracing
%global privlibs %{privlibs}|RaytracingGui
%global privlibs %{privlibs}|ReverseEngineering
%global privlibs %{privlibs}|ReverseEngineeringGui
%global privlibs %{privlibs}|Robot
%global privlibs %{privlibs}|RobotGui
%global privlibs %{privlibs}|Sketcher
%global privlibs %{privlibs}|SketcherGui
%global privlibs %{privlibs}|Start
%global privlibs %{privlibs}|StartGui
%global privlibs %{privlibs}|WebGui
%global privlibs %{privlibs}|libFreeCADApp
%global privlibs %{privlibs}|libFreeCADBase
%global privlibs %{privlibs}|libFreeCADGui
%global __provides_exclude ^(%{privlibs})\\.so
%global __requires_exclude ^(%{privlibs})\\.so

A more succinct approach (which I haven't tried) would be:

%global __provides_exclude_from ^%{_libdir}/freecad/lib/.*\\.so$
%global __requires_exclude_from ^%{_libdir}/freecad/lib/.*\\.so$

but that would also drop dependencies required *by* those private 
libraries as well as the private libraries themselves, so I prefer the 
more long-winded approach.

Paul.




More information about the devel mailing list