Autoconf stuff
[ntk/apt.git] / buildlib / defaults.mak
CommitLineData
094a497d
AL
1# -*- make -*-
2
3# This file configures the default environment for the make system
4# The way it works is fairly simple, each module is defined in it's
5# own *.mak file. It expects a set of variables to be set to values
6# for it to operate as expected. When included the module generates
7# the requested rules based on the contents of its control variables.
8
9# This works out very well and allows a good degree of flexability.
10# To accomidate some of the features we introduce the concept of
11# local variables. To do this we use the 'Computed Names' feature of
12# gmake. Each module declares a LOCAL scope and access it with,
13# $($(LOCAL)-VAR)
14# This works very well but it is important to rembember that within
15# a rule the LOCAL var is unavailble, it will have to be constructed
16# from the information in the rule invokation. For stock rules like
17# clean this is simple, we use a local clean rule called clean/$(LOCAL)
18# and then within the rule $(@F) gets back $(LOCAL)! Other rules will
19# have to use some other mechanism (filter perhaps?) The reason such
20# lengths are used is so that each directory can contain several 'instances'
21# of any given module
22
23# A build directory is used by default, all generated items get put into
24# there. However unlike automake this is not done with a VPATH build
25# (vpath builds break the distinction between #include "" and #include <>)
26# but by explicly setting the BUILD variable. Make is invoked from
27# within the source itself which is much more compatible with compilation
28# environments.
29
30ifndef BUILD
31BUILD=$(BASE)/build
32endif
33
34# Base definitions
35INCLUDE := $(BUILD)/include
36BIN := $(BUILD)/bin
37LIB := $(BIN)
38OBJ := $(BUILD)/obj
39DEP := $(OBJ)
ac966541 40DOC := $(BUILD)/doc
094a497d
AL
41
42# Module types
ac966541
AL
43LIBRARY_H = $(BASE)/buildlib/library.mak
44DEBIANDOC_H = $(BASE)/buildlib/debiandoc.mak
45MANPAGE_H = $(BASE)/buildlib/manpage.mak
094a497d
AL
46
47# Source location control
48# SUBDIRS specifies sub components of the module that
49# may be located in subdrictories of the source dir.
50# This should be declared before including this file
51SUBDIRS+=
52
53# Header file control.
54# TARGETDIRS indicitates all of the locations that public headers
55# will be published to.
56# This should be declared before including this file
57HEADER_TARGETDIRS+=
58
59# Options
60CXX = c++
61CC = cc
62CPPFLAGS+= -I$(INCLUDE)
63CXXFLAGS+= -Wall -g -fno-implicit-templates -fno-exceptions
64PICFLAGS+= -fPIC -DPIC
65LFLAGS+=
66INLINEDEPFLAG = -MD
ac966541
AL
67DEBIANDOC_HTML = yes
68DEBIANDOC_TEXT = yes
094a497d
AL
69
70# Phony rules. Other things hook these by appending to the dependency
71# list
ac966541
AL
72.PHONY: headers library clean veryclean all binary program doc
73all: binary doc
094a497d 74binary: library program
ac966541 75maintainer-clean dist-clean: veryclean
094a497d
AL
76headers library clean veryclean program:
77
78# Header file control. We want all published interface headers to go
79# into the build directory from thier source dirs. We setup some
80# search paths here
81vpath %.h $(SUBDIRS)
82$(INCLUDE)/%.h $(addprefix $(INCLUDE)/,$(addsuffix /%.h,$(HEADER_TARGETDIRS))) : %.h
83 cp $< $@
84
85# Dependency generation. We want to generate a .d file using gnu cpp.
86# For GNU systems the compiler can spit out a .d file while it is compiling,
87# this is specified with the INLINEDEPFLAG. Other systems might have a
88# makedep program that can be called after compiling, that's illistrated
89# by the DEPFLAG case.
90# Compile rules are expected to call this macro after calling the compiler
91 ifdef INLINEDEPFLAG
92 define DoDep
93 sed -e "1s/.*:/$(subst /,\\/,$@):/" $(basename $(@F)).d > $(DEP)/$(basename $(@F)).d
94 -rm -f $(basename $(@F)).d
95 endef
96else
97 ifdef DEPFLAG
98 define DoDep
99 $(CXX) $(DEPFLAG) $(CPPFLAGS) -o $@ $<
100 sed -e "1s/.*:/$(subst /,\\/,$@):/" $(basename $(@F)).d > $(DEP)/$(basename $(@F)).d
101 -rm -f $(basename $(@F)).d
102 endef
103 else
104 define DoDep
105 endef
106 endif
107endif