support for manual file dependencies ?
Jason Vas Dias
jason.vas.dias at gmail.com
Tue Jun 20 09:07:56 UTC 2017
Good day Orion - thanks for your response!
RE: > File deps work just fine
No, they don't!
I did mention both %{includedir}/stdio.h and
%{_includedir}/stdio.h, and even /usr/include/stdio
and just 'stdio.h' in my mail - apologies for the spelling
typos - I did try them all.
But none of these strings will cause RPM to recognize such
a dependency as being satisfied if there is no RPM in the
RPM database that Provides that file , regardless of whether
it exists in the filesystem or not .
I analysed the code in the RPM source :
build/spec.c : rpmSpecCheckDeps()
lib/depends.c : rpmtsCheck()
All that code does is search the existing RPM database ;
if no RPM is recorded as Provide-ing a file in the database,
it returns false - it does not do any check for the existence
of a file in the file system.
There appears to be no way to get RPM to check for the existence
of an arbitrary file in the file system .
I'd suggest developing a patch to make it do so , to enable RPM to more
easily be able to start off the process of dividing OS files into packages
BEFORE any RPM package has yet been defined; basically, if rpmtsCheck()
returns "problems", then check if the dependency string actually names an
existing file or not , and consider the dependency satisfied if it does .
But I have verified there is NO such code in current versions of RPM .
Could any of the RPM developers please advise whether such a patch will
ever be entertained / considered / developed ?
Thanks & Best Regards,
Jason
P.S.
here is a test .spec fle with a dependency on /usr/include/stdio.h :
<quote>
name: T
version: 1
release: 1
license: GPL
summary: Test Spec File Capabilities
%define breq /usr/include/stdio.h
%define req libc.so.6
BuildRequires: %breq %req
Requires : %req
source: T.spec
%description
%{summary}
%build
true
%install
cp T.spec %{buildroot}/%{name}-%{release}-%{version}.%{arch}
%files
%defattr (-,root,root,-)
T.spec
%changelog
* Mon Jun 19 2017 jason.vas.dias at gmail.com
- created.
</quote>
Attempts to build fail:
$ rpmbuild -vvv -bp /tmp/T.spec --define _topdir' '/tmp --define
_builddir' '/tmp --define _buildrootdir' '/tmp --define _srcdir' '/tmp
--build-in-place
ufdio: 1 reads, 16960 total bytes in 0.000033 secs
error: Failed build dependencies:
/usr/include/stdio.h is needed by T-1-1.x86_64
libc.so.6 is needed by T-1-1.x86_64
I want to make RPM in this situation:
1. Check for existence of /usr/include/stdio.h , satisfying
dependency if found
2. Check for existence of libc.so.6 in any directory in the default system
ld.so(1) path as constructed from contents of /etc/ld.so.conf or
/etc/ld.so.conf.d/* .
It demonstrably does not do this.
On 19/06/2017, Orion Poplawski <orion at cora.nwra.com> wrote:
> On 06/19/2017 10:08 AM, Jason Vas Dias wrote:
>> Hi -
>>
>> I am wondering why RPM supports automatic dependencies like:
>> ' Requires : libc.so.6
>> '
>> but does not allow things like :
>> ' BuildRequires: %{includedir}/stdio.h
>
> File deps work just fine, but this should be %{_includedir}/stdio.h.
>
>
> --
> Orion Poplawski
> Technical Manager 720-772-5637
> NWRA, Boulder/CoRA Office FAX: 303-415-9702
> 3380 Mitchell Lane orion at nwra.com
> Boulder, CO 80301 http://www.nwra.com
>
More information about the Rpm-list
mailing list