#!/usr/bin/make -f export DH_OPTIONS # Upstream handles the _FORTIFY_SOURCE flag on their own DEB_BUILD_MAINT_OPTIONS=hardening=+all,-fortify include /usr/share/dpkg/default.mk BUILDER := team+vim@tracker.debian.org MAKETEST := no ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) MAKETEST := yes endif endif ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) MAKEFLAGS += -j$(NUMJOBS) endif CFGFLAGS = --prefix=/usr --mandir='$${prefix}'/share/man --without-local-dir CFGFLAGS += --with-modified-by="$(BUILDER)" CFGFLAGS += --with-compiledby="$(BUILDER)" CFGFLAGS += --enable-fail-if-missing CFGFLAGS += --with-global-runtime='/etc/vim,$$VIM/vimfiles' TINYFLAGS:=--with-features=small TINYFLAGS+=--disable-gui TINYFLAGS+=--disable-xsmp TINYFLAGS+=--disable-xsmp-interact TINYFLAGS+=--disable-netbeans TINYFLAGS+=--disable-gpm TINYFLAGS+=--enable-nls TINYFLAGS+=--enable-acl TINYFLAGS+=--disable-terminal OPTFLAGS:=--enable-cscope ifeq ($(DEB_HOST_ARCH_OS),linux) OPTFLAGS+=--enable-gpm OPTFLAGS+=--enable-selinux --disable-smack TINYFLAGS+=--enable-selinux --disable-smack else OPTFLAGS+=--disable-gpm endif OPTFLAGS+=--with-features=huge OPTFLAGS+=--enable-acl OPTFLAGS+=--enable-terminal NOXFLAGS:=--without-x NOXFLAGS+=--enable-gui=no GUIFLAGS:=--with-x GUIFLAGS+=--enable-xim GTK2FLAGS:=--enable-gui=gtk2 GTK2FLAGS+=--enable-gtk2-check GTK2FLAGS+=--disable-gnome-check GTK2FLAGS+=--disable-motif-check GTK2FLAGS+=--disable-athena-check GTK2FLAGS+=--disable-fontset GTK3FLAGS:=--enable-gui=gtk3 GTK3FLAGS+=--enable-gtk3-check GTK3FLAGS+=--disable-gnome-check GTK3FLAGS+=--disable-motif-check GTK3FLAGS+=--disable-athena-check GTK3FLAGS+=--disable-fontset ATHENAFLAGS:=--enable-gui=athena ATHENAFLAGS+=--disable-gtk2-check ATHENAFLAGS+=--disable-gtk3-check ATHENAFLAGS+=--disable-gnome-check ATHENAFLAGS+=--disable-motif-check ATHENAFLAGS+=--enable-athena-check ATHENAFLAGS+=--enable-fontset NOINTERPFLAGS:=--disable-luainterp NOINTERPFLAGS+=--disable-mzschemeinterp NOINTERPFLAGS+=--disable-perlinterp ifeq ($(DEB_VENDOR),Ubuntu) NOINTERPFLAGS+=--enable-python3interp --with-python3-config-dir=$(shell python3-config --configdir) NOINTERPFLAGS+=--disable-pythoninterp GTK3FLAGS+=--disable-rubyinterp RUBY_SUBSTVARS= else NOINTERPFLAGS+=--disable-pythoninterp NOINTERPFLAGS+=--disable-python3interp RUBY_SUBSTVARS=-Vvim:Ruby-Provides=vim-ruby -Vvim:Ruby-Desc=" Ruby," endif NOINTERPFLAGS+=--disable-rubyinterp NOINTERPFLAGS+=--disable-tclinterp ALLINTERPFLAGS:=--enable-luainterp ALLINTERPFLAGS+=--disable-mzschemeinterp ALLINTERPFLAGS+=--enable-perlinterp ALLINTERPFLAGS+=--enable-python3interp --with-python3-config-dir=$(shell python3-config --configdir) ALLINTERPFLAGS+=--disable-pythoninterp ALLINTERPFLAGS+=--enable-rubyinterp ALLINTERPFLAGS+=--enable-tclinterp ALLINTERPFLAGS+=--with-tclsh=/usr/bin/tclsh # Each vim-xxx package is said to be a vim variant and contains only a vim # binary built with some compile-time options. Makefile VARIANTS below are # one-to-one with those packages with the exception of "vim-basic". In this # Makefile vim-basic is used to build 4 packages: "vim", "vim-runtime", # "vim-common", "vim-gui-common". "vim-tiny" is the only variant package not # depending on vim-runtime. VARIANTS+=vim-tiny VARIANTS+=vim-gtk VARIANTS+=vim-gtk3 VARIANTS+=vim-athena VARIANTS+=vim-nox VARIANTS+=vim-basic ifneq ($(origin VARIANT), undefined) VARIANTS = $(VARIANT) vim-basic endif CFLAGS_vim-basic:=$(CFLAGS) CFGFLAGS_vim-basic:=$(CFGFLAGS) $(OPTFLAGS) $(NOXFLAGS) $(NOINTERPFLAGS) CFLAGS_vim-tiny:=$(CFLAGS) -DTINY_VIMRC CFGFLAGS_vim-tiny:=$(CFGFLAGS) $(TINYFLAGS) CFLAGS_vim-gtk:=$(CFLAGS) CFGFLAGS_vim-gtk:=$(CFGFLAGS) $(OPTFLAGS) $(GUIFLAGS) $(GTK2FLAGS) $(ALLINTERPFLAGS) CFLAGS_vim-gtk3:=$(CFLAGS) CFGFLAGS_vim-gtk3:=$(CFGFLAGS) $(OPTFLAGS) $(GUIFLAGS) $(ALLINTERPFLAGS) $(GTK3FLAGS) CFLAGS_vim-athena:=$(CFLAGS) CFGFLAGS_vim-athena:=$(CFGFLAGS) $(OPTFLAGS) $(GUIFLAGS) $(ATHENAFLAGS) $(ALLINTERPFLAGS) CFLAGS_vim-nox:=$(CFLAGS) CFGFLAGS_vim-nox:=$(CFGFLAGS) $(OPTFLAGS) $(NOXFLAGS) $(ALLINTERPFLAGS) NAME:=vim # Convert x.y.z to x.y VERSION:=$(basename $(DEB_VERSION_UPSTREAM)) VIMCUR:=$(NAME)$(subst .,,$(VERSION)) PER_VARIANT_FILES := install postinst prerm lintian-overrides maintscript LANGS := da de fr it ja pl ru DOT_IN_DEPS := debian/vim-common.install DOT_IN_DEPS += debian/vim-runtime.links DOT_IN_DEPS += debian/vim-runtime.postrm DOT_IN_DEPS += debian/vim-runtime.preinst DOT_IN_DEPS += debian/runtime/debian.vim DOT_IN_DEPS_TINY := debian/tiny/vimrc.tiny # nothing to do per default all: update-changelog: dh_testdir wget -O debian/changelog.upstream http://ftp.vim.org/pub/vim/patches/$(VERSION)/README clean: $(foreach v,$(VARIANTS),clean-$(v)) dh_testdir dh_testroot [ ! -f src/auto/config.cache ] || make distclean [ ! -f debian/configure.dist ] || mv debian/configure.dist src/auto/configure find src/testdir -name '*.pyc' -delete dh_clean clean-vim-basic: dh_testdir dh_testroot for x in $(PER_VARIANT_FILES) ; do \ rm -f debian/vim.$$x ; \ done [ ! -L src/vim-basic/po ] || $(MAKE) -C src/vim-basic/po clean rm -f $(DOT_IN_DEPS) rm -rf src/vim-basic clean-%: SHADOWDIR=$* clean-%: dh_testdir dh_testroot for x in $(PER_VARIANT_FILES) ; do \ rm -f debian/$*.$$x ; \ done if [ "$*" = "vim-tiny" ]; then \ rm -f $(DOT_IN_DEPS_TINY); \ fi rm -rf src/$(SHADOWDIR) build: build-arch-stamp build-indep: build-indep-stamp build-indep-stamp: export DH_OPTIONS=-pvim-doc build-indep-stamp: autoconf-stamp dh_testdir dh_prep $(MAKE) -C runtime/doc html $(MAKE) -C debian/policy text html $(MAKE) -C src/po vim.pot touch $@ build-arch: build-arch-stamp build-arch-stamp: build-xxd-stamp $(foreach v,$(VARIANTS),build-$(v)-stamp) dh_testdir touch $@ build-xxd-stamp: export DH_OPTIONS=-pxxd build-xxd-stamp: build-vim-basic-stamp dh_testdir dh_prep $(MAKE) -C src/vim-basic xxd/xxd touch $@ autoconf-stamp: dh_testdir [ -f debian/configure.dist ] || cp src/auto/configure debian/configure.dist # src/Makefile includes src/auto/config.mk, so we need to ensure it exists. # distclean will then wipe it out and re-copy it. [ -f src/auto/config.mk ] || cp src/config.mk.dist src/auto/config.mk # The autoconf target generates a new configure, and touches some other # configure-related things. Need to run distclean afterward or timestamps # will be off and the next make that runs will think it needs to run # configure. This breaks parallel builds since two configures are being run # in the same directory at the same time instead of in their own shadow # directories. $(MAKE) -C src autoconf $(MAKE) -C src scratch touch $@ configure-%-stamp: SHADOWDIR=$* # When configure.in is being patched by Debian, autoconf-stamp needs to be a # prerequisite for this target and autoconf needs to be added to Build-Depends configure-%-stamp: autoconf-stamp dh_testdir @echo "*** DEBIAN *** CONFIGURING VARIANT $*" $(MAKE) -C src shadow SHADOWDIR=$(SHADOWDIR) cd src/$(SHADOWDIR) && LDFLAGS="$(LDFLAGS)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS_$(*))" ./configure $(CFGFLAGS_$(*)) touch $@ build-%-stamp: PKG=$(subst -basic,,$*) build-%-stamp: CURCFLAGS=$(CFLAGS_$*) build-%-stamp: SHADOWDIR=$* build-%-stamp: configure-%-stamp dh_testdir dh_prep -p $(PKG) @echo "*** DEBIAN *** BUILDING VARIANT $*" $(MAKE) -C src/$(SHADOWDIR) $(MAKE) -C runtime/doc tags VIMEXE=$(CURDIR)/src/$(SHADOWDIR)/vim # Ensure $TERM is set to a sane value for testing [ $(MAKETEST) != "yes" ] || env LANG=C.UTF-8 TERM=xterm $(MAKE) -j1 -C src/$(SHADOWDIR) test touch $@ install: install-xxd-stamp $(foreach v,$(VARIANTS),install-$(v)-stamp) # Use UTF-8 manpages for all languages # If a .UTF-8 directory doesn't exist, then the $L directory is already UTF-8. define munge-man-directories for L in $(LANGS); do \ if [ -d "$(DESTDIR)/usr/share/man/$$L.UTF-8" ]; then \ rm -rf "$(DESTDIR)/usr/share/man/$$L"; \ mv "$(DESTDIR)/usr/share/man/$$L.UTF-8" "$(DESTDIR)/usr/share/man/$$L"; \ fi; \ rm -rf "$(DESTDIR)/usr/share/man/$$L."*; \ done endef install-indep-stamp: export DH_OPTIONS=-i install-indep-stamp: DESTDIR=$(CURDIR)/debian/tmp install-indep-stamp: build-vim-basic-stamp build-indep-stamp $(DOT_IN_DEPS) dh_testdir dh_testroot dh_installdirs mkdir -p "$(DESTDIR)/usr/bin" # installruntime requires a "vim" in /usr/bin cp src/vim-basic/vim "$(DESTDIR)/usr/bin" $(MAKE) -C src/vim-basic "DESTDIR=$(DESTDIR)" \ installtutorbin \ installgtutorbin \ installruntime \ install-languages \ install-icons rm -f "$(DESTDIR)/usr/bin/vim" $(munge-man-directories) # rm stuff handled by alternatives or our own symlinks find "$(DESTDIR)/usr/share/man" \( -name view.1 -o -name ex.1 -o -name rvim.1 -o -name rview.1 \) -delete # helpztags manpage pod2man -c "User Commands" -s 1 -q none -r "vim $(VERSION)" \ -d "August 2010" debian/helpztags debian/helpztags.1 # Icons for sz in 16 32 48; do \ cp runtime/vim$${sz}x$${sz}.xpm debian/vim-common/usr/share/pixmaps/vim-$${sz}.xpm; \ done gs -sDefaultCMYKProfile=ps_cmyk.icc -sOutputICCProfile=ps_rgb.icc \ -dSAFER -dEPSCrop -dBATCH -dNOPAUSE \ -sDEVICE=ps2write -sOutputFile=debian/tmplogo.ps runtime/vimlogo.eps ps2pdf debian/tmplogo.ps debian/tmplogo.pdf pdf2svg debian/tmplogo.pdf debian/vim-common/usr/share/pixmaps/gvim.svg cp debian/vim-common/usr/share/pixmaps/gvim.svg \ debian/vim-common/usr/share/icons/hicolor/scalable/apps/gvim.svg dh_install # adjust things for vim-gui-common cp debian/vim-common/usr/share/man/man1/vim.1 \ debian/vim-gui-common/usr/share/man/man1/gvim.1 cp debian/vim-common/usr/share/man/man1/vimdiff.1 \ debian/vim-gui-common/usr/share/man/man1/gvimdiff.1 cp debian/vim-runtime/usr/share/man/man1/vimtutor.1 \ debian/vim-gui-common/usr/share/man/man1/gvimtutor.1 for L in $(LANGS); do \ DIR=usr/share/man/$$L; \ [ ! -e "debian/vim-common/$$DIR/man1/vim.1" ] || \ cp debian/vim-common/$$DIR/man1/vim.1 \ debian/vim-gui-common/$$DIR/man1/gvim.1; \ [ ! -e "debian/vim-common/$$DIR/man1/vimdiff.1" ] || \ cp debian/vim-common/$$DIR/man1/vimdiff.1 \ debian/vim-gui-common/$$DIR/man1/gvimdiff.1; \ [ ! -e "debian/vim-runtime/$$DIR/man1/vimtutor.1" ] || \ cp debian/vim-runtime/$$DIR/man1/vimtutor.1 \ debian/vim-gui-common/$$DIR/man1/gvimtutor.1; \ done dh_link dh_installman dh_installchangelogs debian/changelog.upstream dh_installdocs dh_installmime touch $@ install-xxd-stamp: export DH_OPTIONS=-pxxd install-xxd-stamp: DESTDIR=$(CURDIR)/debian/xxd install-xxd-stamp: build-xxd-stamp dh_testdir dh_testroot $(MAKE) -C src/vim-basic STRIP=: DESTDIR=$(DESTDIR) installtools install-tool-languages rm -r $(DESTDIR)/usr/share/vim $(munge-man-directories) # No xxd.1 translations for Danish or German yet rmdir $(DESTDIR)/usr/share/man/da/man1 $(DESTDIR)/usr/share/man/da \ $(DESTDIR)/usr/share/man/de/man1 $(DESTDIR)/usr/share/man/de dh_installchangelogs dh_installdocs touch $@ install-%-stamp: PKG=$(subst -basic,,$*) install-%-stamp: export DH_OPTIONS=-p$(PKG) install-%-stamp: DESTDIR=$(CURDIR)/debian/$(PKG) install-%-stamp: VARIANT=$(patsubst vim-%,%,$*) install-%-stamp: build-%-stamp dh_testdir dh_testroot @echo "*** DEBIAN *** INSTALLING VARIANT $*" dh_installdirs cp src/$*/vim src/$*/$(subst -,.,$*) # variant-related installations for x in $(PER_VARIANT_FILES) ; do \ case "$(PKG)" in \ vim-nox|vim|vim-tiny) \ sed -e "s:@PKG@:$(PKG):g" -e "s:@VARIANT@:$(VARIANT):g" \ -e "s:@COMMON@:vim-common:g" \ debian/vim-variant.$$x > debian/$(PKG).$$x ;\ ;; \ *) \ sed -e "s:@PKG@:$(PKG):g" -e "s:@VARIANT@:$(VARIANT):g" \ -e "s:@COMMON@:vim-gui-common:g" \ debian/vim-variant.$$x > debian/$(PKG).$$x ;\ ;; \ esac \ done for L in $(LANGS); do \ sed -e "s:\(.*\)@LANG_ALTS@:\1--slave \$$mandir/$$L/man1/\$$i.1.gz \$$i.$$L.1.gz \$$mandir/$$L/man1/vim.1.gz \\\\\n&:" \ -i debian/$(PKG).postinst; \ done sed -i "/@LANG_ALTS@/d" debian/$(PKG).postinst # fake help installation for vim-tiny if [ "$(PKG)" = "vim-tiny" ]; then \ $(MAKE) -f debian/rules $(DOT_IN_DEPS_TINY); \ echo "debian/tiny/doc/ usr/share/vim/$(VIMCUR)" >> debian/vim-tiny.install; \ echo "debian/tiny/vimrc.tiny etc/vim" >> debian/vim-tiny.install; \ fi dh_install dh_installchangelogs debian/changelog.upstream dh_installdocs dh_link dh_bugfiles -A touch $@ %: %.in cat $< | sed 's/@VIMCUR@/$(VIMCUR)/' > $@ binary-indep: export DH_OPTIONS=-i binary-indep: install-indep-stamp dh_testdir dh_testroot dh_compress dh_fixperms dh_lintian dh_installdeb dh_gencontrol dh_md5sums dh_builddeb binary-arch: binary-arch-xxd $(foreach v,$(VARIANTS),binary-arch-$(v)) binary-arch-%: PKG=$(subst -basic,,$*) binary-arch-%: export DH_OPTIONS=-p$(PKG) $(foreach v,$(VARIANTS_SKIP),-N$(v)) binary-arch-%: install-%-stamp dh_testdir dh_testroot dh_strip dh_compress dh_fixperms dh_lintian dh_installdeb dh_shlibdeps dh_gencontrol -- $(RUBY_SUBSTVARS) dh_md5sums dh_builddeb binary-arch-xxd: export DH_OPTIONS=-pxxd binary-arch-xxd: install-xxd-stamp dh_testdir dh_testroot dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: beginlog binary-indep binary-arch endlog .PHONY: patch unpatch extract clean build install binary-indep binary-arch binary .PHONY: beginlog endlog beginlog: @echo "*** DEBIAN *** BUILD STARTED" @echo "*** DEBIAN *** BUILDING VARIANTS: $(VARIANTS)" @echo "*** DEBIAN *** SKIPPING VARIANTS: $(VARIANTS_SKIP)" endlog: @echo "*** DEBIAN *** BUILD COMPLETED" .NOTPARALLEL: # vim: set foldmethod=marker: