diff --git a/doc/manual/Makefile.am b/doc/manual/Makefile.am index b1164fc11..6362e7e3c 100644 --- a/doc/manual/Makefile.am +++ b/doc/manual/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in EXTRA_DIST = \ - dependencies macros queryformat spec buildroot format \ - multiplebuilds relocatable signatures triggers + builddependencies buildroot dependencies format macros \ + multiplebuilds queryformat spec relocatable signatures triggers diff --git a/doc/manual/builddependencies b/doc/manual/builddependencies new file mode 100644 index 000000000..0d6dca6fe --- /dev/null +++ b/doc/manual/builddependencies @@ -0,0 +1,165 @@ +As we start updating packages for Red Hat 6.2, 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 + 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 (:: 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.