# rules.mk: the makefile all other makefiles include first
#
################################################################
# Copyright (C) 2001, 2002 Tom Lord
#
# See the file "COPYING" for further information about
# the copyright and warranty status of this work.
#
################################################################
# Presumed already set (from configure):
#
# $(prefix) root of the install directory
# $(srcdir) the source file directory
# $(srcroot) the root of the source tree
# $(thispath) $(srcdir) relative to $(srcroot)
# $(destdir) for use when creating binary packages
#
# May be already set:
#
# CFLAGS _additional_ flags for the C compiler (e.g. "-O")
# default: -g. This may be set from the command line
# but should not be set in a Makefile that includes
# rules.mk
#
# EXTRA_CFLAGS _additional_ flags for the C compiler. This may be
# set in a Makefile that includes rules.mk.
#
# generated-includes
# a list of include files generated during compilation
#
# generated-source
# a list of source files generated during compilation
#
# clean-only
# if defined, this was invoked from the generic top-level
# makefile for `make clean'.
#
################################################################
ifndef rules-mk
rules-mk := 1
################################################################
# Standard Targets
#
################################################################
# The default dependency
#
all:
# Some targets that must be defined (by convention):
#
install: all
test: all
doc:
install-doc: doc
install-all: install install-doc
# There must never be a source file named "FORCE", nor any rule
# for producing a file named "FORCE"
#
FORCE:
################################################################
# Automatic Identification of Source Files
#
################################################################
# $(source-files) the complete list of source files.
# For the moment, we only like C, but really
# anything for which we have a rule to produce
# a .o file is fine.
#
# Source files must begin with [a-zA-Z0-9]. In
# "larch inventory", source can also begin with "=".
# Source files beginning with "=" are presumed to be
# `scaffolding' -- programs used during development that
# should not be compiled during an ordinary build.
#
ifndef source-files
source-files := $(sort $(generated-source) \
$(source-files) \
$(notdir $(wildcard $(srcdir)/[a-zA-Z0-9]*.c)))
endif
################################################################
# Derived Paths
#
################################################################
# $(thisdir) tail of `pwd` in the build directory
#
# thisdir is used to automatically generate names. For instance,
# the names of installation directories.
#
thisdir := $(notdir $(shell pwd))
# Where programs are installed:
#
# $(destdir)$(prefix)/bin # binaries
# /cgi # CGI executables
# /lib # libraries
# /include/$(thispath) # includes
# /etc # the dreaded miscellaneous pile
# /libexec # programs invoked by other programs
# /share/info # info files
# /share/man # manual entries
# /share/scheme # Scheme libraries
# /share/doc/$(thispath) # documentation
# /share/$(thispath) # datafiles
# /share/locale # locale
#
program-install-dir := $(destdir)$(prefix)/bin
cgi-install-dir := $(destdir)$(prefix)/cgi
library-install-dir := $(destdir)$(prefix)/lib
include-install-dir := $(destdir)$(prefix)/include/$(thispath)
etc-install-dir := $(destdir)$(prefix)/etc
libexec-install-dir := $(destdir)$(prefix)/libexec
info-install-dir := $(destdir)$(prefix)/share/info
man-install-dir := $(destdir)$(prefix)/share/man
scm-install-dir := $(destdir)$(prefix)/share/scheme
doc-install-dir := $(destdir)$(prefix)/share/doc/$(thispath)
data-install-dir := $(destdir)$(prefix)/share/$(thispath)
locale-install-dir := $(destdir)$(prefix)/share/locale
################################################################
# CFLAGS
#
################################################################
# $(CFLAGS)
#
# Extra compiler flags can be specified to make in the usual way, e.g.:
#
# make CFLAGS=-O
#
# The default value of CFLAGS is "-g"
#
# Makefile.in should never define $(CFLAGS). A particular Makefile.in can
# add extra C flags by defining $(EXTRA_CFLAGS).
#
ifdef CFLAGS
USER_CFLAGS := $(CFLAGS)
else
USER_CFLAGS := -g
endif
ifndef HACKERLABCFLAGS
override CFLAGS := -I$(objroot)/config-include -I$(objroot) -I$(srcroot) $(USER_CFLAGS)
HACKERLABCFLAGS := done
export HACKERLABCFLAGS
endif
override CFLAGS := $(CFLAGS) $(EXTRA_CFLAGS)
export CFLAGS
################################################################
# Tools
#
################################################################
ifdef cfg__cc
CC := $(cfg__cc)
endif
################################################################
# Automatic Dependency Tracking
#
# For every .c file, produce a .d file which states dependencies
# of the corresponding .o file and executable upon include files.
#
################################################################
%.d: %.c $(generated-includes)
printf "%s %s.o %s.d: " $(basename $@) $(basename $@) $(basename $@) > $@
$(CC) -DFOR_MAKEFILE_DEPENDENCIES -E $(CFLAGS) $< | sed -f $(makefiles)/cpp-to-includes.sed | sort -u | sed -e 's/$$/ \\/' >> $@
echo >> $@
$(addsuffix .o, $(basename $(source-files))): %.o: %.d
$(basename $(source-files)): %: %.d
ifndef clean-only
ifdef source-files
-include $(addsuffix .d, $(notdir $(basename $(source-files))))
endif
endif
################################################################
# Automatically Generated Source and Include Files
#
################################################################
ifndef clean-only
ifdef generated-includes
all: $(generated-includes)
endif
ifdef generated-source
all: $(generated-source)
endif
endif
ifdef generated-source
clean: clean-generated-source
clean-generated-source:
for f in $(generated-source) ; do \
test ! -e $$f || rm $$f ; \
done
endif
ifdef generated-includes
clean: clean-generated-includes
clean-generated-includes:
for f in $(generated-includes) ; do \
test ! -e $$f || rm $$f ; \
done
endif
################################################################
# Clean temp files
#
################################################################
clean: clean-temp-files
clean-temp-files:
for f in ,* ,fake ; do \
test ! -e $$f || rm $$f ; \
done
################################################################
# Documenation Rules
#
# A temporary solution.
#
################################################################
.SUFFIXES: .pdml .pdml-index .html .doc
xdmlcomp := $(objroot)/systas/systas/systas $(srcroot)/systas/scheme-library/doc/xdml-comp.ss
%.pdml : %.c %.d
$(xdmlcomp) --reader c-comment --markup-language doc/old-pdml --print $< > $@
%.pdml : %.doc
$(xdmlcomp) --reader c-comment --markup-language doc/old-pdml --print $< > $@
%.html : %.pdml $(the-pdml-index)
$(xdmlcomp) --markup-language doc/old-pdml --output-format html $(foreach index, $(the-pdml-index), --use-index $(index)) --format $<
%.texi : %.pdml $(the-pdml-index)
$(xdmlcomp) --markup-language doc/old-pdml --output-format texinfo $(foreach index, $(the-pdml-index), --use-index $(index)) --format $<
################################################################
# mo/po Rules
#
# A temporary solution.
#
################################################################
.SUFFIXES: .mo .po
prog_msgfmt := msgfmt
%.mo : %.po
$(prog_msgfmt) -o $@ $<
endif # ifndef rules-mk
# arch-tag: Tom Lord Tue Dec 4 14:47:18 2001 (rules.mk)
#
syntax highlighted by Code2HTML, v. 0.9.1