# $NetBSD: Makefile,v 1.155 2011/11/03 07:42:56 joerg Exp $ .include HAVE_GCC= 45 # Dependencies in SUBDIR below ordered to maximize parallel ability. SUBDIR= host-mkdep .WAIT compat .WAIT \ binstall .WAIT mktemp .WAIT sed .WAIT \ genassym \ makewhatis mkdep mtree\ m4 \ .WAIT mkfs.mfs \ .WAIT yacc \ .WAIT awk \ .WAIT tic \ .WAIT lex \ .WAIT pax \ .WAIT gmake .WAIT gmp .WAIT mpfr .WAIT mpc .WAIT binutils .WAIT gcc \ cat file pwd_mkdb stat zic \ .if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { realall realdepend install: check_MKTOOLS .for dir in ${SUBDIR:N.WAIT} all-${dir} depend-${dir} dependall-${dir} install-${dir}: @true .endfor .endif # } .include .include .if !defined(PREVIOUSTOOLDIR) . if exists(PREVIOUSTOOLDIR) PREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR . else PREVIOUSTOOLDIR= . endif .endif CLEANFILES+= PREVIOUSTOOLDIR realall realdepend: .MAKE .if !empty(PREVIOUSTOOLDIR) && "${PREVIOUSTOOLDIR}" != "${TOOLDIR}" @echo "*** WARNING: TOOLDIR has moved?" @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" @echo "*** != TOOLDIR '${TOOLDIR}'" @echo "*** Cleaning mis-matched tools" rm -f PREVIOUSTOOLDIR (cd ${.CURDIR} && ${MAKE} PREVIOUSTOOLDIR=${TOOLDIR} cleandir) .endif echo ${TOOLDIR} >PREVIOUSTOOLDIR # For each .WAIT point, make sure the immediately preceding target is # installed before building anything after that point. # (dsl: which means that with: 'a b .WAIT c' the build of 'c' waits for the # install of 'b', but not the install of 'a'.) # # We use the "internal" targets and dependencies generated by # to achieve this. These targets look like: # subdir-all: all-dir1 [.WAIT] all-dir2 etc.. # subdir-install: install-dir1 [.WAIT] install-dir2 etc.. # and so on for each element in ${TARGETS}, with .WAIT sources inserted at # places corresponding to the .WAITs in our $SUBDIR variable. # # Also, since we're now mixing `install' with `all' and `depend' targets # an order relationship between those in each individual subdirectory # must be established. # _deps:= _prev:= .for d in ${SUBDIR} # { _this:= ${d} .if ${_this} == ".WAIT" # { # setup dependency to apply to all/depend targets in the next group _deps:= ${_deps} ${_prev:S/^/install-/} # if we're building *only* individual targets (i.e. "dependall-yacc"), # make sure prerequisite tools build before installing # XXX: dsl: this is likely to generate a dependency loop since there is # a .ORDER releation between the nodes as well. .if !make(all) && !make(dependall) && !make(install) install-${_prev}: dependall-${_prev} .endif .else # ${_this} != ".WAIT" # } { # order depend/all/install targets for ${d} subdir. .ORDER: depend-${d} all-${d} dependall-${d} install-${d} # prevent cleandir in real{all,depend} from interfering with subdir makes .ORDER: realdepend dependall-${d} .ORDER: realdepend depend-${d} .ORDER: realall all-${d} # make all/depend-${d} dependent on list of install targets depend-${d} all-${d} dependall-${d}: ${_deps} .endif # ${_this} != ".WAIT" # } # stash current name in case the next entry is .WAIT _prev:= ${d} .endfor # } cleandir: rm -f ${CLEANFILES}