bsd.progs.mk revision 294873
1139804Simp# $FreeBSD: head/share/mk/bsd.progs.mk 294873 2016-01-27 01:24:08Z bdrewery $ 293835Stmm# $Id: progs.mk,v 1.11 2012/11/06 17:18:54 sjg Exp $ 393835Stmm# 493835Stmm# @(#) Copyright (c) 2006, Simon J. Gerraty 593835Stmm# 693835Stmm# This file is provided in the hope that it will 793835Stmm# be of use. There is absolutely NO WARRANTY. 893835Stmm# Permission to copy, redistribute or otherwise 993835Stmm# use this file is hereby granted provided that 1093835Stmm# the above copyright notice and this notice are 1193835Stmm# left intact. 1293835Stmm# 1393835Stmm# Please send copies of changes and bug-fixes to: 1493835Stmm# sjg@crufty.net 1593835Stmm# 1693835Stmm 1793835Stmm.MAIN: all 1893835Stmm 1993835Stmm.if defined(PROGS) || defined(PROGS_CXX) 2093835Stmm# we really only use PROGS below... 2193835StmmPROGS += ${PROGS_CXX} 2293835Stmm 2393835Stmm# In meta mode, we can capture dependenices for _one_ of the progs. 2493835Stmm# if makefile doesn't nominate one, we use the first. 2593835Stmm.ifndef UPDATE_DEPENDFILE_PROG 2693835StmmUPDATE_DEPENDFILE_PROG = ${PROGS:[1]} 2793835Stmm.export UPDATE_DEPENDFILE_PROG 2893835Stmm.endif 2993835Stmm 3093835Stmm.ifndef PROG 3193835Stmm# They may have asked us to build just one 3293835Stmm.for t in ${PROGS} 3393835Stmm.if make($t) 3493835Stmm.if ${PROGS_CXX:U:M${t}} 3593835StmmPROG_CXX ?= $t 3693835Stmm.endif 3793835StmmPROG ?= $t 3893835Stmm.endif 3993835Stmm.endfor 4093835Stmm.endif 41116182Sobrien 42116182Sobrien.if defined(PROG) 43116182Sobrien# just one of many 4493835StmmPROG_OVERRIDE_VARS += BINDIR BINGRP BINOWN BINMODE DPSRCS MAN NO_WERROR \ 4593835Stmm PROGNAME SRCS WARNS 4693835StmmPROG_VARS += CFLAGS CPPFLAGS CXXFLAGS DPADD DPLIBS LDADD LIBADD LINKS \ 4793835Stmm LDFLAGS MLINKS ${PROG_OVERRIDE_VARS} 4893835Stmm.for v in ${PROG_VARS:O:u} 4993835Stmm.if empty(${PROG_OVERRIDE_VARS:M$v}) 5093835Stmm.if defined(${v}.${PROG}) 5193835Stmm$v += ${${v}.${PROG}} 5293835Stmm.elif defined(${v}_${PROG}) 5393835Stmm$v += ${${v}_${PROG}} 5493835Stmm.endif 5593835Stmm.else 56162960Sphk$v ?= 57162960Sphk.endif 58162960Sphk.endfor 5993835Stmm 6093835Stmm# for meta mode, there can be only one! 6193835Stmm.if ${PROG} == ${UPDATE_DEPENDFILE_PROG} 6293835StmmUPDATE_DEPENDFILE ?= yes 63158450Sphk.endif 6493835StmmUPDATE_DEPENDFILE ?= NO 6593835Stmm 66158450Sphk# prog.mk will do the rest 6793835Stmm.else # !defined(PROG) 6893835Stmmall: ${PROGS} 6993835Stmm 7093835Stmm# We cannot capture dependencies for meta mode here 7193835StmmUPDATE_DEPENDFILE = NO 7293835Stmm.endif 7393835Stmm.endif # PROGS || PROGS_CXX 7493835Stmm 7593835Stmm# These are handled by the main make process. 7693835Stmm.ifdef _RECURSING_PROGS 7793835Stmm_PROGS_GLOBAL_VARS= CLEANFILES CLEANDIRS FILESGROUPS SCRIPTS CONFGROUPS 7893835Stmm.for v in ${_PROGS_GLOBAL_VARS} 7993835Stmm$v = 80162958Sphk.endfor 81162958Sphk.endif 82162958Sphk 83162958Sphk# handle being called [bsd.]progs.mk 84162958Sphk.include <bsd.prog.mk> 85162958Sphk 86162958Sphk.if !empty(PROGS) && !defined(_RECURSING_PROGS) && !defined(PROG) 87162958Sphk# tell progs.mk we might want to install things 88162958SphkPROGS_TARGETS+= checkdpadd clean cleandepend cleandir depend install 89162958Sphk 90162958Sphk# Find common sources among the PROGS and depend on them before building 91162958Sphk# anything. This allows parallelization without them each fighting over 92162958Sphk# the same objects. 93162958Sphk_PROGS_COMMON_SRCS= 94162958Sphk_PROGS_ALL_SRCS= 95162958Sphk.for p in ${PROGS} 96162958Sphk.for s in ${SRCS.${p}} 97162958Sphk.if ${_PROGS_ALL_SRCS:M${s}} && !${_PROGS_COMMON_SRCS:M${s}} 98162958Sphk_PROGS_COMMON_SRCS+= ${s} 99162958Sphk.else 100162958Sphk_PROGS_ALL_SRCS+= ${s} 101162958Sphk.endif 10293835Stmm.endfor 10393835Stmm.endfor 10493835Stmm.if !empty(_PROGS_COMMON_SRCS) 10593835Stmm_PROGS_COMMON_OBJS= ${_PROGS_COMMON_SRCS:M*.[dhly]} 10693835Stmm.if !empty(_PROGS_COMMON_SRCS:N*.[dhly]) 10793835Stmm_PROGS_COMMON_OBJS+= ${_PROGS_COMMON_SRCS:N*.[dhly]:R:S/$/.o/g} 10893835Stmm.endif 10993835Stmm${PROGS}: ${_PROGS_COMMON_OBJS} 11093835Stmm.endif 11193835Stmm 11293835Stmm.for p in ${PROGS} 11393835Stmm.if defined(PROGS_CXX) && !empty(PROGS_CXX:M$p) 11493835Stmm# bsd.prog.mk may need to know this 11593835Stmmx.$p= PROG_CXX=$p 11693835Stmm.endif 11793835Stmm 11893835Stmm# Main PROG target 11993835Stmm$p ${p}_p: .PHONY .MAKE 12093835Stmm (cd ${.CURDIR} && \ 12193835Stmm DEPENDFILE=.depend.$p \ 12293835Stmm NO_SUBDIR=1 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS=t \ 12393835Stmm PROG=$p ${x.$p}) 12493835Stmm 12593835Stmm# Pseudo targets for PROG, such as 'install'. 12693835Stmm.for t in ${PROGS_TARGETS:O:u} 12793835Stmm$p.$t: .PHONY .MAKE 12893835Stmm (cd ${.CURDIR} && \ 12993835Stmm DEPENDFILE=.depend.$p \ 13093835Stmm NO_SUBDIR=1 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS=t \ 13193835Stmm PROG=$p ${x.$p} ${@:E}) 13293835Stmm.endfor 13393835Stmm.endfor 13493835Stmm 13593835Stmm# Depend main pseudo targets on all PROG.pseudo targets too. 13693835Stmm.for t in ${PROGS_TARGETS:O:u} 13793835Stmm$t: ${PROGS:%=%.$t} 13893835Stmm.endfor 13993835Stmm.endif # !empty(PROGS) && !defined(_RECURSING_PROGS) && !defined(PROG) 14093835Stmm