archive.mk revision 1.6 1 # $NetBSD: archive.mk,v 1.6 2020/09/04 19:03:38 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 .if ${.PARSEDIR:tA} != ${.CURDIR:tA}
17 @cd ${MAKEFILE:H} && cp [at]*.mk ${.CURDIR}
18 .endif
19 ${RUN} ${MAKE_CMD} remove-archive
20 ${RUN} ${MAKE_CMD} create-archive
21 ${RUN} ${MAKE_CMD} list-archive
22 ${RUN} ${MAKE_CMD} list-archive-wildcard
23 ${RUN} ${MAKE_CMD} depend-on-existing-member
24 ${RUN} ${MAKE_CMD} depend-on-nonexistent-member
25 ${RUN} ${MAKE_CMD} remove-archive
26
27 create-archive: ${ARCHIVE}
28 ${ARCHIVE}: ${ARCHIVE}(${FILES})
29 ar cru ${.TARGET} ${.OODATE}
30 ranlib ${.TARGET}
31
32 list-archive: ${ARCHIVE}
33 ar t ${.ALLSRC}
34
35 # XXX: I had expected that this dependency would select all *.mk files from
36 # the archive. Instead, the globbing is done in the current directory.
37 # To prevent an overly long file list, the pattern is restricted to [at]*.mk.
38 list-archive-wildcard: ${ARCHIVE}([at]*.mk)
39 ${RUN} printf '%s\n' ${.ALLSRC:O:@member@${.TARGET:Q}': '${member:Q}@}
40
41 depend-on-existing-member: ${ARCHIVE}(archive.mk)
42 ${RUN} echo $@
43
44 depend-on-nonexistent-member: ${ARCHIVE}(nonexistent.mk)
45 ${RUN} echo $@
46
47 remove-archive:
48 rm -f ${ARCHIVE}
49