bsd.own.mk revision 263951
11590Srgrimes# $FreeBSD: head/share/mk/bsd.own.mk 263951 2014-03-30 22:24:53Z imp $
21590Srgrimes#
31590Srgrimes# The include file <bsd.own.mk> set common variables for owner,
41590Srgrimes# group, mode, and directories. Defaults are in brackets.
51590Srgrimes#
61590Srgrimes#
71590Srgrimes# +++ variables +++
81590Srgrimes#
91590Srgrimes# DESTDIR	Change the tree where the file gets installed. [not set]
101590Srgrimes#
111590Srgrimes# DISTDIR	Change the tree where the file for a distribution
121590Srgrimes# 		gets installed (see /usr/src/release/Makefile). [not set]
131590Srgrimes#
141590Srgrimes# COMPRESS_CMD	Program to compress documents.
151590Srgrimes#		Output is to stdout. [gzip -cn]
161590Srgrimes#
171590Srgrimes# COMPRESS_EXT	File name extension of ${COMPRESS_CMD} command. [.gz]
181590Srgrimes#
191590Srgrimes# BINOWN	Binary owner. [root]
201590Srgrimes#
211590Srgrimes# BINGRP	Binary group. [wheel]
221590Srgrimes#
231590Srgrimes# BINMODE	Binary mode. [555]
241590Srgrimes#
251590Srgrimes# NOBINMODE	Mode for non-executable files. [444]
261590Srgrimes#
271590Srgrimes# LIBDIR	Base path for libraries. [/usr/lib]
281590Srgrimes#
291590Srgrimes# LIBCOMPATDIR	Base path for compat libraries. [/usr/lib/compat]
3087707Smarkm#
3187707Smarkm# LIBPRIVATEDIR	Base path for private libraries. [/usr/lib/private]
3287707Smarkm#
3387707Smarkm# LIBDATADIR	Base path for misc. utility data files. [/usr/libdata]
341590Srgrimes#
3587707Smarkm# LIBEXECDIR	Base path for system daemons and utilities. [/usr/libexec]
361590Srgrimes#
371590Srgrimes# LINTLIBDIR	Base path for lint libraries. [/usr/libdata/lint]
3887707Smarkm#
391590Srgrimes# SHLIBDIR	Base path for shared libraries. [${LIBDIR}]
401590Srgrimes#
4187707Smarkm# LIBOWN	Library owner. [${BINOWN}]
4265428Simp#
431590Srgrimes# LIBGRP	Library group. [${BINGRP}]
44200462Sdelphij#
45200462Sdelphij# LIBMODE	Library mode. [${NOBINMODE}]
461590Srgrimes#
475080Sache#
481590Srgrimes# DEBUGDIR	Base path for standalone debug files. [/usr/lib/debug]
491590Srgrimes#
5078718Sdd# DEBUGMODE	Mode for debug files. [${NOBINMODE}]
511590Srgrimes#
521590Srgrimes#
535080Sache# KMODDIR	Base path for loadable kernel modules
543031Sdg#		(see kld(4)). [/boot/kernel]
553031Sdg#
5692922Simp# KMODOWN	Kernel and KLD owner. [${BINOWN}]
5792922Simp#
5892922Simp# KMODGRP	Kernel and KLD group. [${BINGRP}]
591590Srgrimes#
601590Srgrimes# KMODMODE	KLD mode. [${BINMODE}]
61102944Sdwmalone#
621590Srgrimes#
631590Srgrimes# SHAREDIR	Base path for architecture-independent ascii
6487707Smarkm#		text files. [/usr/share]
6587707Smarkm#
661590Srgrimes# SHAREOWN	ASCII text file owner. [root]
671590Srgrimes#
6824360Simp# SHAREGRP	ASCII text file group. [wheel]
691590Srgrimes#
701590Srgrimes# SHAREMODE	ASCII text file mode. [${NOBINMODE}]
711590Srgrimes#
721590Srgrimes#
731590Srgrimes# CONFDIR	Base path for configuration files. [/etc]
741590Srgrimes#
751590Srgrimes# CONFOWN	Configuration file owner. [root]
761590Srgrimes#
771590Srgrimes# CONFGRP	Configuration file group. [wheel]
781590Srgrimes#
791590Srgrimes# CONFMODE	Configuration file mode. [644]
80163283Sru#
81163283Sru#
82163283Sru# DOCDIR	Base path for system documentation (e.g. PSD, USD,
831590Srgrimes#		handbook, FAQ etc.). [${SHAREDIR}/doc]
841590Srgrimes#
851590Srgrimes# DOCOWN	Documentation owner. [${SHAREOWN}]
8698218Stjr#
871590Srgrimes# DOCGRP	Documentation group. [${SHAREGRP}]
881590Srgrimes#
891590Srgrimes# DOCMODE	Documentation mode. [${NOBINMODE}]
901590Srgrimes#
911590Srgrimes#
921590Srgrimes# INFODIR	Base path for GNU's hypertext system
931590Srgrimes#		called Info (see info(1)). [${SHAREDIR}/info]
941590Srgrimes#
951590Srgrimes# INFOOWN	Info owner. [${SHAREOWN}]
961590Srgrimes#
971590Srgrimes# INFOGRP	Info group. [${SHAREGRP}]
985080Sache#
991590Srgrimes# INFOMODE	Info mode. [${NOBINMODE}]
1005080Sache#
1015080Sache#
1025080Sache# MANDIR	Base path for manual installation. [${SHAREDIR}/man/man]
1031590Srgrimes#
1041590Srgrimes# MANOWN	Manual owner. [${SHAREOWN}]
1051590Srgrimes#
1061590Srgrimes# MANGRP	Manual group. [${SHAREGRP}]
1071590Srgrimes#
1081590Srgrimes# MANMODE	Manual mode. [${NOBINMODE}]
1091590Srgrimes#
1101590Srgrimes#
1111590Srgrimes# NLSDIR	Base path for National Language Support files
1121590Srgrimes#		installation. [${SHAREDIR}/nls]
1131590Srgrimes#
1141590Srgrimes# NLSOWN	National Language Support files owner. [${SHAREOWN}]
1151590Srgrimes#
1161590Srgrimes# NLSGRP	National Language Support files group. [${SHAREGRP}]
1171590Srgrimes#
1181590Srgrimes# NLSMODE	National Language Support files mode. [${NOBINMODE}]
1191590Srgrimes#
120102944Sdwmalone# INCLUDEDIR	Base path for standard C include files [/usr/include]
1211590Srgrimes
1221590Srgrimes.if !target(__<bsd.own.mk>__)
1231590Srgrimes__<bsd.own.mk>__:
1241590Srgrimes
1251590Srgrimes.if !defined(_WITHOUT_SRCCONF)
1261590SrgrimesSRCCONF?=	/etc/src.conf
1271590Srgrimes.if exists(${SRCCONF}) || ${SRCCONF} != "/etc/src.conf"
1281590Srgrimes.include "${SRCCONF}"
1291590Srgrimes.endif
1301590Srgrimes.endif
1311590Srgrimes
1321590Srgrimes# Binaries
133102944SdwmaloneBINOWN?=	root
1341590SrgrimesBINGRP?=	wheel
13590165SkrisBINMODE?=	555
1361590SrgrimesNOBINMODE?=	444
13790165Skris
1381590Srgrimes.if defined(MODULES_WITH_WORLD)
13990165SkrisKMODDIR?=	/boot/modules
1401590Srgrimes.else
1411590SrgrimesKMODDIR?=	/boot/kernel
1421590Srgrimes.endif
1431590SrgrimesKMODOWN?=	${BINOWN}
1441590SrgrimesKMODGRP?=	${BINGRP}
1451590SrgrimesKMODMODE?=	${BINMODE}
1461590Srgrimes
1471590SrgrimesLIBDIR?=	/usr/lib
1481590SrgrimesLIBCOMPATDIR?=	/usr/lib/compat
1491590SrgrimesLIBPRIVATEDIR?=	/usr/lib/private
1501590SrgrimesLIBDATADIR?=	/usr/libdata
1511590SrgrimesLIBEXECDIR?=	/usr/libexec
1521590SrgrimesLINTLIBDIR?=	/usr/libdata/lint
1531590SrgrimesSHLIBDIR?=	${LIBDIR}
1541590SrgrimesLIBOWN?=	${BINOWN}
1551590SrgrimesLIBGRP?=	${BINGRP}
1561590SrgrimesLIBMODE?=	${NOBINMODE}
1571590Srgrimes
1581590SrgrimesDEBUGDIR?=	/usr/lib/debug
1591590SrgrimesDEBUGMODE?=	${NOBINMODE}
1601590Srgrimes
1611590Srgrimes
1621590Srgrimes# Share files
16397763SacheSHAREDIR?=	/usr/share
16497763SacheSHAREOWN?=	root
16597763SacheSHAREGRP?=	wheel
16697763SacheSHAREMODE?=	${NOBINMODE}
16797763Sache
1681590SrgrimesCONFDIR?=	/etc
1691590SrgrimesCONFOWN?=	root
1701590SrgrimesCONFGRP?=	wheel
1711590SrgrimesCONFMODE?=	644
17224542Sjmg
1731590SrgrimesMANDIR?=	${SHAREDIR}/man/man
1741590SrgrimesMANOWN?=	${SHAREOWN}
1751590SrgrimesMANGRP?=	${SHAREGRP}
1761590SrgrimesMANMODE?=	${NOBINMODE}
1771590Srgrimes
1781590SrgrimesDOCDIR?=	${SHAREDIR}/doc
1791590SrgrimesDOCOWN?=	${SHAREOWN}
1801590SrgrimesDOCGRP?=	${SHAREGRP}
1811590SrgrimesDOCMODE?=	${NOBINMODE}
1821590Srgrimes
1831590SrgrimesINFODIR?=	${SHAREDIR}/info
1841590SrgrimesINFOOWN?=	${SHAREOWN}
1851590SrgrimesINFOGRP?=	${SHAREGRP}
1861590SrgrimesINFOMODE?=	${NOBINMODE}
1871590Srgrimes
1881590SrgrimesNLSDIR?=	${SHAREDIR}/nls
1891590SrgrimesNLSOWN?=	${SHAREOWN}
1901590SrgrimesNLSGRP?=	${SHAREGRP}
1911590SrgrimesNLSMODE?=	${NOBINMODE}
1921590Srgrimes
1931590SrgrimesINCLUDEDIR?=	/usr/include
1941590Srgrimes
1951590Srgrimes#
1961590Srgrimes# install(1) parameters.
1971590Srgrimes#
1981590SrgrimesHRDLINK?=	-l h
1991590SrgrimesSYMLINK?=	-l s
2001590Srgrimes
2011590SrgrimesINSTALL_LINK?=		${INSTALL} ${HRDLINK}
2021590SrgrimesINSTALL_SYMLINK?=	${INSTALL} ${SYMLINK}
2031590Srgrimes
2041590Srgrimes# Common variables
2051590Srgrimes.if !defined(DEBUG_FLAGS)
2061590SrgrimesSTRIP?=		-s
2071590Srgrimes.endif
208102944Sdwmalone
2091590SrgrimesCOMPRESS_CMD?=	gzip -cn
2101590SrgrimesCOMPRESS_EXT?=	.gz
21198218Stjr
2121590Srgrimes.if !defined(_WITHOUT_SRCCONF)
213#
214# Define MK_* variables (which are either "yes" or "no") for users
215# to set via WITH_*/WITHOUT_* in /etc/src.conf and override in the
216# make(1) environment.
217# These should be tested with `== "no"' or `!= "no"' in makefiles.
218# The NO_* variables should only be set by makefiles.
219#
220
221#
222# Supported NO_* options (if defined, MK_* will be forced to "no",
223# regardless of user's setting).
224#
225.for var in \
226    CTF \
227    DEBUG_FILES \
228    INSTALLLIB \
229    MAN \
230    PROFILE
231.if defined(NO_${var})
232MK_${var}:=no
233.endif
234.endfor
235
236#
237# Older-style variables that enabled behaviour when set.
238#
239.if defined(YES_HESIOD)
240WITH_HESIOD=
241.endif
242
243__DEFAULT_YES_OPTIONS = \
244    ACCT \
245    ACPI \
246    AMD \
247    APM \
248    ARM_EABI \
249    ASSERT_DEBUG \
250    AT \
251    ATM \
252    AUDIT \
253    AUTHPF \
254    BINUTILS \
255    BLUETOOTH \
256    BMAKE \
257    BOOT \
258    BSD_CPIO \
259    BSNMP \
260    BZIP2 \
261    CALENDAR \
262    CAPSICUM \
263    CASPER \
264    CDDL \
265    CPP \
266    CROSS_COMPILER \
267    CRYPT \
268    CTM \
269    CXX \
270    DICT \
271    DMAGENT \
272    DYNAMICROOT \
273    ED_CRYPTO \
274    EXAMPLES \
275    FLOPPY \
276    FMTREE \
277    FORMAT_EXTENSIONS \
278    FORTH \
279    FP_LIBC \
280    FREEBSD_UPDATE \
281    GAMES \
282    GCOV \
283    GDB \
284    GNU \
285    GPIB \
286    GPIO \
287    GPL_DTC \
288    GROFF \
289    HTML \
290    ICONV \
291    INET \
292    INET6 \
293    INFO \
294    INSTALLLIB \
295    IPFILTER \
296    IPFW \
297    JAIL \
298    KDUMP \
299    KERBEROS \
300    KERNEL_SYMBOLS \
301    KVM \
302    LDNS \
303    LDNS_UTILS \
304    LEGACY_CONSOLE \
305    LIB32 \
306    LIBPTHREAD \
307    LIBTHR \
308    LOCALES \
309    LOCATE \
310    LPR \
311    LS_COLORS \
312    MAIL \
313    MAILWRAPPER \
314    MAKE \
315    MAN \
316    NCURSESW \
317    NDIS \
318    NETCAT \
319    NETGRAPH \
320    NIS \
321    NLS \
322    NLS_CATALOGS \
323    NS_CACHING \
324    NTP \
325    OPENSSH \
326    OPENSSL \
327    PAM \
328    PC_SYSINSTALL \
329    PF \
330    PKGBOOTSTRAP \
331    PMC \
332    PORTSNAP \
333    PPP \
334    PROFILE \
335    QUOTAS \
336    RCMDS \
337    RCS \
338    RESCUE \
339    ROUTED \
340    SENDMAIL \
341    SETUID_LOGIN \
342    SHAREDOCS \
343    SOURCELESS \
344    SOURCELESS_HOST \
345    SOURCELESS_UCODE \
346    SSP \
347    SVNLITE \
348    SYMVER \
349    SYSCONS \
350    SYSINSTALL \
351    TCSH \
352    TELNET \
353    TEXTPROC \
354    TOOLCHAIN \
355    UNBOUND \
356    USB \
357    UTMPX \
358    WIRELESS \
359    WPA_SUPPLICANT_EAPOL \
360    ZFS \
361    ZONEINFO
362
363__DEFAULT_NO_OPTIONS = \
364    BSD_GREP \
365    CLANG_EXTRAS \
366    CTF \
367    DEBUG_FILES \
368    HESIOD \
369    INSTALL_AS_USER \
370    LLDB \
371    NAND \
372    OFED \
373    OPENSSH_NONE_CIPHER \
374    SHARED_TOOLCHAIN \
375    SVN \
376    TESTS \
377    USB_GADGET_EXAMPLES
378
379#
380# Default behaviour of some options depends on the architecture.  Unfortunately
381# this means that we have to test TARGET_ARCH (the buildworld case) as well
382# as MACHINE_ARCH (the non-buildworld case).  Normally TARGET_ARCH is not
383# used at all in bsd.*.mk, but we have to make an exception here if we want
384# to allow defaults for some things like clang and fdt to vary by target
385# architecture.
386#
387.if defined(TARGET_ARCH)
388__T=${TARGET_ARCH}
389.else
390__T=${MACHINE_ARCH}
391.endif
392.if defined(TARGET)
393__TT=${TARGET}
394.else
395__TT=${MACHINE}
396.endif
397# Clang is only for x86, powerpc and little-endian arm right now, by default.
398.if ${__T} == "amd64" || ${__T} == "i386" || ${__T:Mpowerpc*}
399__DEFAULT_YES_OPTIONS+=CLANG CLANG_FULL
400.elif ${__T} == "arm" || ${__T} == "armv6" || ${__T} == "armv6hf"
401__DEFAULT_YES_OPTIONS+=CLANG
402# GCC is unable to build the full clang on arm, disable it by default.
403__DEFAULT_NO_OPTIONS+=CLANG_FULL
404.else
405__DEFAULT_NO_OPTIONS+=CLANG CLANG_FULL
406.endif
407# Clang the default system compiler only on little-endian arm and x86.
408.if ${__T} == "amd64" || ${__T} == "arm" || ${__T} == "armv6" || \
409    ${__T} == "armv6hf" || ${__T} == "i386"
410__DEFAULT_YES_OPTIONS+=CLANG_IS_CC
411# The pc98 bootloader requires gcc to build and so we must leave gcc enabled
412# for pc98 for now.
413.if ${__TT} == "pc98"
414__DEFAULT_NO_OPTIONS+=GNUCXX
415__DEFAULT_YES_OPTIONS+=GCC
416.else
417__DEFAULT_NO_OPTIONS+=GCC GNUCXX
418.endif
419.else
420# If clang is not cc, then build gcc by default
421__DEFAULT_NO_OPTIONS+=CLANG_IS_CC
422__DEFAULT_YES_OPTIONS+=GCC
423# And if g++ is c++, build the rest of the GNU C++ stack
424.if defined(WITHOUT_CXX)
425__DEFAULT_NO_OPTIONS+=GNUCXX
426.else
427__DEFAULT_YES_OPTIONS+=GNUCXX
428.endif
429.endif
430# FDT is needed only for arm, mips and powerpc
431.if ${__T:Marm*} || ${__T:Mpowerpc*} || ${__T:Mmips*}
432__DEFAULT_YES_OPTIONS+=FDT
433.else
434__DEFAULT_NO_OPTIONS+=FDT
435.endif
436.undef __T
437
438#
439# MK_* options which default to "yes".
440#
441.for var in ${__DEFAULT_YES_OPTIONS}
442.if defined(WITH_${var}) && defined(WITHOUT_${var})
443.error WITH_${var} and WITHOUT_${var} can't both be set.
444.endif
445.if defined(MK_${var})
446.if ${.MAKE.LEVEL} == 0
447.error MK_${var} can't be set by a user.
448.endif
449.else
450.if defined(WITHOUT_${var})
451MK_${var}:=	no
452.else
453MK_${var}:=	yes
454.endif
455.endif
456.endfor
457.undef __DEFAULT_YES_OPTIONS
458
459#
460# MK_* options which default to "no".
461#
462.for var in ${__DEFAULT_NO_OPTIONS}
463.if defined(WITH_${var}) && defined(WITHOUT_${var})
464.error WITH_${var} and WITHOUT_${var} can't both be set.
465.endif
466.if defined(MK_${var})
467.if ${.MAKE.LEVEL} == 0
468.error MK_${var} can't be set by a user.
469.endif
470.else
471.if defined(WITH_${var})
472MK_${var}:=	yes
473.else
474MK_${var}:=	no
475.endif
476.endif
477.endfor
478.undef __DEFAULT_NO_OPTIONS
479
480#
481# Force some options off if their dependencies are off.
482# Order is somewhat important.
483#
484.if ${MK_LIBPTHREAD} == "no"
485MK_LIBTHR:=	no
486.endif
487
488.if ${MK_LDNS} == "no"
489MK_LDNS_UTILS:=	no
490MK_UNBOUND:= no
491.endif
492
493.if ${MK_SOURCELESS} == "no"
494MK_SOURCELESS_HOST:=	no
495MK_SOURCELESS_UCODE:= no
496.endif
497
498.if ${MK_CDDL} == "no"
499MK_ZFS:=	no
500MK_CTF:=	no
501.endif
502
503.if ${MK_CRYPT} == "no"
504MK_OPENSSL:=	no
505MK_OPENSSH:=	no
506MK_KERBEROS:=	no
507.endif
508
509.if ${MK_CXX} == "no"
510MK_CLANG:=	no
511MK_GROFF:=	no
512.endif
513
514.if ${MK_MAIL} == "no"
515MK_MAILWRAPPER:= no
516MK_SENDMAIL:=	no
517MK_DMAGENT:=	no
518.endif
519
520.if ${MK_NETGRAPH} == "no"
521MK_ATM:=	no
522MK_BLUETOOTH:=	no
523.endif
524
525.if ${MK_OPENSSL} == "no"
526MK_OPENSSH:=	no
527MK_KERBEROS:=	no
528.endif
529
530.if ${MK_PF} == "no"
531MK_AUTHPF:=	no
532.endif
533
534.if ${MK_TEXTPROC} == "no"
535MK_GROFF:=	no
536.endif
537
538.if ${MK_TOOLCHAIN} == "no"
539MK_BINUTILS:=	no
540MK_CLANG:=	no
541MK_GCC:=	no
542MK_GDB:=	no
543.endif
544
545.if ${MK_CLANG} == "no"
546MK_CLANG_EXTRAS:= no
547MK_CLANG_FULL:= no
548.endif
549
550#
551# Set defaults for the MK_*_SUPPORT variables.
552#
553
554#
555# MK_*_SUPPORT options which default to "yes" unless their corresponding
556# MK_* variable is set to "no".
557#
558.for var in \
559    BZIP2 \
560    GNU \
561    INET \
562    INET6 \
563    KERBEROS \
564    KVM \
565    NETGRAPH \
566    PAM \
567    WIRELESS
568.if defined(WITH_${var}_SUPPORT) && defined(WITHOUT_${var}_SUPPORT)
569.error WITH_${var}_SUPPORT and WITHOUT_${var}_SUPPORT can't both be set.
570.endif
571.if defined(MK_${var}_SUPPORT)
572.error MK_${var}_SUPPORT can't be set by a user.
573.endif
574.if defined(WITHOUT_${var}_SUPPORT) || ${MK_${var}} == "no"
575MK_${var}_SUPPORT:= no
576.else
577MK_${var}_SUPPORT:= yes
578.endif
579.endfor
580
581#
582# MK_* options whose default value depends on another option.
583#
584.for vv in \
585    GSSAPI/KERBEROS \
586    MAN_UTILS/MAN
587.if defined(WITH_${vv:H}) && defined(WITHOUT_${vv:H})
588.error WITH_${vv:H} and WITHOUT_${vv:H} can't both be set.
589.endif
590.if defined(MK_${vv:H})
591.error MK_${vv:H} can't be set by a user.
592.endif
593.if defined(WITH_${vv:H})
594MK_${vv:H}:=	yes
595.elif defined(WITHOUT_${vv:H})
596MK_${vv:H}:=	no
597.else
598MK_${vv:H}:=	${MK_${vv:T}}
599.endif
600.endfor
601
602#
603# MK_* options that default to "yes" if the compiler is a C++11 compiler.
604#
605.include <bsd.compiler.mk>
606.for var in \
607    LIBCPLUSPLUS
608.if defined(WITH_${var}) && defined(WITHOUT_${var})
609.error WITH_${var} and WITHOUT_${var} can't both be set.
610.endif
611.if defined(MK_${var})
612.if ${.MAKE.LEVEL} == 0
613.error MK_${var} can't be set by a user.
614.endif
615.else
616.if ${COMPILER_FEATURES:Mc++11}
617.if defined(WITHOUT_${var})
618MK_${var}:=	no
619.else
620MK_${var}:=	yes
621.endif
622.else
623.if defined(WITH_${var})
624MK_${var}:=	yes
625.else
626MK_${var}:=	no
627.endif
628.endif
629.endif
630.endfor
631
632.if !${COMPILER_FEATURES:Mc++11}
633MK_LLDB:=	no
634.endif
635
636.if ${MK_CTF} != "no"
637CTFCONVERT_CMD=	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
638.elif defined(.PARSEDIR) || (defined(MAKE_VERSION) && ${MAKE_VERSION} >= 5201111300)
639CTFCONVERT_CMD=
640.else
641CTFCONVERT_CMD=	@:
642.endif 
643
644.if ${MK_INSTALL_AS_USER} != "no"
645_uid!=	id -u
646.if ${_uid} != 0
647.if !defined(USER)
648USER!=	id -un
649.endif
650_gid!=	id -gn
651.for x in BIN CONF DOC INFO KMOD LIB MAN NLS SHARE
652$xOWN=	${USER}
653$xGRP=	${_gid}
654.endfor
655.endif
656.endif
657
658.endif # !_WITHOUT_SRCCONF
659
660# Pointer to the top directory into which tests are installed.  Should not be
661# overriden by Makefiles, but the user may choose to set this in src.conf(5).
662TESTSBASE?= /usr/tests
663
664.endif	# !target(__<bsd.own.mk>__)
665