From baptiste.daroussin@gmail.com  Fri Apr 17 15:29:48 2009
Return-Path: <baptiste.daroussin@gmail.com>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 73B561065693
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 17 Apr 2009 15:29:48 +0000 (UTC)
	(envelope-from baptiste.daroussin@gmail.com)
Received: from mail-bw0-f165.google.com (mail-bw0-f165.google.com [209.85.218.165])
	by mx1.freebsd.org (Postfix) with ESMTP id 960238FC08
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 17 Apr 2009 15:29:47 +0000 (UTC)
	(envelope-from baptiste.daroussin@gmail.com)
Received: by bwz9 with SMTP id 9so350405bwz.43
        for <FreeBSD-gnats-submit@freebsd.org>; Fri, 17 Apr 2009 08:29:46 -0700 (PDT)
Received: by 10.204.118.207 with SMTP id w15mr2402532bkq.126.1239982177689;
        Fri, 17 Apr 2009 08:29:37 -0700 (PDT)
Received: from wicklow.lan (stc92-3-82-245-249-89.fbx.proxad.net [82.245.249.89])
        by mx.google.com with ESMTPS id 13sm3462034fks.14.2009.04.17.08.29.36
        (version=TLSv1/SSLv3 cipher=RC4-MD5);
        Fri, 17 Apr 2009 08:29:36 -0700 (PDT)
Received: by wicklow.lan (Postfix, from userid 0)
	id E8669F1920; Fri, 17 Apr 2009 17:29:34 +0200 (CEST)
Message-Id: <20090417152934.E8669F1920@wicklow.lan>
Date: Fri, 17 Apr 2009 17:29:34 +0200 (CEST)
From: Bapt <baptiste.daroussin@gmail.com>
Reply-To: Bapt <baptiste.daroussin@gmail.com>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [PATCH] implements fakeroot for the ports
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         133815
>Category:       ports
>Synopsis:       [PATCH] bsd.port.mk: implements fakeroot for the ports
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    portmgr
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Fri Apr 17 15:30:00 UTC 2009
>Closed-Date:    Wed Oct 09 11:55:06 UTC 2013
>Last-Modified:  Wed Oct 09 11:55:06 UTC 2013
>Originator:     Bapt
>Release:        FreeBSD 8.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD wicklow.lan 8.0-CURRENT FreeBSD 8.0-CURRENT #9: Thu Mar 26 08:18:05 CET 2009 root@wicklow.lan:/usr/obj/usr/src/sys/WICKLOW i386


	
>Description:
	I imported and modified a bit the fakeroot implementation from MidnightBSD mports
for now, it works with DESTDIR, with most of the ports out of box, the only one I found that require a modification is lang/php5 which need DESTDIRNAME= INSTALL_ROOT in the Makefile
it first create a package with the content of the fakeroot following the pkg-plist (using pkg_create) and than install the package.

It needs some more cleanup and it needs some reviewing from people that have a better understanding of the whole Mk files and process than I do.

>How-To-Repeat:
	
>Fix:

	

--- Mk-fake.patch begins here ---
diff -Naur Mk.orig/bsd.fake.mk Mk/bsd.fake.mk
--- Mk.orig/bsd.fake.mk	2009-04-17 15:03:39.000000000 +0200
+++ Mk/bsd.fake.mk	2009-04-17 17:57:29.000000000 +0200
@@ -71,7 +71,6 @@
 .if !target(fake-pre-su-install)
 fake-pre-su-install:
 .if !target(pre-su-install)
-		@${ECHO_MSG} "===>   WARNING: pre-su-install is deprecated.Use pre-install instead."
 		@cd ${.CURDIR} && exec ${MAKE} pre-su-install ${FAKE_SETUP}
 .endif
 .endif
@@ -79,7 +78,7 @@
 
 .if !target(do-fake) 
 do-fake:
-.if !target(do-install)
+.if target(do-install)
 		@cd ${.CURDIR} && exec ${MAKE} do-install ${FAKE_SETUP}
 .else
 		@cd ${.CURDIR} && exec ${MAKE} run-fake
@@ -94,13 +93,14 @@
 .endif
 
 
-run-fake:
-	@cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKE_SETUP}\
-		${MAKE}  -f ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET};
-.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
-		@cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKE_SETUP}\
-			${MAKE} -f ${MAKEFILE} ${FAKE_MAKEARGS} install.man
-.endif
+#run-fake:
+#	@cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKE_SETUP}\
+#		${MAKE}  -f ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET};
+#.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
+#		@cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKE_SETUP}\
+#			${MAKE} -f ${MAKEFILE} ${FAKE_MAKEARGS} install.man
+#.endif
+
 
 
 .if !target(fix-fake-symlinks) 
diff -Naur Mk.orig/bsd.gecko.mk Mk/bsd.gecko.mk
--- Mk.orig/bsd.gecko.mk	2009-04-13 03:38:03.000000000 +0200
+++ Mk/bsd.gecko.mk	2009-04-17 17:56:34.000000000 +0200
@@ -565,7 +565,7 @@
 .if !defined(NOGECKO_PLIST)
 	@${RM} -rf ${FAKEDIR} ${PLIST} ${PLISTD} ${PLISTF}
 	@${TOUCH} -f ${PLIST} ${PLISTD} ${PLISTF}
-	@cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} \
+	@cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKE_SETUP} ${GMAKE} ${FAKE_MAKEARGS} \
 		${MAKEFILE} ${MAKE_ARGS} prefix=${FAKEDIR} ${INSTALL_TARGET}
 .if defined(MOZILLA_SUFX) && ${MOZILLA_SUFX}!="none"
 	${MV} ${FAKEDIR}/bin/${MOZILLA:S/${MOZILLA_SUFX}//} ${FAKEDIR}/bin/${MOZILLA}
diff -Naur Mk.orig/bsd.gnustep.mk Mk/bsd.gnustep.mk
--- Mk.orig/bsd.gnustep.mk	2009-03-20 10:14:26.000000000 +0100
+++ Mk/bsd.gnustep.mk	2009-04-17 17:56:34.000000000 +0200
@@ -531,11 +531,11 @@
 .if defined(USE_GNUSTEP_MAKE_DIRS)
 .for i in ${USE_GNUSTEP_MAKE_DIRS}
 	@(cd ${INSTALL_WRKSRC}/${i}; . ${GNUSTEP_MAKEFILES}/GNUstep.sh; \
-		${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET})
+		${SETENV} ${MAKE_ENV} ${GMAKE} ${FAKE_MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET})
 .endfor
 .else
 	@(cd ${INSTALL_WRKSRC}; . ${GNUSTEP_MAKEFILES}/GNUstep.sh; \
-		${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET})
+		${SETENV} ${MAKE_ENV} ${FAKE_SETUP} ${GMAKE} ${FAKE_MAKEARGS} ${MAKEFILE} ${INSTALL_TARGET})
 .endif
 .if defined(PACKAGE_BUILDING) || defined(BATCH) || defined(CLEAN_ROOT)
 	rm -rf /root/GNUstep
diff -Naur Mk.orig/bsd.perl.mk Mk/bsd.perl.mk
--- Mk.orig/bsd.perl.mk	2009-03-28 21:45:06.000000000 +0100
+++ Mk/bsd.perl.mk	2009-04-17 17:56:34.000000000 +0200
@@ -263,7 +263,7 @@
 .if !defined(USE_GMAKE)
 .if !target(do-install)
 do-install:
-	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
+	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${FAKE_SETUP} ${PERL5} ${PL_BUILD} ${FAKE_MAKEARGS} ${INSTALL_TARGET})
 .endif # !target(do-install)
 .endif # !defined(USE_GMAKE)
 .endif # defined(PERL_MODBUILD)
diff -Naur Mk.orig/bsd.php.mk Mk/bsd.php.mk
--- Mk.orig/bsd.php.mk	2009-03-06 11:08:32.000000000 +0100
+++ Mk/bsd.php.mk	2009-04-17 17:56:34.000000000 +0200
@@ -34,7 +34,6 @@
 .if !defined(_PHPMKINCLUDED)
 
 PHP_Include_MAINTAINER=	ale@FreeBSD.org
-
 _PHPMKINCLUDED=	yes
 
 PHPBASE?=	${LOCALBASE}
@@ -191,10 +190,10 @@
 		>> ${TMPPLIST}
 	@${ECHO_CMD} "@unexec rmdir %D/lib/php/${PHP_EXT_DIR} 2> /dev/null || true" \
 		>> ${TMPPLIST}
-	@${FIND} -P ${PREFIX}/include/php/ext/${PHP_MODNAME} ! -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
-	@${FIND} -P -d ${PREFIX}/include/php/ext/${PHP_MODNAME} -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
+	@${FIND} -P ${FAKE_DESTDIR}${PREFIX}/include/php/ext/${PHP_MODNAME} ! -type d 2>/dev/null | \
+		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
+	@${FIND} -P -d ${FAKE_DESTDIR}${PREFIX}/include/php/ext/${PHP_MODNAME} -type d 2>/dev/null | \
+		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 	@${ECHO_CMD} "@exec echo \#include \\\"ext/${PHP_MODNAME}/config.h\\\" >> %D/include/php/ext/php_config.h" \
 		>> ${TMPPLIST}
 	@${ECHO_CMD} "@unexec cp %D/include/php/ext/php_config.h %D/include/php/ext/php_config.h.orig" \
diff -Naur Mk.orig/bsd.port.mk Mk/bsd.port.mk
--- Mk.orig/bsd.port.mk	2009-04-10 00:40:20.000000000 +0200
+++ Mk/bsd.port.mk	2009-04-17 17:56:34.000000000 +0200
@@ -1423,6 +1423,10 @@
 LDCONFIG_PLIST_UNEXEC_CMD?=	${LDCONFIG} -R
 .endif
 
+# Fake targets override this when they submake.
+TRUE_PREFIX?=		${PREFIX} 
+
+
 PKGCOMPATDIR?=		${LOCALBASE}/lib/compat/pkg
 
 # XXX to remain undefined until all ports that require Perl are fixed
@@ -1565,6 +1569,9 @@
 .include "${PORTSDIR}/Mk/bsd.kde4.mk"
 .endif
 
+# include bsd.fake.mk
+.include "${PORTSDIR}/Mk/bsd.fake.mk"
+
 # You can force skipping these test by defining IGNORE_PATH_CHECKS
 .if !defined(IGNORE_PATH_CHECKS)
 .if (${PREFIX:C,(^.).*,\1,} != "/")
@@ -2145,6 +2152,9 @@
 BUILD_COOKIE?=		${WRKDIR}/.build_done.${PORTNAME}.${PREFIX:S/\//_/g}
 PATCH_COOKIE?=		${WRKDIR}/.patch_done.${PORTNAME}.${PREFIX:S/\//_/g}
 PACKAGE_COOKIE?=	${WRKDIR}/.package_done.${PORTNAME}.${PREFIX:S/\//_/g}
+FAKE_COOKIE?=		${WRKDIR}/.fake_done.${PORTNAME}.${PREFIX:S/\//_/g}
+
+
 
 # How to do nothing.  Override if you, for some strange reason, would rather
 # do something.
@@ -2346,6 +2356,8 @@
 					${FIND} -d $$0 $$2 -type f -exec chmod ${SHAREMODE} $$1/{} \;' --
 .endif
 
+#TODO Check the import the bsd.mport.mlk line 1057
+#TODO Check the removal of the following
 # The user can override the NO_PACKAGE by specifying this from
 # the make command line
 .if defined(FORCE_PACKAGE)
@@ -2384,7 +2396,8 @@
 .endif
 
 .if !defined(PKG_ARGS)
-PKG_ARGS=		-v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
+PKG_ARGS=		-v -S ${FAKE_DESTDIR} -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
+
 .if !defined(NO_MTREE)
 PKG_ARGS+=		-m ${MTREE_FILE}
 .endif
@@ -2976,6 +2989,10 @@
 .endif
 .endfor
 
+.for ___link in ${_MLINKS}
+_FAKE_MLINKS += ${FAKE_DESTDIR}${___link}
+.endfor
+
 # XXX 20040119 This next line should read:
 # .for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
 # but there is currently a bug in make(1) that prevents the double-quote
@@ -3027,6 +3044,10 @@
 
 .endif
 
+.for m in ${_MANPAGES}
+_FAKEMAN += ${FAKE_DESTDIR}${m}
+.endfor
+
 .if ${PREFIX} == /usr
 INFO_PATH?=	share/info
 .else
@@ -3172,7 +3193,7 @@
 IGNORECMD=	${ECHO_MSG} "===>  ${PKGNAME} "${IGNORE:Q}.;exit 1
 .endif
 
-.for target in check-sanity fetch checksum extract patch configure all build install reinstall package
+.for target in check-sanity fetch checksum extract patch configure all build fake install reinstall package
 .if !target(${target})
 ${target}:
 	@${IGNORECMD}
@@ -3292,7 +3313,7 @@
 
 # Disable install
 .if defined(NO_INSTALL) && !target(install)
-install: build
+fake: build
 	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
 .endif
 
@@ -3734,17 +3755,17 @@
 
 # Install
 
-.if !target(do-install)
-do-install:
+.if !target(run-fake)
+run-fake:
 .if defined(USE_GMAKE)
-	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
+	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
 .if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
-	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
+	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV}  ${MAKE_SETUP}${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
 .endif
 .else # !defined(USE_GMAKE)
-	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
+	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
 .if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
-	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
+	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
 .endif
 .endif
 .endif
@@ -3839,6 +3860,15 @@
 	@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} -f ${PKGFILE})"
 .endif
 
+#
+# This is the real install.
+#
+.if !target(install-package)
+install-package:
+	@${PKG_ADD} ${PKGFILE}
+.endif
+
+
 # Utility targets follow
 
 .if !target(check-already-installed)
@@ -4174,20 +4204,34 @@
 _BUILD_DEP=		configure
 _BUILD_SEQ=		build-message pre-build pre-build-script do-build \
 				post-build post-build-script
-_INSTALL_DEP=	build
-_INSTALL_SEQ=	install-message check-conflicts \
-				run-depends lib-depends apply-slist pre-install \
-				pre-install-script generate-plist check-already-installed
-_INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
-				pre-su-install-script do-install install-desktop-entries \
-				post-install post-install-script add-plist-info \
-				add-plist-docs add-plist-examples add-plist-data \
-				add-plist-post install-rc-script compress-man \
-				install-ldconfig-file fake-pkg security-check
-_PACKAGE_DEP=	install
+_FAKE_DEP=		build
+_FAKE_SEQ=		fake-message fake-dir apply-slist fake-pre-install \
+			generate-plist fake-pre-su-install do-fake fake-post-install \
+			post-fake compress-man	install-rc-script install-ldconfig-file install-desktop-entries \
+			fix-fake-symlinks add-plist-info add-plist-docs add-plist-examples \
+			add-plist-data add-plist-post
+
+_PACKAGE_DEP=	fake
 _PACKAGE_SEQ=	package-message pre-package pre-package-script \
-				do-package post-package-script
+		do-package post-package post-package-script
+
+_INSTALL_DEP=	package
+_INSTALL_SEQ=	install-message run-depends lib-depends install-package done-message
 
+#_INSTALL_DEP=	build
+#_INSTALL_SEQ=	install-message check-conflicts \
+#				run-depends lib-depends apply-slist pre-install \
+#				pre-install-script generate-plist check-already-installed
+#_INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
+#				pre-su-install-script do-install install-desktop-entries \
+#				post-install post-install-script add-plist-info \
+#				add-plist-docs add-plist-examples add-plist-data \
+#				add-plist-post install-rc-script compress-man \
+#				install-ldconfig-file fake-pkg security-check
+#_PACKAGE_DEP=	install
+#_PACKAGE_SEQ=	package-message pre-package pre-package-script \
+#				do-package post-package-script
+#ENDTODO
 .if !target(post-chroot)
 post-chroot:
 	@${DO_NADA}
@@ -4205,7 +4249,7 @@
 # Main logic. The loop generates 6 main targets and using cookies
 # ensures that those already completed are skipped.
 
-.for target in extract patch configure build install package
+.for target in extract patch configure build fake package install
 
 .if !target(${target}) && defined(_OPTIONS_OK)
 ${target}: ${${target:U}_COOKIE}
@@ -4258,8 +4302,10 @@
 .ORDER: ${_PATCH_DEP} ${_PATCH_SEQ}
 .ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ}
 .ORDER: ${_BUILD_DEP} ${_BUILD_SEQ}
-.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
+.ORDER: ${_FAKE_DEP} ${_FAKE_SEQ}
 .ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
+.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
+.ORDER: ${_UPDATE_DEP} ${_UPDATE_SEQ}
 
 extract-message:
 	@${ECHO_MSG} "===>  Extracting for ${PKGNAME}"
@@ -4269,15 +4315,19 @@
 	@${ECHO_MSG} "===>  Configuring for ${PKGNAME}"
 build-message:
 	@${ECHO_MSG} "===>  Building for ${PKGNAME}"
+fake-message:
+	@${ECHO_MSG} "===>  Faking install for ${PKGNAME}"
 install-message:
 	@${ECHO_MSG} "===>  Installing for ${PKGNAME}"
 package-message:
 	@${ECHO_MSG} "===>  Building package for ${PKGNAME}"
+done-message:
+	@${ECHO_MSG} "===> Done."
 
 # Empty pre-* and post-* targets
 
 .for stage in pre post
-.for name in check-sanity fetch extract patch configure build install package
+.for name in check-sanity fetch extract patch configure build fake install package
 
 .if !target(${stage}-${name})
 ${stage}-${name}:
@@ -4340,6 +4390,13 @@
 	@cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" ${MAKE} install
 .endif
 
+.if !target(refake)
+refake:
+	${RM} -rf ${FAKE_DESTDIR} ${FAKE_COOKIE} ${PACKAGE_COOKIE}
+	@cd ${.CURDIR} && ${MAKE} fake
+.endif
+
+
 # Deinstall
 #
 # Special target to remove installation
@@ -5649,14 +5706,14 @@
 	fi
 .for x in ${PORTDOCS}
 	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
-		if [ ! -e ${DOCSDIR}/${x} ]; then \
+		if [ ! -e ${FAKE_DESTDIR}${DOCSDIR}/${x} ]; then \
 		${ECHO_CMD} ${DOCSDIR_REL}/${x} >> ${TMPPLIST}; \
 	fi;fi
 .endfor
-	@${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
-	@${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
+	@${FIND} -P ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
+		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
+	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
+		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 	@${ECHO_CMD} "@dirrm ${DOCSDIR_REL}" >> ${TMPPLIST}
 .else
 	@${DO_NADA}
@@ -5672,15 +5729,15 @@
 	fi
 .for x in ${PORTEXAMPLES}
 	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
-		if [ ! -e ${EXAMPLESDIR}/${x} ]; then \
+		if [ ! -e ${FAKE_DESTDIR}${EXAMPLESDIR}/${x} ]; then \
 		${ECHO_CMD} ${EXAMPLESDIR}/${x} | \
-			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
+			${SED} -e 's,^${FAKE_DESTDIR}${PREFIX}/,,' >> ${TMPPLIST}; \
 	fi;fi
 .endfor
-	@${FIND} -P ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
-	@${FIND} -P -d ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
+	@${FIND} -P ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \
+		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
+	@${FIND} -P -d ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \
+		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 	@${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 .else
 	@${DO_NADA}
@@ -5696,15 +5753,15 @@
 	fi
 .for x in ${PORTDATA}
 	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
-		if [ ! -e ${DATADIR}/${x} ]; then \
+		if [ ! -e ${FAKE_DESTDIR}${DATADIR}/${x} ]; then \
 		${ECHO_CMD} ${DATADIR}/${x} | \
-			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
+			${SED} -e 's,^${FAKE_DESTDIR}${PREFIX}/,,' >> ${TMPPLIST}; \
 	fi;fi
 .endfor
-	@${FIND} -P ${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
-	@${FIND} -P -d ${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
+	@${FIND} -P ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
+		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
+	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
+		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 	@${ECHO_CMD} "@dirrm ${DATADIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 .else
 	@${DO_NADA}
@@ -5716,10 +5773,11 @@
 # Process GNU INFO files at package install/deinstall time
 .if defined(INFO)
 .for i in ${INFO}
-	install-info --quiet ${PREFIX}/${INFO_PATH}/$i.info ${PREFIX}/${INFO_PATH}/dir
+#Unneeded as the real installation is done by pkg_add
+#install-info --quiet ${PREFIX}/${INFO_PATH}/$i.info ${PREFIX}/${INFO_PATH}/dir
 	@${ECHO_CMD} "@unexec install-info --quiet --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
 		>> ${TMPPLIST}
-	@${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
+	@${LS} ${FAKE_DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${FAKE_DESTDIR}${PREFIX}/::g >> ${TMPPLIST}
 	@${ECHO_CMD} "@exec install-info --quiet %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
 		>> ${TMPPLIST}
 .endfor
@@ -5752,8 +5810,9 @@
 .if defined(USE_RCORDER)
 	@${ECHO_MSG} "===> Installing early rc.d startup script(s)"
 	@${ECHO_CMD} "@cwd /" >> ${TMPPLIST}
+	${INSTALL} -d ${FAKE_DESTDIR}/etc/rc.d
 	@for i in ${USE_RCORDER}; do \
-		${INSTALL_SCRIPT} ${WRKDIR}/$${i} /etc/rc.d/$${i%.sh}; \
+		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}/etc/rc.d/$${i%.sh}; \
 		${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \
 	done
 	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
@@ -5762,7 +5821,7 @@
 	@${ECHO_MSG} "===> Installing rc.d startup script(s)"
 	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
 	@for i in ${USE_RC_SUBR}; do \
-		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${PREFIX}/etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}; \
+		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}${PREFIX}/etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}; \
 		${ECHO_CMD} "etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}" >> ${TMPPLIST}; \
 	done
 .endif
@@ -5774,16 +5833,16 @@
 # Compress (or uncompress) and symlink manpages.
 .if !target(compress-man)
 compress-man:
-.if defined(_MANPAGES) || defined(_MLINKS)
+.if defined(_FAKEMAN) || defined(_MLINKS)
 .if ${MANCOMPRESSED} == yes && defined(NOMANCOMPRESS)
 	@${ECHO_MSG} "===>   Uncompressing manual pages for ${PKGNAME}"
-	@_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
+	@_manpages='${_FAKEMAN:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
 .elif ${MANCOMPRESSED} == no && !defined(NOMANCOMPRESS)
 	@${ECHO_MSG} "===>   Compressing manual pages for ${PKGNAME}"
-	@_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
+	@_manpages='${_FAKEMAN:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
 .endif
 .if defined(_MLINKS)
-	@set -- ${_MLINKS}; \
+	@set -- ${_FAKE_MLINKS}; \
 	while :; do \
 		[ $$# -eq 0 ] && break || ${TRUE}; \
 		${RM} -f $${2%.gz}; ${RM} -f $$2.gz; \
@@ -5803,7 +5862,6 @@
 # Fake installation of package so that user can pkg_delete it later.
 # Also, make sure that an installed port is recognized correctly in
 # accordance to the @pkgdep directive in the packing lists
-
 .if !target(fake-pkg)
 fake-pkg:
 .if !defined(NO_PKG_REGISTER)
@@ -6214,15 +6272,15 @@
 .if !target(install-desktop-entries)
 install-desktop-entries:
 .if defined(DESKTOP_ENTRIES)
-	@(${MKDIR} "${DESKTOPDIR}" 2> /dev/null) || \
-		(${ECHO_MSG} "===> Cannot create ${DESKTOPDIR}, check permissions"; exit 1)
+	@(${MKDIR} "${FAKE_DESTDIR}${DESKTOPDIR}" 2> /dev/null) || \
+		(${ECHO_MSG} "===> Cannot create ${FAKE_DESTDIR}${DESKTOPDIR}, check permissions"; exit 1)
 	@set -- ${DESKTOP_ENTRIES} XXX; \
 	if [ -z "${_DESKTOPDIR_REL}" ]; then \
 		${ECHO_CMD} "@cwd ${DESKTOPDIR}" >> ${TMPPLIST}; \
 	fi; \
 	while [ $$# -gt 6 ]; do \
 		filename="$$4.desktop"; \
-		pathname="${DESKTOPDIR}/$$filename"; \
+		pathname="${FAKE_DESTDIR}${DESKTOPDIR}/$$filename"; \
 		categories="$$5"; \
 		if [ -z "$$categories" ]; then \
 			categories="`cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} desktop-categories`"; \
diff -Naur Mk.orig/bsd.python.mk Mk/bsd.python.mk
--- Mk.orig/bsd.python.mk	2009-03-24 10:30:21.000000000 +0100
+++ Mk/bsd.python.mk	2009-04-17 17:56:34.000000000 +0200
@@ -503,7 +503,8 @@
 PYSETUP?=				setup.py
 PYDISTUTILS_CONFIGUREARGS?=
 PYDISTUTILS_BUILDARGS?=
-PYDISTUTILS_INSTALLARGS?=	-c -O1 --prefix=${PREFIX}
+#PYDISTUTILS_INSTALLARGS?=	-c -O1 --prefix=${PREFIX}
+PYDISTUTILS_INSTALLARGS?=	-c -O1 --prefix=${TRUE_PREFIX} --root=${FAKE_DESTDIR}
 PYDISTUTILS_PKGNAME?=	${PORTNAME}
 PYDISTUTILS_PKGVERSION?=${PORTVERSION}
 PYDISTUTILS_EGGINFO?=	${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-${PYTHON_VERSION:S/thon//}.egg-info
@@ -715,8 +716,8 @@
 	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_BUILD_TARGET} ${PYDISTUTILS_BUILDARGS})
 .endif
 
-.if !target(do-install)
-do-install:
+.if !target(run-fake)
+run-fake:
 	@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS})
 .endif
 
--- Mk-fake.patch ends here ---


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-ports-bugs->portmgr 
Responsible-Changed-By: miwi 
Responsible-Changed-When: Fri Apr 17 16:17:59 UTC 2009 
Responsible-Changed-Why:  
forward to portmgr. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=133815 

From: Baptiste Daroussin <baptiste.daroussin@gmail.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/133815: [PATCH] implements fakeroot for the ports
Date: Fri, 17 Apr 2009 18:31:59 +0200

 Sorry for the noise, here is the good patch:
 
 --- Mk-fake.patch begins here ---
 diff -Naur Mk.orig/bsd.fake.mk Mk/bsd.fake.mk
 --- Mk.orig/bsd.fake.mk	1970-01-01 01:00:00.000000000 +0100
 +++ Mk/bsd.fake.mk	2009-04-17 17:57:29.000000000 +0200
 @@ -0,0 +1,138 @@
 +#
 +# $MidnightBSD: mports/Mk/components/fake.mk,v 1.5 2009/03/30 14:27:11 laffer1 Exp $
 +#
 +# fake.mk -- This file contains all the code for the 'fake' target.
 +#
 +
 +################
 +#
 +# Fake Setup 
 +#
 +# Tmp dir used for building a package.
 +FAKE_INSTALLDIR?=	fakeroot
 +FAKE_TARGET?=		${INSTALL_TARGET}
 +DESTDIRNAME?=   	DESTDIR
 +FAKE_DESTDIR?= 		${WRKDIR}/${FAKE_INSTALLDIR}
 +FAKE_MAKEARGS?=		${MAKE_ARGS} ${DESTDIRNAME}=${FAKE_DESTDIR}
 +
 +FAKE_SETUP=		TRUE_PREFIX=${TRUE_PREFIX} PREFIX=${FAKE_DESTDIR}${TRUE_PREFIX} \
 +				MANPREFIX=${FAKE_DESTDIR}${MANPREFIX:S/^${FAKE_DESTDIR}//} \
 +				LINUXBASE=${FAKE_DESTDIR}${LINUXBASE:S/^${FAKE_DESTDIR}//} \
 +				HOME=/${PKGBASE}_installs_to_home \
 +				KMODDIR=${FAKE_DESTDIR}${KMODDIR:S/^${FAKE_DESTDIR}//}
 +		
 +
 +.if defined(FAKE_OPTS)
 +.if ${FAKE_OPTS:Mtrueprefix}x != "x" 
 +# do this to FAKE_MAKEARGS so that post-install,pre-install still get a twiddled ${PREFIX}
 +FAKE_MAKEARGS+=	PREFIX=${TRUE_PREFIX} MANPREFIX=${MANPREFIX} DOCSDIR=${DOCSDIR} KMODDIR=${KMODDIR}
 +.endif
 +.if ${FAKE_OPTS:Mlibs}x != "x"
 +FAKE_SETUP+=	LD_LIBRARY_PATH=${FAKE_DESTDIR}${PREFIX}/lib
 +.endif
 +.if ${FAKE_OPTS:Mbin}x != "x"
 +FAKE_SETUP+=	PATH=${PATH}:${FAKE_DESTDIR}${PREFIX}/bin:${FAKE_DESTDIR}${PREFIX}/sbin
 +.endif
 +.if ${FAKE_OPTS:Mprefixhack}x != "x"
 +FAKE_MAKEARGS+=	prefix=${FAKE_DESTDIR}${TRUE_PREFIX} infodir=${FAKE_DESTDIR}${TRUE_PREFIX}/${INFO_PATH}
 +FAKE_MAKEARGS+=	mandir=${FAKE_DESTDIR}${MANPREFIX}/man MANDIR=${FAKE_DESTDIR}${MANPREFIX}/man
 +.endif
 +.endif
 +
 +FAKE_MAKEARGS+= ${EXTRA_FAKE_MAKEARGS}
 +
 +.if !target(fake-dir) 
 +fake-dir:
 +	@${INSTALL} -d -m 755 -o root -g wheel ${FAKE_DESTDIR}${PREFIX}  
 +.if !defined(NO_MTREE)
 +	@${MTREE_CMD} ${MTREE_ARGS} ${FAKE_DESTDIR}${PREFIX} >/dev/null
 +#TODO don't whey make consider this as malformed
 +#.if ${MTREE_FILE} == "/etc/mtree/BSD.local.dist" 
 +#		@cd ${FAKE_DESTDIR}${PREFIX}/share/nls; \
 +#		${LN} -shf C POSIX; \
 +#		${LN} -shf C en_US.US-ASCII; 
 +#.endif
 +.if defined(USE_LINUX) && ${PREFIX} != ${LINUXBASE_REL} 
 +		@${INSTALL} -d -m 755 -o root -g wheel ${FAKE_DESTDIR}${LINUXBASE_REL}
 +		@${MTREE_CMD} ${MTREE_LINUX_ARGS} ${FAKE_DESTDIR}${LINUXBASE_REL} > /dev/null
 +.endif
 +.endif
 +.endif
 +
 +
 +.if !target(fake-pre-install) 
 +fake-pre-install:
 +.if !target(pre-install)
 +		@cd ${.CURDIR} && exec ${MAKE} pre-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +	
 +.if !target(fake-pre-su-install)
 +fake-pre-su-install:
 +.if !target(pre-su-install)
 +		@cd ${.CURDIR} && exec ${MAKE} pre-su-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +
 +.if !target(do-fake) 
 +do-fake:
 +.if target(do-install)
 +		@cd ${.CURDIR} && exec ${MAKE} do-install ${FAKE_SETUP}
 +.else
 +		@cd ${.CURDIR} && exec ${MAKE} run-fake
 +.endif
 +.endif
 +
 +.if !target(fake-post-install)
 +fake-post-install:
 +.if !target(post-install)
 +		@cd ${.CURDIR} && exec ${MAKE} post-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +
 +#run-fake:
 +#	@cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKE_SETUP}\
 +#		${MAKE}  -f ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET};
 +#.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 +#		@cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKE_SETUP}\
 +#			${MAKE} -f ${MAKEFILE} ${FAKE_MAKEARGS} install.man
 +#.endif
 +
 +
 +
 +.if !target(fix-fake-symlinks) 
 +fix-fake-symlinks:
 +	-@cd ${FAKE_DESTDIR}${PREFIX}; \
 +	links=`${FIND} . -type l | ${GREP} -v -e 'share/nls/POSIX\|share/nls/en_US.US-ASCII'`; \
 +	for link in $$links; do \
 +		if ! readlink $$link | grep ${FAKE_DESTDIR} >/dev/null; then \
 +			continue; \
 +		fi; \
 +		source=`readlink $$link | ${SED} -e 's|${FAKE_DESTDIR}||'`; \
 +		${RM} $$link; \
 +		${LN} -s $$source $$link; \
 +	done 
 +.if defined(USE_LINUX) && ${PREFIX} != ${LINUXBASE_REL}
 +		@cd ${.CURDIR} && ${MAKE} PREFIX=${LINUXBASE_REL} ${.TARGET}
 +.endif
 +.endif
 +
 +
 +
 +
 +#
 +# check-fake
 +#	
 +_CHKFAKE_ARGS= -f ${TMPPLIST} -d ${FAKE_DESTDIR} -p ${PREFIX}
 +.if defined(SKIP_FAKE_CHECK)
 +_CHKFAKE_ARGS+=	-s "${SKIP_FAKE_CHECK}"
 +.endif
 +
 +.if !target(check-fake)
 +check-fake:
 +#	/usr/mports/Tools/scripts/chkfake.pl ${_CHKFAKE_ARGS}
 +	@${MPORT_CHECK_FAKE} ${_CHKFAKE_ARGS}
 +.endif
 diff -Naur Mk.orig/bsd.gecko.mk Mk/bsd.gecko.mk
 --- Mk.orig/bsd.gecko.mk	2009-04-13 03:38:03.000000000 +0200
 +++ Mk/bsd.gecko.mk	2009-04-17 17:56:34.000000000 +0200
 @@ -565,7 +565,7 @@
  .if !defined(NOGECKO_PLIST)
  	@${RM} -rf ${FAKEDIR} ${PLIST} ${PLISTD} ${PLISTF}
  	@${TOUCH} -f ${PLIST} ${PLISTD} ${PLISTF}
 -	@cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} \
 +	@cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKE_SETUP} ${GMAKE} ${FAKE_MAKEARGS} \
  		${MAKEFILE} ${MAKE_ARGS} prefix=${FAKEDIR} ${INSTALL_TARGET}
  .if defined(MOZILLA_SUFX) && ${MOZILLA_SUFX}!="none"
  	${MV} ${FAKEDIR}/bin/${MOZILLA:S/${MOZILLA_SUFX}//} ${FAKEDIR}/bin/${MOZILLA}
 diff -Naur Mk.orig/bsd.gnustep.mk Mk/bsd.gnustep.mk
 --- Mk.orig/bsd.gnustep.mk	2009-03-20 10:14:26.000000000 +0100
 +++ Mk/bsd.gnustep.mk	2009-04-17 17:56:34.000000000 +0200
 @@ -531,11 +531,11 @@
  .if defined(USE_GNUSTEP_MAKE_DIRS)
  .for i in ${USE_GNUSTEP_MAKE_DIRS}
  	@(cd ${INSTALL_WRKSRC}/${i}; . ${GNUSTEP_MAKEFILES}/GNUstep.sh; \
 -		${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET})
 +		${SETENV} ${MAKE_ENV} ${GMAKE} ${FAKE_MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET})
  .endfor
  .else
  	@(cd ${INSTALL_WRKSRC}; . ${GNUSTEP_MAKEFILES}/GNUstep.sh; \
 -		${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET})
 +		${SETENV} ${MAKE_ENV} ${FAKE_SETUP} ${GMAKE} ${FAKE_MAKEARGS} ${MAKEFILE} ${INSTALL_TARGET})
  .endif
  .if defined(PACKAGE_BUILDING) || defined(BATCH) || defined(CLEAN_ROOT)
  	rm -rf /root/GNUstep
 diff -Naur Mk.orig/bsd.perl.mk Mk/bsd.perl.mk
 --- Mk.orig/bsd.perl.mk	2009-03-28 21:45:06.000000000 +0100
 +++ Mk/bsd.perl.mk	2009-04-17 17:56:34.000000000 +0200
 @@ -263,7 +263,7 @@
  .if !defined(USE_GMAKE)
  .if !target(do-install)
  do-install:
 -	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
 +	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${FAKE_SETUP} ${PERL5} ${PL_BUILD} ${FAKE_MAKEARGS} ${INSTALL_TARGET})
  .endif # !target(do-install)
  .endif # !defined(USE_GMAKE)
  .endif # defined(PERL_MODBUILD)
 diff -Naur Mk.orig/bsd.php.mk Mk/bsd.php.mk
 --- Mk.orig/bsd.php.mk	2009-03-06 11:08:32.000000000 +0100
 +++ Mk/bsd.php.mk	2009-04-17 17:56:34.000000000 +0200
 @@ -34,7 +34,6 @@
  .if !defined(_PHPMKINCLUDED)
  
  PHP_Include_MAINTAINER=	ale@FreeBSD.org
 -
  _PHPMKINCLUDED=	yes
  
  PHPBASE?=	${LOCALBASE}
 @@ -191,10 +190,10 @@
  		>> ${TMPPLIST}
  	@${ECHO_CMD} "@unexec rmdir %D/lib/php/${PHP_EXT_DIR} 2> /dev/null || true" \
  		>> ${TMPPLIST}
 -	@${FIND} -P ${PREFIX}/include/php/ext/${PHP_MODNAME} ! -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
 -	@${FIND} -P -d ${PREFIX}/include/php/ext/${PHP_MODNAME} -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${FIND} -P ${FAKE_DESTDIR}${PREFIX}/include/php/ext/${PHP_MODNAME} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PREFIX}/include/php/ext/${PHP_MODNAME} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@exec echo \#include \\\"ext/${PHP_MODNAME}/config.h\\\" >> %D/include/php/ext/php_config.h" \
  		>> ${TMPPLIST}
  	@${ECHO_CMD} "@unexec cp %D/include/php/ext/php_config.h %D/include/php/ext/php_config.h.orig" \
 diff -Naur Mk.orig/bsd.port.mk Mk/bsd.port.mk
 --- Mk.orig/bsd.port.mk	2009-04-10 00:40:20.000000000 +0200
 +++ Mk/bsd.port.mk	2009-04-17 17:56:34.000000000 +0200
 @@ -1423,6 +1423,10 @@
  LDCONFIG_PLIST_UNEXEC_CMD?=	${LDCONFIG} -R
  .endif
  
 +# Fake targets override this when they submake.
 +TRUE_PREFIX?=		${PREFIX} 
 +
 +
  PKGCOMPATDIR?=		${LOCALBASE}/lib/compat/pkg
  
  # XXX to remain undefined until all ports that require Perl are fixed
 @@ -1565,6 +1569,9 @@
  .include "${PORTSDIR}/Mk/bsd.kde4.mk"
  .endif
  
 +# include bsd.fake.mk
 +.include "${PORTSDIR}/Mk/bsd.fake.mk"
 +
  # You can force skipping these test by defining IGNORE_PATH_CHECKS
  .if !defined(IGNORE_PATH_CHECKS)
  .if (${PREFIX:C,(^.).*,\1,} != "/")
 @@ -2145,6 +2152,9 @@
  BUILD_COOKIE?=		${WRKDIR}/.build_done.${PORTNAME}.${PREFIX:S/\//_/g}
  PATCH_COOKIE?=		${WRKDIR}/.patch_done.${PORTNAME}.${PREFIX:S/\//_/g}
  PACKAGE_COOKIE?=	${WRKDIR}/.package_done.${PORTNAME}.${PREFIX:S/\//_/g}
 +FAKE_COOKIE?=		${WRKDIR}/.fake_done.${PORTNAME}.${PREFIX:S/\//_/g}
 +
 +
  
  # How to do nothing.  Override if you, for some strange reason, would rather
  # do something.
 @@ -2346,6 +2356,8 @@
  					${FIND} -d $$0 $$2 -type f -exec chmod ${SHAREMODE} $$1/{} \;' --
  .endif
  
 +#TODO Check the import the bsd.mport.mlk line 1057
 +#TODO Check the removal of the following
  # The user can override the NO_PACKAGE by specifying this from
  # the make command line
  .if defined(FORCE_PACKAGE)
 @@ -2384,7 +2396,8 @@
  .endif
  
  .if !defined(PKG_ARGS)
 -PKG_ARGS=		-v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
 +PKG_ARGS=		-v -S ${FAKE_DESTDIR} -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
 +
  .if !defined(NO_MTREE)
  PKG_ARGS+=		-m ${MTREE_FILE}
  .endif
 @@ -2976,6 +2989,10 @@
  .endif
  .endfor
  
 +.for ___link in ${_MLINKS}
 +_FAKE_MLINKS += ${FAKE_DESTDIR}${___link}
 +.endfor
 +
  # XXX 20040119 This next line should read:
  # .for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
  # but there is currently a bug in make(1) that prevents the double-quote
 @@ -3027,6 +3044,10 @@
  
  .endif
  
 +.for m in ${_MANPAGES}
 +_FAKEMAN += ${FAKE_DESTDIR}${m}
 +.endfor
 +
  .if ${PREFIX} == /usr
  INFO_PATH?=	share/info
  .else
 @@ -3172,7 +3193,7 @@
  IGNORECMD=	${ECHO_MSG} "===>  ${PKGNAME} "${IGNORE:Q}.;exit 1
  .endif
  
 -.for target in check-sanity fetch checksum extract patch configure all build install reinstall package
 +.for target in check-sanity fetch checksum extract patch configure all build fake install reinstall package
  .if !target(${target})
  ${target}:
  	@${IGNORECMD}
 @@ -3292,7 +3313,7 @@
  
  # Disable install
  .if defined(NO_INSTALL) && !target(install)
 -install: build
 +fake: build
  	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
  .endif
  
 @@ -3734,17 +3755,17 @@
  
  # Install
  
 -.if !target(do-install)
 -do-install:
 +.if !target(run-fake)
 +run-fake:
  .if defined(USE_GMAKE)
 -	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
  .if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 -	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV}  ${MAKE_SETUP}${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
  .endif
  .else # !defined(USE_GMAKE)
 -	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
  .if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 -	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
  .endif
  .endif
  .endif
 @@ -3839,6 +3860,15 @@
  	@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} -f ${PKGFILE})"
  .endif
  
 +#
 +# This is the real install.
 +#
 +.if !target(install-package)
 +install-package:
 +	@${PKG_ADD} ${PKGFILE}
 +.endif
 +
 +
  # Utility targets follow
  
  .if !target(check-already-installed)
 @@ -4174,20 +4204,34 @@
  _BUILD_DEP=		configure
  _BUILD_SEQ=		build-message pre-build pre-build-script do-build \
  				post-build post-build-script
 -_INSTALL_DEP=	build
 -_INSTALL_SEQ=	install-message check-conflicts \
 -				run-depends lib-depends apply-slist pre-install \
 -				pre-install-script generate-plist check-already-installed
 -_INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
 -				pre-su-install-script do-install install-desktop-entries \
 -				post-install post-install-script add-plist-info \
 -				add-plist-docs add-plist-examples add-plist-data \
 -				add-plist-post install-rc-script compress-man \
 -				install-ldconfig-file fake-pkg security-check
 -_PACKAGE_DEP=	install
 +_FAKE_DEP=		build
 +_FAKE_SEQ=		fake-message fake-dir apply-slist fake-pre-install \
 +			generate-plist fake-pre-su-install do-fake fake-post-install \
 +			post-fake compress-man	install-rc-script install-ldconfig-file install-desktop-entries \
 +			fix-fake-symlinks add-plist-info add-plist-docs add-plist-examples \
 +			add-plist-data add-plist-post
 +
 +_PACKAGE_DEP=	fake
  _PACKAGE_SEQ=	package-message pre-package pre-package-script \
 -				do-package post-package-script
 +		do-package post-package post-package-script
 +
 +_INSTALL_DEP=	package
 +_INSTALL_SEQ=	install-message run-depends lib-depends install-package done-message
  
 +#_INSTALL_DEP=	build
 +#_INSTALL_SEQ=	install-message check-conflicts \
 +#				run-depends lib-depends apply-slist pre-install \
 +#				pre-install-script generate-plist check-already-installed
 +#_INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
 +#				pre-su-install-script do-install install-desktop-entries \
 +#				post-install post-install-script add-plist-info \
 +#				add-plist-docs add-plist-examples add-plist-data \
 +#				add-plist-post install-rc-script compress-man \
 +#				install-ldconfig-file fake-pkg security-check
 +#_PACKAGE_DEP=	install
 +#_PACKAGE_SEQ=	package-message pre-package pre-package-script \
 +#				do-package post-package-script
 +#ENDTODO
  .if !target(post-chroot)
  post-chroot:
  	@${DO_NADA}
 @@ -4205,7 +4249,7 @@
  # Main logic. The loop generates 6 main targets and using cookies
  # ensures that those already completed are skipped.
  
 -.for target in extract patch configure build install package
 +.for target in extract patch configure build fake package install
  
  .if !target(${target}) && defined(_OPTIONS_OK)
  ${target}: ${${target:U}_COOKIE}
 @@ -4258,8 +4302,10 @@
  .ORDER: ${_PATCH_DEP} ${_PATCH_SEQ}
  .ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ}
  .ORDER: ${_BUILD_DEP} ${_BUILD_SEQ}
 -.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
 +.ORDER: ${_FAKE_DEP} ${_FAKE_SEQ}
  .ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
 +.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
 +.ORDER: ${_UPDATE_DEP} ${_UPDATE_SEQ}
  
  extract-message:
  	@${ECHO_MSG} "===>  Extracting for ${PKGNAME}"
 @@ -4269,15 +4315,19 @@
  	@${ECHO_MSG} "===>  Configuring for ${PKGNAME}"
  build-message:
  	@${ECHO_MSG} "===>  Building for ${PKGNAME}"
 +fake-message:
 +	@${ECHO_MSG} "===>  Faking install for ${PKGNAME}"
  install-message:
  	@${ECHO_MSG} "===>  Installing for ${PKGNAME}"
  package-message:
  	@${ECHO_MSG} "===>  Building package for ${PKGNAME}"
 +done-message:
 +	@${ECHO_MSG} "===> Done."
  
  # Empty pre-* and post-* targets
  
  .for stage in pre post
 -.for name in check-sanity fetch extract patch configure build install package
 +.for name in check-sanity fetch extract patch configure build fake install package
  
  .if !target(${stage}-${name})
  ${stage}-${name}:
 @@ -4340,6 +4390,13 @@
  	@cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" ${MAKE} install
  .endif
  
 +.if !target(refake)
 +refake:
 +	${RM} -rf ${FAKE_DESTDIR} ${FAKE_COOKIE} ${PACKAGE_COOKIE}
 +	@cd ${.CURDIR} && ${MAKE} fake
 +.endif
 +
 +
  # Deinstall
  #
  # Special target to remove installation
 @@ -5649,14 +5706,14 @@
  	fi
  .for x in ${PORTDOCS}
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 -		if [ ! -e ${DOCSDIR}/${x} ]; then \
 +		if [ ! -e ${FAKE_DESTDIR}${DOCSDIR}/${x} ]; then \
  		${ECHO_CMD} ${DOCSDIR_REL}/${x} >> ${TMPPLIST}; \
  	fi;fi
  .endfor
 -	@${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
 -	@${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${DOCSDIR_REL}" >> ${TMPPLIST}
  .else
  	@${DO_NADA}
 @@ -5672,15 +5729,15 @@
  	fi
  .for x in ${PORTEXAMPLES}
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 -		if [ ! -e ${EXAMPLESDIR}/${x} ]; then \
 +		if [ ! -e ${FAKE_DESTDIR}${EXAMPLESDIR}/${x} ]; then \
  		${ECHO_CMD} ${EXAMPLESDIR}/${x} | \
 -			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
 +			${SED} -e 's,^${FAKE_DESTDIR}${PREFIX}/,,' >> ${TMPPLIST}; \
  	fi;fi
  .endfor
 -	@${FIND} -P ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
 -	@${FIND} -P -d ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
  .else
  	@${DO_NADA}
 @@ -5696,15 +5753,15 @@
  	fi
  .for x in ${PORTDATA}
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 -		if [ ! -e ${DATADIR}/${x} ]; then \
 +		if [ ! -e ${FAKE_DESTDIR}${DATADIR}/${x} ]; then \
  		${ECHO_CMD} ${DATADIR}/${x} | \
 -			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
 +			${SED} -e 's,^${FAKE_DESTDIR}${PREFIX}/,,' >> ${TMPPLIST}; \
  	fi;fi
  .endfor
 -	@${FIND} -P ${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
 -	@${FIND} -P -d ${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${DATADIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
  .else
  	@${DO_NADA}
 @@ -5716,10 +5773,11 @@
  # Process GNU INFO files at package install/deinstall time
  .if defined(INFO)
  .for i in ${INFO}
 -	install-info --quiet ${PREFIX}/${INFO_PATH}/$i.info ${PREFIX}/${INFO_PATH}/dir
 +#Unneeded as the real installation is done by pkg_add
 +#install-info --quiet ${PREFIX}/${INFO_PATH}/$i.info ${PREFIX}/${INFO_PATH}/dir
  	@${ECHO_CMD} "@unexec install-info --quiet --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
  		>> ${TMPPLIST}
 -	@${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
 +	@${LS} ${FAKE_DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${FAKE_DESTDIR}${PREFIX}/::g >> ${TMPPLIST}
  	@${ECHO_CMD} "@exec install-info --quiet %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
  		>> ${TMPPLIST}
  .endfor
 @@ -5752,8 +5810,9 @@
  .if defined(USE_RCORDER)
  	@${ECHO_MSG} "===> Installing early rc.d startup script(s)"
  	@${ECHO_CMD} "@cwd /" >> ${TMPPLIST}
 +	${INSTALL} -d ${FAKE_DESTDIR}/etc/rc.d
  	@for i in ${USE_RCORDER}; do \
 -		${INSTALL_SCRIPT} ${WRKDIR}/$${i} /etc/rc.d/$${i%.sh}; \
 +		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}/etc/rc.d/$${i%.sh}; \
  		${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \
  	done
  	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
 @@ -5762,7 +5821,7 @@
  	@${ECHO_MSG} "===> Installing rc.d startup script(s)"
  	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
  	@for i in ${USE_RC_SUBR}; do \
 -		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${PREFIX}/etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}; \
 +		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}${PREFIX}/etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}; \
  		${ECHO_CMD} "etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}" >> ${TMPPLIST}; \
  	done
  .endif
 @@ -5774,16 +5833,16 @@
  # Compress (or uncompress) and symlink manpages.
  .if !target(compress-man)
  compress-man:
 -.if defined(_MANPAGES) || defined(_MLINKS)
 +.if defined(_FAKEMAN) || defined(_MLINKS)
  .if ${MANCOMPRESSED} == yes && defined(NOMANCOMPRESS)
  	@${ECHO_MSG} "===>   Uncompressing manual pages for ${PKGNAME}"
 -	@_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
 +	@_manpages='${_FAKEMAN:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
  .elif ${MANCOMPRESSED} == no && !defined(NOMANCOMPRESS)
  	@${ECHO_MSG} "===>   Compressing manual pages for ${PKGNAME}"
 -	@_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
 +	@_manpages='${_FAKEMAN:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
  .endif
  .if defined(_MLINKS)
 -	@set -- ${_MLINKS}; \
 +	@set -- ${_FAKE_MLINKS}; \
  	while :; do \
  		[ $$# -eq 0 ] && break || ${TRUE}; \
  		${RM} -f $${2%.gz}; ${RM} -f $$2.gz; \
 @@ -5803,7 +5862,6 @@
  # Fake installation of package so that user can pkg_delete it later.
  # Also, make sure that an installed port is recognized correctly in
  # accordance to the @pkgdep directive in the packing lists
 -
  .if !target(fake-pkg)
  fake-pkg:
  .if !defined(NO_PKG_REGISTER)
 @@ -6214,15 +6272,15 @@
  .if !target(install-desktop-entries)
  install-desktop-entries:
  .if defined(DESKTOP_ENTRIES)
 -	@(${MKDIR} "${DESKTOPDIR}" 2> /dev/null) || \
 -		(${ECHO_MSG} "===> Cannot create ${DESKTOPDIR}, check permissions"; exit 1)
 +	@(${MKDIR} "${FAKE_DESTDIR}${DESKTOPDIR}" 2> /dev/null) || \
 +		(${ECHO_MSG} "===> Cannot create ${FAKE_DESTDIR}${DESKTOPDIR}, check permissions"; exit 1)
  	@set -- ${DESKTOP_ENTRIES} XXX; \
  	if [ -z "${_DESKTOPDIR_REL}" ]; then \
  		${ECHO_CMD} "@cwd ${DESKTOPDIR}" >> ${TMPPLIST}; \
  	fi; \
  	while [ $$# -gt 6 ]; do \
  		filename="$$4.desktop"; \
 -		pathname="${DESKTOPDIR}/$$filename"; \
 +		pathname="${FAKE_DESTDIR}${DESKTOPDIR}/$$filename"; \
  		categories="$$5"; \
  		if [ -z "$$categories" ]; then \
  			categories="`cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} desktop-categories`"; \
 diff -Naur Mk.orig/bsd.python.mk Mk/bsd.python.mk
 --- Mk.orig/bsd.python.mk	2009-03-24 10:30:21.000000000 +0100
 +++ Mk/bsd.python.mk	2009-04-17 17:56:34.000000000 +0200
 @@ -503,7 +503,8 @@
  PYSETUP?=				setup.py
  PYDISTUTILS_CONFIGUREARGS?=
  PYDISTUTILS_BUILDARGS?=
 -PYDISTUTILS_INSTALLARGS?=	-c -O1 --prefix=${PREFIX}
 +#PYDISTUTILS_INSTALLARGS?=	-c -O1 --prefix=${PREFIX}
 +PYDISTUTILS_INSTALLARGS?=	-c -O1 --prefix=${TRUE_PREFIX} --root=${FAKE_DESTDIR}
  PYDISTUTILS_PKGNAME?=	${PORTNAME}
  PYDISTUTILS_PKGVERSION?=${PORTVERSION}
  PYDISTUTILS_EGGINFO?=	${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-${PYTHON_VERSION:S/thon//}.egg-info
 @@ -715,8 +716,8 @@
  	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_BUILD_TARGET} ${PYDISTUTILS_BUILDARGS})
  .endif
  
 -.if !target(do-install)
 -do-install:
 +.if !target(run-fake)
 +run-fake:
  	@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS})
  .endif
  
 --- Mk-fake.patch ends here ---

From: Baptiste Daroussin <baptiste.daroussin@gmail.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/133815: [PATCH] bsd.port.mk: implements fakeroot for the
	ports
Date: Wed, 24 Jun 2009 18:04:05 +0200

 --gr/z0/N6AeWAPJVB
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Here is a new version of the patch (git formated) that make fakeroot
 optional.
 It currenly works for classical ports and python, not tested for the rest
 yet.
 
 To activate it, USE_FAKE=yes
 
 --gr/z0/N6AeWAPJVB
 Content-Type: text/x-diff; charset=us-ascii
 Content-Disposition: attachment; filename="fake-implementation.patch"
 
 diff --git a/bsd.fake.mk b/bsd.fake.mk
 new file mode 100644
 index 0000000..8915a16
 --- /dev/null
 +++ b/bsd.fake.mk
 @@ -0,0 +1,95 @@
 +# bsd.fake.mk 
 +#
 +# Fake Setup
 +FAKE_INSTALLDIR?=	fakeroot
 +FAKE_TARGET?=		${INSTALL_TARGET}
 +DESTDIRNAME?=		DESTDIR
 +FAKE_DESTDIR?=		${WRKDIR}/${FAKE_INSTALLDIR}
 +FAKE_MAKEARGS?=		${MAKE_ARGS} ${DESTDIRNAME}=${FAKE_DESDIR}
 +
 +FAKE_SETUP=		TRUE_PREFIX=${TRUE_PREFIX} PREFIX=${FAKE_DESTDIR}${TRUE_PREFIX} \
 +			MANPREFIX=${FAKE_DESTDIR}${MANPREFIX:S/^${FAKE_DESTDIR}//} \
 +			LINUXBASE=${FAKE_DESTDIR}${LINUXBASE:S/^${FAKE_DESTDIR}//} \
 +			HOME=/${PKGBASE}_installs_to_home \
 +			KMODDIR=${FAKE_DESTDIR}${KMODDIR:S/^${FAKE_DESTDIR}//}
 +
 +.if defined(FAKE_OPTS)
 +.if ${FAKE_OPTS:Mtrueprefix}x != "x"
 +	FAKE_MAKEARGS+=        PREFIX=${TRUE_PREFIX} MANPREFIX=${MANPREFIX} DOCSDIR=${DOCSDIR} KMODDIR=${KMODDIR}
 +.endif
 +
 +.if ${FAKE_OPTS:Mlibs}x != "x"
 +	FAKE_SETUP+=   LD_LIBRARY_PATH=${FAKE_DESTDIR}${PREFIX}/lib
 +.endif
 +
 +.if ${FAKE_OPTS:Mbin}x != "x"
 +	FAKE_SETUP+=   PATH=${PATH}:${FAKE_DESTDIR}${PREFIX}/bin:${FAKE_DESTDIR}${PREFIX}/sbin
 +.endif
 +
 +.if ${FAKE_OPTS:Mprefixhack}x != "x"
 +	FAKE_MAKEARGS+=        prefix=${FAKE_DESTDIR}${TRUE_PREFIX} infodir=${FAKE_DESTDIR}${TRUE_PREFIX}/${INFO_PATH}
 +	FAKE_MAKEARGS+=        mandir=${FAKE_DESTDIR}${MANPREFIX}/man MANDIR=${FAKE_DESTDIR}${MANPREFIX}/man
 +.endif
 +.endif
 +
 +FAKE_MAKEARGS+= ${EXTRA_FAKE_MAKEARGS}
 +
 +.if !target(fake-dir)
 +fake-dir:
 +	@${INSTALL} -d -m 755 -o root -g wheel ${FAKE_DESTDIR}${PREFIX}
 +.if !defined(NO_MTREE)
 +	@${MTREE_CMD} ${MTREE_ARGS} ${FAKE_DESTDIR}${PREFIX} >/dev/null
 +.if defined(USE_LINUX) && ${PREFIX} != ${LINUXBASE_REL}
 +	 @${INSTALL} -d -m 755 -o root -g wheel ${FAKE_DESTDIR}${LINUXBASE_REL}
 +	 @${MTREE_CMD} ${MTREE_LINUX_ARGS} ${FAKE_DESTDIR}${LINUXBASE_REL} > /dev/null
 +.endif
 +.endif
 +.endif
 +
 +.if !target(fake-pre-install)
 +fake-pre-install:
 +.if !target(pre-install)
 +	@cd ${.CURDIR} && exec ${MAKE} pre-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(fake-pre-su-install)
 +fake-pre-su-install:
 +.if !target(pre-su-install)
 +	@cd ${.CURDIR} && exec ${MAKE} pre-su-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(do-fake)
 +do-fake:
 +.if target(do-install)
 +	 @cd ${.CURDIR} && exec ${MAKE} do-install ${FAKE_SETUP}
 +.else
 +	 @cd ${.CURDIR} && exec ${MAKE} run-fake
 +.endif
 +.endif
 +
 +.if !target(fake-post-install)
 +fake-post-install:
 +.if !target(post-install)
 +	@cd ${.CURDIR} && exec ${MAKE} post-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(fix-fake-symlinks)
 +fix-fake-symlinks:
 +	-@cd ${FAKE_DESTDIR}${PREFIX}; \
 +	links=`${FIND} . -type l | ${GREP} -v -e 'share/nls/POSIX\|share/nls/en_US.US-ASCII'`; \
 +	for link in $$links; do \
 +		if ! readlink $$link | grep ${FAKE_DESTDIR} >/dev/null; then \
 +			continue; \
 +		fi; \
 +		source=`readlink $$link | ${SED} -e 's|${FAKE_DESTDIR}||'`; \
 +		${RM} $$link; \
 +		${LN} -s $$source $$link; \
 +	done
 +.if defined(USE_LINUX) && ${PREFIX} != ${LINUXBASE_REL}
 +	@cd ${.CURDIR} && ${MAKE} PREFIX=${LINUXBASE_REL} ${.TARGET}
 +.endif
 +.endif
 +
 diff --git a/bsd.port.mk b/bsd.port.mk
 index 40bead9..f2ef056 100644
 --- a/bsd.port.mk
 +++ b/bsd.port.mk
 @@ -1424,6 +1424,8 @@ LDCONFIG_PLIST_EXEC_CMD?=	${LDCONFIG} -m ${LDCONFIG_PLIST}
  LDCONFIG_PLIST_UNEXEC_CMD?=	${LDCONFIG} -R
  .endif
  
 +TRUE_PREFIX=		${PREFIX}
 +
  PKGCOMPATDIR?=		${LOCALBASE}/lib/compat/pkg
  
  # XXX to remain undefined until all ports that require Perl are fixed
 @@ -1564,6 +1566,11 @@ PERL=		${LOCALBASE}/bin/perl
  .include "${PORTSDIR}/Mk/bsd.kde4.mk"
  .endif
  
 +.if defined(USE_FAKE)
 +.include "${PORTSDIR}/Mk/bsd.fake.mk"
 +.endif
 +
 +
  # You can force skipping these test by defining IGNORE_PATH_CHECKS
  .if !defined(IGNORE_PATH_CHECKS)
  .if (${PREFIX:C,(^.).*,\1,} != "/")
 @@ -2148,6 +2155,9 @@ INSTALL_COOKIE?=	${WRKDIR}/.install_done.${PORTNAME}.${PREFIX:S/\//_/g}
  BUILD_COOKIE?=		${WRKDIR}/.build_done.${PORTNAME}.${PREFIX:S/\//_/g}
  PATCH_COOKIE?=		${WRKDIR}/.patch_done.${PORTNAME}.${PREFIX:S/\//_/g}
  PACKAGE_COOKIE?=	${WRKDIR}/.package_done.${PORTNAME}.${PREFIX:S/\//_/g}
 +.if defined(USE_FAKE)
 +FAKE_COOKIE?=		${WRKDIR}/.fake_done.${PORTNAME}.${PREFIX:S/\//_/g}
 +.endif
  
  # How to do nothing.  Override if you, for some strange reason, would rather
  # do something.
 @@ -2388,7 +2398,11 @@ PKG_VERSION?=		/usr/sbin/pkg_version
  .endif
  
  .if !defined(PKG_ARGS)
 +.if defined(USE_FAKE)
 +PKG_ARGS=              -v -S ${FAKE_DESTDIR} -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P  "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
 +.else
  PKG_ARGS=		-v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
 +.endif
  .if !defined(NO_MTREE)
  PKG_ARGS+=		-m ${MTREE_FILE}
  .endif
 @@ -2970,6 +2984,7 @@ check-makevars::
  	@${FALSE}
  .endif
  _MLINKS=	${_MLINKS_PREPEND}
 +
  # XXX 20040119 This next line should read:
  # .for lang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
  # but there is currently a bug in make(1) that prevents the double-quote
 @@ -2993,6 +3008,13 @@ _COUNT=1
  .endif
  .endfor
  
 +.if defined(USE_FAKE)
 +.for ___link in ${_MLINKS}
 +_FAKE_MLINKS+=	${FAKE_DESTDIR}${__link}
 +.endfor
 +_MLINKS=	${FAKE_LINKS}
 +.endif
 +
  # XXX 20040119 This next line should read:
  # .for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
  # but there is currently a bug in make(1) that prevents the double-quote
 @@ -3044,6 +3066,13 @@ _MANPAGES:=	${_MANPAGES:S%$%.gz%}
  
  .endif
  
 +.if defined(USE_FAKE)
 +.for m in ${_MANPAGES}
 +_FAKEMAN+=	${FAKE_DESTDIR}${m}
 +.endfor
 +_MANPAGES=	${_FAKEMAN}
 +.endif
 +
  .if ${PREFIX} == /usr
  INFO_PATH?=	share/info
  .else
 @@ -3189,7 +3218,12 @@ IGNORECMD=	${DO_NADA}
  IGNORECMD=	${ECHO_MSG} "===>  ${PKGNAME} "${IGNORE:Q}.;exit 1
  .endif
  
 -.for target in check-sanity fetch checksum extract patch configure all build install reinstall package
 +.if defined(USE_FAKE)
 +_TARGETS=	check-sanity fetch checksum extract patch configure all build fake install reinstall package
 +.else
 +_TARGETS=	check-sanity fetch checksum extract patch configure all build install reinstall package
 +.endif
 +.for target in ${_TARGETS}
  .if !target(${target})
  ${target}:
  	@${IGNORECMD}
 @@ -3309,9 +3343,14 @@ build: configure
  
  # Disable install
  .if defined(NO_INSTALL) && !target(install)
 +.if defined(USE_FAKE)
 +fake: build
 +	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
 +.else
  install: build
  	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
  .endif
 +.endif
  
  # Disable package
  .if defined(NO_PACKAGE) && !target(package)
 @@ -3751,6 +3790,22 @@ check-conflicts:
  
  # Install
  
 +.if defined(USE_FAKE)
 +.if !target(run-fake)
 +run-fake:
 +.if defined(USE_GMAKE)
 +	 @(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
 +.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 +	 @(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV}  ${MAKE_SETUP}${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
 +.endif
 +.else # !defined(USE_GMAKE)
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
 +.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
 +.endif
 +.endif
 +.endif
 +.else
  .if !target(do-install)
  do-install:
  .if defined(USE_GMAKE)
 @@ -3765,6 +3820,7 @@ do-install:
  .endif
  .endif
  .endif
 +.endif
  
  # Package
  
 @@ -3856,6 +3912,14 @@ delete-package-list: delete-package-links-list
  	@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} -f ${PKGFILE})"
  .endif
  
 +.if defined(USE_FAKE)
 +	# This is the real install done by pkg_add
 +.if !target(install-package)
 +install-package:
 +	@${PKG_ADD} ${PKGFILE}
 +.endif
 +.endif
 +
  # Utility targets follow
  
  .if !target(check-already-installed)
 @@ -4191,6 +4255,20 @@ _CONFIGURE_SEQ=	build-depends lib-depends configure-message \
  _BUILD_DEP=		configure
  _BUILD_SEQ=		build-message pre-build pre-build-script do-build \
  				post-build post-build-script
 +.if defined(USE_FAKE)
 +_FAKE_DEP=	build
 +_FAKE_SEQ=             fake-message fake-dir apply-slist fake-pre-install \
 +		       generate-plist fake-pre-su-install do-fake fake-post-install \
 +		       post-fake compress-man  install-rc-script install-ldconfig-file install-desktop-entries \
 +		       fix-fake-symlinks add-plist-info add-plist-docs add-plist-examples \
 +		       add-plist-data add-plist-post
 +
 +_PACKAGE_DEP=  fake
 +_PACKAGE_SEQ=  package-message pre-package pre-package-script \
 +	       do-package post-package post-package-script
 +_INSTALL_DEP=  package
 +_INSTALL_SEQ=  install-message run-depends lib-depends install-package done-message
 +.else #Normal sequence (no fake)
  _INSTALL_DEP=	build
  _INSTALL_SEQ=	install-message check-conflicts \
  				run-depends lib-depends apply-slist pre-install \
 @@ -4204,7 +4282,7 @@ _INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
  _PACKAGE_DEP=	install
  _PACKAGE_SEQ=	package-message pre-package pre-package-script \
  				do-package post-package-script
 -
 +.endif
  .if !target(post-chroot)
  post-chroot:
  	@${DO_NADA}
 @@ -4222,7 +4300,13 @@ fetch: ${_FETCH_DEP} ${_FETCH_SEQ}
  # Main logic. The loop generates 6 main targets and using cookies
  # ensures that those already completed are skipped.
  
 -.for target in extract patch configure build install package
 +.if defined(USE_FAKE)
 +_TARGETS=	extract patch configure build fake package install
 +.else
 +_TARGETS=	extract patch configure build install package
 +.endif
 +
 +.for target in ${_TARGETS}
  
  .if !target(${target}) && defined(_OPTIONS_OK)
  ${target}: ${${target:U}_COOKIE}
 @@ -4274,9 +4358,15 @@ ${${target:U}_COOKIE}::
  .ORDER: ${_EXTRACT_DEP} ${_EXTRACT_SEQ}
  .ORDER: ${_PATCH_DEP} ${_PATCH_SEQ}
  .ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ}
 +.if defined(USE_FAKE)
 +.ORDER: ${_FAKE_DEP} ${_FAKE_SEQ}
 +.ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
 +.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
 +.else
  .ORDER: ${_BUILD_DEP} ${_BUILD_SEQ}
  .ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
  .ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
 +.endif
  
  extract-message:
  	@${ECHO_MSG} "===>  Extracting for ${PKGNAME}"
 @@ -4286,15 +4376,25 @@ configure-message:
  	@${ECHO_MSG} "===>  Configuring for ${PKGNAME}"
  build-message:
  	@${ECHO_MSG} "===>  Building for ${PKGNAME}"
 +fake-message:
 +	@${ECHO_MSG} "===>  Faking install for ${PKGNAME}"
  install-message:
  	@${ECHO_MSG} "===>  Installing for ${PKGNAME}"
  package-message:
  	@${ECHO_MSG} "===>  Building package for ${PKGNAME}"
 +done-message:
 +	@${ECHO_MSG} "===> Done."
  
  # Empty pre-* and post-* targets
  
 +.if defined(USE_FAKE)
 +_NAMES=	check-sanity fetch extract patch configure build fake install package
 +.else
 +_NAMES=	check-sanity fetch extract patch configure build install package
 +.endif
 +
  .for stage in pre post
 -.for name in check-sanity fetch extract patch configure build install package
 +.for name in ${_NAMES}
  
  .if !target(${stage}-${name})
  ${stage}-${name}:
 @@ -4357,6 +4457,13 @@ reinstall:
  	@cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" ${MAKE} install
  .endif
  
 +.if !target(refake)
 +refake:
 +	${RM} -rf ${FAKE_DESTDIR} ${FAKE_COOKIE} ${PACKAGE_COOKIE}
 +	@cd ${.CURDIR} && ${MAKE} fake
 +.endif
 +
 +
  # Deinstall
  #
  # Special target to remove installation
 @@ -5665,16 +5772,31 @@ add-plist-docs:
  		${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
  	fi
  .for x in ${PORTDOCS}
 +.if defined(USE_FAKE)
 +	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 +		if [ ! -e ${FAKE_DESTDIR}${DOCSDIR}/${x} ]; then \
 +		${ECHO_CMD} ${DOCSDIR_REL}/${x} >> ${TMPPLIST}; \
 +	fi;fi
 +.else
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
  		if [ ! -e ${DOCSDIR}/${x} ]; then \
  		${ECHO_CMD} ${DOCSDIR_REL}/${x} >> ${TMPPLIST}; \
  	fi;fi
 +.endif
  .endfor
 +.if defined(USE_FAKE)
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${ECHO_CMD} "@dirrm ${DOCSDIR_REL}" >> ${TMPPLIST}
 +.else
  	@${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
  	@${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${DOCSDIR_REL}" >> ${TMPPLIST}
 +.endif
  .else
  	@${DO_NADA}
  .endif
 @@ -5688,17 +5810,33 @@ add-plist-examples:
  		${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
  	fi
  .for x in ${PORTEXAMPLES}
 +.if defined(USE_FAKE)
 +	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 +		if [ ! -e ${FAKE_DESTDIR}${EXAMPLESDIR}/${x} ]; then \
 +		${ECHO_CMD} ${EXAMPLESDIR}/${x} | \
 +			${SED} -e 's,^${FAKE_DESTDIR}${PREFIX}/,,' >> ${TMPPLIST}; \
 +	fi;fi
 +.else
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
  		if [ ! -e ${EXAMPLESDIR}/${x} ]; then \
  		${ECHO_CMD} ${EXAMPLESDIR}/${x} | \
  			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
  	fi;fi
 +.endif
  .endfor
 +.if defined(USE_FAKE)
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 +.else
  	@${FIND} -P ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
  	@${FIND} -P -d ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 +.endif
  .else
  	@${DO_NADA}
  .endif
 @@ -5712,17 +5850,33 @@ add-plist-data:
  		${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
  	fi
  .for x in ${PORTDATA}
 +.if defined(USE_FAKE)
 +	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 +		if [ ! -e ${FAKE_PREFIX}${DATADIR}/${x} ]; then \
 +		${ECHO_CMD} ${DATADIR}/${x} | \
 +			${SED} -e 's,^${FAKE_PREFIX}${PREFIX}/,,' >> ${TMPPLIST}; \
 +	fi;fi
 +.else
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
  		if [ ! -e ${DATADIR}/${x} ]; then \
  		${ECHO_CMD} ${DATADIR}/${x} | \
  			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
  	fi;fi
 +.endif
  .endfor
 +.if defined(USE_FAKE)
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${ECHO_CMD} "@dirrm ${DATADIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 +.else
  	@${FIND} -P ${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
  	@${FIND} -P -d ${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${DATADIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 +.endif
  .else
  	@${DO_NADA}
  .endif
 @@ -5733,10 +5887,17 @@ add-plist-info:
  # Process GNU INFO files at package install/deinstall time
  .if defined(INFO)
  .for i in ${INFO}
 +.if !defined(USE_FAKE)
 +	# We don't need this with fake because installation is done with pkg_add 
  	install-info --quiet ${PREFIX}/${INFO_PATH}/$i.info ${PREFIX}/${INFO_PATH}/dir
 +.endif
  	@${ECHO_CMD} "@unexec install-info --quiet --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
  		>> ${TMPPLIST}
 +.if defined(USE_FAKE)
 +	@${LS} ${FAKE_DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
 +.else
  	@${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
 +.endif
  	@${ECHO_CMD} "@exec install-info --quiet %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
  		>> ${TMPPLIST}
  .endfor
 @@ -5769,20 +5930,35 @@ install-rc-script:
  .if defined(USE_RCORDER)
  	@${ECHO_MSG} "===> Installing early rc.d startup script(s)"
  	@${ECHO_CMD} "@cwd /" >> ${TMPPLIST}
 +.if defined(USE_FAKE)
 +	${INSTALL} -d ${FAKE_DESTDIR}/etc/rc.d
 +	@for i in ${USE_RCORDER}; do \
 +		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}/etc/rc.d/$${i%.sh}; \
 +		${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \
 +	done
 +.else
  	@for i in ${USE_RCORDER}; do \
  		${INSTALL_SCRIPT} ${WRKDIR}/$${i} /etc/rc.d/$${i%.sh}; \
  		${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \
  	done
 +.endif
  	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
  .endif
  .if defined(USE_RC_SUBR) && ${USE_RC_SUBR:U} != "YES"
  	@${ECHO_MSG} "===> Installing rc.d startup script(s)"
  	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
 +.if defined(USE_FAKE)
 +	@for i in ${USE_RC_SUBR}; do \
 +		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}${PREFIX}/etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}; \
 +		${ECHO_CMD} "etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}" >> ${TMPPLIST}; \
 +	done
 +.else
  	@for i in ${USE_RC_SUBR}; do \
  		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${PREFIX}/etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}; \
  		${ECHO_CMD} "etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}" >> ${TMPPLIST}; \
  	done
  .endif
 +.endif
  .else
  	@${DO_NADA}
  .endif
 @@ -6231,6 +6407,9 @@ check-desktop-entries:
  .if !target(install-desktop-entries)
  install-desktop-entries:
  .if defined(DESKTOP_ENTRIES)
 +.if defined(USE_FAKE)
 +	DESKTOPDIR=${FAKE_DESTDIR}${FRSKTOPDIR}
 +.endif
  	@(${MKDIR} "${DESKTOPDIR}" 2> /dev/null) || \
  		(${ECHO_MSG} "===> Cannot create ${DESKTOPDIR}, check permissions"; exit 1)
  	@set -- ${DESKTOP_ENTRIES} XXX; \
 diff --git a/bsd.python.mk b/bsd.python.mk
 index 683524c..0336f06 100644
 --- a/bsd.python.mk
 +++ b/bsd.python.mk
 @@ -503,7 +503,11 @@ add-plist-easyinstall:
  PYSETUP?=				setup.py
  PYDISTUTILS_CONFIGUREARGS?=
  PYDISTUTILS_BUILDARGS?=
 +.if defined(USE_FAKE)
 +PYDISTUTILS_INSTALLARGS?=      -c -O1 --prefix=${TRUE_PREFIX} --root=${FAKE_DESTDIR}
 +.else
  PYDISTUTILS_INSTALLARGS?=	-c -O1 --prefix=${PREFIX}
 +.endif
  PYDISTUTILS_PKGNAME?=	${PORTNAME}
  PYDISTUTILS_PKGVERSION?=${PORTVERSION}
  PYDISTUTILS_EGGINFO?=	${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-${PYTHON_VERSION:S/thon//}.egg-info
 @@ -715,10 +719,17 @@ do-build:
  	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_BUILD_TARGET} ${PYDISTUTILS_BUILDARGS})
  .endif
  
 +.if defined(USE_FAKE)
 +.if !target(run-fake)
 +run-fake:
 +	@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS})
 +.endif
 +.else
  .if !target(do-install)
  do-install:
  	@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS})
  .endif
 +.endif
  
  .if defined(PYEASYINSTALL_ARCHDEP)
  .if !target(easyinstall-setopt)
 -- 
 
 --gr/z0/N6AeWAPJVB--

From: Baptiste Daroussin <baptiste.daroussin@gmail.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/133815: [PATCH] bsd.port.mk: implements fakeroot for the
 ports
Date: Mon, 14 Dec 2009 15:36:02 +0100

 --Kj7319i9nmIyA2yE
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Here is a version of the patch that apply and on up to date ports tree.
 
 regards,
 bapt
 
 --Kj7319i9nmIyA2yE
 Content-Type: text/x-diff; charset=us-ascii
 Content-Disposition: attachment; filename="fakeroot.patch"
 
 diff --git a/Mk/bsd.fake.mk b/Mk/bsd.fake.mk
 new file mode 100644
 index 0000000..4690f76
 --- /dev/null
 +++ b/Mk/bsd.fake.mk
 @@ -0,0 +1,95 @@
 +# bsd.fake.mk 
 +#
 +# Fake Setup
 +FAKE_INSTALLDIR?=	fakeroot
 +FAKE_TARGET?=		${INSTALL_TARGET}
 +DESTDIRNAME?=		DESTDIR
 +FAKE_DESTDIR?=		${WRKDIR}/${FAKE_INSTALLDIR}
 +FAKE_MAKEARGS?=		${MAKE_ARGS} ${DESTDIRNAME}=${FAKE_DESTDIR}
 +
 +FAKE_SETUP=		TRUE_PREFIX=${TRUE_PREFIX} PREFIX=${FAKE_DESTDIR}${TRUE_PREFIX} \
 +			MANPREFIX=${FAKE_DESTDIR}${MANPREFIX:S/^${FAKE_DESTDIR}//} \
 +			LINUXBASE=${FAKE_DESTDIR}${LINUXBASE:S/^${FAKE_DESTDIR}//} \
 +			HOME=/${PKGBASE}_installs_to_home \
 +			KMODDIR=${FAKE_DESTDIR}${KMODDIR:S/^${FAKE_DESTDIR}//}
 +
 +.if defined(FAKE_OPTS)
 +.if ${FAKE_OPTS:Mtrueprefix}x != "x"
 +	FAKE_MAKEARGS+=        PREFIX=${TRUE_PREFIX} MANPREFIX=${MANPREFIX} DOCSDIR=${DOCSDIR} KMODDIR=${KMODDIR}
 +.endif
 +
 +.if ${FAKE_OPTS:Mlibs}x != "x"
 +	FAKE_SETUP+=   LD_LIBRARY_PATH=${FAKE_DESTDIR}${PREFIX}/lib
 +.endif
 +
 +.if ${FAKE_OPTS:Mbin}x != "x"
 +	FAKE_SETUP+=   PATH=${PATH}:${FAKE_DESTDIR}${PREFIX}/bin:${FAKE_DESTDIR}${PREFIX}/sbin
 +.endif
 +
 +.if ${FAKE_OPTS:Mprefixhack}x != "x"
 +	FAKE_MAKEARGS+=        prefix=${FAKE_DESTDIR}${TRUE_PREFIX} infodir=${FAKE_DESTDIR}${TRUE_PREFIX}/${INFO_PATH}
 +	FAKE_MAKEARGS+=        mandir=${FAKE_DESTDIR}${MANPREFIX}/man MANDIR=${FAKE_DESTDIR}${MANPREFIX}/man
 +.endif
 +.endif
 +
 +FAKE_MAKEARGS+= ${EXTRA_FAKE_MAKEARGS}
 +
 +.if !target(fake-dir)
 +fake-dir:
 +	@${INSTALL} -d -m 755 -o root -g wheel ${FAKE_DESTDIR}${PREFIX}
 +.if !defined(NO_MTREE)
 +	@${MTREE_CMD} ${MTREE_ARGS} ${FAKE_DESTDIR}${PREFIX} >/dev/null
 +.if defined(USE_LINUX) && ${PREFIX} != ${LINUXBASE_REL}
 +	 @${INSTALL} -d -m 755 -o root -g wheel ${FAKE_DESTDIR}${LINUXBASE_REL}
 +	 @${MTREE_CMD} ${MTREE_LINUX_ARGS} ${FAKE_DESTDIR}${LINUXBASE_REL} > /dev/null
 +.endif
 +.endif
 +.endif
 +
 +.if !target(fake-pre-install)
 +fake-pre-install:
 +.if !target(pre-install)
 +	@cd ${.CURDIR} && exec ${MAKE} pre-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(fake-pre-su-install)
 +fake-pre-su-install:
 +.if !target(pre-su-install)
 +	@cd ${.CURDIR} && exec ${MAKE} pre-su-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(do-fake)
 +do-fake:
 +.if target(do-install)
 +	 @cd ${.CURDIR} && exec ${MAKE} do-install ${FAKE_SETUP}
 +.else
 +	 @cd ${.CURDIR} && exec ${MAKE} run-fake
 +.endif
 +.endif
 +
 +.if !target(fake-post-install)
 +fake-post-install:
 +.if !target(post-install)
 +	@cd ${.CURDIR} && exec ${MAKE} post-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(fix-fake-symlinks)
 +fix-fake-symlinks:
 +	-@cd ${FAKE_DESTDIR}${PREFIX}; \
 +	links=`${FIND} . -type l | ${GREP} -v -e 'share/nls/POSIX\|share/nls/en_US.US-ASCII'`; \
 +	for link in $$links; do \
 +		if ! readlink $$link | grep ${FAKE_DESTDIR} >/dev/null; then \
 +			continue; \
 +		fi; \
 +		source=`readlink $$link | ${SED} -e 's|${FAKE_DESTDIR}||'`; \
 +		${RM} $$link; \
 +		${LN} -s $$source $$link; \
 +	done
 +.if defined(USE_LINUX) && ${PREFIX} != ${LINUXBASE_REL}
 +	@cd ${.CURDIR} && ${MAKE} PREFIX=${LINUXBASE_REL} ${.TARGET}
 +.endif
 +.endif
 +
 diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
 index d5dae15..f1c3cc4 100644
 --- a/Mk/bsd.port.mk
 +++ b/Mk/bsd.port.mk
 @@ -1443,6 +1443,8 @@ LDCONFIG_PLIST_EXEC_CMD?=	${LDCONFIG} -m ${LDCONFIG_PLIST}
  LDCONFIG_PLIST_UNEXEC_CMD?=	${LDCONFIG} -R
  .endif
  
 +TRUE_PREFIX=		${PREFIX}
 +
  PKGCOMPATDIR?=		${LOCALBASE}/lib/compat/pkg
  
  # XXX to remain undefined until all ports that require Perl are fixed
 @@ -1583,6 +1585,11 @@ PERL=		${LOCALBASE}/bin/perl
  .include "${PORTSDIR}/Mk/bsd.kde4.mk"
  .endif
  
 +.if defined(USE_FAKE)
 +.include "${PORTSDIR}/Mk/bsd.fake.mk"
 +.endif
 +
 +
  # You can force skipping these test by defining IGNORE_PATH_CHECKS
  .if !defined(IGNORE_PATH_CHECKS)
  .if (${PREFIX:C,(^.).*,\1,} != "/")
 @@ -2171,6 +2178,9 @@ INSTALL_COOKIE?=	${WRKDIR}/.install_done.${PORTNAME}.${PREFIX:S/\//_/g}
  BUILD_COOKIE?=		${WRKDIR}/.build_done.${PORTNAME}.${PREFIX:S/\//_/g}
  PATCH_COOKIE?=		${WRKDIR}/.patch_done.${PORTNAME}.${PREFIX:S/\//_/g}
  PACKAGE_COOKIE?=	${WRKDIR}/.package_done.${PORTNAME}.${PREFIX:S/\//_/g}
 +.if defined(USE_FAKE)
 +FAKE_COOKIE?=		${WRKDIR}/.fake_done.${PORTNAME}.${PREFIX:S/\//_/g}
 +.endif
  
  # How to do nothing.  Override if you, for some strange reason, would rather
  # do something.
 @@ -2397,7 +2407,11 @@ PKGORIGIN?=		${PKGCATEGORY}/${PORTDIRNAME}
  
  
  .if !defined(PKG_ARGS)
 +.if defined(USE_FAKE)
 +PKG_ARGS=              -v -S ${FAKE_DESTDIR} -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P  "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
 +.else
  PKG_ARGS=		-v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
 +.endif
  .if !defined(NO_MTREE)
  PKG_ARGS+=		-m ${MTREE_FILE}
  .endif
 @@ -2980,6 +2994,7 @@ check-makevars::
  	@${FALSE}
  .endif
  _MLINKS=	${_MLINKS_PREPEND}
 +
  # XXX 20040119 This next line should read:
  # .for lang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
  # but there is currently a bug in make(1) that prevents the double-quote
 @@ -3003,6 +3018,13 @@ _COUNT=1
  .endif
  .endfor
  
 +.if defined(USE_FAKE)
 +.for ___link in ${_MLINKS}
 +_FAKE_MLINKS+=	${FAKE_DESTDIR}${__link}
 +.endfor
 +_MLINKS=	${FAKE_LINKS}
 +.endif
 +
  # XXX 20040119 This next line should read:
  # .for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
  # but there is currently a bug in make(1) that prevents the double-quote
 @@ -3054,6 +3076,13 @@ _MANPAGES:=	${_MANPAGES:S%$%.gz%}
  
  .endif
  
 +.if defined(USE_FAKE)
 +.for m in ${_MANPAGES}
 +_FAKEMAN+=	${FAKE_DESTDIR}${m}
 +.endfor
 +_MANPAGES=	${_FAKEMAN}
 +.endif
 +
  .if ${PREFIX} == /usr
  INFO_PATH?=	share/info
  .else
 @@ -3199,7 +3228,12 @@ IGNORECMD=	${DO_NADA}
  IGNORECMD=	${ECHO_MSG} "===>  ${PKGNAME} "${IGNORE:Q}.;exit 1
  .endif
  
 -.for target in check-sanity fetch checksum extract patch configure all build install reinstall package
 +.if defined(USE_FAKE)
 +_TARGETS=	check-sanity fetch checksum extract patch configure all build fake install reinstall package
 +.else
 +_TARGETS=	check-sanity fetch checksum extract patch configure all build install reinstall package
 +.endif
 +.for target in ${_TARGETS}
  .if !target(${target})
  ${target}:
  	@${IGNORECMD}
 @@ -3319,9 +3353,14 @@ build: configure
  
  # Disable install
  .if defined(NO_INSTALL) && !target(install)
 +.if defined(USE_FAKE)
 +fake: build
 +	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
 +.else
  install: build
  	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
  .endif
 +.endif
  
  # Disable package
  .if defined(NO_PACKAGE) && !target(package)
 @@ -3761,6 +3800,22 @@ check-conflicts:
  
  # Install
  
 +.if defined(USE_FAKE)
 +.if !target(run-fake)
 +run-fake:
 +.if defined(USE_GMAKE)
 +	 @(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
 +.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 +	 @(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV}  ${MAKE_SETUP}${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
 +.endif
 +.else # !defined(USE_GMAKE)
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
 +.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
 +.endif
 +.endif
 +.endif
 +.else
  .if !target(do-install)
  do-install:
  .if defined(USE_GMAKE)
 @@ -3775,6 +3830,7 @@ do-install:
  .endif
  .endif
  .endif
 +.endif
  
  # Package
  
 @@ -3866,6 +3922,14 @@ delete-package-list: delete-package-links-list
  	@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} -f ${PKGFILE})"
  .endif
  
 +.if defined(USE_FAKE)
 +	# This is the real install done by pkg_add
 +.if !target(install-package)
 +install-package:
 +	@${PKG_ADD} ${PKGFILE}
 +.endif
 +.endif
 +
  # Utility targets follow
  
  .if !target(check-already-installed)
 @@ -4277,6 +4341,20 @@ _CONFIGURE_SEQ=	build-depends lib-depends configure-message \
  _BUILD_DEP=		configure
  _BUILD_SEQ=		build-message pre-build pre-build-script do-build \
  				post-build post-build-script
 +.if defined(USE_FAKE)
 +_FAKE_DEP=	build
 +_FAKE_SEQ=             fake-message fake-dir apply-slist fake-pre-install \
 +		       generate-plist fake-pre-su-install do-fake fake-post-install \
 +		       post-fake compress-man  install-rc-script install-ldconfig-file install-desktop-entries \
 +		       fix-fake-symlinks add-plist-info add-plist-docs add-plist-examples \
 +		       add-plist-data add-plist-post
 +
 +_PACKAGE_DEP=  fake
 +_PACKAGE_SEQ=  package-message pre-package pre-package-script \
 +	       do-package post-package post-package-script
 +_INSTALL_DEP=  package
 +_INSTALL_SEQ=  install-message run-depends lib-depends install-package done-message
 +.else #Normal sequence (no fake)
  _INSTALL_DEP=	build
  _INSTALL_SEQ=	install-message check-conflicts \
  				run-depends lib-depends apply-slist pre-install \
 @@ -4290,7 +4368,7 @@ _INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
  _PACKAGE_DEP=	install
  _PACKAGE_SEQ=	package-message pre-package pre-package-script \
  				do-package post-package-script
 -
 +.endif
  .if !target(post-chroot)
  post-chroot:
  	@${DO_NADA}
 @@ -4308,7 +4386,13 @@ fetch: ${_FETCH_DEP} ${_FETCH_SEQ}
  # Main logic. The loop generates 6 main targets and using cookies
  # ensures that those already completed are skipped.
  
 -.for target in extract patch configure build install package
 +.if defined(USE_FAKE)
 +_TARGETS=	extract patch configure build fake package install
 +.else
 +_TARGETS=	extract patch configure build install package
 +.endif
 +
 +.for target in ${_TARGETS}
  
  .if !target(${target}) && defined(_OPTIONS_OK)
  ${target}: ${${target:U}_COOKIE}
 @@ -4360,9 +4444,15 @@ ${${target:U}_COOKIE}::
  .ORDER: ${_EXTRACT_DEP} ${_EXTRACT_SEQ}
  .ORDER: ${_PATCH_DEP} ${_PATCH_SEQ}
  .ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ}
 +.if defined(USE_FAKE)
 +.ORDER: ${_FAKE_DEP} ${_FAKE_SEQ}
 +.ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
 +.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
 +.else
  .ORDER: ${_BUILD_DEP} ${_BUILD_SEQ}
  .ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
  .ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
 +.endif
  
  extract-message:
  	@${ECHO_MSG} "===>  Extracting for ${PKGNAME}"
 @@ -4372,15 +4462,25 @@ configure-message:
  	@${ECHO_MSG} "===>  Configuring for ${PKGNAME}"
  build-message:
  	@${ECHO_MSG} "===>  Building for ${PKGNAME}"
 +fake-message:
 +	@${ECHO_MSG} "===>  Faking install for ${PKGNAME}"
  install-message:
  	@${ECHO_MSG} "===>  Installing for ${PKGNAME}"
  package-message:
  	@${ECHO_MSG} "===>  Building package for ${PKGNAME}"
 +done-message:
 +	@${ECHO_MSG} "===> Done."
  
  # Empty pre-* and post-* targets
  
 +.if defined(USE_FAKE)
 +_NAMES=	check-sanity fetch extract patch configure build fake install package
 +.else
 +_NAMES=	check-sanity fetch extract patch configure build install package
 +.endif
 +
  .for stage in pre post
 -.for name in check-sanity fetch extract patch configure build install package
 +.for name in ${_NAMES}
  
  .if !target(${stage}-${name})
  ${stage}-${name}:
 @@ -4443,6 +4543,13 @@ reinstall:
  	@cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" ${MAKE} install
  .endif
  
 +.if !target(refake)
 +refake:
 +	${RM} -rf ${FAKE_DESTDIR} ${FAKE_COOKIE} ${PACKAGE_COOKIE}
 +	@cd ${.CURDIR} && ${MAKE} fake
 +.endif
 +
 +
  # Deinstall
  #
  # Special target to remove installation
 @@ -5751,16 +5858,31 @@ add-plist-docs:
  		${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
  	fi
  .for x in ${PORTDOCS}
 +.if defined(USE_FAKE)
 +	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 +		if [ ! -e ${FAKE_DESTDIR}${DOCSDIR}/${x} ]; then \
 +		${ECHO_CMD} ${DOCSDIR_REL}/${x} >> ${TMPPLIST}; \
 +	fi;fi
 +.else
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
  		if [ ! -e ${DOCSDIR}/${x} ]; then \
  		${ECHO_CMD} ${DOCSDIR_REL}/${x} >> ${TMPPLIST}; \
  	fi;fi
 +.endif
  .endfor
 +.if defined(USE_FAKE)
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${ECHO_CMD} "@dirrm ${DOCSDIR_REL}" >> ${TMPPLIST}
 +.else
  	@${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
  	@${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${DOCSDIR_REL}" >> ${TMPPLIST}
 +.endif
  .else
  	@${DO_NADA}
  .endif
 @@ -5774,17 +5896,33 @@ add-plist-examples:
  		${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
  	fi
  .for x in ${PORTEXAMPLES}
 +.if defined(USE_FAKE)
 +	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 +		if [ ! -e ${FAKE_DESTDIR}${EXAMPLESDIR}/${x} ]; then \
 +		${ECHO_CMD} ${EXAMPLESDIR}/${x} | \
 +			${SED} -e 's,^${FAKE_DESTDIR}${PREFIX}/,,' >> ${TMPPLIST}; \
 +	fi;fi
 +.else
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
  		if [ ! -e ${EXAMPLESDIR}/${x} ]; then \
  		${ECHO_CMD} ${EXAMPLESDIR}/${x} | \
  			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
  	fi;fi
 +.endif
  .endfor
 +.if defined(USE_FAKE)
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 +.else
  	@${FIND} -P ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
  	@${FIND} -P -d ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 +.endif
  .else
  	@${DO_NADA}
  .endif
 @@ -5798,17 +5936,33 @@ add-plist-data:
  		${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
  	fi
  .for x in ${PORTDATA}
 +.if defined(USE_FAKE)
 +	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
 +		if [ ! -e ${FAKE_PREFIX}${DATADIR}/${x} ]; then \
 +		${ECHO_CMD} ${DATADIR}/${x} | \
 +			${SED} -e 's,^${FAKE_PREFIX}${PREFIX}/,,' >> ${TMPPLIST}; \
 +	fi;fi
 +.else
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \
  		if [ ! -e ${DATADIR}/${x} ]; then \
  		${ECHO_CMD} ${DATADIR}/${x} | \
  			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
  	fi;fi
 +.endif
  .endfor
 +.if defined(USE_FAKE)
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${ECHO_CMD} "@dirrm ${DATADIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 +.else
  	@${FIND} -P ${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
  	@${FIND} -P -d ${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
  		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${DATADIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
 +.endif
  .else
  	@${DO_NADA}
  .endif
 @@ -5819,10 +5973,17 @@ add-plist-info:
  # Process GNU INFO files at package install/deinstall time
  .if defined(INFO)
  .for i in ${INFO}
 +.if !defined(USE_FAKE)
 +	# We don't need this with fake because installation is done with pkg_add 
  	install-info --quiet ${PREFIX}/${INFO_PATH}/$i.info ${PREFIX}/${INFO_PATH}/dir
 +.endif
  	@${ECHO_CMD} "@unexec install-info --quiet --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
  		>> ${TMPPLIST}
 +.if defined(USE_FAKE)
 +	@${LS} ${FAKE_DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
 +.else
  	@${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
 +.endif
  	@${ECHO_CMD} "@exec install-info --quiet %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
  		>> ${TMPPLIST}
  .endfor
 @@ -5855,20 +6016,35 @@ install-rc-script:
  .if defined(USE_RCORDER)
  	@${ECHO_MSG} "===> Installing early rc.d startup script(s)"
  	@${ECHO_CMD} "@cwd /" >> ${TMPPLIST}
 +.if defined(USE_FAKE)
 +	${INSTALL} -d ${FAKE_DESTDIR}/etc/rc.d
 +	@for i in ${USE_RCORDER}; do \
 +		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}/etc/rc.d/$${i%.sh}; \
 +		${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \
 +	done
 +.else
  	@for i in ${USE_RCORDER}; do \
  		${INSTALL_SCRIPT} ${WRKDIR}/$${i} /etc/rc.d/$${i%.sh}; \
  		${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \
  	done
 +.endif
  	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
  .endif
  .if defined(USE_RC_SUBR) && ${USE_RC_SUBR:U} != "YES"
  	@${ECHO_MSG} "===> Installing rc.d startup script(s)"
  	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
 +.if defined(USE_FAKE)
 +	@for i in ${USE_RC_SUBR}; do \
 +		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}${PREFIX}/etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}; \
 +		${ECHO_CMD} "etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}" >> ${TMPPLIST}; \
 +	done
 +.else
  	@for i in ${USE_RC_SUBR}; do \
  		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${PREFIX}/etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}; \
  		${ECHO_CMD} "etc/rc.d/$${i%.sh}${RC_SUBR_SUFFIX}" >> ${TMPPLIST}; \
  	done
  .endif
 +.endif
  .else
  	@${DO_NADA}
  .endif
 @@ -6317,6 +6493,9 @@ check-desktop-entries:
  .if !target(install-desktop-entries)
  install-desktop-entries:
  .if defined(DESKTOP_ENTRIES)
 +.if defined(USE_FAKE)
 +	DESKTOPDIR=${FAKE_DESTDIR}${FRSKTOPDIR}
 +.endif
  	@(${MKDIR} "${DESKTOPDIR}" 2> /dev/null) || \
  		(${ECHO_MSG} "===> Cannot create ${DESKTOPDIR}, check permissions"; exit 1)
  	@set -- ${DESKTOP_ENTRIES} XXX; \
 diff --git a/Mk/bsd.python.mk b/Mk/bsd.python.mk
 index deed51c..e32d4f4 100644
 --- a/Mk/bsd.python.mk
 +++ b/Mk/bsd.python.mk
 @@ -512,7 +512,11 @@ add-plist-easyinstall:
  PYSETUP?=				setup.py
  PYDISTUTILS_CONFIGUREARGS?=
  PYDISTUTILS_BUILDARGS?=
 +.if defined(USE_FAKE)
 +PYDISTUTILS_INSTALLARGS?=      -c -O1 --prefix=${TRUE_PREFIX} --root=${FAKE_DESTDIR}
 +.else
  PYDISTUTILS_INSTALLARGS?=	-c -O1 --prefix=${PREFIX}
 +.endif
  PYDISTUTILS_PKGNAME?=	${PORTNAME}
  PYDISTUTILS_PKGVERSION?=${PORTVERSION}
  PYDISTUTILS_EGGINFO?=	${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-${PYTHON_VERSION:S/thon//}.egg-info
 @@ -724,10 +728,17 @@ do-build:
  	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_BUILD_TARGET} ${PYDISTUTILS_BUILDARGS})
  .endif
  
 +.if defined(USE_FAKE)
 +.if !target(run-fake)
 +run-fake:
 +	@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS})
 +.endif
 +.else
  .if !target(do-install)
  do-install:
  	@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS})
  .endif
 +.endif
  
  .if defined(PYEASYINSTALL_ARCHDEP)
  .if !target(easyinstall-setopt)
 diff --git a/graphics/libpuzzle/Makefile b/graphics/libpuzzle/Makefile
 index 98bf502..ba06e3f 100644
 --- a/graphics/libpuzzle/Makefile
 +++ b/graphics/libpuzzle/Makefile
 @@ -28,13 +28,9 @@ MAN3=		libpuzzle.3 puzzle_set.3
  MAN8=		puzzle-diff.8
  
  post-install:
 -.if !defined(NOPORTDOCS)
  	${MKDIR} ${DOCSDIR}
 -	${INSTALL_DATA} ${WRKSRC}/AUTHORS ${DOCSDIR}
 -	${INSTALL_DATA} ${WRKSRC}/COPYING ${DOCSDIR}
 -	${INSTALL_DATA} ${WRKSRC}/NEWS	${DOCSDIR}
 -	${INSTALL_DATA} ${WRKSRC}/README ${DOCSDIR}
 -	${INSTALL_DATA} ${WRKSRC}/THANKS ${DOCSDIR}
 -.endif
 +.for f in ${PORTDOCS}
 +	${INSTALL_DATA} ${WRKSRC}/${f} ${DOCSDIR}
 +.endfor
  
  .include <bsd.port.mk>
 diff --git a/sysutils/ftwin/Makefile b/sysutils/ftwin/Makefile
 index ed6616b..e77f325 100644
 --- a/sysutils/ftwin/Makefile
 +++ b/sysutils/ftwin/Makefile
 @@ -31,11 +31,9 @@ PORTDOCS=	AUTHORS EXAMPLES TODO CHANGES KNOWN_BUGS VERSION LICENSE README
  MAN8=		ftwin.8
  
  post-install:
 -.if !defined(NOPORTDOCS)
  	@${MKDIR} ${DOCSDIR}
  .for f in ${PORTDOCS}
  	@${INSTALL_DATA} ${WRKSRC}/${f} ${DOCSDIR}
  .endfor
 -.endif
  
  .include <bsd.port.mk>
 diff --git a/textproc/xmlstarlet/Makefile b/textproc/xmlstarlet/Makefile
 index c2edf4a..9a32368 100644
 --- a/textproc/xmlstarlet/Makefile
 +++ b/textproc/xmlstarlet/Makefile
 @@ -34,10 +34,8 @@ post-patch:
  	@${REINPLACE_CMD} -e "s|%%PTHREAD%%|${PTHREAD_LIBS}|g" \
  		${WRKSRC}/configure
  
 -.if !defined(NOPORTDOCS)
  post-install:
  	${MKDIR} ${DOCSDIR}
  	cd ${WRKSRC}/doc && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR}
 -.endif
  
  .include <bsd.port.mk>
 
 --Kj7319i9nmIyA2yE--

From: Baptiste Daroussin <baptiste.daroussin@gmail.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/133815: [PATCH] bsd.port.mk: implements fakeroot for the
 ports
Date: Sun, 18 Jul 2010 00:03:03 +0200

 Here is a new up to date version + more fixes
 the only areas not tested are gnustep, octave, php and apache
 
 --- fakeroot-newround.patch begins here ---
 diff --git a/bsd.fake.mk b/bsd.fake.mk
 new file mode 100644
 index 0000000..ee771c7
 --- /dev/null
 +++ b/bsd.fake.mk
 @@ -0,0 +1,95 @@
 +# bsd.fake.mk=20
 +#
 +# Fake Setup
 +FAKE_INSTALLDIR?=3D	fakeroot
 +FAKE_TARGET?=3D		${INSTALL_TARGET}
 +DESTDIRNAME?=3D		DESTDIR
 +FAKE_DESTDIR?=3D		${WRKDIR}/${FAKE_INSTALLDIR}
 +FAKE_MAKEARGS?=3D		${MAKE_ARGS} ${DESTDIRNAME}=3D${FAKE_DESTDIR}
 +
 +FAKE_SETUP=3D		TRUE_PREFIX=3D${TRUE_PREFIX} PREFIX=3D${FAKE_DESTDIR}${TRUE=
 _PREFIX} \
 +			MANPREFIX=3D${FAKE_DESTDIR}${MANPREFIX:S/^${FAKE_DESTDIR}//} \
 +			LINUXBASE=3D${FAKE_DESTDIR}${LINUXBASE:S/^${FAKE_DESTDIR}//} \
 +			HOME=3D/${PKGBASE}_installs_to_home \
 +			KMODDIR=3D${FAKE_DESTDIR}${KMODDIR:S/^${FAKE_DESTDIR}//}
 +
 +.if defined(FAKE_OPTS)
 +.if ${FAKE_OPTS:Mtrueprefix}x !=3D "x"
 +	FAKE_MAKEARGS+=3D        PREFIX=3D${TRUE_PREFIX} MANPREFIX=3D${MANPREFIX}=
  DOCSDIR=3D${DOCSDIR} KMODDIR=3D${KMODDIR}
 +.endif
 +
 +.if ${FAKE_OPTS:Mlibs}x !=3D "x"
 +	FAKE_SETUP+=3D   LD_LIBRARY_PATH=3D${FAKE_DESTDIR}${PREFIX}/lib
 +.endif
 +
 +.if ${FAKE_OPTS:Mbin}x !=3D "x"
 +	FAKE_SETUP+=3D   PATH=3D${PATH}:${FAKE_DESTDIR}${PREFIX}/bin:${FAKE_DESTD=
 IR}${PREFIX}/sbin
 +.endif
 +
 +.if ${FAKE_OPTS:Mprefixhack}x !=3D "x"
 +	FAKE_MAKEARGS+=3D        prefix=3D${FAKE_DESTDIR}${TRUE_PREFIX} infodir=
 =3D${FAKE_DESTDIR}${TRUE_PREFIX}/${INFO_PATH}
 +	FAKE_MAKEARGS+=3D        mandir=3D${FAKE_DESTDIR}${MANPREFIX}/man MANDIR=
 =3D${FAKE_DESTDIR}${MANPREFIX}/man
 +.endif
 +.endif
 +
 +FAKE_MAKEARGS+=3D ${EXTRA_FAKE_MAKEARGS}
 +
 +.if !target(fake-dir)
 +fake-dir:
 +	@${INSTALL} -d -m 755 -o root -g wheel ${FAKE_DESTDIR}${PREFIX}
 +.if !defined(NO_MTREE)
 +	@${MTREE_CMD} ${MTREE_ARGS} ${FAKE_DESTDIR}${PREFIX} >/dev/null
 +.if defined(USE_LINUX) && ${PREFIX} !=3D ${LINUXBASE_REL}
 +	 @${INSTALL} -d -m 755 -o root -g wheel ${FAKE_DESTDIR}${LINUXBASE_REL}
 +	 @${MTREE_CMD} ${MTREE_LINUX_ARGS} ${FAKE_DESTDIR}${LINUXBASE_REL} > /dev=
 /null
 +.endif
 +.endif
 +.endif
 +
 +.if !target(fake-pre-install)
 +fake-pre-install:
 +.if target(pre-install)
 +	@cd ${.CURDIR} && exec ${MAKE} pre-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(fake-pre-su-install)
 +fake-pre-su-install:
 +.if target(pre-su-install)
 +	@cd ${.CURDIR} && exec ${MAKE} pre-su-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(do-fake)
 +do-fake:
 +.if target(do-install)
 +	 @cd ${.CURDIR} && exec ${MAKE} do-install ${FAKE_SETUP}
 +.else
 +	 @cd ${.CURDIR} && exec ${MAKE} run-fake
 +.endif
 +.endif
 +
 +.if !target(fake-post-install)
 +fake-post-install:
 +.if target(post-install)
 +	@cd ${.CURDIR} && exec ${MAKE} post-install ${FAKE_SETUP}
 +.endif
 +.endif
 +
 +.if !target(fix-fake-symlinks)
 +fix-fake-symlinks:
 +	-@cd ${FAKE_DESTDIR}${PREFIX}; \
 +	links=3D`${FIND} . -type l | ${GREP} -v -e 'share/nls/POSIX\|share/nls/en=
 _US.US-ASCII'`; \
 +	for link in $$links; do \
 +		if ! readlink $$link | grep ${FAKE_DESTDIR} >/dev/null; then \
 +			continue; \
 +		fi; \
 +		source=3D`readlink $$link | ${SED} -e 's|${FAKE_DESTDIR}||'`; \
 +		${RM} $$link; \
 +		${LN} -s $$source $$link; \
 +	done
 +.if defined(USE_LINUX) && ${PREFIX} !=3D ${LINUXBASE_REL}
 +	@cd ${.CURDIR} && ${MAKE} PREFIX=3D${LINUXBASE_REL} ${.TARGET}
 +.endif
 +.endif
 +
 diff --git a/bsd.gecko.mk b/bsd.gecko.mk
 index 88ae2db..7aa0359 100644
 --- a/bsd.gecko.mk
 +++ b/bsd.gecko.mk
 @@ -612,21 +612,25 @@ gecko-create-plist:
  	${ECHO_CMD} "@unexec ${LOCALBASE}/bin/update-desktop-database > /dev/null=
  || ${TRUE}" >> ${PLIST}
  .endif # !defined(NOGECKO_PLIST)
 =20
 +.if defined(USE_FAKE)
 +run-fake: gecko-do-install
 +.else
  do-install: gecko-do-install
 +.endif
 =20
  gecko-do-install:
  .if !defined(NOGECKO_INSTALL)
  .for dir in ${MOZILLA_PLIST_DIRS}
 -.if !exists(${PREFIX}/${dir})
 -	${MKDIR} ${PREFIX}/${dir}
 -	${CHMOD} 755 ${PREFIX}/${dir}
 +.if !exists(${FAKE_DESTDIR}${PREFIX}/${dir})
 +	${MKDIR} ${FAKE_DESTDIR}${PREFIX}/${dir}
 +	${CHMOD} 755 ${FAKE_DESTDIR}${PREFIX}/${dir}
  .endif
  	cd ${FAKEDIR}/${dir} && ${FIND} . | \
 -		${CPIO} -pdm -L -R ${LIBOWN}:${LIBGRP} ${PREFIX}/${dir}
 +		${CPIO} -pdm -L -R ${LIBOWN}:${LIBGRP} ${FAKE_DESTDIR}${PREFIX}/${dir}
  .endfor
  .for pcfile in ${MOZ_PKGCONFIG_FILES}
  	${INSTALL_DATA} ${FAKEDIR}/libdata/pkgconfig/${pcfile}.pc \
 -		${PREFIX}/libdata/pkgconfig/${pcfile}.pc
 +		${FAKE_DESTDIR}${PREFIX}/libdata/pkgconfig/${pcfile}.pc
  .endfor
  .endif # !defined(NOGECKO_INSTALL)
 =20
 diff --git a/bsd.licenses.mk b/bsd.licenses.mk
 index ad6f5aa..ad56bdd 100644
 --- a/bsd.licenses.mk
 +++ b/bsd.licenses.mk
 @@ -733,14 +733,14 @@ PLIST_FILES+=3D	${_LICENSE_DIR_REL}/${_LICENSE_FILE_$=
 {lic}:T}
  .endif
 =20
  install-license:
 -	@${MKDIR} ${_LICENSE_DIR}
 -	@${INSTALL_DATA} ${_LICENSE_CATALOG_TMP} ${_LICENSE_CATALOG}
 -	@${INSTALL_DATA} ${_LICENSE_REPORT_TMP} ${_LICENSE_REPORT}
 +	@${MKDIR} ${FAKE_DESTDIR}${_LICENSE_DIR}
 +	@${INSTALL_DATA} ${_LICENSE_CATALOG_TMP} ${FAKE_DESTDIR}${_LICENSE_CATALO=
 G}
 +	@${INSTALL_DATA} ${_LICENSE_REPORT_TMP} ${FAKE_DESTDIR}${_LICENSE_REPORT}
  .if ${_LICENSE_COMB} =3D=3D "single"
 -	@${INSTALL_DATA} ${_LICENSE_FILE} ${_LICENSE_DIR}
 +	@${INSTALL_DATA} ${_LICENSE_FILE} ${FAKE_DESTDIR}${_LICENSE_DIR}
  .else
  .	for lic in ${_LICENSE}
 -	@${INSTALL_DATA} ${_LICENSE_FILE_${lic}} ${_LICENSE_DIR}
 +	@${INSTALL_DATA} ${_LICENSE_FILE_${lic}} ${FAKE_DESTDIR}${_LICENSE_DIR}
  .	endfor
  .endif
  # XXX @dirrmtry entry must be here (no way to do with PLIST_* vars)
 diff --git a/bsd.perl.mk b/bsd.perl.mk
 index 26ae196..2b1368e 100644
 --- a/bsd.perl.mk
 +++ b/bsd.perl.mk
 @@ -260,11 +260,20 @@ do-build:
  	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_A=
 RGS} ${ALL_TARGET})
  .endif # !target(do-build)
 =20
 +.if defined(USE_FAKE)
 +.if !defined(USE_GMAKE)
 +.if !target(run-fake)
 +run-fake:
 +	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${FAKE_M=
 AKEARGS} ${FAKE_TARGET})
 +.endif #!target(run-fake)
 +.endif #!target(USE_GMAKE)
 +.else
  .if !defined(USE_GMAKE)
  .if !target(do-install)
  do-install:
  	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_A=
 RGS} ${INSTALL_TARGET})
  .endif # !target(do-install)
  .endif # !defined(USE_GMAKE)
 +.endif # defined(USE_FAKE)
  .endif # defined(PERL_MODBUILD)
  .endif # defined(_POSTMKINCLUDED) && !defined(Perl_Post_Include)
 diff --git a/bsd.port.mk b/bsd.port.mk
 index 6198d3f..4e951e7 100644
 --- a/bsd.port.mk
 +++ b/bsd.port.mk
 @@ -1448,6 +1448,8 @@ LDCONFIG_PLIST_EXEC_CMD?=3D	${LDCONFIG} -m ${LDCONFIG=
 _PLIST}
  LDCONFIG_PLIST_UNEXEC_CMD?=3D	${LDCONFIG} -R
  .endif
 =20
 +TRUE_PREFIX=3D		${PREFIX}
 +
  PKGCOMPATDIR?=3D		${LOCALBASE}/lib/compat/pkg
 =20
  # XXX to remain undefined until all ports that require Perl are fixed
 @@ -1590,6 +1592,11 @@ PERL=3D		${LOCALBASE}/bin/perl
  .include "${PORTSDIR}/Mk/bsd.kde4.mk"
  .endif
 =20
 +.if defined(USE_FAKE)
 +.include "${PORTSDIR}/Mk/bsd.fake.mk"
 +.endif
 +
 +
  # You can force skipping these test by defining IGNORE_PATH_CHECKS
  .if !defined(IGNORE_PATH_CHECKS)
  .if (${PREFIX:C,(^.).*,\1,} !=3D "/")
 @@ -2253,6 +2260,9 @@ INSTALL_COOKIE?=3D	${WRKDIR}/.install_done.${PORTNAME=
 }.${PREFIX:S/\//_/g}
  BUILD_COOKIE?=3D		${WRKDIR}/.build_done.${PORTNAME}.${PREFIX:S/\//_/g}
  PATCH_COOKIE?=3D		${WRKDIR}/.patch_done.${PORTNAME}.${PREFIX:S/\//_/g}
  PACKAGE_COOKIE?=3D	${WRKDIR}/.package_done.${PORTNAME}.${PREFIX:S/\//_/g}
 +.if defined(USE_FAKE)
 +FAKE_COOKIE?=3D		${WRKDIR}/.fake_done.${PORTNAME}.${PREFIX:S/\//_/g}
 +.endif
 =20
  # How to do nothing.  Override if you, for some strange reason, would rath=
 er
  # do something.
 @@ -2481,7 +2491,11 @@ PKGORIGIN?=3D		${PKGCATEGORY}/${PORTDIRNAME}
 =20
 =20
  .if !defined(PKG_ARGS)
 +.if defined(USE_FAKE)
 +PKG_ARGS=3D              -v -S ${FAKE_DESTDIR} -c -${COMMENT:Q} -d ${DESCR=
 } -f ${TMPPLIST} -p ${PREFIX} -P  "`cd ${.CURDIR} && ${MAKE} actual-package=
 -depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${E=
 XTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
 +.else
  PKG_ARGS=3D		-v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -=
 P "`cd ${.CURDIR} && ${MAKE} actual-package-depends | ${GREP} -v -E ${PKG_I=
 GNORE_DEPENDS} | ${SORT} -u -t : -k 2`" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS}
 +.endif
  .if !defined(NO_MTREE)
  PKG_ARGS+=3D		-m ${MTREE_FILE}
  .endif
 @@ -3067,6 +3081,7 @@ check-makevars::
  	@${FALSE}
  .endif
  _MLINKS=3D	${_MLINKS_PREPEND}
 +
  # XXX 20040119 This next line should read:
  # .for lang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
  # but there is currently a bug in make(1) that prevents the double-quote
 @@ -3081,15 +3096,24 @@ _MLINKS+=3D	${___pmlinks:S/=08/ /g}
  .endfor
  .endif
  _COUNT=3D0
 +
 +.if defined(USE_FAKE)
 +.for ___link in ${_MLINKS}
 +FAKE_MLINKS+=3D	${FAKE_DESTDIR}${___link}
 +.endfor
 +_MLINKS=3D	${FAKE_MLINKS}
 +.endif
 +
  .for ___tpmlinks in ${_MLINKS}
  .if ${_COUNT} =3D=3D "1"
 -_TMLINKS+=3D	${___tpmlinks}
 +_TMLINKS+=3D	${___tpmlinks:S%^${FAKE_DESTDIR}%%}
  _COUNT=3D0
  .else
  _COUNT=3D1
  .endif
  .endfor
 =20
 +
  # XXX 20040119 This next line should read:
  # .for manlang in ${MANLANG:S%^%man/%:S%^man/""$%man%}
  # but there is currently a bug in make(1) that prevents the double-quote
 @@ -3141,6 +3165,13 @@ _MANPAGES:=3D	${_MANPAGES:S%$%.gz%}
 =20
  .endif
 =20
 +.if defined(USE_FAKE)
 +.for m in ${_MANPAGES}
 +_FAKEMAN+=3D	${FAKE_DESTDIR}${m}
 +.endfor
 +_MANPAGES=3D	${_FAKEMAN}
 +.endif
 +
  .if ${PREFIX} =3D=3D /usr
  INFO_PATH?=3D	share/info
  .else
 @@ -3286,7 +3317,12 @@ IGNORECMD=3D	${DO_NADA}
  IGNORECMD=3D	${ECHO_MSG} "=3D=3D=3D>  ${PKGNAME} "${IGNORE:Q}.;exit 1
  .endif
 =20
 -.for target in check-sanity fetch checksum extract patch configure all bui=
 ld install reinstall package
 +.if defined(USE_FAKE)
 +_TARGETS=3D	check-sanity fetch checksum extract patch configure all build =
 fake install reinstall package
 +.else
 +_TARGETS=3D	check-sanity fetch checksum extract patch configure all build =
 install reinstall package
 +.endif
 +.for target in ${_TARGETS}
  .if !target(${target})
  ${target}:
  	@${IGNORECMD}
 @@ -3410,9 +3446,14 @@ build: configure
 =20
  # Disable install
  .if defined(NO_INSTALL) && !target(install)
 +.if defined(USE_FAKE)
 +fake: build
 +	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
 +.else
  install: build
  	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
  .endif
 +.endif
 =20
  # Disable package
  .if defined(NO_PACKAGE) && !target(package)
 @@ -3852,6 +3893,22 @@ check-conflicts:
 =20
  # Install
 =20
 +.if defined(USE_FAKE)
 +.if !target(run-fake)
 +run-fake:
 +.if defined(USE_GMAKE)
 +	 @(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${GMAKE} $=
 {MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
 +.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 +	 @(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV}  ${MAKE_SETUP}${GMAKE} $=
 {MAKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
 +.endif
 +.else # !defined(USE_GMAKE)
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${M=
 AKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} ${FAKE_TARGET})
 +.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 +	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_SETUP} ${MAKE} ${M=
 AKE_FLAGS} ${MAKEFILE} ${FAKE_MAKEARGS} install.man)
 +.endif
 +.endif
 +.endif
 +.else
  .if !target(do-install)
  do-install:
  .if defined(USE_GMAKE)
 @@ -3866,6 +3923,7 @@ do-install:
  .endif
  .endif
  .endif
 +.endif
 =20
  # Package
 =20
 @@ -3957,6 +4015,14 @@ delete-package-list: delete-package-links-list
  	@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM=
 } -f ${PKGFILE})"
  .endif
 =20
 +.if defined(USE_FAKE)
 +	# This is the real install done by pkg_add
 +.if !target(install-package)
 +install-package:
 +	${PKG_ADD} ${PKGFILE}
 +.endif
 +.endif
 +
  # Utility targets follow
 =20
  .if !target(check-already-installed)
 @@ -4369,6 +4435,21 @@ _CONFIGURE_SEQ=3D	build-depends lib-depends configur=
 e-message \
  _BUILD_DEP=3D		configure
  _BUILD_SEQ=3D		build-message pre-build pre-build-script do-build \
  				post-build post-build-script
 +.if defined(USE_FAKE)
 +_FAKE_DEP=3D	build
 +_FAKE_SEQ=3D             fake-message fake-dir apply-slist fake-pre-instal=
 l \
 +		       generate-plist fake-pre-su-install do-fake fake-post-install \
 +		       post-fake compress-man  install-rc-script install-ldconfig-file \
 +		       install-desktop-entries install-license \
 +		       fix-fake-symlinks add-plist-info add-plist-docs add-plist-example=
 s \
 +		       add-plist-data add-plist-post
 +
 +_PACKAGE_DEP=3D  fake
 +_PACKAGE_SEQ=3D  package-message pre-package pre-package-script \
 +	       do-package post-package post-package-script
 +_INSTALL_DEP=3D  package
 +_INSTALL_SEQ=3D  install-message run-depends lib-depends install-package d=
 one-message
 +.else #Normal sequence (no fake)
  _INSTALL_DEP=3D	build
  _INSTALL_SEQ=3D	install-message run-depends lib-depends apply-slist pre-in=
 stall \
  				pre-install-script generate-plist check-already-installed
 @@ -4382,7 +4463,7 @@ _INSTALL_SUSEQ=3D check-umask install-mtree pre-su-in=
 stall \
  _PACKAGE_DEP=3D	install
  _PACKAGE_SEQ=3D	package-message pre-package pre-package-script \
  				do-package post-package-script
 -
 +.endif
  .if !target(post-chroot)
  post-chroot:
  	@${DO_NADA}
 @@ -4400,7 +4481,13 @@ fetch: ${_FETCH_DEP} ${_FETCH_SEQ}
  # Main logic. The loop generates 6 main targets and using cookies
  # ensures that those already completed are skipped.
 =20
 -.for target in extract patch configure build install package
 +.if defined(USE_FAKE)
 +_TARGETS=3D	extract patch configure build fake package install
 +.else
 +_TARGETS=3D	extract patch configure build install package
 +.endif
 +
 +.for target in ${_TARGETS}
 =20
  .if !target(${target}) && defined(_OPTIONS_OK)
  ${target}: ${${target:U}_COOKIE}
 @@ -4452,9 +4539,15 @@ ${${target:U}_COOKIE}::
  .ORDER: ${_EXTRACT_DEP} ${_EXTRACT_SEQ}
  .ORDER: ${_PATCH_DEP} ${_PATCH_SEQ}
  .ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ}
 +.if defined(USE_FAKE)
 +.ORDER: ${_FAKE_DEP} ${_FAKE_SEQ}
 +.ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
 +.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
 +.else
  .ORDER: ${_BUILD_DEP} ${_BUILD_SEQ}
  .ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
  .ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
 +.endif
 =20
  extract-message:
  	@${ECHO_MSG} "=3D=3D=3D>  Extracting for ${PKGNAME}"
 @@ -4464,15 +4557,25 @@ configure-message:
  	@${ECHO_MSG} "=3D=3D=3D>  Configuring for ${PKGNAME}"
  build-message:
  	@${ECHO_MSG} "=3D=3D=3D>  Building for ${PKGNAME}"
 +fake-message:
 +	@${ECHO_MSG} "=3D=3D=3D>  Faking install for ${PKGNAME}"
  install-message:
  	@${ECHO_MSG} "=3D=3D=3D>  Installing for ${PKGNAME}"
  package-message:
  	@${ECHO_MSG} "=3D=3D=3D>  Building package for ${PKGNAME}"
 +done-message:
 +	@${ECHO_MSG} "=3D=3D=3D> Done."
 =20
  # Empty pre-* and post-* targets
 =20
 +.if defined(USE_FAKE)
 +_NAMES=3D	check-sanity fetch extract patch configure build fake install pa=
 ckage
 +.else
 +_NAMES=3D	check-sanity fetch extract patch configure build install package
 +.endif
 +
  .for stage in pre post
 -.for name in check-sanity fetch extract patch configure build install pack=
 age
 +.for name in ${_NAMES}
 =20
  .if !target(${stage}-${name})
  ${stage}-${name}:
 @@ -4535,6 +4638,13 @@ reinstall:
  	@cd ${.CURDIR} && DEPENDS_TARGET=3D"${DEPENDS_TARGET}" ${MAKE} install
  .endif
 =20
 +.if !target(refake)
 +refake:
 +	${RM} -rf ${FAKE_DESTDIR} ${FAKE_COOKIE} ${PACKAGE_COOKIE}
 +	@cd ${.CURDIR} && ${MAKE} fake
 +.endif
 +
 +
  # Deinstall
  #
  # Special target to remove installation
 @@ -5844,14 +5954,14 @@ add-plist-docs:
  	fi
  .for x in ${PORTDOCS}
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit=
  1};'; then \
 -		if [ ! -e ${DOCSDIR}/${x} ]; then \
 +		if [ ! -e ${FAKE_DESTDIR}${DOCSDIR}/${x} ]; then \
  		${ECHO_CMD} ${DOCSDIR_REL}/${x} >> ${TMPPLIST}; \
  	fi;fi
  .endfor
 -	@${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
 -	@${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev=
 /null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/de=
 v/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${DOCSDIR_REL}" >> ${TMPPLIST}
  .else
  	@${DO_NADA}
 @@ -5867,15 +5977,15 @@ add-plist-examples:
  	fi
  .for x in ${PORTEXAMPLES}
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit=
  1};'; then \
 -		if [ ! -e ${EXAMPLESDIR}/${x} ]; then \
 +		if [ ! -e ${FAKE_DESTDIR}${EXAMPLESDIR}/${x} ]; then \
  		${ECHO_CMD} ${EXAMPLESDIR}/${x} | \
 -			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
 +			${SED} -e 's,^${FAKE_DESTDIR}${PREFIX}/,,' >> ${TMPPLIST}; \
  	fi;fi
  .endfor
 -	@${FIND} -P ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null |=
  \
 -		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
 -	@${FIND} -P -d ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null =
 | \
 -		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type =
 d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type=
  d 2>/dev/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
  .else
  	@${DO_NADA}
 @@ -5890,16 +6000,24 @@ add-plist-data:
  		${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
  	fi
  .for x in ${PORTDATA}
 +.if defined(USE_FAKE)
 +	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit=
  1};'; then \
 +		if [ ! -e ${FAKE_PREFIX}${DATADIR}/${x} ]; then \
 +		${ECHO_CMD} ${DATADIR}/${x} | \
 +			${SED} -e 's,^${FAKE_PREFIX}${PREFIX}/,,' >> ${TMPPLIST}; \
 +	fi;fi
 +.else
  	@if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit=
  1};'; then \
  		if [ ! -e ${DATADIR}/${x} ]; then \
  		${ECHO_CMD} ${DATADIR}/${x} | \
  			${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \
  	fi;fi
 +.endif
  .endfor
 -	@${FIND} -P ${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
 -	@${FIND} -P -d ${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \
 -		${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
 +	@${FIND} -P ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev=
 /null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
 +	@${FIND} -P -d ${FAKE_DESTDIR}${PORTDATA:S/^/${DATADIR}\//} -type d 2>/de=
 v/null | \
 +		${SED} -ne 's,^${FAKE_DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST}
  	@${ECHO_CMD} "@dirrm ${DATADIR:S,^${PREFIX}/,,}" >> ${TMPPLIST}
  .else
  	@${DO_NADA}
 @@ -5911,10 +6029,15 @@ add-plist-info:
  # Process GNU INFO files at package install/deinstall time
  .if defined(INFO)
  .for i in ${INFO}
 +.if !defined(USE_FAKE)
 +	# We don't need this with fake because installation is done with pkg_add=
 =20
  	install-info --quiet ${PREFIX}/${INFO_PATH}/$i.info ${PREFIX}/${INFO_PATH=
 }/dir
 +.else
 +	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
 +.endif
  	@${ECHO_CMD} "@unexec install-info --quiet --delete %D/${INFO_PATH}/$i.in=
 fo %D/${INFO_PATH}/dir" \
  		>> ${TMPPLIST}
 -	@${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${T=
 MPPLIST}
 +	@${LS} ${FAKE_DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${FAK=
 E_DESTDIR}${PREFIX}/::g >> ${TMPPLIST}
  	@${ECHO_CMD} "@exec install-info --quiet %D/${INFO_PATH}/$i.info %D/${INF=
 O_PATH}/dir" \
  		>> ${TMPPLIST}
  .endfor
 @@ -5947,8 +6070,9 @@ install-rc-script:
  .if defined(USE_RCORDER)
  	@${ECHO_MSG} "=3D=3D=3D> Installing early rc.d startup script(s)"
  	@${ECHO_CMD} "@cwd /" >> ${TMPPLIST}
 +	${INSTALL} -d ${FAKE_DESTDIR}/etc/rc.d
  	@for i in ${USE_RCORDER}; do \
 -		${INSTALL_SCRIPT} ${WRKDIR}/$${i} /etc/rc.d/$${i%.sh}; \
 +		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}/etc/rc.d/$${i%.sh}; \
  		${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \
  	done
  	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
 @@ -5957,7 +6081,7 @@ install-rc-script:
  	@${ECHO_MSG} "=3D=3D=3D> Installing rc.d startup script(s)"
  	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
  	@for i in ${USE_RC_SUBR}; do \
 -		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${PREFIX}/etc/rc.d/$${i%.sh}; \
 +		${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${FAKE_DESTDIR}${PREFIX}/etc/rc.d/$${i=
 %.sh}; \
  		${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \
  	done
  .endif
 @@ -6409,6 +6533,7 @@ check-desktop-entries:
  .if !target(install-desktop-entries)
  install-desktop-entries:
  .if defined(DESKTOP_ENTRIES)
 +	DESKTOPDIR=3D${FAKE_DESTDIR}${FRSKTOPDIR}
  	@(${MKDIR} "${DESKTOPDIR}" 2> /dev/null) || \
  		(${ECHO_MSG} "=3D=3D=3D> Cannot create ${DESKTOPDIR}, check permissions"=
 ; exit 1)
  	@set -- ${DESKTOP_ENTRIES} XXX; \
 diff --git a/bsd.python.mk b/bsd.python.mk
 index cab0292..8767b94 100644
 --- a/bsd.python.mk
 +++ b/bsd.python.mk
 @@ -494,7 +494,11 @@ add-plist-easyinstall:
  PYSETUP?=3D				setup.py
  PYDISTUTILS_CONFIGUREARGS?=3D
  PYDISTUTILS_BUILDARGS?=3D
 +.if defined(USE_FAKE)
 +PYDISTUTILS_INSTALLARGS?=3D      -c -O1 --prefix=3D${TRUE_PREFIX} --root=
 =3D${FAKE_DESTDIR}
 +.else
  PYDISTUTILS_INSTALLARGS?=3D	-c -O1 --prefix=3D${PREFIX}
 +.endif
  PYDISTUTILS_PKGNAME?=3D	${PORTNAME}
  PYDISTUTILS_PKGVERSION?=3D${PORTVERSION}
  PYDISTUTILS_EGGINFO?=3D	${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDI=
 STUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-${PYTHON_VERSION:S/thon//}.egg-info
 @@ -706,10 +710,17 @@ do-build:
  	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${PY=
 DISTUTILS_BUILD_TARGET} ${PYDISTUTILS_BUILDARGS})
  .endif
 =20
 +.if defined(USE_FAKE)
 +.if !target(run-fake)
 +run-fake:
 +	@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${=
 PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS})
 +.endif
 +.else
  .if !target(do-install)
  do-install:
  	@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} ${=
 PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS})
  .endif
 +.endif
 =20
  .if defined(PYEASYINSTALL_ARCHDEP)
  .if !target(easyinstall-setopt)
 --- fakeroot-newround.patch ends here ---
State-Changed-From-To: open->closed 
State-Changed-By: bapt 
State-Changed-When: Wed Oct 9 11:55:05 UTC 2013 
State-Changed-Why:  
It's in now 

http://www.freebsd.org/cgi/query-pr.cgi?pr=133815 
>Unformatted:
