| Commit | Line | Data |
|---|---|---|
| 984263bc MD |
1 | # The include file <bsd.subdir.mk> contains the default targets |
| 2 | # for building subdirectories. | |
| 3 | # | |
| 4 | # For all of the directories listed in the variable SUBDIRS, the | |
| 5 | # specified directory will be visited and the target made. There is | |
| 6 | # also a default target which allows the command "make subdir" where | |
| 7 | # subdir is any directory listed in the variable SUBDIRS. | |
| 8 | # | |
| 9 | # | |
| 10 | # +++ variables +++ | |
| 11 | # | |
| 984263bc MD |
12 | # SUBDIR A list of subdirectories that should be built as well. |
| 13 | # Each of the targets will execute the same target in the | |
| 14 | # subdirectories. | |
| 15 | # | |
| 67be5538 MD |
16 | # SUBDIR_ORDERED A list of subdirectories which also must be included in |
| 17 | # in SUBDIR which have ordering requirements. If this | |
| 18 | # Make variable does not exist then all subdirectories are | |
| 19 | # assumed to be strictly ordered. | |
| 20 | # | |
| 984263bc MD |
21 | # +++ targets +++ |
| 22 | # | |
| 984263bc MD |
23 | # afterinstall, all, all-man, beforeinstall, checkdpadd, |
| 24 | # clean, cleandepend, cleandir, depend, install, lint, maninstall, | |
| 4d351aa0 | 25 | # manlint, obj, objlink, realinstall, regress, tags |
| 984263bc MD |
26 | # |
| 27 | ||
| 28 | .include <bsd.init.mk> | |
| 29 | ||
| 67be5538 MD |
30 | # If SUBDIR_ORDERED not specified we default strongly ordering all |
| 31 | # subdirectories. | |
| 32 | # | |
| 33 | SUBDIR_ORDERED?= ${SUBDIR} | |
| 34 | ||
| 35 | __targets= \ | |
| 36 | checkdpadd clean cleandepend cleandir cleanobj \ | |
| 37 | obj objlink tags depend all all-man \ | |
| 38 | maninstall realinstall \ | |
| 39 | lint manlint regress \ | |
| 40 | buildfiles buildincludes installfiles installincludes | |
| 41 | ||
| 42 | .for __target in ${__targets} | |
| 43 | ||
| 984263bc | 44 | .if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR) |
| 67be5538 MD |
45 | |
| 46 | _SUBDIR_${__target}: ${SUBDIR:S/^/_SUBDIR_${__target}_/} | |
| 47 | ||
| 48 | # Now create the command set for each subdirectory and target | |
| 49 | # | |
| 50 | ||
| 51 | .for entry in ${SUBDIR} | |
| 52 | _SUBDIR_${__target}_${entry}: | |
| 53 | @(if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ | |
| 54 | ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH}"; \ | |
| 55 | edir=${entry}.${MACHINE_ARCH}; \ | |
| 984263bc MD |
56 | cd ${.CURDIR}/$${edir}; \ |
| 57 | else \ | |
| 67be5538 MD |
58 | ${ECHODIR} "===> ${DIRPRFX}${entry}"; \ |
| 59 | edir=${entry}; \ | |
| 984263bc MD |
60 | cd ${.CURDIR}/$${edir}; \ |
| 61 | fi; \ | |
| 67be5538 MD |
62 | ${MAKE} ${__target:realinstall=install} \ |
| 63 | DIRPRFX=${DIRPRFX}$$edir/;) | |
| 64 | ||
| 65 | .endfor | |
| 66 | ||
| 67 | # order subdirectories for each target, set up dependency | |
| 68 | # | |
| 69 | .ORDER: ${SUBDIR_ORDERED:S/^/_SUBDIR_${__target}_/} | |
| 70 | ||
| 71 | .else | |
| 72 | ||
| 73 | _SUBDIR_${__target}: .USE | |
| 74 | ||
| 984263bc MD |
75 | .endif |
| 76 | ||
| 67be5538 MD |
77 | .endfor |
| 78 | ||
| 984263bc MD |
79 | ${SUBDIR}:: |
| 80 | @if test -d ${.TARGET}.${MACHINE_ARCH}; then \ | |
| 81 | cd ${.CURDIR}/${.TARGET}.${MACHINE_ARCH}; \ | |
| 82 | else \ | |
| 83 | cd ${.CURDIR}/${.TARGET}; \ | |
| 84 | fi; \ | |
| 85 | ${MAKE} all | |
| 86 | ||
| 87 | ||
| 67be5538 MD |
88 | .for __target in ${__targets} |
| 89 | ${__target}: _SUBDIR_${__target} | |
| 984263bc MD |
90 | .endfor |
| 91 | ||
| 92 | .for __target in files includes | |
| 93 | .for __stage in build install | |
| 94 | ${__stage}${__target}: | |
| 95 | .if make(${__stage}${__target}) | |
| 67be5538 | 96 | ${__stage}${__target}: _SUBDIR_${__stage}${__target} |
| 984263bc MD |
97 | .endif |
| 98 | .endfor | |
| 99 | ${__target}: | |
| 100 | cd ${.CURDIR}; ${MAKE} build${__target}; ${MAKE} install${__target} | |
| 101 | .endfor | |
| 102 | ||
| 103 | .if !target(install) | |
| 104 | .if !target(beforeinstall) | |
| 105 | beforeinstall: | |
| 106 | .endif | |
| 107 | .if !target(afterinstall) | |
| 108 | afterinstall: | |
| 109 | .endif | |
| 110 | install: beforeinstall realinstall afterinstall | |
| 111 | .ORDER: beforeinstall realinstall afterinstall | |
| 112 | .endif | |
| 1397f94a | 113 | |
| 67be5538 | 114 | .ORDER: ${__targets:S/^/_SUBDIR_/} |