Home | History | Annotate | Line # | Download | only in mk
      1 #	$NetBSD: bsd.obj.mk,v 1.54 2023/06/03 21:23:49 lukem Exp $
      2 
      3 .if !defined(_BSD_OBJ_MK_)
      4 _BSD_OBJ_MK_=1
      5 
      6 .include <bsd.own.mk>
      7 
      8 __curdir:=	${.CURDIR}
      9 
     10 .if ${MKOBJ} == "no"
     11 obj:
     12 .else
     13 .if defined(MAKEOBJDIRPREFIX) || defined(MAKEOBJDIR)
     14 .if defined(MAKEOBJDIRPREFIX)
     15 __objdir:= ${MAKEOBJDIRPREFIX}${__curdir}
     16 .else
     17 __objdir:= ${MAKEOBJDIR}
     18 .endif
     19 # MAKEOBJDIR and MAKEOBJDIRPREFIX are env variables supported
     20 # by make(1).  We simply mkdir -p the specified path.
     21 # If that fails - we do a mkdir to get the appropriate error message
     22 # before bailing out.
     23 obj:
     24 .if defined(MAKEOBJDIRPREFIX)
     25 	@if [ ! -d ${MAKEOBJDIRPREFIX} ]; then \
     26 		echo "MAKEOBJDIRPREFIX ${MAKEOBJDIRPREFIX} does not exist, bailing..."; \
     27 		exit 1; \
     28 	fi;
     29 .endif
     30 .if ${.CURDIR} == ${.OBJDIR}
     31 	@if [ ! -d ${__objdir} ]; then \
     32 		mkdir -p ${__objdir}; \
     33 		if [ ! -d ${__objdir} ]; then \
     34 			mkdir ${__objdir}; exit 1; \
     35 		fi; \
     36 		${_MKSHMSG} " objdir  ${__objdir}"; \
     37 	fi
     38 .endif
     39 .else
     40 PAWD?=		/bin/pwd
     41 
     42 __objdirsuffix=	${OBJMACHINE:D.${MACHINE}${OBJMACHINE_ARCH:D-${MACHINE_ARCH}}}
     43 __objdir=	obj${__objdirsuffix}
     44 
     45 __usrobjdir=	${BSDOBJDIR}${USR_OBJMACHINE:D.${MACHINE}}
     46 __usrobjdirpf=	${USR_OBJMACHINE:D:U${__objdirsuffix}}
     47 
     48 .if defined(BUILDID)
     49 __objdir:=	${__objdir}.${BUILDID}
     50 __usrobjdirpf:=	${__usrobjdirpf}.${BUILDID}
     51 __need_objdir_target=yes
     52 .endif
     53 
     54 .if defined(OBJHOSTMACHINE) && (${MKHOSTOBJ} != "no")
     55 # In case .CURDIR has been twiddled by a .mk file and is now relative,
     56 # make it absolute again.
     57 .if ${__curdir:M/*} == ""
     58 __curdir!=	cd "${__curdir}" && ${PAWD}
     59 .endif
     60 
     61 __objdir:=	${__objdir}.${HOST_OSTYPE}
     62 __usrobjdirpf:=	${__usrobjdirpf}.${HOST_OSTYPE}
     63 __need_objdir_target=yes
     64 .endif
     65 
     66 .if defined(__need_objdir_target)
     67 # Get make to change its internal definition of .OBJDIR
     68 .OBJDIR:	${__objdir}
     69 .endif
     70 
     71 obj:
     72 	@cd "${__curdir}"; \
     73 	here=$$(${PAWD})/; subdir=$${here#${BSDSRCDIR}/}; \
     74 	if [ "$$here" != "$$subdir" ]; then \
     75 		if [ ! -d ${__usrobjdir} ]; then \
     76 			echo "BSDOBJDIR ${__usrobjdir} does not exist, bailing..."; \
     77 			exit 1; \
     78 		fi; \
     79 		subdir=$${subdir%/}; \
     80 		dest=${__usrobjdir}/$$subdir${__usrobjdirpf}; \
     81 		if  [ -x ${TOOL_STAT} ] && \
     82 		    ttarg=$$(${TOOL_STAT} -qf '%Y' $${here}${__objdir}) && \
     83 		    [ "$$dest" = "$$ttarg" ]; then \
     84 			: ; \
     85 		else \
     86 			${_MKSHMSG} " objdir  $$dest"; \
     87 			rm -rf ${__objdir}; \
     88 			ln -s $$dest ${__objdir}; \
     89 		fi; \
     90 		if [ ! -d $$dest ]; then \
     91 			mkdir -p $$dest; \
     92 		else \
     93 			true; \
     94 		fi; \
     95 	else \
     96 		true ; \
     97 		dest=$${here}${__objdir} ; \
     98 		if [ ! -d ${__objdir} ] || [ -h ${__objdir} ]; then \
     99 			${_MKSHMSG} " objdir  $$dest"; \
    100 			rm -f ${__objdir}; \
    101 			mkdir $$dest; \
    102 		fi ; \
    103 	fi;
    104 .endif
    105 .endif
    106 
    107 print-objdir:
    108 	@echo ${.OBJDIR}
    109 
    110 .include <bsd.sys.mk>
    111 
    112 .endif	# !defined(_BSD_OBJ_MK_)
    113