-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
145 lines (120 loc) · 4.8 KB
/
Makefile
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
# @(#) Makefile 1.6 93/06/18 22:29:40
## BEGIN CONFIGURATION STUFF
# In the unlikely case that your compiler has no hooks for alternate
# compiler passes, use a "cc cflags -E file.c | unproto >file.i"
# pipeline, then "cc cflags -c file.i" to compile the resulting
# intermediate file.
#
# Otherwise, the "/lib/cpp | unproto" pipeline can be packaged as an
# executable shell script (see the provided "cpp.sh" script) that should
# be installed as "/whatever/cpp". This script should then be specified
# to the C compiler as a non-default preprocessor.
#
# PROG = unproto
# PIPE =
# The overhead and problems of shell script interpretation can be
# eliminated by having the unprototyper program itself open the pipe to
# the preprocessor. In that case, define the PIPE_THROUGH_CPP macro as
# the path name of the default C preprocessor (usually "/lib/cpp"),
# install the unprototyper as "/whatever/cpp" and specify that to the C
# compiler as a non-default preprocessor.
#
#PROG = cpp
PROG = unproto
PIPE = -DPIPE_THROUGH_CPP=\"/lib/cpp\"
# Some compilers complain about some #directives. The following is only a
# partial solution, because the directives are still seen by /lib/cpp.
# Be careful with filtering out #pragma, because some pre-ANSI compilers
# (SunOS) rely on its use.
#
# SKIP = -DIGNORE_DIRECTIVES=\"pragma\",\"foo\",\"bar\"
#
SKIP =
# The bell character code depends on the character set. With ASCII, it is
# 7. Specify a string constant with exactly three octal digits. If you
# change this definition, you will have to update the example.out file.
#
BELL = -DBELL=\"007\"
# Some C compilers have problems with "void". The nature of the problems
# depends on the age of the compiler.
#
# If your compiler does not understand "void" at all, compile with
# -DMAP_VOID. The unprototyper will replace "void *" by "char *", a
# (void) argument list by an empty one, and will replace all other
# instances of "void" by "int".
#
# If your compiler has problems with "void *" only, compile with
# -DMAP_VOID_STAR. The unprototyper will replace "void *" by "char *",
# and will replace a (void) argument list by an empty one. All other
# instances of "void" will be left alone.
#
# If neither of these are defined, (void) argument lists will be replaced
# by empty ones.
#
MAP = -DMAP_VOID_STAR
# Now that we have brought up the subject of antique C compilers, here's
# a couple of aliases that may be useful, too.
#
# ALIAS = -Dstrchr=index
# If you need support for functions that implement ANSI-style variable
# length argument lists, edit the stdarg.h file provided with this
# package so that it contains the proper definitions for your machine.
# Place the directive that your compiler uses for line control here.
# Some pre-ANSI compiler use "#line", but most use simply "#".
#
LINE = -DLINE=\"\#line\"
# If your compiler's provides an stdarg.h file that is incompatible
# with unproto's one, define STDARG here:
#
STDARG = -DSTDARG
## END CONFIGURATION STUFF
SHELL = /bin/sh
CFILES = unproto.c tok_io.c tok_class.c tok_pool.c vstring.c symbol.c error.c \
hash.c strsave.c
HFILES = error.h token.h vstring.h symbol.h
SCRIPTS = cpp.sh acc.sh
SAMPLES = stdarg.h stddef.h stdlib.h varargs.c example.c example.out
SOURCES = README $(CFILES) $(HFILES) Makefile $(SCRIPTS) $(SAMPLES)
FILES = $(SOURCES) unproto.1
OBJECTS = tok_io.o tok_class.o tok_pool.o unproto.o vstring.o symbol.o error.o \
hash.o strsave.o
OPTS= $(PIPE) $(SKIP) $(BELL) $(MAP) $(ALIAS) $(LINE) $(STDARG)
CFLAGS = $(OPTS)
#CFLAGS = $(OPTS) -p -Dstatic=
#CFLAGS = $(OPTS) -g -DDEBUG
$(PROG): $(OBJECTS)
$(CC) $(CFLAGS) -o $@ $(OBJECTS) $(MALLOC)
# For linting, enable all bells and whistles.
lint:
lint -DPIPE_THROUGH_CPP=\"foo\" -DIGNORE_DIRECTIVES=\"foo\",\"bar\" \
$(BELL) -DMAP_VOID $(ALIAS) $(CFILES)
# Testing requires that the program is compiled with -DDEBUG.
test: $(PROG) cpp example.c example.out
./cpp example.c >example.tmp
@echo the following diff command should produce no output
diff -b example.out example.tmp
rm -f example.tmp
tar: clean
(cd ..; tar cvf unproto-1.7.tar unproto-1.7)
mv ../unproto-1.7.tar .
compress unproto-1.7.tar
archive:
$(ARCHIVE) $(SOURCES)
install:
strip unproto
cp unproto /usr/local/bin
cp acc.mwc /usr/local/bin/acc
chmod 755 /usr/local/bin/acc
clean:
rm -f *.o core cpp unproto mon.out varargs.o varargs example.tmp \
unproto-1.7.tar.Z
error.o : error.c token.h error.h Makefile
hash.o : hash.c Makefile
strsave.o : strsave.c error.h Makefile
symbol.o : symbol.c error.h token.h symbol.h Makefile
tok_class.o : tok_class.c error.h vstring.h token.h symbol.h Makefile
tok_io.o : tok_io.c token.h vstring.h error.h Makefile
tok_pool.o : tok_pool.c token.h vstring.h error.h Makefile
unproto.o : unproto.c vstring.h stdarg.h token.h error.h symbol.h Makefile
varargs.o : varargs.c stdarg.h Makefile
vstring.o : vstring.c vstring.h Makefile