Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 2269bb274471fd2722517c2c0b740d7f > files > 45

rpm-devel-4.0.4-19mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Generating buiild dependencies automatically</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.17 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h2><a name="builddpendencies">Generating buiild dependencies automatically</a>
</h2> As we start updating packages for the next Red Hat distro, I'd like to see packages start to make use of build dependencies. Basically build dependencies are just like install dependencies, but they are resolved against the build system just after parsing the spec file. Syntactically, build dependencies look just like install dependencies in a spec file with "Build" prefixed:
<p>
<div class="fragment"><pre>
        BuildPrereqs:
        BuildRequires:
        BuildConflicts:
</pre></div>
<p>
All the above dependencies include versions, files, existence/range tests, etc. The build dependency checking can also be turned off with --nodeps if necessary just like install dependency checking can. Eventually, build dependencies will be automated in rpm, but the major impediment to that effort is the engineering required to maintain the pretense that src rpm's are "noarch".
<p>
Meanwhile, I've added a package called "InDependence-1.0" to powertools-6.2 that may be of use in detecting build dependencies that can be added to spec files as part of rebuilding packages for Red Hat 6.2.
<p>
Here's a short example of how to generate the package/file names that were used while building gnorpm using InDependence:
<p>
<div class="fragment"><pre>
        rpm -U /mnt/redhat/comps/powertools/6.2/i386/InDependence-1.0-3.i386.rpm
        rpm -i /mnt/redhat/comps/dist/6.2/SRPMS/gnorpm-0.9-11.src.rpm
        cd /usr/src/redhat/SPECS
        dep -detail rpm -ba gnorpm.spec &gt;&amp; xxx
        ...
        (the build will take longer since both dep and strace are pigs)
        ...
        grep -- '::' xxx &gt; yyy
</pre></div>
<p>
<div class="fragment"><pre>
Aside:  The dep perl wrapper is a "pig" only because it's exec'ing
                rpm -qf &lt;filename&gt;
        in order to turn filenames into package names. There are easier/faster
        ways to get this information...

        There's no way to speed up the
                /sbin/strace -q -etrace=open,execve -o ...
        command itself. The eventual implementation in rpm will snatch the
        same open/execve syscalls using LD_PRELOAD.

        Patches cheerfully accepted :-)
</pre></div>
<p>
Here's what's in yyy (&lt;packagename&gt;::&lt;filename&gt; format):
<p>
<div class="fragment"><pre>
        ORBit-devel-0.4.95-2::/usr/bin/orbit-config 
        XFree86-libs-3.3.5-6::/usr/X11R6/lib/libICE.so.6 
        XFree86-libs-3.3.5-6::/usr/X11R6/lib/libSM.so.6 
        XFree86-libs-3.3.5-6::/usr/X11R6/lib/libX11.so.6 
        XFree86-libs-3.3.5-6::/usr/X11R6/lib/libXext.so.6 
        audiofile-0.1.9-1::/usr/lib/libaudiofile.so.0 
        autoconf-2.13-5::/usr/bin/autoconf 
        autoconf-2.13-5::/usr/bin/autoheader 
        autoconf-2.13-5::/usr/share/autoconf/acgeneral.m4 
        autoconf-2.13-5::/usr/share/autoconf/autoconf.m4f 
        automake-1.4-5::/usr/bin/aclocal 
        automake-1.4-5::/usr/bin/automake 
        bash-1.14.7-16::/bin/sh 
        bash-1.14.7-16::/etc/bashrc 
        binutils-2.9.1.0.23-7::/usr/bin/strip 
        binutils-2.9.1.0.23-7::/usr/lib/libbfd-2.9.1.0.24.so 
        binutils-2.9.1.0.23-7::/usr/lib/libopcodes-2.9.1.0.24.so 
        bzip2-0.9.5c-1::/usr/lib/libbz2.so.0 
        dev-2.7.10-2::/dev/null 
        diffutils-2.7-16::/usr/bin/cmp 
        egcs-1.1.2-25::/usr/bin/gcc 
        egcs-1.1.2-25::/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs 
        esound-0.2.14-1::/usr/lib/libesd.so.0 
        file-3.27-3::/usr/bin/file 
        file-3.27-3::/usr/share/magic 
        fileutils-4.0-8::/bin/chgrp 
        fileutils-4.0-8::/bin/chmod 
        fileutils-4.0-8::/bin/chown 
        fileutils-4.0-8::/bin/cp 
        fileutils-4.0-8::/bin/ln 
        fileutils-4.0-8::/bin/ls 
        fileutils-4.0-8::/bin/mkdir 
        fileutils-4.0-8::/bin/mv 
        fileutils-4.0-8::/bin/rm 
        fileutils-4.0-8::/usr/bin/install 
        findutils-4.1-32::/usr/bin/xargs 
        gawk-3.0.4-1::/bin/awk 
        gawk-3.0.4-1::/bin/gawk 
        gettext-0.10.35-13::/usr/bin/xgettext 
        glib-1.2.5-1::/usr/lib/libglib-1.2.so.0 
        glib-1.2.5-1::/usr/lib/libgmodule-1.2.so.0 
        glib-devel-1.2.5-1::/usr/bin/glib-config 
        glibc-2.1.2-13::/etc/localtime 
        glibc-2.1.2-13::/etc/nsswitch.conf 
        glibc-2.1.2-13::/lib/ld-linux.so.2 
        glibc-2.1.2-13::/lib/libc.so.6 
        glibc-2.1.2-13::/lib/libcrypt.so.1 
        glibc-2.1.2-13::/lib/libdb.so.2 
        glibc-2.1.2-13::/lib/libdl.so.2 
        glibc-2.1.2-13::/lib/libm.so.6 
        glibc-2.1.2-13::/lib/libnsl.so.1 
        glibc-2.1.2-13::/lib/libnss_dns.so.2 
        glibc-2.1.2-13::/lib/libnss_files.so.2 
        glibc-2.1.2-13::/lib/libnss_nis.so.2 
        glibc-2.1.2-13::/lib/libnss_nisplus.so.2 
        glibc-2.1.2-13::/lib/libresolv.so.2 
        glibc-2.1.2-13::/usr/bin/ldd 
        gnome-libs-1.0.54-1::/usr/lib/libart_lgpl.so.2 
        gnome-libs-1.0.54-1::/usr/lib/libgnome.so.32 
        gnome-libs-1.0.54-1::/usr/lib/libgnomesupport.so.0 
        gnome-libs-1.0.54-1::/usr/lib/libgnomeui.so.32 
        gnome-libs-devel-1.0.54-1::/usr/bin/gnome-config 
        grep-2.3-2::/bin/egrep 
        grep-2.3-2::/bin/fgrep 
        grep-2.3-2::/bin/grep 
        gtk+-1.2.5-2::/usr/lib/libgdk-1.2.so.0 
        gtk+-1.2.5-2::/usr/lib/libgtk-1.2.so.0 
        imlib-1.9.7-1::/usr/lib/libgdk_imlib.so.1 
        libghttp-1.0.4-1::/usr/lib/libghttp.so.1 
        libtool-1.3.3-1::/usr/bin/libtoolize 
        libtool-1.3.3-1::/usr/share/libtool/config.guess 
        libtool-1.3.3-1::/usr/share/libtool/config.sub 
        libtool-1.3.3-1::/usr/share/libtool/ltconfig 
        libtool-1.3.3-1::/usr/share/libtool/ltmain.sh 
        libxml-1.4.0-1::/usr/lib/libxml.so.1 
        libxml-devel-1.4.0-1::/usr/bin/xml-config 
        m4-1.4-12::/usr/bin/m4 
        make-3.77-6::/usr/bin/make 
        mktemp-1.5-1::/bin/mktemp 
        net-tools-1.53-1::/bin/hostname 
        patch-2.5-9::/usr/bin/patch 
        rootfiles-5.2-5::/root/.bashrc 
        rpm-3.0.4-0.16::/bin/rpm 
        rpm-3.0.4-0.16::/usr/lib/librpm.so.0 
        rpm-3.0.4-0.16::/usr/lib/rpm/find-provides 
        rpm-3.0.4-0.16::/usr/lib/rpm/find-requires 
        rpm-3.0.4-0.16::/usr/lib/rpm/macros 
        rpm-3.0.4-0.16::/usr/lib/rpm/rpmpopt 
        rpm-3.0.4-0.16::/usr/lib/rpm/rpmrc 
        sed-3.02-4::/bin/sed 
        setup-2.0.5-1::/etc/group 
        setup-2.0.5-1::/etc/host.conf 
        setup-2.0.5-1::/etc/passwd 
        sh-utils-2.0-1::/bin/basename 
        sh-utils-2.0-1::/bin/false 
        sh-utils-2.0-1::/bin/sleep 
        sh-utils-2.0-1::/bin/true 
        sh-utils-2.0-1::/usr/bin/expr 
        sh-utils-2.0-1::/usr/bin/id 
        texinfo-3.12h-2::/usr/bin/makeinfo 
        textutils-2.0-2::/bin/cat 
        textutils-2.0-2::/bin/sort 
        textutils-2.0-2::/usr/bin/cut 
        textutils-2.0-2::/usr/bin/tr 
        zlib-1.1.3-5::/usr/lib/libz.so.1 
</pre></div>
<p>
The information can be used to generate build prerequisites. What is still needed is a sensible approach on
<p>
<div class="fragment"><pre>
        1) eliminating obvious common dependencies (e.g. libtool, egcs).
        2) identifying (and removing for now) per-platform build dependencies.
        3) deciding on whether to add the build dependency on a file or on the
        package that contains the file.
        4) if adding a dependency on a package, choosing version ranges as
        appropriate.
</pre></div>
<p>
but that's up to individual packagers.
<p>
<hr><address style="align: right;"><small>Generated on Thu Sep 12 22:15:12 2002 for rpm by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.17 </small></address>
</body>
</html>