Whamcloud - gitweb
df3b8bf4ad405e4870392ba6e9f8cad64e6b3775
[tools/e2fsprogs.git] / debian / rules
1 #! /usr/bin/make -f
2 # -*- makefile -*-
3 #
4 # Invoke each target with `./debian/rules <target>'.  All targets should be
5 # invoked with the package root as the current directory.
6 #
7 # The `binary' target must be run as root, as it needs to install files with
8 # specific ownerships.
9
10 # be paranoid
11 export LC_ALL=C
12
13 DEB_BUILD_ARCH := $(shell dpkg --print-architecture)
14 DEB_BUILD_GNU_TYPE := $(shell ./config.guess)
15 ifndef DEB_HOST_ARCH
16   DEB_HOST_ARCH := ${DEB_BUILD_ARCH}
17 endif
18 DEB_HOST_GNU_CPU := $(patsubst hurd-%,%,$(DEB_HOST_ARCH))
19 ifeq ($(filter-out hurd-%,${DEB_HOST_ARCH}),)
20   DEB_HOST_GNU_SYSTEM := gnu
21 else
22 # FIXME: we won't have always just Hurd and Linux
23   DEB_HOST_GNU_SYSTEM := linux
24 endif
25 DEB_HOST_GNU_TYPE := ${DEB_HOST_GNU_CPU}-${DEB_HOST_GNU_SYSTEM}
26
27
28 # find the version for the main package, from changelog file
29 MAIN_VERSION = $(shell head -1 debian/changelog | cut '-d ' -f 2 | sed 's/[()]//g')
30 # find versions for libraries going into their own packages, from their Makefile.in's,
31 # and sonames for all libs
32 COMERR_VERSION = $(shell grep ELF_VERSION lib/et/Makefile.in | cut '-d ' -f3)
33 COMERR_SOVERSION = $(shell grep ELF_SO_VERSION lib/et/Makefile.in | cut '-d ' -f3)
34 SS_VERSION = $(shell grep ELF_VERSION lib/ss/Makefile.in | cut '-d ' -f3)
35 SS_SOVERSION = $(shell grep ELF_SO_VERSION lib/ss/Makefile.in | cut '-d ' -f3)
36 UUID_VERSION = $(shell grep ELF_VERSION lib/uuid/Makefile.in | cut '-d ' -f3)
37 UUID_SOVERSION = $(shell grep ELF_SO_VERSION lib/uuid/Makefile.in | cut '-d ' -f3)
38 BLKID_VERSION = $(shell grep ELF_VERSION lib/blkid/Makefile.in | cut '-d ' -f3)
39 BLKID_SOVERSION = $(shell grep ELF_SO_VERSION lib/blkid/Makefile.in | cut '-d ' -f3)
40 EXT2FS_SOVERSION = $(shell grep ELF_SO_VERSION lib/ext2fs/Makefile.in | cut '-d ' -f3)
41 E2P_SOVERSION = $(shell grep ELF_SO_VERSION lib/e2p/Makefile.in | cut '-d ' -f3)
42
43 package=e2fsprogs
44
45 topdir=$(shell pwd)
46 debdir=${topdir}/debian
47 tmpdir=${debdir}/tmp
48 bfdir=${debdir}/e2fsprogs-bf
49 udebdir=${debdir}/e2fsprogs-udeb
50 maindir=${debdir}/e2fsprogs
51 stdbuilddir=${debdir}/BUILD-STD
52 bfbuilddir=${debdir}/BUILD-BF
53 mipsbuilddir=${debdir}/BUILD-MIPS
54 # docdir=${maindir}/usr/share/doc/${package}
55 MANDIR=/usr/share/man
56 mandir=${tmpdir}${MANDIR}
57
58 UDEB_NAME = $(package)-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb
59 UDEB_PRIORITY = $(shell grep '^Package: e2fsprogs-udeb' debian/control -A 10 | grep ^Priority: | cut -d ' ' -f 2)
60
61 SUBPACKAGES_DIRS = tmp e2fslibs-dev comerr-dev ss-dev
62
63 STAMPSDIR=debian/stampdir
64 CFGSTDSTAMP=${STAMPSDIR}/configure-std-stamp
65 CFGBFSTAMP=${STAMPSDIR}/configure-bf-stamp
66 BUILDSTDSTAMP=${STAMPSDIR}/build-std-stamp
67 BUILDBFSTAMP=${STAMPSDIR}/build-bf-stamp
68
69 CCOPTS = -O2 -fsigned-char
70 LIBC-DEV = libc6-dev
71
72 INSTALL = install
73 INSTALL_PROGRAM = $(INSTALL) -p -o root -g root  -m  755
74
75 ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
76 CCOPTS += -g -O1
77 endif
78 ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
79 INSTALL_PROGRAM += -s
80 endif
81
82 ifeq (${DEB_HOST_ARCH},alpha)
83 CCOPTS += -DHAVE_NETINET_IN_H
84 LIBC-DEV = libc6.1-dev
85 else
86 CCOPTS += -D__NO_STRING_INLINES
87 endif
88
89 BF_CCOPTS = -Os -fomit-frame-pointer
90
91 COMMON_CONF_FLAGS =  \
92                 --enable-elf-shlibs --enable-dynamic-e2fsck \
93                 --enable-nls \
94                 --infodir=/usr/share/info
95
96 STD_CONF_FLAGS = --with-ccopts="${CCOPTS}" --enable-compression
97
98 BF_CONF_FLAGS = --with-ccopts="${CCOPTS} ${BF_CCOPTS}" \
99         --disable-swapfs --disable-imager \
100         --disable-resizer --disable-debugfs
101
102 MIPS_NOPIC_CONF_FLAGS = --with-ccopts="${CCOPTS}" \
103         --disable-nls \
104         --disable-swapfs --disable-imager \
105         --disable-resizer # --disable-debugfs
106 # we can't use those flags at configure time
107 MIPS_CFLAGS= -G 0 -fno-pic -mno-abicalls
108
109 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
110 ifneq (,$(findstring $(DEB_BUILD_ARCH),mips mipsel))
111 ismips=ismips
112 endif
113 endif
114
115 ${CFGSTDSTAMP}:
116         dh_testdir
117
118         mkdir -p ${stdbuilddir}
119 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
120         cd ${stdbuilddir} && \
121                 ${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS}
122 else
123         cd ${stdbuilddir} && CC="${DEB_HOST_GNU_TYPE}-gcc" \
124                 ${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \
125                 --build=$(DEB_BUILD_GNU_TYPE) $(DEB_HOST_GNU_TYPE)
126 endif
127
128   # specially-built MIPS lib
129         if [ ismips = "${ismips}" ]; then \
130                 mkdir -p ${mipsbuilddir} ; \
131                 cd ${mipsbuilddir} && \
132                         ${topdir}/configure ${MIPS_NOPIC_CONF_FLAGS} ; \
133         fi
134
135         mkdir -p ${STAMPSDIR}
136         touch ${CFGSTDSTAMP}
137
138 ${CFGBFSTAMP}:
139         dh_testdir
140         rm -f config.cache
141
142         mkdir -p ${bfbuilddir}
143 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
144         cd ${bfbuilddir} && \
145                 ${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS}
146 else
147         cd ${bfbuilddir} && CC="${DEB_HOST_GNU_TYPE}-gcc" \
148                 ${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} \
149                 --build=$(DEB_BUILD_GNU_TYPE) $(DEB_HOST_GNU_TYPE)
150 endif
151         mkdir -p ${STAMPSDIR}
152         touch ${CFGBFSTAMP}
153
154 build: build-std build-bf
155
156 build-std: ${BUILDSTDSTAMP}
157 ${BUILDSTDSTAMP}: ${CFGSTDSTAMP}
158         dh_testdir
159         make -C ${stdbuilddir} all
160
161         ( cd ${stdbuilddir}/doc && \
162           texi2html -split_chapter ${topdir}/doc/libext2fs.texinfo )
163         ( cd ${stdbuilddir}/lib/et && make com_err.info && \
164           texi2html -split_chapter -expandinfo ${topdir}/lib/et/com_err.texinfo )
165
166   # specially-built MIPS lib
167         if [ ismips = "${ismips}" ]; then \
168                 make -C ${mipsbuilddir}/util ; \
169                 make -C ${mipsbuilddir} libs \
170                         CFLAGS="${CCOPTS} ${MIPS_CFLAGS}" \
171                         LIB_SUBDIRS="lib/et lib/ext2fs" ; \
172         fi
173
174         touch ${BUILDSTDSTAMP}
175
176 build-bf: ${BUILDBFSTAMP}
177 ${BUILDBFSTAMP}: ${CFGBFSTAMP}
178         dh_testdir
179         make -C ${bfbuilddir} all
180         touch ${BUILDBFSTAMP}
181
182 clean:
183         dh_testdir
184         rm -rf ${STAMPSDIR}
185         -make -C ${stdbuilddir} -i distclean
186         -make -C ${bfbuilddir} -i distclean
187         rm -rf ${stdbuilddir} ${bfbuilddir} ${mipsbuilddir}
188         rm -f doc/libext2fs_*.html lib/et/com_err_*.html debian/*.substvars
189         dh_clean
190
191 install: cleanup install-std install-bf
192
193 # This rule allows to factorize the dh_clean between the 2 install rules
194 # This must be launched before install-* (if launching them by hand, for
195 # exemple) or results are unpredictable
196 cleanup:
197         dh_testdir
198         dh_testroot
199         dh_clean -k
200
201 install-std: DH_OPTIONS=
202 install-std: build
203         dh_testdir
204         dh_testroot
205         dh_installdirs
206
207         mkdir -p ${tmpdir}/sbin
208         make -C ${stdbuilddir} install DESTDIR=${tmpdir} \
209                 INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true
210   # static libs and .h files
211         make -C ${stdbuilddir} install-libs DESTDIR=${tmpdir} LDCONFIG=true
212
213   # remove FSIM for now.
214         -rm ${tmpdir}/lib/evms/libe2fsim.*.so
215
216   # statically-linked fsck
217         ${INSTALL_PROGRAM} ${stdbuilddir}/e2fsck/e2fsck.static ${tmpdir}/sbin
218         ln -s e2fsck.8.gz ${mandir}/man8/e2fsck.static.8.gz
219
220         dh_movefiles
221         test -z `find ${tmpdir} -type f`
222
223   # specially-built MIPS lib
224         if [ ismips = "${ismips}" ]; then \
225                 cp ${mipsbuilddir}/lib/libext2fs.a \
226                         ${debdir}/e2fslibs-dev/usr/lib/libext2fs-nopic.a ; \
227         fi
228
229 install-bf: DH_OPTIONS=
230 install-bf: build
231         dh_testdir
232         dh_testroot
233         dh_installdirs
234
235         mkdir -p ${bfdir}/sbin
236         make -C ${bfbuilddir} install DESTDIR=${bfdir} \
237                 INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true
238         rm -rf ${bfdir}/usr/share ${bfdir}/usr/lib
239         cd ${bfdir}/sbin && rm -f e2label
240         cd ${bfdir}/usr/bin && rm -f uuidgen
241
242   # remove FSIM for now.
243         rm ${bfdir}/lib/evms/libe2fsim.*.so
244
245 install-udeb: install-bf
246         dh_testdir
247         dh_testroot
248         dh_installdirs
249
250         cp -a ${bfdir}/lib ${udebdir}/
251         mkdir -p ${udebdir}/sbin
252         cp -a ${bfdir}/sbin/mke2fs ${udebdir}/sbin/
253         ln -s mke2fs ${udebdir}/sbin/mkfs.ext2
254         ln -s mke2fs ${udebdir}/sbin/mkfs.ext3
255         cp -a ${bfdir}/sbin/e2fsck ${udebdir}/sbin/
256         ln -s e2fsck ${udebdir}/sbin/fsck.ext2
257         ln -s e2fsck ${udebdir}/sbin/fsck.ext3
258
259 binary-indep: 
260   # no arch-independant debs.
261
262 binary-arch: DH_OPTIONS= -a
263 binary-arch: install install-udeb
264         dh_testdir
265         dh_testroot
266
267   # lintian overrides
268         for i in $$(cd debian && echo *.lintian-overrides); do \
269                 pkg=$${i%.lintian-overrides} ;\
270                 install -m644 -D -p debian/$$i ${debdir}/$${pkg}/usr/share/lintian/overrides/$${pkg} ;\
271         done
272
273   # mkinitrd script
274         mkdir -p debian/e2fsprogs/etc/mkinitrd/scripts
275         install -m755 debian/e2fsprogs.mkinitrd \
276                 debian/e2fsprogs/etc/mkinitrd/scripts/e2fsprogs
277
278   # symlinks to prepare dh_installdocs run
279         mkdir -p ${debdir}/e2fsck-static/usr/share/doc/
280         ln -sf e2fsprogs ${debdir}/e2fsck-static/usr/share/doc/e2fsck-static
281
282         mkdir -p ${debdir}/e2fslibs-dev/usr/share/doc/e2fsprogs
283         ln -sf e2fsprogs ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs-dev
284
285         mkdir -p ${debdir}/uuid-dev/usr/share/doc/e2fsprogs
286         ln -sf e2fsprogs ${debdir}/uuid-dev/usr/share/doc/uuid-dev
287
288   # comerr and ss have their own copyright notices
289         mkdir -p ${maindir}/usr/share/doc/libcomerr${COMERR_SOVERSION}
290         mkdir -p ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}
291         ln -sf libcomerr${COMERR_SOVERSION} ${debdir}/comerr-dev/usr/share/doc/comerr-dev
292
293         mkdir -p ${maindir}/usr/share/doc/libss${SS_SOVERSION}
294         mkdir -p ${debdir}/ss-dev/usr/share/doc/libss${SS_SOVERSION}
295         ln -sf libss${SS_SOVERSION} ${debdir}/ss-dev/usr/share/doc/ss-dev
296
297         mkdir -p ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}
298         mkdir -p ${debdir}/libblkid-dev/usr/share/doc
299         ln -sf libblkid${BLKID_SOVERSION} ${debdir}/libblkid-dev/usr/share/doc/libblkid-dev
300
301         for i in libcomerr${COMERR_SOVERSION} libss${SS_SOVERSION}; do \
302           install -m 644 debian/$$i.copyright \
303             ${maindir}/usr/share/doc/$$i/copyright ; \
304         done
305
306         install -m 644 debian/libblkid.copyright \
307                 ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}/copyright
308
309         dh_installdocs -Ne2fsprogs-udeb
310
311         install -m 644 debian/e2fsprogs.copyright \
312           ${bfdir}/usr/share/doc/e2fsprogs-bf/copyright
313
314   # libblkid is under the the LGPL
315
316   # HTML docs
317         install -d ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs-dev/html-info/
318         install -p ${stdbuilddir}/doc/libext2fs_*.html \
319            ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs-dev/html-info/
320         install -d ${debdir}/comerr-dev/usr/share/doc/comerr-dev/html-info/
321         install -p ${stdbuilddir}/lib/et/com_err_*.html \
322            ${debdir}/comerr-dev/usr/share/doc/comerr-dev/html-info/
323
324   # texinfo docs
325         install -p ${topdir}/doc/libext2fs.texinfo \
326            ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs-dev/libext2fs.texi
327         install -p ${topdir}/lib/et/com_err.texinfo \
328            ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/com_err.texi
329
330         dh_installexamples
331
332         dh_installinfo -pcomerr-dev ${stdbuilddir}/lib/et/com_err.info
333         dh_installinfo -pe2fslibs-dev ${stdbuilddir}/doc/libext2fs.info
334
335         dh_undocumented
336
337         DH_OPTIONS= dh_installchangelogs -pe2fsprogs -pe2fsprogs-bf -plibblkid${BLKID_SOVERSION} ChangeLog
338
339         for i in libcomerr${COMERR_SOVERSION} libss${SS_SOVERSION} ; do \
340           mkdir -p ${maindir}/usr/share/doc/$$i ; \
341           ln -s ../e2fsprogs/changelog.Debian.gz ${maindir}/usr/share/doc/$$i/ ; \
342           ln -s ../e2fsprogs/changelog.gz ${maindir}/usr/share/doc/$$i/ ; \
343         done
344
345         dh_strip
346
347         dh_compress
348         dh_fixperms
349
350         echo "libcdev:Depends=${LIBC-DEV}" > debian/comerr-dev.substvars
351         echo "libcdev:Depends=${LIBC-DEV}" > debian/ss-dev.substvars
352         echo "libcdev:Depends=${LIBC-DEV}" > debian/uuid-dev.substvars
353         echo "libcdev:Depends=${LIBC-DEV}" > debian/blkid-dev.substvars
354         echo "libcdev:Depends=${LIBC-DEV}" > debian/e2fslibs-dev.substvars
355
356 # Call this mostly to get the maintainer-script snippets
357         dh_makeshlibs -pe2fsprogs
358 # We overwrite the shlibs by hand because of virtual packages used
359         : > debian/e2fsprogs/DEBIAN/shlibs
360         echo "libext2fs ${EXT2FS_SOVERSION} libext2fs${EXT2FS_SOVERSION}" \
361                 >> debian/e2fsprogs/DEBIAN/shlibs
362         echo "libe2p ${E2P_SOVERSION} libe2p${E2P_SOVERSION}" \
363                 >> debian/e2fsprogs/DEBIAN/shlibs
364         echo "libuuid ${UUID_SOVERSION} libuuid${UUID_SOVERSION}" \
365                 >> debian/e2fsprogs/DEBIAN/shlibs
366         echo "libcom_err ${COMERR_SOVERSION} libcomerr${COMERR_SOVERSION}" \
367                 >> debian/e2fsprogs/DEBIAN/shlibs
368         echo "libss ${SS_SOVERSION} libss${SS_SOVERSION}" \
369                 >> debian/e2fsprogs/DEBIAN/shlibs
370
371         dh_makeshlibs -plibblkid${BLKID_SOVERSION}
372
373         dh_installdeb
374         dh_shlibdeps -l${stdbuilddir}/lib
375
376         dh_gencontrol -Ncomerr-dev -Nss-dev -Nuuid-dev -Ne2fsprogs-udeb
377         DH_OPTIONS= dh_gencontrol -pcomerr-dev \
378           -u '-v${COMERR_VERSION}-${MAIN_VERSION}'
379         DH_OPTIONS= dh_gencontrol -pss-dev \
380           -u '-v${SS_VERSION}-${MAIN_VERSION}'
381         DH_OPTIONS= dh_gencontrol -puuid-dev \
382           -u '-v${UUID_VERSION}-${MAIN_VERSION}'
383         DH_OPTIONS= dh_gencontrol -plibblkid-dev \
384           -u '-v${MAIN_VERSION}'
385         DH_OPTIONS= dh_gencontrol -plibblkid${BLKID_SOVERSION} \
386           -u '-v${MAIN_VERSION}'
387
388         dh_md5sums -Ne2fsprogs-udeb
389         dh_builddeb -Ne2fsprogs-udeb
390
391         # udeb stuff
392         dh_gencontrol   -pe2fsprogs-udeb -- -fdebian/files~
393         dpkg-distaddfile $(UDEB_NAME) debian-installer $(UDEB_PRIORITY)
394         dh_builddeb -pe2fsprogs-udeb --filename=$(UDEB_NAME)
395
396 binary: binary-indep binary-arch
397
398 .PHONY: binary binary-arch binary-indep clean checkroot