1# ******************************************************************************
2# 
3# libcsc: Make Subsystem
4# 
5# 	----------------------------------------------------------------
6# 
7# Copyright (c) 2001, 2002 Douglas R. Jerome, Peoria, AZ USA
8# 
9# 	This program is free software; you can redistribute it and/or modify
10# 	it under the terms of the GNU Library General Public License as
11# 	published by the Free Software Foundation; either version 2 of the
12# 	License, or (at your option) any later version.
13# 
14# 	This program is distributed in the hope that it will be useful,
15# 	but WITHOUT ANY WARRANTY; without even the implied warranty of
16# 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# 	GNU General Public License for more details.
18# 
19# 	You should have received a copy of the GNU Library General Public
20# 	License along with this program; if not, write to the Free Software
21# 	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22# 
23# 	----------------------------------------------------------------
24# 
25# FILE NAME
26# 
27# 	$RCSfile: Makefile.src,v $
28# 	$Revision: 1.13 $
29# 	$Date: 2003/03/26 02:02:39 $
30# 
31# PROGRAM INFORMATION
32# 
33# 	Developed by:	libcsc project
34# 	Developer:	Douglas R. Jerome, drj, <jerome@primenet.com>
35# 
36# FILE DESCRIPTION
37# 
38# 	This is the main source code make file.
39# 
40# CHANGE LOG
41# 
42# 	25mar03	drj	Fixed debug target.
43# 
44# 	06nov02	drj	Cleaned up echoed message in the doc target.
45# 
46# 	02may02	drj	Cleaned up making for debug. Added OSTYPE and use it
47# 			for -pthread option with linux.
48#
49# 	19apr02	drj	Added csc_notify.
50#
51# 	18apr02	drj	Added csc_symtab.
52#
53# 	15apr02	drj	Added csc_hash and csc_math.
54# 
55# 	11apr02	drj	Added csc_tree.
56#
57# 	16feb02	drj	Added csc_list.
58# 
59# 	25jun01	drj	File generation.
60# 
61# ******************************************************************************
62
63
64# *************************************************************************** #
65# Macro Definitions                                                           #
66# *************************************************************************** #
67
68# -- Configuration
69#
70VERSION	= $(shell cd .. && ls *.is.version | sed -e 's/\.is\.version//')
71OSTYPE	= $(shell                                                             \
72	if [ "`uname -s`" = "SunOS" -a "`uname -r | cut -c 1`" = "5" ]; then  \
73		echo "SOLARIS";                                               \
74	else                                                                  \
75		if [ "`uname -s`" = "Linux" ]; then                           \
76			echo "LINUX";                                         \
77		fi                                                            \
78	fi                                                                    \
79	)
80
81# -- Input Files
82#
83HEADERS	=
84OBJECTS	=		\
85	csc_config.o	\
86	csc_file.o	\
87	csc_hash.o	\
88	csc_io.o	\
89	csc_list.o	\
90	csc_math.o	\
91	csc_mem.o	\
92	csc_notify.o	\
93	csc_sock.o	\
94	csc_string.o	\
95	csc_symbol.o	\
96	csc_symtab.o	\
97	csc_sys.o	\
98	csc_timer.o	\
99	csc_tree.o	\
100	xcsc_debug.o
101SOURCES	=		\
102	csc_config.c	\
103	csc_file.c	\
104	csc_hash.c	\
105	csc_io.c	\
106	csc_list.c	\
107	csc_math.c	\
108	csc_mem.c	\
109	csc_notify.c	\
110	csc_sock.c	\
111	csc_string.c	\
112	csc_symbol.c	\
113	csc_symtab.c	\
114	csc_sys.c	\
115	csc_timer.c	\
116	csc_tree.c	\
117	xcsc_debug.c
118
119# -- Generated Files
120#
121ARCHIVE		= libcsc.a
122LMODULE		= libcsc.o
123ARCHIVE_DEBUG	= libcsc_debug.a
124LMODULE_DEBUG	= libcsc_debug.o
125PROGRAM		= libcsc-config
126
127# -- Install Locations
128#
129INSTALLPREFIX	= /usr/local
130INSTALLEXE	= ${INSTALLPREFIX}/bin
131INSTALLINC	= ${INSTALLPREFIX}/include
132INSTALLLIB	= ${INSTALLPREFIX}/lib
133
134# -- Extra, Referenced Files; extra compilation switches, etc.
135#
136C_HEADER_DIR	= ../include
137LOCAL_INCLUDES	= -I. -I${C_HEADER_DIR}
138LOCAL_DEFINES	=
139LIB_DIRS	=
140LIBS		=
141
142ifeq ("${OSTYPE}","LINUX")
143LOCAL_DEFINES	+= -pthread
144endif
145
146
147# *************************************************************************** #
148# More Macro Definitions                                                      #
149# *************************************************************************** #
150
151# -- Tools
152#
153AR	= ar
154CAT	= cat
155CC	= gcc
156CHMOD	= chmod
157CP	= cp
158INSTALL	= install -c
159LD	= ld
160LINK	= ln -f -s
161MV	= mv
162NM	= nm
163RANLIB	= ranlib
164RM	= rm -f
165STRIP	= strip
166SZ	= size
167
168# -- cc Flags
169#
170CC_COMPILER	= -ansi -c -pipe ${CC_PARAMS}
171CC_WARNING	= -Wall -W -Wmissing-prototypes -Wmissing-declarations
172CFLAGS		= ${CC_COMPILER} ${CC_WARNING}
173
174# -- cpp Flags
175#
176CPP_DEFINES	= ${CDEBUGFLAGS} ${LOCAL_DEFINES} -D${OSTYPE}
177CPP_INCLUDES	= ${LOCAL_INCLUDES} ${EXTRA_INCLUDES} -I-
178CPPFLAGS	= -MMD ${CPP_DEFINES} ${CPP_INCLUDES}
179
180# -- ld Flags
181#
182LDFLAGS		= -r
183
184
185# *************************************************************************** #
186# Make Rules                                                                  #
187# *************************************************************************** #
188
189%::	${PROJECTDIR}/RCS/%,v
190	$(CO) $(COFLAGS) $@ $<
191
192.c.o:
193	@echo ""
194	@echo "***** $<"
195	time ${CC} ${CFLAGS} ${CPPFLAGS} $<
196
197
198# *************************************************************************** #
199# Make Targets                                                                #
200# *************************************************************************** #
201
202.PHONEY:	default
203.PHONEY:	clean cleanall cleandoc config docclean doc incbuild
204.PHONEY:	install installlibrary installheaders installprogram
205.PHONEY:	testhclean testh
206.PHONEY:	archive debug exe headers lib library lmodule objects sources
207
208# ---------------------------------------------------------------------------
209# -- Default Target
210# ---------------------------------------------------------------------------
211
212default:	${ARCHIVE} ${LMODULE} ${PROGRAM}
213
214# ---------------------------------------------------------------------------
215# -- Housekeeping Targets
216# ---------------------------------------------------------------------------
217
218clean:
219	${RM} ${OBJECTS} ${OBJECTS:.o=.d} .depend
220	${RM} ${ARCHIVE_DEBUG} ${ARCHIVE_DEBUG}.names
221	${RM} ${LMODULE_DEBUG} ${LMODULE_DEBUG}.names
222	${RM} ${ARCHIVE} ${ARCHIVE}.names
223	${RM} ${LMODULE} ${LMODULE}.names
224	${RM} ${PROGRAM} config-main.o config-main.d csc_config.h core
225
226cleanall:	clean
227	${RM} ../lib/${ARCHIVE} ../lib/${ARCHIVE_DEBUG}
228	${RM} ../lib/${LMODULE} ../lib/${LMODULE_DEBUG}
229	${RM} ../bin/${PROGRAM}
230
231cleandoc:
232	${RM} ../doc/man?/*
233
234config:
235	@${RM} csc_config.h
236	@echo "/*"                                           >> csc_config.h
237	@echo " * This file is generated by Makefile.src"    >> csc_config.h
238	@echo " * Edits to this file will be lost."          >> csc_config.h
239	@echo " */"                                          >> csc_config.h
240	@echo ""                                             >> csc_config.h
241	@echo "#define  CSC_CFLAGS      \"${CPP_INCLUDES}\"" >> csc_config.h
242	@echo "#define  CSC_LDFLAGS     \"${LIB_DIRS}\""     >> csc_config.h
243	@echo "#define  CSC_LIBS        \"${LIBS}\""         >> csc_config.h
244	@buildnum=0;					\
245	if [ -f .build ]; then				\
246		buildnum=`cat .build`;			\
247	fi;						\
248	echo  "#define  CSC_BUILD       \"$${buildnum}\""  >> csc_config.h
249	@builddate="";					\
250	if [ -f .date ]; then				\
251		builddate=`cat .date`;			\
252		${RM} .date;				\
253	fi;						\
254	echo  "#define  CSC_DATE        \"$${builddate}\"" >> csc_config.h
255	@echo "#define  CSC_VERSION     \"${VERSION}\""    >> csc_config.h
256
257docclean:
258	${RM} ../doc/man?/*
259
260doc:
261	@echo ""
262	@echo "---------------------------------------------------------------"
263	@echo ""
264	@echo "Removing old documentation (function overviews)."
265	@${RM} ../doc/man3/*
266	@echo "Removing old documentation (subsystem overviews)."
267	@${RM} ../doc/manl/*
268	@echo ""
269	@echo "Ripping documentation from sources:"
270	@mrip="";							\
271	if [ -f ../../Cmrip ]; then					\
272		mrip="../../Cmrip";					\
273	fi;								\
274	if [ -f ../tools/mrip ]; then					\
275		mrip="../tools/mrip";					\
276	fi;								\
277	echo "SUBSYSTEM(s)";						\
278	for file in ${SOURCES}; do					\
279		$${mrip} -v 1 -r $${file} -d ../doc/manl -k SUBSYSTEM;	\
280		${RM} $${file}.rip;					\
281	done;								\
282	echo "SUBROUTINE(s)";						\
283	for file in ${SOURCES}; do					\
284		$${mrip} -v 1 -r $${file} -d ../doc/man3 -k SUBROUTINE;	\
285		${RM} $${file}.rip;					\
286	done
287	@echo ""
288	@echo "Look in ../doc/manl and ../doc/man3 for documentaion."
289	@echo ""
290
291incbuild:
292	@buildnum=0;					\
293	if [ -f .build ]; then				\
294		buildnum=`cat .build`;			\
295		buildnum=`expr $${buildnum} + 1`;	\
296		${RM} .build;				\
297	fi;						\
298	echo $${buildnum} > .build
299	@${RM} .date; echo `date '+%a. %h %d, 20%y, %r'` > .date
300
301# ---------------------------------------------------------------------------
302# -- Installation Targets
303# ---------------------------------------------------------------------------
304
305install:	installlibrary installheaders installprogram
306
307installlibrary:	${ARCHIVE} ${LMODULE}
308	cd ../lib && make -f Makefile.lib install "INSTALLLIB=${INSTALLLIB}"
309
310installheaders:	headers
311	cd ../include && \
312		make -f Makefile.include install "INSTALLINC=${INSTALLINC}"
313
314installprogram:	${PROGRAM}
315	cd ../bin && make -f Makefile.bin install "INSTALLEXE=${INSTALLEXE}"
316
317# ---------------------------------------------------------------------------
318# -- Test Targets
319# ---------------------------------------------------------------------------
320
321TEST_DEPS	= _HEADERlibcsc.d	\
322		  _HEADERlibcsc_debug.d
323
324TEST_OBJS	= _HEADERlibcsc.o	\
325		  _HEADERlibcsc_debug.o
326
327testhclean:
328	${RM} ${TEST_DEPS} ${TEST_OBJS}
329
330testh:	headers ${HEADERS} ${SOURCES} ${TEST_OBJS}
331	@${RM} ${TEST_DEPS} ${TEST_OBJS}
332	@echo "Done."
333
334# ---------------------------------------------------------------------------
335# -- Build Targets
336# ---------------------------------------------------------------------------
337
338archive:	${ARCHIVE}
339
340debug:
341	make clean
342	make CDEBUGFLAGS=-DDEBUG CC_PARAMS=-g
343	${MV} ../lib/${LMODULE} ../lib/${LMODULE_DEBUG}
344	${MV} ../lib/${ARCHIVE} ../lib/${ARCHIVE_DEBUG}
345	${LINK} ${LMODULE_DEBUG} ../lib/${LMODULE}
346	${LINK} ${ARCHIVE_DEBUG} ../lib/${ARCHIVE}
347	make clean
348
349exe:		${PROGRAM}
350
351headers:	${HEADERS}
352	cd ${C_HEADER_DIR} && make -f Makefile.include headers
353
354lib library lmodule:	${LMODULE}
355
356objects:	config ${OBJECTS}
357
358sources:	${SOURCES}
359
360${ARCHIVE}:	headers ${HEADERS} ${SOURCES} config ${OBJECTS}
361	@echo ""
362	@echo "----------------------------------------------------------------"
363	@echo ""
364	@${RM} .depend
365	${CAT} ${OBJECTS:.o=.d} > .depend
366	@echo ""
367	@echo "##### Removing old library '${ARCHIVE}'..."
368	${RM} ${ARCHIVE}
369	@echo ""
370	@echo "##### Archiving objects ${OBJECTS} into '${ARCHIVE}'."
371	@echo ""
372	@echo "##### Building new archive ..."
373	${AR} r ${ARCHIVE} ${OBJECTS}
374	${RANLIB} ${ARCHIVE}
375	@echo ""
376	@echo "##### New archive '${ARCHIVE}' built from:"
377	${AR} vt ${ARCHIVE}
378	@echo ""
379	@echo "##### Size statistics for ${ARCHIVE}:"
380	${SZ} ${ARCHIVE}
381	@echo ""
382	${NM} ${ARCHIVE} > ${ARCHIVE}.names
383	${CHMOD} 644 ${ARCHIVE}
384	${CHMOD} 644 ${ARCHIVE}.names
385	${RM} ../lib/${ARCHIVE}
386	${CP} ${ARCHIVE} ../lib
387	@echo ""
388	@echo "##### Finished making the '${ARCHIVE}' object archive."
389	@echo ""
390
391${LMODULE}:	headers ${HEADERS} ${SOURCES} config ${OBJECTS}
392	@echo ""
393	@echo "----------------------------------------------------------------"
394	@echo ""
395	@${RM} .depend
396	${CAT} ${OBJECTS:.o=.d} > .depend
397	@echo ""
398	@echo "##### Removing old object module '${LMODULE}'..."
399	${RM} ${LMODULE}
400	@echo ""
401	@echo "##### Time statistics for linking '${LMODULE}' with command:"
402	time ${LD} ${LDFLAGS} -o ${LMODULE} ${OBJECTS}
403	@echo ""
404	@echo "##### Size statistics for ${LMODULE}:"
405	${SZ} ${LMODULE}
406	@echo ""
407	${NM} ${LMODULE} > ${LMODULE}.names
408	${CHMOD} 644 ${LMODULE}
409	${CHMOD} 644 ${LMODULE}.names
410	${RM} ../lib/${LMODULE}
411	${CP} ${LMODULE} ../lib
412	@echo ""
413	@echo "##### Finished making the '${LMODULE}' object module file."
414	@echo ""
415
416${PROGRAM}:	config config-main.o csc_config.o
417	@echo ""
418	@echo "---------------------------------------------------------------"
419	@echo ""
420	@echo "##### Time statistics for linking '${PROGRAM}' with command:"
421	time ${CC} -o ${PROGRAM} config-main.o csc_config.o 
422	@echo ""
423	${STRIP} ${PROGRAM}
424	${CHMOD} 775 ${PROGRAM}
425	${CP} ${PROGRAM} ../bin
426	${CHMOD} 755 ../bin/${PROGRAM}
427	@echo ""
428	@echo "##### Finished making the '${PROGRAM}' executable program."
429	@echo ""
430
431
432# The .depend file contains the header file dependencies.
433#
434-include .depend
435
436
437# end of Makefile
438