Subversion Repositories tendra.SVN

Rev

Rev 7 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6 7u83 1
# TenDRA make build infrastructure
2
#
3
# $Id$
4
 
5
.if !defined(_TENDRA_BUILD_MK_)
6
_TENDRA_BUILD_MK_=1
7
 
8
.include <tendra.base.mk>
9
.include <tendra.functions.mk>
10
.include <tendra.rules.mk>
11
 
12
# Do some pretty-printing.
13
WRKDIR=		${.CURDIR:C/^${BASE_DIR}\///1}
14
 
15
# The main target is synthetised based upon actual needs.
16
.if !target(.MAIN)
17
.MAIN: all
18
.endif
19
 
20
# Do it all. Real workers, mutually exclusive, follow.
21
 
22
.if "${API}" != ""
23
#
24
# Build API dependencies.
25
#
26
 
27
api-depend:
28
	@${ECHO} "# Creating API source for ${API}"
29
	${TSPEC} -I${BASE_DIR}/${APIS} -O./ -S./building ${API}
30
 
31
# Include Makefile generated by tspec during api-depend.
32
.sinclude "./building/${API}.api/Makefile"
33
 
34
#
35
# Build API.
36
#
37
_REALWORK: api-depend
38
	cd ${BASE_DIR}/${APIS}/${API}/ && ${.MAKE} makeapi
39
makeapi: ${APILIB}
40
 
41
${APILIB}: ${APIOBJS}
42
	@${ECHO} "# Linking ${API} API"
43
	${TLD} -mc -o ${APILIB} ${APIOBJS}
44
 
45
CLEAN_EXTRA+= ${APILIB} ${APIOBJS} ${APIOBJS:S/.j/.c/} \
46
              ./building/${API}.api/Makefile
47
 
48
_objdir= 	${OBJ_DIR}/${APIS}
49
.elif "${ENVFILE}" != ""
50
#
51
# Build environments.
52
#
53
fixenv.sed:
54
	@${ECHO} "# Create ${.TARGET}"
55
	@${ECHO} "1,\$$s%-MACH-%${OSFAM}/${BLDARCH}%g" 		\
56
		> ${OBJ_DIR}/${.TARGET}
57
	@${ECHO} "1,\$$s%-BLDARCH-%${BLDARCH}%g" 		\
58
		>> ${OBJ_DIR}/${.TARGET}
59
	@${ECHO} "1,\$$s%-OSFAM-%${OSFAM}%g" 			\
60
		>> ${OBJ_DIR}/${.TARGET}
61
	@${ECHO} "1,\$$s%-MACHDIR-%${MACH_BASE}%g" 		\
62
		>> ${OBJ_DIR}/${.TARGET}
63
	@${ECHO} "1,\$$s%-BINDIR-%${MACH_BASE}/bin%g" 		\
64
		>> ${OBJ_DIR}/${.TARGET}
65
	@${ECHO} "1,\$$s%-ENVDIR-%${MACH_BASE}/env%g" 		\
66
		>> ${OBJ_DIR}/${.TARGET}
67
	@${ECHO} "1,\$$s%-LIBDIR-%${MACH_BASE}/lib%g" 		\
68
		>> ${OBJ_DIR}/${.TARGET}
69
	@${ECHO} "1,\$$s%-INCLDIR-%${COMMON_DIR}/include%g" 	\
70
		>> ${OBJ_DIR}/${.TARGET}
71
	@${ECHO} "1,\$$s%-STARTUPDIR-%${COMMON_DIR}/startup%g" 	\
72
		>> ${OBJ_DIR}/${.TARGET}
73
	@${ECHO} "1,\$$s%-TMPDIR-%${TMP_DIR}%g" 		\
74
		>> ${OBJ_DIR}/${.TARGET}
75
 
76
_REALWORK: fixenv.sed .USE
77
	@${ECHO} "# Fixing paths for ${ENVFILE} environments"
78
. for entry in ${ENVFILE}
79
	sed -f ${OBJ_DIR}/fixenv.sed ${.CURDIR}/${entry} > ${OBJ_DIR}/${ENVIRONMENT}/${entry}
80
. endfor
81
. if "${ENVEXTRA}" != ""
82
	cat ${.CURDIR}/${ENVEXTRA} >> ${OBJ_DIR}/${ENVIRONMENT}/default
83
. endif
84
 
85
_objdir=	${OBJ_DIR}/${ENVIRONMENT}
86
.elif "${STARTUPSUBDIR}" != ""
87
#
88
# Install startup files in object directory
89
#
90
_REALWORK: .USE
91
	@${ECHO} "# Installing ${STARTUPSUBDIR} startup directories into object directory"
92
	${CONDCREATE} ${STARTUPSUBDIR:S/^/${OBJ_SDIR}\//g}
93
. for startsub in ${STARTUPSUBDIR}
94
.  for file in ${:!${ECHO} ${.CURDIR}/${startsub}/*!:T}
95
	${INSTALL} -m 644 ${.CURDIR}/${startsub}/${file} \
96
		${OBJ_SDIR}/${startsub}/${file}
97
.  endfor
98
. endfor
99
 
100
_objdir=	${OBJ_SDIR}
101
.elif "${SYS_FILES}" || "${TDFLIB}" != ""
102
#
103
# Build token definition.
104
#
105
_REALWORK: .USE
106
	@${ECHO} "# Building ${TDFLIB} token definition"
107
 
108
_objdir=	${OBJ_SDIR}
109
.elif "${PROG}" != ""
110
#
111
# Build a program.
112
#
113
. if !defined(MAN) && exists(${.CURDIR}/${PROG}.1)
114
MAN=	${PROG}.1
115
. endif
116
 
117
${PROG}: ${OBJS}
118
	@${ECHO} "# Linking ${WRKDIR}/${PROG}"
119
	${CC} ${ENVFLAGS} ${LDOPTS} -o ${PROG} ${OBJS} ${LIBS}
120
 
121
_REALWORK: ${PROG} .USE
122
. if defined(WRAPPER)
123
	@${ECHO} "# Adjusting paths for ${WRAPPER}"
124
	sed -e 1,\$$s%@@MACH_BASE@@%${MACH_BASE}%g \
125
		-e 1,\$$s%@@PREFIX@@%${PREFIX}%g \
126
		${.CURDIR}/${WRAPPER} > ${WRAPPER}
127
. endif
128
 
129
CLEAN_EXTRA+=	${PROG} ${PROG}.core core ${OBJS}
130
_objdir=	${OBJ_SDIR}
131
.elif "${LIB}" != ""
132
#
133
# Build a library
134
#
135
_REALWORK: lib${LIB}.a
136
 
137
lib${LIB}.a: ${OBJS}
138
	${AR} cr ${.TARGET} ${OBJS}
139
	${RANLIB} ${.TARGET}
140
 
141
_objdir=${OBJ_SDIR}
142
.else
143
#
144
# Nothing to do here.
145
#
146
_REALWORK:
147
.endif
148
 
149
# Suppport targets.
150
 
151
# Remove registered garbage.
152
clean:
153
.if "${CLEAN_EXTRA}" != ""
154
	@${ECHO} "# Cleaning ${.CURDIR}"
155
	${REMOVE} ${CLEAN_EXTRA}
156
.endif
157
 
158
# Clean objdir blindly.
159
cleandir:
160
.if "${_objdir}" != ""
161
	${REMOVE} ${_objdir}/* 2> /dev/null
162
.endif
163
 
164
# Remove obj symlink from curdir.
165
cleanobj:
166
.if "${_objdir}" != ""
167
	@if ${TEST} -h ${.CURDIR}/obj ; then \
168
		${ECHO} "# Removing obj link ${WRKDIR}/obj" ; \
169
		${REMOVE} ${.CURDIR}/obj ; \
170
		${REMOVE} ${OBJ_DIR_INDICATOR} 2> /dev/null ; \
171
	fi
172
.endif
173
 
174
# Create objdir and its symlink.
175
obj:
176
.if "${_objdir}" != "" && (!exists(${_objdir}) || !exists(obj))
177
. if !exists(${_objdir})
178
	@${ECHO} "# Creating objdir ${_objdir}"
179
	@${MKDIR} -p ${_objdir}
180
. endif
181
.endif
182
.if "${_objdir}" != ""
183
	@${REMOVE} ${.CURDIR}/obj
184
	@${LN} -sf ${_objdir} ${.CURDIR}/obj
185
.endif
186
 
187
# Glue all the steps together.
188
 
189
all: _REALWORK
190
 
191
# Make sure subdirs are walked after real work is done.
192
.ORDER: _REALWORK _SUBDIR
193
 
194
# Proceed to subdirs.
195
_SUBDIR: .USE
196
.if defined(SUBDIR) && !empty(SUBDIR)
197
. for entry in ${SUBDIR}
198
	@cd ${.CURDIR}/${entry}; ${MAKE} ${.TARGET}
199
. endfor
200
.endif
201
 
202
# Ensure existence of basic targets.
203
.for target in obj all clean install cleanobj cleandir
204
${target}: _SUBDIR .PHONY
205
.endfor
206
 
207
.endif	# !defined(_TENDRA_BUILD_MK_)