xref: /dflybsd-src/contrib/bmake/mk/srctop.mk (revision a34d5fb143d34c0e1d2580296c500e2c8a5bc5dc)
1*a34d5fb1SAntonio Huete Jimenez# $Id: srctop.mk,v 1.4 2020/08/19 17:51:53 sjg Exp $
25f1e34d9SAlexandre Perrin#
35f1e34d9SAlexandre Perrin#	@(#) Copyright (c) 2012, Simon J. Gerraty
45f1e34d9SAlexandre Perrin#
55f1e34d9SAlexandre Perrin#	This file is provided in the hope that it will
65f1e34d9SAlexandre Perrin#	be of use.  There is absolutely NO WARRANTY.
75f1e34d9SAlexandre Perrin#	Permission to copy, redistribute or otherwise
85f1e34d9SAlexandre Perrin#	use this file is hereby granted provided that
95f1e34d9SAlexandre Perrin#	the above copyright notice and this notice are
105f1e34d9SAlexandre Perrin#	left intact.
115f1e34d9SAlexandre Perrin#
125f1e34d9SAlexandre Perrin#	Please send copies of changes and bug-fixes to:
135f1e34d9SAlexandre Perrin#	sjg@crufty.net
145f1e34d9SAlexandre Perrin#
155f1e34d9SAlexandre Perrin
165f1e34d9SAlexandre Perrin.if !defined(SRCTOP)
175f1e34d9SAlexandre Perrin# if using mk(1) SB will be set.
185f1e34d9SAlexandre Perrin.ifdef SB
195f1e34d9SAlexandre Perrin.if ${.CURDIR:S,${SB},,} != ${.CURDIR}
205f1e34d9SAlexandre Perrin# we are actually within SB
215f1e34d9SAlexandre Perrin.ifdef SB_SRC
225f1e34d9SAlexandre PerrinSRCTOP:= ${SB_SRC}
235f1e34d9SAlexandre Perrin.elif exists(${SB}/src)
245f1e34d9SAlexandre PerrinSRCTOP:= ${SB}/src
255f1e34d9SAlexandre Perrin.else
265f1e34d9SAlexandre PerrinSRCTOP:= ${SB}
275f1e34d9SAlexandre Perrin.endif
285f1e34d9SAlexandre Perrin.endif
295f1e34d9SAlexandre Perrin.endif
305f1e34d9SAlexandre Perrin
315f1e34d9SAlexandre Perrin.if !defined(SRCTOP)
325f1e34d9SAlexandre Perrin.for rd in share/mk build/mk mk
335f1e34d9SAlexandre Perrin.if ${_this_mk_dir:M*${rd}} != ""
345f1e34d9SAlexandre Perrin.if ${.CURDIR:S,${_this_mk_dir:${rd:C,[^/]+,H,g:S,/, ,g:ts:}},,} != ${.CURDIR}
355f1e34d9SAlexandre PerrinSRCTOP:= ${_this_mk_dir:${rd:C,[^/]+,H,g:S,/, ,g:ts:}}
365f1e34d9SAlexandre Perrin.endif
375f1e34d9SAlexandre Perrin.endif
385f1e34d9SAlexandre Perrin.endfor
395f1e34d9SAlexandre Perrin.endif
405f1e34d9SAlexandre Perrin
415f1e34d9SAlexandre Perrin.if !defined(SRCTOP)
425f1e34d9SAlexandre Perrin_SRCTOP_TEST_?= [ -f ../.sandbox-env -o -d share/mk ]
435f1e34d9SAlexandre Perrin# Linux at least has a bug where attempting to check an automounter
445f1e34d9SAlexandre Perrin# directory will hang.  So avoid looking above /a/b
455f1e34d9SAlexandre PerrinSRCTOP!= cd ${.CURDIR}; while :; do \
465f1e34d9SAlexandre Perrin		here=`pwd`; \
475f1e34d9SAlexandre Perrin		${_SRCTOP_TEST_} && { echo $$here; break; }; \
485f1e34d9SAlexandre Perrin		case $$here in /*/*/*) cd ..;; *) echo ""; break;; esac; \
495f1e34d9SAlexandre Perrin		done
505f1e34d9SAlexandre Perrin.endif
515f1e34d9SAlexandre Perrin.if defined(SRCTOP) && exists(${SRCTOP}/.)
525f1e34d9SAlexandre Perrin.export SRCTOP
535f1e34d9SAlexandre Perrin.endif
545f1e34d9SAlexandre Perrin.endif
555f1e34d9SAlexandre Perrin
565f1e34d9SAlexandre Perrin.if !defined(OBJTOP) && !empty(SRCTOP)
575f1e34d9SAlexandre Perrin.if defined(MAKEOBJDIRPREFIX) && exists(${MAKEOBJDIRPREFIX}${SRCTOP})
585f1e34d9SAlexandre PerrinOBJTOP= ${MAKEOBJDIRPREFIX}${SRCTOP}
595f1e34d9SAlexandre Perrin.elif (exists(${SRCTOP}/Makefile) || exists(${SRCTOP}/makefile))
605f1e34d9SAlexandre PerrinOBJTOP!= cd ${SRCTOP} && ${PRINTOBJDIR}
615f1e34d9SAlexandre Perrin.endif
625f1e34d9SAlexandre Perrin.if empty(OBJTOP)
635f1e34d9SAlexandre PerrinOBJTOP= ${SRCTOP}
645f1e34d9SAlexandre Perrin.endif
655f1e34d9SAlexandre Perrin.export OBJTOP
665f1e34d9SAlexandre Perrin.endif
67