From root@catv-50635cb6.catv.broadband.hu Wed Jul 19 16:12:42 2006 Return-Path: Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E71AD16A4E2 for ; Wed, 19 Jul 2006 16:12:42 +0000 (UTC) (envelope-from root@catv-50635cb6.catv.broadband.hu) Received: from catv-50635cb6.catv.broadband.hu (catv-50635cb6.catv.broadband.hu [80.99.92.182]) by mx1.FreeBSD.org (Postfix) with ESMTP id D4E3643D49 for ; Wed, 19 Jul 2006 16:12:38 +0000 (GMT) (envelope-from root@catv-50635cb6.catv.broadband.hu) Received: by catv-50635cb6.catv.broadband.hu (Postfix, from userid 0) id 9FD18289D74; Wed, 19 Jul 2006 18:12:36 +0200 (CEST) Message-Id: <20060719161236.9FD18289D74@catv-50635cb6.catv.broadband.hu> Date: Wed, 19 Jul 2006 18:12:36 +0200 (CEST) From: Gabor Kovesdan Reply-To: Gabor Kovesdan To: FreeBSD-gnats-submit@freebsd.org Cc: Gabor Kovesdan Subject: [patch] bsd.port.mk - DESTDIR support X-Send-Pr-Version: 3.113 X-GNATS-Notify: >Number: 100555 >Category: ports >Synopsis: [patch] bsd.port.mk - DESTDIR support >Confidential: no >Severity: non-critical >Priority: medium >Responsible: portmgr >State: closed >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed Jul 19 16:20:14 GMT 2006 >Closed-Date: Mon Aug 14 13:24:44 GMT 2006 >Last-Modified: Mon Aug 14 13:24:44 GMT 2006 >Originator: Gabor Kovesdan >Release: FreeBSD 6.1-STABLE i386 >Organization: n/a >Environment: System: FreeBSD spitfire 6.1-STABLE FreeBSD 6.1-STABLE #0: Sun Jul 2 19:31:12 CEST 2006 gabor@spitfire:/usr/src/sys/i386/compile/SPITFIRE i386 >Description: The attached patches implement DESTDIR support in the ports infrastructure, which can be used to install ports into separate jail environments. Besides, some ports need a slight modification to work with DESTDIR. I did a lot of effort so that individual ports need the least modification, but I had to change the behaviour of LOCALBASE, LINUXBASE, X11BASE a bit. They contain DESTDIR in itself, thus we can just leave lines like BUILD_DEPENDS= ${LOCALBASE}/bin/foo:${PORTSDIR}/misc/foo alone. I introduced LOCALBASE_REL, LINUXBASE_REL and X11BASE_REL for the old functionality. Note, that LOCALBASE, LINUXBASE and X11BASE are still overrideable with my workaround, so this change doesn't break compatibility! Simpler ports like net/csup already work with this implementation, but e.g. shells/bash needs just a little bit of modification. This PR supersedes ports/28155. Sponsored by: Google Summer of Code 2006 Reviewed by: erwin Wiki: http://wikitest.freebsd.org/DESTDIR See also: http://perforce.freebsd.org/depotTreeBrowser.cgi?FSPC=//depot/projects/soc2006/gabor%5fdocs/porters%2dhandbook&HIDEDEL=NO (I wrote some sentences for porters-handbook, how one can write DESTDIR-respective ports) >How-To-Repeat: >Fix: --- destdir_mk.diff begins here --- diff -Nur /usr/ports/Mk/bsd.apache.mk ../Mk/bsd.apache.mk --- /usr/ports/Mk/bsd.apache.mk Tue Jun 20 06:58:12 2006 +++ ../Mk/bsd.apache.mk Sat Jul 15 22:39:38 2006 @@ -175,7 +175,7 @@ --${SUEXEC_CONFARGS}-safepath="${SUEXEC_SAFEPATH}" \ --${SUEXEC_CONFARGS}-logfile="${SUEXEC_LOGFILE}" .if ${USE_APACHE:Mcommon2*} != "" -CONFIGURE_ARGS+= --${SUEXEC_CONFARGS}-bin="${PREFIX}/sbin/suexec" +CONFIGURE_ARGS+= --${SUEXEC_CONFARGS}-bin="${DESTDIR}${PREFIX}/sbin/suexec" .endif . if defined(WITH_SUEXEC_UMASK) diff -Nur /usr/ports/Mk/bsd.emacs.mk ../Mk/bsd.emacs.mk --- /usr/ports/Mk/bsd.emacs.mk Tue May 16 19:11:20 2006 +++ ../Mk/bsd.emacs.mk Sat Jul 15 22:39:38 2006 @@ -236,8 +236,8 @@ # find where emacsen is installed # look for it in PREEFIX first and fall back to LOCALBASE then -.if exists(${PREFIX}/bin/${EMACS_NAME}-${EMACS_VER}) -EMACS_BASE?= ${PREFIX} +.if exists(${DESTDIR}${PREFIX}/bin/${EMACS_NAME}-${EMACS_VER}) +EMACS_BASE?= ${DESTDIR}${PREFIX} .else EMACS_BASE?= ${LOCALBASE} .endif diff -Nur /usr/ports/Mk/bsd.gnome.mk ../Mk/bsd.gnome.mk --- /usr/ports/Mk/bsd.gnome.mk Wed Jul 5 04:18:08 2006 +++ ../Mk/bsd.gnome.mk Sat Jul 15 22:39:38 2006 @@ -106,13 +106,13 @@ GNOME_HTML_DIR?= ${PREFIX}/share/doc GCONF_CONFIG_OPTIONS?= merged GCONF_CONFIG_DIRECTORY?=etc/gconf/gconf.xml.defaults -GCONF_CONFIG_SOURCE?=xml:${GCONF_CONFIG_OPTIONS}:${PREFIX}/${GCONF_CONFIG_DIRECTORY} +GCONF_CONFIG_SOURCE?=xml:${GCONF_CONFIG_OPTIONS}:${DESTDIR}${PREFIX}/${GCONF_CONFIG_DIRECTORY} GNOME_LOCALSTATEDIR?= ${PREFIX}/share/gnome gnomeprefix_CONFIGURE_ENV=GTKDOC="false" -gnomeprefix_CONFIGURE_ARGS=--localstatedir=${GNOME_LOCALSTATEDIR} \ - --datadir=${PREFIX}/share/gnome \ - --with-html-dir=${GNOME_HTML_DIR} \ - --with-help-dir=${PREFIX}/share/gnome/help \ +gnomeprefix_CONFIGURE_ARGS=--localstatedir=${DESTDIR}${GNOME_LOCALSTATEDIR} \ + --datadir=${DESTDIR}${PREFIX}/share/gnome \ + --with-html-dir=${DESTDIR}${GNOME_HTML_DIR} \ + --with-help-dir=${DESTDIR}${PREFIX}/share/gnome/help \ --disable-gtk-doc \ --with-gconf-source=${GCONF_CONFIG_SOURCE} gnomeprefix_USE_GNOME_IMPL=gnomehier @@ -725,10 +725,10 @@ gnome-pre-su-install: .if defined(_USE_GNOME) && ${_USE_GNOME:Mgnomeprefix}!="" && !defined(NO_MTREE) - @${MTREE_CMD} ${MTREE_ARGS:S/${MTREE_FILE}/${GNOME_MTREE_FILE}/} ${PREFIX}/ >/dev/null + @${MTREE_CMD} ${MTREE_ARGS:S/${MTREE_FILE}/${GNOME_MTREE_FILE}/} ${DESTDIR}${PREFIX}/ >/dev/null .endif .if defined(GCONF_SCHEMAS) - @${MKDIR} ${PREFIX}/etc/gconf/gconf.xml.defaults/ + @${MKDIR} ${DESTDIR}${PREFIX}/etc/gconf/gconf.xml.defaults/ .else @${DO_NADA} .endif diff -Nur /usr/ports/Mk/bsd.mail.mk ../Mk/bsd.mail.mk --- /usr/ports/Mk/bsd.mail.mk Sat Jan 21 18:37:01 2006 +++ ../Mk/bsd.mail.mk Sat Jul 15 22:39:38 2006 @@ -51,9 +51,9 @@ .endif .if defined(QMAIL_SLAVEPORT) -QMAIL_DEPENDS= ${QMAIL_PREFIX}/bin/qmail-send:${PORTSDIR}/mail/qmail-${QMAIL_SLAVEPORT:L} +QMAIL_DEPENDS= ${DESTDIR}${QMAIL_PREFIX}/bin/qmail-send:${PORTSDIR}/mail/qmail-${QMAIL_SLAVEPORT:L} .else -QMAIL_DEPENDS= ${QMAIL_PREFIX}/bin/qmail-send:${PORTSDIR}/mail/qmail +QMAIL_DEPENDS= ${DESTDIR}${QMAIL_PREFIX}/bin/qmail-send:${PORTSDIR}/mail/qmail .endif .if defined(USE_QMAIL) || defined(USE_QMAIL_RUN) diff -Nur /usr/ports/Mk/bsd.openssl.mk ../Mk/bsd.openssl.mk --- /usr/ports/Mk/bsd.openssl.mk Thu May 25 17:17:34 2006 +++ ../Mk/bsd.openssl.mk Sat Jul 15 22:39:38 2006 @@ -59,10 +59,10 @@ .endif .if defined(WITH_OPENSSL_BASE) -OPENSSLBASE= /usr -OPENSSLDIR= /etc/ssl +OPENSSLBASE= ${DESTDIR}/usr +OPENSSLDIR= ${DESTDIR}/etc/ssl -.if !exists(/usr/lib/libcrypto.so) +.if !exists(${DESTDIR}/usr/lib/libcrypto.so) check-depends:: @${ECHO_CMD} "Dependency error: this port requires the OpenSSL library, which is part of" @${ECHO_CMD} "the FreeBSD crypto distribution but not installed on your" @@ -98,7 +98,7 @@ .endif MAKE_ARGS+= OPENSSL_CFLAGS="${OPENSSL_CFLAGS}" .endif -OPENSSLRPATH= /usr/lib:${LOCALBASE}/lib +OPENSSLRPATH= ${DESTDIR}$/usr/lib:${LOCALBASE}/lib .else diff -Nur /usr/ports/Mk/bsd.port.mk ../Mk/bsd.port.mk --- /usr/ports/Mk/bsd.port.mk Tue Jul 18 06:12:51 2006 +++ ../Mk/bsd.port.mk Wed Jul 19 17:40:51 2006 @@ -472,7 +472,7 @@ # If this is set to a list of files, these files will be # automatically added to ${SUB_FILES}, some %%VAR%%'s will # automatically be expanded, they will be installed in -# ${PREFIX}/etc/rc.d and added to the packing list. +# ${DESTDIR}${PREFIX}/etc/rc.d and added to the packing list. # USE_RCORDER - List of rc.d startup scripts to be called early in the boot # process. This acts exactly like USE_RC_SUBR except that # scripts are installed in /etc/rc.d. @@ -492,15 +492,31 @@ # Various directory definitions and variables to control them. # You rarely need to redefine any of these except WRKSRC and NO_WRKSUBDIR. # +# DESTDIR - The path to the environment we are installing to. Define +# this if you want to install packages into a jail +# or into an another FreeBSD environment mounted +# elsewhere than /. ${PREFIX} is relative to +# ${DESTDIR}. E.g. setting DESTDIR=/bla PREFIX=/opt will +# result packages installed under /bla/opt and registered +# under /bla/var/db/pkg. +# Default: not set (means /) +# # X11BASE - Where X11 ports install things. +# Default: ${DESTDIR}/usr/X11R6 +# X11BASE_REL - Same as X11BASE, but relative to DESTDIR # Default: /usr/X11R6 # LOCALBASE - Where non-X11 ports install things. +# Default: ${DESTDIR}/usr/local +# LOCALBASE_REL - Same as LOCALBASE, but relative to DESTDIR # Default: /usr/local # LINUXBASE - Where Linux ports install things. +# Default: ${DESTDIR}/compat/linux +# LINUXBASE_REL - Same as LINUXBASE, but relative to DESTDIR # Default: /compat/linux # PREFIX - Where *this* port installs its files. -# Default: ${X11BASE} if USE_X_PREFIX is set, ${LINUXBASE} if -# USE_LINUX_PREFIX is set, otherwise ${LOCALBASE} +# Default: ${X11BASE_REL} if USE_X_PREFIX is set, +# ${LINUXBASE_REL} if USE_LINUX_PREFIX is set, +# otherwise ${LOCALBASE_REL} # MASTERDIR - Where the port finds patches, package files, etc. Define # this is you have two or more ports that share most of the # files. @@ -567,7 +583,7 @@ # installs its own manpage links so they will show up # correctly in ${PLIST}.) # MANPREFIX - The directory prefix for ${MAN} and ${MLINKS}. -# Default: ${PREFIX} +# Default: ${DESTDIR}${PREFIX} # MANPREFIX # - If manual pages of some sections install in different # locations than others, use these. @@ -854,7 +870,7 @@ # rest of PLIST, so ${PLIST_SUB} substitutions also # apply here. It is recommended that you use # %%PREFIX%% for ${PREFIX}, %%LOCALBASE%% for -# ${LOCALBASE} and %%X11BASE%% for ${X11BASE}. +# ${LOCALBASE_REL} and %%X11BASE%% for ${X11BASE_REL}. # Default: %%PREFIX%%/lib # USE_LDCONFIG - If set to "yes", it replaces the old variable INSTALLS_SHLIB. # Otherwise, it can be set to a list of directories to be added to @@ -868,14 +884,14 @@ # Note: that should only be used on 64-bit architectures. # # DOCSDIR - Name of the directory to install the packages docs in. -# Default: ${PREFIX}/share/doc/${PORTNAME} +# Default: ${DESTDIR}${PREFIX}/share/doc/${PORTNAME} # EXAMPLESDIR - Name of the directory to install the packages examples in. -# Default: ${PREFIX}/share/examples/${PORTNAME} +# Default: ${DESTDIR}${PREFIX}/share/examples/${PORTNAME} # DATADIR - Name of the directory to install the packages shared data in. -# Default: ${PREFIX}/share/${PORTNAME} +# Default: ${DESTDIR}${PREFIX}/share/${PORTNAME} # # DESKTOPDIR - Name of the directory to install ${DESKTOP_ENTRIES} in. -# Default: ${PREFIX}/share/applications +# Default: ${DESTDIR}${PREFIX}/share/applications # DESKTOP_ENTRIES # - List of desktop entry files to generate and install in # ${DESKTOPDIR}. The format is @@ -944,9 +960,9 @@ # it attempts to apply them. # PKG_DBDIR - Where package installation is recorded; this directory # must not contain anything else. -# Default: /var/db/pkg +# Default: ${DESTDIR}/var/db/pkg # PORT_DBDIR - Where port configuration options are recorded. -# Default: /var/db/ports +# Default: ${DESTDIR}/var/db/ports # NO_PKG_REGISTER # - Don't register a port installation as a package. # FORCE_PKG_REGISTER @@ -1022,6 +1038,7 @@ CHGRP?= /usr/bin/chgrp CHMOD?= /bin/chmod CHOWN?= /usr/sbin/chown +CHROOT?= /usr/sbin/chroot COMM?= /usr/bin/comm CP?= /bin/cp CPIO?= /usr/bin/cpio @@ -1094,6 +1111,30 @@ # Kludge for pre-3.0 systems MACHINE_ARCH?= i386 +# Check the compatibility layer for amd64/ia64 + +.if ${ARCH} == "amd64" || ${ARCH} =="ia64" +.if exists(/usr/lib32) +HAVE_COMPAT_IA32_LIBS?= YES +.endif +.if !defined(HAVE_COMPAT_IA32_KERN) +HAVE_COMPAT_IA32_KERN!= if ${SYSCTL} -a compat.ia32.maxvmem >/dev/null 2>&1; then echo YES; fi +.endif +.endif + +.if defined(IA32_BINARY_PORT) && ${ARCH} != "i386" +.if ${ARCH} == "amd64" || ${ARCH} == "ia64" +.if !defined(HAVE_COMPAT_IA32_KERN) +IGNORE= you need a kernel with compiled-in IA32 compatibility to use this port. +.elif !defined(HAVE_COMPAT_IA32_LIBS) +IGNORE= you need the 32-bit libraries installed under /usr/lib32 to use this port. +.endif +.else +IGNORE= you have to use i386 (or compatible) platform to use this port. +.endif +.endif + + # Get the operating system type .if !defined(OPSYS) OPSYS!= ${UNAME} -s @@ -1106,8 +1147,14 @@ # Get __FreeBSD_version .if !defined(OSVERSION) +.if exists(${DESTDIR}/usr/include/sys/param.h) +OSVERSION!= ${AWK} '/^\#define __FreeBSD_version/ {print $$3}' < ${DESTDIR}/usr/include/sys/param.h +.elif exists(${DESTDIR}/usr/src/sys/sys/param.h) +OSVERSION!= ${AWK} '/^\#define __FreeBSD_version/ {print $$3}' < ${DESTDIR}/usr/src/sys/sys/param.h +.else OSVERSION!= ${SYSCTL} -n kern.osreldate .endif +.endif # Get the object format. .if !defined(PORTOBJFORMAT) @@ -1177,7 +1224,7 @@ .endif # where 'make config' records user configuration options -PORT_DBDIR?= /var/db/ports +PORT_DBDIR?= ${DESTDIR}/var/db/ports LDCONFIG_DIR= libdata/ldconfig LDCONFIG32_DIR= libdata/ldconfig32 @@ -1264,9 +1311,15 @@ # tree we are and thus can't go relative. They can, of course, be overridden # by individual Makefiles or local system make configuration. PORTSDIR?= /usr/ports -LOCALBASE?= ${DESTDIR}/usr/local -X11BASE?= ${DESTDIR}/usr/X11R6 -LINUXBASE?= ${DESTDIR}/compat/linux +LOCALBASE?= /usr/local +X11BASE?= /usr/X11R6 +LINUXBASE?= /compat/linux +LOCALBASE_REL:= ${LOCALBASE} +X11BASE_REL:= ${X11BASE} +LINUXBASE_REL:= ${LINUXBASE} +LOCALBASE:= ${DESTDIR}${LOCALBASE_REL} +X11BASE:= ${DESTDIR}${X11BASE_REL} +LINUXBASE:= ${DESTDIR}${LINUXBASE_REL} DISTDIR?= ${PORTSDIR}/distfiles _DISTDIR?= ${DISTDIR}/${DIST_SUBDIR} INDEXDIR?= ${PORTSDIR} @@ -1311,22 +1364,64 @@ USE_XLIB= yes .endif .if defined(USE_X_PREFIX) -PREFIX?= ${X11BASE} +PREFIX?= ${X11BASE_REL} .elif defined(USE_LINUX_PREFIX) -PREFIX?= ${LINUXBASE} +PREFIX?= ${LINUXBASE_REL} NO_MTREE= yes .else -PREFIX?= ${LOCALBASE} +PREFIX?= ${LOCALBASE_REL} .endif .if defined(USE_LINUX_PREFIX) -LDCONFIG_CMD?= ${LINUXBASE}/sbin/ldconfig -r ${LINUXBASE} +.if !defined(DESTDIR) +LDCONFIG_CMD?= ${LINUXBASE_REL}/sbin/ldconfig -r ${LINUXBASE_REL} +.else +LDCONFIG_CMD?= ${CHROOT} ${DESTDIR} ${LINUXBASE_REL}/sbin/ldconfig -r ${LINUXBASE_REL} +.endif LDCONFIG_PLIST_EXEC_CMD?= ${LDCONFIG_CMD} LDCONFIG_PLIST_UNEXEC_CMD?= ${LDCONFIG_CMD} .else -LDCONFIG_CMD?= ${LDCONFIG} -m ${LDCONFIG_RUNLIST} +.if !defined(DESTDIR) +LDCONFIG_CMD?= ${LDCONFIG} -m ${LDCONFIG_RUNLIST} LDCONFIG_PLIST_EXEC_CMD?= ${LDCONFIG} -m ${LDCONFIG_PLIST} LDCONFIG_PLIST_UNEXEC_CMD?= ${LDCONFIG} -R +.else +LDCONFIG_CMD?= ${CHROOT} ${DESTDIR} ${LDCONFIG} -m ${LDCONFIG_RUNLIST} +LDCONFIG_PLIST_EXEC_CMD?= ${CHROOT} ${DESTDIR} ${LDCONFIG} -m ${LDCONFIG_PLIST} +LDCONFIG_PLIST_UNEXEC_CMD?= ${CHROOT} ${DESTDIR} ${LDCONFIG} -R +.endif +.endif + +# These do some path checks if DESTDIR is set correctly. +# You can force skipping these test by defining IGNORE_PATH_CHECKS +.if !defined(IGNORE_PATH_CHECKS) +.if (${PREFIX:C,(^.).*,\1,} != "/") +.BEGIN: + @${ECHO_MSG} "PREFIX must be defined as an absolute path so that when 'make'" + @${ECHO_MSG} "is invoked in the work area PREFIX points to the right place." + @${FALSE} +.endif +.if defined(DESTDIR) +.if (${DESTDIR:C,(^.).*,\1,} != "/") +.if ${DESTDIR} == "/" +.BEGIN: + @${ECHO_MSG} "You can't set DESTDIR to /. Please re-run make with" + @${ECHO_MSG} "DESTDIR unset." + @${FALSE} +.else +.BEGIN: + @${ECHO_MSG} "DESTDIR must be defined as an absolute path so that when 'make'" + @${ECHO_MSG} "is invoked in the work area DESTDIR points to the right place." + @${FALSE} +.endif +.endif +.if (${DESTDIR:C,^.*(/)$$,\1,} == "/") +.BEGIN: + @${ECHO_MSG} "DESTDIR can't have a trailing slash. Please remove the trailing" + @${ECHO_MSG} "slash and re-run 'make'" + @${FALSE} +.endif +.endif .endif PKGCOMPATDIR?= ${LOCALBASE}/lib/compat/pkg @@ -1381,8 +1476,8 @@ SITE_PERL?= ${LOCALBASE}/${SITE_PERL_REL} .if ${PERL_LEVEL} < 500600 -PERL5= /usr/bin/perl${PERL_VERSION} -PERL= /usr/bin/perl +PERL5= ${DESTDIR}/usr/bin/perl${PERL_VERSION} +PERL= ${DESTDIR}/usr/bin/perl .else PERL5= ${LOCALBASE}/bin/perl${PERL_VERSION} PERL= ${LOCALBASE}/bin/perl @@ -1496,8 +1591,8 @@ BUILD_WRKSRC?= ${WRKSRC} INSTALL_WRKSRC?=${WRKSRC} -PLIST_SUB+= OSREL=${OSREL} PREFIX=%D LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} -SUB_LIST+= PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} \ +PLIST_SUB+= OSREL=${OSREL} PREFIX=%D LOCALBASE=${LOCALBASE_REL} X11BASE=${X11BASE_REL} +SUB_LIST+= PREFIX=${PREFIX} LOCALBASE=${LOCALBASE_REL} X11BASE=${X11BASE_REL} \ DATADIR=${DATADIR} DOCSDIR=${DOCSDIR} EXAMPLESDIR=${EXAMPLESDIR} PLIST_REINPLACE+= dirrmtry @@ -1838,10 +1933,10 @@ PL_BUILD?= Build CONFIGURE_ARGS+= \ create_packlist=0 \ - install_path=lib="${PREFIX}/${SITE_PERL_REL}" \ - install_path=arch="${PREFIX}/${SITE_PERL_REL}/${PERL_ARCH}" \ - install_path=script="${PREFIX}/bin" \ - install_path=bin="${PREFIX}/bin" \ + install_path=lib="${DESTDIR}${PREFIX}/${SITE_PERL_REL}" \ + install_path=arch="${DESTDIR}${PREFIX}/${SITE_PERL_REL}/${PERL_ARCH}" \ + install_path=script="${DESTDIR}${PREFIX}/bin" \ + install_path=bin="${DESTDIR}${PREFIX}/bin" \ install_path=libdoc="${MAN3PREFIX}/man/man3" \ install_path=bindoc="${MAN1PREFIX}/man/man1" .elif defined(PERL_CONFIGURE) @@ -1986,7 +2081,7 @@ NONEXISTENT?= /nonexistent # Miscellaneous overridable commands: -GMAKE?= gmake +GMAKE?= ${LOCALBASE}/bin/gmake XMKMF?= xmkmf -a .if exists(/sbin/md5) MD5?= /sbin/md5 @@ -1995,8 +2090,8 @@ .endif .if exists(/sbin/sha256) SHA256?= /sbin/sha256 -.elif exists(${LOCALBASE}/sbin/sha256) -SHA256?= ${LOCALBASE}/sbin/sha256 +.elif exists(${LOCALBASE_REL}/sbin/sha256) +SHA256?= ${LOCALBASE_REL}/sbin/sha256 .else SHA256?= NO .endif @@ -2007,7 +2102,7 @@ MAKE_FLAGS?= -f MAKEFILE?= Makefile -MAKE_ENV+= PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} MOTIFLIB="${MOTIFLIB}" LIBDIR="${LIBDIR}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" MANPREFIX="${MANPREFIX}" +MAKE_ENV+= DESTDIR=${DESTDIR} PREFIX=${PREFIX} LOCALBASE=${LOCALBASE_REL} X11BASE=${X11BASE_REL} MOTIFLIB="${MOTIFLIB}" LIBDIR="${LIBDIR}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" MANPREFIX="${MANPREFIX}" .if ${OSVERSION} < 500016 PTHREAD_CFLAGS?= -D_THREAD_SAFE @@ -2101,7 +2196,7 @@ # Figure out where the local mtree file is .if !defined(MTREE_FILE) && !defined(NO_MTREE) -.if ${PREFIX} == ${X11BASE} || defined(USE_X_PREFIX) +.if ${PREFIX} == ${X11BASE_REL} || defined(USE_X_PREFIX) # User may have specified non-standard PREFIX for installing a port that # uses X .if ${X_WINDOW_SYSTEM:L} == xfree86-3 @@ -2177,23 +2272,38 @@ .if ${OSVERSION} < 491101 && ${PKGORIGIN} != "sysutils/pkg_install" EXTRACT_DEPENDS+= ${LOCALBASE}/sbin/pkg_info:${PORTSDIR}/sysutils/pkg_install .endif -PKG_CMD?= ${LOCALBASE}/sbin/pkg_create -PKG_ADD?= ${LOCALBASE}/sbin/pkg_add -PKG_DELETE?= ${LOCALBASE}/sbin/pkg_delete -PKG_INFO?= ${LOCALBASE}/sbin/pkg_info -PKG_VERSION?= ${LOCALBASE}/sbin/pkg_version +.if !defined(DESTDIR) +PKG_CMD?= ${LOCALBASE_REL}/sbin/pkg_create +PKG_ADD?= ${LOCALBASE_REL}/sbin/pkg_add +PKG_DELETE?= ${LOCALBASE_REL}/sbin/pkg_delete +PKG_INFO?= ${LOCALBASE_REL}/sbin/pkg_info +PKG_VERSION?= ${LOCALBASE_REL}/sbin/pkg_version +.else +PKG_CMD?= ${LOCALBASE_REL}/sbin/pkg_create +PKG_ADD?= ${CHROOT} ${DESTDIR} ${LOCALBASE_REL}/sbin/pkg_add +PKG_DELETE?= ${CHROOT} ${DESTDIR} ${LOCALBASE_REL}/sbin/pkg_delete +PKG_INFO?= ${CHROOT} ${DESTDIR} ${LOCALBASE_REL}/sbin/pkg_info +.endif .else +.if !defined(DESTDIR) PKG_CMD?= /usr/sbin/pkg_create PKG_ADD?= /usr/sbin/pkg_add PKG_DELETE?= /usr/sbin/pkg_delete PKG_INFO?= /usr/sbin/pkg_info PKG_VERSION?= /usr/sbin/pkg_version +.else +PKG_CMD?= /usr/sbin/pkg_create +PKG_ADD?= ${CHROOT} ${DESTDIR} /usr/sbin/pkg_add +PKG_DELETE?= ${CHROOT} ${DESTDIR} /usr/sbin/pkg_delete +PKG_INFO?= ${CHROOT} ${DESTDIR} /usr/sbin/pkg_info +PKG_VERSION?= ${CHROOT} ${DESTDIR} /usr/sbin/pkg_version +.endif .endif # Does the pkg_create tool support conflict checking? # XXX Slow? .if !defined(PKGINSTALLVER) -PKGINSTALLVER!= ${PKG_INFO} -P 2>/dev/null | ${SED} -e 's/.*: //' +PKGINSTALLVER!= ${CHROOT} ${DESTDIR} ${PKG_INFO} -P 2>/dev/null | ${SED} -e 's/.*: //' .endif .if ${PKGINSTALLVER} < 20030417 DISABLE_CONFLICTS= YES @@ -2220,7 +2330,7 @@ .endif .endif # where pkg_add records its dirty deeds. -PKG_DBDIR?= /var/db/pkg +PKG_DBDIR?= ${DESTDIR}/var/db/pkg MOTIFLIB?= -L${X11BASE}/lib -lXm -lXp @@ -2714,10 +2824,10 @@ PKGLATESTFILE= ${PKGLATESTREPOSITORY}/${LATEST_LINK}${PKG_SUFX} .if defined(PERL_CONFIGURE) -CONFIGURE_ARGS+= CC="${CC}" CCFLAGS="${CFLAGS}" PREFIX="${PREFIX}" \ - INSTALLPRIVLIB="${PREFIX}/lib" INSTALLARCHLIB="${PREFIX}/lib" +CONFIGURE_ARGS+= CC="${CC}" CCFLAGS="${CFLAGS}" PREFIX="${DESTDIR}${PREFIX}" \ + INSTALLPRIVLIB="${DESTDIR}${PREFIX}/lib" INSTALLARCHLIB="${DESTDIR}${PREFIX}/lib" CONFIGURE_SCRIPT?= Makefile.PL -MAN3PREFIX?= ${PREFIX}/lib/perl5/${PERL_VERSION} +MAN3PREFIX?= ${DESTDIR}${PREFIX}/lib/perl5/${PERL_VERSION} .undef HAS_CONFIGURE .endif @@ -2743,16 +2853,17 @@ WRKDIR=${WRKDIR} WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} \ SCRIPTDIR=${SCRIPTDIR} FILESDIR=${FILESDIR} \ PORTSDIR=${PORTSDIR} DEPENDS="${DEPENDS}" \ - PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} + PREFIX=${PREFIX} LOCALBASE=${LOCALBASE} X11BASE=${X11BASE} \ + DESTDIR=${DESTDIR} .if defined(BATCH) SCRIPTS_ENV+= BATCH=yes .endif .if ${PREFIX} == /usr -MANPREFIX?= /usr/share +MANPREFIX?= ${DESTDIR}/usr/share .else -MANPREFIX?= ${PREFIX} +MANPREFIX?= ${DESTDIR}${PREFIX} .endif .for sect in 1 2 3 4 5 6 7 8 9 @@ -2830,9 +2941,9 @@ .if defined(_MANPAGES) .if defined(NOMANCOMPRESS) -__MANPAGES:= ${_MANPAGES:S%^${PREFIX}/%%} +__MANPAGES:= ${_MANPAGES:S%^${DESTDIR}${PREFIX}/%%} .else -__MANPAGES:= ${_MANPAGES:S%^${PREFIX}/%%:S%$%.gz%} +__MANPAGES:= ${_MANPAGES:S%^${DESTDIR}${PREFIX}/%%:S%$%.gz%} .endif .if ${MANCOMPRESSED} == "yes" @@ -2847,16 +2958,16 @@ INFO_PATH?= info .endif -DOCSDIR?= ${PREFIX}/share/doc/${PORTNAME} -EXAMPLESDIR?= ${PREFIX}/share/examples/${PORTNAME} -DATADIR?= ${PREFIX}/share/${PORTNAME} - -PLIST_SUB+= DOCSDIR="${DOCSDIR:S,^${PREFIX}/,,}" \ - EXAMPLESDIR="${EXAMPLESDIR:S,^${PREFIX}/,,}" \ - DATADIR="${DATADIR:S,^${PREFIX}/,,}" +DOCSDIR?= ${DESTDIR}${PREFIX}/share/doc/${PORTNAME} +EXAMPLESDIR?= ${DESTDIR}${PREFIX}/share/examples/${PORTNAME} +DATADIR?= ${DESTDIR}${PREFIX}/share/${PORTNAME} + +PLIST_SUB+= DOCSDIR="${DOCSDIR:S,^${DESTDIR}${PREFIX}/,,}" \ + EXAMPLESDIR="${EXAMPLESDIR:S,^${DESTDIR}${PREFIX}/,,}" \ + DATADIR="${DATADIR:S,^${DESTDIR}${PREFIX}/,,}" -DESKTOPDIR?= ${PREFIX}/share/applications -_DESKTOPDIR_REL= ${DESKTOPDIR:S,^${PREFIX}/,,}/ +DESKTOPDIR?= ${DESTDIR}${PREFIX}/share/applications +_DESKTOPDIR_REL= ${DESKTOPDIR:S,^${DESTDIR}${PREFIX}/,,}/ .if ${_DESKTOPDIR_REL} == ${DESKTOPDIR}/ # DESKTOPDIR is not beneath PREFIX @@ -3016,7 +3127,7 @@ @cd ${.CURDIR} && ${SETENV} CURDIR=${.CURDIR} DISTNAME=${DISTNAME} \ DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} WRKSRC=${WRKSRC} \ PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \ - FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \ + FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} DESTDIR=${DESTDIR} PREFIX=${PREFIX} \ DEPENDS="${DEPENDS}" BUILD_DEPENDS="${BUILD_DEPENDS}" \ RUN_DEPENDS="${RUN_DEPENDS}" X11BASE=${X11BASE} \ CONFLICTS="${CONFLICTS}" \ @@ -3500,7 +3611,11 @@ done; \ if [ -n "$${conflicts_with}" ]; then \ ${ECHO_MSG}; \ - ${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s): "; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s): "; \ + else \ + ${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s) in ${DESTDIR}: "; \ + fi; \ for entry in $${conflicts_with}; do \ ${ECHO_MSG} " $${entry}"; \ done; \ @@ -3628,9 +3743,13 @@ .if !target(check-already-installed) check-already-installed: .if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER) +.if !defined(DESTDIR) @${ECHO_MSG} "===> Checking if ${PKGORIGIN} already installed" - @${MKDIR} ${PKG_DBDIR} - @already_installed=`${PKG_INFO} -q -O ${PKGORIGIN}`; \ +.else + @${ECHO_MSG} "===> Checking if ${PKGORIGIN} already installed in ${DESTDIR}" +.endif + @${MKDIR} ${PKG_DBDIR}; \ + already_installed=`${PKG_INFO} -q -O ${PKGORIGIN}`; \ if [ -n "$${already_installed}" ]; then \ for p in $${already_installed}; do \ prfx=`${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \ @@ -3642,12 +3761,20 @@ fi; \ fi; \ done; \ - fi; \ - if [ -d ${PKG_DBDIR}/${PKGNAME} -o -n "$${found_package}" ]; then \ + fi + @if [ -d ${PKG_DBDIR}/${PKGNAME} -o -n "$${found_package}" ]; then \ if [ -d ${PKG_DBDIR}/${PKGNAME} ]; then \ + if [ -z "${DESTDIR}" ] ; then \ ${ECHO_CMD} "===> ${PKGNAME} is already installed"; \ + else \ + ${ECHO_CMD} "===> ${PKGNAME} is already installed in ${DESTDIR}"; \ + fi; \ else \ + if [ -z "${DESTDIR}" ] ; then \ ${ECHO_CMD} "===> An older version of ${PKGORIGIN} is already installed ($${found_package})"; \ + else \ + ${ECHO_CMD} "===> An older version of ${PKGORIGIN} is already installed in ${DESTDIR} ($${found_package})"; \ + fi; \ fi; \ ${ECHO_CMD} " You may wish to \`\`make deinstall'' and install this port again"; \ ${ECHO_CMD} " by \`\`make reinstall'' to upgrade it properly."; \ @@ -3672,12 +3799,12 @@ .if !target(install-mtree) install-mtree: - @${MKDIR} ${PREFIX} + @${MKDIR} ${DESTDIR}${PREFIX} @if [ `${ID} -u` != 0 ]; then \ - if [ -w ${PREFIX}/ ]; then \ + if [ -w ${DESTDIR}${PREFIX}/ ]; then \ ${ECHO_MSG} "Warning: not superuser, you may get some errors during installation."; \ else \ - ${ECHO_MSG} "Error: ${PREFIX}/ not writable."; \ + ${ECHO_MSG} "Error: ${DESTDIR}${PREFIX}/ not writable."; \ ${FALSE}; \ fi; \ fi @@ -3688,9 +3815,9 @@ ${ECHO_CMD} "Copy it from a suitable location (e.g., /usr/src/etc/mtree) and try again."; \ exit 1; \ else \ - ${MTREE_CMD} ${MTREE_ARGS} ${PREFIX}/ >/dev/null; \ + ${MTREE_CMD} ${MTREE_ARGS} ${DESTDIR}${PREFIX}/ >/dev/null; \ if [ ${MTREE_FILE} = "/etc/mtree/BSD.local.dist" ]; then \ - cd ${PREFIX}/share/nls; \ + cd ${DESTDIR}${PREFIX}/share/nls; \ ${LN} -shf C POSIX; \ ${LN} -shf C en_US.US-ASCII; \ fi; \ @@ -3707,11 +3834,21 @@ .if defined(USE_LDCONFIG) || defined(USE_LDCONFIG32) || defined(INSTALLS_SHLIB) .if defined(USE_LDCONFIG) .if !defined(INSTALL_AS_USER) +.if !defined(DESTDIR) @${ECHO_MSG} "===> Running ldconfig" ${LDCONFIG} -m ${USE_LDCONFIG} .else + @${ECHO_MSG} "===> Running ldconfig in ${DESTDIR}" + ${CHROOT} ${DESTDIR} ${LDCONFIG} -m ${USE_LDCONFIG} +.endif +.else +.if !defined(DESTDIR) @${ECHO_MSG} "===> Running ldconfig (errors are ignored)" -${LDCONFIG} -m ${USE_LDCONFIG} +.else + @${ECHO_MSG} "===> Running ldconfig in ${DESTDIR} (errors are ignored)" + ${CHROOT} ${DESTDIR} -${LDCONFIG} -m ${USE_LDCONFIG} +.endif .endif .if ${USE_LDCONFIG:L} != "${PREFIX}/lib" @${ECHO_MSG} "===> Installing ldconfig configuration file" @@ -3728,11 +3865,21 @@ .endif .if defined(USE_LDCONFIG32) .if !defined(INSTALL_AS_USER) +.if !defined(DESTDIR) @${ECHO_MSG} "===> Running ldconfig" ${LDCONFIG} -32 -m ${USE_LDCONFIG32} .else + @${ECHO_MSG} "===> Running ldconfig in ${DESTDIR}" + ${CHROOT} ${DESTDIR} ${LDCONFIG} -32 -m ${USE_LDCONFIG32} +.endif +.else +.if !defined(DESTDIR) @${ECHO_MSG} "===> Running ldconfig (errors are ignored)" -${LDCONFIG} -32 -m ${USE_LDCONFIG32} +.else + @${ECHO_MSG} "===> Running ldconfig in ${DESTDIR} (errors are ignored)" + ${CHROOT} ${DESTDIR} -${LDCONFIG} -32 -m ${USE_LDCONFIG32} +.endif .endif @${ECHO_MSG} "===> Installing 32-bit ldconfig configuration file" .if defined(NO_LDCONFIG_MTREE) @@ -3748,10 +3895,18 @@ # This can be removed once, all ports have been converted to USE_LDCONFIG. .if defined(INSTALLS_SHLIB) .if !defined(INSTALL_AS_USER) +.if !defined(DESTDIR) @${ECHO_MSG} "===> Running ldconfig" +.else + @${ECHO_MSG} "===> Running ldconfig in ${DESTDIR}" +.endif ${LDCONFIG_CMD} .else +.if !defined(DESTDIR) @${ECHO_MSG} "===> Running ldconfig (errors are ignored)" +.else + @${ECHO_MSG} "===> Running ldconfig in ${DESTDIR} (errors are ignored)" +.endif -${LDCONFIG_CMD} .endif .endif @@ -3786,7 +3941,7 @@ | ${XARGS} -0 -J % ${FIND} % -prune ! -type l -type f -print0 2> /dev/null \ | ${XARGS} -0 -n 1 ${OBJDUMP} -R 2> /dev/null > ${WRKDIR}/.PLIST.objdump; \ if \ - ! ${AWK} -v audit="$${PORTS_AUDIT}" -f ${PORTSDIR}/Tools/scripts/security-check.awk \ + ! ${AWK} -v audit="$${PORTS_AUDIT}" -v destdir="${DESTDIR}" -f ${PORTSDIR}/Tools/scripts/security-check.awk \ ${WRKDIR}/.PLIST.flattened ${WRKDIR}/.PLIST.objdump ${WRKDIR}/.PLIST.setuid ${WRKDIR}/.PLIST.writable; \ then \ www_site=$$(cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} www-site); \ @@ -3853,30 +4008,57 @@ ${GREP} '^etc/rc.d/' ${TMPPLIST} > ${WRKDIR}/.PLIST.startup; \ if [ -s ${WRKDIR}/.PLIST.setuid -o -s ${WRKDIR}/.PLIST.network -o -s ${WRKDIR}/.PLIST.writable ]; then \ if [ -n "$$PORTS_AUDIT" ]; then \ - ${ECHO_MSG} "===> SECURITY REPORT (PARANOID MODE): "; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> SECURITY REPORT (PARANOID MODE): "; \ + else \ + ${ECHO_MSG} "===> SECURITY REPORT FOR ${DESTDIR} (PARANOID MODE): "; \ + fi; \ else \ - ${ECHO_MSG} "===> SECURITY REPORT: "; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> SECURITY REPORT: "; \ + else \ + ${ECHO_MSG} "===> SECURITY REPORT FOR ${DESTDIR}: "; \ + fi; \ fi; \ if [ -s ${WRKDIR}/.PLIST.setuid ] ; then \ - ${ECHO_MSG} " This port has installed the following binaries which execute with"; \ - ${ECHO_MSG} " increased privileges."; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} " This port has installed the following binaries,"; \ + else \ + ${ECHO_MSG} " This port has installed the following binaries into ${DESTDIR},"; \ + fi; \ + ${ECHO_MSG} " which execute with increased privileges."; \ ${CAT} ${WRKDIR}/.PLIST.setuid; \ ${ECHO_MSG}; \ fi; \ if [ -s ${WRKDIR}/.PLIST.network ] ; then \ - ${ECHO_MSG} " This port has installed the following files which may act as network"; \ - ${ECHO_MSG} " servers and may therefore pose a remote security risk to the system."; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} " This port has installed the following files, which may act as network"; \ + ${ECHO_MSG} " servers and may therefore pose a remote security risk to the system."; \ + else \ + ${ECHO_MSG} " This port has installed the following files into ${DESTDIR}, which may"; \ + ${ECHO_MSG} " act as network servers and may therefore pose a remote security risk to"; \ + ${ECHO_MSG} " the system."; \ + fi; \ ${CAT} ${WRKDIR}/.PLIST.network; \ ${ECHO_MSG}; \ if [ -s ${WRKDIR}/.PLIST.startup ] ; then \ - ${ECHO_MSG} " This port has installed the following startup scripts which may cause"; \ - ${ECHO_MSG} " these network services to be started at boot time."; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} " This port has installed the following startup scripts,"; \ + else \ + ${ECHO_MSG} " This port has installed the following startup scripts into ${DESTDIR},"; \ + fi; \ + ${ECHO_MSG} " which may cause these network services to be started at boot time."; \ ${SED} s,^,${PREFIX}/, < ${WRKDIR}/.PLIST.startup; \ ${ECHO_MSG}; \ fi; \ fi; \ if [ -s ${WRKDIR}/.PLIST.writable ] ; then \ - ${ECHO_MSG} " This port has installed the following world-writable files/directories."; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} " This port has installed the following world-writable files/directories."; \ + else \ + ${ECHO_MSG} " This port has installed the following world-writable files/directories"; \ + ${ECHO_MSG} " into ${DESTDIR}."; \ + fi; \ ${CAT} ${WRKDIR}/.PLIST.writable; \ ${ECHO_MSG}; \ fi; \ @@ -4018,7 +4200,11 @@ build-message: @${ECHO_MSG} "===> Building for ${PKGNAME}" install-message: +.if !defined(DESTDIR) @${ECHO_MSG} "===> Installing for ${PKGNAME}" +.else + @${ECHO_MSG} "===> Installing for ${PKGNAME} into ${DESTDIR}" +.endif package-message: @${ECHO_MSG} "===> Building package for ${PKGNAME}" @@ -4100,14 +4286,22 @@ ${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${.TARGET}" @${ECHO_MSG} "===> Returning to user credentials" .else +.if !defined(DESTDIR) @${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}" +.else + @${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN} from ${DESTDIR}" +.endif @found_names=`${PKG_INFO} -q -O ${PKGORIGIN}`; \ for p in $${found_names}; do \ check_name=`${ECHO_CMD} $${p} | ${SED} -e 's/-[^-]*$$//'`; \ if [ "$${check_name}" = "${PKGBASE}" ]; then \ prfx=`${PKG_INFO} -q -p $${p} 2> /dev/null | ${SED} -ne '1s|^@cwd ||p'`; \ if [ "x${PREFIX}" = "x$${prfx}" ]; then \ - ${ECHO_MSG} "===> Deinstalling $${p}"; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> Deinstalling $${p}"; \ + else \ + ${ECHO_MSG} "===> Deinstalling $${p} from ${DESTDIR}"; \ + fi; \ ${PKG_DELETE} -f $${p}; \ else \ ${ECHO_MSG} "===> $${p} has a different PREFIX: $${prfx}, skipping"; \ @@ -4115,7 +4309,11 @@ fi; \ done; \ if [ -z "$${found_names}" ]; then \ - ${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \ + else \ + ${ECHO_MSG} "===> ${PKGBASE} not installed in ${DESTDIR}, skipping"; \ + fi; \ fi @${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE} .endif @@ -4133,17 +4331,29 @@ ${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${.TARGET}" @${ECHO_MSG} "===> Returning to user credentials" .else +.if !defined(DESTDIR) @${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}" +.else + @${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN} from ${DESTDIR}" +.endif @deinstall_names=`${PKG_INFO} -q -O ${PKGORIGIN}`; \ if [ -n "$${deinstall_names}" ]; then \ for d in $${deinstall_names}; do \ - ${ECHO_MSG} "===> Deinstalling $${d}"; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> Deinstalling $${d}"; \ + else \ + ${ECHO_MSG} "===> Deinstalling $${d} from ${DESTDIR}"; \ + fi; \ ${PKG_DELETE} -f $${d}; \ done; \ else \ - ${ECHO_MSG} "===> ${PKGORIGIN} not installed, skipping"; \ - fi - @${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE} + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> ${PKGORIGIN} not installed, skipping"; \ + else \ + ${ECHO_MSG} "===> ${PKGORIGIN} not installed in ${DESTDIR}, skipping"; \ + fi; \ + fi; \ + ${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE} .endif .endif @@ -4534,16 +4744,24 @@ if [ X${USE_PACKAGE_DEPENDS} != "X" ]; then \ subpkgfile=`(cd $$dir; ${MAKE} $$depends_args -V PKGFILE)`; \ if [ -r "$${subpkgfile}" -a "$$target" = "${DEPENDS_TARGET}" ]; then \ - ${ECHO_MSG} "===> Installing existing package $${subpkgfile}"; \ - ${PKG_ADD} $${subpkgfile}; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> Installing existing package $${subpkgfile}"; \ + ${PKG_ADD} $${subpkgfile}; \ + else \ + ${ECHO_MSG} "===> Installing existing package $${subpkgfile} into ${DESTDIR}"; \ + ${PKG_ADD} -C ${DESTDIR} $${subpkgfile}; \ + fi; \ else \ (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \ fi; \ else \ (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \ - fi ; \ - ${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; \ - + fi; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; \ + else \ + ${ECHO_MSG} "===> Returning to build of ${PKGNAME} for ${DESTDIR}"; \ + fi; .for deptype in EXTRACT PATCH FETCH BUILD RUN ${deptype:L}-depends: @@ -4565,7 +4783,11 @@ ${ECHO_MSG} "Error: ${NONEXISTENT} exists. Please remove it, and restart the build."; \ ${FALSE}; \ else \ - ${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - found"; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - found"; \ + else \ + ${ECHO_MSG} "===> ${PKGNAME} depends on file in ${DESTDIR}: $$prog - found"; \ + fi; \ if [ ${_DEPEND_ALWAYS} = 1 ]; then \ ${ECHO_MSG} " (but building it anyway)"; \ notfound=1; \ @@ -4574,7 +4796,11 @@ fi; \ fi; \ else \ - ${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - not found"; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> ${PKGNAME} depends on file: $$prog - not found"; \ + else \ + ${ECHO_MSG} "===> ${PKGNAME} depends on file in ${DESTDIR}: $$prog - not found"; \ + fi; \ notfound=1; \ fi; \ else \ @@ -4584,7 +4810,11 @@ esac; \ if [ "$$pkg" != "" ]; then \ if ${PKG_INFO} "$$prog" > /dev/null 2>&1 ; then \ - ${ECHO_MSG} "===> ${PKGNAME} depends on package: $$prog - found"; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> ${PKGNAME} depends on package: $$prog - found"; \ + else \ + ${ECHO_MSG} "===> ${PKGNAME} depends on package in ${DESTDIR}: $$prog - found"; \ + fi; \ if [ ${_DEPEND_ALWAYS} = 1 ]; then \ ${ECHO_MSG} " (but building it anyway)"; \ notfound=1; \ @@ -4592,7 +4822,11 @@ notfound=0; \ fi; \ else \ - ${ECHO_MSG} "===> ${PKGNAME} depends on package: $$prog - not found"; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> ${PKGNAME} depends on package: $$prog - not found"; \ + else \ + ${ECHO_MSG} "===> ${PKGNAME} depends on package in ${DESTDIR}: $$prog - not found"; \ + fi; \ notfound=1; \ fi; \ if [ $$notfound != 0 ]; then \ @@ -4606,7 +4840,11 @@ fi; \ fi; \ elif ${WHICH} "$$prog" > /dev/null 2>&1 ; then \ - ${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - found"; \ + if [ -z "${PREFIX}" ] ; then \ + ${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - found"; \ + else \ + ${ECHO_MSG} "===> ${PKGNAME} depends on executable in ${DESTDIR}: $$prog - found"; \ + fi; \ if [ ${_DEPEND_ALWAYS} = 1 ]; then \ ${ECHO_MSG} " (but building it anyway)"; \ notfound=1; \ @@ -4614,7 +4852,11 @@ notfound=0; \ fi; \ else \ - ${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - not found"; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> ${PKGNAME} depends on executable: $$prog - not found"; \ + else \ + ${ECHO_MSG} "===> ${PKGNAME} depends on executable in ${DESTDIR}: $$prog - not found"; \ + fi; \ notfound=1; \ fi; \ fi; \ @@ -4650,18 +4892,34 @@ else \ dir=$${dir%%:*}; \ fi; \ - ${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $$lib"; \ - if ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \ - ${ECHO_MSG} " - found"; \ - if [ ${_DEPEND_ALWAYS} = 1 ]; then \ - ${ECHO_MSG} " (but building it anyway)"; \ - notfound=1; \ + if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $$lib"; \ + if ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \ + ${ECHO_MSG} " - found"; \ + if [ ${_DEPEND_ALWAYS} = 1 ]; then \ + ${ECHO_MSG} " (but building it anyway)"; \ + notfound=1; \ + else \ + notfound=0; \ + fi; \ else \ - notfound=0; \ + ${ECHO_MSG} " - not found"; \ + notfound=1; \ fi; \ else \ - ${ECHO_MSG} " - not found"; \ - notfound=1; \ + ${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library in ${DESTDIR}: $$lib"; \ + if ${CHROOT} ${DESTDIR} ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \ + ${ECHO_MSG} " - found"; \ + if [ ${_DEPEND_ALWAYS} = 1 ]; then \ + ${ECHO_MSG} " (but building it anyway)"; \ + notfound=1; \ + else \ + notfound=0; \ + fi; \ + else \ + ${ECHO_MSG} " - not found"; \ + notfound=1; \ + fi; \ fi; \ if [ $$notfound != 0 ]; then \ ${ECHO_MSG} "===> Verifying $$target for $$lib in $$dir"; \ @@ -4697,7 +4955,11 @@ (cd $$dir; ${MAKE} $$target $$depends_args) ; \ fi \ done - @${ECHO_MSG} "===> Returning to build of ${PKGNAME}" + @if [ -z "${DESTDIR}" ] ; then \ + ${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; \ + else \ + ${ECHO_MSG} "===> Returning to build of ${PKGNAME} for ${DESTDIR}"; \ + fi .endif .else @${DO_NADA} @@ -5196,14 +5458,14 @@ @if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \ if [ ! -e ${DOCSDIR}/${x} ]; then \ ${ECHO_CMD} ${DOCSDIR}/${x} | \ - ${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \ + ${SED} -e 's,^${DESTDIR}${PREFIX}/,,' >> ${TMPPLIST}; \ fi;fi .endfor @${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \ - ${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST} + ${SED} -ne 's,^${DESTDIR}${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:S,^${PREFIX}/,,}" >> ${TMPPLIST} + ${SED} -ne 's,^${DESTDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST} + @${ECHO_CMD} "@dirrm ${DOCSDIR:S,^${DESTDIR}${PREFIX}/,,}" >> ${TMPPLIST} .else @${DO_NADA} .endif @@ -5214,10 +5476,10 @@ # 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 + install-info --quiet ${DESTDIR}${PREFIX}/${INFO_PATH}/$i.info ${DESTDIR}${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} ${DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${DESTDIR}${PREFIX}/::g >> ${TMPPLIST} @${ECHO_CMD} "@exec install-info --quiet %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \ >> ${TMPPLIST} @if [ "`${DIRNAME} $i`" != "." ]; then \ @@ -5226,7 +5488,7 @@ .endfor .if (${PREFIX} != "/usr") @${ECHO_CMD} "@unexec if [ -f %D/${INFO_PATH}/dir ]; then if sed -e '1,/Menu:/d' %D/${INFO_PATH}/dir | grep -q '^[*] '; then true; else rm %D/${INFO_PATH}/dir; fi; fi" >> ${TMPPLIST} -.if (${PREFIX} != ${LOCALBASE} && ${PREFIX} != ${X11BASE} && ${PREFIX} != ${LINUXBASE}) +.if (${PREFIX} != ${LOCALBASE_REL} && ${PREFIX} != ${X11BASE_REL} && ${PREFIX} != ${LINUXBASE_REL}) @${ECHO_CMD} "@unexec rmdir %D/info 2> /dev/null || true" >> ${TMPPLIST} .endif .endif @@ -5237,7 +5499,7 @@ # deinstall-time .if !target(add-plist-post) add-plist-post: -.if (${PREFIX} != ${LOCALBASE} && ${PREFIX} != ${X11BASE} && ${PREFIX} != ${LINUXBASE} && ${PREFIX} != "/usr") +.if (${PREFIX} != ${LOCALBASE_REL} && ${PREFIX} != ${X11BASE_REL} && ${PREFIX} != ${LINUXBASE_REL} && ${PREFIX} != "/usr") @${ECHO_CMD} "@unexec rmdir %D 2> /dev/null || true" >> ${TMPPLIST} .else @${DO_NADA} @@ -5261,12 +5523,12 @@ @${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST} .if (${OSVERSION} >= 700007 || ( ${OSVERSION} < 700000 && ${OSVERSION} >= 600101 )) @for i in ${USE_RC_SUBR}; do \ - ${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${PREFIX}/etc/rc.d/$${i%.sh}; \ + ${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${DESTDIR}${PREFIX}/etc/rc.d/$${i%.sh}; \ ${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \ done .else @for i in ${USE_RC_SUBR}; do \ - ${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${PREFIX}/etc/rc.d/$${i%.sh}.sh; \ + ${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${DESTDIR}${PREFIX}/etc/rc.d/$${i%.sh}.sh; \ ${ECHO_CMD} "etc/rc.d/$${i%.sh}.sh" >> ${TMPPLIST}; \ done .endif @@ -5320,9 +5582,13 @@ fi @${RM} -rf ${PKG_DBDIR}/${PKGNAME} .endif - @if [ ! -d ${PKG_DBDIR}/${PKGNAME} ]; then \ - ${ECHO_MSG} "===> Registering installation for ${PKGNAME}"; \ - ${MKDIR} ${PKG_DBDIR}/${PKGNAME}; \ +.if !exists(${PKG_DBDIR}/${PKGNAME}) +.if !defined(DESTDIR) + @${ECHO_MSG} "===> Registering installation for ${PKGNAME}" +.else + @${ECHO_MSG} "===> Registering installation for ${PKGNAME} in ${DESTDIR}" +.endif + @${MKDIR} ${PKG_DBDIR}/${PKGNAME}; \ ${PKG_CMD} ${PKG_ARGS} -O ${PKGFILE} > ${PKG_DBDIR}/${PKGNAME}/+CONTENTS; \ ${CP} ${DESCR} ${PKG_DBDIR}/${PKGNAME}/+DESC; \ ${ECHO_CMD} ${COMMENT:Q} > ${PKG_DBDIR}/${PKGNAME}/+COMMENT; \ @@ -5345,8 +5611,8 @@ ${ECHO_CMD} ${PKGNAME} >> ${PKG_DBDIR}/$$dep/+REQUIRED_BY; \ fi; \ fi; \ - done; \ - fi + done +.endif .if !defined(NO_MTREE) @if [ -f ${MTREE_FILE} ]; then \ ${CP} ${MTREE_FILE} ${PKG_DBDIR}/${PKGNAME}/+MTREE_DIRS; \ diff -Nur /usr/ports/Mk/bsd.port.subdir.mk ../Mk/bsd.port.subdir.mk --- /usr/ports/Mk/bsd.port.subdir.mk Sat Jan 28 03:11:05 2006 +++ ../Mk/bsd.port.subdir.mk Sat Jul 15 22:39:39 2006 @@ -48,10 +48,10 @@ .if !defined(NOPRECIOUSMAKEVARS) .if !defined(ARCH) -ARCH!= /usr/bin/uname -p +ARCH!= ${DESTDIR}/usr/bin/uname -p .endif .if !defined(OSREL) -OSREL!= /usr/bin/uname -r | sed -e 's/[-(].*//' +OSREL!= ${DESTDIR}/usr/bin/uname -r | sed -e 's/[-(].*//' .endif .if !defined(OSVERSION) .if exists(/sbin/sysctl) @@ -61,23 +61,23 @@ .endif .endif .if !defined(PORTOBJFORMAT) -PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout +PORTOBJFORMAT!= test -x ${DESTDIR}/usr/bin/objformat && ${DESTDIR}/usr/bin/objformat || echo aout .endif .endif -ID?= /usr/bin/id +ID?= ${DESTDIR}/usr/bin/id UID!= ${ID} -u -LOCALBASE?= ${DESTDIR}/usr/local +LOCALBASE?= ${DESTDIR}${LOCALBASE_REL} .if exists(${LOCALBASE}/sbin/pkg_info) PKG_INFO?= ${LOCALBASE}/sbin/pkg_info .else -PKG_INFO?= /usr/sbin/pkg_info +PKG_INFO?= ${DESTDIR}/usr/sbin/pkg_info .endif -SED?= /usr/bin/sed +SED?= ${DESTDIR}/usr/bin/sed PKGINSTALLVER!= ${PKG_INFO} -P 2>/dev/null | ${SED} -e 's/.*: //' .if !defined(OPSYS) -OPSYS!= /usr/bin/uname -s +OPSYS!= ${DESTDIR}/usr/bin/uname -s .endif ECHO_MSG?= echo diff -Nur /usr/ports/Mk/bsd.python.mk ../Mk/bsd.python.mk --- /usr/ports/Mk/bsd.python.mk Fri Jun 23 05:35:14 2006 +++ ../Mk/bsd.python.mk Sat Jul 15 22:39:39 2006 @@ -404,7 +404,7 @@ @${ECHO} "Legal values are: 2.7 (default), 2.8, 2.9, 3.2" @${FALSE} .endif -ZOPEBASEDIR?= ${PREFIX}/${SZOPEBASEDIR} +ZOPEBASEDIR?= ${DESTDIR}${PREFIX}/${SZOPEBASEDIR} ZOPEPRODUCTDIR?= Products .endif diff -Nur /usr/ports/Mk/bsd.ruby.mk ../Mk/bsd.ruby.mk --- /usr/ports/Mk/bsd.ruby.mk Wed Jul 5 04:18:09 2006 +++ ../Mk/bsd.ruby.mk Sat Jul 15 22:39:39 2006 @@ -113,7 +113,7 @@ RUBY_VER?= ${RUBY_DEFAULT_VER} .if defined(RUBY) -.if !exists(${RUBY}) +.if !exists(${DESTDIR}${RUBY}) IGNORE= cannot install: you set the variable RUBY to "${RUBY}", but it does not seem to exist. Please specify an already installed ruby executable. .endif @@ -122,7 +122,7 @@ IGNORE= cannot install: you set the variable RUBY to "${RUBY}", but it failed to include rbconfig. Please specify a properly installed ruby executable. .endif -_RUBY_CONFIG= ${RUBY} -r rbconfig -e 'C = Config::CONFIG' -e +_RUBY_CONFIG= ${DESTDIR}${RUBY} -r rbconfig -e 'C = Config::CONFIG' -e RUBY_VERSION!= ${_RUBY_CONFIG} 'puts VERSION' RUBY_SUFFIX?= # empty diff -Nur /usr/ports/Mk/bsd.scons.mk ../Mk/bsd.scons.mk --- /usr/ports/Mk/bsd.scons.mk Fri Jul 14 00:10:39 2006 +++ ../Mk/bsd.scons.mk Tue Jul 18 17:41:15 2006 @@ -57,7 +57,7 @@ SCONS_ENV?= CCFLAGS="${CCFLAGS}" CXXFLAGS="${CXXFLAGS}" \ LINKFLAGS="${LINKFLAGS}" PKGCONFIGDIR="${PKGCONFIGDIR}" \ CPPPATH="${CPPPATH}" LIBPATH="${LIBPATH}" PREFIX="${PREFIX}" \ - CC="${CC}" CXX="${CXX}" + DESTDIR="${DESTDIR}" CC="${CC}" CXX="${CXX}" SCONS_ARGS?= SCONS_BUILDENV?= SCONS_TARGET?= --- destdir_mk.diff ends here --- --- destdir_tools.diff begins here --- diff -Nur /usr/ports/Tools/scripts/security-check.awk ../Tools/scripts/security-check.awk --- /usr/ports/Tools/scripts/security-check.awk Mon Jan 19 23:19:00 2004 +++ ../Tools/scripts/security-check.awk Wed Jul 19 15:10:04 2006 @@ -34,10 +34,18 @@ function print_header() { if (header_printed) return; - if (audit != "") - print "===> SECURITY REPORT (PARANOID MODE): "; - else - print "===> SECURITY REPORT: "; + if (audit != "") { + if (destdir == "") + print "===> SECURITY REPORT (PARANOID MODE): "; + else + print "===> SECURITY REPORT FOR", destdir, "(PARANOID MODE): "; + } + else { + if (destdir == "") + print "===> SECURITY REPORT: "; + else + print "===> SECURITY REPORT FOR", destdir, ": "; + } header_printed = 1; } function note_for_the_stupid(file) { return (file in stupid_binaries) ? (" (USES POSSIBLY INSECURE FUNCTIONS:" stupid_binaries[file] ")") : ""; } @@ -46,8 +54,14 @@ for (file in setuid_binaries) { if (!note_printed) { print_header(); - print " This port has installed the following binaries which execute with"; - print " increased privileges."; + if (destdir == "") { + print " This port has installed the following binaries, which execute with"; + print " increased privileges."; + } + else { + print " This port has installed the following binaries into", destdir, ", which"; + print " execute with increased privileges."; + } note_printed = 1; } print file note_for_the_stupid(file); @@ -58,8 +72,15 @@ for (file in network_binaries) { if (!note_printed) { print_header(); - print " This port has installed the following files which may act as network"; - print " servers and may therefore pose a remote security risk to the system."; + if (destdir == "") { + print " This port has installed the following files, which may act as network"; + print " servers and may therefore pose a remote security risk to the system."; + } + else { + print " This port has installed the following files into", destdir, ", which may"; + print " act as network servers and may therefore pose a remote security risk to"; + print " the system."; + } note_printed = 1; } print file note_for_the_stupid(file); @@ -70,8 +91,14 @@ for (file in startup_scripts) { if (!note_printed) { print_header(); - print " This port has installed the following startup scripts which may cause"; + if (destdir == "") { + print " This port has installed the following startup scripts, which may cause"; print " these network services to be started at boot time."; + } + else { + print " This port has installed the following startup scripts into", destdir, ", which"; + print " may cause these network services to be started at boot time."; + } note_printed = 1; } print file; @@ -83,7 +110,10 @@ for (file in writable_files) { if (!note_printed) { print_header(); - print " This port has installed the following world-writable files/directories."; + if (destdir == "") + print " This port has installed the following world-writable files/directories."; + else + print " This port has installed the following world-writable files/directories into", destdir, "."; note_printed = 1; } print file; --- destdir_tools.diff ends here --- >Release-Note: >Audit-Trail: Responsible-Changed-From-To: freebsd-ports-bugs->portmgr Responsible-Changed-By: edwin Responsible-Changed-When: Wed Jul 19 16:20:37 UTC 2006 Responsible-Changed-Why: bsd.port.mk is port manager territory http://www.freebsd.org/cgi/query-pr.cgi?pr=100555 State-Changed-From-To: open->analyzed State-Changed-By: erwin State-Changed-When: Wed Jul 19 17:19:17 UTC 2006 State-Changed-Why: Currently running on pointyhat in 6-exp. http://www.freebsd.org/cgi/query-pr.cgi?pr=100555 From: =?ISO-8859-1?Q?G=E1bor_K=F6vesd=E1n?= To: bug-followup@FreeBSD.org Cc: Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Mon, 24 Jul 2006 16:04:46 +0200 Updated patches: http://gabor.t-hosting.hu/patches/destdir_mk_4.diff http://gabor.t-hosting.hu/patches/destdir_tools.diff -- Cheers, Gabor From: =?ISO-8859-1?Q?G=E1bor_K=F6vesd=E1n?= To: bug-followup@FreeBSD.org Cc: Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Sat, 29 Jul 2006 00:01:50 +0200 Latest patches: http://gabor.t-hosting.hu/patches/destdir_mk_7.diff http://gabor.t-hosting.hu/patches/destdir_tools.diff http://gabor.t-hosting.hu/patches/destdir_ports_2.diff -- Cheers, Gabor From: =?ISO-8859-1?Q?G=E1bor_K=F6vesd=E1n?= To: bug-followup@FreeBSD.org, gabor@FreeBSD.org Cc: Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Thu, 03 Aug 2006 11:47:35 +0200 Incremental patch for ports with some additional fixes: http://gabor.t-hosting.hu/patches/destdir_ports_2_b.diff -- Cheers, Gabor From: =?ISO-8859-1?Q?G=E1bor_K=F6vesd=E1n?= To: bug-followup@FreeBSD.org, gabor@FreeBSD.org Cc: Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Fri, 04 Aug 2006 11:48:15 +0200 Another fix for two ports: http://gabor.t-hosting.hu/patches/destdir_ports_2_c.diff -- Cheers, Gabor From: Michael Nottebrock To: bug-followup@freebsd.org, gabor@freebsd.org Cc: Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Mon, 07 Aug 2006 22:58:27 +0200 The part of this PR that recently got committed to bsd.port.mk seems to cause breakage with KDE ports on pointyhat, see http://pointyhat.freebsd.org/errorlogs/i386-errorlogs/e.4.2006071303/kdelibs-nocups-3.5.3.log for an example. I get the same error ("cp: /var/db/pkg//+MTREE_DIRS: No such file or directory") on our own small build cluster, which runs a fork of the pointyhat scripts. Reverting bsd.port.mk to the previous revision got rid of the problem there. I'm not really sure whether KDE is actually the common thing for these errors - I've seen them myself for qt and arts, the pointyhat error is for kdehier - none of these three ports has much in common, kdehier doesn't even include bsd.kde.mk (although the failure on pointyhat as seen in the log above happens during the kdelibs build, which does). Please take a look at this as soon as possible. From: Michael Nottebrock To: bug-followup@freebsd.org, gabor@freebsd.org Cc: Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Mon, 07 Aug 2006 23:22:32 +0200 Update: I found the trigger for the bug: FORCE_PKG_REGISTER. kdelibs fails on pointyhat because it depends on kdehier via the old DEPENDS mechanism, which sets this flag. The failures I've been seeing on the KDE cluster happen because our custom automatic plist building script sets it as well. You can easily reproduce this with any port though via make -DFORCE_PKG_REGISTER package. From: =?ISO-8859-15?Q?G=E1bor_K=F6vesd=E1n?= To: Michael Nottebrock Cc: bug-followup@freebsd.org Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Mon, 07 Aug 2006 23:56:04 +0200 Michael Nottebrock wrote: > Update: > > I found the trigger for the bug: FORCE_PKG_REGISTER. > > kdelibs fails on pointyhat because it depends on kdehier via the old > DEPENDS mechanism, which sets this flag. > The failures I've been seeing on the KDE cluster happen because our > custom automatic plist building script sets it as well. > > You can easily reproduce this with any port though via make > -DFORCE_PKG_REGISTER package. > Thanks, I'm already working on the issue, the dependencies of kdelibs3 are just being built on my test machine, but this observation might help a lot. -- Cheers, Gabor From: Michael Nottebrock To: =?ISO-8859-15?Q?G=E1bor_K=F6vesd=E1n?= Cc: bug-followup@freebsd.org Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Tue, 08 Aug 2006 00:10:15 +0200 G=E1bor K=F6vesd=E1n schrieb: > Michael Nottebrock wrote: >> >> You can easily reproduce this with any port though via make >> -DFORCE_PKG_REGISTER package. >> =20 > Thanks, I'm already working on the issue, the dependencies of kdelibs3 > are just being built on my test machine, but this observation might > help a lot. It's actually a little more tricky to reproduce than just doing make -DFORCE_PKG_REGISTER package, but I found this sequence to be readily reproducable: cd /usr/ports/audio/yell make package # succeed= s make clean make package # fails, already installed make -DFORCE_PKG_REGISTER package # fails, with the error as seen on pointyhat make deinstall clean (redo from start) From: =?ISO-8859-15?Q?G=E1bor_K=F6vesd=E1n?= To: Michael Nottebrock Cc: bug-followup@freebsd.org Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Tue, 08 Aug 2006 00:49:41 +0200 Michael Nottebrock wrote: > Gábor Kövesdán schrieb: > >> Michael Nottebrock wrote: >> >>> You can easily reproduce this with any port though via make >>> -DFORCE_PKG_REGISTER package. >>> >>> >> Thanks, I'm already working on the issue, the dependencies of kdelibs3 >> are just being built on my test machine, but this observation might >> help a lot. >> > It's actually a little more tricky to reproduce than just doing make > -DFORCE_PKG_REGISTER package, but I found this sequence to be readily > reproducable: > > cd /usr/ports/audio/yell > make package # succeeds > make clean > make package # fails, > already installed > make -DFORCE_PKG_REGISTER package # fails, with the error as seen on > pointyhat > make deinstall clean > > (redo from start) > > This patch seems to fix it: http://gabor.t-hosting.hu/patches/destdir_package.diff Could you confirm it? Unfortunately, I don't have too much resource to test kdelibs3, the dependencies are still being built. Anyway, I dont' actually know yet why this ${RM} invocation was necessary and why this worked before. -- Cheers, Gabor From: =?ISO-8859-1?Q?G=E1bor_K=F6vesd=E1n?= To: bug-followup@FreeBSD.org, gabor@FreeBSD.org Cc: Subject: Re: ports/100555: [patch] bsd.port.mk - DESTDIR support Date: Tue, 08 Aug 2006 13:16:16 +0200 Here's the fix: http://gabor.t-hosting.hu/patches/destdir_fix.diff - s/${DESTDIR}${PREFIX}/${TARGETDIR}/ - Fix FORCE_PKG_REGISTER issues [1] - Make USE_RCORDER respect DESTDIR [2] - Make ldconfig stuff respect DESTDIR Reported by: lofi [1] Submitted by: sem [2] -- Cheers, Gabor State-Changed-From-To: analyzed->closed State-Changed-By: erwin State-Changed-When: Mon Aug 14 13:24:38 UTC 2006 State-Changed-Why: Committed, thanks! http://www.freebsd.org/cgi/query-pr.cgi?pr=100555 >Unformatted: