6 unexport LANG LC_ALL LC_CTYPE LC_COLLATE LC_TIME LC_NUMERIC LC_MESSAGES
8 # architecture dependent variables
9 vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1)))
10 DPKG_VARS := $(shell dpkg-architecture)
11 DEB_BUILD_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE)
12 DEB_HOST_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH)
13 DEB_HOST_ARCH_OS ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH_OS)
14 DEB_HOST_GNU_CPU ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_CPU)
15 DEB_HOST_GNU_SYSTEM ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_SYSTEM)
16 DEB_HOST_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE)
17 DEB_HOST_MULTIARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH)
20 #PKGVERSION := $(shell dpkg-parsechangelog \
21 # | sed -n '/Version:/s/\(.* \)\(.*\)-2\(.*\)/\2\3/p')
23 #dpkg_ctrl_args := -v$(PKGVERSION) -VBinary-Version=$(PKGVERSION)
27 ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
28 CC = $(DEB_HOST_GNU_TYPE)-gcc
32 dpkg_buildflags = DEB_CFLAGS_MAINT_APPEND=-Wall dpkg-buildflags
33 CFLAGS := $(shell $(dpkg_buildflags) --get CFLAGS)
34 CPPFLAGS := $(shell $(dpkg_buildflags) --get CPPFLAGS)
35 LDFLAGS := $(shell $(dpkg_buildflags) --get LDFLAGS)
40 IX = install -o 0 -g 0
41 ID = install -o 0 -g 0 -m 644
43 # built with installed libreadline?
44 with_installed_rl = no
50 p_bins = bash-builtins
54 d_stat = debian/$(p_stat)
55 d_bins = debian/$(p_bins)
56 d_doc = debian/$(p_doc)
58 termcap_lib := $(if $(wildcard /usr/lib/libtinfo.so /usr/lib/$(DEB_HOST_MULTIARCH)/libtinfo.so), \
66 --infodir=/usr/share/info \
67 --mandir=/usr/share/man
68 ifeq ($(with_installed_rl),yes)
69 conf_args += --with-installed-readline
71 ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
72 conf_args += --build $(DEB_HOST_GNU_TYPE)
74 conf_args += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
77 static_conf_args := $(conf_args) \
78 --enable-static-link \
79 --without-bash-malloc \
81 #build: bash-build static-build preinst-build check
82 build: before-build bash-build static-build preinst-build check
87 : # see #327477, needed to have HAVE_DEV_STDIN defined
88 (test -d /dev/fd && test -r /dev/stdin < /dev/null) \
89 || (test -d /proc/self/fd && test -r /dev/stdin < /dev/null)
90 ifneq (,$(findstring $(DEB_HOST_ARCH_OS), linux freebsd))
91 $(CC) $(CFLAGS) $(LDFLAGS) $(CPPFLAGS) -o clear_console \
92 debian/clear_console.c $(termcap_lib)
95 # ---------------------------------------------------------------------------
99 $(MAKE) -f debian/rules do-build-bash \
101 bash_patches="$(debian_patches)" \
103 configure_args="$(conf_args)"
105 $(MAKE) -f debian/rules do-configure-bash \
107 bash_patches="$(debian_patches)" \
109 configure_args="$(conf_args)"
111 # ---------------------------------------------------------------------------
115 $(MAKE) -f debian/rules do-build-static \
117 bash_patches="$(debian_patches)" \
119 configure_args="$(static_conf_args)"
121 $(MAKE) -f debian/rules do-configure-static \
123 bash_patches="$(debian_patches)" \
125 configure_args="$(static_conf_args)"
127 # ---------------------------------------------------------------------------
129 bash-doc-build: stamps/stamp-build-bash-doc
130 stamps/stamp-build-bash-doc:
131 ifeq ($(with_gfdl),yes)
132 rm -f bash/doc/bashref.info
133 $(MAKE) -C build-bash/doc bashref.info bashref.pdf
135 $(MAKE) -C build-bash/doc bash.html bash.pdf
136 touch stamps/stamp-build-bash-doc
138 # ---------------------------------------------------------------------------
140 check: stamps/stamp-check
141 stamps/stamp-check: bash-build
143 ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
144 ifeq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS)))
145 -sh debian/locale-gen
146 LOCPATH=$(CURDIR)/locales \
147 time $(MAKE) -C build-bash test 2>&1 | tee build-bash/test-protocol
150 @echo Suppress 'make' test, because this is cross build
153 touch stamps/stamp-check
155 # ---------------------------------------------------------------------------
160 rm -rf stamps build-* bash
161 rm -f debian/bash.preinst debian/*.o
162 rm -f debian/README.Debian
165 rm -f debian/patches/series
169 preinst-build: debian/bash.preinst
172 ifneq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
176 PREINST_OBJECTS = debian/bash.preinst.o debian/bash.preinst-lib.o
178 $(PREINST_OBJECTS): %.o: %.c debian/bash.preinst.h
179 $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) $<
181 debian/bash.preinst: $(PREINST_OBJECTS)
182 $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(PREINST_OBJECTS)
183 $(STRIP) -R .comment -R .note debian/bash.preinst
185 # ---------------------------------------------------------------------------
188 install: bash-install
190 bash-install: bash-build stamps/stamp-install-bash
191 stamps/stamp-install-bash: before-build stamps/stamp-build-bash
194 dh_clean -k -p$(p) -p$(p_doc) -p$(p_bins)
195 dh_installdirs -p$(p) \
199 dh_installdirs -p$(p_doc) \
201 dh_installdirs -p$(p_bins) \
202 usr/share/doc/$(p)/examples/loadables \
203 usr/include/bash/{builtins,lib/{glob,tilde}}
205 ifeq ($(with_gfdl),yes)
207 cp -p build-bash/doc/*.info bash/doc/
211 $(MAKE) -C build-bash install \
213 DESTDIR=$(CURDIR)/$(d)
214 mv $(d)/usr/bin/bash $(d)/bin/.
215 chmod 755 $(d)/usr/bin/bashbug
216 $(ID) debian/bashbug.1 $(d)/usr/share/man/man1/
217 ifneq ($(with_gfdl),yes)
218 mkdir -p $(d)/usr/share/man/man1
219 cp -p bash/doc/bash.1 $(d)/usr/share/man/man1/bash.1
223 ln -sf bash $(d)/bin/rbash
226 $(ID) debian/etc.bash.bashrc $(d)/etc/bash.bashrc
227 $(ID) debian/skel.bashrc $(d)/etc/skel/.bashrc
228 $(ID) debian/skel.profile $(d)/etc/skel/.profile
229 $(ID) debian/skel.bash_logout $(d)/etc/skel/.bash_logout
232 ifneq (,$(findstring $(DEB_HOST_ARCH_OS), linux freebsd))
233 $(IX) clear_console $(d)/usr/bin/
234 $(ID) debian/clear_console.1 $(d)/usr/share/man/man1/
237 ifeq ($(with_gfdl),yes)
238 : # files for the bash-doc package
239 mv $(d)/usr/share/info/bash.info $(d)/usr/share/info/bashref.info
240 ln -sf bashref.info $(d)/usr/share/info/bash.info
241 mv $(d)/usr/share/info $(d_doc)/usr/share/
243 rm -rf $(d)/usr/share/info
246 dh_installexamples -p$(p_doc) bash/examples/*
247 mv $(d_doc)/usr/share/doc/$(p_doc)/examples \
248 $(d_doc)/usr/share/doc/$(p)/examples
249 rm -rf $(d_doc)/usr/share/doc/$(p)/examples/loadables
250 ln -sf ../$(p)/examples $(d_doc)/usr/share/doc/$(p_doc)/examples
252 rm -rf $(d_doc)/usr/share/doc/$(p)/examples/obashdb
253 cd $(d_doc)/usr/share/doc/$(p)/examples && chmod 755 \
254 misc/aliasconv.*sh misc/cshtobash
256 cd $(d_doc)/usr/share/doc/$(p)/examples && chmod 644 \
257 scripts/shprompt scripts/precedence \
258 scripts/bcsh.sh scripts/krand.bash
260 : # files for the bash-builtins package
261 $(ID) bash/include/*.h bash/*.h $(d_bins)/usr/include/bash/
262 $(ID) build-bash/*.h $(d_bins)/usr/include/bash/
263 rm -f $(d_bins)/usr/include/bash/y.tab.h
264 $(ID) bash/builtins/*.h $(d_bins)/usr/include/bash/builtins/
265 $(ID) bash/lib/glob/*.h $(d_bins)/usr/include/bash/lib/glob/
266 $(ID) bash/lib/tilde/*.h $(d_bins)/usr/include/bash/lib/tilde/
267 $(ID) bash/examples/loadables/{README,*.c} \
268 $(d_bins)/usr/share/doc/$(p)/examples/loadables
269 $(ID) build-bash/examples/loadables/Makefile \
270 $(d_bins)/usr/share/doc/$(p)/examples/loadables
271 ln -sf bash $(d_bins)/usr/share/doc/$(p_bins)
273 cat debian/README stamps/stamp-patch-bash > debian/README.Debian
275 touch stamps/stamp-install-bash
277 binary-doc: bash-install bash-doc-build
280 mkdir -p $(d_doc)/usr/share/doc/$(p)
281 ifeq ($(with_gfdl),yes)
282 dh_installdocs -p$(p_doc)
283 cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
285 /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
287 dh_installdocs -p$(p_doc) -X.doc-base
288 rm -f $(d_doc)/usr/share/doc-base/bashref
290 rm -f $(d_doc)/usr/share/info/dir*
291 cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
292 $(d_doc)/usr/share/doc/$(p)/
294 /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
295 /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
296 dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
297 dh_compress -p$(p_doc) -Xexamples -X.pdf
298 dh_fixperms -p$(p_doc)
299 dh_installdeb -p$(p_doc)
300 dh_gencontrol -p$(p_doc)
301 dh_md5sums -p$(p_doc)
302 dh_builddeb -p$(p_doc)
304 binary-bash: bash-install debian/bash.preinst
307 dh_installchangelogs -p$(p)
308 dh_installdocs -p$(p) \
309 bash/{CHANGES,NEWS,COMPAT,doc/INTRO,POSIX} \
310 debian/{README.Debian,README.abs-guide,README.commands} \
311 debian/inputrc.arrows
312 ifeq ($(with_gfdl),yes)
313 cp -p bash/doc/FAQ $(d)/usr/share/doc/$(p)/.
315 cp -p debian/FAQ $(d)/usr/share/doc/$(p)/.
317 install -D -m 644 debian/bash.overrides \
318 debian/bash/usr/share/lintian/overrides/bash
319 dh_installman -p$(p) bash/doc/rbash.1 debian/bash-builtins.7
320 dh_installmenu -p$(p)
324 dh_shlibdeps -p$(p) -- -dPre-Depends $(d)/bin/bash debian/bash.preinst
330 # Even though it contains only headers and example files,
331 # bash-builtins is NOT arch-independent because the config.h* files
332 # differ on different archs.
333 binary-builtins: bash-install
336 dh_compress -p$(p_bins) -Xexamples
337 dh_fixperms -p$(p_bins)
338 dh_installdeb -p$(p_bins)
339 dh_gencontrol -p$(p_bins)
340 dh_md5sums -p$(p_bins)
341 dh_builddeb -p$(p_bins)
343 binary-static: static-build
346 dh_clean -k -p$(p_stat)
347 dh_installdirs -p$(p_stat) \
350 cp -p build-static/bash $(d_stat)/bin/bash-static
351 cp -p bash/doc/bash.1 $(d_stat)/usr/share/man/man1/bash-static.1
352 dh_installdocs -p$(p_stat)
353 dh_installchangelogs -p$(p_stat)
354 install -D -m 644 debian/bash-static.overrides \
355 debian/bash-static/usr/share/lintian/overrides/bash-static
357 dh_compress -p$(p_stat)
358 dh_fixperms -p$(p_stat)
359 dh_installdeb -p$(p_stat)
360 dh_gencontrol -p$(p_stat)
361 dh_md5sums -p$(p_stat)
362 dh_builddeb -p$(p_stat)
364 binary-indep: binary-doc
365 binary-arch: binary-bash binary-builtins binary-static
366 binary: binary-indep binary-arch
368 # ---------------------------------------------------------------------------
369 # common rules for all bash build variations
371 do-build-$(build): stamps/stamp-build-$(build)
372 stamps/stamp-build-$(build): stamps/stamp-configure-$(build)
374 ifneq (,$(profiled_build))
375 $(MAKE) -C build-$(build) \
376 CFLAGS='$(CFLAGS) -fprofile-generate' \
378 TERMCAP_LIB="$(termcap_lib)" \
379 deb_builddir=build-$(build)/ \
381 -sh debian/locale-gen
382 cp debian/run-my-gprof bash/tests/
383 LOCPATH=$(CURDIR)/locales \
384 time $(MAKE) -C build-$(build) TESTSCRIPT=run-my-gprof test 2>&1 \
385 | tee build-bash/profile-protocol
386 $(MAKE) -C build-$(build) clean
387 rm -f build-$(build)/lib/malloc/malloc*.gc??
388 $(MAKE) -C build-$(build) \
389 CFLAGS='$(CFLAGS) -fprofile-use' \
391 TERMCAP_LIB="$(termcap_lib)" \
392 deb_builddir=build-$(build)/ \
395 $(MAKE) -C build-$(build) \
397 TERMCAP_LIB="$(termcap_lib)" \
398 deb_builddir=build-$(build)/ \
401 ifeq ($(with_gfdl),yes)
402 $(MAKE) -C build-$(build)/doc \
405 touch stamps/stamp-build-$(build)
407 do-configure-$(build): stamps/stamp-configure-$(build)
408 stamps/stamp-configure-$(build): stamps/stamp-patch-$(bash_src)
410 rm -rf build-$(build)
412 cd build-$(build) && \
414 CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \
416 ../$(bash_src)/configure $(configure_args)
417 if ! grep -q '#define HAVE_DEV_STDIN 1' build-$(build)/config.h; then \
418 echo "HAVE_DEV_STDIN not defined, abortig build"; \
421 touch stamps/stamp-configure-$(build)
423 patchdir = debian/patches
425 $(patchdir)/series: $(patchdir)/series.in
427 $(if $(filter no, $(with_gfdl)),,-DGFDL) \
428 -Darch_os_$(DEB_HOST_ARCH_OS) -Darch_$(DEB_HOST_ARCH) \
429 -o - $(patchdir)/series.in \
430 | egrep -v '^(#.*|$$)' > $(patchdir)/series
432 patch-$(bash_src): stamps/stamp-patch-$(bash_src)
433 stamps/stamp-patch-$(bash_src): $(patchdir)/series stamps/stamp-unpack-$(bash_src)
434 QUILT_PATCHES=$(patchdir) quilt push -a || test $$? = 2
436 echo ""; echo "Patches applied in this version:" > stamps/pxx
437 for i in $$(cat $(patchdir)/series); do \
438 echo ""; echo "$$i:"; \
439 sed -n 's/^# *DP: */ /p' $(patchdir)/$$i; \
443 reverse-patches: unpatch
445 QUILT_PATCHES=$(patchdir) quilt pop -a -R || test $$? = 2
446 rm -f stamps/stamp-patch $(patchdir)/series
447 rm -rf configure autom4te.cache
449 update-patches: $(patchdir)/series stamps/stamp-unpack-$(bash_src)
450 export QUILT_PATCHES=$(patchdir); \
451 export QUILT_REFRESH_ARGS="--no-timestamps --no-index -p ab"; \
452 export QUILT_DIFF_ARGS="--no-timestamps --no-index -p ab"; \
453 while quilt push; do quilt refresh; done
455 unpack-$(bash_src): stamps/stamp-unpack-$(bash_src)
456 stamps/stamp-unpack-$(bash_src):
458 rm -rf bash-$(VERSION) $(bash_src)
459 rm -f stamps/stamp-patch-$(bash_src){,-*}
460 tar xf bash-$(VERSION)*.tar.xz
461 mv bash-$(VERSION) $(bash_src)
463 cp -p /usr/share/misc/config.* $(bash_src)/.
464 cp -p /usr/share/misc/config.* $(bash_src)/support/.
465 touch stamps/stamp-unpack-$(bash_src)
467 .PHONY: unpack patch binary binary-arch binary-indep clean \
468 build bash-build static-build preinst-build \
470 bash-configure static-configure \
471 binary-doc binary-bash binary-builtins binary-static \