1# $Id: own.mk,v 1.51 2024/11/12 17:40:13 sjg Exp $ 2 3# should be set properly in sys.mk 4_this ?= ${.PARSEFILE:S,bsd.,,} 5 6.if !target(__${_this}__) 7__${_this}__: .NOTMAIN 8 9.if !target(__init.mk__) 10.include "init.mk" 11.endif 12 13.if !defined(NOMAKECONF) && !defined(NO_MAKECONF) 14MAKECONF?= /etc/mk.conf 15.-include "${MAKECONF}" 16.endif 17 18.include <host-target.mk> 19 20TARGET_OSNAME?= ${_HOST_OSNAME} 21TARGET_OSREL?= ${_HOST_OSREL} 22TARGET_OSTYPE?= ${HOST_OSTYPE} 23TARGET_HOST?= ${HOST_TARGET} 24 25# these may or may not exist 26.-include <${TARGET_HOST}.mk> 27.-include <config.mk> 28 29RM?= rm 30LN?= ln 31INSTALL?= install 32 33prefix?= /usr 34.if exists(${prefix}/lib) 35libprefix?= ${prefix} 36.else 37libprefix?= /usr 38.endif 39 40# FreeBSD at least does not set this 41MACHINE_ARCH?= ${MACHINE} 42# we need to make sure these are defined too in case sys.mk fails to. 43 44# for suffix rules 45IMPFLAGS?= ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} 46.for s in .c .cc 47COMPILE.$s += ${IMPFLAGS} 48LINK.$s += ${IMPFLAGS} 49.endfor 50 51PRINT.VAR.MAKE = MAKESYSPATH=${MAKESYSPATH:U${.PARSEDIR}} ${.MAKE} 52.if empty(.MAKEFLAGS:M-V*) 53.if defined(MAKEOBJDIRPREFIX) || defined(MAKEOBJDIR) 54PRINTOBJDIR= ${PRINT.VAR.MAKE} -r -V .OBJDIR -f /dev/null xxx 55.else 56PRINTOBJDIR= ${PRINT.VAR.MAKE} -V .OBJDIR 57.endif 58.else 59PRINTOBJDIR= echo # prevent infinite recursion 60.endif 61 62# we really like to have SRCTOP and OBJTOP defined... 63.if !defined(SRCTOP) || !defined(OBJTOP) 64.-include <srctop.mk> 65.endif 66 67.if !defined(SRCTOP) || !defined(OBJTOP) 68# dpadd.mk is rather pointless without these 69OPTIONS_DEFAULT_NO+= DPADD_MK 70.endif 71 72# process options 73OPTIONS_DEFAULT_NO+= \ 74 DEBUG \ 75 INSTALL_AS_USER \ 76 GPROF \ 77 PROG_LDORDER_MK \ 78 LIBTOOL \ 79 LINT \ 80 81OPTIONS_DEFAULT_YES+= \ 82 ARCHIVE \ 83 AUTODEP \ 84 CRYPTO \ 85 DOC \ 86 DPADD_MK \ 87 GDB \ 88 KERBEROS \ 89 LINKLIB \ 90 MAN \ 91 NLS \ 92 OBJ \ 93 PIC \ 94 SHARE \ 95 SKEY \ 96 YP \ 97 98OPTIONS_DEFAULT_DEPENDENT+= \ 99 CATPAGES/MAN \ 100 DEBUG_RUST/DEBUG \ 101 LDORDER_MK/PROG_LDORDER_MK \ 102 OBJDIRS/OBJ \ 103 PICINSTALL/LINKLIB \ 104 PICLIB/PIC \ 105 PROFILE/LINKLIB \ 106 STAGING_MAN/STAGING \ 107 STAGING_PROG/STAGING \ 108 STAGING_RUST/STAGING_PROG \ 109 110.include <options.mk> 111 112.if ${MK_INSTALL_AS_USER} == "yes" 113# We ignore this if user is root. 114_uid:= ${.MAKE.UID:U${id -u:L:sh}} 115.if ${_uid} != 0 116.if !defined(USERGRP) 117USERGRP:= ${.MAKE.GID:U${id -g:L:sh}} 118.export USERGRP 119.endif 120.for x in BIN CONF DOC INC INFO FILES KMOD LIB MAN NLS PROG SHARE 121$xOWN= ${USER} 122$xGRP= ${USERGRP} 123$x_INSTALL_OWN= 124.endfor 125.endif 126.endif 127 128# override this in sys.mk 129ROOT_GROUP?= wheel 130BINGRP?= ${ROOT_GROUP} 131BINOWN?= root 132BINMODE?= 555 133NONBINMODE?= 444 134DIRMODE?= 755 135 136INCLUDEDIR?= ${prefix}/include 137INCDIR?= ${INCLUDEDIR} 138 139# Define MANZ to have the man pages compressed (gzip) 140#MANZ= 1 141 142MANDIR?= ${prefix}/share/man 143MANGRP?= ${BINGRP} 144MANOWN?= ${BINOWN} 145MANMODE?= ${NONBINMODE} 146 147INCLUDEDIR?= ${libprefix}/include 148LIBDIR?= ${libprefix}/lib 149SHLIBDIR?= ${libprefix}/lib 150.if ${USE_SHLIBDIR:Uno} == "yes" 151_LIBSODIR?= ${SHLIBDIR} 152.else 153_LIBSODIR?= ${LIBDIR} 154.endif 155# this is where ld.*so lives 156SHLINKDIR?= /usr/libexec 157LINTLIBDIR?= ${libprefix}/libdata/lint 158LIBGRP?= ${BINGRP} 159LIBOWN?= ${BINOWN} 160LIBMODE?= ${NONBINMODE} 161 162DOCDIR?= ${prefix}/share/doc 163DOCGRP?= ${BINGRP} 164DOCOWN?= ${BINOWN} 165DOCMODE?= ${NONBINMODE} 166 167NLSDIR?= ${prefix}/share/nls 168NLSGRP?= ${BINGRP} 169NLSOWN?= ${BINOWN} 170NLSMODE?= ${NONBINMODE} 171 172KMODDIR?= ${prefix}/lkm 173KMODGRP?= ${BINGRP} 174KMODOWN?= ${BINOWN} 175KMODMODE?= ${NONBINMODE} 176 177SHAREGRP?= ${BINGRP} 178SHAREOWN?= ${BINOWN} 179SHAREMODE?= ${NONBINMODE} 180 181COPY?= -c 182STRIP_FLAG?= -s 183 184.if ${TARGET_OSNAME} == "NetBSD" 185.if exists(/usr/libexec/ld.elf_so) 186OBJECT_FMT=ELF 187.endif 188OBJECT_FMT?=a.out 189.endif 190# sys.mk should set something appropriate if need be. 191OBJECT_FMT?=ELF 192 193.if (${_HOST_OSNAME} == "FreeBSD") 194CFLAGS+= ${CPPFLAGS} 195.endif 196 197# allow for per target flags 198# apply the :T:R first, so the more specific :T can override if needed 199CPPFLAGS += ${CPPFLAGS_${.TARGET:T:R}} ${CPPFLAGS_${.TARGET:T}} 200CFLAGS += ${CFLAGS_${.TARGET:T:R}} ${CFLAGS_${.TARGET:T}} 201 202# Define SYS_INCLUDE to indicate whether you want symbolic links to the system 203# source (``symlinks''), or a separate copy (``copies''); (latter useful 204# in environments where it's not possible to keep /sys publicly readable) 205#SYS_INCLUDE= symlinks 206 207# don't try to generate PIC versions of libraries on machines 208# which don't support PIC. 209.if (${MACHINE_ARCH} == "vax") || \ 210 ((${MACHINE_ARCH} == "mips") && defined(STATIC_TOOLCHAIN)) || \ 211 ((${MACHINE_ARCH} == "alpha") && defined(ECOFF_TOOLCHAIN)) 212MK_PIC=no 213.endif 214 215# No lint, for now. 216NOLINT= 217 218 219.if ${MK_LINKLIB} == "no" 220MK_PICINSTALL= no 221MK_PROFILE= no 222.endif 223 224.if ${MK_MAN} == "no" 225MK_CATPAGES= no 226.endif 227 228.if ${MK_OBJ} == "no" 229MK_OBJDIRS= no 230MK_AUTO_OBJ= no 231.endif 232 233.if ${MK_SHARE} == "no" 234MK_CATPAGES= no 235MK_DOC= no 236MK_INFO= no 237MK_MAN= no 238MK_NLS= no 239.endif 240 241# :U incase not using our sys.mk 242.if ${MK_META_MODE:Uno} == "yes" 243# should all be set by sys.mk if not default 244TARGET_SPEC_VARS ?= MACHINE 245.if ${MAKE_VERSION} >= 20120325 246.if ${TARGET_SPEC_VARS:[#]} > 1 247TARGET_SPEC_VARS_REV := ${TARGET_SPEC_VARS:[-1..1]} 248.else 249TARGET_SPEC_VARS_REV = ${TARGET_SPEC_VARS} 250.endif 251.endif 252.if ${MK_STAGING} == "yes" 253STAGE_ROOT?= ${OBJROOT}/stage 254STAGE_OBJTOP?= ${STAGE_ROOT}/${TARGET_SPEC_VARS_REV:@v@${$v}@:ts/} 255.endif 256.endif 257 258.endif 259