delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2014/07/22/06:17:25

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:date:from:to:subject:message-id:reply-to
:references:mime-version:content-type:in-reply-to; q=dns; s=
default; b=fViv96rlzs3PtroKPv+/Lc7QVgsppyNPlEplbWsrn4HTnjReFLDVL
7nS/Xvlzv3rX5VkLojIQNMDsIDjt7e7qIfoetDs2ZOM1Y+eMSzKhr92lYQH+sdJT
T4DyKzrE4WS45MHbpGi4NvIIS3QrnsQjWOWdz1RPsbBiztKi7I7YUU=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:date:from:to:subject:message-id:reply-to
:references:mime-version:content-type:in-reply-to; s=default;
bh=rXFBfA4B3X8PhSNqti9Ul1Je3Lk=; b=p26YP+C0WwyNUM0TtYN/eX/Nbrc0
l+0i8d8ZjM/wC7wKP2kPCREH9wrq8EwLrLq0AumOrLm8tW6mOg2XcZ4uH3ut/U1j
chsQT95xSNlMPqDRdY1Lm+H0dEeJhHwo0ocTp0cksvWqq5hak6cTBp7WBtBsxBrt
BL0VaxiVdBGYhXU=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Virus-Found: No
X-Spam-SWARE-Status: No, score=-5.9 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.2
X-HELO: calimero.vinschen.de
Date: Tue, 22 Jul 2014 12:16:47 +0200
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: Re: cygpath does not work properly in Makefile
Message-ID: <20140722101647.GD2451@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <53CCF82E DOT 7040407 AT gmail DOT com> <53CE2DEA DOT 1030003 AT uni-bremen DOT de>
MIME-Version: 1.0
In-Reply-To: <53CE2DEA.1030003@uni-bremen.de>
User-Agent: Mutt/1.5.23 (2014-03-12)

--1yeeQ81UyVL57Vl7
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Jul 22 11:24, G=C3=B6k=C3=A7e Aydos wrote:
> On 2014-07-21 13:23, Marco Atzeri wrote:
> >I presume the make you are using is not cygwin one
> >as the first form is understandable only by cygwin programs
>=20
> I do not see a difference between the two lines, because the command
> "cygpath" is used in both. I want to add that I get the behavior both und=
er
> Cygwin64 terminal and in Win command prompt with bash. If the cygpath is =
run
> embedded in another function, it does not produce a usable path for Windo=
ws
> programs.

It's not cygpath at fault here.  It's how make works.  Your patsubst
with a shell call in the replacement string simply doesn't work as
intended.

For testing purposes, replace cygpath with this simple test application:

$ cat > mycygpath.c <<EOF
#include <stdio.h>

int
main (int argc, char **argv)
{
  int i;
  for (i =3D 1; i < argc; ++i)
    {
      fprintf (stderr, "ARGV[%d] =3D '%s'\n", i, argv[i]);
      if (argv[i][0] =3D=3D '-')
      	continue;
      if (argv[i][0] =3D=3D '/')
      	{
	  if (!strncmp (argv[i], "/cygdrive/c/", 7))
	    printf ("C:/%s\n", argv[i] + 7);
	  else
	    printf ("C:/cygwin64/%s\n", argv[i] + 1);
	}
      else if (!strncmp (argv[i], "./", 2))
      	printf ("%s\n", argv[i] + 2);
      else
      	printf ("%s\n", argv[i]);
    }
  return 0;
}
EOF

It works exactly as cygpath for your testcase, but additionally
it reproduces the exact incoming argument string on stderr:

$ gcc -o mycygpath mycygpath.c
$ ./mycygpath lib1 ./relative.vhd /cygdrive/c/Windows/absolute.vhd
ARGV[1] =3D 'lib1'
lib1
ARGV[2] =3D './relative.vhd'
relative.vhd
ARGV[3] =3D '/cygdrive/c/Windows/absolute.vhd'
C:/Windows/absolute.vhd

Now change your Makefile like this:

$ cat > Makefile <<EOF
FILES =3D lib1 ./relative.vhd \
        lib2 /cygdrive/c/Windows/absolute.vhd

convert_absolute_paths_to_windows_paths:
        @echo 1: $(patsubst /%,$(shell ./mycygpath -m /%),$(FILES))
        @echo 2: $(shell ./mycygpath -m $(FILES))
EOF

And now run make:

$ make
ARGV[1] =3D '-m'
ARGV[2] =3D '/%'
ARGV[1] =3D '-m'
ARGV[2] =3D 'lib1'
ARGV[3] =3D './relative.vhd'
ARGV[4] =3D 'lib2'
ARGV[5] =3D '/cygdrive/c/Windows/absolute.vhd'
1: lib1 ./relative.vhd lib2 C:/cygwin64/cygdrive/c/Windows/absolute.vhd
2: lib1 relative.vhd lib2 C:/Windows/absolute.vhd

Observe what make gives to the first mycygpath call.  cygpath gets
a literal "/%" string.  mycygpath as well as cygpath will *correctly*
generate "C:/cygwin64/%", and then, *after* the call to $(shell), the
% substitution of patsubst will be performed.


Corinna

--=20
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

--1yeeQ81UyVL57Vl7
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBAgAGBQJTzjoPAAoJEPU2Bp2uRE+gwwkP/1rlENRqZtKb/yKB+REY1dmz
qAhPRHUo3YxT38AsMkB/uUa0KAKWK/N1UnR0yZ4fVcssJt8iazc4snTjl9q1WCtR
2WCBLWVQOaam3wEsz5aXhegByTXeXymrd3nso2lOf3O8bN1XCAWzF1h7IX0hld++
1SYVhtHwXNlojfxVYyA2TPKVGiCLrBeUVWGATi6nWDsvPKyCisewE6NSsRLK0SCJ
29BaTIOITepu9p6sEOVnugHov39C3hnI+/kVdfkdWBN69sG/anI6L459I/69chBn
7qaDF7ZHs1iiNugIcSNWqW+evs5RQHPYLaVytjjaz/oQlrF6VOaaRwBqbBnuN83m
KpLTnDG6dX8EFo5obXjIe71XKpTbRYA0yVLwA8BceCJ1Q2+6SwIKf6jURn/56pvo
YarY5QMt68GppKJ6l7LMl+qvwZJKNdDrZ5TDv3cnQ/6Mt1wGCgkmb+gbxSQaDKmJ
sqNqx8WGMbDfbCg25WvmKXLXZFdVKmDrAV8puoNc7cVMX6I0bTVuSuSMQz33jR4X
A9ABg/FeZvNYDue1uGi/jMVHEJREddRHD3A45bobxx71MRvXbYRWtvjdpBeL0mW4
7yHJoBPr55QstL7udMBItA6os4cb9zAMytVTETA04Mzthg7dm04dNs2Z8KXYSGwv
ZK7x8amA/GPx930l8pyP
=ZbFJ
-----END PGP SIGNATURE-----

--1yeeQ81UyVL57Vl7--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019