[scl.org] Question about generating RPMs that depend on SCLs (like python27)

Bohuslav Kabrda bkabrda at redhat.com
Wed Jul 16 08:30:35 UTC 2014


----- Original Message -----
> On 07/16/2014 06:29 AM, Alan Robertson wrote:
> > So, I'm trying to take the page you pointed at seriously - so I added
> > this line from that page:
> >
> > BuildRequires: scl-utils-build
> >
> >
> > There is no such package.  What was intended here?
> 
> This package is included in optional channel, but you shouldn't need it,
> because you are preparing non-SCL package and scl-utils-build is
> intended only for building SCL packages.
> 
> Anyway, what is obviously wrong in your case is generating the python
> requirements. These generators are delivered in python-devel and
> python27-python-devel packages. So, if I'm not mistaken, your package
> (and building environment) must include python27-python-devel but not
> python-devel. In spec file you should have:
>    BuildRequires: python27-python-devel

That's correct. The problem here is, I think, that the package places it's files into sitearch of the SCL, but it's not actually an SCL package. One of the results of having it as non-SCL package means, that %scl_package_override() function, present in the python27-build subpackage doesn't get invoked. This function looks like this (you need to 's/@scl@/python27/'):

# override __os_install_post for this collection
# the python27_os_install_post macro is defined in macros.python2.python27 in python27-python-devel
# the name is intentionally hardcoded to always provide the same name
%scl_package_override() %{expand:%{?@scl at _os_install_post:%global __os_install_post %@scl at _os_install_post}
%global __python_requires %@scl at _python_requires
%global __python_provides %@scl at _python_provides
# macros commonly used in specfiles
%global __python2 %@scl at __python2
%global __python %@scl at __python2
%global python2_sitelib %@scl at python2_sitelib
%global python_sitelib %@scl at python2_sitelib
%global python2_sitearch %@scl at python2_sitearch
%global python_sitearch %@scl at python2_sitearch
%global python2_version %@scl at python2_version
%global python_version %@scl at python2_version
}

So the issue is that neither __os_install_post nor Python dependency generators nor Python macros get overrided as they do for SCL builds. The system Python dependency generator then sees that something is in <somepath>/usr/lib/python2.7 and generates "Requires: python(abi) = 2.7", where the python27 SCL generator would generate "Requires: python27-python(abi) = 2.7". So at the very least, you'll need to override __python_requires python27_python_requires in your specfile to get right dependencies for your package.

Hope I got it right :)
Slavek

> But be careful about packages installed during building (if you build in
> your working environment), since I'm not sure which package gets
> preference in case both python-devel and python27-python-devel are
> installed.
> 
> Regards,
> Honza
> 
> >
> >
> > On 07/15/2014 04:09 PM, Orion Poplawski wrote:
> >> On 07/15/2014 04:06 PM, Orion Poplawski wrote:
> >>> On 07/15/2014 03:55 PM, Alan Robertson wrote:
> >>>> OK.  It was pointed out to me off-list that I was comparing the
> >>>> wrong thing.
> >>>> I should have been looking at python27-python.  Here's what that
> >>>> package shows:
> >>>>
> >>>> bash-4.1# *rpm -q --provides python27-python*
> >>>> python27-python-abi = 2.7
> >>>> python27-python(abi) = 2.7
> >>>> python27-Distutils
> >>>> python27-python2 = 2.7.5
> >>>> python27-python-sqlite = 2.3.2
> >>>> python27-python-ctypes = 1.0.1
> >>>> python27-python-hashlib = 20081120
> >>>> python27-python-uuid = 1.31
> >>>> python27-python-argparse = 2.7.5-7.el6.centos.alt
> >>>> python27-python = 2.7.5-7.el6.centos.alt
> >>>> python27-python(x86-64) = 2.7.5-7.el6.centos.alt
> >>>> bash-4.1#
> >>>>
> >>>> Either I'm failing to do something to appease the automagical
> >>>> python-version
> >>>> detection (which I have no idea how it figures that out), or the
> >>>> property
> >>>> names in python27-python should not have the "python27-" prefix.
> >>>>
> >>>> Anyone know which it is - and how to deal with it?
> >>>>
> >>>> It seems to me like the attributes of the provides should not be
> >>>> prefixed by
> >>>> python27.  But I'm new to this SCL stuff...
> >>>
> >>> FWIW - they "python(abi) = ##" requires is added by
> >>> /usr/lib/rpm/pythondeps.sh
> >>> as part of the standard rpm dependency generation.  So yes, for this
> >>> to work
> >>> with the scl, either the scl needs to provide "python(abi) = 2.7" or
> >>> you will
> >>> need to disable the automatic requires generation or filter out the
> >>> python(abi) line.
> >>>
> >>> We're all new to this SCL stuff.... :)
> >>>
> >>>
> >>
> >> Here's the magic from
> >> https://access.redhat.com/documentation/en-US/Red_Hat_Developer_Toolset/2/html/Software_Collections_Guide/sect-Extending_the_python27_and_python33_Software_Collections.html
> >>
> >>
> >> # Similarly, override __python_requires for automatic dependency
> >> generator
> >> %global __python_requires %{%{scl_python}_python_requires}
> >>
> >>
> >
> >
> > --
> >      Alan Robertson<alanr at unix.sh>  - @OSSAlanR
> >
> > "Openness is the foundation and preservative of friendship...  Let me claim
> > from you at all times your undisguised opinions." - William Wilberforce
> >
> 
> 

-- 
Regards,
Bohuslav "Slavek" Kabrda.




More information about the SCLorg mailing list