From baptiste.daroussin@gmail.com Fri Apr 17 15:29:48 2009 Return-Path: Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 73B561065693 for ; 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 ; Fri, 17 Apr 2009 15:29:47 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: by bwz9 with SMTP id 9so350405bwz.43 for ; 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 Reply-To: Bapt 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: open >Quarter: >Keywords: >Date-Required: >Class: update >Submitter-Id: current-users >Arrival-Date: Fri Apr 17 15:30:00 UTC 2009 >Closed-Date: >Last-Modified: Sat Jul 17 22:20:06 UTC 2010 >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 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 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 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 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 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 --Kj7319i9nmIyA2yE-- From: Baptiste Daroussin 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 --- >Unformatted: