Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 23 Jul 2018 10:21:58 -0600
From:      Ian Lepore <ian@freebsd.org>
To:        Brad Davis <brd@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r336640 - head/share/mk
Message-ID:  <1532362918.1344.145.camel@freebsd.org>
In-Reply-To: <201807231611.w6NGB3gh074167@repo.freebsd.org>
References:  <201807231611.w6NGB3gh074167@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 2018-07-23 at 16:11 +0000, Brad Davis wrote:
> Author: brd
> Date: Mon Jul 23 16:11:03 2018
> New Revision: 336640
> URL: https://svnweb.freebsd.org/changeset/base/336640
> 
> Log:
>   Add the initial DIRS infrastructure for creating directories with the
>   necessary owner, group, mode and flags.
>   
>   Approved by:	bapt (mentor)
>   Differential Revision:	https://reviews.freebsd.org/D16405
> 
> Added:
>   head/share/mk/bsd.dirs.mk   (contents, props changed)
> Modified:
>   head/share/mk/bsd.README
> 
> Modified: head/share/mk/bsd.README
> ==============================================================================
> --- head/share/mk/bsd.README	Mon Jul 23 15:36:55 2018	(r336639)
> +++ head/share/mk/bsd.README	Mon Jul 23 16:11:03 2018	(r336640)
> @@ -22,6 +22,7 @@ bsd.confs.mk		- install of configuration files
>  bsd.cpu.mk		- sets CPU/arch-related variables (included from sys.mk)
>  bsd.crunchgen.mk	- building crunched binaries using crunchgen(1)
>  bsd.dep.mk		- handle Makefile dependencies
> +bsd.dirs.mk		- handle directory creation
>  bsd.doc.mk		- building troff system documents
>  bsd.endian.mk		- TARGET_ENDIAN=1234(little) or 4321 (big) for target
>  bsd.files.mk		- install of general purpose files
> @@ -291,6 +292,18 @@ CFLAGS		Flags to the compiler when creating C objects.
>  CLEANDIRS	Additional files (CLEANFILES) and directories (CLEANDIRS) to
>  CLEANFILES	remove during clean and cleandir targets.  "rm -rf" and
>  		"rm -f" are used, respectively.
> +
> +DIRS		A list of variables referring to directories.  For example:
> +
> +			DIRS+=	FOO
> +			FOO=	/usr/share/foo
> +
> +		Owner, Group, Mode and Flags are handled by FOO_OWN,
> +		FOO_GRP, FOO_MODE and FOO_FLAGS, respectively.
> +
> +		This allows FILESDIR to be set to FOO, and the directory
> +		will be created before the files are installed and the
> +		dependencies will be set correctly.
>  
>  DPADD		Additional dependencies for the program.  Usually used for
>  		libraries.  For example, to depend on the compatibility and
> 
> Added: head/share/mk/bsd.dirs.mk
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/share/mk/bsd.dirs.mk	Mon Jul 23 16:11:03 2018	(r336640)
> @@ -0,0 +1,42 @@
> +# $FreeBSD$
> +#
> +# Directory permissions management.
> +
> +.if !target(____)
> +____:
> +# List of directory variable names to install.  Each variable name's value
> +# must be a full path.  If non-default permissions are desired, _MODE,
> +# _OWN, and _GRP may be specified.
> +DIRS?=
> +
> +.  for dir in ${DIRS:O:u}
> +.    if defined(${dir}) && !empty(${dir})
> +# Set default permissions for a directory
> +${dir}_MODE?=	0755
> +${dir}_OWN?=	root
> +${dir}_GRP?=	wheel
> +.      if defined(${dir}_FLAGS) && !empty(${dir}_FLAGS)
> +${dir}_FLAG=	-f ${${dir}_FLAGS}
> +.      endif
> +
> +.      if defined(NO_ROOT)
> +.        if !defined(${dir}TAGS) || ! ${${dir}TAGS:Mpackage=*}
> +${dir}TAGS+=		package=${${dir}PACKAGE:Uruntime}
> +.        endif
> +${dir}TAG_ARGS=	-T ${${dir}TAGS:[*]:S/ /,/g}
> +.      endif
> +
> +installdirs: installdirs-${dir}
> +
> +installdirs-${dir}: ${DESTDIR}${${dir}}
> +
> +${DESTDIR}${${dir}}:
> +	@${ECHO} installing DIRS ${dir}
> +	${INSTALL} ${${dir}TAG_ARGS} -d -m ${${dir}_MODE} -o ${${dir}_OWN} \
> +		-g ${${dir}_GRP} ${${dir}_FLAG} ${DESTDIR}${${dir}}
> +.    endif
> +
> +realinstall: installdirs-${dir}
> +.  endfor
> +
> +.endif
> 

Having a variable named DIRS seems like asking for name clashes with
peoples' existing makefiles (people do use the freebsd build
infrastructure to build out-of-tree code). Could it be named maybe
CREATEDIRS (taking a precedent-clue from CLEANDIRS)?

-- Ian



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1532362918.1344.145.camel>