diff options
Diffstat (limited to 'devel/bmake/files/mk/whats.mk')
-rw-r--r-- | devel/bmake/files/mk/whats.mk | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/devel/bmake/files/mk/whats.mk b/devel/bmake/files/mk/whats.mk new file mode 100644 index 00000000000..9d94ed67baa --- /dev/null +++ b/devel/bmake/files/mk/whats.mk @@ -0,0 +1,69 @@ +# $Id: whats.mk,v 1.1.1.1 2020/05/24 05:35:53 nia Exp $ +# +# @(#) Copyright (c) 2014-2020, Simon J. Gerraty +# +# This file is provided in the hope that it will +# be of use. There is absolutely NO WARRANTY. +# Permission to copy, redistribute or otherwise +# use this file is hereby granted provided that +# the above copyright notice and this notice are +# left intact. +# +# Please send copies of changes and bug-fixes to: +# sjg@crufty.net +# + +.if ${MK_WHATSTRING:Uno} == "yes" +# it can be useful to embed a what(1) string in binaries +# so that the build location can be seen from a core file. +.if defined(KMOD) +what_thing ?= ${KMOD} +.elif defined(LIB) +what_thing ?= lib${LIB} +.elif defined(PROG) +what_thing ?= ${PROG} +SRCS ?= ${PROG}.c +.elif defined(SHLIB) +what_thing ?= lib${SHLIB} +.endif + +.if !empty(what_thing) +# a unique name that won't conflict with anything +what_uuid = what_${what_thing}_${.CURDIR:T:hash} +what_var = what_${.CURDIR:T:hash} + +SRCS += ${what_uuid}.c +CLEANFILES += ${what_uuid}.c +# we do not need to capture this +SUPPRESS_DEPEND += *${what_uuid}.c + +SB ?= ${SRCTOP:H} +SB_LOCATION ?= ${HOST}:${SB} +# make customization easy +WHAT_LOCATION ?= ${.OBJDIR:S,${SB},${SB_LOCATION},} +WHAT_1 ?= ${what_thing:tu} built ${%Y%m%d:L:localtime} by ${USER} +WHAT_2 ?= ${what_location} +WHAT_LINE_IDS ?= 1 2 +WHAT_NOCMP_LINE_IDS ?= 1 +# you can add other WHAT_* just be sure to set WHAT_LINE_IDS +# and WHAT_NOCMP_LINE_IDS accordingly + +# this works with clang and gcc +what_t = const char __attribute__ ((section(".data"))) +what_location := ${WHAT_LOCATION} + +# this script is done in multiple lines so we can +# use the token ${.OODATE:MNO_META_CMP} +# to prevent the variable parts making this constantly out-of-date +${what_uuid}.c: + echo 'extern const char ${WHAT_LINE_IDS:@i@${what_var}_$i[]@:ts,};' > $@ +.for i in ${WHAT_LINE_IDS} +.if ${WHAT_NOCMP_LINE_IDS:M$i} != "" + echo '${what_t} ${what_var}_$i[] = "@(#)${WHAT_$i}";' >> $@ ${.OODATE:MNO_META_CMP} +.else + echo '${what_t} ${what_var}_$i[] = "@(#)${WHAT_$i}";' >> $@ +.endif +.endfor + +.endif +.endif |