Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Jul 2007 21:18:12 GMT
From:      Andrew Pantyukhin <sat@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 124056 for review
Message-ID:  <200707242118.l6OLICKe001247@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=124056

Change 124056 by sat@sat_amilo on 2007/07/24 21:17:24

	- Correct a typo in comment
	
	Submitted by:	remko the spellchecker :-)

Affected files ...

.. //depot/projects/soc2006/gabor_destdir/Mk/bsd.destdir.mk#24 edit

Differences ...

==== //depot/projects/soc2006/gabor_destdir/Mk/bsd.destdir.mk#24 (text+ko) ====

@@ -32,23 +32,49 @@
 #			  work for the chrooted build if necessary.  At
 #			  default, this target is empty.
 #
+# DESTDIR_ENV_LIST
+#			- Contains names of the variables in host environ(7),
+#			  which should be imported into the chrooted environ
+#			  along with their values.
+#			  Default: empty.
+#
+# You can use something like this in host /etc/make.conf to
+# customize per-chroot environment:
+#	.if ${DESTDIR}=/foo/bar
+#	PREFIX=/opt
+#	CFLAGS=-O3 -pipe
+#	DESTDIR_ENV_LIST=PREFIX CFLAGS
+#	.endif
+#
 
 .if !defined(_DESTDIRMKINCLUDED)
 
 _DESTDIRMKINCLUDED=	yes
 
-# Place variable names into DESTDIR_ENV_LIST, which you want to override in
-# the DESTDIR environment from outside.  E.g.:
-#
-# make DESTDIR=/foo/bar PREFIX=/opt DESTDIR_ENV_LIST=PREFIX
-#
-
 DESTDIR_ENV_LIST?=
+DESTDIR_ENV=	DESTDIR= CHROOTED=YES
+.for _var in ${DESTDIR_ENV_LIST:NDESTDIR:NCHROOTED:NPORTSDIR}
+DESTDIR_ENV+=	${_var}="${${_var}}"
+.endfor
 
-DESTDIR_ENV=	DESTDIR= CHROOTED=YES PORTSDIR=${PORTSDIR_TMP_REL}
+WITH_EXPERIMENTAL_DESTDIR?=	no
 
-.for _var in ${DESTDIR_ENV_LIST:NDESTDIR:NCHROOTED:NPORTSDIR}
-DESTDIR_ENV+=	${_var}="${${_var}}"
+# Processing DESTDIR_MOUNT_LIST into something more machine-readable
+# VAR:HOST_PATH:DEST_PATH
+# If HOST_PATH is not a dir
+DESTDIR_MOUNT_LIST?=	PORTSDIR WRKDIR:/123 WRKSRC:/567:/789 ABC
+_DESTDIR_MOUNT_LIST=
+.for _entry in ${DESTDIR_MOUNT_LIST}
+__entry=${_entry}
+.if ${__entry:M*\:*\:*}
+_DESTDIR_MOUNT_LIST+=	${_entry}
+.elif ${__entry:M*\:*}
+_DESTDIR_MOUNT_LIST+=	${_entry}:___temp___
+.else
+.if defined(${_entry}) && !empty(${_entry})
+_DESTDIR_MOUNT_LIST+=	${_entry}:${${_entry}}:___temp___
+.endif
+.endif
 .endfor
 
 .MAIN:	all
@@ -63,71 +89,94 @@
 .endif
 
 .if !target(do-chroot)
-
-PORTSDIR_TMP!=		${MKTEMP} -d ${DESTDIR}/tmp/portsdir.XXXXXX
-PORTSDIR_TMP_REL=	${PORTSDIR_TMP:S,^${DESTDIR},,}
-BUILDDIR=		${.CURDIR:S,^${PORTSDIR},,:S,^,${PORTSDIR_TMP_REL},}
-
-.if defined(WITH_EXPERIMENTAL_DESTDIR)
 do-chroot:
-	@if [ ! -d ${DESTDIR} ]; then \
+	@if [ "${WITH_EXPERIMENTAL_DESTDIR}" = "no" ]; then \
+		${ECHO_CMD} "===>  DESTDIR is experimental, set WITH_EXPERIMENTAL_DESTDIR"; \
+		${ECHO_CMD}	"===>  if you want to use it."; \
+		exit 0; \
+	fi; \
+	if [ ! -d ${DESTDIR} ]; then \
 		${ECHO_MSG} "===>  Directory ${DESTDIR} does not exist"; \
 		${ECHO_MSG} "=> Please set DESTDIR to a valid jail environment."; \
 		exit 1; \
 	fi; \
-	if [ ! -d ${DESTDIR}/tmp ]; then \
+	_destdir=`realpath ${DESTDIR}`; \
+	if [ ! -d $${_destdir}/tmp ]; then \
 		${ECHO_MSG} "===>  Directory ${DESTDIR}/tmp does not exist"; \
-		if mkdir ${DESTDIR}/tmp; then \
-			${ECHO_MSG} "=> tmp subdirectory has been successfully created"; \
+		if mkdir $${_destdir}/tmp; then \
+			${ECHO_MSG} "=> /tmp subdirectory has been successfully created"; \
 		else \
-			${ECHO_MSG} "=> tmp subdirectory could not be created"; \
+			${ECHO_MSG} "=> /tmp subdirectory could not be created"; \
 			exit 2; \
 		fi; \
 	fi; \
-	for _entry in ${DESTDIR_MOUNT_LIST}; do \
-		_var=   `${ECHO_CMD} $${_entry} | ${SED} -e 's/:.*//'`; \
-		_path1= `${ECHO_CMD} $${_entry} | ${SED} -e 's/[^:]*://'`; \
-		_path2= `${ECHO_CMD} $${_path1} | ${SED} -e 's/.*://'`; \
-		echo "$${_var} $${_path1} $${_path2}"; \
-		if [ $${_path1} = $${_path2} ]; then \
-			_tmpdir=	`${MKTEMP} -d ${DESTDIR}/tmp/tmpdir.XXXXXX`; \
-			_tmpdir_rel=	`${ECHO_CMD} $${_tmpdir} | ${SED} -e 's|^${DESTDIR}||'`; \
-			if [ $${_var} = PORTSDIR ]; then \
-				_builddir=	`${ECHO_CMD} ${.CURDIR} | ${SED} -e 's|^${PORTSDIR}||' -e 's|^|$${_tmpdir_rel}|'`; \
+	${ECHO_MSG} "_DESTDIR_MOUNT_LIST=${_DESTDIR_MOUNT_LIST}"; \
+	for _entry in ${_DESTDIR_MOUNT_LIST}; do \
+		${ECHO_MSG} "==> Processing $${_entry}"; \
+		_mount_var=$${_entry%%:*}; \
+		_tp=$${_entry#*:}; \
+		_host_path=`realpath $${_tp%:*}`; \
+		_dest_path=$${_entry##*:}; \
+		_full_dest_path=`realpath $${_destdir}/$${_dest_path}`; \
+		_mounted_entries_list=""; \
+		_created_mountpoints_list=""; \
+		_entry_was_created=0; \
+		_entry_should_mount=0; \
+		echo "$${_mount_var}:$${_host_path}:$${_full_dest_path}"; \
+		if [ "$${_dest_path}" = "___temp___" ]; then \
+			echo "Creating temporary mount point"; \
+			if _full_dest_path=`${MKTEMP} -d $${_destdir}/tmp/mountpoint.XXXXXX`; then \
+				echo "Temporary mount point $${_full_dest_path} created successfully"; \
+				_entry_was_created=1; \
+				_entry_should_mount=1; \
+				_dest_path=$${_full_dest_path#$${_destdir}/}; \
+				_created_mountpoints_list="$${_created_mountpoints_list} ${_full_dest_path}"; \
+			else \
+				echo "Failed to create temporary mount point"; \
+				exit 9; \
 			fi; \
-			_tmp=	"$${_destdir_env}"; \
-			_destdir_env=	"$${_tmp} $${_var}=$${_tmpdir_rel}"; \
-			echo "$${_destdir_env}"; \
-			${MOUNT_NULLFS} $${_path1} ${DESTDIR}${_tmpdir_rel}; \
 		else \
-			if [ $${_var} = PORTSDIR ]; then \
-				_builddir=      `${ECHO_CMD} ${.CURDIR} | ${SED} -e 's|^${PORTSDIR}||' -e 's|^|$${_tmpdir_rel}|'`; \
+			echo "Checking if already mounted"; \
+			if ${MOUNT}|grep -qs "^$${_host_path} on $${_full_dest_path} ("; then \
+				echo "$${_host_path} is already mounted on $${_full_dest_path}"; \
+			else \
+				echo "$${_host_path} is not mounted on $${_full_dest_path}"; \
+				_entry_should_mount=1; \
+			fi; \
 		fi; \
-			_tmp=	"$${_destdir_env}"; \
-			_destdir_env=	"$${_tmp} $${_var}=$${_path2}"; \
-			${MOUNT_NULLFS} $${_path1} ${DESTDIR}/$${_path2}; \
-		fi; \
+		[ -d $${_full_dest_path} ] || \
+			if mkdir $${_full_dest_path}; then \
+				echo "Mount point $${_full_dest_path} created"; \
+				_entry_was_created=1; \
+				_created_mountpoints_list="$${_created_mountpoints_list} ${_full_dest_path}"; \
+			else \
+				echo "Mount point $${_full_dest_path} could not be created"; \
+				exit 7; \
+			fi; \
+		[ "$${_entry_should_mount}" = "0" ] || \
+			if ${MOUNT_NULLFS} $${_host_path} $${_full_dest_path}; then \
+				echo "Dir $${_host_path} mounted"; \
+				_mounted_entries_list="$${_mounted_entries_list} $${_full_dest_path}"; \
+			else \
+				echo "Dir $${_host_path} could not be mounted"; \
+				[ "$${_entry_was_created}" = "0" ]||rmdir $${_full_dest_path}; \
+				exit 8; \
+			fi; \
 	done; \
 	echo "$${_destdir_env}"; \
-	found=0; \
-	for _entry in `${MOUNT} | ${GREP} devfs | ${AWK} {'print $$3'}`; do \
-		if [ `${REALPATH} $${_entry}` = `${REALPATH} ${DESTDIR}/dev` ]; then \
-			found=1; \
-		fi; \
+	${ECHO_CMD} "Things we mounted: $${_mounted_entries_list};" \
+	${ECHO_CMD} "Things we created: $${_created_mountpoints_list};" \
+	${ECHO_CMD} "===>  Starting chrooted make in ${DESTDIR}..."; \
+	${CHROOT} $${_destdir} ${SH} -c "(cd $${_builddir}; \
+		${SETENV} -i ${DESTDIR_ENV} $${_destdir_env} ${MAKE} ${.TARGETS})"; \
+	${ECHO_CMD} "===>  Chrooted make in ${DESTDIR} finished. Cleaning up..."; \
+	for _entry in $${_mounted_entries_list}; do \
+		umount -f $${_entry}; \
+	done; \
+	for _entry in $${_created_mountpoints_list}; do \
+		rmdir $${_entry}; \
 	done; \
-	if [ $${found} = 0 ]; then \
-		${ECHO_CMD} "===>  Mounting devfs into ${DESTDIR}..."; \
-		${MOUNT_DEVFS} ${DESTDIR}/dev; \
-	fi; \
-	${ECHO_CMD} "===>  Starting chrooted make in ${DESTDIR}..."; \
-	${CHROOT} ${DESTDIR} ${SH} -c "(cd $${_builddir}; ${SETENV} -i ${DESTDIR_ENV} $${_destdir_env} ${MAKE} ${.TARGETS})"
-.else
-do-chroot:
-	@${ECHO_CMD}	"===>  DESTDIR is experimental, set WITH_EXPERIMENTAL_DESTDIR"; \
-	${ECHO_CMD}	"===>  if you want to use it."; \
-	${FALSE}
-.endif
-
-.endif
-
-.endif
+	${ECHO_CMD} "===> Congratulations!"; \
+	exit 0
+.endif	# !target(do-chroot)
+.endif	# !defined(_DESTDIRMKINCLUDED)



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