1 1.7 rillig # $NetBSD: archive.mk,v 1.7 2020/09/05 06:20:51 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.7 rillig # 6 1.7 rillig # This test aims at covering the code, not at being an introduction to 7 1.7 rillig # archive handling. That's why it is more complicated and detailed than 8 1.7 rillig # strictly necessary. 9 1.1 rillig 10 1.7 rillig ARCHIVE= libprog.a 11 1.7 rillig FILES= archive.mk modmisc.mk varmisc.mk 12 1.1 rillig 13 1.1 rillig MAKE_CMD= ${.MAKE} -f ${MAKEFILE} 14 1.1 rillig RUN?= @set -eu; 15 1.1 rillig 16 1.1 rillig all: 17 1.6 rillig .if ${.PARSEDIR:tA} != ${.CURDIR:tA} 18 1.7 rillig @cd ${MAKEFILE:H} && cp ${FILES} t*.mk ${.CURDIR} 19 1.6 rillig .endif 20 1.7 rillig # The following targets are run in sub-makes to ensure that they get the 21 1.7 rillig # current state of the filesystem right, since they creating and removing 22 1.7 rillig # files. 23 1.2 rillig ${RUN} ${MAKE_CMD} remove-archive 24 1.1 rillig ${RUN} ${MAKE_CMD} create-archive 25 1.1 rillig ${RUN} ${MAKE_CMD} list-archive 26 1.4 rillig ${RUN} ${MAKE_CMD} list-archive-wildcard 27 1.1 rillig ${RUN} ${MAKE_CMD} depend-on-existing-member 28 1.1 rillig ${RUN} ${MAKE_CMD} depend-on-nonexistent-member 29 1.1 rillig ${RUN} ${MAKE_CMD} remove-archive 30 1.1 rillig 31 1.1 rillig create-archive: ${ARCHIVE} 32 1.7 rillig 33 1.7 rillig # The indirect references with the $$ cover the code in Arch_ParseArchive 34 1.7 rillig # that calls Var_Parse. It's an esoteric scenario since at the point where 35 1.7 rillig # Arch_ParseArchive is called, the dependency line is already fully expanded. 36 1.7 rillig # 37 1.7 rillig ${ARCHIVE}: $${:Ulibprog.a}(archive.mk modmisc.mk $${:Uvarmisc.mk}) 38 1.1 rillig ar cru ${.TARGET} ${.OODATE} 39 1.1 rillig ranlib ${.TARGET} 40 1.1 rillig 41 1.1 rillig list-archive: ${ARCHIVE} 42 1.1 rillig ar t ${.ALLSRC} 43 1.1 rillig 44 1.4 rillig # XXX: I had expected that this dependency would select all *.mk files from 45 1.4 rillig # the archive. Instead, the globbing is done in the current directory. 46 1.5 rillig # To prevent an overly long file list, the pattern is restricted to [at]*.mk. 47 1.5 rillig list-archive-wildcard: ${ARCHIVE}([at]*.mk) 48 1.4 rillig ${RUN} printf '%s\n' ${.ALLSRC:O:@member@${.TARGET:Q}': '${member:Q}@} 49 1.4 rillig 50 1.1 rillig depend-on-existing-member: ${ARCHIVE}(archive.mk) 51 1.1 rillig ${RUN} echo $@ 52 1.1 rillig 53 1.1 rillig depend-on-nonexistent-member: ${ARCHIVE}(nonexistent.mk) 54 1.1 rillig ${RUN} echo $@ 55 1.1 rillig 56 1.2 rillig remove-archive: 57 1.3 rillig rm -f ${ARCHIVE} 58