Bug 221296

Summary: 'make -C /path/to/some/port install' fails when /usr/ports is symbolic link to other directory
Product: Ports & Packages Reporter: Yasuhiro Kimura <yasu>
Component: Ports FrameworkAssignee: Port Management Team <portmgr>
Status: Closed FIXED    
Severity: Affects Some People CC: jrm, ports-bugs
Priority: ---    
Version: Latest   
Hardware: Any   
OS: Any   

Description Yasuhiro Kimura freebsd_committer freebsd_triage 2017-08-07 01:58:35 UTC
When /usr/ports is symbolic link to other directory, 'make -C /path/to/some/port install' fails as following:

root@eastasia[2042]# pwd
/root
root@eastasia[2043]# ls -l /usr/ports
lrwxr-xr-x  1 root  wheel  25  9月 30  2016 /usr/ports@ -> /usr0/freebsd/ports/ports
root@eastasia[2044]# make -C /usr/ports/lang/perl5.26 install
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.install_done.perl._usr_local. Stop

make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26
*** Error code 2

Stop.
make: stopped in /usr/ports/lang/perl5.26
root@eastasia[2045]# 

This error seems to happen whatever port is installed. And it happens not only with 'install' but also with some other targets:

root@eastasia[2045]# make -C /usr/ports/lang/perl5.26 extract
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.extract_done.perl._usr_local. Stop                                                                                                                                                         make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26                                                                  *** Error code 2               

Stop.                          
make: stopped in /usr/ports/lang/perl5.26                     
root@eastasia[2046]# make -C /usr/ports/lang/perl5.26 patch
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.patch_done.perl._usr_local. Stop                              
make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26   
*** Error code 2               

Stop.                          
make: stopped in /usr/ports/lang/perl5.26                     
root@eastasia[2047]# make -C /usr/ports/lang/perl5.26 configure
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.configure_done.perl._usr_local. Stop                          
make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26   
*** Error code 2               

Stop.                          
make: stopped in /usr/ports/lang/perl5.26                     
root@eastasia[2048]# make -C /usr/ports/lang/perl5.26 all
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.stage_done.perl._usr_local. Stop                              
make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26   
*** Error code 2               

Stop.                          
make: stopped in /usr/ports/lang/perl5.26                     
root@eastasia[2049]# make -C /usr/ports/lang/perl5.26 build
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.build_done.perl._usr_local. Stop                              
make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26   
*** Error code 2               

Stop. 
root@eastasia[2050]# make -C /usr/ports/lang/perl5.26 test
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.stage_done.perl._usr_local. Stop                              
make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26   
*** Error code 2               

Stop.                          
make: stopped in /usr/ports/lang/perl5.26                     
root@eastasia[2051]# make -C /usr/ports/lang/perl5.26 package 
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.package_done.perl._usr_local. Stop

make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26
*** Error code 2

Stop.
make: stopped in /usr/ports/lang/perl5.26
root@eastasia[2052]# make -C /usr/ports/lang/perl5.26 stage
make[1]: don't know how to make /usr/ports/lang/perl5.26/work/.stage_done.perl._usr_local. Stop

make[1]: stopped in /usr0/freebsd/ports/ports/lang/perl5.26
*** Error code 2

Stop.
make: stopped in /usr/ports/lang/perl5.26
root@eastasia[2053]#
Comment 1 Joseph Mingrone freebsd_committer freebsd_triage 2017-08-09 15:02:32 UTC
I am able to reproduce this.

% cd / && ls -lh home
lrwxr-xr-x  1 root  wheel     8B Jun 25  2015 home -> usr/home

% PORTSDIR=/home/jrm/scm/freebsd/freebsd-ports.svn make -C /home/jrm/scm/freebsd/freebsd-ports.svn/lang/perl5.26 install
===>  Switching to root credentials to create /var/db/ports/lang_perl5.26
Password:
===>  Returning to user credentials

===>  Switching to root credentials to write /var/db/ports/lang_perl5.26/options
Password:
===>  Returning to user credentials
make[1]: don't know how to make /home/jrm/scm/freebsd/freebsd-ports.svn/lang/perl5.26/work/.install_done.perl._usr_local. Stop

make[1]: stopped in /usr/home/jrm/scm/freebsd/freebsd-ports.svn/lang/perl5.26
*** Error code 2

Stop.
make: stopped in /home/jrm/scm/freebsd/freebsd-ports.svn/lang/perl5.26

After applying the patch in https://reviews.freebsd.org/D11934:

% PORTSDIR=/home/jrm/scm/freebsd/freebsd-ports.svn make -C /home/jrm/scm/freebsd/freebsd-ports.svn/lang/perl5.26 install
##################################################

      This is *NOT* the DEFAULT perl version

It will *NOT* install /usr/local/bin/perl

It will *ONLY* install /usr/local/bin/perl5.26.0

The default Perl version currently is 5.24.

If you want to use this version as the default,
stop the build now, add this line to your
/etc/make.conf, and then restart the build.

DEFAULT_VERSIONS+=perl5=5.26

##################################################
.
.
.
Comment 2 commit-hook freebsd_committer freebsd_triage 2017-09-17 14:20:48 UTC
A commit references this bug:

Author: jrm
Date: Sun Sep 17 14:20:15 UTC 2017
New revision: 450002
URL: https://svnweb.freebsd.org/changeset/ports/450002

Log:
  Ensure .CURDIR contains an absolute path without a trailing slash.

  Failed builds can occur when PORTSDIR is a symbolic link, or with

  make -C /usr/ports/category/port/

  PR:		221296
  Reported by:	yasu@utahime.org, rum1cro@yandex.ru
  Reviewed by:	bdrewery, sjg
  Approved by:	portmgr (bdrewery)
  Differential Revision:	https://reviews.freebsd.org/D11934

Changes:
  head/Mk/bsd.port.mk
Comment 3 Joseph Mingrone freebsd_committer freebsd_triage 2017-09-17 14:22:20 UTC
Thank you for reporting this.