# Makefile for AUCTeX

# Maintainer: auctex-devel@gnu.org

# Copyright (C) 2003-2008, 2010, 2013-2015 Free Software
#   Foundation, Inc.

# This file is part of AUCTeX.

# AUCTeX is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.

# AUCTeX is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with AUCTeX; see the file COPYING.  If not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.

@SET_MAKE@

prefix = @prefix@$(null)
exec_prefix = @exec_prefix@$(null)
libdir = @libdir@$(null)
packagedatadir = @packagedatadir@$(null)
datarootdir = @datarootdir@$(null)
datadir = @datadir@$(null)
localstatedir = @localstatedir@$(null)
infodir = @infodir@$(null)
lispdir = @lispdir@$(null)
auctexstartfile=@auctexstartfile@
previewstartfile = @previewstartfile@
packagelispdir = @packagelispdir@$(null)
packagedatadir = @packagedatadir@$(null)
packagedir = @packagedir@$(null)
autodir = @autodir@$(null)
preview_enabled=@preview_enabled@
styledir = $(packagedatadir)/style
AUCTEXDATE = @AUCTEXDATE@
AUCTEXVERSION = @AUCTEXVERSION@

INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MKINSTALLDIRS = ./mkinstalldirs
DESTDIR=

PACKAGE=auctex
PACKAGE_INFO=auctex preview-latex
EMACS=@EMACS@
ELCC=$(EMACS) -batch -q -no-site-file -no-init-file -l lpath.el
AUTOLOAD=--eval '(let ((generated-autoload-file (expand-file-name "$@"))) \
  (mapcar (function update-file-autoloads) command-line-args-left) \
  (save-buffers-kill-emacs t))'

PREVIEW_AUTOLOAD=--eval '(let ((generated-autoload-file (expand-file-name "$@"))) \
		(update-file-autoloads "preview.el")(save-buffers-kill-emacs t))'

# Files and directories excluded from distributed tar ball.
EXCLUDEDFILES=autogen.sh .gitignore doc/.gitignore doc/tex-ref.log \
	latex/.gitignore README.GIT tests build-aux

.SUFFIXES: .el .elc .texi

SHELL = /bin/sh
CP = cp -p
CP_A = $(CP) -R

DIST_PREFIX=$(PWD)/auctex-dist
FTPDIR = $(DIST_PREFIX)/ftp
WWWDIR = $(DIST_PREFIX)/www
CTANDIR = $(DIST_PREFIX)/ctan
XEMACS_BUILD_DIR = xemacs-build
PREVIEW_BUILD_DIR = preview-build
COMMITTER="`git config --get user.name`\ \ \<`git config --get user.email`\>"
RPMROOT = /usr/src/redhat
RPM_SIGN = --sign

MULESRC = @MULESRC@
MULEELC = @MULEELC@

AUCSRC = tex.el tex-buf.el tex-style.el plain-tex.el latex.el tex-info.el \
	texmathp.el multi-prompt.el tex-mik.el font-latex.el tex-font.el \
	context.el context-en.el context-nl.el tex-fold.el \
	toolbar-x.el tex-bar.el bib-cite.el tex-ispell.el
AUCELC = $(AUCSRC:.el=.elc)

STYLESRC = style/prosper.el \
	   style/slides.el    style/foils.el     style/amstex.el \
	   style/article.el   style/book.el      style/letter.el \
	   style/report.el    style/amsart.el    style/amsbook.el \
	   style/epsf.el      style/psfig.el     style/latexinfo.el \
	   style/dutch.el     style/german.el    style/dk.el \
	   style/j-article.el style/j-book.el    style/j-report.el \
	   style/jarticle.el  style/jbook.el     style/jreport.el \
	   style/tarticle.el  style/tbook.el     style/treport.el \
	   style/jsarticle.el style/jsbook.el    style/jsreport.el \
	   style/dinbrief.el  style/virtex.el    style/plfonts.el \
	   style/plhb.el      style/harvard.el	 style/swedish.el \
	   style/danish.el    style/slovak.el    style/czech.el \
	   style/amsmath.el   style/amstext.el   style/amsbsy.el \
	   style/amsopn.el    style/amsthm.el	 style/natbib.el \
	   style/index.el     style/makeidx.el   style/multind.el \
	   style/varioref.el  style/fancyref.el	 style/mdwlist.el \
	   style/ngerman.el   style/graphicx.el	 style/graphics.el \
	   style/verbatim.el  style/scrbase.el   style/scrartcl.el \
	   style/scrbook.el   style/scrreprt.el	 style/scrlttr2.el \
	   style/scrpage2.el  style/captcont.el  style/subfigure.el \
	   style/paralist.el  style/booktabs.el  style/emp.el \
	   style/jura.el      style/alphanum.el	 style/beamer.el \
	   style/alltt.el     style/italian.el   style/doc.el \
	   style/ltxdoc.el    style/ltx-base.el	 style/units.el \
	   style/nicefrac.el  style/url.el       style/listings.el \
	   style/inputenc.el  style/frenchb.el   style/francais.el \
	   style/MinionPro.el style/pdfsync.el   style/polish.el \
	   style/polski.el    style/icelandic.el style/comment.el \
	   style/flashcards.el style/pstricks.el style/nomencl.el \
	   style/hyperref.el  style/bulgarian.el style/CJK.el \
	   style/ruby.el      style/CJKutf8.el   style/tabularx.el \
	   style/multido.el   style/pst-grad.el  style/pst-node.el \
	   style/pst-plot.el  style/pst-slpe.el  style/shortvrb.el \
	   style/austrian.el  style/naustrian.el style/french.el \
	   style/lettrine.el  style/multicol.el  style/xspace.el \
	   style/setspace.el  style/biblatex.el  style/siunitx.el \
	   style/bm.el        style/footmisc.el  style/ulem.el \
	   style/bigdelim.el  style/bigstrut.el  style/everysel.el \
	   style/mathtools.el style/ragged2e.el  style/amssymb.el \
	   style/lscape.el    style/epigraph.el  style/mflogo.el \
	   style/multirow.el  style/imakeidx.el  style/afterpage.el \
	   style/longtable.el style/lipsum.el    style/kantlipsum.el \
	   style/memoir.el    style/placeins.el  style/nameref.el \
	   style/fancynum.el  style/fancyhdr.el	 style/filecontents.el \
	   style/array.el     style/kpfonts.el   style/acro.el \
	   style/acronym.el   style/xparse.el    style/fancyvrb.el \
	   style/tabulary.el  style/fontspec.el  style/unicode-math.el \
	   style/luacode.el   style/metalogo.el  style/english.el \
	   style/exercise.el  style/plext.el     style/cleveref.el \
	   style/eso-pic.el   style/fontaxes.el  style/AnonymousPro.el \
	   style/mdsymbol.el  style/MyriadPro.el style/textcomp.el \
	   style/XCharter.el  style/zlmtt.el     style/ifluatex.el \
	   style/luatextra.el style/erewhon.el   style/baskervaldx.el \
	   style/fbb.el       style/newtxmath.el style/newtxsf.el \
	   style/newtxtext.el style/newtxttt.el  style/minted.el \
	   style/wrapfig.el   style/relsize.el   style/currvita.el \
	   style/tcolorbox.el style/color.el	 style/expl3.el \
	   style/bidibeamer.el style/enumitem.el style/caption.el \
	   style/geometry.el  style/ltablex.el   style/ltxtable.el \
	   style/mn2e.el      style/colortbl.el  style/attachfile.el \
	   style/newpxtext.el style/newpxmath.el style/pdfpages.el \
	   style/mnras.el     style/environ.el   style/polyglossia.el \
	   style/vwcol.el     style/textpos.el   style/transparent.el \
	   style/fontenc.el   style/Alegreya.el  style/gloss-italian.el \
	   style/newfloat.el  style/subcaption.el style/AlegreyaSans.el \
	   style/hologo.el    style/theorem.el   style/ntheorem.el \
	   style/splitidx.el  style/tikz.el      style/xcolor.el \
	   style/pdflscape.el style/commath.el   style/empheq.el \
	   style/framed.el    style/paracol.el   style/menukeys.el \
	   style/bidi.el      style/FiraMono.el  style/FiraSans.el \
	   style/bicaption.el style/amsfonts.el  style/subfiles.el \
	   style/dcolumn.el   style/mdframed.el  style/tcolorboxlib-raster.el \
	   style/titleps.el   style/titlesec.el  style/titletoc.el \
	   style/exam.el      style/breqn.el     style/sourcecodepro.el \
	   style/preview.el   style/fvextra.el   style/jurabib.el \
	   style/csquotes.el  style/babel.el     style/dk-bib.el \
	   style/floatrow.el  style/moodle.el    style/canadian.el \
	   style/arabxetex.el style/australian.el style/newzealand.el \
	   style/xltabular.el

STYLEELC = $(STYLESRC:.el=.elc)

ifeq (@preview_enabled@,yes)
   PREVIEWSRC = @PLAT_LISP@ preview.el
   PREVIEWELC = $(PREVIEWSRC:.el=.elc)
   PREVIEWLATEX = test "x$(packagedir)" != xno || $(MAKE) preview-latex.el
   TEXMF = (cd latex ; $(MAKE) all)

   # Install actions
   INS_TEXMF = (cd latex ; $(MAKE) DESTDIR=$(DESTDIR) install)
   PREVIEW_INS_STARTUP = test $(packagedir) != no || \
     $(INSTALL_DATA) preview-latex.el $(DESTDIR)$(previewstartfile)
else
   # Don't do anything with preview if the user doesn't want the
   # preview component.
   PREVIEWSRC =
   PREVIEWELC =
   PREVIEWLATEX =
   TEXMF =
   INS_TEXMF =
   PREVIEW_INS_STARTUP =
endif



CLEANFILES = $(AUCELC) $(STYLEELC) $(MULEELC) $(PREVIEWELC) preview-latex.el
DISTCLEANFILES = Makefile tex-site.el tex-site.el.out auctex.el \
	auto-loads.el config.* preview.el
DISTTEXTS = FAQ INSTALL INSTALL.windows README TODO PROBLEMS.preview

NOSEARCH = style/.nosearch

all: texmf lisp docs

.PHONY: all lisp info dvi some install install-el install-lisp docs	\
	install-docs install-auto install-metadata install-startup	\
	install-man clean distclean maintainer-clean extraclean		\
	tar-ball-clean check-tag check release-commit dist snapshot	\
	patch tar-ball rpm-packages wc xemacs-package windows-package	\
	release-sign release-upload preview-ball uninstall

texmf: latex/Makefile
	$(TEXMF)

lisp:	tex-site.el $(AUCSRC) $(STYLESRC) $(MULESRC) $(PREVIEWSRC)
	$(ELCC) -f batch-byte-compile $(AUCSRC) $(STYLESRC) $(MULESRC) $(PREVIEWSRC)
	$(PREVIEWLATEX)

preview-latex.el: preview.el
	rm -f preview-latex.el
	-$(EMACS) -batch -no-site-file -no-init-file $(PREVIEW_AUTOLOAD) ; \
	test -r $@ || { \
	  echo ";; Auto-generated preview-latex.el" > $@ ; \
	  echo "" >> $@ ; \
	  $(EMACS) -batch -no-site-file -no-init-file $(PREVIEW_AUTOLOAD) ; \
	}

docs:
	cd doc ; $(MAKE) all

info:
	cd doc ; $(MAKE) info

dvi:
	cd doc ; $(MAKE) dvi

tex-site.el: tex-site.el.out auto-loads.el Makefile
	cat tex-site.el.out >$@
	test X$(packagedir) != Xno || cat auto-loads.el >>$@
	echo "(provide 'tex-site)" >>$@ ; \
	test X$(packagedir) != Xno || echo ";;; tex-site.el ends here" >>$@

tex-site.el.out: tex-site.el.in Makefile config.status
	./config.status

auctex.el: auctex.el.in config.status
	./config.status

latex/Makefile: latex/Makefile.in Makefile config.status
	./config.status

configure: configure.ac aclocal.m4
	autoconf

Makefile: Makefile.in config.status
	./config.status

doc/Makefile: doc/Makefile.in config.status ChangeLog.1
	./config.status

config.status: configure
	./config.status --recheck

auto-loads.el: $(AUCSRC) $(MULESRC) Makefile
	test X$(packagedir) != Xno || { \
	  rm -f $@ ; \
	  $(ELCC) $(AUTOLOAD) $(AUCSRC) $(MULESRC) || : ; \
	  test -r $@ || { \
	    echo ";; Auto-generated part of tex-site.el" > $@ ; \
	    echo "" >> $@ ; \
	    $(ELCC) $(AUTOLOAD) $(AUCSRC) $(MULESRC) ; \
	  } ; \
	}

some:	$(AUCELC) $(STYLEELC)

install: install-texmf install-lisp install-docs install-images \
         install-startup
	$(MAKE) 'DESTDIR=$(DESTDIR)' install-metadata

install-man: doc/Makefile
	cd doc && $(MAKE) 'DESTDIR=$(DESTDIR)' install-man
	$(INSTALL_DATA) RELEASE $(DESTDIR)$(packagedir)/man/auctex

install-startup:
	$(PREVIEWLATEX)
	$(PREVIEW_INS_STARTUP)
	test $(packagedir) != no || \
	  $(INSTALL_DATA) auctex.el $(DESTDIR)$(auctexstartfile)

install-texmf:
	$(INS_TEXMF)

install-el:
	-$(MKINSTALLDIRS) $(DESTDIR)$(lispdir)
	rm -f $(DESTDIR)$(packagelispdir)/tex-site.el # Remove old (Git-version) mistakes
	test ! -f $(DESTDIR)$(lispdir)/tex-site.el || { \
	   if grep -q "tex-site.*Don't edit." $(DESTDIR)$(lispdir)/tex-site.el; then \
	    echo "Overwriting old tex-site.el" ; \
	   else \
	    echo "Renaming old tex-site.el to tex-site.el.save" ; \
	    mv $(DESTDIR)$(lispdir)/tex-site.el $(DESTDIR)$(lispdir)/tex-site.el.save ; \
	   fi; \
	}
	if test X$(packagedir) = Xno; \
	then $(INSTALL_DATA) tex-site.el $(DESTDIR)$(lispdir) ; \
	else rm -f $(DESTDIR)$(lispdir)/tex-site.el ; \
	fi
	-$(MKINSTALLDIRS) $(DESTDIR)$(packagelispdir)
	@: $(MAKE) ; for x in $(AUCSRC) $(MULESRC) $(PREVIEWSRC); do \
	  echo '$(INSTALL_DATA)' $$x '$(DESTDIR)$(packagelispdir)' ; \
	done
	@for x in $(AUCSRC) $(MULESRC) $(PREVIEWSRC); do \
	  $(INSTALL_DATA) $$x $(DESTDIR)$(packagelispdir) ; \
	done;
	-$(MKINSTALLDIRS) $(DESTDIR)$(styledir)
	$(INSTALL_DATA) $(NOSEARCH) $(DESTDIR)$(styledir)
	@: $(MAKE) ; for x in $(STYLESRC) ; do \
	  echo '$(INSTALL_DATA)' $$x '$(DESTDIR)$(styledir)' ; \
	done;
	@for x in $(STYLESRC) ; do \
	  $(INSTALL_DATA) $$x $(DESTDIR)$(styledir) ; \
	done;
	-$(MKINSTALLDIRS) $(DESTDIR)$(autodir)
	-$(INSTALL_DATA) $(NOSEARCH) $(DESTDIR)$(autodir)

install-lisp: some install-el
	@: $(MAKE) ; for x in $(AUCSRC) $(MULESRC) $(PREVIEWSRC); do \
	  echo '$(INSTALL_DATA)' $${x}c '$(DESTDIR)$(packagelispdir)' ; \
	done
	@for x in $(AUCSRC) $(MULESRC) $(PREVIEWSRC); do \
	  $(INSTALL_DATA) $${x}c $(DESTDIR)$(packagelispdir) ; \
	done
	@: $(MAKE) ; for x in $(STYLESRC) ; do \
	  echo '$(INSTALL_DATA)' $${x}c '$(DESTDIR)$(styledir)' ; \
	done
	@for x in $(STYLESRC) ; do \
	  $(INSTALL_DATA) $${x}c $(DESTDIR)$(styledir) ; \
	done

install-images:
	-$(MKINSTALLDIRS) $(DESTDIR)$(packagedatadir)/images
	@: $(MAKE) ; for x in images/*.xpm ; do \
	  echo '$(INSTALL_DATA)' $${x} '$(DESTDIR)$(packagedatadir)/images' ; \
	done
	@for x in images/*.xpm ; do \
	  $(INSTALL_DATA) $${x} $(DESTDIR)$(packagedatadir)/images ; \
	done

install-docs:	doc/Makefile
	cd doc ; $(MAKE) DESTDIR=$(DESTDIR) install-auctex
	test "x$(preview_enabled)" != xyes || { \
		cd doc ; $(MAKE) DESTDIR=$(DESTDIR) install-preview; }

install-auto:
	@echo "Use \"M-x TeX-auto-generate-global RET\" instead."

install-metadata:
	test "x$(packagedir)" = xno || { \
	  $(MKINSTALLDIRS) $(DESTDIR)$(packagedir)/pkginfo || : ; \
	  $(ELCC) -l prv-install -f preview-make-package $(DESTDIR)$(packagedir) "$(PACKAGE)" \"`echo $(AUCTEXDATE)|sed 's/\(.*\)-\(.*\)-\(.*\)/\1.\2\3/'`\" \"$(AUCTEXVERSION)\" tex-site.el && \
	  cd $(DESTDIR)$(packagedir) && \
	  find "etc/$(PACKAGE)" "lisp/$(PACKAGE)" -print >"pkginfo/MANIFEST.$(PACKAGE)" && \
	  for i in $(PACKAGE_INFO); do \
	    test -r "info/$$i.info" && echo "info/$$i.info" >> "pkginfo/MANIFEST.$(PACKAGE)" ; \
	  done && \
	  echo "pkginfo/MANIFEST.$(PACKAGE)" >> "pkginfo/MANIFEST.$(PACKAGE)" ; \
	}

uninstall:
	rm -rf $(DESTDIR)$(packagelispdir) $(DESTDIR)$(packagedatadir) \
		$(DESTDIR)$(autodir)
	if test X$(packagedir) = Xno ; then \
		rm -f $(DESTDIR)$(lispdir)/tex-site.el \
		$(DESTDIR)$(auctexstartfile) ; \
	else \
		rm -f $(DESTDIR)$(packagedir)/man/auctex/RELEASE \
		$(DESTDIR)$(packagedir)/pkginfo/MANIFEST.$(PACKAGE); \
	fi
	cd doc ; $(MAKE) DESTDIR=$(DESTDIR) uninstall
	rm -f $(DESTDIR)$(previewstartfile)
	rm -rf $(DESTDIR)$(packagelispdir)
	(cd latex ; $(MAKE) DESTDIR=$(DESTDIR) uninstall)

.el.elc:
	$(ELCC) -f batch-byte-compile $<

clean:	doc/Makefile
	rm -f $(CLEANFILES)
	cd doc && $(MAKE) clean

distclean: doc/Makefile
	rm -f $(CLEANFILES) $(DISTCLEANFILES)
	cd doc && $(MAKE) distclean

maintainer-clean: doc/Makefile
	rm -f $(DISTTEXTS)
	rm -rf autom4te.cache
	rm -f $(CLEANFILES) $(DISTCLEANFILES)
	cd doc && $(MAKE) maintainer-clean

extraclean: maintainer-clean
	rm -f *~ \#*\#

tar-ball-clean: check-tag
	rm -rf auctex-$(TAG)/
	rm -rf $(XEMACS_BUILD_DIR)/

wc:
	wc $(AUCSRC) $(STYLESRC)

# ----------------------------------------------------------------------
# The targets below update the ChangeLog from git log
# and are intended to be used only by the maintainers.
# These rules are adapted from GNU Emacs Makefile.

.PHONY: ChangeLog change-history change-history-commit change-history-nocommit
.PHONY: preferred-branch-is-current unchanged-history-files

CHANGELOG = ChangeLog
auctexlog = build-aux/gitlog-to-auctexlog
# The ChangeLog history files are called ChangeLog.1, ChangeLog.2, ...,
# ChangeLog.$(CHANGELOG_HISTORY_INDEX_MAX).  $(CHANGELOG_N) stands for
# the newest (highest-numbered) ChangeLog history file.
CHANGELOG_HISTORY_INDEX_MAX = 1
CHANGELOG_N = ChangeLog.$(CHANGELOG_HISTORY_INDEX_MAX)

# Check that we are in a good state for changing history.
PREFERRED_BRANCH = master
preferred-branch-is-current:
	git branch | grep -q '^\* $(PREFERRED_BRANCH)$$'
unchanged-history-files:
	x=$$(git diff-files --name-only $(CHANGELOG_N) $(auctexlog)) && \
	  test -z "$$x"

# Convert git commit log to ChangeLog file.  make-dist uses this.
# I guess this is PHONY so it always updates?
ChangeLog:
	  ./$(auctexlog) -o $(CHANGELOG) -n $(CHANGELOG_HISTORY_INDEX_MAX)

# Regular expression that matches the newest commit covered by a ChangeLog.
new_commit_regexp = ^commit [0123456789abcdef]* (inclusive)

# Copy newer commit messages to the start of the ChangeLog history file,
# and consider them to be older.
change-history-nocommit: #preferred-branch-is-current unchanged-history-files
	-rm -f ChangeLog.tmp
	$(MAKE) ChangeLog CHANGELOG=ChangeLog.tmp
	sed '/^This file records repository revisions/,$$d' \
	  ChangeLog.tmp > $(CHANGELOG_N).tmp
	new_commit_line=`grep --text '$(new_commit_regexp)' ChangeLog.tmp` && \
	sed 's/$(new_commit_regexp).*/'"$$new_commit_line/" \
	  $(CHANGELOG_N) >>$(CHANGELOG_N).tmp
	rm ChangeLog.tmp
	mv $(CHANGELOG_N).tmp $(CHANGELOG_N)

change-history: change-history-nocommit
	$(MAKE) $@-commit

# If 'make change-history' fails because the newest ChangeLog history
# file contains invalid text, fix the file by hand and then run
# 'make change-history-commit'.
change-history-commit:
	git commit -m'; make $@' $(CHANGELOG_N) $(auctexlog)

# ----------------------------------------------------------------------
# The targets below are concerned with the release process and
# intended to be used only by the maintainers.

# Steps for making a release:
#
# 0) check
#    Run tests using ERT tool.  Not necessary but strongly suggested before a
#    release.
#
# 1) change-history
#    Update the ChangeLog file.
#
# 2) release-commit TAG=<tag> COMMITTER=<committer>
#    Tag the release.
#    Pass `COMMITTER=<committer>' argument only if it is different from
#    your git name and email.  `<committer>' should be in the form
#        "John Doe  <john.doe@example.com>"
#
# 3) dist TAG=<tag>
#    Create the tar ball and other release files and put them into $FTPDIR.
#
# 4) xemacs-package TAG=<tag>
#    Create the precompiled XEmacs package.
#
# 5) windows-package WEMACSVER=<emacs-version> TAG=<tag>
#    Create the precompiled AUCTeX package for Windows.
#    This requires a compiled Emacs of the same version at location $WEMACS.
#    NOTA BENE: you may need to use bash shell for this recipe to work.
#
# 6) release-sign TAG=<tag>
#    Sign the tar ball and create directive files for upload.  NOTA BENE: you
#    may need to use bash shell for this recipe to work.
#
# 7) release-upload
#    Upload files to GNU FTP server.
#
# 8) www-doc TAG=<tag>
#    Create documentation for AUCTeX home page.
#
# 9) preview-ball TAG=<tag>
#    Create preview package.  (Not for GNU FTP server but for CTAN.)

dist: check-tag tar-ball

snapshot: dist

check-tag:
	@if [ "X$(TAG)" = "X" ]; then echo "*** Error: No TAG ***"; exit 1; fi

check:
	cd tests && $(MAKE) check

release-commit: check-tag
	@echo "Tagging release $(TAG) in Git ..."
	sleep 5
	mv $(CHANGELOG_N) ChangeLog.old
	mv ChangeLog-preview ChangeLog-preview.old
# Make sure the release ChangeLog entry is encoded with UTF-8.
# This requires the `iconv' program.
	echo `date "+%Y-%m-%d "`" ${COMMITTER}" | iconv -t UTF-8 - > $(CHANGELOG_N)
	echo >> $(CHANGELOG_N)
	echo "	* Version" $(TAG) released. >> $(CHANGELOG_N)
	echo >> $(CHANGELOG_N)
	cp $(CHANGELOG_N) ChangeLog-preview
	cat ChangeLog.old >> $(CHANGELOG_N)
	cat ChangeLog-preview.old >> ChangeLog-preview
	git commit -m '; Release_$(TAG)' -- $(CHANGELOG_N) ChangeLog-preview
	git tag release_`echo $(TAG) | sed -e 's/[.]/_/g'`
	@echo
	@echo "Congratulations!  Release $(TAG) of AUCTeX is ready."
	@echo "Please, remember to run"
	@echo "    git push --tags origin master"
	@echo "to propagate release commit and tag to the remote repository."

tar-ball: doc/Makefile
	test ! -d auctex-$(TAG) || rm -r auctex-$(TAG)
	mkdir auctex-$(TAG)
# Use TAG_EXPORT if set (for snapshots)
	git archive $${TAG_EXPORT:=`echo release_$(TAG) | sed 's/[.]/_/g'`} | tar -xC auctex-$(TAG)
	cd auctex-$(TAG) && AUCTEXVERSION=$(TAG) AUCTEXDATE=$(AUCTEXDATE) ./autogen.sh && rm -rf $(EXCLUDEDFILES)
	chmod -R go-w+rX auctex-$(TAG)
	rm -rf $(FTPDIR)
	mkdir -p $(FTPDIR)
	tar -cf - --owner=root --group=root auctex-$(TAG) | gzip --best > $(FTPDIR)/auctex-$(TAG).tar.gz
	-zip -r $(FTPDIR)/auctex-$(TAG).zip auctex-$(TAG)
	$(CP) auctex-$(TAG)/CHANGES $(FTPDIR)/CHANGES
	$(CP) auctex-$(TAG)/RELEASE $(FTPDIR)/RELEASE-$(TAG)
# The following files aren't produced in auctex-$(TAG) since they
# are not in the tarball and should not become part of the patch target.
	$(CP) auctex-$(TAG)/doc/version.texi doc/version.texi
	cd doc && $(MAKE) extradist
	rm -f doc/version.texi
	$(CP) doc/auctex.ps doc/auctex.pdf doc/tex-ref.ps doc/tex-ref.pdf $(FTPDIR)
	$(CP) $(CHANGELOG_N) $(FTPDIR)

rpm-packages:
	rpmbuild -ta $(RPM_SIGN) $(FTPDIR)/auctex-$(TAG).tar.gz
	$(CP) $(RPMROOT)/{RPMS/noarch/{auctex-emacs,preview-tetex},SRPMS/auctex}-$(TAG)[.-]* $(FTPDIR)
	@echo "If you need to prepare RPM on some other system, you need to add"
	@echo "them in $(FTPDIR) before 'make release-sign'."
	sleep 2

patch:
	diff -u auctex-$(OLD) auctex-$(TAG) | gzip --best \
		>$(FTPDIR)/auctex-$(OLD)-to-$(TAG).patch.gz

xemacs-package: check-tag
	rm -rf $(XEMACS_BUILD_DIR)
	$(CP_A) auctex-$(TAG) $(XEMACS_BUILD_DIR)
	cd $(XEMACS_BUILD_DIR) \
	&& ./configure INSTALL_INFO=: TEXHASH=: --with-xemacs --with-packagedir=`pwd`/xemacs-package --without-texmf-dir --with-auto-dir=etc/auctex/auto \
	&& $(MAKE) all install-man install && cd xemacs-package && tar -cf - --owner=root --group=root . | gzip --best > $(FTPDIR)/auctex-$(TAG)-pkg.tar.gz

# Pre-compiled AUCTeX package for Emacs on Windows
WBUILDDIR=$(PWD)/windows-package
WEMACS=/usr/src/emacs-$(WEMACSVER)/src/emacs
WPACKAGE=auctex-$(TAG)-e$(WEMACSVER)-msw.zip
# Starting from Emacs 24.4, the name of the Windows package and the tree
# structure of the package have been changed.  The following variables cater for
# these differences.
ifeq ($(shell echo "$(WEMACSVER)" | grep '\(2[2-3].[1-4]\|24.[1-3]\)' -),$(WEMACSVER))
	WEMACSDATAROOTDIR=""
	WEMACSEXTRACTDIR=""
	WEMACSPACKAGE="emacs-$(WEMACSVER)-bin-i386.zip"
	WEMACSSITELISP="site-lisp"
else
	WEMACSDATAROOTDIR="share/"
	WEMACSEXTRACTDIR="emacs-$(WEMACSVER)"
# And just to add more complexity, the package name changed again with Emacs
# 24.5.  Actually, we don't really need to keep track of all these changes as we
# should support only the latest Emacs version, but unless something else
# changes again again in the near future we can keep them (and it's useful to
# reproduce old AUCTeX packages!).
	ifeq (24.4,$(WEMACSVER))
		WEMACSPACKAGE="emacs-$(WEMACSVER)-bin-i686-pc-mingw32.zip"
	else
		WEMACSPACKAGE="emacs-$(WEMACSVER)-bin-i686-mingw32.zip"
	endif
	WEMACSSITELISP="$(WEMACSDATAROOTDIR)/emacs/site-lisp"
endif
WPACKAGEFILES=$(WEMACSSITELISP)/auctex $(WEMACSSITELISP)/site-start.d \
	$(WEMACSSITELISP)/site-start.el $(WEMACSSITELISP)/tex-site.el \
	var/auctex $(WEMACSDOC) $(WEMACSDATAROOTDIR)doc $(WEMACSDATAROOTDIR)info/dir \
	$(WEMACSDATAROOTDIR)info/auctex.info* $(WEMACSDATAROOTDIR)info/preview-latex.info*
windows-package: check-tag
	@if [ "X$(WEMACSVER)" = "X" ]; then \
	  echo "*** Error: No Emacs version (WEMACSVER) ***"; \
	  exit 1; \
	fi
# Make sure the prerequisites are available
	test -d $(WBUILDDIR) || mkdir $(WBUILDDIR)
	test -f $(WBUILDDIR)/$(WEMACSPACKAGE) \
	|| { cd $(WBUILDDIR) \
	&& wget http://ftp.gnu.org/gnu/emacs/windows/$(WEMACSPACKAGE); }
	test -f $(WBUILDDIR)/auctex-$(TAG).zip \
	|| { test -f $(FTPDIR)/auctex-$(TAG).zip \
	  && $(CP) $(FTPDIR)/auctex-$(TAG).zip $(WBUILDDIR); } \
	|| { cd $(WBUILDDIR) \
	  && wget http://ftp.gnu.org/gnu/auctex/auctex-$(TAG).zip; }
# Reset to clean state
	cd $(WBUILDDIR) \
	&& rm -rf emacs-$(WEMACSVER) \
	&& rm -rf auctex-$(TAG) \
	&& unzip -d "$(WEMACSEXTRACTDIR)" $(WEMACSPACKAGE) \
	&& unzip auctex-$(TAG).zip
	rm -f $(WPACKAGE)
# Create site-start.el and site-start.d
	cd $(WBUILDDIR)/emacs-$(WEMACSVER)/$(WEMACSSITELISP) \
	&& echo -e ";; Load files in \`site-start.d' directory.\
\n(dolist (file (directory-files\
\n	       (concat (file-name-directory load-file-name) \"site-start.d\")\
\n	       t \"\\\\\\\\.el\\\\\\\\'\"))\
\n  (load file nil t t))" > site-start.el \
	&& mkdir site-start.d
# Build and install AUCTeX
	cd $(WBUILDDIR)/auctex-$(TAG) \
	&& ./configure --prefix=$(WBUILDDIR)/emacs-$(WEMACSVER) \
	  --without-texmf-dir --with-emacs=$(WEMACS) \
	  --with-lispdir=$(WBUILDDIR)/emacs-$(WEMACSVER)/$(WEMACSSITELISP) \
	  --datarootdir=$(WBUILDDIR)/emacs-$(WEMACSVER)/$(WEMACSDATAROOTDIR) \
	&& $(MAKE) \
	&& sed -i -e 's/"\/[^\n]\+/(expand-file-name "..\/var\/auctex" (file-name-directory load-file-name))/' tex-site.el \
	&& $(MAKE) install
# Create the package
	test -d $(FTPDIR) || mkdir -p $(FTPDIR)
	rm -f $(FTPDIR)/$(WPACKAGE)
	cd $(WBUILDDIR)/emacs-$(WEMACSVER) \
	&& zip -r $(FTPDIR)/$(WPACKAGE) $(WPACKAGEFILES)

release-sign: check-tag
	rm -f $(FTPDIR)/*.{directive,asc,sig}
	if [ "x$$GPG_AGENT_INFO" = "x" ]; then \
	  read -sp "Enter pass phrase: " phrase ; \
	  gpg_opt="--passphrase-fd 0"; \
	else \
	  gpg_opt=""; phrase=""; \
	fi; \
	for i in $(FTPDIR)/*; do \
	   echo "$$phrase" | gpg --detach-sign $$gpg_opt $$i ; \
	   echo "version: 1.1" >$$i.directive; \
	   case $$i in *-$(TAG)*) echo "directory: auctex" >>$$i.directive;; \
	      *) echo "directory: auctex/$(TAG)-extra" >>$$i.directive ;; \
	   esac ; \
	   echo "filename: "`basename $$i` >>$$i.directive ; \
	   echo "$$phrase" | gpg $$gpg_opt --clearsign $$i.directive ; \
	done
	rm $(FTPDIR)/*.directive

release-upload:
	@echo "Uploading everything in FTPDIR to GNU FTP server ..."
	@sleep 5
	ncftpput ftp-upload.gnu.org /incoming/ftp $(FTPDIR)/*

# AUCTeX and preview-latex manuals for the home page
www-doc: check-tag
	rm -rf $(WWWDIR)
	mkdir -p $(WWWDIR)/manual
	$(CP) auctex-$(TAG)/doc/*.texi $(WWWDIR)/manual
	cd $(WWWDIR)/manual \
	&& wget -O gendocs.sh 'http://cvs.savannah.gnu.org/viewvc/%2acheckout%2a/texinfo/texinfo/util/gendocs.sh' \
	&& wget -O gendocs.sh.patch 'http://git.savannah.gnu.org/gitweb/?p=auctex.git;a=blob_plain;f=gendocs.sh.patch;hb=gendocspatch' \
	&& patch <gendocs.sh.patch \
	&& chmod u+x gendocs.sh \
	&& wget -O gendocs_template 'http://cvs.savannah.gnu.org/viewvc/%2acheckout%2a/texinfo/texinfo/util/gendocs_template' \
	&& sed -i -e 's/html_node\/index\.html/%%PACKAGE%%\/index.html/' gendocs_template \
	&& mkdir .texinfo \
	&& echo -e "emacs split http://www.gnu.org/software/emacs/manual/html_node/emacs/\nemacs mono http://www.gnu.org/software/emacs/manual/html_mono/emacs.html\nreftex split http://www.gnu.org/software/auctex/manual/reftex/\nreftex mono http://www.gnu.org/software/auctex/manual/reftex.html\n" > .texinfo/htmlxref.cnf \
	&& ./gendocs.sh --email bug-auctex@gnu.org --texi2html \
	  --html --use-nodes auctex "AUCTeX Manual" \
	&& ./gendocs.sh --email bug-auctex@gnu.org --texi2html \
	  --html --use-nodes preview-latex "preview-latex Manual"

preview-ball: check-tag
	test ! -d $(PREVIEW_BUILD_DIR) || rm -r $(PREVIEW_BUILD_DIR)
	mkdir $(PREVIEW_BUILD_DIR)
# Use TAG_EXPORT if set (for snapshots)
	git archive $${TAG_EXPORT:=`echo release_$(TAG) | sed 's/[.]/_/g'`} \
	  latex/ | tar -xC $(PREVIEW_BUILD_DIR) --strip-components=1
	cd $(PREVIEW_BUILD_DIR) && $(MAKE) -f ../latex/Makefile preview.ins preview.pdf
	chmod -R go-w+rX $(PREVIEW_BUILD_DIR)
	test -d $(CTANDIR) || mkdir -p $(CTANDIR)
# CTAN requires a top level directory "preview/" for the archive.
	cd $(PREVIEW_BUILD_DIR) && mkdir -p preview && \
	cp README preview.dtx preview.ins preview.pdf preview/ && \
	tar -cf - --owner=root --group=root preview/ | gzip --best > $(CTANDIR)/preview-$(TAG).tar.gz
