builddpendencies(3)

NAME
builddpendencies - Generating buiild dependencies automatically
 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:

        BuildPrereqs:
        BuildRequires:
        BuildConflicts:

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'.

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.

Here's a short example of how to generate the package/file names that were used while building gnorpm using InDependence:

        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 >& xxx
        ...
        (the build will take longer since both dep and strace are pigs)
        ...
        grep -- '::' xxx > yyy

Aside:  The dep perl wrapper is a 'pig' only because it's exec'ing
                rpm -qf <filename>
        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 :-)

Here's what's in yyy (<packagename>::<filename> format):

        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

The information can be used to generate build prerequisites. What is still needed is a sensible approach on

        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.

but that's up to individual packagers.