bsd.progs.mk revision 290870
1241823Smarcel# $FreeBSD: head/share/mk/bsd.progs.mk 290870 2015-11-15 18:51:48Z ngie $ 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# In meta mode, we can capture dependenices for _one_ of the progs. 24242710Ssjg# if makefile doesn't nominate one, we use the first. 25242710Ssjg.ifndef UPDATE_DEPENDFILE_PROG 26242710SsjgUPDATE_DEPENDFILE_PROG = ${PROGS:[1]} 27242710Ssjg.export UPDATE_DEPENDFILE_PROG 28241823Smarcel.endif 29241823Smarcel 30242710Ssjg.ifndef PROG 31242710Ssjg# They may have asked us to build just one 32242710Ssjg.for t in ${PROGS} 33242710Ssjg.if make($t) 34290181Sngie.if ${PROGS_CXX:U:M${t}} 35289289SbdreweryPROG_CXX ?= $t 36289289Sbdrewery.endif 37242710SsjgPROG ?= $t 38241823Smarcel.endif 39242710Ssjg.endfor 40242710Ssjg.endif 41241823Smarcel 42242710Ssjg.if defined(PROG) 43242710Ssjg# just one of many 44290870SngiePROG_OVERRIDE_VARS += BINDIR BINGRP BINOWN BINMODE DPSRCS MAN NO_WERROR \ 45290870Sngie PROGNAME SRCS WARNS 46288160SbdreweryPROG_VARS += CFLAGS CPPFLAGS CXXFLAGS DPADD DPLIBS LDADD LIBADD LINKS \ 47288160Sbdrewery LDFLAGS MLINKS ${PROG_OVERRIDE_VARS} 48242710Ssjg.for v in ${PROG_VARS:O:u} 49272055Sngie.if empty(${PROG_OVERRIDE_VARS:M$v}) 50272055Sngie.if defined(${v}.${PROG}) 51272055Sngie$v += ${${v}.${PROG}} 52272055Sngie.elif defined(${v}_${PROG}) 53272055Sngie$v += ${${v}_${PROG}} 54272055Sngie.endif 55258095Ssjg.else 56258095Ssjg$v ?= 57249770Ssjg.endif 58242710Ssjg.endfor 59241823Smarcel 60242710Ssjg# for meta mode, there can be only one! 61258095Ssjg.if ${PROG} == ${UPDATE_DEPENDFILE_PROG} 62242710SsjgUPDATE_DEPENDFILE ?= yes 63241823Smarcel.endif 64242710SsjgUPDATE_DEPENDFILE ?= NO 65241823Smarcel 66242710Ssjg# prog.mk will do the rest 67289289Sbdrewery.else # !defined(PROG) 68288158Sbdreweryall: ${PROGS} 69241823Smarcel 70242710Ssjg# We cannot capture dependencies for meta mode here 71242710SsjgUPDATE_DEPENDFILE = NO 72241823Smarcel.endif 73288158Sbdrewery.endif # PROGS || PROGS_CXX 74241823Smarcel 75288158Sbdrewery# These are handled by the main make process. 76274079Sngie.ifdef _RECURSING_PROGS 77289085Sbapt_PROGS_GLOBAL_VARS= CLEANFILES CLEANDIRS FILESGROUPS SCRIPTS CONFGROUPS 78288158Sbdrewery.for v in ${_PROGS_GLOBAL_VARS} 79288158Sbdrewery$v = 80288158Sbdrewery.endfor 81274079Sngie.endif 82274079Sngie 83242710Ssjg# handle being called [bsd.]progs.mk 84258095Ssjg.include <bsd.prog.mk> 85241823Smarcel 86289289Sbdrewery.if !empty(PROGS) && !defined(_RECURSING_PROGS) && !defined(PROG) 87249770Ssjg# tell progs.mk we might want to install things 88288201SbdreweryPROGS_TARGETS+= checkdpadd clean cleandepend cleandir depend install 89241823Smarcel 90289286Sbdrewery# Find common sources among the PROGS and depend on them before building 91289286Sbdrewery# anything. This allows parallelization without them each fighting over 92289286Sbdrewery# the same objects. 93289286Sbdrewery_PROGS_COMMON_SRCS= 94289286Sbdrewery_PROGS_ALL_SRCS= 95242710Ssjg.for p in ${PROGS} 96289286Sbdrewery.for s in ${SRCS.${p}} 97289286Sbdrewery.if ${_PROGS_ALL_SRCS:M${s}} && !${_PROGS_COMMON_SRCS:M${s}} 98289286Sbdrewery_PROGS_COMMON_SRCS+= ${s} 99289286Sbdrewery.else 100289286Sbdrewery_PROGS_ALL_SRCS+= ${s} 101289286Sbdrewery.endif 102289286Sbdrewery.endfor 103289286Sbdrewery.endfor 104289286Sbdrewery.if !empty(_PROGS_COMMON_SRCS) 105289286Sbdrewery_PROGS_COMMON_OBJS= ${_PROGS_COMMON_SRCS:N*.h:R:S/$/.o/g} 106289286Sbdrewery${PROGS}: ${_PROGS_COMMON_OBJS} 107289286Sbdrewery.endif 108289286Sbdrewery 109289286Sbdrewery.for p in ${PROGS} 110242710Ssjg.if defined(PROGS_CXX) && !empty(PROGS_CXX:M$p) 111242710Ssjg# bsd.prog.mk may need to know this 112242710Ssjgx.$p= PROG_CXX=$p 113241823Smarcel.endif 114241823Smarcel 115288158Sbdrewery# Main PROG target 116242710Ssjg$p ${p}_p: .PHONY .MAKE 117284288Ssjg (cd ${.CURDIR} && \ 118284288Ssjg DEPENDFILE=.depend.$p \ 119289669Sbdrewery NO_SUBDIR=1 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 120289669Sbdrewery PROG=$p ${x.$p}) 121241823Smarcel 122288158Sbdrewery# Pseudo targets for PROG, such as 'install'. 123242710Ssjg.for t in ${PROGS_TARGETS:O:u} 124242710Ssjg$p.$t: .PHONY .MAKE 125284288Ssjg (cd ${.CURDIR} && \ 126284288Ssjg DEPENDFILE=.depend.$p \ 127289669Sbdrewery NO_SUBDIR=1 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 128289669Sbdrewery PROG=$p ${x.$p} ${@:E}) 129241823Smarcel.endfor 130241823Smarcel.endfor 131241823Smarcel 132288158Sbdrewery# Depend main pseudo targets on all PROG.pseudo targets too. 133242710Ssjg.for t in ${PROGS_TARGETS:O:u} 134242710Ssjg$t: ${PROGS:%=%.$t} 135241823Smarcel.endfor 136289289Sbdrewery.endif # !empty(PROGS) && !defined(_RECURSING_PROGS) && !defined(PROG) 137