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