1#
2# The author of this code is Angelos D. Keromytis (angelos@dsl.cis.upenn.edu)
3#
4# This code was written by Angelos D. Keromytis in Philadelphia, PA, USA,
5# in April-May 1998
6#
7# Copyright (C) 1998, 1999 by Angelos D. Keromytis.
8#
9# Permission to use, copy, and modify this software without fee
10# is hereby granted, provided that this entire notice is included in
11# all copies of any software which is or includes a copy or
12# modification of this software.
13#
14# THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
15# IMPLIED WARRANTY. IN PARTICULAR, THE AUTHORS MAKES NO
16# REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
17# MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
18# PURPOSE.
19
20VERSION = 2.3
21DISTFILE = keynote-${VERSION}.tar.gz
22KNSUBDIR = keynote-${VERSION}
23
24LEX = @LEX@
25CC = @CC@
26RANLIB = @RANLIB@
27YACC = @YACC@
28SSLEAY = @SSLEAY@
29RM = @RM@
30AR = @AR@
31NROFF = @NROFF@
32TAR = @TAR@
33TRUE = @TRUE@
34MKDIR = @MKDIR@
35SED = @SED@
36ECHO = @ECHO@
37TR = @TR@
38
39TARFLAGS = -cvzf ${DISTFILE}
40YACCFLAGS2 = -d -p kv -b z
41YACCFLAGS = -d -p kn -b k
42LEXFLAGS2 = -Pkv -s -i
43LEXFLAGS = -Cr -Pkn -s -i
44CFLAGS ?= -O2 -Wall # -g
45RMFLAGS2 = -rf
46RMFLAGS = -f
47NROFFFLAGS = -mandoc
48
49SSLCONF = testsuite/openssl.cnf
50SSLCERT = testsuite/test.cert.pem
51SSLKEY = testsuite/test.key.pem
52SIGN_ASSERT = testsuite/test-assertion1-signed
53
54# No-crypto compile/link flags and definitions
55NOCRYPTODEFS = @DEFS@ @CPPFLAGS@
56
57# Final compile/link flags and definitions
58DEFS = -DCRYPTO ${NOCRYPTODEFS}
59INC = -I.
60LIBS = -L. -lkeynote @LIBS@
61
62TARGET = libkeynote.a
63TARGET2 = keynote
64TARGET3 = sample-app
65
66OBJS = 	k.tab.o lex.kn.o environment.o parse_assertion.o \
67	signature.o auxil.o base64.o
68OBJS2 = z.tab.o lex.kv.o keynote-verify.o keynote-sign.o \
69	keynote-sigver.o keynote-keygen.o keynote-main.o @LIBOBJS@
70OBJS3 = sample-app.o
71
72crypto: all
73
74nocrypto:
75	${MAKE} DEFS="${NOCRYPTODEFS}"
76
77all: $(TARGET) $(TARGET2)
78
79library: $(TARGET)
80
81$(TARGET): $(OBJS)
82	$(AR) -cvr $(TARGET) $(OBJS)
83	$(RANLIB) $(TARGET)
84
85$(TARGET2): $(TARGET) $(OBJS2)
86	$(CC) $(CFLAGS) -o $(TARGET2) $(OBJS2) $(LIBS)
87
88k.tab.c: keynote.y header.h keynote.h assertion.h config.h
89	$(YACC) $(YACCFLAGS) keynote.y
90k.tab.h: | k.tab.c
91
92z.tab.c: keynote-ver.y keynote.h header.h config.h
93	$(YACC) $(YACCFLAGS2) keynote-ver.y
94z.tab.h: | z.tab.c
95
96lex.kn.c: keynote.l k.tab.h header.h keynote.h assertion.h config.h
97	$(LEX) $(LEXFLAGS) keynote.l
98
99lex.kv.c: keynote-ver.l z.tab.h keynote.h header.h config.h
100	$(LEX) $(LEXFLAGS2) keynote-ver.l
101
102.c.o:
103	$(CC) $(CFLAGS) $(DEFS) $(INC) -c $<
104
105auxil.c: header.h keynote.h assertion.h signature.h config.h
106parse_assertion.c: header.h keynote.h assertion.h signature.h config.h
107environment.c: header.h keynote.h assertion.h config.h
108keynote-verify.c: header.h keynote.h header.h config.h
109signature.c: header.h keynote.h assertion.h signature.h config.h
110keynote-keygen.c: keynote.h assertion.h signature.h header.h config.h
111keynote-sign.c: keynote.h header.h config.h
112keynote-sigver.c: keynote.h header.h config.h
113keynote-main.c: header.h config.h
114base64.c: header.h keynote.h config.h
115
116clean:
117	$(RM) $(RMFLAGS) $(OBJS) $(OBJS2) a.out *.core *~ */*~
118	$(RM) $(RMFLAGS) $(SSLCERT) $(SSLCERT).1 $(SSLCERT).2
119	$(RM) $(RMFLAGS) $(SSLKEY) $(SIGN_ASSERT)
120
121cleandir: cleanall
122
123cleanall: clean
124	$(RM) $(RMFLAGS) *.o k.tab.c lex.kn.c k.tab.h z.tab.c z.tab.h
125	$(RM) $(RMFLAGS) lex.kv.c y.output z.output ${DISTFILE}
126	$(RM) $(RMFLAGS) $(TARGET) $(TARGET2) $(TARGET3) man/*.0 config.cache
127	$(RM) $(RMFLAGS) config.log config.status config.h Makefile
128	$(RM) $(RMFLAGS) man/*.cat?
129
130$(SSLCERT) $(SSLKEY):
131	$(SSLEAY) req -config $(SSLCONF) \
132	-new -x509 -nodes -out $(SSLCERT) \
133	-keyout $(SSLKEY)
134
135test-sample: all $(OBJS3)
136	$(CC) $(CFLAGS) -o $(TARGET3) $(OBJS3) $(LIBS)
137
138test-sig: all $(SSLCERT) $(SSLKEY)
139	$(SED) -e 's/--.*//' < $(SSLCERT) > $(SSLCERT).1
140	$(ECHO) -n 'authorizer: "x509-base64:' > $(SSLCERT).2
141	$(TR) -d '\n' < $(SSLCERT).1 >> $(SSLCERT).2
142	$(ECHO) '"' >> $(SSLCERT).2
143	$(SED) -e "/@@AUTH@@/r $(SSLCERT).2" -e "s/@@AUTH@@//" < $(SIGN_ASSERT).in > $(SIGN_ASSERT)
144	./$(TARGET2) sign -v "sig-x509-sha1-base64:" $(SIGN_ASSERT) $(SSLKEY) | tee -a $(SIGN_ASSERT)
145	./$(TARGET2) sigver $(SIGN_ASSERT)
146
147test: all
148	./$(TARGET2) verify -e testsuite/test-env \
149		-r false,maybe,probably,true \
150		-k testsuite/auth1 -k testsuite/auth2 \
151		-k testsuite/auth3 -k testsuite/auth4 \
152		-l testsuite/test-assertion1 \
153		-l testsuite/test-assertion2 \
154		-l testsuite/test-assertion3 \
155		-l testsuite/test-assertion4 \
156		-l testsuite/test-assertion5 \
157		-l testsuite/test-assertion6 \
158		-l testsuite/test-assertion7 || ${TRUE}
159
160manpages: mansyntax mankeynote mansystem manutility mansyntax
161
162mansyntax:
163	${NROFF} ${NROFFFLAGS} man/keynote.5 > man/keynote.cat5
164
165mankeynote:
166	${NROFF} ${NROFFFLAGS} man/keynote.3 > man/keynote.cat3
167
168mansystem:
169	${NROFF} ${NROFFFLAGS} man/keynote.4 > man/keynote.cat4
170
171manutility:
172	${NROFF} ${NROFFFLAGS} man/keynote.1 > man/keynote.cat1
173
174distribution: test cleanall manpages
175	${MKDIR} ${KNSUBDIR}
176	$(TAR) cf - . | (cd ${KNSUBDIR}; ${TAR} xf -)
177	${RM} ${RMFLAGS2} ${KNSUBDIR}/CVS ${KNSUBDIR}/testsuite/CVS \
178			  ${KNSUBDIR}/Misc/CVS ${KNSUBDIR}/${KNSUBDIR} \
179			  ${KNSUBDIR}/.cvsignore ${KNSUBDIR}/man/CVS \
180			  ${KNSUBDIR}/man/.cvsignore ${KNSUBDIR}/doc/CVS \
181			  ${KNSUBDIR}/testsuite/.cvsignore
182	$(TAR) $(TARFLAGS) ${KNSUBDIR}
183	${RM} ${RMFLAGS2} ${KNSUBDIR} man/*.0 man/*.cat?
184