summaryrefslogtreecommitdiff
path: root/compatMakefile
blob: 6a87e8a73d3c78937bb947ab872c76ac4fb889e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# Copyright (C) 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
# This file is part of GNU Make.
# 
# GNU Make is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Make is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with GNU Make; see the file COPYING.  If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

#
#	Makefile for GNU Make
#

CFLAGS = $(defines) -g
LDFLAGS = -g

# Define these for your system as follows:
# 	-DUSG			System V
#	-DUSGr3			SVR3 (also define USG)
#	-DHPUX			HP-UX (also define USG and USGr3 appropriately)
#	-DHAVE_SYS_WAIT		USG, but have <sys/wait.h> and wait3
#	-DHAVE_SIGLIST		USG, but have sys_siglist
#	-DHAVE_DUP2		USG and not USGr3, but have dup2
#	-DHAVE_VFORK		USG, but have vfork
#	-DVFORK_MISSING		Not USG, but no vfork
#	-DNO_MINUS_C_MINUS_O	cc can't handle "cc -c foo.c -o foo.o"
#	-DPOSIX			A 1003.1 system (or trying to be)
#	-DNO_ARCHIVES		To disable `ar' archive support.
#	-DNO_FLOAT		To avoid using floating-point numbers.
#	-DENUM_BITFIELDS	If the compiler isn't GCC but groks enum foo:2.
#				Some compilers apparently accept this
#				without complaint but produce losing code,
#				so beware.
#	-DHAVE_ALLOCA_H		If you need to use <alloca.h> for alloca.
# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline.
defines =

# Define these for your system as follows:
#	-DUMAX		Encore UMAX
#	-DUMAX_43	Encore UMAX 4.3 (also define UMAX)
#	-DNO_LDAV	Disable load-average checking.
# To read /dev/kmem (most Unix systems), define these if different from the
# given defaults:
#	-DKERNEL_FILE_NAME=\"/vmunix\"
#	-DLDAV_SYMBOL=\"_avenrun\"
#	-DLDAV_CVT="(double) load"
# Define:
#	-DNLIST_NAME_UNION	If `struct nlist' has a n_un member.
#	-DNLIST_NAME_ARRAY	If `n_name' is an array.
LOAD_AVG =

# If you don't want archive support, comment these out.
ARCHIVES = arscan.o ar.o
ARCHIVES_SRC = arscan.c ar.c

# If your system needs extra libraries loaded in, define them here.
# System V probably need -lPW for alloca.  HP-UX 7.0's alloca in
# libPW.a is broken on HP9000s300 and HP9000s400 machines.  Use
# alloca.c (below) instead on those machines.  SGI Irix needs -lmld
# for nlist.
LOADLIBES =

# If your system doesn't have alloca, or the one provided is bad,
# get it from the Emacs distribution and define these.
#ALLOCA = alloca.o
#ALLOCASRC = alloca.c

# If there are remote execution facilities defined,
# enable them with switches here (see remote-*.c).
REMOTE =

# Any extra object files your system needs.
extras =

# Comment this out if POSIX.2 glob is installed on your system
# (it's in the GNU C Library, so if you're using that, this is
# not needed at all.)
globdep = glob/libglob.a

# Library containing POSIX.2 `glob' function.
# Comment this line out if it's in the C library (which is the case if you
# are using the GNU C Library), or change it to the appropriate file name
# or -l switch.
globlib = $(globdep)

# Name under which to install GNU make.
instname = make
# Directory to install `make' in.
bindir = $(prefix)/usr/local/bin
# Directory to install the man page in.
mandir = $(prefix)/usr/local/man/manl
# Number to put on the man page filename.
manext = l

# Install make setgid to this group so it can read /dev/kmem.
group = kmem

objs = commands.o job.o dir.o file.o load.o misc.o main.o read.o \
       remake.o remote.o rule.o implicit.o default.o variable.o expand.o \
       function.o vpath.o version.o $(ARCHIVES) $(ALLOCA) $(extras)
srcs = commands.c job.c dir.c file.c load.c misc.c main.c read.c \
       remake.c remote.c rule.c implicit.c default.c variable.c expand.c \
       function.c vpath.c version.c $(ALLOCASRC) $(ARCHIVES_SRC) \
       commands.h dep.h file.h job.h make.h rule.h variable.h


.SUFFIXES:
.SUFFIXES: .o .c .h .ps .dvi .texinfo

.PHONY: all doc
all: make
doc: make.info make.dvi


# Take your pick.
#makeinfo = emacs -batch -f batch-texinfo-format make.texinfo
makeinfo = makeinfo make.texinfo

make.info: make.texinfo
	$(makeinfo)


make.dvi: make.texinfo
	-tex make.texinfo
	texindex make.cp make.fn make.ky make.pg make.tp make.vr
	-tex make.texinfo

make.ps: make.dvi
	dvi2ps make.dvi > make.ps

make: $(objs) $(globdep)
	$(CC) $(LDFLAGS) $(objs) $(globlib) $(LOADLIBES) -o make.new
	mv -f make.new make

load.o: load.c
	$(CC) $(CFLAGS) $(LOAD_AVG) -c load.c
remote.o: remote.c
	$(CC) $(CFLAGS) $(REMOTE) -c remote.c

# For some losing Unix makes.
MAKE = make

glob/libglob.a: force
	cd glob; $(MAKE) CC='$(CC)' CFLAGS='$(CFLAGS) -I..' libglob.a
force:

tagsrcs = $(srcs) remote-*.c *.h
TAGS: $(tagsrcs)
	etags -tw $(tagsrcs)
tags: $(tagsrcs)
	ctags -tw $(tagsrcs)

.PHONY: install
install: $(bindir)/$(instname) $(mandir)/$(instname).$(manext)

$(bindir)/$(instname): make
	cp make $@.new
# These are necessary for load-average checking to work on most Unix machines.
	-chgrp $(group) $@.new
	-chmod g+s $@.new
	mv $@.new $@

$(mandir)/$(instname).$(manext): make.man
	-@rm -f $@
	cp make.man $@

.PHONY: clean realclean
clean: glob-clean
	-rm -f make *.o core
realclean: clean glob-realclean
	-rm -f TAGS tags make.info* make-* make.dvi *~
	-rm -f make.?? make.??s make.log make.toc make.*aux

.PHONY: glob-clean glob-realclean
glob-clean glob-realclean:
	cd glob; $(MAKE) $@

# Automatically generated dependencies will be put at the end of the file.