Source

xemacs-packages / iterate.rules

Full commit
# This file is part of XEmacs.

# Copyright (C) 2002, 2003 Ben Wing.

# XEmacs 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.

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

#
# This is used by subdirectories that directly contain packages.  Higher-level
# subdirectories should use meta-iterate.rules instead.
#

XEMACS_PACKAGES_BASE:= $(shell while [ ! -f XEmacs.rules ]; do \
				cd ..;	\
				done;	\
				pwd)

AUTOLOADS_TARGETS= $(PACKAGES:=/autoloads.target)
BYTECOMPILE_TARGETS= $(PACKAGES:=/bytecompile.target)
BINDIST_TARGETS= $(PACKAGES:=/bindist.target)
CLEAN_TARGETS= $(PACKAGES:=/clean.target)
DISTCLEAN_TARGETS= $(PACKAGES:=/distclean.target)
EXTRACLEAN_TARGETS= $(PACKAGES:=/extraclean.target)
ELCCLEAN_TARGETS= $(PACKAGES:=/elcclean.target)
HTML_TARGETS= $(PACKAGES:=/html.target)
INSTALL_TARGETS= $(PACKAGES:=/install.target)
INSTALL_HTML_TARGETS= $(PACKAGES:=/install-html.target)
INSTALL_ONLY_TARGETS= $(PACKAGES:=/install-only.target)

# Indicate which of the above need the pdepends to be built prior to doing
# the work of the target.
autoloads_NEED_PDEPENDS = t
bytecompile_NEED_PDEPENDS = t
all_NEED_PDEPENDS = t

# Make this the first target
all: autoloads bytecompile

ALL_TARGETS = \
	$(AUTOLOADS_TARGETS)  $(BYTECOMPILE_TARGETS) $(BINDIST_TARGETS) \
	$(CLEAN_TARGETS) $(DISTCLEAN_TARGETS) $(ELCCLEAN_TARGETS) \
	$(HTML_TARGETS) $(INSTALL_TARGETS) $(INSTALL_HTML_TARGETS) \
	$(INSTALL_ONLY_TARGETS)

.PHONY: $(ALL_TARGETS) autoloads bytecompile bindist clean \
	distclean elcclean html install install-html install-only

# Master rule to pass down actual building 
# Use a static pattern because of the extra dependencies
$(ALL_TARGETS) : %.target:
	[ -d $(*D) ] && $(MAKE) $(MFLAGS) -C $(*D) $(*F)

# Standard dependencies

# $(BYTECOMPILE_TARGETS): %bytecompile.target: %autoloads.target

# If bindist builds as well as installing
# $(BINDIST_TARGETS)= %bindist.target: %bytecompile.target %html.target

# Main driver rules

bytecompile:: $(BYTECOMPILE_TARGETS)

autoloads: $(AUTOLOADS_TARGETS)

bindist: $(BINDIST_TARGETS)

clean: $(CLEAN_TARGETS)

distclean: $(DISTCLEAN_TARGETS)

extraclean: $(EXTRACLEAN_TARGETS)

elcclean: $(ELCCLEAN_TARGETS)

html: $(HTML_TARGETS)

install: $(INSTALL_TARGETS)

install-html: $(INSTALL_HTML_TARGETS)

install-only: $(INSTALL_ONLY_TARGETS)

# Optionally put in fake rules for packages that we cannot
# recursively build (yet)
ifneq ($(strip (ASSUMED_PRESENT)),)
ASSUMED_TARGETS = $(foreach package,$(ASSUMED_PRESENT), \
			$(package)/autoloads.target \
			$(package)/compile.target )

$(ASSUMED_TARGETS):
	-
endif

# Generate and load inter-package dependencies

DEPENDS_FILE_NAME = pdepends.mk

DEPENDS_FILES = $(PACKAGES:=/$(DEPENDS_FILE_NAME))

$(DEPENDS_FILES): %$(DEPENDS_FILE_NAME): %Makefile $(XEMACS_PACKAGES_BASE)/XEmacs.rules
	$(MAKE) $(MFLAGS) -C $(*D) TARGET_BASE=$(dir $(*D)) \
		$(DEPENDS_FILE_NAME)

# Compute, based on the target given on the command line, whether we need
# to load and recompute the pdepends.mk files (this happens automatically
# for any Makefile loaded or executed, if the name of the file appears
# as a target)
# 

ifeq ($($(MAKECMDGOALS)_NEED_PDEPENDS),t)
include $(DEPENDS_FILES)
endif

# Local Variables:
# mode: Makefile
# end: