Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Aug 2018 01:39:43 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 230492] make: -C options doesn't work as explained in man page about value of ${.CURDIR} when logical and physical directory are different.
Message-ID:  <bug-230492-227@https.bugs.freebsd.org/bugzilla/>

index | next in thread | raw e-mail

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230492

            Bug ID: 230492
           Summary: make: -C options doesn't work as explained in man page
                    about value of ${.CURDIR} when logical and physical
                    directory are different.
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: yasu@utahime.org

In the man page of make(1) '-C' options is explained as following.

----------------------------------------------------------------------
     -C directory
             Change to directory before reading the makefiles or doing
             anything else.  If multiple -C options are specified, each is
             interpreted relative to the previous one: -C / -C etc is
             equivalent to -C /etc.
----------------------------------------------------------------------

This means 'make -C /foo/bar/baz' works same as 'cd /foo/bar/baz; make'.

But there is an case that make doesn't behaves so. As explained in summary it
is about value of ${.CURDIR} and happens when logical and physical directory
are different.

Let me explain it by providing an example.

----------------------------------------------------------------------
yasu@rolling-vm-freebsd1[2018]% pwd
/home/yasu/tmp
yasu@rolling-vm-freebsd1[2019]% ls -l
total 1
lrwxr-xr-x  1 yasu  user  3  8月 10 08:21 bar@ -> foo
drwxr-xr-x  2 yasu  user  3  8月 10 08:20 foo/
----------------------------------------------------------------------

/home/yasu/tmp/foo is real directory and /home/yasu/tmp/bar is symbolic link to
it. So logical and physical expression of /home/yasu/tmp/bar is different.

----------------------------------------------------------------------
yasu@rolling-vm-freebsd1[2020]% cd /home/yasu/tmp/bar
yasu@rolling-vm-freebsd1[2021]% /bin/pwd -L
/home/yasu/tmp/bar
yasu@rolling-vm-freebsd1[2022]% /bin/pwd -P
/home/yasu/tmp/foo
----------------------------------------------------------------------

And there is following Makefile under /home/yasu/tmp/bar.

----------------------------------------------------------------------
yasu@rolling-vm-freebsd1[2023]% cat Makefile                                   
                                   ~/tmp/bar
all:
        @echo ${.CURDIR}
----------------------------------------------------------------------

It simply displays value of ${.CURDIR}.

Now let's execute make without any arguments. It causes following result.

----------------------------------------------------------------------
yasu@rolling-vm-freebsd1[2024]% make                                           
                                   ~/tmp/bar
/home/yasu/tmp/foo
----------------------------------------------------------------------

Physical expression of current working directory is displayed.

Next, let's execute make with -C options and logical expression of current
working directory. In this case it result as following.

----------------------------------------------------------------------
yasu@rolling-vm-freebsd1[2025]% make -C /home/yasu/tmp/bar                     
                                   ~/tmp/bar
/home/yasu/tmp/bar
----------------------------------------------------------------------

If '-C' options works exactly as explained in man page, same value as previous
execution, that is, physical expression of current working directory should be
displayed. Actually, however, what is displayed is logical expression of
current working directory. This means '-C' option doesn't work as explained in
man page.

I confirmed it happens on both 11.2-RELEASE and 12.0-CURRENT (r337160).

-- 
You are receiving this mail because:
You are the assignee for the bug.

help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-230492-227>