bsd.progs.mk revision 304144
1241823Smarcel# $FreeBSD: stable/11/share/mk/bsd.progs.mk 304144 2016-08-15 09:37:58Z bdrewery $ 2242710Ssjg# $Id: progs.mk,v 1.11 2012/11/06 17:18:54 sjg Exp $ 3242710Ssjg# 4242710Ssjg# @(#) Copyright (c) 2006, Simon J. Gerraty 5242710Ssjg# 6242710Ssjg# This file is provided in the hope that it will 7242710Ssjg# be of use. There is absolutely NO WARRANTY. 8242710Ssjg# Permission to copy, redistribute or otherwise 9242710Ssjg# use this file is hereby granted provided that 10242710Ssjg# the above copyright notice and this notice are 11242710Ssjg# left intact. 12242710Ssjg# 13242710Ssjg# Please send copies of changes and bug-fixes to: 14242710Ssjg# sjg@crufty.net 15242710Ssjg# 16241823Smarcel 17242710Ssjg.MAIN: all 18241823Smarcel 19258095Ssjg.if defined(PROGS) || defined(PROGS_CXX) 20258095Ssjg# we really only use PROGS below... 21258095SsjgPROGS += ${PROGS_CXX} 22241823Smarcel 23242710Ssjg.if defined(PROG) 24242710Ssjg# just one of many 25290870SngiePROG_OVERRIDE_VARS += BINDIR BINGRP BINOWN BINMODE DPSRCS MAN NO_WERROR \ 26298012Sngie PROGNAME SRCS STRIP WARNS 27304144SbdreweryPROG_VARS += CFLAGS CXXFLAGS DEBUG_FLAGS DPADD INTERNALPROG LDADD LIBADD \ 28304144Sbdrewery LINKS LDFLAGS MLINKS ${PROG_OVERRIDE_VARS} 29242710Ssjg.for v in ${PROG_VARS:O:u} 30272055Sngie.if empty(${PROG_OVERRIDE_VARS:M$v}) 31272055Sngie.if defined(${v}.${PROG}) 32272055Sngie$v += ${${v}.${PROG}} 33272055Sngie.elif defined(${v}_${PROG}) 34272055Sngie$v += ${${v}_${PROG}} 35272055Sngie.endif 36258095Ssjg.else 37258095Ssjg$v ?= 38249770Ssjg.endif 39242710Ssjg.endfor 40241823Smarcel 41296553Sbdrewery.if ${MK_DIRDEPS_BUILD} == "yes" 42296553Sbdrewery# Leave updating the Makefile.depend to the parent. 43296553SbdreweryUPDATE_DEPENDFILE = NO 44296553Sbdrewery 45296553Sbdrewery# Record our meta files for the parent to use. 46296553SbdreweryCLEANFILES+= ${PROG}.meta_files 47296553Sbdrewery${PROG}.meta_files: .NOMETA $${.MAKE.META.CREATED} ${_this} 48296553Sbdrewery @echo "Updating ${.TARGET}: ${.OODATE:T:[1..8]}" 49296553Sbdrewery @echo ${.MAKE.META.FILES} > ${.TARGET} 50296553Sbdrewery 51296553Sbdrewery.if !defined(_SKIP_BUILD) 52296553Sbdrewery.END: ${PROG}.meta_files 53241823Smarcel.endif 54296553Sbdrewery.endif # ${MK_DIRDEPS_BUILD} == "yes" 55241823Smarcel 56242710Ssjg# prog.mk will do the rest 57289289Sbdrewery.else # !defined(PROG) 58296121Sbdrewery.if !defined(_SKIP_BUILD) 59288158Sbdreweryall: ${PROGS} 60296121Sbdrewery.endif 61241823Smarcel 62296553SbdreweryMETA_XTRAS+= ${cat ${PROGS:S/$/*.meta_files/} 2>/dev/null || true:L:sh} 63296122Sbdrewery 64296555Sbdrewery.if ${MK_STAGING} != "no" && !empty(PROGS) 65296555Sbdrewery# Stage from parent while respecting PROGNAME and BINDIR overrides. 66296555Sbdrewery.for _prog in ${PROGS} 67296555SbdrewerySTAGE_DIR.prog.${_prog}= ${STAGE_OBJTOP}${BINDIR.${_prog}:UBINDIR_${_prog}:U${BINDIR}} 68296555SbdrewerySTAGE_AS_SETS+= prog.${_prog} 69296555SbdrewerySTAGE_AS_prog.${_prog}= ${PROGNAME.${_prog}:UPROGNAME_${_prog}:U${_prog}} 70296555Sbdrewerystage_as.prog.${_prog}: ${_prog} 71296555Sbdrewery.endfor 72296555Sbdrewery.endif # ${MK_STAGING} != "no" && !empty(PROGS) 73241823Smarcel.endif 74288158Sbdrewery.endif # PROGS || PROGS_CXX 75241823Smarcel 76288158Sbdrewery# These are handled by the main make process. 77274079Sngie.ifdef _RECURSING_PROGS 78296122SbdreweryMK_STAGING= no 79296122Sbdrewery 80296000Sbdrewery_PROGS_GLOBAL_VARS= CLEANFILES CLEANDIRS CONFGROUPS FILESGROUPS INCSGROUPS \ 81296000Sbdrewery SCRIPTS 82288158Sbdrewery.for v in ${_PROGS_GLOBAL_VARS} 83288158Sbdrewery$v = 84288158Sbdrewery.endfor 85274079Sngie.endif 86274079Sngie 87242710Ssjg# handle being called [bsd.]progs.mk 88258095Ssjg.include <bsd.prog.mk> 89241823Smarcel 90289289Sbdrewery.if !empty(PROGS) && !defined(_RECURSING_PROGS) && !defined(PROG) 91249770Ssjg# tell progs.mk we might want to install things 92288201SbdreweryPROGS_TARGETS+= checkdpadd clean cleandepend cleandir depend install 93241823Smarcel 94289286Sbdrewery# Find common sources among the PROGS and depend on them before building 95289286Sbdrewery# anything. This allows parallelization without them each fighting over 96289286Sbdrewery# the same objects. 97289286Sbdrewery_PROGS_COMMON_SRCS= 98289286Sbdrewery_PROGS_ALL_SRCS= 99242710Ssjg.for p in ${PROGS} 100289286Sbdrewery.for s in ${SRCS.${p}} 101289286Sbdrewery.if ${_PROGS_ALL_SRCS:M${s}} && !${_PROGS_COMMON_SRCS:M${s}} 102289286Sbdrewery_PROGS_COMMON_SRCS+= ${s} 103289286Sbdrewery.else 104289286Sbdrewery_PROGS_ALL_SRCS+= ${s} 105289286Sbdrewery.endif 106289286Sbdrewery.endfor 107289286Sbdrewery.endfor 108289286Sbdrewery.if !empty(_PROGS_COMMON_SRCS) 109291340Sbdrewery_PROGS_COMMON_OBJS= ${_PROGS_COMMON_SRCS:M*.[dhly]} 110291340Sbdrewery.if !empty(_PROGS_COMMON_SRCS:N*.[dhly]) 111291340Sbdrewery_PROGS_COMMON_OBJS+= ${_PROGS_COMMON_SRCS:N*.[dhly]:R:S/$/.o/g} 112291338Sbdrewery.endif 113289286Sbdrewery${PROGS}: ${_PROGS_COMMON_OBJS} 114289286Sbdrewery.endif 115289286Sbdrewery 116289286Sbdrewery.for p in ${PROGS} 117242710Ssjg.if defined(PROGS_CXX) && !empty(PROGS_CXX:M$p) 118242710Ssjg# bsd.prog.mk may need to know this 119242710Ssjgx.$p= PROG_CXX=$p 120241823Smarcel.endif 121241823Smarcel 122288158Sbdrewery# Main PROG target 123242710Ssjg$p ${p}_p: .PHONY .MAKE 124284288Ssjg (cd ${.CURDIR} && \ 125284288Ssjg DEPENDFILE=.depend.$p \ 126294873Sbdrewery NO_SUBDIR=1 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS=t \ 127289669Sbdrewery PROG=$p ${x.$p}) 128241823Smarcel 129288158Sbdrewery# Pseudo targets for PROG, such as 'install'. 130242710Ssjg.for t in ${PROGS_TARGETS:O:u} 131242710Ssjg$p.$t: .PHONY .MAKE 132284288Ssjg (cd ${.CURDIR} && \ 133284288Ssjg DEPENDFILE=.depend.$p \ 134294873Sbdrewery NO_SUBDIR=1 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS=t \ 135289669Sbdrewery PROG=$p ${x.$p} ${@:E}) 136241823Smarcel.endfor 137241823Smarcel.endfor 138241823Smarcel 139288158Sbdrewery# Depend main pseudo targets on all PROG.pseudo targets too. 140242710Ssjg.for t in ${PROGS_TARGETS:O:u} 141295976Sbdrewery.if make(${t}) 142242710Ssjg$t: ${PROGS:%=%.$t} 143295976Sbdrewery.endif 144241823Smarcel.endfor 145289289Sbdrewery.endif # !empty(PROGS) && !defined(_RECURSING_PROGS) && !defined(PROG) 146