-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
104 lines (83 loc) · 2.61 KB
/
Makefile
File metadata and controls
104 lines (83 loc) · 2.61 KB
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
-include Config.mk
SC := ${name}
PSC := p${name}
SCSRC := $(sort $(filter-out psc.c, $(wildcard *.c)) gram.c)
PSCSRC := psc.c xmalloc.c vmtbl.c
SCOBJ := $(addprefix .o/,$(SCSRC:.c=.o))
PSCOBJ := $(addprefix .o/,$(PSCSRC:.c=.o))
ALLOBJ := $(sort ${SCOBJ} ${PSCOBJ})
ALLDEPS := ${ALLOBJ:.o=.d}
DOCS := doc/sc.1 doc/psc.1 doc/tutorial.sc
CONFS := config.status config.h Config.mk
GRAMS := gram.c gram.h experres.h statres.h
######## Compilation #################################################
all: ${SC} ${PSC}
${SC}: ${SCOBJ}
@echo "Linking $@ ..."
@${CC} ${LDFLAGS} -o $@ ${SCOBJ} ${SCLIBS}
${PSC}: ${PSCOBJ}
@echo "Linking $@ ..."
@${CC} ${LDFLAGS} -o $@ ${PSCOBJ} ${PSCLIBS}
.o/%.o: %.c
@echo " Compiling $< ..."
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
@${CC} ${CFLAGS} -MMD -MT "$(<:.c=.s) $@" -o $@ -c $<
%.s: %.c
@echo " Assembling $< ..."
@${CC} ${CFLAGS} -S -o $@ -c $<
gram.c: gram.y
@echo " Compiling $< ..."
@${YACC} -d $< -o $@
experres.h: gram.y eres.sed
@echo " Generating $@ ..."
@sed -f eres.sed < gram.y > experres.h
statres.h: gram.y sres.sed
@echo " Generating $@ ..."
@sed -f sres.sed < gram.y > statres.h
gram.h: gram.c
lex.c: experres.h statres.h gram.h
######## Installation ################################################
ifdef BINDIR
ISC := ${BINDIR}/${SC}
IPSC := ${BINDIR}/${PSC}
ISCMAN := ${MANDIR}/${SC}.${MANEXT}
IPSCMAN := ${MANDIR}/${PSC}.${MANEXT}
ISCTUT := ${DATADIR}/${SC}/tutorial.sc
${ISC}: ${SC}
@echo "Installing $@ ..."
@${INSTALLBIN} $< $@
${IPSC}: ${PSC}
@echo "Installing $@ ..."
@${INSTALLBIN} $< $@
${ISCMAN}: doc/${SC}.1
@echo "Installing $@ ..."
@${INSTALLMAN} $< $@
${IPSCMAN}: doc/${PSC}.1
@echo "Installing $@ ..."
@${INSTALLMAN} $< $@
${ISCTUT}: doc/tutorial.sc
@echo "Installing $@ ..."
@${INSTALLDOC} $< $@
install: ${ISC} ${IPSC} ${ISCMAN} ${IPSCMAN} ${ISCTUT}
uninstall:
@if [ -d ${DATADIR}/${SC} -o -f ${ISC} -o -f ${IPSC} ]; then\
echo "Uninstalling ...";\
rm -f ${ISC} ${IPSC} ${ISCMAN} ${IPSCMAN} ${ISCTUT};\
rmdir -p ${DATADIR}/${SC} ${MANDIR} ${BINDIR} &> /dev/null || true;\
fi
endif
######## Maintenance #################################################
clean:
@if [ -d .o ]; then\
rm -f ${SC} ${PSC} ${GRAMS} ${ALLOBJ} ${ALLDEPS};\
rmdir .o;\
fi
distclean: clean
@rm -f config.h Config.mk config.status
maintainer-clean: distclean
Config.mk config.h: config.status
config.status: configure Config.mk.in config.h.in
@if [ -x config.status ]; then echo "Reconfiguring ..."; ./config.status; \
else echo "Running configure ..."; ./configure; fi
${ALLOBJ} ${DOCS} ${GRAMS}: Makefile ${CONFS}
-include ${ALLDEPS}