Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – tendra.SVN – Blame – /branches/algol60/mk/tendra.bootstrap.mk – Rev 6

Subversion Repositories tendra.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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