Date: Fri, 22 Nov 2013 12:58:47 GMT From: Dominic Fandrey <kamikaze@bsdforen.de> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/184170: fix ports DESTDIR support with FreeBSD 10 make Message-ID: <201311221258.rAMCwlvp045038@oldred.freebsd.org> Resent-Message-ID: <201311221300.rAMD00pX002360@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 184170 >Category: ports >Synopsis: fix ports DESTDIR support with FreeBSD 10 make >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Nov 22 13:00:00 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Dominic Fandrey >Release: stable/10 >Organization: private >Environment: FreeBSD mobileKamikaze.norad 10.0-BETA3 FreeBSD 10.0-BETA3 #1 r258147: Thu Nov 14 23:56:36 CET 2013 root@mobileKamikaze.norad:/usr/obj/HP6510b-10/amd64/usr/src/sys/HP6510b-10 amd64 >Description: # make DESTDIR=/root/tmpdest install ===> Creating some important subdirectories realpath: /root/tmpdest/___temp___: No such file or directory *** Error code 1 Stop. make: stopped in /usr/ports/ports-mgmt/pkg The cause for this problem is that bsd.destdir.mk gets a list of mount directories, containing of triplets: <path variable>:<path>:<mountdir in the chroot> The list is usually just PORTSDIR and DISTDIR, which is then automatically completed to a triplet. If the triplet is not predefined ___temp___ is used as the mount dir, which is handled later in the code to call "mktemp -d" (line 147). However before it is handled, the path is accessed by realpath (line 143), which causes make to fail, because the new BSD make in FreeBSD 10 invokes /bin/sh with the -e argument by default (see the .SHELL target in the manual page). The attached patch prevents shell failure by silencing the error and appending ||: to the realpath call (in case of failure call :, which simply returns 0). This allows proper handling of the ___temp___ case later in the code. >How-To-Repeat: Create a FreeBSD environment: # cd /usr/src # make installworld distdribution DESTDIR=/root/tmpdest # chroot /root/tmpdest # /etc/rc.d/ldconfig start # exit Afterwards try installing something from ports. # cd /usr/ports/ports-mgmt/pkg # make DESTDIR=/root/tmpdest install >Fix: Patch attached with submission follows: Index: Mk/bsd.destdir.mk =================================================================== --- Mk/bsd.destdir.mk (revision 334509) +++ Mk/bsd.destdir.mk (working copy) @@ -140,7 +140,7 @@ _tp=$${_entry#*:}; \ _host_path=`${REALPATH} $${_tp%:*}`; \ _dest_path=$${_entry##*:}; \ - _full_dest_path=`${REALPATH} $${_destdir}/$${_dest_path}`; \ + _full_dest_path=`${REALPATH} -q $${_destdir}/$${_dest_path} ||:`; \ _entry_was_created=0; \ _entry_should_mount=0; \ ${DEBUG_MSG} "$${_mount_var}:$${_host_path}:$${_full_dest_path}"; \ >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311221258.rAMCwlvp045038>