archive.mk revision 1.4 1 # $NetBSD: archive.mk,v 1.4 2020/08/23 17:34:46 rillig Exp $
2 #
3 # Very basic demonstration of handling archives, based on the description
4 # in PSD.doc/tutorial.ms.
5
6 ARCHIVE= libprog.${EXT.a}
7 FILES= archive.${EXT.mk} modmisc.${EXT.mk} varmisc.mk
8
9 EXT.a= a
10 EXT.mk= mk
11
12 MAKE_CMD= ${.MAKE} -f ${MAKEFILE}
13 RUN?= @set -eu;
14
15 all:
16 ${RUN} ${MAKE_CMD} remove-archive
17 ${RUN} ${MAKE_CMD} create-archive
18 ${RUN} ${MAKE_CMD} list-archive
19 ${RUN} ${MAKE_CMD} list-archive-wildcard
20 ${RUN} ${MAKE_CMD} depend-on-existing-member
21 ${RUN} ${MAKE_CMD} depend-on-nonexistent-member
22 ${RUN} ${MAKE_CMD} remove-archive
23
24 create-archive: ${ARCHIVE}
25 ${ARCHIVE}: ${ARCHIVE}(${FILES})
26 ar cru ${.TARGET} ${.OODATE}
27 ranlib ${.TARGET}
28
29 list-archive: ${ARCHIVE}
30 ar t ${.ALLSRC}
31
32 # XXX: I had expected that this dependency would select all *.mk files from
33 # the archive. Instead, the globbing is done in the current directory.
34 # To prevent an overly long file list, the pattern is restricted to ar*.mk.
35 list-archive-wildcard: ${ARCHIVE}(ar*.mk)
36 ${RUN} printf '%s\n' ${.ALLSRC:O:@member@${.TARGET:Q}': '${member:Q}@}
37
38 depend-on-existing-member: ${ARCHIVE}(archive.mk)
39 ${RUN} echo $@
40
41 depend-on-nonexistent-member: ${ARCHIVE}(nonexistent.mk)
42 ${RUN} echo $@
43
44 remove-archive:
45 rm -f ${ARCHIVE}
46