summaryrefslogtreecommitdiff
path: root/doc/manual/builddependencies
blob: a3938fdb85b2346728cf28b4319acba90c5065c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/*! \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.

*/