#! /usr/bin/make -f # -*- makefile -*- #export DH_VERBOSE=1 unexport LANG LC_ALL LC_CTYPE LC_COLLATE LC_TIME LC_NUMERIC LC_MESSAGES # architecture dependent variables vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1))) DPKG_VARS := $(shell dpkg-architecture) DEB_BUILD_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE) DEB_HOST_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH) DEB_HOST_ARCH_OS ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH_OS) DEB_HOST_GNU_CPU ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_CPU) DEB_HOST_GNU_SYSTEM ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_SYSTEM) DEB_HOST_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE) DEB_HOST_MULTIARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH) VERSION := 4.2 #PKGVERSION := $(shell dpkg-parsechangelog \ # | sed -n '/Version:/s/\(.* \)\(.*\)-2\(.*\)/\2\3/p') #PKGVERSION := 3.0 #dpkg_ctrl_args := -v$(PKGVERSION) -VBinary-Version=$(PKGVERSION) with_gfdl = no ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) CC = $(DEB_HOST_GNU_TYPE)-gcc else CC = gcc endif dpkg_buildflags = DEB_CFLAGS_MAINT_APPEND=-Wall dpkg-buildflags CFLAGS := $(shell $(dpkg_buildflags) --get CFLAGS) CPPFLAGS := $(shell $(dpkg_buildflags) --get CPPFLAGS) LDFLAGS := $(shell $(dpkg_buildflags) --get LDFLAGS) SHELL = /bin/bash YACC = bison -y IX = install -o 0 -g 0 ID = install -o 0 -g 0 -m 644 # built with installed libreadline? with_installed_rl = no debflags = p = bash p_stat = bash-static p_bins = bash-builtins p_doc = bash-doc d = debian/$(p) d_stat = debian/$(p_stat) d_bins = debian/$(p_bins) d_doc = debian/$(p_doc) termcap_lib := $(if $(wildcard /usr/lib/libtinfo.so /usr/lib/$(DEB_HOST_MULTIARCH)/libtinfo.so), \ -ltinfo, \ -lncurses) conf_args = \ --with-curses \ --enable-largefile \ --prefix=/usr \ --infodir=/usr/share/info \ --mandir=/usr/share/man ifeq ($(with_installed_rl),yes) conf_args += --with-installed-readline endif ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) conf_args += --build $(DEB_HOST_GNU_TYPE) else conf_args += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) endif static_conf_args := $(conf_args) \ --enable-static-link \ --without-bash-malloc \ #build: bash-build static-build preinst-build check build: before-build bash-build static-build preinst-build check build-arch: build build-indep: build before-build: : # see #327477, needed to have HAVE_DEV_STDIN defined (test -d /dev/fd && test -r /dev/stdin < /dev/null) \ || (test -d /proc/self/fd && test -r /dev/stdin < /dev/null) ifneq (,$(findstring $(DEB_HOST_ARCH_OS), linux freebsd)) $(CC) $(CFLAGS) $(LDFLAGS) $(CPPFLAGS) -o clear_console \ debian/clear_console.c $(termcap_lib) endif # --------------------------------------------------------------------------- # build standard bash bash-build: $(MAKE) -f debian/rules do-build-bash \ bash_src=bash \ bash_patches="$(debian_patches)" \ build=bash \ configure_args="$(conf_args)" bash-configure: $(MAKE) -f debian/rules do-configure-bash \ bash_src=bash \ bash_patches="$(debian_patches)" \ build=bash \ configure_args="$(conf_args)" # --------------------------------------------------------------------------- # build static bash static-build: $(MAKE) -f debian/rules do-build-static \ bash_src=bash \ bash_patches="$(debian_patches)" \ build=static \ configure_args="$(static_conf_args)" static-configure: $(MAKE) -f debian/rules do-configure-static \ bash_src=bash \ bash_patches="$(debian_patches)" \ build=static \ configure_args="$(static_conf_args)" # --------------------------------------------------------------------------- bash-doc-build: stamps/stamp-build-bash-doc stamps/stamp-build-bash-doc: ifeq ($(with_gfdl),yes) rm -f bash/doc/bashref.info $(MAKE) -C build-bash/doc bashref.info bashref.pdf endif $(MAKE) -C build-bash/doc bash.html bash.pdf touch stamps/stamp-build-bash-doc # --------------------------------------------------------------------------- check: stamps/stamp-check stamps/stamp-check: bash-build @echo BEGIN test ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) ifeq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS))) -sh debian/locale-gen LOCPATH=$(CURDIR)/locales \ time $(MAKE) -C build-bash test 2>&1 | tee build-bash/test-protocol endif else @echo Suppress 'make' test, because this is cross build endif @echo END test touch stamps/stamp-check # --------------------------------------------------------------------------- clean: dh_testdir dh_testroot rm -rf stamps build-* bash rm -f debian/bash.preinst debian/*.o rm -f debian/README.Debian rm -rf locales rm -f clear_console rm -f debian/patches/series rm -rf .pc dh_clean preinst-build: debian/bash.preinst STRIP = strip ifneq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) STRIP = : strip endif PREINST_OBJECTS = debian/bash.preinst.o debian/bash.preinst-lib.o $(PREINST_OBJECTS): %.o: %.c debian/bash.preinst.h $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) $< debian/bash.preinst: $(PREINST_OBJECTS) $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(PREINST_OBJECTS) $(STRIP) -R .comment -R .note debian/bash.preinst # --------------------------------------------------------------------------- install: bash-install bash-install: bash-build stamps/stamp-install-bash stamps/stamp-install-bash: before-build stamps/stamp-build-bash dh_testdir dh_testroot dh_clean -k -p$(p) -p$(p_doc) -p$(p_bins) dh_installdirs -p$(p) \ bin \ etc/skel \ usr/share/doc/$(p) dh_installdirs -p$(p_doc) \ usr/share/doc/$(p) dh_installdirs -p$(p_bins) \ usr/share/doc/$(p)/examples/loadables \ usr/include/bash/{builtins,lib/{glob,tilde}} ifeq ($(with_gfdl),yes) # XXXXX cp -p build-bash/doc/*.info bash/doc/ endif : # install it $(MAKE) -C build-bash install \ YACC="$(YACC)" \ DESTDIR=$(CURDIR)/$(d) mv $(d)/usr/bin/bash $(d)/bin/. chmod 755 $(d)/usr/bin/bashbug $(ID) debian/bashbug.1 $(d)/usr/share/man/man1/ ifneq ($(with_gfdl),yes) mkdir -p $(d)/usr/share/man/man1 cp -p bash/doc/bash.1 $(d)/usr/share/man/man1/bash.1 endif : # extra links ln -sf bash $(d)/bin/rbash : # skeleton files $(ID) debian/etc.bash.bashrc $(d)/etc/bash.bashrc $(ID) debian/skel.bashrc $(d)/etc/skel/.bashrc $(ID) debian/skel.profile $(d)/etc/skel/.profile $(ID) debian/skel.bash_logout $(d)/etc/skel/.bash_logout : # clean_console ifneq (,$(findstring $(DEB_HOST_ARCH_OS), linux freebsd)) $(IX) clear_console $(d)/usr/bin/ $(ID) debian/clear_console.1 $(d)/usr/share/man/man1/ endif ifeq ($(with_gfdl),yes) : # files for the bash-doc package mv $(d)/usr/share/info/bash.info $(d)/usr/share/info/bashref.info ln -sf bashref.info $(d)/usr/share/info/bash.info mv $(d)/usr/share/info $(d_doc)/usr/share/ else rm -rf $(d)/usr/share/info endif dh_installexamples -p$(p_doc) bash/examples/* mv $(d_doc)/usr/share/doc/$(p_doc)/examples \ $(d_doc)/usr/share/doc/$(p)/examples rm -rf $(d_doc)/usr/share/doc/$(p)/examples/loadables ln -sf ../$(p)/examples $(d_doc)/usr/share/doc/$(p_doc)/examples rm -rf $(d_doc)/usr/share/doc/$(p)/examples/obashdb cd $(d_doc)/usr/share/doc/$(p)/examples && chmod 755 \ misc/aliasconv.*sh misc/cshtobash cd $(d_doc)/usr/share/doc/$(p)/examples && chmod 644 \ scripts/shprompt scripts/precedence \ scripts/bcsh.sh scripts/krand.bash : # files for the bash-builtins package $(ID) bash/include/*.h bash/*.h $(d_bins)/usr/include/bash/ $(ID) build-bash/*.h $(d_bins)/usr/include/bash/ rm -f $(d_bins)/usr/include/bash/y.tab.h $(ID) bash/builtins/*.h $(d_bins)/usr/include/bash/builtins/ $(ID) bash/lib/glob/*.h $(d_bins)/usr/include/bash/lib/glob/ $(ID) bash/lib/tilde/*.h $(d_bins)/usr/include/bash/lib/tilde/ $(ID) bash/examples/loadables/{README,*.c} \ $(d_bins)/usr/share/doc/$(p)/examples/loadables $(ID) build-bash/examples/loadables/Makefile \ $(d_bins)/usr/share/doc/$(p)/examples/loadables ln -sf bash $(d_bins)/usr/share/doc/$(p_bins) cat debian/README stamps/stamp-patch-bash > debian/README.Debian touch stamps/stamp-install-bash binary-doc: bash-install bash-doc-build dh_testdir dh_testroot mkdir -p $(d_doc)/usr/share/doc/$(p) ifeq ($(with_gfdl),yes) dh_installdocs -p$(p_doc) cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/. dh_link -p$(p_doc) \ /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf else dh_installdocs -p$(p_doc) -X.doc-base rm -f $(d_doc)/usr/share/doc-base/bashref endif rm -f $(d_doc)/usr/share/info/dir* cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \ $(d_doc)/usr/share/doc/$(p)/ dh_link -p$(p_doc) \ /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \ /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf dh_installchangelogs -p$(p_doc) bash/CWRU/changelog dh_compress -p$(p_doc) -Xexamples -X.pdf dh_fixperms -p$(p_doc) dh_installdeb -p$(p_doc) dh_gencontrol -p$(p_doc) dh_md5sums -p$(p_doc) dh_builddeb -p$(p_doc) binary-bash: bash-install debian/bash.preinst dh_testdir dh_testroot dh_installchangelogs -p$(p) dh_installdocs -p$(p) \ bash/{CHANGES,NEWS,COMPAT,doc/INTRO,POSIX} \ debian/{README.Debian,README.abs-guide,README.commands} \ debian/inputrc.arrows ifeq ($(with_gfdl),yes) cp -p bash/doc/FAQ $(d)/usr/share/doc/$(p)/. else cp -p debian/FAQ $(d)/usr/share/doc/$(p)/. endif install -D -m 644 debian/bash.overrides \ debian/bash/usr/share/lintian/overrides/bash dh_installman -p$(p) bash/doc/rbash.1 debian/bash-builtins.7 dh_installmenu -p$(p) dh_strip -p$(p) dh_compress -p$(p) dh_fixperms -p$(p) dh_shlibdeps -p$(p) -- -dPre-Depends $(d)/bin/bash debian/bash.preinst dh_installdeb -p$(p) dh_gencontrol -p$(p) dh_md5sums -p$(p) dh_builddeb -p$(p) # Even though it contains only headers and example files, # bash-builtins is NOT arch-independent because the config.h* files # differ on different archs. binary-builtins: bash-install dh_testdir dh_testroot dh_compress -p$(p_bins) -Xexamples dh_fixperms -p$(p_bins) dh_installdeb -p$(p_bins) dh_gencontrol -p$(p_bins) dh_md5sums -p$(p_bins) dh_builddeb -p$(p_bins) binary-static: static-build dh_testdir dh_testroot dh_clean -k -p$(p_stat) dh_installdirs -p$(p_stat) \ bin \ usr/share/man/man1 cp -p build-static/bash $(d_stat)/bin/bash-static cp -p bash/doc/bash.1 $(d_stat)/usr/share/man/man1/bash-static.1 dh_installdocs -p$(p_stat) dh_installchangelogs -p$(p_stat) install -D -m 644 debian/bash-static.overrides \ debian/bash-static/usr/share/lintian/overrides/bash-static dh_strip -p$(p_stat) dh_compress -p$(p_stat) dh_fixperms -p$(p_stat) dh_installdeb -p$(p_stat) dh_gencontrol -p$(p_stat) dh_md5sums -p$(p_stat) dh_builddeb -p$(p_stat) binary-indep: binary-doc binary-arch: binary-bash binary-builtins binary-static binary: binary-indep binary-arch # --------------------------------------------------------------------------- # common rules for all bash build variations do-build-$(build): stamps/stamp-build-$(build) stamps/stamp-build-$(build): stamps/stamp-configure-$(build) dh_testdir ifneq (,$(profiled_build)) $(MAKE) -C build-$(build) \ CFLAGS='$(CFLAGS) -fprofile-generate' \ YACC="$(YACC)" \ TERMCAP_LIB="$(termcap_lib)" \ deb_builddir=build-$(build)/ \ $(debflags) -sh debian/locale-gen cp debian/run-my-gprof bash/tests/ LOCPATH=$(CURDIR)/locales \ time $(MAKE) -C build-$(build) TESTSCRIPT=run-my-gprof test 2>&1 \ | tee build-bash/profile-protocol $(MAKE) -C build-$(build) clean rm -f build-$(build)/lib/malloc/malloc*.gc?? $(MAKE) -C build-$(build) \ CFLAGS='$(CFLAGS) -fprofile-use' \ YACC="$(YACC)" \ TERMCAP_LIB="$(termcap_lib)" \ deb_builddir=build-$(build)/ \ $(debflags) else $(MAKE) -C build-$(build) \ YACC="$(YACC)" \ TERMCAP_LIB="$(termcap_lib)" \ deb_builddir=build-$(build)/ \ $(debflags) endif ifeq ($(with_gfdl),yes) $(MAKE) -C build-$(build)/doc \ bash.info endif touch stamps/stamp-build-$(build) do-configure-$(build): stamps/stamp-configure-$(build) stamps/stamp-configure-$(build): stamps/stamp-patch-$(bash_src) dh_testdir rm -rf build-$(build) mkdir build-$(build) cd build-$(build) && \ CC="$(CC)" \ CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \ YACC="$(YACC)" \ ../$(bash_src)/configure $(configure_args) if ! grep -q '#define HAVE_DEV_STDIN 1' build-$(build)/config.h; then \ echo "HAVE_DEV_STDIN not defined, abortig build"; \ exit 1; \ fi touch stamps/stamp-configure-$(build) patchdir = debian/patches $(patchdir)/series: $(patchdir)/series.in cpp -E \ $(if $(filter no, $(with_gfdl)),,-DGFDL) \ -Darch_os_$(DEB_HOST_ARCH_OS) -Darch_$(DEB_HOST_ARCH) \ -o - $(patchdir)/series.in \ | egrep -v '^(#.*|$$)' > $(patchdir)/series patch-$(bash_src): stamps/stamp-patch-$(bash_src) stamps/stamp-patch-$(bash_src): $(patchdir)/series stamps/stamp-unpack-$(bash_src) QUILT_PATCHES=$(patchdir) quilt push -a || test $$? = 2 mkdir -p stamps echo ""; echo "Patches applied in this version:" > stamps/pxx for i in $$(cat $(patchdir)/series); do \ echo ""; echo "$$i:"; \ sed -n 's/^# *DP: */ /p' $(patchdir)/$$i; \ done >> stamps/pxx mv stamps/pxx $@ reverse-patches: unpatch unpatch: QUILT_PATCHES=$(patchdir) quilt pop -a -R || test $$? = 2 rm -f stamps/stamp-patch $(patchdir)/series rm -rf configure autom4te.cache update-patches: $(patchdir)/series stamps/stamp-unpack-$(bash_src) export QUILT_PATCHES=$(patchdir); \ export QUILT_REFRESH_ARGS="--no-timestamps --no-index -p ab"; \ export QUILT_DIFF_ARGS="--no-timestamps --no-index -p ab"; \ while quilt push; do quilt refresh; done unpack-$(bash_src): stamps/stamp-unpack-$(bash_src) stamps/stamp-unpack-$(bash_src): mkdir -p stamps rm -rf bash-$(VERSION) $(bash_src) rm -f stamps/stamp-patch-$(bash_src){,-*} tar xf bash-$(VERSION)*.tar.xz mv bash-$(VERSION) $(bash_src) rm -f bash/y.tab.? cp -p /usr/share/misc/config.* $(bash_src)/. cp -p /usr/share/misc/config.* $(bash_src)/support/. touch stamps/stamp-unpack-$(bash_src) .PHONY: unpack patch binary binary-arch binary-indep clean \ build bash-build static-build preinst-build \ check \ bash-configure static-configure \ binary-doc binary-bash binary-builtins binary-static \ install bash-install # Local Variables: # mode: makefile # end: