Mini Shell
Direktori : /usr/share/doc/rpm/ |
|
Current File : //usr/share/doc/rpm/builddependencies |
/*! \page builddependencies Generating build 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:
\verbatim
BuildPreReq:
BuildRequires:
BuildConflicts:
\endverbatim
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:
\verbatim
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 rpmbuild -ba gnorpm.spec >& xxx
...
(the build will take longer since both dep and strace are pigs)
...
grep -- '::' xxx > yyy
\endverbatim
\verbatim
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 :-)
\endverbatim
Here's what's in yyy (\<packagename\>::\<filename\> format):
\verbatim
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
\endverbatim
The information can be used to generate build prerequisites. What is still
needed is a sensible approach on
\verbatim
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.
\endverbatim
but that's up to individual packagers.
*/
Zerion Mini Shell 1.0