xref: /386bsd/usr/src/lib/libg++/Makefile.gnu (revision a2142627)
1# Makefile for GNU C++ class library (libg++)
2#   Copyright (C) 1989 Free Software Foundation, Inc.
3#   written by Doug Lea (dl@rocky.oswego.edu)
4
5#This file is part of GNU libg++.
6
7#GNU libg++ is free software; you can redistribute it and/or modify
8#it under the terms of the GNU General Public License as published by
9#the Free Software Foundation; either version 1, or (at your option)
10#any later version.
11
12#GNU libg++ is distributed in the hope that it will be useful,
13#but WITHOUT ANY WARRANTY; without even the implied warranty of
14#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15#GNU General Public License for more details.
16
17#You should have received a copy of the GNU General Public License
18#along with GNU libg++; see the file COPYING.  If not, write to
19#the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
20
21###########################################################################
22#
23# Directories, paths, compilation flags and program names.
24#
25# Please make sure these are correct.
26#
27
28# ------ source locations
29
30# Manually set PWD to *this* directory if you are not using gnu make
31PWD := $(shell pwd)
32#PWD=/home/dl/libg++
33
34# source include directory
35SRCIDIR= $(PWD)/g++-include
36
37# the genclass program
38GENCLASS=$(PWD)/genclass
39# and its directory of prototype files
40PROTODIR=$(PWD)/g++-include/gen
41
42# ------ installation destinations
43# ------ You will require write-permission on the destination directories
44# ------ in order to `make install'
45
46# set `prefix' to something else if you want to install things
47# in nonstandard places
48
49prefix =/usr/gnu
50
51# libg++.a destination
52LIBDIR = $(prefix)/lib
53
54# executables directory: location to install the genclass class generator
55BINDIR = $(prefix)/bin
56
57# directory to install man pages
58MANDIR= $(prefix)/man
59
60# location to install include file directory
61IDIR = $(prefix)/lib/g++-include
62
63
64# ------- System-dependent defines
65# ------- use the second form of each for SystemV (USG)
66
67# g++ flags
68OSFLAG=
69#OSFLAG = -DUSG
70
71# other compilation control flags -- use any combination
72
73# use this only if you have a strange stdio implementation
74#XTRAFLAGS = -DDEFAULT_filebuf
75
76# use this if you do not want gnulib3 in libg++.a
77#XTRAFLAGS = -DNO_GNULIB3
78
79# use this if you need COFF encapulation defined in gnulib3
80#XTRAFLAGS = -DCOFF_ENCAPSULATE
81
82# use this if you want to disable line buffering for stream output
83#XTRAFLAGS = -DNO_LINE_BUFFER_STREAMBUF
84
85# Use this to disable placing libg++ version of malloc in libg++.a
86#XTRAFLAGS = -DNO_LIBGXX_MALLOC
87
88# Please use this & send me some results of malloc_stats() sometime
89# (it is off by default, since stat gathering hurts performance)
90#XTRAFLAGS = -DMALLOC_STATS
91
92#suggested for NeXT by cdr@acc.stolaf.edu
93#XTRAFLAGS = -DNO_GNULIB3 -DNO_LIBGXX_MALLOC
94
95# ld or ld++ flags
96OSLDFLAG =
97#OSLDFLAG= -lPW
98
99# how to install
100INSTALL=install -c
101#INSTALL=cp
102
103# ranlib if necessary
104RANLIB=ranlib
105#RANLIB=echo
106
107# which make?
108MAKE=make
109
110#which ar?
111AR=ar
112
113# not used, but convenient for those who preprocess things while compiling
114SHELL=/bin/sh
115
116
117# ------ compiler names
118
119# GNU C++ compiler name
120GXX = g++
121#GXX=gcc
122
123# GNU CC compiler name (needed for some .c files in libg++.a)
124CC = gcc
125
126# GNU loader
127LDXX = $(LIBDIR)/gcc-ld
128#LDXX = $(LIBDIR)/gcc-ld++
129
130# crt0+.o location (for dynamic loading tests)
131GXXCRT1=$(LIBDIR)/crt1+.o
132
133# ------ Other compilation flags
134# ------ modify as you like -- the ones here are sheer overkill
135# ------ However, You MUST compile libg++.a with EITHER -O OR
136# ------ -DUSE_LIBGXX_INLINES or both
137
138GXX_OPTIMIZATION_FLAGS= -O -fstrength-reduce  -felide-constructors -fschedule-insns -fdelayed-branch -fsave-memoized
139
140#GXX_OPTIMIZATION_FLAGS=-DUSE_LIBGXX_INLINES
141
142GCC_OPTIMIZATION_FLAGS= -O -fstrength-reduce -fdelayed-branch
143
144DEBUG_FLAGS= -g
145
146#use this only if you like to look at lots of useless messages
147#VERBOSITY_FLAGS= -Wall -v
148VERBOSITY_FLAGS= -Wall
149
150GXX_INCLUDE_DIRS= -I$(SRCIDIR)
151
152GCC_INCLUDE_DIRS= -I$(prefix)/lib/gcc-include -I/usr/include -I$(SRCIDIR)
153
154#use this only if you use GNU as (gas) or other assemblers that
155#can read from pipes.
156PIPE_AS= -pipe
157#PIPE_AS=
158
159# Flags for all C++ compiles
160GXXFLAGS = $(OSFLAG) $(GXX_INCLUDE_DIRS) $(DEBUG_FLAGS) $(GXX_OPTIMIZATION_FLAGS) $(VERBOSITY_FLAGS) $(XTRAFLAGS) $(PIPE_AS)
161
162# Flags for all C compiles
163CFLAGS= $(OSFLAG) $(GCC_INCLUDE_DIRS) $(DEBUG_FLAGS) $(GCC_OPTIMIZATION_FLAGS) $(VERBOSITY_FLAGS) $(XTRAFLAGS) $(PIPE_AS)
164
165# g++ load time flags
166GXXLDFLAGS = -L$(PWD)/src -lg++ -lm $(OSLDFLAG)
167
168# Comment out the next line to disable incremental linking test
169# (this test NOT included in 1.39.0, so don't re-enable)
170#TEST0=test0
171TEST0=
172
173###########################################################################
174#
175# compilation actions
176#
177
178
179
180
181src: FORCE
182	(cd src; $(MAKE) GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" MAKE="$(MAKE)" prefix="$(prefix)" VPATH="$(SRCIDIR)" AR="$(AR)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")
183
184tests: FORCE
185	(cd tests;	$(MAKE) checktests GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" MAKE="$(MAKE)" prefix="$(prefix)" AR="$(AR)" TEST0="$(TEST0)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")
186
187etc: FORCE
188	(cd etc;	$(MAKE) GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" MAKE="$(MAKE)" prefix="$(prefix)" AR="$(AR)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")
189
190run_etc: FORCE
191	(cd etc;	$(MAKE) run_tests GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" MAKE="$(MAKE)" prefix="$(prefix)" AR="$(AR)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")
192
193gperf: FORCE
194	(cd gperf;	$(MAKE) GXX="$(GXX)"  GXXFLAGS="$(GXXFLAGS)" GXXLDFLAGS="$(GXXLDFLAGS)" LIBDIR="$(LIBDIR)" SRCIDIR="$(SRCIDIR)" CC="$(CC)" CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)" LDXX="$(LDXX)" GXXCRT1="$(GXXCRT1)" prefix="$(prefix)" AR="$(AR)" PROTODIR="$(PROTODIR)" GENCLASS="$(GENCLASS)")
195
196genclass: genclass.sh
197	echo "/^PROTODIR=/c\\" > sedscript
198	echo "PROTODIR=$$\{PROTODIR-$(IDIR)/gen\}" >> sedscript
199	sed -f sedscript < genclass.sh > genclass
200	chmod 0755 genclass
201	rm -f sedscript
202
203#to force sub-makes
204FORCE:
205
206
207###########################################################################
208#
209# Installation
210#
211
212MAKE_ENVIRON=\
213	BINDIR=$(BINDIR) \
214	LIBDIR=$(LIBDIR) \
215	MANDIR=$(MANDIR) \
216	INSTALL="$(INSTALL)"
217
218all: src tests genclass etc gperf
219
220install:  install-lib install-include-files install-progs
221
222install-lib:
223	(cd src; $(MAKE) $(MAKE_ENVIRON) install)
224
225install-progs:
226	(cd etc; $(MAKE) $(MAKE_ENVIRON) install)
227	(cd gperf; $(MAKE) $(MAKE_ENVIRON) install)
228	$(INSTALL) genclass $(BINDIR)
229
230install-include-files:
231	-mkdir $(IDIR)
232	-mkdir $(IDIR)/sys
233	-mkdir $(IDIR)/gen
234	cd $(SRCIDIR); \
235	FILES=`find . ! -type d  -print`; \
236	cd gen; \
237	GFILES=`find . ! -type d -print`;\
238	cd $(IDIR); \
239	rm -fr $$FILES; \
240	rm -f $$GFILES; \
241	cd $(SRCIDIR); \
242	FILES=`find . ! -type d  -print`; \
243	for file in $$FILES; do \
244		rm -f $(IDIR)/$$file; \
245		cp $$file $(IDIR)/$$file; \
246		chmod 0444 $(IDIR)/$$file; \
247		echo $$file installed; \
248	done
249
250
251###########################################################################
252#
253# Destructors
254#
255
256clean:
257	rm -f *.o *~ \#* *.bak *.pl a.out
258	cd tests; $(MAKE) clean
259	cd etc; $(MAKE) clean
260	cd gperf; $(MAKE) clean
261
262realclean:
263	cd src; $(MAKE) realclean
264	cd tests; $(MAKE) realclean
265	cd etc; $(MAKE) realclean
266	cd gperf; $(MAKE) realclean
267	-rm -f genclass
268	-rm -f libg++.info* libg++.?? libg++.??s libg++.log libg++.toc libg++.*aux
269	-rm -f *.orig src/*.orig tests/*.orig etc/*.orig g++-include/*.orig g++-include/sys/*.orig g++-include/gen/*.orig
270	-rm -f *.rej src/*.rej tests/*.rej etc/*.rej g++-include/*.rej g++-include/sys/*.rej g++-include/gen/*.rej
271	-rm -f *~ src/*~ tests/*~ etc/*~ g++-include/*~ g++-include/sys/*~ g++-include/gen/*~
272	-rm -f a.out src/a.out tests/a.out etc/a.out
273	-rm -f *.s src/*.s tests/*.s etc/*.s
274
275
276.PHONY: src tests genclass etc gperf FORCE install install-include-files
277