# Makefile for MH-E.

# Copyright (C) 2003, 2004, 2005 Bill Wohler

# This file is part of MH-E.

# MH-E 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 2, or (at your option)
# any later version.

# MH-E 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 MH-E; see the file COPYING.  If not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

#
# Note: most changes to this file should also be mirrored in the Makefiles in
# $(TOP)/doc and $(TOP)/contrib.
#
TOP		= ..

EMACSCVSROOT	= savannah.gnu.org:/cvsroot/emacs

EMACS		= emacs

EMACS_OPTIONS   = --batch --no-site-file --multibyte \
	--eval "(setq load-path (cons \".\" load-path))"

EMACS_LOADDEFS_COOKIE = --eval "(setq generate-autoload-cookie \";;;\#\#\#mh-autoload\")"

EMACS_EXPORT_MH_LOADDEFS = \
	--eval "(setq generated-autoload-file (expand-file-name \"emacs/lisp/mh-e/mh-loaddefs.el\"))" \
	--eval "(setq make-backup-files nil)" \
	-f batch-update-autoloads emacs/lisp/mh-e

COMPILE_COMMAND	= $(EMACS) $(EMACS_OPTIONS)

# XEmacs variables.
XEMACS_OPTIONS  = --batch --no-autoloads --eval \("push default-directory load-path"\)

AUTOLOAD_PACKAGE_NAME = (setq autoload-package-name \"mh-e\")
AUTOLOAD_FILE = (setq generated-autoload-file \"./auto-autoloads.el\")

XEMACS_EXPORT_MH_LOADDEFS = \
	--eval "(update-autoload-files \"emacs/lisp/mh-e\" \"mh-loaddefs\" \"emacs/lisp/mh-e/mh-loaddefs.el\")"

# MH-E source.
MH_E_SRC =				\
        emacs/lisp/mh-e/mh-acros.el	\
        emacs/lisp/mh-e/mh-alias.el	\
        emacs/lisp/mh-e/mh-comp.el	\
        emacs/lisp/mh-e/mh-customize.el	\
        emacs/lisp/mh-e/mh-e.el		\
        emacs/lisp/mh-e/mh-funcs.el	\
        emacs/lisp/mh-e/mh-mime.el	\
        emacs/lisp/mh-e/mh-pick.el	\
        emacs/lisp/mh-e/mh-print.el	\
        emacs/lisp/mh-e/mh-inc.el	\
        emacs/lisp/mh-e/mh-init.el	\
        emacs/lisp/mh-e/mh-index.el	\
        emacs/lisp/mh-e/mh-identity.el	\
        emacs/lisp/mh-e/mh-junk.el	\
        emacs/lisp/mh-e/mh-seq.el	\
        emacs/lisp/mh-e/mh-speed.el	\
        emacs/lisp/mh-e/mh-utils.el

MH_E_OBJ =  $(MH_E_SRC:.el=.elc)

MH_E_SRC_NONCOMPILED =			\
	emacs/lisp/mh-e/mh-gnus.el

MH_E_XEMACS_SRC =			\
	mh-xemacs.el

MH_E_XEMACS_OBJ =  $(MH_E_XEMACS_SRC:.el=.elc)

# Automatically generated files.
MH_E_LOADDEFS	=			\
        emacs/lisp/mh-e/mh-loaddefs.el

MH_E_LOADDEFS_SRC = $(MH_E_SRC)

MH_E_AUTOLOADS	=			\
        emacs/lisp/mh-e/mh-autoloads.el

MH_E_AUTOGEN	= 			\
	$(MH_E_AUTOLOADS)		\
	$(MH_E_LOADDEFS)

# MH-E images.
MH_E_IMG	=				\
	emacs/etc/images/execute.pbm		\
	emacs/etc/images/execute.xpm		\
	emacs/etc/images/highlight.pbm		\
	emacs/etc/images/highlight.xpm		\
	emacs/etc/images/mail/alias.pbm		\
	emacs/etc/images/mail/alias.xpm		\
	emacs/etc/images/mail/refile.pbm	\
	emacs/etc/images/mail/refile.xpm	\
	emacs/etc/images/mail/repack.pbm	\
	emacs/etc/images/mail/repack.xpm	\
	emacs/etc/images/mail/reply-all.pbm	\
	emacs/etc/images/mail/reply-all.xpm	\
	emacs/etc/images/mail/reply-from.pbm	\
	emacs/etc/images/mail/reply-from.xpm	\
	emacs/etc/images/mail/reply-to.pbm	\
	emacs/etc/images/mail/reply-to.xpm	\
	emacs/etc/images/mail/reply.pbm		\
	emacs/etc/images/mail/reply.xpm		\
	emacs/etc/images/mh-logo.xpm		\
	emacs/etc/images/page-down.pbm		\
	emacs/etc/images/page-down.xpm		\
	emacs/etc/images/refresh.pbm		\
	emacs/etc/images/refresh.xpm		\
	emacs/etc/images/show.pbm		\
	emacs/etc/images/show.xpm		\
	emacs/etc/images/widen.pbm		\
	emacs/etc/images/widen.xpm	

# Other MH-E files.
MH_E_ETC	=			\
	COPYING				\
	ChangeLog			\
	ChangeLog.1			\
	Makefile			\
	README				\
	emacs/etc/MH-E-NEWS		\
	emacs/lisp/mh-e/ChangeLog	\
	emacs/lisp/mh-e/ChangeLog.1

# MH-E maintainer files.
MH_E_MAINT	=			\
	.cvsignore			\
	emacs/lisp/mh-e/.cvsignore	\
	mh-unit.el			\
	release-utils

# MH-E files for distribution.
MH_E_DIST_NOAUTOGEN =			\
	$(MH_E_SRC)			\
	$(MH_E_SRC_NONCOMPILED)		\
	$(MH_E_XEMACS_SRC)		\
	$(MH_E_IMG)			\
	$(MH_E_ETC)

# MH-E files for distribution, including automatically generated files.
MH_E_DIST =				\
	$(MH_E_DIST_NOAUTOGEN)		\
	$(MH_E_AUTOGEN)

# All MH-E files, excluding automatically generated files.
MH_E_ALL =				\
	$(MH_E_DIST_NOAUTOGEN)		\
	$(MH_E_MAINT)

# Default target. Works for both Emacs and XEmacs.
all: emacs
	case $(EMACS) in \
	*xemacs*) \
	    $(MAKE) EMACS='$(EMACS)' \
		EMACS_OPTIONS='$(XEMACS_OPTIONS)' \
		EMACS_EXPORT_MH_LOADDEFS='$(XEMACS_EXPORT_MH_LOADDEFS)' \
		MH_E_LOADDEFS_SRC='$(MH_E_LOADDEFS_SRC) $(MH_E_XEMACS_SRC)' \
		xemacs ;;\
	*) \
	     $(MAKE) EMACS='$(EMACS)' \
		Emacs ;;\
	esac

# Check out emacs directory if necessary.
emacs:
	cvs -d $(USER)@$(EMACSCVSROOT) co emacs/lisp/mh-e
	cvs -d $(USER)@$(EMACSCVSROOT) co -l emacs/etc/MH-E-NEWS emacs/etc/NEWS emacs/etc/ChangeLog emacs/etc/images emacs/etc/images/mail

# The .PHONY targets are always considered to be out-of-date.
# This rule needs to be after the ``all'' rule for compatibility 
# with old versions of make.
.PHONY: all Emacs clean compile

# Ensure clean compile which is advised since old .elc files can
# interfere with the compilation process.
Emacs: clean autoloads compile

# Remove everything we make.
clean::
	rm -rf $(MH_E_OBJ) $(MH_E_AUTOGEN)

# Compile MH-E. See $EMACS_HOME/lisp/Makefile for commentary.
compile: $(MH_E_SRC)
	$(COMPILE_COMMAND) -f batch-byte-compile $?

# Automatically extract autoloads.
.PHONY: autoloads
autoloads: $(MH_E_LOADDEFS)
$(MH_E_LOADDEFS): $(MH_E_LOADDEFS_SRC)
	echo ";;; mh-loaddefs.el --- automatically extracted autoloads" > $@
	echo ";;" >> $@
	echo ";;; Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc." >> $@
	echo ";;; Author: Bill Wohler <wohler@newt.com>" >> $@
	echo ";;; Keywords: mail" >> $@
	echo ";;; Commentary:" >> $@
	echo ";;; Change Log:" >> $@
	echo ";;; Code:" >> $@
	$(COMPILE_COMMAND) \
		-l autoload \
		$(EMACS_LOADDEFS_COOKIE) \
		$(EMACS_EXPORT_MH_LOADDEFS)
	echo "" >> $@
	echo "(provide 'mh-loaddefs)" >> $@
	echo ";;; Local Variables:" >> $@
	echo ";;; version-control: never" >> $@
	echo ";;; no-byte-compile: t" >> $@
	echo ";;; no-update-autoloads: t" >> $@
	echo ";;; End:" >> $@
	echo ";;; mh-loaddefs.el ends here" >> $@

$(MH_E_AUTOLOADS): $(MH_E_SRC)
	echo ";;; mh-autoloads.el --- Automatically extracted external autoloads for MH-E" > $@
	echo ";;" >> $@
	echo ";;; Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc." >> $@
	echo ";;; Author: Bill Wohler <wohler@newt.com>" >> $@
	echo ";;; Keywords: mail" >> $@
	echo ";;; Commentary:" >> $@
	echo ";;" >> $@
	echo ";; If you installed MH-E separately from Emacs, you can set up its entry" >> $@
	echo ";; points using the following in your ~/.emacs file:" >> $@
	echo ";;" >> $@
	echo ";;  (require 'mh-autoloads)" >> $@
	echo ";;" >> $@
	echo ";;; Code:" >> $@
	$(COMPILE_COMMAND) -l autoload \
          --eval '(setq generated-autoload-file (expand-file-name "$(MH_E_AUTOLOADS)"))' \
          --eval '(setq make-backup-files nil)' \
         -f batch-update-autoloads emacs/lisp/mh-e
	echo "" >> $@
	echo "(provide 'mh-autoloads)" >> $@
	echo ";;; Local Variables:" >> $@
	echo ";;; version-control: never" >> $@
	echo ";;; no-byte-compile: t" >> $@
	echo ";;; no-update-autoloads: t" >> $@
	echo ";;; End:" >> $@
	echo ";;; mh-autoloads.el ends here" >> $@

# XEmacs targets.
.PHONY: xemacs clean-xemacs compile-xemacs
xemacs: clean clean-xemacs autoloads auto-autoloads.elc \
	custom-load.elc compile-xemacs

clean-xemacs:
	rm -rf $(MH_E_XEMACS_OBJ) auto-autoloads.el* custom-load.el* \
		mh-loaddefs.el*

auto-autoloads.elc: $(MH_E_SRC) $(MH_E_XEMACS_SRC)
	$(COMPILE_COMMAND) \
		-eval "$(AUTOLOAD_PACKAGE_NAME)" \
		-eval "$(AUTOLOAD_FILE)" \
		-l autoload -f batch-update-autoloads $^
	$(COMPILE_COMMAND) -l bytecomp \
		-f batch-byte-compile ./auto-autoloads.el

custom-load.elc:
	$(COMPILE_COMMAND) -l cus-dep \
		-f Custom-make-dependencies ./
	$(COMPILE_COMMAND) -l bytecomp \
		-f batch-byte-compile ./custom-load.el

compile-xemacs: $(MH_E_SRC) $(MH_E_XEMACS_SRC)
	$(COMPILE_COMMAND) -l bytecomp -f batch-byte-compile $^

#
# The following targets are only of interest to maintainers.
#
.PHONY: dist

# Tag the MH-E files that are checked out.
tag:
	@TAG=$(TAG) release-utils --tag $(MH_E_ALL)

# Create a distribution suitable for installing at SourceForge.
dist: all $(MH_E_AUTOLOADS)
	@release-utils --dist $(MH_E_DIST)

# The unit test that finds unused code runs much faster when compiled.
clean::
	rm -f mh-unit.elc

mh-unit.elc: mh-unit.el
	$(COMPILE_COMMAND) -f batch-byte-compile $?
